diff --git a/apps/app_queue.c b/apps/app_queue.c
index 1fa81dc7c0130576a7badba03d3ea8c07842fc5e..7da41e16ba93028ef8cc30d811a812b3c3f99635 100644
--- a/apps/app_queue.c
+++ b/apps/app_queue.c
@@ -324,6 +324,7 @@ struct queue_ent {
 	time_t last_pos;                    /*!< Last time we told the user their position */
 	int opos;                           /*!< Where we started in the queue */
 	int handled;                        /*!< Whether our call was handled */
+	int pending;                        /*!< Non-zero if we are attempting to call a member */
 	int max_penalty;                    /*!< Limit the members that can take this call to this penalty or lower */
 	int linpos;							/*!< If using linear strategy, what position are we at? */
 	int linwrapped;						/*!< Is the linpos wrapped? */
@@ -2480,7 +2481,7 @@ static int is_our_turn(struct queue_ent *qe)
 
 		ast_debug(1, "There are %d available members.\n", avl);
 	
-		while ((idx < avl) && (ch) && (ch != qe)) {
+		while ((idx < avl) && (ch) &&  !ch->pending && (ch != qe)) {
 			idx++;
 			ch = ch->next;			
 		}
@@ -2907,6 +2908,7 @@ static int try_calling(struct queue_ent *qe, const char *options, char *announce
 	else
 		to = (qe->parent->timeout) ? qe->parent->timeout * 1000 : -1;
 	orig = to;
+	++qe->pending;
 	ring_one(qe, outgoing, &numbusies);
 	ao2_unlock(qe->parent);
 	if (use_weight)
@@ -2926,6 +2928,7 @@ static int try_calling(struct queue_ent *qe, const char *options, char *announce
 	ao2_unlock(qe->parent);
 	peer = lpeer ? lpeer->chan : NULL;
 	if (!peer) {
+		qe->pending = 0;
 		if (to) {
 			/* Must gotten hung up */
 			res = -1;