diff --git a/src/switch_ivr_async.c b/src/switch_ivr_async.c
index 3f5fa5a94e..047df14153 100644
--- a/src/switch_ivr_async.c
+++ b/src/switch_ivr_async.c
@@ -933,6 +933,32 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_record_session(switch_core_session_t
 	fh->channels = channels;
 	fh->pre_buffer_datalen = SWITCH_DEFAULT_FILE_BUFFER_LEN;
 
+
+	
+	if (!switch_is_file_path(file)) {
+		char *tfile = NULL;
+		char *e;
+		const char *prefix;
+
+		prefix = switch_channel_get_variable(channel, "sound_prefix");
+
+		if (!prefix) {
+			prefix = SWITCH_GLOBAL_dirs.base_dir;
+		}
+
+		if (*file == '[') {
+			tfile = switch_core_session_strdup(session, file);
+			if ((e = switch_find_end_paren(tfile, '[', ']'))) {
+				*e = '\0';
+				file = e + 1;
+			} else {
+				tfile = NULL;
+			}
+		}
+		
+		file = switch_core_session_sprintf(session, "%s%s%s%s", switch_str_nil(tfile), tfile ? "]" : "", prefix, SWITCH_PATH_SEPARATOR, file);
+	}
+	
 	if (switch_core_file_open(fh,
 							  file,
 							  channels,
diff --git a/src/switch_ivr_play_say.c b/src/switch_ivr_play_say.c
index 380049bf26..ac30567274 100644
--- a/src/switch_ivr_play_say.c
+++ b/src/switch_ivr_play_say.c
@@ -461,12 +461,26 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_record_file(switch_core_session_t *se
 		const char *prefix;
 
 		prefix = switch_channel_get_variable(channel, "sound_prefix");
+
 		if (!prefix) {
 			prefix = SWITCH_GLOBAL_dirs.base_dir;
 		}
 		
 		if (!switch_is_file_path(file)) {
-			file = switch_core_session_sprintf(session, "%s%s%s", prefix, SWITCH_PATH_SEPARATOR, file);
+			char *tfile = NULL;
+			char *e;
+
+			if (*file == '[') {
+				tfile = switch_core_session_strdup(session, file);
+				if ((e = switch_find_end_paren(tfile, '[', ']'))) {
+					*e = '\0';
+					file = e + 1;
+				} else {
+					tfile = NULL;
+				}
+			}
+			
+			file = switch_core_session_sprintf(session, "%s%s%s%s", switch_str_nil(tfile), tfile ? "]" : "", prefix, SWITCH_PATH_SEPARATOR, file);
 		}
 		if ((ext = strrchr(file, '.'))) {
 			ext++;
@@ -1001,7 +1015,20 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_play_file(switch_core_session_t *sess
 
 		if (!strstr(file, SWITCH_URL_SEPARATOR)) {
 			if (!switch_is_file_path(file)) {
-				file = switch_core_session_sprintf(session, "%s%s%s", prefix, SWITCH_PATH_SEPARATOR, file);
+				char *tfile = NULL;
+				char *e;
+
+				if (*file == '[') {
+					tfile = switch_core_session_strdup(session, file);
+					if ((e = switch_find_end_paren(tfile, '[', ']'))) {
+						*e = '\0';
+						file = e + 1;
+					} else {
+						tfile = NULL;
+					}
+				}
+
+				file = switch_core_session_sprintf(session, "%s%s%s%s%s", switch_str_nil(tfile), tfile ? "]" : "", prefix, SWITCH_PATH_SEPARATOR, file);
 			}
 			if ((ext = strrchr(file, '.'))) {
 				ext++;