diff --git a/channels/chan_zap.c b/channels/chan_zap.c
index b2ce299f382f81fc6cd56f78782301d7530487d1..d045ef8f2ad658103c78d6632f056acfcd2a54d0 100755
--- a/channels/chan_zap.c
+++ b/channels/chan_zap.c
@@ -6147,7 +6147,7 @@ next:
 static int pri_find_empty_chan(struct zt_pri *pri)
 {
 	int x;
-	for (x=pri->numchans;x>0;x--) {
+	for (x=pri->numchans;x>=0;x--) {
 		if (pri->pvts[x] && !pri->pvts[x]->owner)
 			return x;
 	}
@@ -6162,7 +6162,7 @@ static int pri_find_principle(struct zt_pri *pri, int channel)
 	span = PRI_SPAN(channel);
 	channel = PRI_CHANNEL(channel);
 	
-	for (x=1;x<pri->numchans;x++) {
+	for (x=0;x<pri->numchans;x++) {
 		if (pri->pvts[x] && (pri->pvts[x]->prioffset == channel) && (pri->logicalspan == span)) {
 			principle = x;
 			break;
@@ -6185,7 +6185,7 @@ static int pri_fixup_principle(struct zt_pri *pri, int principle, q931_call *c)
 		(pri->pvts[principle]) && 
 		(pri->pvts[principle]->call == c))
 		return principle;
-	for (x=1;x<pri->numchans;x++) {
+	for (x=0;x<pri->numchans;x++) {
 		if (!pri->pvts[x]) continue;
 		if (pri->pvts[x]->call == c) {
 			/* Found our call */
@@ -6410,7 +6410,7 @@ static void *pri_dchannel(void *vpri)
 				   (activeidles > pri->minidle)) {
 				/* Mark something for hangup if there is something 
 				   that can be hungup */
-				for (x=pri->numchans;x>0;x--) {
+				for (x=pri->numchans;x>=0;x--) {
 					/* find a candidate channel */
 					if (pri->pvts[x] && pri->pvts[x]->owner && pri->pvts[x]->isidlecall) {
 						pri->pvts[x]->owner->_softhangup |= AST_SOFTHANGUP_DEV;
@@ -6537,7 +6537,7 @@ static void *pri_dchannel(void *vpri)
 				} else {
 					if (option_verbose > 2)
 						ast_verbose(VERBOSE_PREFIX_2 "Restart on requested on entire span %d\n", pri->span);
-					for (x=1;x < pri->numchans;x++)
+					for (x=0;x < pri->numchans;x++)
 						if (pri->pvts[x]) {
 							ast_mutex_lock(&pri->pvts[x]->lock);
 							if (pri->pvts[x]->call) {
@@ -6933,7 +6933,7 @@ static void *pri_dchannel(void *vpri)
 					/* Sometime switches (e.g. I421 / British Telecom) don't give us the
 					   channel number, so we have to figure it out...  This must be why
 					   everybody resets exactly a channel at a time. */
-					for (x=1;x<pri->numchans;x++) {
+					for (x=0;x<pri->numchans;x++) {
 						if (pri->pvts[x] && pri->pvts[x]->resetting) {
 							chanpos = x;
 							ast_mutex_lock(&pri->pvts[chanpos]->lock);