diff --git a/edgetpuvision/gstreamer.py b/edgetpuvision/gstreamer.py
index 58e6ae4..16dbdab 100644
--- a/edgetpuvision/gstreamer.py
+++ b/edgetpuvision/gstreamer.py
@@ -174,19 +174,22 @@
     return None
 
 @contextlib.contextmanager
-def pull_sample(sink):
-    sample = sink.emit('pull-sample')
+def pull_sample(sink, preroll=False):
+    if preroll:
+        sample = sink.emit('pull-preroll')
+    else:
+        sample = sink.emit('pull-sample')
     buf = sample.get_buffer()
     meta = GstVideo.buffer_get_video_meta(buf)
 
     result, mapinfo = buf.map(Gst.MapFlags.READ)
     if result:
-        yield sample, mapinfo.data, meta
+        yield sample, mapinfo.data, meta, buf.pts
     buf.unmap(mapinfo)
 
 def new_sample_callback(process):
     def callback(sink, pipeline):
-        with pull_sample(sink) as (sample, data, meta):
+        with pull_sample(sink) as (sample, data, meta, pts):
             process(data, caps_size(sample.get_caps()))
         return Gst.FlowReturn.OK
     return callback
@@ -213,8 +216,8 @@
     if overlay:
         overlay.set_eos()
 
-def on_new_sample(sink, pipeline, render_overlay, layout, images, get_command):
-    with pull_sample(sink) as (sample, data, meta):
+def on_new_sample(sink, pipeline, render_overlay, layout, images, get_command, preroll):
+    with pull_sample(sink, preroll) as (sample, data, meta, pts):
         custom_command = None
         save_frame = False
 
@@ -240,9 +243,9 @@
         svg = render_overlay(inference_img,
                              command=custom_command)
 
-        svg_overlay = pipeline.get_by_name('svg_overlay')
-        if svg_overlay:
-            svg_overlay.set_property('data', svg)
+        overlay = pipeline.get_by_name('overlay')
+        if overlay:
+            overlay.emit('set-svg', svg, pts)
 
         if save_frame:
             images.put((data, layout.inference_size, svg))
@@ -340,8 +343,8 @@
         # drawing_area.realize()
 
         glsink = pipeline.get_by_name('glsink')
-        if display is Display.FULLSCREEN:
-          glsink.set_property('fullscreen', True)
+        #if display is Display.FULLSCREEN:
+        #  glsink.set_property('fullscreen', True)
 
         # window.connect('delete-event', Gtk.main_quit)
         # window.show_all()
@@ -370,7 +373,14 @@
                 render_overlay=functools.partial(render_overlay, layout=layout),
                 layout=layout,
                 images=images,
-                get_command=get_command),
+                get_command=get_command,
+                preroll=False),
+             'new-preroll': functools.partial(on_new_sample,
+                render_overlay=functools.partial(render_overlay, layout=layout),
+                layout=layout,
+                images=images,
+                get_command=get_command,
+                preroll=True),
              'eos' : on_sink_eos},
             **(signals or {})
         }
diff --git a/edgetpuvision/pipelines.py b/edgetpuvision/pipelines.py
index 89978d7..f51a045 100644
--- a/edgetpuvision/pipelines.py
+++ b/edgetpuvision/pipelines.py
@@ -20,6 +20,9 @@
         Filter('decodebin'),
         Filter('v4l2convert'),
         Caps('video/x-raw,width=%d,height=%d,format=BGRA' % (render_size.width, render_size.height)),
+        Filter('glupload'),
+        Filter('glcolorconvert'),
+        Caps('video/x-raw(memory:GLMemory),format=RGBA'),
     ]
 
 def v4l2_src(fmt, render_size):
@@ -27,14 +30,18 @@
         Source('v4l2', device=fmt.device),
         Caps('video/x-raw', format=fmt.pixel, width=fmt.size.width, height=fmt.size.height,
              framerate='%d/%d' % fmt.framerate),
-        Filter('glfilterbin filter=glbox'),
-        Caps('video/x-raw', width=render_size.width, height=render_size.height, format='BGRA'),
+        Filter('v4l2convert'),
+        Caps('video/x-raw,width=%d,height=%d,format=BGRA' % (render_size.width, render_size.height)),
+        Filter('glupload'),
+        Filter('glcolorconvert'),
+        Caps('video/x-raw(memory:GLMemory),format=RGBA'),
     ]
 
-def display_sink():
+def display_sink(sync=True):
     return [
-        Filter('rsvgoverlay', name='svg_overlay'),
-        Sink('wayland', name='glsink', sync=False)
+        Queue(),
+        Filter('glsvgoverlay', name='overlay', sync=True),
+        Sink('glimage', name='glsink', sync=sync, qos=False, max_lateness=-1)
     ]
 
 def h264_sink():
@@ -43,9 +50,11 @@
 def inference_pipeline(layout, stillimage=False):
     size = max_inner_size(layout.render_size, layout.inference_size)
     return [
+        Queue(),
         Filter('glfilterbin', filter='glbox'),
         Caps('video/x-raw', format='RGB', width=layout.inference_size.width, height=layout.inference_size.height),
-        Sink('app', name='appsink', emit_signals=True, max_buffers=1, drop=True, sync=False),
+        Queue(),
+        Sink('app', name='appsink', emit_signals=True, sync=False),
     ]
 
 # Display
@@ -69,11 +78,9 @@
         [decoded_file_src(filename, layout.render_size),
          Tee(name='t')],
         [Pad('t'),
-         Queue(max_size_buffers=1, leaky='downstream'),
-         display_sink()],
-        [Pad('t'),
-         Queue(max_size_buffers=1, leaky='downstream'),
          inference_pipeline(layout)],
+        [Pad('t'),
+         display_sink()],
     )
 
 def camera_display_pipeline(fmt, layout):
@@ -81,11 +88,9 @@
         [v4l2_src(fmt, layout.render_size),
          Tee(name='t')],
         [Pad('t'),
-         Queue(max_size_buffers=1, leaky='downstream'),
-         display_sink()],
-        [Pad(name='t'),
-         Queue(max_size_buffers=1, leaky='downstream'),
          inference_pipeline(layout)],
+        [Pad('t'),
+         display_sink(False)],
     )
 
 # Headless
