diff --git a/celt/celt_decoder.c b/celt/celt_decoder.c
index f2d4802823189bccbd4ca6debeaff792854a81f4..c0c997f0a8d2bd4bed32c71c34e668bcbbbed2dd 100644
--- a/celt/celt_decoder.c
+++ b/celt/celt_decoder.c
@@ -568,7 +568,7 @@ static const float sinc_filter[SINC_ORDER+1] = {
     4.2931e-05f
 };
 
-void update_plc_state(LPCNetPLCState *lpcnet, celt_sig *decode_mem[2], int CC)
+void update_plc_state(LPCNetPLCState *lpcnet, celt_sig *decode_mem[2], float *plc_preemphasis_mem, int CC)
 {
    int i;
    int tmp_read_post, tmp_fec_skip;
@@ -583,6 +583,7 @@ void update_plc_state(LPCNetPLCState *lpcnet, celt_sig *decode_mem[2], int CC)
    }
    /* Down-sample the last 40 ms. */
    for (i=1;i<DECODE_BUFFER_SIZE;i++) buf48k[i] += PREEMPHASIS*buf48k[i-1];
+   *plc_preemphasis_mem = buf48k[DECODE_BUFFER_SIZE-1];
    offset = DECODE_BUFFER_SIZE-SINC_ORDER-1 - 3*(PLC_UPDATE_SAMPLES-1);
    celt_assert(3*(PLC_UPDATE_SAMPLES-1) + SINC_ORDER + offset == DECODE_BUFFER_SIZE-1);
    for (i=0;i<PLC_UPDATE_SAMPLES;i++) {
@@ -720,7 +721,7 @@ static void celt_decode_lost(CELTDecoder * OPUS_RESTRICT st, int N, int LM
       if (loss_duration == 0)
       {
 #ifdef ENABLE_DEEP_PLC
-         update_plc_state(lpcnet, decode_mem, C);
+         update_plc_state(lpcnet, decode_mem, &st->plc_preemphasis_mem, C);
 #endif
          st->last_pitch_index = pitch_index = celt_plc_pitch_search(decode_mem, C, st->arch);
       } else {
@@ -916,7 +917,6 @@ static void celt_decode_lost(CELTDecoder * OPUS_RESTRICT st, int N, int LM
       if (st->complexity >= 5 || lpcnet->fec_fill_pos > 0) {
          float overlap_mem;
          int samples_needed16k;
-         int ignored = 0;
          celt_sig *buf;
          VARDECL(float, buf_copy);
          buf = decode_mem[0];
@@ -929,9 +929,6 @@ static void celt_decode_lost(CELTDecoder * OPUS_RESTRICT st, int N, int LM
             and the overlap at the end. */
          samples_needed16k = (N+SINC_ORDER+overlap)/3;
          if (loss_duration == 0) {
-            /* Ignore the first 8 samples due to the update resampling delay. */
-            ignored = SINC_ORDER/6;
-            samples_needed16k += ignored;
             st->plc_fill = 0;
          }
          while (st->plc_fill < samples_needed16k) {
@@ -942,15 +939,15 @@ static void celt_decode_lost(CELTDecoder * OPUS_RESTRICT st, int N, int LM
          for (i=0;i<(N+overlap)/3;i++) {
             int j;
             float sum;
-            for (sum=0, j=0;j<17;j++) sum += 3*st->plc_pcm[ignored+i+j]*sinc_filter[3*j];
+            for (sum=0, j=0;j<17;j++) sum += 3*st->plc_pcm[i+j]*sinc_filter[3*j];
             buf[DECODE_BUFFER_SIZE-N+3*i] = sum;
-            for (sum=0, j=0;j<16;j++) sum += 3*st->plc_pcm[ignored+i+j+1]*sinc_filter[3*j+2];
+            for (sum=0, j=0;j<16;j++) sum += 3*st->plc_pcm[i+j+1]*sinc_filter[3*j+2];
             buf[DECODE_BUFFER_SIZE-N+3*i+1] = sum;
-            for (sum=0, j=0;j<16;j++) sum += 3*st->plc_pcm[ignored+i+j+1]*sinc_filter[3*j+1];
+            for (sum=0, j=0;j<16;j++) sum += 3*st->plc_pcm[i+j+1]*sinc_filter[3*j+1];
             buf[DECODE_BUFFER_SIZE-N+3*i+1] = sum;
          }
-         OPUS_MOVE(st->plc_pcm, &st->plc_pcm[N/3+ignored], st->plc_fill-N/3-ignored);
-         st->plc_fill -= N/3+ignored;
+         OPUS_MOVE(st->plc_pcm, &st->plc_pcm[N/3], st->plc_fill-N/3);
+         st->plc_fill -= N/3;
          for (i=0;i<N;i++) {
             float tmp = buf[DECODE_BUFFER_SIZE-N+i];
             buf[DECODE_BUFFER_SIZE-N+i] -= PREEMPHASIS*st->plc_preemphasis_mem;