diff --git a/components/rgbd-sources/src/net.cpp b/components/rgbd-sources/src/net.cpp
index c9256adc6ff6afcdf4f0a292723631a35502b597..84c882ae3840081aa58e376efa2deb8a4facd3be 100644
--- a/components/rgbd-sources/src/net.cpp
+++ b/components/rgbd-sources/src/net.cpp
@@ -121,6 +121,12 @@ void NetSource::_recvChunk(int64_t frame, int chunk, bool delta, const vector<un
 	int cx = (chunk % chunks_dim_) * chunk_width_;
 	int cy = (chunk / chunks_dim_) * chunk_height_;
 
+	// Make certain last frame has finished decoding before swap
+	while (frame > current_frame_ && chunk_count_ < 16 && chunk_count_ > 0) {
+		LOG(WARNING) << "Previous frame not complete: " << frame;
+		std::this_thread::yield();
+	}
+
 	// Lock host to prevent grab
 	UNIQUE_LOCK(host_->mutex(),lk);
 
@@ -129,6 +135,8 @@ void NetSource::_recvChunk(int64_t frame, int chunk, bool delta, const vector<un
 		// Lock host to prevent grab
 		//UNIQUE_LOCK(host_->mutex(),lk);
 
+		chunk_count_ = 0;
+
 		// Swap the double buffers
 		cv::Mat tmp;
 		tmp = rgb_;
@@ -176,6 +184,7 @@ void NetSource::_recvChunk(int64_t frame, int chunk, bool delta, const vector<un
 		}
 	}
 
+	++chunk_count_;
 	if (chunk == 0) {
 		N_--;
 	}
@@ -232,6 +241,7 @@ void NetSource::_updateURI() {
 		chunks_dim_ = ftl::rgbd::kChunkDim;
 		chunk_width_ = params_.width / chunks_dim_;
 		chunk_height_ = params_.height / chunks_dim_;
+		chunk_count_ = 0;
 		rgb_ = cv::Mat(cv::Size(params_.width, params_.height), CV_8UC3, cv::Scalar(0,0,0));
 		depth_ = cv::Mat(cv::Size(params_.width, params_.height), CV_32FC1, 0.0f);
 		d_rgb_ = cv::Mat(cv::Size(params_.width, params_.height), CV_8UC3, cv::Scalar(0,0,0));
diff --git a/components/rgbd-sources/src/net.hpp b/components/rgbd-sources/src/net.hpp
index 766053faa3616f11a02efec16bd63642dd3a682d..453ebe76696e8243c1b2b26bc2530724809a5702 100644
--- a/components/rgbd-sources/src/net.hpp
+++ b/components/rgbd-sources/src/net.hpp
@@ -48,6 +48,7 @@ class NetSource : public detail::Source {
 	int default_quality_;
 	ftl::rgbd::channel_t prev_chan_;
 	int64_t current_frame_;
+	int chunk_count_;
 
 	// Double buffering
 	cv::Mat d_depth_;