diff --git a/lpcnet_sources.mk b/lpcnet_sources.mk
index 2b3217bb3f9aa9aab33815f93b1f52cc8a71b590..16daaf152c5d1ff835417e4286e2d34f885067aa 100644
--- a/lpcnet_sources.mk
+++ b/lpcnet_sources.mk
@@ -17,4 +17,7 @@ lpcnet/src/dred_rdovae_enc.c \
 lpcnet/src/dred_rdovae_enc_data.c \
 lpcnet/src/dred_rdovae_dec.c \
 lpcnet/src/dred_rdovae_dec_data.c \
-lpcnet/src/dred_rdovae_stats_data.c
+lpcnet/src/dred_rdovae_stats_data.c \
+silk/dred_encoder.c \
+silk/dred_coding.c \
+silk/dred_decoder.c
diff --git a/silk_sources.mk b/silk_sources.mk
index 77186878c390a540a4fa485087cac97f08009fe1..3df248166d2b3109cf2c54f87edc8a4af9bc7d3d 100644
--- a/silk_sources.mk
+++ b/silk_sources.mk
@@ -75,10 +75,7 @@ silk/stereo_decode_pred.c \
 silk/stereo_encode_pred.c \
 silk/stereo_find_predictor.c \
 silk/stereo_quant_pred.c \
-silk/LPC_fit.c \
-silk/dred_encoder.c \
-silk/dred_coding.c \
-silk/dred_decoder.c
+silk/LPC_fit.c
 
 SILK_SOURCES_X86_RTCD = \
 silk/x86/x86_silk_map.c
diff --git a/src/opus_decoder.c b/src/opus_decoder.c
index aad378f03a6b1e4bf0bbd44d50a4275497e1d3ce..2cb3247db5de67e6799d9e9f8f9738f7372c8946 100644
--- a/src/opus_decoder.c
+++ b/src/opus_decoder.c
@@ -1141,6 +1141,7 @@ int opus_dred_decoder_get_size(void)
   return sizeof(OpusDREDDecoder);
 }
 
+#ifdef ENABLE_NEURAL_FEC
 int dred_decoder_load_model(OpusDREDDecoder *dec, const unsigned char *data, int len)
 {
     WeightArray *list;
@@ -1150,10 +1151,11 @@ int dred_decoder_load_model(OpusDREDDecoder *dec, const unsigned char *data, int
     free(list);
     return (ret == 0) ? OPUS_OK : OPUS_BAD_ARG;
 }
+#endif
 
 int opus_dred_decoder_init(OpusDREDDecoder *dec)
 {
-#ifndef USE_WEIGHTS_FILE
+#if defined(ENABLE_NEURAL_FEC) && !defined(USE_WEIGHTS_FILE)
    init_rdovaedec(&dec->model, rdovae_dec_arrays);
 #endif
    dec->arch = opus_select_arch();