diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index 6544972a3baa88a9101a488ae27941c3919b5938..fbe7ed1d6c1a73280fee576acff3ee6500ab5bb3 100644
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -1125,7 +1125,7 @@ struct sip_registry {
 		AST_STRING_FIELD(hostname);	/*!< Domain or host we register to */
 		AST_STRING_FIELD(secret);	/*!< Password in clear text */	
 		AST_STRING_FIELD(md5secret);	/*!< Password in md5 */
-		AST_STRING_FIELD(contact);	/*!< Contact extension */
+		AST_STRING_FIELD(callback);	/*!< Contact extension */
 		AST_STRING_FIELD(random);
 	);
 	int portno;			/*!<  Optional port override */
@@ -4413,7 +4413,7 @@ static int sip_register(char *value, int lineno)
 	char username[256] = "";
 	char *hostname=NULL, *secret=NULL, *authuser=NULL;
 	char *porta=NULL;
-	char *contact=NULL;
+	char *callback=NULL;
 
 	if (!value)
 		return -1;
@@ -4435,11 +4435,11 @@ static int sip_register(char *value, int lineno)
 			*authuser++ = '\0';
 	}
 	/* split host[:port][/contact] */
-	contact = strchr(hostname, '/');
-	if (contact)
-		*contact++ = '\0';
-	if (ast_strlen_zero(contact))
-		contact = "s";
+	callback = strchr(hostname, '/');
+	if (callback)
+		*callback++ = '\0';
+	if (ast_strlen_zero(callback))
+		callback = "s";
 	porta = strchr(hostname, ':');
 	if (porta) {
 		*porta++ = '\0';
@@ -4462,7 +4462,7 @@ static int sip_register(char *value, int lineno)
 
 	regobjs++;
 	ASTOBJ_INIT(reg);
-	ast_string_field_set(reg, contact, contact);
+	ast_string_field_set(reg, callback, callback);
 	if (username)
 		ast_string_field_set(reg, username, username);
 	if (hostname)
@@ -7156,7 +7156,8 @@ static int transmit_register(struct sip_registry *r, int sipmethod, const char *
 		if (!ast_strlen_zero(r->username))
 			ast_string_field_set(p, username, r->username);
 		/* Save extension in packet */
-		ast_string_field_set(p, exten, r->contact);
+		if (!ast_strlen_zero(r->callback))
+			ast_string_field_set(p, exten, r->callback);
 
 		/*
 		  check which address we should use in our contact header 
@@ -15643,7 +15644,7 @@ static struct sip_peer *build_peer(const char *name, struct ast_variable *v, str
 	time_t regseconds = 0;
 	struct ast_flags peerflags[2] = {{(0)}};
 	struct ast_flags mask[2] = {{(0)}};
-	char contact[256] = "";
+	char callback[256] = "";
 
 
 	if (!realtime)
@@ -15779,8 +15780,8 @@ static struct sip_peer *build_peer(const char *name, struct ast_variable *v, str
 			ast_copy_string(peer->language, v->value, sizeof(peer->language));
 		} else if (!strcasecmp(v->name, "regexten")) {
 			ast_copy_string(peer->regexten, v->value, sizeof(peer->regexten));
-		} else if (!strcasecmp(v->name, "contact")) {
-			ast_copy_string(contact, v->value, sizeof(contact));
+		} else if (!strcasecmp(v->name, "callbackextension")) {
+			ast_copy_string(callback, v->value, sizeof(callback));
 		} else if (!strcasecmp(v->name, "call-limit")) {
 			peer->call_limit = atoi(v->value);
 			if (peer->call_limit < 0)
@@ -15873,10 +15874,10 @@ static struct sip_peer *build_peer(const char *name, struct ast_variable *v, str
 		reg_source_db(peer);
 	ASTOBJ_UNMARK(peer);
 	ast_free_ha(oldha);
-	if (!ast_strlen_zero(contact)) { /* build string from peer info */
+	if (!ast_strlen_zero(callback)) { /* build string from peer info */
 		char *reg_string;
 
-		asprintf(&reg_string, "%s:%s@%s/%s", peer->username, peer->secret, peer->tohost, contact);
+		asprintf(&reg_string, "%s:%s@%s/%s", peer->username, peer->secret, peer->tohost, callback);
 		if (reg_string) {
 			sip_register(reg_string, 0); /* XXX TODO: count in registry_count */
 			free(reg_string);
diff --git a/configs/sip.conf.sample b/configs/sip.conf.sample
index cfbe1dda401732b176323ae299f003f7d3282d71..1d79cb30372635c05093c183cd7fd932b6c6d278 100644
--- a/configs/sip.conf.sample
+++ b/configs/sip.conf.sample
@@ -192,10 +192,10 @@ srvlookup=yes			; Enable DNS SRV lookups on outbound calls
 ; host is either a host name defined in DNS or the name of a section defined
 ; below.
 ;
-; A similar effect can be achieved by adding a "contact" option in a peer section.
+; A similar effect can be achieved by adding a "callbackextension" option in a peer section.
 ; this is equivalent to having the following line in the general section:
 ;
-;	register => username:secret@host/contact
+;	register => username:secret@host/callbackextension
 ;
 ; and more readable because you don't have to write the parameters in two places
 ; (note that the "port" is ignored - this is a bug that should be fixed).
@@ -450,7 +450,7 @@ srvlookup=yes			; Enable DNS SRV lookups on outbound calls
 ;                             sendrpid
 ;                             outboundproxy
 ;                             rfc2833compensate
-;                             contact
+;                             callbackextension
 
 ;[sip_proxy]
 ; For incoming calls only. Example: FWD (Free World Dialup)
@@ -479,7 +479,7 @@ srvlookup=yes			; Enable DNS SRV lookups on outbound calls
 ;host=sip.provider1.com
 ;username=4015552299		; how your provider knows you
 ;secret=youwillneverguessit
-;contact=123			; tell asterisk to register as username:secret@host/contact
+;callbackextension=123		; Register with this server and require calls coming back to this extension
 
 ;------------------------------------------------------------------------------
 ; Definitions of locally connected SIP devices