diff --git a/src/directrenderer.cpp b/src/directrenderer.cpp
index a207cf7657bf487672bf360d8d4b2f231829f10a..b692d41efd0baa3bce9069e9aa78104064250604 100644
--- a/src/directrenderer.cpp
+++ b/src/directrenderer.cpp
@@ -115,9 +115,11 @@ DirectRenderer::stopRendering()
 void
 DirectRenderer::update(const QSize& res, const QString&)
 {
+    stopRendering();
     Renderer::update(res);
 
     VideoManager::instance().registerSinkTarget(id(), pimpl_->target);
+    startRendering();
 }
 
 Frame
diff --git a/src/shmrenderer.cpp b/src/shmrenderer.cpp
index ab7f9e175a40cdec43116edd9f3268259a7a3587..8bbd2947d0e471805876b354991f25119edbd96a 100644
--- a/src/shmrenderer.cpp
+++ b/src/shmrenderer.cpp
@@ -245,6 +245,7 @@ ShmRenderer::~ShmRenderer()
 void
 ShmRenderer::update(const QSize& res, const QString& shmPath)
 {
+    Q_EMIT stopped();
     Renderer::update(res);
 
     if (!pimpl_->thread.isRunning())
@@ -252,6 +253,7 @@ ShmRenderer::update(const QSize& res, const QString& shmPath)
 
     pimpl_->path = shmPath;
     VideoManager::instance().startShmSink(id(), true);
+    Q_EMIT started();
 }
 
 Frame