diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index 94244774434908cffcd05649db8163ad11eaf151..2c76212a36a7a0d72520fe6ae3b5e78dc7195074 100644
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -12040,14 +12040,19 @@ static struct sip_user *build_user(const char *name, struct ast_variable *v, int
 /*! \brief Set peer defaults before configuring specific configurations */
 static void set_peer_defaults(struct sip_peer *peer)
 {
-	peer->expire = -1;
-	peer->pokeexpire = -1;
+	if (peer->expire == 0) {
+		/* Don't reset expire or port time during reload 
+		   if we have an active registration 
+		*/
+		peer->expire = -1;
+		peer->pokeexpire = -1;
+		peer->addr.sin_port = htons(DEFAULT_SIP_PORT);
+	}
 	ast_copy_flags(peer, &global_flags, SIP_FLAGS_TO_COPY);
 	strcpy(peer->context, default_context);
 	strcpy(peer->subscribecontext, default_subscribecontext);
 	strcpy(peer->language, default_language);
 	strcpy(peer->musicclass, default_musicclass);
-	peer->addr.sin_port = htons(DEFAULT_SIP_PORT);
 	peer->addr.sin_family = AF_INET;
 	peer->defaddr.sin_family = AF_INET;
 	peer->capability = global_capability;
@@ -12127,8 +12132,6 @@ static struct sip_peer *build_peer(const char *name, struct ast_variable *v, int
 		else
 			speerobjs++;
 		ASTOBJ_INIT(peer);
-		peer->expire = -1;
-		peer->pokeexpire = -1;
 	}
 	/* Note that our peer HAS had its reference count incrased */
 
@@ -12136,12 +12139,9 @@ static struct sip_peer *build_peer(const char *name, struct ast_variable *v, int
 	oldha = peer->ha;
 	peer->ha = NULL;
 	set_peer_defaults(peer);	/* Set peer defaults */
-	if (!found) {
-		if (name)
+	if (!found && name)
 			ast_copy_string(peer->name, name, sizeof(peer->name));
-		peer->addr.sin_port = htons(DEFAULT_SIP_PORT);
-		peer->addr.sin_family = AF_INET;
-	}
+
 	/* If we have channel variables, remove them (reload) */
 	if (peer->chanvars) {
 		ast_variables_destroy(peer->chanvars);