diff --git a/silk/control.h b/silk/control.h
index b76ec33cd6ddb6386f564e1d99d3ff57d7e693ad..8d2392d33b9a5593be8514f3721f75a93775fd71 100644
--- a/silk/control.h
+++ b/silk/control.h
@@ -77,6 +77,9 @@ typedef struct {
     /* I:   Flag to enable in-band Forward Error Correction (FEC); 0/1                      */
     opus_int useInBandFEC;
 
+    /* I:   Flag to enable in-band Deep REDundancy (DRED); 0/1                              */
+    opus_int useDRED;
+
     /* I:   Flag to actually code in-band Forward Error Correction (FEC) in the current packet; 0/1 */
     opus_int LBRR_coded;
 
diff --git a/silk/enc_API.c b/silk/enc_API.c
index 45d67877ba5d1f6a8073b81f10f2b03cb27af5eb..bdb858afc1ee5302702087edf1db7c161c501fc5 100644
--- a/silk/enc_API.c
+++ b/silk/enc_API.c
@@ -469,8 +469,12 @@ opus_int silk_Encode(                                   /* O    Returns error co
             silk_encode_do_VAD_Fxx( &psEnc->state_Fxx[ 0 ], activity );
 
 #ifdef ENABLE_NEURAL_FEC
-            /* DRED Encoder */
-            dred_process_silk_frame( &psEnc->state_Fxx[ 0 ].sCmn.dred_encoder, &psEnc->state_Fxx[ 0 ].sCmn.inputBuf[0] );
+            if ( encControl->useDRED ) {
+                /* DRED Encoder */
+                dred_process_silk_frame( &psEnc->state_Fxx[ 0 ].sCmn.dred_encoder, &psEnc->state_Fxx[ 0 ].sCmn.inputBuf[0] );
+            } else {
+                psEnc->state_Fxx[ 0 ].sCmn.dred_encoder.latents_buffer_fill = 0;
+            }
 #endif
 
             /* Encode */
diff --git a/src/opus_encoder.c b/src/opus_encoder.c
index c6675a617782d04fe227582310476af7fb9c6ca8..3764b373caaadbc5be82a725f4cf9232fee2e4d6 100644
--- a/src/opus_encoder.c
+++ b/src/opus_encoder.c
@@ -227,6 +227,7 @@ int opus_encoder_init(OpusEncoder* st, opus_int32 Fs, int channels, int applicat
     st->silk_mode.packetLossPercentage      = 0;
     st->silk_mode.complexity                = 9;
     st->silk_mode.useInBandFEC              = 0;
+    st->silk_mode.useDRED                   = 0;
     st->silk_mode.useDTX                    = 0;
     st->silk_mode.useCBR                    = 0;
     st->silk_mode.reducedDependency         = 0;
@@ -2733,6 +2734,7 @@ int opus_encoder_ctl(OpusEncoder *st, int request, ...)
                goto bad_arg;
             }
             st->dred_duration = value;
+            st->silk_mode.useDRED = !!value;
         }
         break;
         case OPUS_GET_DRED_DURATION_REQUEST: