diff --git a/channels/chan_zap.c b/channels/chan_zap.c
index 2c8da8ddd43a02b7955c5e84de519daaf6893032..3c1ad5292d54e15a75503de44af92aa9294d5ee7 100755
--- a/channels/chan_zap.c
+++ b/channels/chan_zap.c
@@ -2654,11 +2654,14 @@ static struct ast_frame *zt_handle_event(struct ast_channel *ast)
 #ifdef ZAPATA_PRI
 #ifdef PRI_DESTROYCALL
 			if (p->call) {
-				if (p->pri && p->pri->pri)
+				if (p->pri && p->pri->pri) {
+					pri_hangup(p->pri->pri, p->call, -1);
 					pri_destroycall(p->pri->pri, p->call);
-				else
+				} else
 					ast_log(LOG_WARNING, "The PRI Call have not been destroyed\n");
 			}
+			if (p->owner)
+				p->owner->_softhangup |= AST_SOFTHANGUP_DEV;
 			p->call = NULL;
 #else
 #error Please "cvs update" and recompile libpri
@@ -5699,14 +5702,16 @@ static void *pri_dchannel(void *vpri)
 				for (i=0; i<=pri->channels; i++) {
 					struct zt_pvt *p = pri->pvt[i];
 					if (p) {
-						p->owner->_softhangup |= AST_SOFTHANGUP_DEV;
 						if (p->call) {
-							if (p->pri && p->pri->pri)
+							if (p->pri && p->pri->pri) {
+								pri_hangup(p->pri->pri, p->call, -1);
 								pri_destroycall(p->pri->pri, p->call);
-							else
-								ast_log(LOG_WARNING, "The PRI Call have not been destroyed on channel %s\n",p->owner->name);
+								p->call = NULL;
+							} else
+								ast_log(LOG_WARNING, "The PRI Call have not been destroyed\n");
 						}
-						p->call = NULL;
+						if (p->owner)
+							p->owner->_softhangup |= AST_SOFTHANGUP_DEV;
 						p->inalarm = 1;
 					}
 				}