diff --git a/lib/c/2014/labcomm2014_renaming_decoder.c b/lib/c/2014/labcomm2014_renaming_decoder.c
index acd8d35b90a7696e35324ab61b139e6d2922be34..4243438aedfe7a90e355118246a6c2f80ac9f050 100644
--- a/lib/c/2014/labcomm2014_renaming_decoder.c
+++ b/lib/c/2014/labcomm2014_renaming_decoder.c
@@ -147,6 +147,13 @@ static int do_ioctl(struct labcomm2014_decoder *d,
                          ioctl_action, args);
 }
 
+static int do_decode_one(struct labcomm2014_decoder *d)
+{
+  struct decoder *id = d->context;
+
+  return id->next->decode_one(id->next);
+}
+
 static const struct labcomm2014_sample_ref *do_index_to_sample_ref(
   struct labcomm2014_decoder *d, int index)
 {
@@ -201,12 +208,12 @@ struct labcomm2014_decoder *labcomm2014_renaming_decoder_new(
     return NULL;
   } else {
       result->decoder.context = result;
-      result->decoder.reader = NULL;
+      result->decoder.reader = d->reader;
       result->decoder.error = d->error;
       result->decoder.memory = d->memory;
       result->decoder.scheduler = d->scheduler;
       result->decoder.free = do_free;
-      result->decoder.decode_one = d->decode_one;
+      result->decoder.decode_one = do_decode_one;
       result->decoder.sample_register = do_sample_register;
       result->decoder.ref_register = do_ref_register;
       result->decoder.ioctl = do_ioctl;
diff --git a/lib/c/2014/labcomm2014_renaming_encoder.c b/lib/c/2014/labcomm2014_renaming_encoder.c
index feaa330147bb2777c188c85f3d5129daf4f7c2ac..b84eaaf11307d4b74f99a7a1acc3c260b141cff1 100644
--- a/lib/c/2014/labcomm2014_renaming_encoder.c
+++ b/lib/c/2014/labcomm2014_renaming_encoder.c
@@ -263,7 +263,7 @@ struct labcomm2014_encoder *labcomm2014_renaming_encoder_new(
     return NULL;
   } else {
       result->encoder.context = result;
-      result->encoder.writer = NULL;
+      result->encoder.writer = e->writer;
       result->encoder.error = e->error;
       result->encoder.memory = e->memory;
       result->encoder.scheduler = e->scheduler;