diff --git a/CHANGES b/CHANGES
index 1671d3635d82c26d56eb09ee870098a3643bb7ff..79a1840b098aa130076db1cfefe37c98d1b6772a 100644
--- a/CHANGES
+++ b/CHANGES
@@ -79,6 +79,15 @@ app_queue
  * Add 'QueueUpdate' application which can be used to track outbound calls
    using app_queue.
 
+------------------------------------------------------------------------------
+--- Functionality changes from Asterisk 14.3.0 to Asterisk 14.4.0 ------------
+------------------------------------------------------------------------------
+
+app_record
+------------------
+ * Added new 'u' option to Record() application which prevents Asterisk from
+   truncating silence from the end of recorded files.
+
 ------------------------------------------------------------------------------
 --- Functionality changes from Asterisk 14.2.0 to Asterisk 14.3.0 ------------
 ------------------------------------------------------------------------------
diff --git a/apps/app_record.c b/apps/app_record.c
index ede50be264500ca7ce5274e98a06fa9abc242b3f..0b85ff8a6993386e9d8b0376eaf16ad1818edf77 100644
--- a/apps/app_record.c
+++ b/apps/app_record.c
@@ -79,6 +79,9 @@
 					<option name="t">
 						<para>use alternate '*' terminator key (DTMF) instead of default '#'</para>
 					</option>
+					<option name="u">
+						<para>Don't truncate recorded silence.</para>
+					</option>
 					<option name="x">
 						<para>Ignore all terminator keys (DTMF) and keep recording until hangup.</para>
 					</option>
@@ -131,6 +134,7 @@ enum {
 	FLAG_HAS_PERCENT = (1 << 7),
 	OPTION_ANY_TERMINATE = (1 << 8),
 	OPTION_OPERATOR_EXIT = (1 << 9),
+	OPTION_NO_TRUNCATE = (1 << 10),
 };
 
 AST_APP_OPTIONS(app_opts,{
@@ -141,6 +145,7 @@ AST_APP_OPTIONS(app_opts,{
 	AST_APP_OPTION('q', OPTION_QUIET),
 	AST_APP_OPTION('s', OPTION_SKIP),
 	AST_APP_OPTION('t', OPTION_STAR_TERMINATE),
+	AST_APP_OPTION('u', OPTION_NO_TRUNCATE),
 	AST_APP_OPTION('y', OPTION_ANY_TERMINATE),
 	AST_APP_OPTION('x', OPTION_IGNORE_TERMINATE),
 });
@@ -192,6 +197,7 @@ static int record_exec(struct ast_channel *chan, const char *data)
 	int dspsilence = 0;
 	int silence = 0;		/* amount of silence to allow */
 	int gotsilence = 0;		/* did we timeout for silence? */
+	int truncate_silence = 1;	/* truncate on complete silence recording */
 	int maxduration = 0;		/* max duration of recording in milliseconds */
 	int gottimeout = 0;		/* did we timeout for maxduration exceeded? */
 	int terminator = '#';
@@ -243,7 +249,10 @@ static int record_exec(struct ast_channel *chan, const char *data)
 			ast_log(LOG_WARNING, "'%s' is not a valid silence duration\n", args.silence);
 		}
 	}
-	
+
+	if (ast_test_flag(&flags, OPTION_NO_TRUNCATE))
+		truncate_silence = 0;
+
 	if (args.maxduration) {
 		if ((sscanf(args.maxduration, "%30d", &i) == 1) && (i > -1))
 			/* Convert duration to milliseconds */
@@ -443,7 +452,7 @@ static int record_exec(struct ast_channel *chan, const char *data)
 		}
 	}
 
-	if (gotsilence) {
+	if (gotsilence && truncate_silence) {
 		ast_stream_rewind(s, silence - 1000);
 		ast_truncstream(s);
 	} else if (!gottimeout && f) {