diff --git a/silk/decoder_set_fs.c b/silk/decoder_set_fs.c
index 02cdff00c03926a97dbd8ff2dd1976abd52de689..be29a97763fc538fce3c4b5595e60b881d2d33ff 100644
--- a/silk/decoder_set_fs.c
+++ b/silk/decoder_set_fs.c
@@ -69,15 +69,18 @@ void silk_decoder_set_fs(
             psDec->psNLSF_CB = &silk_NLSF_CB_WB;
         }
 
-        /* Reset part of the decoder state */
-        silk_memset( psDec->sLPC_Q14,     0,                    sizeof( psDec->sLPC_Q14 ) );
-        silk_memset( psDec->outBuf,       0, MAX_FRAME_LENGTH * sizeof( opus_int16 ) );
-        silk_memset( psDec->prevNLSF_Q15, 0,                    sizeof( psDec->prevNLSF_Q15 ) );
-
+        if( psDec->fs_kHz != fs_kHz)
+        {
+           /* Reset part of the decoder state */
+           silk_memset( psDec->sLPC_Q14,     0,                    sizeof( psDec->sLPC_Q14 ) );
+           silk_memset( psDec->outBuf,       0, MAX_FRAME_LENGTH * sizeof( opus_int16 ) );
+           silk_memset( psDec->prevNLSF_Q15, 0,                    sizeof( psDec->prevNLSF_Q15 ) );
+        }
         psDec->lagPrev                 = 100;
         psDec->LastGainIndex           = 10;
         psDec->prevSignalType          = TYPE_NO_VOICE_ACTIVITY;
-        psDec->first_frame_after_reset = 1;
+        if( psDec->fs_kHz != fs_kHz)
+           psDec->first_frame_after_reset = 1;
 
         if( fs_kHz == 16 ) {
             psDec->pitch_lag_low_bits_iCDF = silk_uniform8_iCDF;