	public void start(BundleContext context) throws Exception {
		super.start(context);
		try {
			WebUtil.init();
			WebClientLog.setLoggingEnabled(DEBUG_HTTPCLIENT);
			initializePreferences(getPreferenceStore());
			CommonFonts.BOLD.toString();
			File dataDir = new File(getDataDirectory());
			dataDir.mkdirs();
			externalizationManager = new ExternalizationManager(getDataDirectory());
			repositoryManager = new TaskRepositoryManager();
			IExternalizationParticipant repositoryParticipant = new RepositoryExternalizationParticipant(
					externalizationManager, repositoryManager);
			externalizationManager.addParticipant(repositoryParticipant);
			taskList = new TaskList();
			repositoryModel = new RepositoryModel(taskList, repositoryManager);
			taskListExternalizer = new TaskListExternalizer(repositoryModel, repositoryManager);
			TaskListElementImporter taskListImporter = new TaskListElementImporter(repositoryManager, repositoryModel);
			taskListSaveParticipant = new TaskListExternalizationParticipant(repositoryModel, taskList,
					taskListExternalizer, externalizationManager, repositoryManager);
			externalizationManager.addParticipant(taskListSaveParticipant);
			taskList.addChangeListener(taskListSaveParticipant);
			taskActivityManager = new TaskActivityManager(repositoryManager, taskList);
			taskActivityManager.addActivationListener(taskListSaveParticipant);
			taskListManager = new TaskListManager(taskList, taskListSaveParticipant, taskListImporter);
			updateTaskActivityManager();
			proxyServiceReference = context.getServiceReference(IProxyService.class.getName());
			if (proxyServiceReference != null) {
				IProxyService proxyService = (IProxyService) context.getService(proxyServiceReference);
				if (proxyService != null) {
					proxyChangeListener = new IProxyChangeListener() {
						public void proxyInfoChanged(IProxyChangeEvent event) {
							List<TaskRepository> repos = repositoryManager.getAllRepositories();
							for (TaskRepository repo : repos) {
								if (repo.isDefaultProxyEnabled()) {
									repositoryManager.notifyRepositorySettingsChanged(repo);
								}
							}
						}
					};
					proxyService.addProxyChangeListener(proxyChangeListener);
				}
			}
			repositoryTemplateManager = new RepositoryTemplateManager();
			TasksUiExtensionReader.initStartupExtensions(taskListExternalizer, taskListImporter);
			File root = new File(this.getDataDirectory() + '/' + FOLDER_OFFLINE);
			OfflineFileStorage storage = new OfflineFileStorage(root);
			OfflineCachingStorage cachedStorage = new OfflineCachingStorage(storage);
			taskDataStorageManager = new TaskDataStorageManager(repositoryManager, cachedStorage);
			taskDataStorageManager.start();
			TaskDataStore taskDataStore = new TaskDataStore(repositoryManager);
			taskDataManager = new TaskDataManager(taskDataStorageManager, taskDataStore, repositoryManager,
					taskListManager.getTaskList(), taskActivityManager);
			taskDataManager.setDataPath(getDataDirectory());
			for (AbstractRepositoryConnector connector : repositoryManager.getRepositoryConnectors()) {
				if (connector instanceof AbstractLegacyRepositoryConnector) {
					((AbstractLegacyRepositoryConnector) connector).init(taskDataManager);
				}
			}
			taskJobFactory = new TaskJobFactory(taskListManager.getTaskList(), taskDataManager, repositoryManager,
					repositoryModel);
			taskActivityManager.addActivationListener(CONTEXT_TASK_ACTIVATION_LISTENER);
			taskActivityMonitor = new TaskActivityMonitor(taskActivityManager, ContextCorePlugin.getContextManager());
			taskActivityMonitor.start();
			saveParticipant = new ISaveParticipant() {
				public void doneSaving(ISaveContext context) {
				}
				public void prepareToSave(ISaveContext context) throws CoreException {
				}
				public void rollback(ISaveContext context) {
				}
				public void saving(ISaveContext context) throws CoreException {
					if (context.getKind() == ISaveContext.FULL_SAVE) {
						externalizationManager.stop();
						taskDataStorageManager.stop();
					}
				}
			};
			ResourcesPlugin.getWorkspace().addSaveParticipant(this, saveParticipant);
			ActivityExternalizationParticipant ACTIVITY_EXTERNALIZTAION_PARTICIPANT = new ActivityExternalizationParticipant(
					externalizationManager);
			externalizationManager.addParticipant(ACTIVITY_EXTERNALIZTAION_PARTICIPANT);
			taskActivityManager.addActivityListener(ACTIVITY_EXTERNALIZTAION_PARTICIPANT);
			taskActivityMonitor.setExternalizationParticipant(ACTIVITY_EXTERNALIZTAION_PARTICIPANT);
			loadDataSources();
			new TasksUiInitializationJob().schedule();
		} catch (Exception e) {
			StatusHandler.log(new Status(IStatus.ERROR, TasksUiPlugin.ID_PLUGIN, "Task list initialization failed", e));
		}
	}

	public void start(BundleContext context) throws Exception {
		super.start(context);
		try {
			WebUtil.init();
			WebClientLog.setLoggingEnabled(DEBUG_HTTPCLIENT);
			initializePreferences(getPreferenceStore());
			if (CommonFonts.BOLD == null) {
			}
			File dataDir = new File(getDataDirectory());
			dataDir.mkdirs();
			externalizationManager = new ExternalizationManager(getDataDirectory());
			repositoryManager = new TaskRepositoryManager();
			IExternalizationParticipant repositoryParticipant = new RepositoryExternalizationParticipant(
					externalizationManager, repositoryManager);
			externalizationManager.addParticipant(repositoryParticipant);
			taskList = new TaskList();
			repositoryModel = new RepositoryModel(taskList, repositoryManager);
			taskListExternalizer = new TaskListExternalizer(repositoryModel, repositoryManager);
			TaskListElementImporter taskListImporter = new TaskListElementImporter(repositoryManager, repositoryModel);
			taskListSaveParticipant = new TaskListExternalizationParticipant(repositoryModel, taskList,
					taskListExternalizer, externalizationManager, repositoryManager);
			externalizationManager.addParticipant(taskListSaveParticipant);
			taskList.addChangeListener(taskListSaveParticipant);
			taskActivityManager = new TaskActivityManager(repositoryManager, taskList);
			taskActivityManager.addActivationListener(taskListSaveParticipant);
			taskListManager = new TaskListManager(taskList, taskListSaveParticipant, taskListImporter);
			updateTaskActivityManager();
			proxyServiceReference = context.getServiceReference(IProxyService.class.getName());
			if (proxyServiceReference != null) {
				IProxyService proxyService = (IProxyService) context.getService(proxyServiceReference);
				if (proxyService != null) {
					proxyChangeListener = new IProxyChangeListener() {
						public void proxyInfoChanged(IProxyChangeEvent event) {
							List<TaskRepository> repos = repositoryManager.getAllRepositories();
							for (TaskRepository repo : repos) {
								if (repo.isDefaultProxyEnabled()) {
									repositoryManager.notifyRepositorySettingsChanged(repo);
								}
							}
						}
					};
					proxyService.addProxyChangeListener(proxyChangeListener);
				}
			}
			repositoryTemplateManager = new RepositoryTemplateManager();
			TasksUiExtensionReader.initStartupExtensions(taskListExternalizer, taskListImporter);
			File root = new File(this.getDataDirectory() + '/' + FOLDER_OFFLINE);
			OfflineFileStorage storage = new OfflineFileStorage(root);
			OfflineCachingStorage cachedStorage = new OfflineCachingStorage(storage);
			taskDataStorageManager = new TaskDataStorageManager(repositoryManager, cachedStorage);
			taskDataStorageManager.start();
			TaskDataStore taskDataStore = new TaskDataStore(repositoryManager);
			taskDataManager = new TaskDataManager(taskDataStorageManager, taskDataStore, repositoryManager,
					taskListManager.getTaskList(), taskActivityManager);
			taskDataManager.setDataPath(getDataDirectory());
			for (AbstractRepositoryConnector connector : repositoryManager.getRepositoryConnectors()) {
				if (connector instanceof AbstractLegacyRepositoryConnector) {
					((AbstractLegacyRepositoryConnector) connector).init(taskDataManager);
				}
			}
			taskJobFactory = new TaskJobFactory(taskListManager.getTaskList(), taskDataManager, repositoryManager,
					repositoryModel);
			taskActivityManager.addActivationListener(CONTEXT_TASK_ACTIVATION_LISTENER);
			taskActivityMonitor = new TaskActivityMonitor(taskActivityManager, ContextCorePlugin.getContextManager());
			taskActivityMonitor.start();
			saveParticipant = new ISaveParticipant() {
				public void doneSaving(ISaveContext context) {
				}
				public void prepareToSave(ISaveContext context) throws CoreException {
				}
				public void rollback(ISaveContext context) {
				}
				public void saving(ISaveContext context) throws CoreException {
					if (context.getKind() == ISaveContext.FULL_SAVE) {
						externalizationManager.stop();
						taskDataStorageManager.stop();
					}
				}
			};
			ResourcesPlugin.getWorkspace().addSaveParticipant(this, saveParticipant);
			ActivityExternalizationParticipant ACTIVITY_EXTERNALIZTAION_PARTICIPANT = new ActivityExternalizationParticipant(
					externalizationManager);
			externalizationManager.addParticipant(ACTIVITY_EXTERNALIZTAION_PARTICIPANT);
			taskActivityManager.addActivityListener(ACTIVITY_EXTERNALIZTAION_PARTICIPANT);
			taskActivityMonitor.setExternalizationParticipant(ACTIVITY_EXTERNALIZTAION_PARTICIPANT);
			loadDataSources();
			new TasksUiInitializationJob().schedule();
		} catch (Exception e) {
			StatusHandler.log(new Status(IStatus.ERROR, TasksUiPlugin.ID_PLUGIN, "Task list initialization failed", e));
		}
	}
