public void Init(Frame frame)
        {
            mFrame = frame;
            mConfig = new ViewerConfig(frame.Name);

            mViewerController = new ViewerController(mConfig.ViewerToggleHUDKey, mFrame.Name);
            if (mConfig.BackwardsCompatible)
                mProxyController = new BackwardCompatibleController(frame);
            else
                mProxyController = new FullController(frame);
            mProxyController.Offset = mConfig.Offset;

            mExitListener = new Action(mViewerController_Exited);

            mFrame.Core.DeltaUpdated += new Action<Core, DeltaUpdateEventArgs>(Coordinator_DeltaUpdated);
            mFrame.Core.CameraUpdated += new Action<Core, CameraUpdateEventArgs>(Coordinator_CameraUpdated);
            mFrame.Core.ControlModeChanged += new Action<Core, ControlMode>(Coordinator_CameraModeChanged);
            mFrame.Core.EyeUpdated += new Action<Core, EventArgs>(Coordinator_EyeUpdated);
            mFrame.Core.InitialisationComplete += new Action(Core_InitialisationComplete);
            mFrame.Changed += new Action<Chimera.Frame, EventArgs>(mFrame_Changed);
            mFrame.MonitorChanged += new Action<Chimera.Frame, Screen>(mFrame_MonitorChanged);
            mProxyController.OnClientLoggedIn += new EventHandler(mProxyController_OnClientLoggedIn);
            mProxyController.PositionChanged += new Action<Vector3, Rotation>(mProxyController_PositionChanged);
            mViewerController.Exited += mExitListener;
        }