diff --git a/channels/chan_zap.c b/channels/chan_zap.c
index cd8dc2ebc74b7e6eaa2ec41880cc0879240a7b13..dd3cf5eaea66f383306677ca5420f3b7006922b9 100755
--- a/channels/chan_zap.c
+++ b/channels/chan_zap.c
@@ -1901,22 +1901,28 @@ static int zt_call(struct ast_channel *ast, char *rdest, int timeout)
 #endif
 		ast_log(LOG_DEBUG, "Dialing '%s'\n", c);
 		p->dop.op = ZT_DIAL_OP_REPLACE;
-		if (p->sig == SIG_FEATD) {
+
+		c += p->stripmsd;
+
+		switch (p->sig) {
+		case SIG_FEATD:
 			l = ast->cid.cid_num;
 			if (l) 
-				snprintf(p->dop.dialstr, sizeof(p->dop.dialstr), "T*%s*%s*", l, c + p->stripmsd);
+				snprintf(p->dop.dialstr, sizeof(p->dop.dialstr), "T*%s*%s*", l, c);
 			else
-				snprintf(p->dop.dialstr, sizeof(p->dop.dialstr), "T**%s*", c + p->stripmsd);
-		} else 
-		if (p->sig == SIG_FEATDMF) {
+				snprintf(p->dop.dialstr, sizeof(p->dop.dialstr), "T**%s*", c);
+			break;
+		case SIG_FEATDMF:
 			l = ast->cid.cid_num;
 			if (l) 
-				snprintf(p->dop.dialstr, sizeof(p->dop.dialstr), "M*00%s#*%s#", l, c + p->stripmsd);
+				snprintf(p->dop.dialstr, sizeof(p->dop.dialstr), "M*00%s#*%s#", l, c);
 			else
-				snprintf(p->dop.dialstr, sizeof(p->dop.dialstr), "M*02#*%s#", c + p->stripmsd);
-		} else 
-		if (p->sig == SIG_FEATDMF_TA) {
+				snprintf(p->dop.dialstr, sizeof(p->dop.dialstr), "M*02#*%s#", c);
+			break;
+		case SIG_FEATDMF_TA:
+		{
 			char *cic = NULL, *ozz = NULL;
+
 			/* If you have to go through a Tandem Access point you need to use this */
 			ozz = pbx_builtin_getvar_helper(p->owner, "FEATDMF_OZZ");
 			if (!ozz)
@@ -1930,19 +1936,23 @@ static int zt_call(struct ast_channel *ast, char *rdest, int timeout)
 				return -1;
 			}
 			snprintf(p->dop.dialstr, sizeof(p->dop.dialstr), "M*%s%s#", ozz, cic);
-			snprintf(p->finaldial, sizeof(p->finaldial), "M*%s#", c + p->stripmsd);
+			snprintf(p->finaldial, sizeof(p->finaldial), "M*%s#", c);
 			p->whichwink = 0;
-		} else
-		if (p->sig == SIG_E911) {
+		}
+			break;
+		case SIG_E911:
 			ast_copy_string(p->dop.dialstr, "M*911#", sizeof(p->dop.dialstr));
-		} else
-		if (p->sig == SIG_FEATB) {
-			snprintf(p->dop.dialstr, sizeof(p->dop.dialstr), "M*%s#", c + p->stripmsd);
-		} else 
- 		if(p->pulse)
- 			snprintf(p->dop.dialstr, sizeof(p->dop.dialstr), "P%sw", c + p->stripmsd);
- 		else
-			snprintf(p->dop.dialstr, sizeof(p->dop.dialstr), "T%sw", c + p->stripmsd);
+			break;
+		case SIG_FEATB:
+			snprintf(p->dop.dialstr, sizeof(p->dop.dialstr), "M*%s#", c);
+			break;
+		default:
+			if (p->pulse)
+				snprintf(p->dop.dialstr, sizeof(p->dop.dialstr), "P%sw", c);
+			else
+				snprintf(p->dop.dialstr, sizeof(p->dop.dialstr), "T%sw", c);
+		}
+
 		if (p->echotraining && (strlen(p->dop.dialstr) > 4)) {
 			memset(p->echorest, 'w', sizeof(p->echorest) - 1);
 			strcpy(p->echorest + (p->echotraining / 400) + 1, p->dop.dialstr + strlen(p->dop.dialstr) - 2);
@@ -1962,7 +1972,8 @@ static int zt_call(struct ast_channel *ast, char *rdest, int timeout)
 		} else
 			ast_log(LOG_DEBUG, "Deferring dialing...\n");
 		p->dialing = 1;
-		if (strlen(c + p->stripmsd) < 1) p->dialednone = 1;
+		if (ast_strlen_zero(c))
+			p->dialednone = 1;
 		ast_setstate(ast, AST_STATE_DIALING);
 		break;
 	case 0: