diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index fda8d4fbca2d3e4953a4b76684b6dc1ed8b302df..5ee2eadad9e1e0b3b2d5ba449ab3587aa2656709 100755
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -3674,13 +3674,14 @@ static void handle_response(struct sip_pvt *p, int resp, char *rest, struct sip_
 	msg = strchr(c, ' ');
 	if (!msg) msg = ""; else msg++;
 	owner = p->owner;
+	/* Acknowledge whatever it is destined for */
+	__sip_ack(p, seqno, 0);
 	if (p->peerpoke) {
 		/* We don't really care what the response is, just that it replied back. 
 		   Well, as long as it's not a 100 response...  since we might
 		   need to hang around for something more "difinitive" */
 		if (resp != 100) {
 			int statechanged = 0;
-			__sip_ack(p, seqno, 0);
 			peer = p->peerpoke;
 			gettimeofday(&tv, NULL);
 			pingtime = (tv.tv_sec - peer->ps.tv_sec) * 1000 +
@@ -3718,7 +3719,6 @@ static void handle_response(struct sip_pvt *p, int resp, char *rest, struct sip_
 		}
 	} else if (p->outgoing) {
 		/* Acknowledge sequence number */
-		__sip_ack(p, seqno, 0);
 		if (p->initid > -1) {
 			/* Don't auto congest anymore since we've gotten something useful back */
 			ast_sched_del(sched, p->initid);