diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index 28ea517f5b718ff4a1f70bc0049c67840d319346..d9639fb1d205ced92563f63c0e60c99784c09255 100644
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -1428,6 +1428,7 @@ static int sip_dtmfmode(struct ast_channel *chan, void *data);
 static int sip_addheader(struct ast_channel *chan, void *data);
 static int sip_do_reload(enum channelreloadreason reason);
 static int sip_reload(int fd, int argc, char *argv[]);
+static int acf_channel_read(struct ast_channel *chan, const char *funcname, char *preparse, char *buf, size_t buflen);
 
 /*--- Debugging 
 	Functions for enabling debug per IP or fully, or enabling history logging for
@@ -1593,6 +1594,7 @@ static const struct ast_channel_tech sip_tech = {
 	.bridge = ast_rtp_bridge,
 	.early_bridge = ast_rtp_early_bridge,
 	.send_text = sip_sendtext,
+	.func_channel_read = acf_channel_read,
 };
 
 /*! \brief This version of the sip channel tech has no send_digit_begin
@@ -14800,12 +14802,13 @@ static int handle_request_cancel(struct sip_pvt *p, struct sip_request *req)
 	}
 }
 
-static int acf_rtpqos_read(struct ast_channel *chan, const char *funcname, char *preparse, char *buf, size_t buflen)
+static int acf_channel_read(struct ast_channel *chan, const char *funcname, char *preparse, char *buf, size_t buflen)
 {
 	struct ast_rtp_quality qos;
 	struct sip_pvt *p = chan->tech_pvt;
 	char *all = "", *parse = ast_strdupa(preparse);
 	AST_DECLARE_APP_ARGS(args,
+		AST_APP_ARG(param);
 		AST_APP_ARG(type);
 		AST_APP_ARG(field);
 	);
@@ -14814,8 +14817,12 @@ static int acf_rtpqos_read(struct ast_channel *chan, const char *funcname, char
 	/* Sanity check */
 	if (chan->tech != &sip_tech && chan->tech != &sip_tech_info) {
 		ast_log(LOG_ERROR, "Cannot call %s on a non-SIP channel\n", funcname);
+		return 0;
 	}
 
+	if (!strcasecmp(args.param, "rtpqos"))
+		return 0;
+
 	memset(buf, 0, buflen);
 	memset(&qos, 0, sizeof(qos));
 
@@ -18135,27 +18142,6 @@ static struct ast_cli_entry cli_sip[] = {
 	sip_reload_usage },
 };
 
-struct ast_custom_function acf_rtpqos = {
-	.name = "RTPQOS",
-	.synopsis = "Retrieve statistics about an RTP stream",
-	.desc =
-"The following statistics may be retrieved:\n"
-"  local_ssrc         - Local SSRC (stream ID)\n"
-"  local_lostpackets  - Local lost packets\n"
-"  local_jitter       - Local calculated jitter\n"
-"  local_count        - Number of received packets\n"
-"  remote_ssrc        - Remote SSRC (stream ID)\n"
-"  remote_lostpackets - Remote lost packets\n"
-"  remote_jitter      - Remote reported jitter\n"
-"  remote_count       - Number of transmitted packets\n"
-"  rtt                - Round trip time\n"
-"  all                - All statistics (in a form suited to logging, but not for parsing)\n"
-"\n"
-"Type may be specified as \"audio\", \"video\", or \"text\".\n",
-	.syntax = "RTPQOS(<type>|<field>)",
-	.read = acf_rtpqos_read,
-};
-
 /*! \brief PBX load module - initialization */
 static int load_module(void)
 {
@@ -18205,7 +18191,6 @@ static int load_module(void)
 	ast_custom_function_register(&sippeer_function);
 	ast_custom_function_register(&sipchaninfo_function);
 	ast_custom_function_register(&checksipdomain_function);
-	ast_custom_function_register(&acf_rtpqos);
 
 	/* Register manager commands */
 	ast_manager_register2("SIPpeers", EVENT_FLAG_SYSTEM, manager_sip_show_peers,
@@ -18235,7 +18220,6 @@ static int unload_module(void)
 	ast_custom_function_unregister(&sippeer_function);
 	ast_custom_function_unregister(&sip_header_function);
 	ast_custom_function_unregister(&checksipdomain_function);
-	ast_custom_function_unregister(&acf_rtpqos);
 
 	/* Unregister dial plan applications */
 	ast_unregister_application(app_dtmfmode);
diff --git a/funcs/func_channel.c b/funcs/func_channel.c
index 0820baa4f1778e094a8cd82451cece6fa04d7d62..4a6a9e221d6e9b16b5e9d2d7bb38b282fcd5b19d 100644
--- a/funcs/func_channel.c
+++ b/funcs/func_channel.c
@@ -150,18 +150,37 @@ static struct ast_custom_function channel_function = {
 	.syntax = "CHANNEL(item)",
 	.desc = "Gets/set various pieces of information about the channel.\n"
 		"Standard items (provided by all channel technologies) are:\n"
-		"R/O	audioreadformat		format currently being read\n"
-		"R/O	audionativeformat 	format used natively for audio\n"
-		"R/O	audiowriteformat 	format currently being written\n"
-		"R/W	callgroup		call groups for call pickup\n"
-		"R/O	channeltype		technology used for channel\n"
-		"R/W	language 		language for sounds played\n"
-		"R/W	musicclass 		class (from musiconhold.conf) for hold music\n"
-		"R/W	rxgain			set rxgain level on channel drivers that support it\n"
-		"R/O	state			state for channel\n"
-		"R/W	tonezone 		zone for indications played\n"
-		"R/W	txgain			set txgain level on channel drivers that support it\n"
-		"R/O	videonativeformat 	format used natively for video\n"
+		"R/O	audioreadformat    format currently being read\n"
+		"R/O	audionativeformat  format used natively for audio\n"
+		"R/O	audiowriteformat   format currently being written\n"
+		"R/W	callgroup          call groups for call pickup\n"
+		"R/O	channeltype        technology used for channel\n"
+		"R/W	language           language for sounds played\n"
+		"R/W	musicclass         class (from musiconhold.conf) for hold music\n"
+		"R/W	rxgain             set rxgain level on channel drivers that support it\n"
+		"R/O	state              state for channel\n"
+		"R/W	tonezone           zone for indications played\n"
+		"R/W	txgain             set txgain level on channel drivers that support it\n"
+		"R/O	videonativeformat  format used natively for video\n"
+		"\n"
+		"chan_sip provides the following additional options:\n"
+		"R/O    rtpqos             Get QOS information about the RTP stream\n"
+		"       This option takes two additional arguments:\n"
+		"  Argument 1:\n"
+		"    audio                 Get data about the audio stream\n"
+		"    video                 Get data about the video stream\n"
+		"    text                  Get data about the text stream\n"
+		"  Argument 2:\n"
+		"    local_ssrc            Local SSRC (stream ID)\n"
+		"    local_lostpackets     Local lost packets\n"
+		"    local_jitter          Local calculated jitter\n"
+		"    local_count           Number of received packets\n"
+		"    remote_ssrc           Remote SSRC (stream ID)\n"
+		"    remote_lostpackets    Remote lost packets\n"
+		"    remote_jitter         Remote reported jitter\n"
+		"    remote_count          Number of transmitted packets\n"
+		"    rtt                   Round trip time\n"
+		"    all                   All statistics (in a form suited to logging, but not for parsing)\n"
 		"\n"
 		"Additional items may be available from the channel driver providing\n"
 		"the channel; see its documentation for details.\n"