diff --git a/src/api/QGCCorePlugin.cc b/src/api/QGCCorePlugin.cc
index c0cdd4a..91d95d2 100644
--- a/src/api/QGCCorePlugin.cc
+++ b/src/api/QGCCorePlugin.cc
@@ -136,22 +136,45 @@ void QGCCorePlugin::_activeVehicleChanged(Vehicle* activeVehicle)
         }
         if(_dynamicCameras) {
             disconnect(_dynamicCameras, &QGCCameraManager::currentCameraChanged, this, &QGCCorePlugin::_currentCameraChanged);
+            _dynamicCameras = nullptr;
         }
         _activeVehicle = activeVehicle;
-        connect(_activeVehicle, &Vehicle::dynamicCamerasChanged, this, &QGCCorePlugin::_dynamicCamerasChanged);
+        if(_activeVehicle) {
+            connect(_activeVehicle, &Vehicle::dynamicCamerasChanged, this, &QGCCorePlugin::_dynamicCamerasChanged);
+        }
     }
 }
 
 void QGCCorePlugin::_dynamicCamerasChanged()
 {
+    if(_currentCamera) {
+        disconnect(_currentCamera, &QGCCameraControl::autoStreamChanged, this, &QGCCorePlugin::_autoStreamChanged);
+        _currentCamera = nullptr;
+    }
     if(_activeVehicle) {
         _dynamicCameras = _activeVehicle->dynamicCameras();
-        connect(_dynamicCameras, &QGCCameraManager::currentCameraChanged, this, &QGCCorePlugin::_currentCameraChanged);
+        if(_dynamicCameras) {
+            connect(_dynamicCameras, &QGCCameraManager::currentCameraChanged, this, &QGCCorePlugin::_currentCameraChanged);
+        }
     }
 }
 
 void QGCCorePlugin::_currentCameraChanged()
 {
+    if(_dynamicCameras) {
+        QGCCameraControl* cp = _dynamicCameras->currentCameraInstance();
+        if(_currentCamera) {
+            disconnect(_currentCamera, &QGCCameraControl::autoStreamChanged, this, &QGCCorePlugin::_autoStreamChanged);
+        }
+        if(_currentCamera != cp) {
+            _currentCamera = cp;
+            connect(_currentCamera, &QGCCameraControl::autoStreamChanged, this, &QGCCorePlugin::_autoStreamChanged);
+        }
+    }
+}
+
+void QGCCorePlugin::_autoStreamChanged()
+{
     _resetInstrumentPages();
     emit instrumentPagesChanged();
 }
@@ -248,7 +271,7 @@ QVariantList& QGCCorePlugin::instrumentPages()
         _p->valuesPageWidgetInfo    = new QmlComponentInfo(tr("Values"),    QUrl::fromUserInput("qrc:/qml/ValuePageWidget.qml"));
         _p->cameraPageWidgetInfo    = new QmlComponentInfo(tr("Camera"),    QUrl::fromUserInput("qrc:/qml/CameraPageWidget.qml"));
 #if defined(QGC_GST_STREAMING)
-        if(!_dynamicCameras || !_dynamicCameras->currentCameraInstance() || !_dynamicCameras->currentCameraInstance()->autoStream()) {
+        if(!_currentCamera || !_currentCamera->autoStream()) {
             //-- Video Page Widget only available if using manual video streaming
             _p->videoPageWidgetInfo = new QmlComponentInfo(tr("Video Stream"), QUrl::fromUserInput("qrc:/qml/VideoPageWidget.qml"));
         }
diff --git a/src/api/QGCCorePlugin.h b/src/api/QGCCorePlugin.h
index 37c6f12..a299944 100644
--- a/src/api/QGCCorePlugin.h
+++ b/src/api/QGCCorePlugin.h
@@ -34,6 +34,7 @@ class QmlObjectListModel;
 class VideoReceiver;
 class PlanMasterController;
 class QGCCameraManager;
+class QGCCameraControl;
 
 class QGCCorePlugin : public QGCTool
 {
@@ -163,6 +164,7 @@ protected slots:
     void _activeVehicleChanged  (Vehicle* activeVehicle);
     void _dynamicCamerasChanged ();
     void _currentCameraChanged  ();
+    void _autoStreamChanged     ();
 
 protected:
     void _resetInstrumentPages  ();
@@ -172,6 +174,7 @@ protected:
     bool                _showAdvancedUI;
     Vehicle*            _activeVehicle  = nullptr;
     QGCCameraManager*   _dynamicCameras = nullptr;
+    QGCCameraControl*   _currentCamera  = nullptr;
 
 private:
     QGCCorePlugin_p*    _p;