diff --git a/src/gstkaldinnet2onlinedecoder.cc b/src/gstkaldinnet2onlinedecoder.cc
index 8494c33bda0da0b66d4edbf87bbe65c2f0650974..6b6604af2cc2c8fa4241f78595b988dbfb399754 100644
--- a/src/gstkaldinnet2onlinedecoder.cc
+++ b/src/gstkaldinnet2onlinedecoder.cc
@@ -249,6 +249,7 @@ static void gst_kaldinnet2onlinedecoder_init(
   // will be set later
   filter->feature_info = NULL;
   filter->sample_rate = 0;
+  filter->decoding = false;
 
   // init properties from various Kaldi Opts
   GstElementClass * klass = GST_ELEMENT_GET_CLASS(filter);
@@ -603,6 +604,7 @@ static void gst_kaldinnet2onlinedecoder_loop(
   gst_pad_pause_task(filter->srcpad);
   delete filter->audio_source;
   filter->audio_source = new GstBufferSource();
+  filter->decoding = false;
 }
 
 /* GstElement vmethod implementations */
@@ -653,8 +655,8 @@ static gboolean gst_kaldinnet2onlinedecoder_sink_event(GstPad * pad,
 
   switch (GST_EVENT_TYPE(event)) {
     case GST_EVENT_SEGMENT: {
-
       GST_DEBUG_OBJECT(filter, "Starting decoding task");
+      filter->decoding = true;
       gst_pad_start_task(filter->srcpad,
                          (GstTaskFunction) gst_kaldinnet2onlinedecoder_loop,
                          filter, NULL);
@@ -670,7 +672,12 @@ static gboolean gst_kaldinnet2onlinedecoder_sink_event(GstPad * pad,
     case GST_EVENT_EOS: {
       /* end-of-stream, we should close down all stream leftovers here */
       GST_DEBUG_OBJECT(filter, "EOS received");
-      filter->audio_source->SetEnded(true);
+      if (filter->decoding) {
+        filter->audio_source->SetEnded(true);
+      } else {
+        GST_DEBUG_OBJECT(filter, "EOS received while not decoding, pushing EOS out");
+        gst_pad_push_event(filter->srcpad, gst_event_new_eos());
+      }
       ret = TRUE;
       break;
     }
diff --git a/src/gstkaldinnet2onlinedecoder.h b/src/gstkaldinnet2onlinedecoder.h
index 01fceb8d142b3838daf26632271dd5dd84cf9880..d77bcac404ab663bf276048f758e7d0b1b2e0bff 100644
--- a/src/gstkaldinnet2onlinedecoder.h
+++ b/src/gstkaldinnet2onlinedecoder.h
@@ -105,6 +105,7 @@ struct _Gstkaldinnet2onlinedecoder
   fst::Fst<fst::StdArc> *decode_fst;
   fst::SymbolTable *word_syms;
   int sample_rate;
+  gboolean decoding;
 };
 
 struct _Gstkaldinnet2onlinedecoderClass