
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 