diff --git a/applications/gui/src/camera.cpp b/applications/gui/src/camera.cpp
index c981c662c8ef2dae9729f239716a20e9f446f459..a2b9ef5b8c68ccc98e2a5ef29a19e8153180650b 100644
--- a/applications/gui/src/camera.cpp
+++ b/applications/gui/src/camera.cpp
@@ -433,10 +433,10 @@ void ftl::gui::Camera::_draw(std::vector<ftl::rgbd::FrameSet*> &fss) {
 
 void ftl::gui::Camera::update(int fsid, const ftl::codecs::Channels<0> &c) {
 	if (!isVirtual() && ((1 << fsid) & fsmask_)) {
-		channels_ = c;
-		if (c.has(Channel::Depth)) {
+		channels_ += c;
+		//if (c.has(Channel::Depth)) {
 			//channels_ += Channel::ColourNormals;
-		}
+		//}
 	}
 }
 
@@ -469,6 +469,7 @@ void ftl::gui::Camera::update(std::vector<ftl::rgbd::FrameSet*> &fss) {
 
 			if ((size_t)fid_ >= fs->frames.size()) return;
 			frame = &fs->frames[fid_];
+			channels_ = frame->getChannels();
 
 			if (frame->hasChannel(Channel::Messages)) {
 				msgs_.clear();
diff --git a/applications/gui/src/src_window.cpp b/applications/gui/src/src_window.cpp
index fe3763252538ec1a2ac2597afdb97035c90c8eca..b3b71fabfd77187444df545c8fe6d389e0c954ad 100644
--- a/applications/gui/src/src_window.cpp
+++ b/applications/gui/src/src_window.cpp
@@ -248,7 +248,7 @@ bool SourceWindow::_processFrameset(ftl::rgbd::FrameSet &fs, bool fromstream) {
 
 		ftl::codecs::Channels<0> channels;
 		if (fromstream) channels = cstream->available(fs.id);
-		if ((*framesets_[fs.id]).frames.size() > 0) channels += (*framesets_[fs.id]).frames[0].getChannels();
+		//if ((*framesets_[fs.id]).frames.size() > 0) channels += (*framesets_[fs.id]).frames[0].getChannels();
 		cam.second.camera->update(fs.id, channels);
 	}
 	++cycle_;
diff --git a/components/operators/src/depth.cpp b/components/operators/src/depth.cpp
index b3a80080f0026ebac16a70718b0e0266d25e4630..59b50a1fef9b525089b2a7d8f4504fdc9e24cbcf 100644
--- a/components/operators/src/depth.cpp
+++ b/components/operators/src/depth.cpp
@@ -164,6 +164,7 @@ bool DepthChannel::apply(ftl::rgbd::FrameSet &in, ftl::rgbd::FrameSet &out, cuda
 	rbuf_.resize(in.frames.size());
 
 	for (size_t i=0; i<in.frames.size(); ++i) {
+		if (!in.hasFrame(i)) continue;
 		auto &f = in.frames[i];
 		if (!f.hasChannel(Channel::Depth) && f.hasChannel(Channel::Right)) {
 			_createPipeline();