diff --git a/subprojects/gst-plugins-base/gst/encoding/gstencodebasebin.c b/subprojects/gst-plugins-base/gst/encoding/gstencodebasebin.c
index b500dfda09..ac99c73eaa 100644
--- a/subprojects/gst-plugins-base/gst/encoding/gstencodebasebin.c
+++ b/subprojects/gst-plugins-base/gst/encoding/gstencodebasebin.c
@@ -150,6 +150,7 @@ struct _StreamGroup
   GstElement *fakesink;         /* Fakesink (can be NULL) */
   GstElement *combiner;
   GstElement *parser;
+  GstElement *timestamper;
   GstElement *smartencoder;
   GstElement *smart_capsfilter;
   gulong smart_capsfilter_sid;
@@ -418,6 +419,10 @@ gst_encode_base_bin_dispose (GObject * object)
     gst_plugin_feature_list_free (ebin->parsers);
   ebin->parsers = NULL;
 
+  if (ebin->timestampers)
+    gst_plugin_feature_list_free (ebin->timestampers);
+  ebin->timestampers = NULL;
+
   gst_encode_base_bin_tear_down_profile (ebin);
 
   if (ebin->raw_video_caps)
@@ -451,6 +456,10 @@ gst_encode_base_bin_init (GstEncodeBaseBin * encode_bin)
       gst_element_factory_list_get_elements (GST_ELEMENT_FACTORY_TYPE_PARSER,
       GST_RANK_MARGINAL);
 
+  encode_bin->timestampers =
+      gst_element_factory_list_get_elements
+      (GST_ELEMENT_FACTORY_TYPE_TIMESTAMPER, GST_RANK_MARGINAL);
+
   encode_bin->raw_video_caps = gst_caps_from_string ("video/x-raw");
   encode_bin->raw_audio_caps = gst_caps_from_string ("audio/x-raw");
   /* encode_bin->raw_text_caps = */
@@ -813,14 +822,16 @@ no_stream_group:
   }
 }
 
-/* Create a parser for the given stream profile */
+/* Filters processing elements (can be a parser or a timestamper) from
+ * @all_processors and returns the best fit (or %NULL if none matches)
+ */
 static inline GstElement *
