diff --git a/funcs/func_channel.c b/funcs/func_channel.c
index 66ea0d4650d931ece01be0bd95ce9d320e9f14a7..dd51bb0a69be96e9b3ce549d7a8f2027200d3e63 100644
--- a/funcs/func_channel.c
+++ b/funcs/func_channel.c
@@ -108,7 +108,14 @@ static int func_channel_write(struct ast_channel *chan, char *function,
 		locked_string_field_set(chan, language, value);
 	else if (!strcasecmp(data, "musicclass"))
 		locked_string_field_set(chan, musicclass, value);
-	else if (!strcasecmp(data, "callgroup"))
+	else if (!strcasecmp(data, "tonezone")) {
+		struct tone_zone *new_zone;
+		if (!(new_zone = ast_get_indication_zone(data))) {
+			ast_log(LOG_ERROR, "Unknown country code for tonezone. Check indications.conf for available country codes.\n");
+			ret = -1;	
+		} else 
+			chan->zone = new_zone;
+	} else if (!strcasecmp(data, "callgroup"))
 		chan->callgroup = ast_get_group(data);
 	else if (!strcasecmp(data, "txgain")) {
 		sscanf(value, "%hhd", &gainset);
@@ -149,7 +156,7 @@ static struct ast_custom_function channel_function = {
 		"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/O	tonezone 		zone for indications played\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"