Index: b/main/manager.c
===================================================================
--- a/main/manager.c
+++ b/main/manager.c
@@ -4246,6 +4246,56 @@ static int action_cancel_atxfer(struct m
 }
 
 
+static int action_refer(struct mansession *s, const struct message *m)
+{
+	const char *name_transferer1 = astman_get_header(m, "TransfererChannel1");
+	const char *name_transferer2 = astman_get_header(m, "TransfererChannel2");
+	struct ast_channel *chan1;
+	struct ast_channel *chan2;
+
+	if (ast_strlen_zero(name_transferer1)) {
+		astman_send_error(s, m, "Transferer channel one not specified");
+		return 0;
+	}
+
+	if (ast_strlen_zero(name_transferer2)) {
+		astman_send_error(s, m, "Transferer channel two not specified");
+		return 0;
+	}
+
+	if (!(chan1 = ast_channel_get_by_name(name_transferer1))) {
+		astman_send_error(s, m, "Transferer channel one does not exist");
+		return 0;
+	}
+
+	if (!(chan2 = ast_channel_get_by_name(name_transferer2))) {
+		astman_send_error(s, m, "Transferer channel two does not exist");
+		ast_channel_unref(chan1);
+		return 0;
+	}
+
+	switch (ast_bridge_transfer_attended(chan1, chan2)) {
+	case AST_BRIDGE_TRANSFER_NOT_PERMITTED:
+		astman_send_error(s, m, "Transfer not permitted");
+		break;
+	case AST_BRIDGE_TRANSFER_INVALID:
+		astman_send_error(s, m, "Transfer invalid");
+		break;
+	case AST_BRIDGE_TRANSFER_FAIL:
+		astman_send_error(s, m, "Transfer failed");
+		break;
+	case AST_BRIDGE_TRANSFER_SUCCESS:
+		astman_send_ack(s, m, "Transfer succeeded");
+		break;
+	}
+
+	ast_channel_unref(chan1);
+	ast_channel_unref(chan2);
+
+	return 0;
+}
+
+
 static int check_blacklist(const char *cmd)
 {
 	char *cmd_copy, *cur_cmd;
@@ -9528,6 +9578,7 @@ static void manager_shutdown(void)
 	ast_manager_unregister("AOCMessage");
 	ast_manager_unregister("Filter");
 	ast_manager_unregister("BlindTransfer");
+	ast_manager_unregister("Refer");
 	ast_custom_function_unregister(&managerclient_function);
 	ast_cli_unregister_multiple(cli_manager, ARRAY_LEN(cli_manager));
 
@@ -9744,6 +9795,7 @@ static int __init_manager(int reload, in
 		ast_manager_register_xml_core("AOCMessage", EVENT_FLAG_AOC, action_aocmessage);
 		ast_manager_register_xml_core("Filter", EVENT_FLAG_SYSTEM, action_filter);
 		ast_manager_register_xml_core("BlindTransfer", EVENT_FLAG_CALL, action_blind_transfer);
+		ast_manager_register_xml_core("Refer", EVENT_FLAG_CALL, action_refer);
 
 #ifdef TEST_FRAMEWORK
 		test_suite_forwarder = stasis_forward_all(ast_test_suite_topic(), manager_topic);
Index: b/main/manager_doc.xml
===================================================================
--- a/main/manager_doc.xml
+++ b/main/manager_doc.xml
@@ -1613,6 +1613,24 @@
 			<ref type="managerEvent">BlindTransfer</ref>
 		</see-also>
 	</manager>
+	<manager name="Refer" language="en_US">
+		<synopsis>
+			Connects peers of tranferer channels.
+		</synopsis>
+		<syntax>
+			<parameter name="TransfererChannel1" required="true">
+			</parameter>
+			<parameter name="TransfererChannel2" required="true">
+			</parameter>
+		</syntax>
+		<description>
+			<para>Connects peers of transferer channels. Simulates SIP REFER sent by transferer</para>
+		</description>
+		<see-also>
+			<ref type="manager">Redirect</ref>
+			<ref type="manager">BlindTransfer</ref>
+		</see-also>
+	</manager>
 	<managerEvent name="ExtensionStatus" language="en_US">
 		<managerEventInstance class="EVENT_FLAG_CALL">
 			<since>
