diff --git a/applications/calibration-multi/src/main.cpp b/applications/calibration-multi/src/main.cpp
index f9c258d7665933b510e6dc5af08e6c499e16ec91..4f1f24eb5cfa3cfc3240a27349c2c08a45a29862 100644
--- a/applications/calibration-multi/src/main.cpp
+++ b/applications/calibration-multi/src/main.cpp
@@ -37,6 +37,7 @@ using cv::Vec4d;
 
 using ftl::net::Universe;
 using ftl::rgbd::Source;
+using ftl::rgbd::Channel;
 
 Mat getCameraMatrix(const ftl::rgbd::Camera &parameters) {
 	Mat m = (cv::Mat_<double>(3,3) << parameters.fx, 0.0, -parameters.cx, 0.0, parameters.fy, -parameters.cy, 0.0, 0.0, 1.0);
@@ -377,8 +378,8 @@ void runCameraCalibration(	ftl::Configurable* root,
 	);
 
 	for (size_t i = 0; i < n_sources; i++) {
-		auto params_r = sources[i]->parameters(ftl::rgbd::kChanRight);
-		auto params_l = sources[i]->parameters(ftl::rgbd::kChanLeft);
+		auto params_r = sources[i]->parameters(Channel::Right);
+		auto params_l = sources[i]->parameters(Channel::Left);
 
 		CHECK(resolution == Size(params_r.width, params_r.height));
 		CHECK(resolution == Size(params_l.width, params_l.height));
@@ -395,7 +396,7 @@ void runCameraCalibration(	ftl::Configurable* root,
 
 	ftl::rgbd::Group group;
 	for (Source* src : sources) {
-		src->setChannel(ftl::rgbd::kChanRight);
+		src->setChannel(Channel::Right);
 		group.addSource(src);
 	}
 
@@ -408,14 +409,14 @@ void runCameraCalibration(	ftl::Configurable* root,
 	group.sync([&mutex, &new_frames, &rgb_new](ftl::rgbd::FrameSet &frames) {
 		mutex.lock();
 		bool good = true;
-		for (size_t i = 0; i < frames.channel1.size(); i ++) {
-			if (frames.channel1[i].empty()) good = false;
-			if (frames.channel1[i].empty()) good = false;
-			if (frames.channel1[i].channels() != 3) good = false; // ASSERT
-			if (frames.channel2[i].channels() != 3) good = false;
+		for (size_t i = 0; i < frames.sources.size(); i ++) {
+			if (frames.frames[i].get<cv::Mat>(Channel::Left).empty()) good = false;
+			if (frames.frames[i].get<cv::Mat>(Channel::Right).empty()) good = false;
+			if (frames.frames[i].get<cv::Mat>(Channel::Left).channels() != 3) good = false; // ASSERT
+			if (frames.frames[i].get<cv::Mat>(Channel::Right).channels() != 3) good = false;
 			if (!good) break;
-			cv::swap(frames.channel1[i], rgb_new[2 * i]);
-			cv::swap(frames.channel2[i], rgb_new[2 * i + 1]);
+			cv::swap(frames.frames[i].get<cv::Mat>(Channel::Left), rgb_new[2 * i]);
+			cv::swap(frames.frames[i].get<cv::Mat>(Channel::Right), rgb_new[2 * i + 1]);
 		}
 
 		new_frames = good;