-_get_parser (GstEncodeBaseBin * ebin, GstEncodingProfile * sprof,
-    GstElement * encoder)
+_create_compatible_processor (GList * all_processors,
+    GstEncodingProfile * sprof, GstElement * encoder)
 {
-  GList *parsers1, *parsers, *tmp;
-  GstElement *parser = NULL;
-  GstElementFactory *parserfact = NULL;
+  GList *processors1, *processors, *tmp;
+  GstElement *processor = NULL;
+  GstElementFactory *factory = NULL;
   GstCaps *format = NULL;
 
   if (encoder) {
@@ -835,39 +846,40 @@ _get_parser (GstEncodeBaseBin * ebin, GstEncodingProfile * sprof,
     format = gst_encoding_profile_get_format (sprof);
   }
 
-  GST_DEBUG ("Getting list of parsers for format %" GST_PTR_FORMAT, format);
+  GST_DEBUG ("Getting list of processors for format %" GST_PTR_FORMAT, format);
 
-  /* FIXME : requesting twice the parsers twice is a bit ugly, we should
-   * have a method to request on more than one condition */
-  parsers1 =
-      gst_element_factory_list_filter (ebin->parsers, format,
+  /* FIXME : requesting twice the processing element twice is a bit ugly, we
+   * should have a method to request on more than one condition */
+  processors1 =
+      gst_element_factory_list_filter (all_processors, format,
       GST_PAD_SRC, FALSE);
-  parsers =
-      gst_element_factory_list_filter (parsers1, format, GST_PAD_SINK, FALSE);
-  gst_plugin_feature_list_free (parsers1);
+  processors =
+      gst_element_factory_list_filter (processors1, format, GST_PAD_SINK,
+      FALSE);
+  gst_plugin_feature_list_free (processors1);
 
-  if (G_UNLIKELY (parsers == NULL)) {
-    GST_DEBUG ("Couldn't find any compatible parsers");
+  if (G_UNLIKELY (processors == NULL)) {
+    GST_DEBUG ("Couldn't find any compatible processing element");
     goto beach;
   }
 
-  for (tmp = parsers; tmp; tmp = tmp->next) {
+  for (tmp = processors; tmp; tmp = tmp->next) {
     /* FIXME : We're only picking the first one so far */
     /* FIXME : signal the user if he wants this */
-    parserfact = (GstElementFactory *) tmp->data;
+    factory = (GstElementFactory *) tmp->data;
     break;
   }
 
-  if (parserfact)
-    parser = gst_element_factory_create (parserfact, NULL);
+  if (factory)
+    processor = gst_element_factory_create (factory, NULL);
 
-  gst_plugin_feature_list_free (parsers);
+  gst_plugin_feature_list_free (processors);
 
 beach:
   if (format)
     gst_caps_unref (format);
 
-  return parser;
+  return processor;
 }
 
 static gboolean
@@ -1338,7 +1350,7 @@ setup_smart_encoder (GstEncodeBaseBin * ebin, GstEncodingProfile * sprof,
     goto err;
   }
 
-  parser = _get_parser (ebin, sprof, encoder);
+  parser = _create_compatible_processor (ebin->parsers, sprof, encoder);
   sgroup->smart_capsfilter = gst_element_factory_make ("capsfilter", NULL);
   reencoder_bin = gst_bin_new (NULL);
 
@@ -1562,7 +1574,9 @@ _create_stream_group (GstEncodeBaseBin * ebin, GstEncodingProfile * sprof,
     goto outfilter_link_failure;
   last = sgroup->outfilter;
 
-  sgroup->parser = _get_parser (ebin, sgroup->profile, sgroup->encoder);
+  sgroup->parser =
+      _create_compatible_processor (ebin->parsers, sgroup->profile,
+      sgroup->encoder);
   if (sgroup->parser != NULL) {
     GST_DEBUG ("Got a parser %s", GST_ELEMENT_NAME (sgroup->parser));
     gst_bin_add (GST_BIN (ebin), sgroup->parser);
@@ -1572,6 +1586,17 @@ _create_stream_group (GstEncodeBaseBin * ebin, GstEncodingProfile * sprof,
     last = sgroup->parser;
   }
 
+  sgroup->timestamper =
+      _create_compatible_processor (ebin->timestampers, sprof, encoder);
+  if (sgroup->timestamper != NULL) {
+    GST_DEBUG ("Got a timestamper %s", GST_ELEMENT_NAME (sgroup->timestamper));
+    gst_bin_add (GST_BIN (ebin), sgroup->timestamper);
+    tosync = g_list_append (tosync, sgroup->timestamper);
+    if (G_UNLIKELY (!gst_element_link (sgroup->timestamper, last)))
+      goto parser_link_failure;
+    last = sgroup->timestamper;
+  }
+
   /* Stream combiner */
   sgroup->combiner = g_object_new (GST_TYPE_STREAM_COMBINER, NULL);
 
diff --git a/subprojects/gst-plugins-base/gst/encoding/gstencodebasebin.h b/subprojects/gst-plugins-base/gst/encoding/gstencodebasebin.h
index 708e5ce5b3..d049d4efe7 100644
--- a/subprojects/gst-plugins-base/gst/encoding/gstencodebasebin.h
+++ b/subprojects/gst-plugins-base/gst/encoding/gstencodebasebin.h
@@ -62,6 +62,7 @@ struct _GstEncodeBaseBin
   GList *formatters;
   GList *encoders;
   GList *parsers;
+  GList *timestampers;
 
   /* Increasing counter for unique pad name */
   guint last_pad_id;