
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 » 