diff --git a/CHANGES b/CHANGES
index 86dfe76a1c31142a74d6fe2976bfa0bccc0d901e..c0f7a1af279d8bdf4d58606fabab63777f24d417 100644
--- a/CHANGES
+++ b/CHANGES
@@ -8,6 +8,21 @@
 ===
 ==============================================================================
 
+------------------------------------------------------------------------------
+--- Functionality changes from Asterisk 13.15.0 to Asterisk 13.16.0 ----------
+------------------------------------------------------------------------------
+
+res_pjsip_config_wizard
+------------------
+ * Two new parameters have been added to the pjsip config wizard.
+   Setting 'sends_line_with_registrations' to true will cause the wizard
+   to skip the creation of an identify object to match incoming requests
+   to the endpoint and instead add the line and endpoint parameters to
+   the outbound registration object.
+   Setting 'outbound_proxy' is a shortcut for adding individual
+   endpoint/outbound_proxy, aor/outbound_proxy and registration/outbound_proxy
+   parameters.
+
 ------------------------------------------------------------------------------
 --- Functionality changes from Asterisk 13.14.0 to Asterisk 13.15.0 ----------
 ------------------------------------------------------------------------------
diff --git a/configs/samples/pjsip_wizard.conf.sample b/configs/samples/pjsip_wizard.conf.sample
index 0f46083af562b9543bacb0b72db5c7d6e625e913..8c8572e4d34f9d2cc66790b313b6562e70638e4d 100644
--- a/configs/samples/pjsip_wizard.conf.sample
+++ b/configs/samples/pjsip_wizard.conf.sample
@@ -79,6 +79,13 @@
                          ; sends_auth must also be specified.
                          ; (default: "no")
 
+;sends_line_with_registrations=  ; Setting this to true will cause the wizard to
+                         ; skip the creation of an identify object to match
+                         ; incoming requests to the endpoint and instead add the
+                         ; line and endpoint parameters to the outbound
+                         ; registration object.
+                         ; (default: "no")
+
 ;accepts_registrations=  ; Will create an aor with dynamic contacts which will
                          ; accept registrations.
                          ; accepts_auth must also be specified.
@@ -96,6 +103,11 @@
                  ; SRV records are not currently supported.
                  ; (default: "")
 
+;outbound_proxy= ; Setting this is a shortcut for setting
+                 ; endpoint/outbound_proxy
+                 ; aor/outbound_proxy
+                 ; registration/outbound_proxy
+
 ;transport=      ; The transport to use for the endpoint and registrations
                  ; (default: the pjsip default)
 
diff --git a/res/res_pjsip_config_wizard.c b/res/res_pjsip_config_wizard.c
index 1967d87abeb1ad06ba1960cd8e21d7e63fde9fdb..c13ff4aca9dfd78d2ec72b945390c2161df08b16 100644
--- a/res/res_pjsip_config_wizard.c
+++ b/res/res_pjsip_config_wizard.c
@@ -141,6 +141,12 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 					entry in the list.  If send_registrations is also set, a registration will
 					also be created for each.</para></description>
 				</configOption>
+				<configOption name="outbound_proxy">
+					<synopsis>Shortcut for specifying proxy on individual objects.</synopsis>
+					<description><para>Shortcut for specifying endpoint/outbound_proxy,
+					aor/outbound_proxy, and registration/outbound_proxy individually.
+					</para></description>
+				</configOption>
 				<configOption name="sends_auth" default="no">
 					<synopsis>Send outbound authentication to remote hosts.</synopsis>
 					<description><para>At least outbound_auth/username is required.</para></description>
@@ -155,6 +161,13 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 					be created for each host in the remote _hosts string.  If authentication is required,
 					sends_auth and an outbound_auth/username must also be supplied.</para></description>
 				</configOption>
+				<configOption name="sends_line_with_registrations" default="no">
+					<synopsis>Sets "line" and "endpoint parameters on registrations.</synopsis>
+					<description><para>Setting this to true will cause the wizard to skip the
+					creation of an identify object to match incoming requests to the endpoint and
+					instead add the line and endpoint parameters to the outbound registration object.
+					</para></description>
+				</configOption>
 				<configOption name="accepts_registrations" default="no">
 					<synopsis>Accept inbound registration from remote hosts.</synopsis>
 					<description><para>An AOR with dynamic contacts will be created.  If
