As per Phil W, mix your training up.
Although I'm still not fast, I improved greatly by doing roughly the following (each step to be taken in order):
1) Run comfortably for an hour and measure how far you ran.
2) Run 1/4 of this distance in 12 minutes, repeat 3 times resting for 3 minutes between each rep.
3) Sprint session: Measure out about 200m, sprint 1 length 6 times resting between each 200m length but reducing the rest between each one (i.e. run/rest 1m30s/run/rest 1m15s/run/rest 60s/run/rest 45s/run/rest 30s/run). Repeat 3 times (4 if you can manage!)
4) Hill session: Find a hill about 800m long and run up it/jog down. You're trying to aim for consistancy not speed and for it to take about twice as long to jog down as it did to run up. Repeat 8 to 10 times.
5) Run about 1.5 times the distance you are aiming to compete over.
6) Run the distance you will compete over at 'race' pace measure your time and marvel at the huge performance increase
The real eye-opener for me was how much quicker I became after a couple of the crazy sprint sessions - it was almost as though this taught me just how high my heart rate could go and therefore how little I was pushing myself on the longer runs.
Hope this helps.