diff --git a/silk/dec_API.c b/silk/dec_API.c
index 018173efa09aa279184e46b1cfd0ca74c58e42db..9b7bd4a74bcdbaa3ab5c85fb3e84063306699eba 100644
--- a/silk/dec_API.c
+++ b/silk/dec_API.c
@@ -104,8 +104,8 @@ opus_int silk_Decode(
         ret += silk_init_decoder( &channel_state[ 1 ] );
     }
 
-    for( n = 0; n < decControl->nChannelsInternal; n++ ) {
-        if( channel_state[ n ].nFramesDecoded == 0 ) {
+    if( channel_state[ 0 ].nFramesDecoded == 0 ) {
+        for( n = 0; n < decControl->nChannelsInternal; n++ ) {
             opus_int fs_kHz_dec;
             if( decControl->payloadSize_ms == 0 ) {
                 /* Assuming packet loss, use 10 ms */
@@ -258,6 +258,7 @@ opus_int silk_Decode(
         } else {
             silk_memset( &samplesOut1_tmp[ n ][ 2 + delay ], 0, nSamplesOutDec * sizeof( opus_int16 ) );
         }
+        channel_state[ n ].nFramesDecoded++;
     }
 
     if( decControl->nChannelsAPI == 2 && decControl->nChannelsInternal == 2 ) {
diff --git a/silk/decode_frame.c b/silk/decode_frame.c
index 54bb920bfc0c6d97f8dd7bd86305dc0dd4740b0b..83c92210cea3462fd8df8395fe769705b213f7a1 100644
--- a/silk/decode_frame.c
+++ b/silk/decode_frame.c
@@ -127,7 +127,6 @@ TOC(decode_core)
 
     /* Update some decoder state variables */
     psDec->lagPrev = sDecCtrl.pitchL[ psDec->nb_subfr - 1 ];
-    psDec->nFramesDecoded++;
 
     /* Set output frame length */
     *pN = L;
diff --git a/silk/enc_API.c b/silk/enc_API.c
index 7177d4d58b4282e552bb8ba39a88614ca51d9127..3b4d1a9b61d50278f627b50601b3898b9fb136e0 100644
--- a/silk/enc_API.c
+++ b/silk/enc_API.c
@@ -222,6 +222,7 @@ opus_int silk_Encode(
                 psEnc->state_Fxx[ n ].sCmn.LBRR_flags[ i ] = 0;
             }
         }
+        psEnc->state_Fxx[ n ].sCmn.inDTX = psEnc->state_Fxx[ n ].sCmn.useDTX;
     }
     silk_assert( encControl->nChannelsInternal == 1 || psEnc->state_Fxx[ 0 ].sCmn.fs_kHz == psEnc->state_Fxx[ 1 ].sCmn.fs_kHz );
 
@@ -435,10 +436,12 @@ opus_int silk_Encode(
                     if( ( ret = silk_encode_frame_Fxx( &psEnc->state_Fxx[ n ], nBytesOut, psRangeEnc, condCoding ) ) != 0 ) {
                         silk_assert( 0 );
                     }
-                    psEnc->state_Fxx[ n ].sCmn.nFramesEncoded++;
+                } else {
+                    psEnc->state_Fxx[ n ].sCmn.VAD_flags[ psEnc->state_Fxx[ n ].sCmn.nFramesEncoded ] = 0;
                 }
                 psEnc->state_Fxx[ n ].sCmn.controlled_since_last_payload = 0;
                 psEnc->state_Fxx[ n ].sCmn.inputBufIx = 0;
+                psEnc->state_Fxx[ n ].sCmn.nFramesEncoded++;
             }
             psEnc->prev_decode_only_middle = psEnc->sStereo.mid_only_flags[ psEnc->state_Fxx[ 0 ].sCmn.nFramesEncoded - 1 ];
 
diff --git a/silk/fixed/encode_frame_FIX.c b/silk/fixed/encode_frame_FIX.c
index c3da9bcfd136179f137f5f932c7587b19f3d96c4..8899c2678f32222a62397049c98919f385594b95 100644
--- a/silk/fixed/encode_frame_FIX.c
+++ b/silk/fixed/encode_frame_FIX.c
@@ -69,9 +69,6 @@ TOC(VAD)
     /**************************************************/
     /* Convert speech activity into VAD and DTX flags */
     /**************************************************/
-    if( psEnc->sCmn.nFramesEncoded == 0 ) {
-        psEnc->sCmn.inDTX = psEnc->sCmn.useDTX;
-    }
     if( psEnc->sCmn.speech_activity_Q8 < SILK_FIX_CONST( SPEECH_ACTIVITY_DTX_THRES, 8 ) ) {
         psEnc->sCmn.indices.signalType = TYPE_NO_VOICE_ACTIVITY;
         psEnc->sCmn.noSpeechCounter++;