
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 . 