diff --git a/applications/gui/src/camera.cpp b/applications/gui/src/camera.cpp
index 7f93add71311ec0a7c9369a2e21895efe3a20392..f44521b3a81d06a4087a56a8eacf6d2bf4d4700b 100644
--- a/applications/gui/src/camera.cpp
+++ b/applications/gui/src/camera.cpp
@@ -289,6 +289,14 @@ static void drawEdges(	const cv::Mat &in, cv::Mat &out,
 	cv::addWeighted(edges, weight, out, 1.0, 0.0, out, CV_8UC3);
 }
 
+bool ftl::gui::Camera::thumbnail(cv::Mat &thumb) {
+	UNIQUE_LOCK(mutex_, lk);
+	src_->grab(1,9);
+	if (rgb_.empty()) return false;
+	cv::resize(rgb_, thumb, cv::Size(320,180));
+	return true;
+}
+
 const GLTexture &ftl::gui::Camera::captureFrame() {
 	float now = (float)glfwGetTime();
 	delta_ = now - ftime_;
diff --git a/applications/gui/src/camera.hpp b/applications/gui/src/camera.hpp
index 89fcff188facd49a3b70f073d442cc9813979a23..f412d9c43d1809374566b1ba24c427ecda792695 100644
--- a/applications/gui/src/camera.hpp
+++ b/applications/gui/src/camera.hpp
@@ -40,6 +40,8 @@ class Camera {
 
 	const GLTexture &captureFrame();
 
+	bool thumbnail(cv::Mat &thumb);
+
 	nlohmann::json getMetaData();
 
 	StatisticsImage *stats_ = nullptr;
diff --git a/applications/gui/src/src_window.cpp b/applications/gui/src/src_window.cpp
index e98ec081b1d23f34cfe541756cbd8925e4290dbc..e7ffc4b1e0e44caccd67cce5d60d34b481ec58d7 100644
--- a/applications/gui/src/src_window.cpp
+++ b/applications/gui/src/src_window.cpp
@@ -116,7 +116,7 @@ void SourceWindow::draw(NVGcontext *ctx) {
 			cv::Mat t;
 			auto *cam = cameras_[available_[i]];
 			if (cam) {
-				if (cam->source()->thumbnail(t)) {
+				if (cam->thumbnail(t)) {
 					thumbs_[i].update(t);
 				} else {
 					refresh_thumbs_ = true;