diff --git a/apps/app_dial.c b/apps/app_dial.c
index f9e6b42822244e5aa9ad1c50bf0070610d945d9f..bfc93f69fca5ab660a28d16b7d7411341dd2f9a3 100755
--- a/apps/app_dial.c
+++ b/apps/app_dial.c
@@ -203,11 +203,15 @@ static struct ast_channel *wait_for_answer(struct ast_channel *in, struct localu
 						o->stillgoing = 0;
 						numbusies++;
 					} else {
-						if (in->callerid && !o->chan->callerid) {
+						if (in->callerid) {
+							if (o->chan->callerid)
+								free(o->chan->callerid);
 							o->chan->callerid = malloc(strlen(in->callerid) + 1);
 							strncpy(o->chan->callerid, in->callerid, strlen(in->callerid) + 1);
 						}
-						if (in->ani && !o->chan->ani) {
+						if (in->ani) {
+							if (o->chan->ani)
+								free(o->chan->ani);
 							o->chan->ani = malloc(strlen(in->ani) + 1);
 							strncpy(o->chan->ani, in->ani, strlen(in->ani) + 1);
 						}