
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 