diff --git a/src/switch_ivr_async.c b/src/switch_ivr_async.c
index b540868bee..b79fbaf106 100644
--- a/src/switch_ivr_async.c
+++ b/src/switch_ivr_async.c
@@ -900,8 +900,23 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_record_session(switch_core_session_t
 		flags |= SMBF_RECORD_ANSWER_REQ;
 	}
 
+
+	fh->samplerate = 0;
+	if ((vval = switch_channel_get_variable(channel, "record_sample_rate"))) {
+		int tmp = 0;
+
+		tmp = atoi(vval);
+
+		if (switch_is_valid_rate(tmp)) {
+			fh->samplerate = tmp;
+		}
+	}
+
+	if (!fh->samplerate) {
+		fh->samplerate = read_impl.actual_samples_per_second;
+	}
+
 	fh->channels = channels;
-	fh->samplerate = read_impl.actual_samples_per_second;
 	fh->pre_buffer_datalen = SWITCH_DEFAULT_FILE_BUFFER_LEN;
 
 	if (switch_core_file_open(fh,
@@ -959,17 +974,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_record_session(switch_core_session_t
 	rh->fh = fh;
 	rh->file = switch_core_session_strdup(session, file);
 	rh->packet_len = read_impl.decoded_bytes_per_packet;
-
-	if ((vval = switch_channel_get_variable(channel, "record_sample_rate"))) {
-		int tmp = 0;
-
-		tmp = atoi(vval);
-
-		if (switch_is_valid_rate(tmp)) {
-			rh->fh->samplerate = tmp;
-		}
-	}
-
+	
 	if ((status = switch_core_media_bug_add(session, record_callback, rh, to, flags, &bug)) != SWITCH_STATUS_SUCCESS) {
 		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error adding media bug for file %s\n", file);
 		switch_core_file_close(fh);