diff --git a/src/switch_ivr.c b/src/switch_ivr.c
index 23ea16bd1d..a22a67c9ab 100644
--- a/src/switch_ivr.c
+++ b/src/switch_ivr.c
@@ -346,6 +346,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_record_file(switch_core_session_t *se
 	char *p;
 	const char *vval;
     time_t start = 0;
+	int org_silence_hits = 0;
 
 	if (!fh) {
 		fh = &lfh;
@@ -432,10 +433,13 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_record_file(switch_core_session_t *se
     }
 
     if (fh->thresh) {
-        if (!fh->silence_hits) {
-            fh->silence_hits = 20;
+        if (fh->silence_hits) {
+			fh->silence_hits = fh->samplerate * fh->silence_hits;
+		} else {
+            fh->silence_hits = fh->samplerate * 3;
         }
-    }
+		org_silence_hits = fh->silence_hits;
+	}
 
 	while(switch_channel_ready(channel)) {
 		switch_size_t len;
@@ -500,10 +504,13 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_record_file(switch_core_session_t *se
 		
             score = (uint32_t)(energy / samples);
             if (score < fh->thresh) {
-                if (!--fh->silence_hits) {
+				fh->silence_hits -= fh->samplerate;
+                if (fh->silence_hits <= 0) {
                     break;
                 }
-            }
+			} else {
+				fh->silence_hits = org_silence_hits;
+			}
         }
 
 		if (!switch_test_flag(fh, SWITCH_FILE_PAUSE)) {