public WherigoModel()
		{
			Core = new WFCoreAdapter();

			// Store
			CartridgeStore = new CartridgeStore();
		}
		public WherigoModel()
		{
			Core = new WFCoreAdapter();

			CartridgeStore = new CartridgeStore();

            History = Models.History.FromCacheOrCreate();
		}
		public WherigoModel()
		{
            Settings = new Models.Settings();
            Settings.PropertyChanged += OnSettingsPropertyChanged;
            
            Core = new WFCoreAdapter();

            CartridgeStore = new CartridgeStore()
            {
                AutoSyncProvidersOnLink = Settings.SyncOnStartUp
            };

            History = Models.History.FromCacheOrCreate();
		}
        public WherigoModel()
        {
            Settings = new Models.Settings();
            Settings.PropertyChanged += OnSettingsPropertyChanged;

            Core = new WFCoreAdapter();

            CartridgeStore = new CartridgeStore()
            {
                AutoSyncProvidersOnLink = Settings.SyncOnStartUp
            };

            History = Models.History.FromCacheOrCreate();
        }
        /// <summary>
        /// When all hope died, as a last resort, this method kills the
        /// current Wherigo Core instance and replaces it with a new one.
        /// </summary>
        /// <remarks>
        /// As with all last resorts, potential side-effects are numerous and
        /// unpredictable.
        /// </remarks>
        internal void HardResetCore()
        {
            // Immediately disposes the current instance, if any.
            if (Core != null)
            {
                try
                {
                    Core.Dispose();
                }
                catch (Exception ex)
                {
                    // Not good: the engine wouldn't let itself be disposed.
                    // Signal this.
                    DebugUtils.DumpException(ex, "hard reset, failed Engine disposal", true);
                }
            }

            // A new Core for X-mas.
            Core = new WFCoreAdapter();
        }
		/// <summary>
		/// When all hope died, as a last resort, this method kills the
		/// current Wherigo Core instance and replaces it with a new one.
		/// </summary>
		/// <remarks>
		/// As with all last resorts, potential side-effects are numerous and
		/// unpredictable.
		/// </remarks>
		internal void HardResetCore()
		{
			// Immediately disposes the current instance, if any.
			if (Core != null)
			{
				try
				{
					Core.Dispose();
				}
				catch (Exception ex)
				{
					// Not good: the engine wouldn't let itself be disposed.
					// Signal this.
					DebugUtils.DumpException(ex, "hard reset, failed Engine disposal", true);
				}
			}

			// A new Core for X-mas.
			Core = new WFCoreAdapter();
		}
		private void RefreshCalibrationFromCore(WFCoreAdapter engine)
		{
			if (engine == null)
			{
				return;
			}			

			double? hAcc = engine.DeviceHeadingAccuracy;
			IsHeadingAccuracyAvailable = hAcc.HasValue;
			if (hAcc.HasValue)
			{
				RefreshCalibration(hAcc.Value);
			}
		}