                 + '. size: ' + cam.width + ',' + cam.height + '. fps: '
                 + cam.currentFPS + '. max fps: ' + cam.fps + ' total cameras: ' + Camera.names.length);
 
-            // TODO: handle a missing camera
-            // TODO: handle a "dead" camera (fps = 0?)
             /* TODO: handle a muted camera? we'll only get an
              * unmuted camera to start with if they've chosen to
              * Remember Allow. If they haven't chosen Remember Deny,

            trace("whilst checking camera " + cam.name + ". muted: " + cam.muted
                + '. size: ' + cam.width + ',' + cam.height + '. fps: '
                + cam.currentFPS + '. max fps: ' + cam.fps + ' total cameras: ' + Camera.names.length);
            if (cam.currentFPS > 0.0) {
                event.target.stop();
                this.callback('cameraReady');
            }
        }

        public function checkCameraLast(event:Event) : void {
            trace("whilst checking camera for last " + cam.name + ". muted: " + cam.muted
                + '. size: ' + cam.width + ',' + cam.height + '. fps: '
                + cam.currentFPS + '. max fps: ' + cam.fps + ' total cameras: ' + Camera.names.length);
            if (cam.currentFPS <= 0.0) {
                this.callback('cameraNotReady');
            }
        }

        }

        public function takePhoto() : void {
            if (cam.currentFPS <= 0.0) {
                this.callback('errorSending', 'No camera is available');
                return;
            }

            // freeze image
            try {
                var photobits:BitmapData = new BitmapData(stage.stageWidth, stage.stageHeight, false);
