Index: lib/aardvark.js
===================================================================
--- a/lib/aardvark.js
+++ b/lib/aardvark.js
@@ -248,16 +248,21 @@ let Aardvark = exports.Aardvark =
   },
 
   onMouseMove: function(event)
   {
     this.mouseX = event.screenX;
     this.mouseY = event.screenY;
 
     this.hideSelection();
+    if (!this.browser)
+    {
+      // hideSelection() called quit()
+      return;
+    }
 
     let x = event.clientX;
     let y = event.clientY;
 
     // We might have coordinates relative to a frame, recalculate relative to top window
     let node = event.target;
     while (node && node.ownerDocument && node.ownerDocument.defaultView && node.ownerDocument.defaultView.frameElement)
     {
@@ -388,21 +393,34 @@ let Aardvark = exports.Aardvark =
     {
       this.prevPos = pos;
       this.paintNode.addEventListener("MozAfterPaint", this.onAfterPaint, false);
     }
   },
 
   hideSelection: function()
   {
-    if (this.boxElem.parentNode)
-      this.boxElem.parentNode.removeChild(this.boxElem);
+    try
+    {
+      if (this.boxElem.parentNode)
+        this.boxElem.parentNode.removeChild(this.boxElem);
+    }
+    catch (e)
+    {
+      // Are we using CPOW whose process is gone? Quit!
+      // Clear some variables to prevent recursion (quit will call us again).
+      this.boxElem = {};
+      this.paintNode = null;
+      this.quit();
+      return;
+    }
 
     if (this.paintNode)
       this.paintNode.removeEventListener("MozAfterPaint", this.onAfterPaint, false);
+
     this.paintNode = null;
     this.prevPos = null;
   },
 
   getWindowSize: function(wnd)
   {
     return [wnd.innerWidth, wnd.document.documentElement.clientHeight];
   },
