
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 