/// <summary>
        /// Returns an observable stream.
        /// </summary>
        /// <returns>The observable of the MRU listing</returns>
        /// <remarks>
        /// As soon as you subscribe you'll get the most recent version of the MRU list.
        ///
        /// Combines MRU's from the following sources:
        /// 1. The internal database we maintain of our own stuff (that we've visited on this machine).
        /// </remarks>
        public static IObservable <IWalker.MRU[]> GetMRUListStream()
        {
            if (_MRUStream != null)
            {
                return(_MRUStream);
            }

            // Get streams from all the sources we are going to have to deal with
            var locals  = FetchMRUSFromLocalDB();
            var remotes = FetchMRUSFromRoamingData();

            // Combine the streams (without crossing them!!)
            var result = locals
                         .CombineLatest(remotes, (l, r) => MergeStreams(l, r))
                         .Select(mlst => mlst
                                 .OrderByDescending(k => k.StartTime)
                                 .Take(NumberOfMRUMeetings)
                                 .ToArray())
                         .Distinct(lst => MRUListHash(lst));

            // Make sure that it replays so when new folks join us (or a page gets re-initialized) they get the same
            // thing.
            _MRUStream = result
                         .Replay(1)
                         .RefCount();

            // When there is a MRU update, cache MRU to our remote file so others can see it.
            var db = new MRUDatabaseAccess();

            _MRUDBSubscription = MRUDatabaseAccess.MRUDBUpdated
                                 .SelectMany(_ => FetchMeetingsFromDB(db))
                                 .Subscribe(mrus =>
            {
                MRUSettingsCache.UpdateForMachine(MachineName, mrus);
            });

            return(_MRUStream);
        }
 /// <summary>
 /// Fetch all the MRU's from our roaming data. Trigger an update each time
 /// there is a new update as well.
 /// </summary>
 /// <returns></returns>
 private static IObservable <IWalker.MRU[]> FetchMRUSFromRoamingData()
 {
     return(MRUSettingsCache.RemoteMachineCacheUpdate
            .StartWith(default(Unit))
            .Select(_ => MRUSettingsCache.GetAllMachineMRUMeetings()));
 }