@@ -597,11 +610,16 @@ static int handle_aor(const struct ast_sorcery *sorcery, struct object_type_wiza
 	struct ast_sorcery_object *obj = NULL;
 	const char *id = ast_category_get_name(wiz);
 	const char *contact_pattern;
+	const char *outbound_proxy = ast_variable_find_last_in_list(wizvars, "outbound_proxy");
 	int host_count = AST_VECTOR_SIZE(remote_hosts_vector);
 	RAII_VAR(struct ast_variable *, vars, get_object_variables(wizvars, "aor/"), ast_variables_destroy);
 
 	variable_list_append(&vars, "@pjsip_wizard", id);
 
+	if (!ast_strlen_zero(outbound_proxy)) {
+		variable_list_append_return(&vars, "outbound_proxy", outbound_proxy);
+	}
+
 	/* If the user explicitly specified an aor/contact, don't use remote hosts. */
 	if (!ast_variable_find_last_in_list(vars, "contact")) {
 		if (!(contact_pattern = ast_variable_find_last_in_list(wizvars, "contact_pattern"))) {
@@ -649,6 +667,7 @@ static int handle_endpoint(const struct ast_sorcery *sorcery, struct object_type
 	struct ast_variable *wizvars = ast_category_first(wiz);
 	struct ast_sorcery_object *obj = NULL;
 	const char *id = ast_category_get_name(wiz);
+	const char *outbound_proxy = ast_variable_find_last_in_list(wizvars, "outbound_proxy");
 	const char *transport = ast_variable_find_last_in_list(wizvars, "transport");
 	const char *hint_context = hint_context = ast_variable_find_last_in_list(wizvars, "hint_context");
 	const char *hint_exten = ast_variable_find_last_in_list(wizvars, "hint_exten");
@@ -659,6 +678,10 @@ static int handle_endpoint(const struct ast_sorcery *sorcery, struct object_type
 	variable_list_append_return(&vars, "@pjsip_wizard", id);
 	variable_list_append_return(&vars, "aors", id);
 
+	if (!ast_strlen_zero(outbound_proxy)) {
+		variable_list_append_return(&vars, "outbound_proxy", outbound_proxy);
+	}
+
 	if (ast_strlen_zero(hint_context)) {
 		hint_context = ast_variable_find_last_in_list(vars, "context");
 	}
@@ -721,8 +744,9 @@ static int handle_identify(const struct ast_sorcery *sorcery, struct object_type
 
 	snprintf(new_id, sizeof(new_id), "%s-identify", id);
 
-	/* If accepting registrations, we don't need an identify. */
-	if (is_variable_true(wizvars, "accepts_registrations")) {
+	/* If accepting registrations or we're sending line, we don't need an identify. */
+	if (is_variable_true(wizvars, "accepts_registrations")
+		|| is_variable_true(wizvars, "sends_line_with_registrations")) {
 		/* If one exists, delete it. */
 		obj = otw->wizard->retrieve_id(sorcery, otw->wizard_data, "identify", new_id);
 		if (obj) {
@@ -838,6 +862,7 @@ static int handle_registrations(const struct ast_sorcery *sorcery, struct object
 	const char *id = ast_category_get_name(wiz);
 	const char *server_uri_pattern;
 	const char *client_uri_pattern;
+	const char *outbound_proxy = ast_variable_find_last_in_list(wizvars, "outbound_proxy");
 	const char *transport = ast_variable_find_last_in_list(wizvars, "transport");
 	const char *username;
 	char new_id[strlen(id) + MAX_ID_SUFFIX];
@@ -857,6 +882,10 @@ static int handle_registrations(const struct ast_sorcery *sorcery, struct object
 		return -1;
 	}
 
+	if (!ast_strlen_zero(outbound_proxy)) {
+		variable_list_append_return(&vars, "outbound_proxy", outbound_proxy);
+	}
+
 	otw->wizard->retrieve_multiple(sorcery, otw->wizard_data, "registration", existing, search);
 	ast_variables_destroy(search);
 
@@ -927,6 +956,11 @@ static int handle_registrations(const struct ast_sorcery *sorcery, struct object
 			variable_list_append_return(&registration_vars, "transport", transport);
 		}
 
+		if (is_variable_true(wizvars, "sends_line_with_registrations")) {
+			variable_list_append_return(&registration_vars, "line", "yes");
+			variable_list_append_return(&registration_vars, "endpoint", id);
+		}
+
 		snprintf(new_id, sizeof(new_id), "%s-reg-%d", id, host_counter);
 
 		obj = create_object(sorcery, new_id, "registration", registration_vars);