Local Channel - Queues and Penalty Issue

We have a setup using local/n context channels as the queue interfaces.
We are running the latest Digium Asterisk C.3.7.2 which includes all the patches and backport of the queue status bugs and the devstate of mapping a phone status to the local channel status. The goal is I will have multiple agents at different penalty inside the queue. Problem is the call is not being sent up to the next level of penalty when Agent is BUSY on the phone (DND on or just making an outbound call). If the Agent is busy b/c he received a call from the queue, then the queue knows the local/n channel status of being IN CALL so it knows to present the call to the next set of agents. Agents receives and make calls so this would be a problem of an agent holding up a queue if he makes an outbound call while many agents with higher penalty would be available to take a call but won’t be presented with the call.

*CLI> queue show q1
q1 has 0 calls (max unlimited) in ‘ringall’ strategy (0s holdtime), W:3, C:0, A:1, SL:0.0% within 15s
Members:
Local/1006@XYZ/n with penalty 1 (dynamic) (Not in use) has taken no calls yet
Local/1020@XYZ/n with penalty 9 (dynamic) (Not in use) has taken no calls yet
No Callers

We add queue using the following method manually:
add queue member Local/1006@XYZ/n to q1 penalty 9 as Local/1006@XYZ/n state_interface SIP/1513

I have call-limit set to 1.
I have limitonpeers=yes

-- Executing Queue("SIP/ARS_GW2-0000002e", "q1|t|||6000")


– Executing [1006@q:4] Dial(“Local/1006@XYZ-55c0,2”, “SIP/1513|5|t”) in new stack
– Called 1513
– Got SIP response 486 “Busy Here” back from 1.1.1.1
– SIP/1513-00000033 is busy

It would just repeats and try to dial Local/1006 (aka SIP/1513 ) and never moves onto Agent Local/1020. Again its not an issue if the agent is busy from handling a call presented by the queue, the local channel status would change to:
Local/1006@XYZ/n with penalty 1 (dynamic) (In use) has taken no calls yet
Local/1020@XYZ/n with penalty 9 (dynamic) (Not in use) has taken no calls yet

How can we subscribe the queue channel status to the SIP device status. I tried working with DEVSTATE variable but did not have much luck with that and hints. I could force set the channel to be IN USE on a BUSY dialstatus and force a back to Not In Use after the agent is done on the call using macro to run codes to change status. I think I did it all wrong with that and don’t want to share what I attempted. 1.4 does not officially support hints fully is what I understand and only have portions of the new device_state in the 1.6+ releases.

I just want to add and want to know WHY THIS IS NOT A PROBLEM if I have the following SIP channel as a queue members with the higher priority:

*CLI> show queue q1
q1 has 1 calls (max unlimited) in ‘ringall’ strategy (20s holdtime), W:3, C:4, A:3, SL:75.0% within 15s
Members:
SIP/1513 (dynamic) (Not in use) has taken no calls yet
Local/1020@XYZ/n with penalty 9 (dynamic) (In use) has taken 1 calls (last was 489

SIP/1513 is on DND and the call does get sent to Local/1020! SIP/1513 status in the queue remains the same, “Not in use”.