
Clinical bottom line In most cases wrist ganglia can safely be left alone , in the knowledge that they will fade away . Reference 1. FD Burke et al . Primary care referral protocol for wrist ganglia . Postgrad Med J 2003 79 : 329-331 . Bandolier has a wrist ganglion in its midst : it comes and goes ( more or less ) and causes mild to moderate pain from time to time , but only occasionally interferes with life . What can , or should , be done about it ? It is said that in olden days the standard treatment was to hit it with the family bible ( the size of the book is probably more important than the content ) , but in the absence of good quality studies of this approach , Bandolier looked further afield . There are several small randomised controlled trials and observational studies , but no systematic reviews . There is , however , an excellent review from Derby [ 1 ] , which although it does not claim to be systematic , does cover the important studies . Background Ganglia are benign fluid-filled lumps , formed when synovial fluid escapes from a joint and collects in the superficial layers . The ganglion capsule is formed from compressed stroma , with no cellular lining , and may be linked to the underlying joint capsule by a narrow channel acting as a one-way valve . Their cause is unclear , and only a small minority give a history of previous trauma . They are the most common swellings of the wrist , occurring more often in women than men , and in these aged 20 to 50 years . Many untreated ganglia resolve spontaneously , with 50 % of patients " ganglion free " at six years . Higher rates of spontaneous resolution ( 70 to 80 % ) are reported for ganglia in children . Despite this , a large number are referred to hand surgeons for advice and treatment . Patients seek advice mainly for cosmetic reasons , or because of concern about malignancy , or pain . Diagnosis in a primary care setting is usually straightforward . Wrist ganglia are site-specific : they overlie the scapholunate ligament on the dorsal surface , or the radiocarpal or scaphotrapezoal joints on the volar ( ventral ) surface , adjacent to the radial artery . Transillumination shows clear fluid , except where the ganglion is very deep or small , or where the skin is dark . Ultrasound is effective for demonstrating ganglia that are too small to palpate . A questionnaire survey of GPs in South Derbyshire showed that 90 % of responders ( 179 GPs ) felt that ganglia were fairly easy to diagnose , although the majority would not undertake any form of invasive treatment in primary care , and many would welcome a checklist to aid referral ( see below ) . GP referral letter for patients with wrist ganglia ( from Burke et al 2003 ) . All boxes in Section A should be ticked , along with the relevant boxes in Section B. I have assessed my patient using the Derby Ganglion Referral protocol and wish to refer the patient because : Section A 1. The ganglion transilluminates 2. The patient is aware that most ganglia resolve spontaneously with the passage of time 3. The patient is aware of the complications of ganglion excision ( 30 % recurrence and 15 % scar tenderness or numbness . Persistent wrist stiffness may also occur ) Section B 1. The patient 's ganglion is painful and restricts work and hobbies 2. The patient remains concerned by the risk of malignancy , despite aspiration and reassurance 3. The patient has failed to respond to aspiration of the ganglion 4. The ganglion is ugly 5. Other reasons ; please specify : Treatment options Reassurance should be the first therapeutic intervention for most patients ( and all children ) because of the high rate of spontaneous resolution and because it avoids the potential complications of invasive therapy . Aspiration alone can be successful , but recurrence rates are 60 to 70 % . For patients who remain concerned about malignancy , seeing the aspiration fluid can reinforce verbal reassurance , and reduce demand for surgical intervention . Aspiration with steroid injection does not show clear benefits over aspiration alone . The addition of hyaluronidase may reduce recurrence rates . Surgical excision is the most invasive therapy . Recurrence rates as low as 1 % have been reported , but most studies have rates between 14 and 40 % . In addition , 15 to 28 % of patients report scar sensitivity , joint stiffness or distal numbness . Patients should be made aware of these problems before referral for surgery . Arthroscopic excision may reduce recurrence and complication rates . Comment Bandolier is reassured that , in common with most wrist ganglia , this one should be left alone . It is always good to find a condition where the best treatment for most people is the simplest and cheapest : reassure and let nature take its course . 