diff --git a/src/qcam/cam_select_dialog.h b/src/qcam/cam_select_dialog.h
index c23bad59..ee65eb88 100644
--- a/src/qcam/cam_select_dialog.h
+++ b/src/qcam/cam_select_dialog.h
@@ -56,6 +56,20 @@ public:
 		return cameraIdComboBox_->currentText().toStdString();
 	}
 
+	/* Hotplug / Unplug Support. */
+	void cameraAdded(libcamera::Camera *camera)
+	{
+		cameraIdComboBox_->addItem(QString::fromStdString(camera->id()));
+	}
+
+	void cameraRemoved(libcamera::Camera *camera)
+	{
+		int cameraIndex = cameraIdComboBox_->findText(
+			QString::fromStdString(camera->id()));
+
+		cameraIdComboBox_->removeItem(cameraIndex);
+	}
+
 private:
 	libcamera::CameraManager *cm_;
 
diff --git a/src/qcam/main_window.cpp b/src/qcam/main_window.cpp
index 758e2c94..dd30817d 100644
--- a/src/qcam/main_window.cpp
+++ b/src/qcam/main_window.cpp
@@ -594,6 +594,9 @@ void MainWindow::processHotplug(HotplugEvent *e)
 
 	if (event == HotplugEvent::HotPlug) {
 		cameraCombo_->addItem(QString::fromStdString(camera->id()));
+
+		if (camSelectDialog_)
+			camSelectDialog_->cameraAdded(camera);
 	} else if (event == HotplugEvent::HotUnplug) {
 		/* Check if the currently-streaming camera is removed. */
 		if (camera == camera_.get()) {
@@ -605,6 +608,9 @@ void MainWindow::processHotplug(HotplugEvent *e)
 
 		int camIndex = cameraCombo_->findText(QString::fromStdString(camera->id()));
 		cameraCombo_->removeItem(camIndex);
+
+		if (camSelectDialog_)
+			camSelectDialog_->cameraRemoved(camera);
 	}
 }
 
