protected override void OnHandleIntent (Intent intent)
		{
			Log.Debug (TAG, "onHandleIntent(intent=" + intent.ToString () + ")");

			ResultReceiver receiver = (ResultReceiver)intent.GetParcelableExtra (EXTRA_STATUS_RECEIVER);
			if (receiver != null)
				receiver.Send (StatusRunning, Bundle.Empty);
	
			Context context = this;
			var prefs = GetSharedPreferences (Prefs.IOSCHED_SYNC, FileCreationMode.Private);
			int localVersion = prefs.GetInt (Prefs.LOCAL_VERSION, VERSION_NONE);
	
			try {
				// Bulk of sync work, performed by executing several fetches from
				// local and online sources.
	
				long startLocal = Java.Lang.JavaSystem.CurrentTimeMillis ();
				bool localParse = localVersion < VERSION_CURRENT;
				Log.Debug (TAG, "found localVersion=" + localVersion + " and VERSION_CURRENT=" + VERSION_CURRENT);
				if (localParse) {
					// Load static local data
					mLocalExecutor.Execute (Resource.Xml.blocks, new LocalBlocksHandler ());
					mLocalExecutor.Execute (Resource.Xml.rooms, new LocalRoomsHandler ());
					mLocalExecutor.Execute (Resource.Xml.tracks, new LocalTracksHandler ());
					mLocalExecutor.Execute (Resource.Xml.search_suggest, new LocalSearchSuggestHandler ());
					mLocalExecutor.Execute (Resource.Xml.sessions, new LocalSessionsHandler ());
	
					// Parse values from local cache first, since spreadsheet copy
					// or network might be down.
//	                mLocalExecutor.execute(context, "cache-sessions.xml", new RemoteSessionsHandler());
//	                mLocalExecutor.execute(context, "cache-speakers.xml", new RemoteSpeakersHandler());
//	                mLocalExecutor.execute(context, "cache-vendors.xml", new RemoteVendorsHandler());
	
					// Save local parsed version
					prefs.Edit ().PutInt (Prefs.LOCAL_VERSION, VERSION_CURRENT).Commit ();
				}
	            
				Log.Debug (TAG, "local sync took " + (Java.Lang.JavaSystem.CurrentTimeMillis () - startLocal) + "ms");
	
				// Always hit remote spreadsheet for any updates
				long startRemote = Java.Lang.JavaSystem.CurrentTimeMillis ();
//		        mRemoteExecutor.executeGet(WORKSHEETS_URL, new RemoteWorksheetsHandler(mRemoteExecutor));
				Log.Debug (TAG, "remote sync took " + (Java.Lang.JavaSystem.CurrentTimeMillis () - startRemote) + "ms");
			
			} catch (Exception e) {
				Log.Error (TAG, "Problem while syncing", e);
		
				if (receiver != null) {
					// Pass back error to surface listener
					Bundle bundle = new Bundle ();
					bundle.PutString (Intent.ExtraText, e.ToString ());
					receiver.Send (StatusError, bundle);
				}        
			}

			// Announce success to any surface listener
			Log.Debug (TAG, "sync finished");
			if (receiver != null)
				receiver.Send (StatusFinished, Bundle.Empty);
		}
            public override void OnReceive(Context context, Intent intent)
            {
                Log.D(Tag + ".OnReceive", "Received intent: {0}", intent.ToString());

                if (_ignoreNotifications) {
                    Log.D(Tag + ".OnReceive", "Ignoring received intent: {0}", intent.ToString());
                    _ignoreNotifications = false;
                    return;
                }

                Log.D(Tag + ".OnReceive", "Received intent: {0}", intent.ToString());

                var manager = (ConnectivityManager)context.GetSystemService(Context.ConnectivityService);
                var networkInfo = manager.ActiveNetworkInfo;
                var status = networkInfo == null || !networkInfo.IsConnected
                    ? NetworkReachabilityStatus.Unreachable
                    : NetworkReachabilityStatus.Reachable;

                if (!status.Equals(_lastStatus))
                {
                    _callback(status);
                }

                lock(lockObject) 
                {
                    _lastStatus = status;
                }
            }