private void PauseAll()
        {
            HeuristicManager.StopMonitoring();

            foreach (SlaveMediaElement slave in SubMediaElements)
            {
                if (slave.MediaElement != MainMedia)
                {
                    if (slave.MediaElement.CurrentState != SmoothStreamingMediaElementState.Paused &&
                        slave.MediaElement.CurrentState != SmoothStreamingMediaElementState.Closed)
                    {
                        try
                        {
                            slave.MediaElement.Pause();
                        }
                        catch (InvalidOperationException) { }
                    }
                }
            }
        }
        public void RegisterMaster(SmoothStreamingMediaElement media, TimeSpan position)
        {
            UnhookEvents();

            //MainMedia is for syncing
            //HeuristicsMasterMedia is used for Heuristics
            MainMedia = media;
            //MainMedia.Position = position;

            HookEvents();

            //UpdateSlaves();

            if (media == HeuristicMasterMedia)
            {
                HeuristicManager.StartMonitoring();
            }
            else
            {
                HeuristicManager.StopMonitoring();
            }
        }
        //Assuming Master is ready
        //Assuming Slaves are in a heuristic loadable state
        public void ResetHeuristics()
        {
            if (ResettingHeuristics != null)
            {
                ResettingHeuristics(this, null);
            }

            HeuristicManager.StopMonitoring();
            HeuristicManager.Clear();

            if (HeuristicMasterMedia != null)
            {
                HeuristicManager.AddSmoothStreamingMediaElement(HeuristicMasterMedia, HeuristicSettings.PrimaryMinBitRate,
                                                                HeuristicSettings.PrimaryMinFrameRate);
                // TODO:  determin min values depending on size of master

                foreach (SlaveMediaElement slave in SubMediaElements)
                {
                    if (slave.MediaElement != HeuristicMasterMedia)
                    {
                        // reset current heuristic enabled flag
                        slave.IsPhysicalSyncEnabled = false;

                        //if (slave.IsLogicalSyncEnabled) // does it logically needed to be playing, if so, add it to HM
                        //{
                        if (slave.MediaElement != null)
                        {
                            HeuristicManager.AddSmoothStreamingMediaElement(slave.MediaElement,
                                                                            HeuristicSettings.SecondaryMinBitRate,
                                                                            HeuristicSettings.SecondaryMinFrameRate);
                        }
                    }
                }

                HeuristicManager.StartMonitoring();
            }
        }