How to remove caller from asterisk queue when they disconnect?

We have our asterisk queue set up with the below configuration in queues.conf. It works great except for one thing. When a caller in the queue hangs up they are not removed but retain there place in the queue until it comes up (it's there turn) and the member disconnects them because they are not there. As a result if there are three people in the queue but two get impatient and hang up a new caller will be told he is 4th in the queue when in reality he is 2nd. Does anyone know how I can fix this?

[custservice]

timeout = 12;

setqueuevar = yes
queue-thereare = queue-thereare
announce-frequency = 90
announce-position = yes

member => Dahdi/10
member => Dahdi/12
member => Dahdi/15

Your queue is configured correctly. You should trace a call where the caller hung up if the channel really did hang up.

If callers are coming in through a PRI or analog channel, you might need to look into hook flash or loop current disconnect.