diff --git a/src/Viewer/PUICamera.cxx b/src/Viewer/PUICamera.cxx
index 323239c5b..4c6c5e09e 100644
--- a/src/Viewer/PUICamera.cxx
+++ b/src/Viewer/PUICamera.cxx
@@ -43,6 +43,7 @@
 #include <Main/locale.hxx>
 #include <Viewer/CameraGroup.hxx>
 #include <Viewer/FGEventHandler.hxx>
+#include <Viewer/renderer.hxx>
 
 #include <Input/input.hxx>
 #include <Input/FGMouseInput.hxx>
@@ -270,6 +271,16 @@ PUICamera::PUICamera() :
 {
 }
 
+PUICamera::~PUICamera()
+{
+    SG_LOG(SG_GL, SG_INFO, "Deleting PUI camera");
+
+    auto viewer = globals->get_renderer()->getViewer();
+    if (viewer) {
+        viewer->removeEventHandler(_eventHandler);
+    }
+}
+
 void PUICamera::init(osg::Group* parent, osgViewer::Viewer* viewer)
 {
     setName("PUI FBO camera");
@@ -339,7 +350,8 @@ void PUICamera::init(osg::Group* parent, osgViewer::Viewer* viewer)
     // push_front so we keep the order of event handlers the opposite of
     // the rendering order (i.e top-most UI layer has the front-most event
     // handler)
-    viewer->getEventHandlers().push_front(new PUIEventHandler(this));
+    _eventHandler = new PUIEventHandler(this);
+    viewer->getEventHandlers().push_front(_eventHandler);
 }
 
 // remove once we require OSG 3.4
diff --git a/src/Viewer/PUICamera.hxx b/src/Viewer/PUICamera.hxx
index 5bfa34f79..6196ef82b 100644
--- a/src/Viewer/PUICamera.hxx
+++ b/src/Viewer/PUICamera.hxx
@@ -30,6 +30,10 @@ namespace osgViewer {
 class Viewer;
 }
 
+namespace osgGA {
+class GUIEventHandler;
+}
+
 namespace flightgear
 {
 
@@ -39,6 +43,7 @@ public:
     static void initPUI();
     
     PUICamera();
+    virtual ~PUICamera();
 
     osg::Object* cloneType() const override { return new PUICamera; }
     osg::Object* clone(const osg::CopyOp&) const override { return new PUICamera; }
@@ -53,6 +58,7 @@ private:
 
     osg::Texture2D* _fboTexture = nullptr;
     osg::Geometry* _fullScreenQuad = nullptr;
+    osgGA::GUIEventHandler* _eventHandler = nullptr;
 
     static void puGetWindowSize(int *width, int *height);
     static int puGetWindow();