Progress on: 108021: make monitor listen to all preference changes
https://bugs.eclipse.org/bugs/show_bug.cgi?id=108021
diff --git a/org.eclipse.mylyn.monitor.tests/src/org/eclipse/mylyn/monitor/reports/tests/ContextParsingTest.java b/org.eclipse.mylyn.monitor.tests/src/org/eclipse/mylyn/monitor/reports/tests/ContextParsingTest.java
index ee427d1..1c86f52 100644
--- a/org.eclipse.mylyn.monitor.tests/src/org/eclipse/mylyn/monitor/reports/tests/ContextParsingTest.java
+++ b/org.eclipse.mylyn.monitor.tests/src/org/eclipse/mylyn/monitor/reports/tests/ContextParsingTest.java
@@ -21,7 +21,6 @@
 import org.eclipse.mylar.internal.core.ScalingFactor;
 import org.eclipse.mylar.internal.core.ScalingFactors;
 import org.eclipse.mylar.internal.monitor.InteractionEventLogger;
-import org.eclipse.mylar.internal.monitor.monitors.SelectionMonitor;
 import org.eclipse.mylar.monitor.tests.MylarMonitorTestsPlugin;
 import org.eclipse.mylar.provisional.core.IMylarElement;
 import org.eclipse.mylar.provisional.core.InteractionEvent;
@@ -68,17 +67,19 @@
 		MylarContext context = new MylarContext("test", scalingFactors);
 		int numEvents = 0;
 		for (InteractionEvent event : events) {
-			if (SelectionMonitor.isValidStructureHandle(event)) {
+			if (event.isValidStructureHandle()) {
+//			if (SelectionMonitor.isValidStructureHandle(event)) {
 				InteractionEvent newEvent = InteractionEvent.makeCopy(event, 1f);
 				context.parseEvent(newEvent); 
-				if (SelectionMonitor.isValidStructureHandle(event) && event.getKind().equals(InteractionEvent.Kind.SELECTION)) {
+				if (event.isValidStructureHandle() && event.getKind().equals(InteractionEvent.Kind.SELECTION)) {
+//				if (SelectionMonitor.isValidStructureHandle(event) && event.getKind().equals(InteractionEvent.Kind.SELECTION)) {
 					IMylarElement element = context.parseEvent(event);
 					
 					// reset decay if not selected
 					if (element.getInterest().getValue() < 0) { 
 						float decayOffset = (-1) * (element.getInterest().getValue()) + 1;
 						element = context.parseEvent(new InteractionEvent(InteractionEvent.Kind.MANIPULATION,
-								event.getContentType(), event.getStructureHandle(), "test-decay", decayOffset));
+								event.getStructureKind(), event.getStructureHandle(), "test-decay", decayOffset));
 					} 
 					
 					assertTrue("should be positive: " + element.getInterest().getValue(), element.getInterest().getValue() >= 0);
diff --git a/org.eclipse.mylyn.monitor.tests/src/org/eclipse/mylyn/monitor/tests/InteractionEventExternalizationTest.java b/org.eclipse.mylyn.monitor.tests/src/org/eclipse/mylyn/monitor/tests/InteractionEventExternalizationTest.java
index 1539303..1d89b89 100644
--- a/org.eclipse.mylyn.monitor.tests/src/org/eclipse/mylyn/monitor/tests/InteractionEventExternalizationTest.java
+++ b/org.eclipse.mylyn.monitor.tests/src/org/eclipse/mylyn/monitor/tests/InteractionEventExternalizationTest.java
@@ -18,6 +18,8 @@
 
 import org.eclipse.mylar.core.tests.AbstractContextTest;
 import org.eclipse.mylar.internal.monitor.InteractionEventLogger;
+import org.eclipse.mylar.internal.monitor.MylarMonitorPlugin;
+import org.eclipse.mylar.internal.monitor.MylarMonitorPreferenceConstants;
 import org.eclipse.mylar.provisional.core.InteractionEvent;
 
 /**
@@ -28,6 +30,8 @@
 	private static final String PATH = "test-log.xml";
 
 	public void testManualExternalization() throws IOException {
+		MylarMonitorPlugin.getPrefs().setValue(MylarMonitorPreferenceConstants.PREF_MONITORING_OBFUSCATE, false);
+
 		List<InteractionEvent> events = new ArrayList<InteractionEvent>();
 		File f = new File(PATH);
 		if (f.exists()) {
@@ -51,5 +55,7 @@
 		for (int i = 0; i < events.size(); i++) {
 			assertEquals(events.get(i), readEvents.get(i));
 		}
+
+		MylarMonitorPlugin.getPrefs().setValue(MylarMonitorPreferenceConstants.PREF_MONITORING_OBFUSCATE, true);
 	}
 }
diff --git a/org.eclipse.mylyn.monitor.tests/src/org/eclipse/mylyn/monitor/tests/MockSelectionMonitor.java b/org.eclipse.mylyn.monitor.tests/src/org/eclipse/mylyn/monitor/tests/MockSelectionMonitor.java
new file mode 100644
index 0000000..5abd40a
--- /dev/null
+++ b/org.eclipse.mylyn.monitor.tests/src/org/eclipse/mylyn/monitor/tests/MockSelectionMonitor.java
@@ -0,0 +1,27 @@
+/*******************************************************************************
+ * Copyright (c) 2004 - 2006 University Of British Columbia and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     University Of British Columbia - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.mylar.monitor.tests;
+
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.mylar.provisional.core.AbstractUserInteractionMonitor;
+import org.eclipse.ui.IWorkbenchPart;
+
+/**
+ * @author Mik Kersten
+ */
+public class MockSelectionMonitor extends AbstractUserInteractionMonitor {
+
+	@Override
+	protected void handleWorkbenchPartSelection(IWorkbenchPart part, ISelection selection, boolean contributeToContext) {
+		handleElementSelection(part, selection, contributeToContext);
+	}
+}
diff --git a/org.eclipse.mylyn.monitor.tests/src/org/eclipse/mylyn/monitor/tests/MonitorTest.java b/org.eclipse.mylyn.monitor.tests/src/org/eclipse/mylyn/monitor/tests/MonitorTest.java
index c6780ae..4da4abc 100644
--- a/org.eclipse.mylyn.monitor.tests/src/org/eclipse/mylyn/monitor/tests/MonitorTest.java
+++ b/org.eclipse.mylyn.monitor.tests/src/org/eclipse/mylyn/monitor/tests/MonitorTest.java
@@ -25,7 +25,6 @@
 import org.eclipse.mylar.internal.monitor.monitors.BrowserMonitor;
 import org.eclipse.mylar.internal.monitor.monitors.KeybindingCommandMonitor;
 import org.eclipse.mylar.internal.monitor.monitors.PerspectiveChangeMonitor;
-import org.eclipse.mylar.internal.monitor.monitors.SelectionMonitor;
 import org.eclipse.mylar.provisional.core.InteractionEvent;
 import org.eclipse.mylar.provisional.core.MylarPlugin;
 import org.eclipse.ui.IPerspectiveDescriptor;
@@ -39,7 +38,7 @@
 
 	private InteractionEventLogger logger = MylarMonitorPlugin.getDefault().getInteractionLogger();
 
-	private SelectionMonitor selectionMonitor = new SelectionMonitor();
+	private MockSelectionMonitor selectionMonitor = new MockSelectionMonitor();
 
 	private KeybindingCommandMonitor commandMonitor = new KeybindingCommandMonitor();
 
diff --git a/org.eclipse.mylyn.monitor.tests/src/org/eclipse/mylyn/monitor/tests/MultiWindowMonitorTest.java b/org.eclipse.mylyn.monitor.tests/src/org/eclipse/mylyn/monitor/tests/MultiWindowMonitorTest.java
index fe3c220..bb80bf2 100644
--- a/org.eclipse.mylyn.monitor.tests/src/org/eclipse/mylyn/monitor/tests/MultiWindowMonitorTest.java
+++ b/org.eclipse.mylyn.monitor.tests/src/org/eclipse/mylyn/monitor/tests/MultiWindowMonitorTest.java
@@ -21,7 +21,6 @@
 import org.eclipse.jface.viewers.StructuredSelection;
 import org.eclipse.mylar.internal.monitor.InteractionEventLogger;
 import org.eclipse.mylar.internal.monitor.MylarMonitorPlugin;
-import org.eclipse.mylar.internal.monitor.monitors.SelectionMonitor;
 import org.eclipse.ui.IMemento;
 import org.eclipse.ui.IWorkbenchWindow;
 import org.eclipse.ui.PlatformUI;
@@ -38,7 +37,7 @@
 
 	private InteractionEventLogger logger = MylarMonitorPlugin.getDefault().getInteractionLogger();
 
-	private SelectionMonitor selectionMonitor = new SelectionMonitor();
+	private MockSelectionMonitor selectionMonitor = new MockSelectionMonitor();
 
 	private IWorkbenchWindow window1;
 
diff --git a/org.eclipse.mylyn.monitor.ui/META-INF/MANIFEST.MF b/org.eclipse.mylyn.monitor.ui/META-INF/MANIFEST.MF
index 87c92e7..ce033f8 100644
--- a/org.eclipse.mylyn.monitor.ui/META-INF/MANIFEST.MF
+++ b/org.eclipse.mylyn.monitor.ui/META-INF/MANIFEST.MF
@@ -9,16 +9,12 @@
  org.eclipse.core.runtime,
  org.eclipse.core.resources,
  org.eclipse.jface.text,
- org.eclipse.jdt.ui,
- org.eclipse.ui.ide,
- org.eclipse.ui.editors,
  org.eclipse.mylar.core,
  org.eclipse.update.ui,
- org.eclipse.pde.ui,
  org.eclipse.update.core,
- org.eclipse.ui.workbench.texteditor,
  org.eclipse.ui.browser,
- org.eclipse.jdt.core
+ org.eclipse.ui.editors,
+ org.eclipse.ui.workbench.texteditor
 Eclipse-AutoStart: true
 Bundle-Vendor: Eclipse.org
 Bundle-ClassPath: mylar-monitor.jar,
diff --git a/org.eclipse.mylyn.monitor.ui/src/org/eclipse/mylyn/internal/monitor/HandleObfuscator.java b/org.eclipse.mylyn.monitor.ui/src/org/eclipse/mylyn/internal/monitor/HandleObfuscator.java
new file mode 100644
index 0000000..ab1662e
--- /dev/null
+++ b/org.eclipse.mylyn.monitor.ui/src/org/eclipse/mylyn/internal/monitor/HandleObfuscator.java
@@ -0,0 +1,92 @@
+/*******************************************************************************
+ * Copyright (c) 2004 - 2006 University Of British Columbia and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     University Of British Columbia - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.mylar.internal.monitor;
+
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+
+import org.eclipse.core.internal.preferences.Base64;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.mylar.internal.core.util.MylarStatusHandler;
+import org.eclipse.mylar.provisional.core.IMylarStructureBridge;
+import org.eclipse.mylar.provisional.core.MylarPlugin;
+
+/**
+ * @author Mik Kersten
+ */
+public class HandleObfuscator {
+
+	private static final char DELIM_PATH = '/';
+
+	public static final String LABEL_FAILED_TO_OBFUSCATE = "<failed to obfuscate>";
+		
+	public static final String ENCRYPTION_ALGORITHM = "SHA";
+	
+	public boolean isObfuscationEnabled() {
+		return MylarMonitorPlugin.getPrefs()
+			.getBoolean(MylarMonitorPreferenceConstants.PREF_MONITORING_OBFUSCATE);
+	}
+	
+	public String obfuscateHandle(String structureKind, String structureHandle) {
+		if (structureHandle == null || structureHandle.equals("")) {
+			return structureHandle;
+		}
+		StringBuilder obfuscated = new StringBuilder();
+		IMylarStructureBridge bridge = MylarPlugin.getDefault().getStructureBridge(structureKind);
+		Object object = bridge.getObjectForHandle(structureHandle);
+		if (object instanceof IAdaptable) {
+			Object adapter = ((IAdaptable)object).getAdapter(IResource.class);
+			if (adapter instanceof IResource) {
+				obfuscated.append(obfuscateResourcePath(((IResource)adapter).getFullPath()));				
+				obfuscated.append(DELIM_PATH);
+			} 
+		}
+		obfuscated.append(obfuscateString(structureHandle));
+		return obfuscated.toString();
+	}
+	
+	/**
+	 * Encrypts the string using SHA, then makes it reasonable to print.
+	 */
+	public String obfuscateString(String string) {
+		if(!isObfuscationEnabled()) { return string; }
+		String obfuscatedString = null;
+		try {
+			MessageDigest md = MessageDigest.getInstance(ENCRYPTION_ALGORITHM);
+			md.update(string.getBytes());
+			byte[] digest = md.digest();
+			obfuscatedString = new String(Base64.encode(digest)).replace(DELIM_PATH, '=');
+			// obfuscatedString = "" + new String(digest).hashCode();
+		} catch (NoSuchAlgorithmException e) {
+			MylarStatusHandler.log("SHA not available", null);
+			obfuscatedString = LABEL_FAILED_TO_OBFUSCATE;
+		}
+		return obfuscatedString;
+	}
+	
+	public String obfuscateResourcePath(IPath path) {
+		if (path == null) {
+			return "";
+		} else {
+			StringBuffer obfuscatedPath = new StringBuffer();
+			for (int i = 0; i < path.segmentCount(); i++) {
+				obfuscatedPath.append(obfuscateString(path.segments()[i]));
+				if (i < path.segmentCount() - 1)
+					obfuscatedPath.append(DELIM_PATH);
+			}
+			return obfuscatedPath.toString();
+		}
+	}
+	
+}
diff --git a/org.eclipse.mylyn.monitor.ui/src/org/eclipse/mylyn/internal/monitor/InteractionEventLogger.java b/org.eclipse.mylyn.monitor.ui/src/org/eclipse/mylyn/internal/monitor/InteractionEventLogger.java
index 8f69f7d..6c1a24a 100644
--- a/org.eclipse.mylyn.monitor.ui/src/org/eclipse/mylyn/internal/monitor/InteractionEventLogger.java
+++ b/org.eclipse.mylyn.monitor.ui/src/org/eclipse/mylyn/internal/monitor/InteractionEventLogger.java
@@ -52,6 +52,8 @@
 	private int eventAccumulartor = 0;
 
 	private List<InteractionEvent> queue = new ArrayList<InteractionEvent>();
+	
+	private HandleObfuscator handleObfuscator = new HandleObfuscator();
 
 	public InteractionEventLogger(File outputFile) {
 		this.outputFile = outputFile;
@@ -61,7 +63,11 @@
 	 * TODO: should these be queued for better performance?
 	 */
 	public void interactionObserved(InteractionEvent event) {
-//		System.err.println("> " + event); 
+//		System.err.println(">>> " + event);
+		if (handleObfuscator.isObfuscationEnabled()) {
+			String obfuscatedHandle = handleObfuscator.obfuscateHandle(event.getStructureKind(), event.getStructureHandle());
+			event = new InteractionEvent(event.getKind(), event.getStructureKind(), obfuscatedHandle, event.getOriginId(), event.getNavigation(), event.getDelta(), event.getInterestContribution());
+		}
 		try {
 			if (started) {
 				String xml = interactionEventToXml(event);
@@ -224,7 +230,7 @@
 				+ ENDL);
 		res.append(TAB + OPEN + "originId" + CLOSE + XmlStringConverter.convertToXmlString(e.getOriginId()) + OPEN
 				+ SLASH + "originId" + CLOSE + ENDL);
-		res.append(TAB + OPEN + "structureKind" + CLOSE + XmlStringConverter.convertToXmlString(e.getContentType())
+		res.append(TAB + OPEN + "structureKind" + CLOSE + XmlStringConverter.convertToXmlString(e.getStructureKind())
 				+ OPEN + SLASH + "structureKind" + CLOSE + ENDL);
 		res.append(TAB + OPEN + "structureHandle" + CLOSE
 				+ XmlStringConverter.convertToXmlString(e.getStructureHandle()) + OPEN + SLASH + "structureHandle"
diff --git a/org.eclipse.mylyn.monitor.ui/src/org/eclipse/mylyn/internal/monitor/MylarMonitorPlugin.java b/org.eclipse.mylyn.monitor.ui/src/org/eclipse/mylyn/internal/monitor/MylarMonitorPlugin.java
index 3b83728..163f51e 100644
--- a/org.eclipse.mylyn.monitor.ui/src/org/eclipse/mylyn/internal/monitor/MylarMonitorPlugin.java
+++ b/org.eclipse.mylyn.monitor.ui/src/org/eclipse/mylyn/internal/monitor/MylarMonitorPlugin.java
@@ -28,9 +28,9 @@
 import org.eclipse.core.runtime.IExtensionPoint;
 import org.eclipse.core.runtime.IExtensionRegistry;
 import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Preferences;
 import org.eclipse.core.runtime.Preferences.IPropertyChangeListener;
 import org.eclipse.core.runtime.Preferences.PropertyChangeEvent;
-import org.eclipse.jdt.internal.ui.JavaPlugin;
 import org.eclipse.jface.action.IAction;
 import org.eclipse.jface.dialogs.IDialogConstants;
 import org.eclipse.jface.dialogs.MessageDialog;
@@ -46,13 +46,11 @@
 import org.eclipse.mylar.internal.monitor.monitors.MenuCommandMonitor;
 import org.eclipse.mylar.internal.monitor.monitors.PerspectiveChangeMonitor;
 import org.eclipse.mylar.internal.monitor.monitors.PreferenceChangeMonitor;
-import org.eclipse.mylar.internal.monitor.monitors.SelectionMonitor;
 import org.eclipse.mylar.internal.monitor.monitors.WindowChangeMonitor;
 import org.eclipse.mylar.internal.monitor.ui.wizards.UsageSubmissionWizard;
 import org.eclipse.mylar.provisional.core.AbstractCommandMonitor;
 import org.eclipse.mylar.provisional.core.IInteractionEventListener;
 import org.eclipse.mylar.provisional.core.MylarPlugin;
-import org.eclipse.pde.internal.ui.PDEPlugin;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.ShellEvent;
 import org.eclipse.swt.events.ShellListener;
@@ -63,8 +61,6 @@
 import org.eclipse.ui.IWorkbenchPage;
 import org.eclipse.ui.IWorkbenchWindow;
 import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.internal.WorkbenchPlugin;
-import org.eclipse.ui.internal.editors.text.EditorsPlugin;
 import org.eclipse.ui.plugin.AbstractUIPlugin;
 import org.eclipse.update.internal.core.UpdateCore;
 import org.eclipse.update.internal.ui.security.Authentication;
@@ -122,7 +118,7 @@
 
 	private String customizingPlugin = null;
 
-	private PreferenceChangeMonitor preferenceMonitor;
+	private PreferenceChangeMonitor preferenceMonitor = new PreferenceChangeMonitor();
 
 	private PerspectiveChangeMonitor perspectiveMonitor;
 
@@ -136,14 +132,12 @@
 
 	private BrowserMonitor browserMonitor;
 
-	private SelectionMonitor selectionMonitor;
-
 	private static MylarMonitorPlugin plugin;
 
 	private List<IActionExecutionListener> actionExecutionListeners = new ArrayList<IActionExecutionListener>();
-	
+
 	private List<AbstractCommandMonitor> commandMonitors = new ArrayList<AbstractCommandMonitor>();
-	
+
 	private ResourceBundle resourceBundle;
 
 	private static Date lastTransmit = null;
@@ -161,21 +155,25 @@
 	private StudyParameters studyParameters = new StudyParameters();
 
 	private IWindowListener WINDOW_LISTENER = new IWindowListener() {
-		public void windowActivated(IWorkbenchWindow window) {}
-		public void windowDeactivated(IWorkbenchWindow window) {}
+		public void windowActivated(IWorkbenchWindow window) {
+		}
+
+		public void windowDeactivated(IWorkbenchWindow window) {
+		}
 
 		public void windowClosed(IWorkbenchWindow window) {
-			if(window.getShell() != null) {
+			if (window.getShell() != null) {
 				window.getShell().removeShellListener(SHELL_LISTENER);
 			}
 		}
 
 		public void windowOpened(IWorkbenchWindow window) {
-			if(window.getShell() != null && !PlatformUI.getWorkbench().isClosing()) {
+			if (window.getShell() != null && !PlatformUI.getWorkbench().isClosing()) {
 				window.getShell().addShellListener(SHELL_LISTENER);
 			}
-		}};
-	
+		}
+	};
+
 	private ShellListener SHELL_LISTENER = new ShellListener() {
 
 		public void shellDeactivated(ShellEvent arg0) {
@@ -206,7 +204,7 @@
 		}
 	};
 
-	private IPropertyChangeListener PREFERENCE_LISTENER = new IPropertyChangeListener() {
+	private IPropertyChangeListener DATA_DIR_MOVE_LISTENER = new IPropertyChangeListener() {
 		public void propertyChange(PropertyChangeEvent event) {
 			if (event.getProperty().equals(MylarPreferenceContstants.PREF_DATA_DIR)) {
 				if (event.getOldValue() instanceof String) {
@@ -242,14 +240,14 @@
 				new MonitorExtensionPointReader().initExtensions();
 
 				interactionLogger = new InteractionEventLogger(getMonitorLogFile());
-				preferenceMonitor = new PreferenceChangeMonitor();
+				
 				perspectiveMonitor = new PerspectiveChangeMonitor();
 				activityMonitor = new ActivityChangeMonitor();
 				windowMonitor = new WindowChangeMonitor();
-				selectionMonitor = new SelectionMonitor();
 				menuMonitor = new MenuCommandMonitor();
 				keybindingCommandMonitor = new KeybindingCommandMonitor();
 				browserMonitor = new BrowserMonitor();
+				
 				setAcceptedUrlMatchList(studyParameters.getAcceptedUrlList());
 
 				if (getPreferenceStore().getBoolean(MylarMonitorPreferenceConstants.PREF_MONITORING_ENABLED)) {
@@ -260,50 +258,17 @@
 				}
 
 				if (plugin.getPreferenceStore().contains(MylarMonitorPreferenceConstants.PREF_PREVIOUS_TRANSMIT_DATE)) {
-					lastTransmit = new Date(plugin.getPreferenceStore().getLong(MylarMonitorPreferenceConstants.PREF_PREVIOUS_TRANSMIT_DATE));
+					lastTransmit = new Date(plugin.getPreferenceStore().getLong(
+							MylarMonitorPreferenceConstants.PREF_PREVIOUS_TRANSMIT_DATE));
 				} else {
 					lastTransmit = new Date();
-					plugin.getPreferenceStore().setValue(MylarMonitorPreferenceConstants.PREF_PREVIOUS_TRANSMIT_DATE, lastTransmit.getTime());
+					plugin.getPreferenceStore().setValue(MylarMonitorPreferenceConstants.PREF_PREVIOUS_TRANSMIT_DATE,
+							lastTransmit.getTime());
 				}
 			}
 		});
 	}
 
-	public void stopMonitoring() {
-		if (!getPreferenceStore().getBoolean(MylarMonitorPreferenceConstants.PREF_MONITORING_ENABLED))
-			return;
-		interactionLogger.stopObserving();
-		for (IInteractionEventListener listener : MylarPlugin.getDefault().getInteractionListeners())
-			listener.stopObserving();
-
-		IWorkbench workbench = PlatformUI.getWorkbench();
-		MylarPlugin.getDefault().removeInteractionListener(interactionLogger);
-
-		getCommandMonitors().remove(keybindingCommandMonitor);
-		MylarPlugin.getDefault().getSelectionMonitors().remove(selectionMonitor);
-		getActionExecutionListeners().remove(new ActionExecutionMonitor());
-
-		workbench.removeWindowListener(WINDOW_LISTENER);
-		for(IWorkbenchWindow w : workbench.getWorkbenchWindows()) {
-			if(w.getShell() != null) { w.getShell().removeShellListener(SHELL_LISTENER); }
-		}
-		MylarPlugin.getDefault().getPluginPreferences().removePropertyChangeListener(PREFERENCE_LISTENER);
-
-		MylarPlugin.getDefault().getPluginPreferences().removePropertyChangeListener(preferenceMonitor);
-		JavaPlugin.getDefault().getPluginPreferences().removePropertyChangeListener(preferenceMonitor);
-		WorkbenchPlugin.getDefault().getPluginPreferences().removePropertyChangeListener(preferenceMonitor);
-		EditorsPlugin.getDefault().getPluginPreferences().removePropertyChangeListener(preferenceMonitor);
-		PDEPlugin.getDefault().getPluginPreferences().removePropertyChangeListener(preferenceMonitor);
-
-		MylarPlugin.getDefault().removeWindowPerspectiveListener(perspectiveMonitor);
-		workbench.getActivitySupport().getActivityManager().removeActivityManagerListener(activityMonitor);
-		workbench.getDisplay().removeFilter(SWT.Selection, menuMonitor);
-		workbench.removeWindowListener(windowMonitor);
-
-		uninstallBrowserMonitor(workbench);
-		getPreferenceStore().setValue(MylarMonitorPreferenceConstants.PREF_MONITORING_ENABLED, false);
-	}
-
 	public void startMonitoring() {
 		if (getPreferenceStore().getBoolean(MylarMonitorPreferenceConstants.PREF_MONITORING_ENABLED))
 			return;
@@ -314,21 +279,15 @@
 		IWorkbench workbench = PlatformUI.getWorkbench();
 		MylarPlugin.getDefault().addInteractionListener(interactionLogger);
 		getCommandMonitors().add(keybindingCommandMonitor);
-		MylarPlugin.getDefault().getSelectionMonitors().add(selectionMonitor);
 
 		getActionExecutionListeners().add(new ActionExecutionMonitor());
 		workbench.addWindowListener(WINDOW_LISTENER);
-		for(IWorkbenchWindow w : workbench.getWorkbenchWindows()) {
-			if(w.getShell() != null) { w.getShell().addShellListener(SHELL_LISTENER); }
+		for (IWorkbenchWindow w : workbench.getWorkbenchWindows()) {
+			if (w.getShell() != null) {
+				w.getShell().addShellListener(SHELL_LISTENER);
+			}
 		}
-		MylarPlugin.getDefault().getPluginPreferences().addPropertyChangeListener(PREFERENCE_LISTENER);
-
-		MylarPlugin.getDefault().getPluginPreferences().addPropertyChangeListener(preferenceMonitor);
-		JavaPlugin.getDefault().getPluginPreferences().addPropertyChangeListener(preferenceMonitor);
-		WorkbenchPlugin.getDefault().getPluginPreferences().addPropertyChangeListener(preferenceMonitor);
-		EditorsPlugin.getDefault().getPluginPreferences().addPropertyChangeListener(preferenceMonitor);
-		PDEPlugin.getDefault().getPluginPreferences().addPropertyChangeListener(preferenceMonitor);
-
+		MylarPlugin.getDefault().getPluginPreferences().addPropertyChangeListener(DATA_DIR_MOVE_LISTENER);
 		MylarPlugin.getDefault().addWindowPerspectiveListener(perspectiveMonitor);
 		workbench.getActivitySupport().getActivityManager().addActivityManagerListener(activityMonitor);
 		workbench.getDisplay().addFilter(SWT.Selection, menuMonitor);
@@ -341,6 +300,65 @@
 		}
 		getPreferenceStore().setValue(MylarMonitorPreferenceConstants.PREF_MONITORING_ENABLED, true);
 	}
+	
+	public void addMonitoredPreferences(Preferences preferences) { 
+		preferences.addPropertyChangeListener(preferenceMonitor);
+	}
+	
+	public void removeMonitoredPreferences(Preferences preferences) {
+		preferences.removePropertyChangeListener(preferenceMonitor);
+	}
+
+//	private void installPreferenceMonitoring() {
+//		((IEclipsePreferences) getPreferenceStore().getp())
+//		.addNodeChangeListener(getNodeChangeListener());
+		
+//		Bundle[] bundles = PDERuntimePlugin.getDefault().getBundleContext().getBundles();
+//		for (Bundle bundle : bundles) {
+//			if (bundle.getHeaders().get(Constants.FRAGMENT_HOST) == null) {
+//				if (bundle.getState() == Bundle.ACTIVE) {
+//					System.err.println(">> " + bundle.getClass());
+//				}
+//			}
+//		}
+
+		// for (String namespace :
+		// Platform.getExtensionRegistry().getNamespaces()) {
+		// IExtension extension =
+		// Platform.getExtensionRegistry().getExtension(namespace);
+		// System.err.println(">>> " + extension);
+		// }
+//	}
+
+	public void stopMonitoring() {
+		if (!getPreferenceStore().getBoolean(MylarMonitorPreferenceConstants.PREF_MONITORING_ENABLED))
+			return;
+		interactionLogger.stopObserving();
+		for (IInteractionEventListener listener : MylarPlugin.getDefault().getInteractionListeners())
+			listener.stopObserving();
+
+		IWorkbench workbench = PlatformUI.getWorkbench();
+		MylarPlugin.getDefault().removeInteractionListener(interactionLogger);
+
+		getCommandMonitors().remove(keybindingCommandMonitor);
+		getActionExecutionListeners().remove(new ActionExecutionMonitor());
+
+		workbench.removeWindowListener(WINDOW_LISTENER);
+		for (IWorkbenchWindow w : workbench.getWorkbenchWindows()) {
+			if (w.getShell() != null) {
+				w.getShell().removeShellListener(SHELL_LISTENER);
+			}
+		}
+		MylarPlugin.getDefault().getPluginPreferences().removePropertyChangeListener(DATA_DIR_MOVE_LISTENER);
+
+		MylarPlugin.getDefault().removeWindowPerspectiveListener(perspectiveMonitor);
+		workbench.getActivitySupport().getActivityManager().removeActivityManagerListener(activityMonitor);
+		workbench.getDisplay().removeFilter(SWT.Selection, menuMonitor);
+		workbench.removeWindowListener(windowMonitor);
+
+		uninstallBrowserMonitor(workbench);
+		getPreferenceStore().setValue(MylarMonitorPreferenceConstants.PREF_MONITORING_ENABLED, false);
+	}
 
 	@Override
 	public void start(BundleContext context) throws Exception {
@@ -352,7 +370,6 @@
 		super.stop(context);
 		plugin = null;
 		resourceBundle = null;
-		MylarPlugin.getDefault().getSelectionMonitors().remove(selectionMonitor);
 	}
 
 	public void actionObserved(IAction action, String info) {
@@ -368,7 +385,7 @@
 	public List<AbstractCommandMonitor> getCommandMonitors() {
 		return commandMonitors;
 	}
-	
+
 	private void installBrowserMonitor(IWorkbench workbench) {
 		workbench.addWindowListener(browserMonitor);
 		IWorkbenchWindow[] windows = workbench.getWorkbenchWindows();
@@ -428,11 +445,13 @@
 		if (wait3Hours) {
 			lastTransmit.setTime(currentTime.getTime() + DELAY_ON_USER_REQUEST
 					- studyParameters.getTransmitPromptPeriod());
-			plugin.getPreferenceStore().setValue(MylarMonitorPreferenceConstants.PREF_PREVIOUS_TRANSMIT_DATE, lastTransmit.getTime());
+			plugin.getPreferenceStore().setValue(MylarMonitorPreferenceConstants.PREF_PREVIOUS_TRANSMIT_DATE,
+					lastTransmit.getTime());
 		} else {
 			long day = HOUR * 24;
 			lastTransmit.setTime(currentTime.getTime() + day - studyParameters.getTransmitPromptPeriod());
-			plugin.getPreferenceStore().setValue(MylarMonitorPreferenceConstants.PREF_PREVIOUS_TRANSMIT_DATE, lastTransmit.getTime());
+			plugin.getPreferenceStore().setValue(MylarMonitorPreferenceConstants.PREF_PREVIOUS_TRANSMIT_DATE,
+					lastTransmit.getTime());
 		}
 	}
 
@@ -489,10 +508,12 @@
 		if (plugin == null || plugin.getPreferenceStore() == null)
 			return;
 		if (plugin.getPreferenceStore().contains(MylarMonitorPreferenceConstants.PREF_PREVIOUS_TRANSMIT_DATE)) {
-			lastTransmit = new Date(plugin.getPreferenceStore().getLong(MylarMonitorPreferenceConstants.PREF_PREVIOUS_TRANSMIT_DATE));
+			lastTransmit = new Date(plugin.getPreferenceStore().getLong(
+					MylarMonitorPreferenceConstants.PREF_PREVIOUS_TRANSMIT_DATE));
 		} else {
 			lastTransmit = new Date();
-			plugin.getPreferenceStore().setValue(MylarMonitorPreferenceConstants.PREF_PREVIOUS_TRANSMIT_DATE, lastTransmit.getTime());
+			plugin.getPreferenceStore().setValue(MylarMonitorPreferenceConstants.PREF_PREVIOUS_TRANSMIT_DATE,
+					lastTransmit.getTime());
 		}
 		Date currentTime = new Date();
 		if (currentTime.getTime() > lastTransmit.getTime() + studyParameters.getTransmitPromptPeriod()) {
@@ -506,7 +527,8 @@
 				// time must be stored right away into preferences, to prevent
 				// other threads
 				lastTransmit.setTime(new Date().getTime());
-				plugin.getPreferenceStore().setValue(MylarMonitorPreferenceConstants.PREF_PREVIOUS_TRANSMIT_DATE, currentTime.getTime());
+				plugin.getPreferenceStore().setValue(MylarMonitorPreferenceConstants.PREF_PREVIOUS_TRANSMIT_DATE,
+						currentTime.getTime());
 
 				UsageSubmissionWizard wizard = new UsageSubmissionWizard();
 				wizard.init(PlatformUI.getWorkbench(), null);
@@ -518,7 +540,8 @@
 				if (wizard.failed()) {
 					lastTransmit.setTime(currentTime.getTime() + DELAY_ON_FAILURE
 							- studyParameters.getTransmitPromptPeriod());
-					plugin.getPreferenceStore().setValue(MylarMonitorPreferenceConstants.PREF_PREVIOUS_TRANSMIT_DATE, currentTime.getTime());
+					plugin.getPreferenceStore().setValue(MylarMonitorPreferenceConstants.PREF_PREVIOUS_TRANSMIT_DATE,
+							currentTime.getTime());
 				}
 			} else {
 				if (result == 1) {
@@ -556,7 +579,7 @@
 	}
 
 	public static IPreferenceStore getPrefs() {
-		return MylarMonitorPlugin.getDefault().getPreferenceStore();
+		return getDefault().getPreferenceStore();
 	}
 
 	public static boolean isPerformingUpload() {
@@ -640,7 +663,8 @@
 								}
 							}
 							customizingPlugin = extensions[i].getNamespace();
-							getPreferenceStore().setValue(MylarMonitorPreferenceConstants.PREF_MONITORING_ENABLED, true);
+							getPreferenceStore()
+									.setValue(MylarMonitorPreferenceConstants.PREF_MONITORING_ENABLED, true);
 						}
 						extensionsRead = true;
 					}
@@ -668,14 +692,13 @@
 			studyParameters.setUseContactField(element.getAttribute(ELEMENT_UI_CONTACT_CONSENT_FIELD));
 
 			try {
-				if(element.getAttribute(ELEMENT_UI_QUESTIONNAIRE_PAGE) != null) {
+				if (element.getAttribute(ELEMENT_UI_QUESTIONNAIRE_PAGE) != null) {
 					Object questionnaireObject = element.createExecutableExtension(ELEMENT_UI_QUESTIONNAIRE_PAGE);
 					if (questionnaireObject instanceof IQuestionnairePage) {
 						IQuestionnairePage page = (IQuestionnairePage) questionnaireObject;
 						studyParameters.setQuestionnairePage(page);
 					}
-				}
-				else {
+				} else {
 					MylarMonitorPlugin.getDefault().setQuestionnaireEnabled(false);
 				}
 			} catch (CoreException throwable) {
@@ -684,15 +707,14 @@
 			}
 
 			try {
-				if(element.getAttribute(ELEMENT_UI_BACKGROUND_PAGE) != null) {
+				if (element.getAttribute(ELEMENT_UI_BACKGROUND_PAGE) != null) {
 					Object backgroundObject = element.createExecutableExtension(ELEMENT_UI_BACKGROUND_PAGE);
 					if (backgroundObject instanceof IBackgroundPage) {
 						IBackgroundPage page = (IBackgroundPage) backgroundObject;
 						studyParameters.setBackgroundPage(page);
 						MylarMonitorPlugin.getDefault().setBackgroundEnabled(true);
 					}
-				}
-				else {
+				} else {
 					MylarMonitorPlugin.getDefault().setBackgroundEnabled(false);
 				}
 			} catch (CoreException throwable) {
diff --git a/org.eclipse.mylyn.monitor.ui/src/org/eclipse/mylyn/internal/monitor/monitors/BrowserMonitor.java b/org.eclipse.mylyn.monitor.ui/src/org/eclipse/mylyn/internal/monitor/monitors/BrowserMonitor.java
index 35b3363..cf425d1 100644
--- a/org.eclipse.mylyn.monitor.ui/src/org/eclipse/mylyn/internal/monitor/monitors/BrowserMonitor.java
+++ b/org.eclipse.mylyn.monitor.ui/src/org/eclipse/mylyn/internal/monitor/monitors/BrowserMonitor.java
@@ -68,7 +68,7 @@
 	}
 
 	@Override
-	protected void handleWorkbenchPartSelection(IWorkbenchPart part, ISelection selection) {
+	protected void handleWorkbenchPartSelection(IWorkbenchPart part, ISelection selection, boolean contributeToContext) {
 		// ignore, this is a special case
 	}
 
diff --git a/org.eclipse.mylyn.monitor.ui/src/org/eclipse/mylyn/internal/monitor/monitors/SelectionMonitor.java b/org.eclipse.mylyn.monitor.ui/src/org/eclipse/mylyn/internal/monitor/monitors/SelectionMonitor.java
deleted file mode 100644
index 2f425c6..0000000
--- a/org.eclipse.mylyn.monitor.ui/src/org/eclipse/mylyn/internal/monitor/monitors/SelectionMonitor.java
+++ /dev/null
@@ -1,225 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 - 2006 University Of British Columbia and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     University Of British Columbia - initial API and implementation
- *******************************************************************************/
-/*
- * Created on Jun 10, 2005
- */
-package org.eclipse.mylar.internal.monitor.monitors;
-
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-
-import org.eclipse.core.internal.preferences.Base64;
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.runtime.IAdaptable;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.jdt.core.IJavaElement;
-import org.eclipse.jdt.core.JavaModelException;
-import org.eclipse.jdt.internal.ui.actions.SelectionConverter;
-import org.eclipse.jdt.internal.ui.javaeditor.JavaEditor;
-import org.eclipse.jface.text.TextSelection;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.mylar.internal.core.MylarContextManager;
-import org.eclipse.mylar.internal.core.util.MylarStatusHandler;
-import org.eclipse.mylar.internal.monitor.MylarMonitorPlugin;
-import org.eclipse.mylar.internal.monitor.MylarMonitorPreferenceConstants;
-import org.eclipse.mylar.provisional.core.AbstractUserInteractionMonitor;
-import org.eclipse.mylar.provisional.core.IMylarElement;
-import org.eclipse.mylar.provisional.core.InteractionEvent;
-import org.eclipse.mylar.provisional.core.MylarPlugin;
-import org.eclipse.ui.IEditorInput;
-import org.eclipse.ui.IPathEditorInput;
-import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.ui.part.EditorPart;
-
-/**
- * Limited to Java selections.
- * 
- * @author Mik Kersten
- */
-public class SelectionMonitor extends AbstractUserInteractionMonitor {
-
-	public static final String ENCRYPTION_ALGORITHM = "SHA";
-
-	private static final String ID_JAVA_UNKNOWN = "(non-source element)";
-
-	private static final String LABEL_FAILED_TO_OBFUSCATE = "<failed to obfuscate>";
-
-	public static final String SELECTION_DEFAULT = "selected";
-
-	public static final String SELECTION_NEW = "new";
-
-	public static final String SELECTION_DECAYED = "decayed";
-
-	public static final String SELECTION_PREDICTED = "predicted";
-
-	private static final Object ID_JAVA_UNKNOW_OLD = "(non-existing element)";
-
-	private IJavaElement lastSelectedElement = null;
-
-	@Override
-	protected void handleWorkbenchPartSelection(IWorkbenchPart part, ISelection selection) {
-		// ignored, since not using taskscape monitoring facilities
-	}
-
-	@Override
-	public void selectionChanged(IWorkbenchPart part, ISelection selection) {
-		String structureKind = InteractionEvent.ID_UNKNOWN;
-		String obfuscatedElementHandle = InteractionEvent.ID_UNKNOWN;
-		String elementHandle = InteractionEvent.ID_UNKNOWN;
-		InteractionEvent.Kind interactionKind = InteractionEvent.Kind.SELECTION;
-		if (selection instanceof StructuredSelection) {
-			StructuredSelection structuredSelection = (StructuredSelection) selection;
-			Object selectedObject = structuredSelection.getFirstElement();
-			if (selectedObject == null)
-				return;
-			if (selectedObject instanceof IJavaElement) {
-				IJavaElement javaElement = (IJavaElement) selectedObject;
-				structureKind = "java:" + javaElement.getClass();
-				elementHandle = javaElement.getHandleIdentifier();
-				obfuscatedElementHandle = obfuscateJavaElementHandle(javaElement);
-				lastSelectedElement = javaElement;
-			} else {
-				structureKind = InteractionEvent.ID_UNKNOWN + ": " + selectedObject.getClass();
-				if (selectedObject instanceof IAdaptable) {
-					IResource resource = (IResource) ((IAdaptable) selectedObject).getAdapter(IResource.class);
-					if (resource != null) {
-						obfuscatedElementHandle = obfuscateResourcePath(resource.getProjectRelativePath());
-					}
-				}
-			}
-		} else {
-			if (selection instanceof TextSelection && part instanceof JavaEditor) {
-				TextSelection textSelection = (TextSelection) selection;
-				IJavaElement javaElement;
-				try {
-					javaElement = SelectionConverter.resolveEnclosingElement((JavaEditor) part, textSelection);
-					if (javaElement != null) {
-						structureKind = "java:" + javaElement.getClass();
-						obfuscatedElementHandle = obfuscateJavaElementHandle(javaElement);
-						elementHandle = javaElement.getHandleIdentifier();
-						if (javaElement != null && javaElement.equals(lastSelectedElement)) {
-							interactionKind = InteractionEvent.Kind.EDIT;
-						}
-						lastSelectedElement = javaElement;
-					}
-				} catch (JavaModelException e) {
-					// ignore unresolved elements
-					// MylarPlugin.log("Could not resolve java element from text
-					// selection.", this);
-				}
-			} else if (part instanceof EditorPart) {
-				EditorPart editorPart = (EditorPart) part;
-				IEditorInput input = editorPart.getEditorInput();
-				if (input instanceof IPathEditorInput) {
-					structureKind = "file";
-					obfuscatedElementHandle = obfuscateResourcePath(((IPathEditorInput) input).getPath());
-				}
-			}
-		}
-		IMylarElement node = MylarPlugin.getContextManager().getElement(elementHandle);
-		String delta = "";
-		float selectionFactor = MylarContextManager.getScalingFactors().get(InteractionEvent.Kind.SELECTION).getValue();
-
-		// XXX: broken in 0.4?
-		if (node != null) {
-			if (node.getInterest().getEncodedValue() <= selectionFactor
-					&& node.getInterest().getValue() > selectionFactor) {
-				delta = SELECTION_PREDICTED;
-			} else if (node.getInterest().getEncodedValue() < selectionFactor
-					&& node.getInterest().getDecayValue() > selectionFactor) {
-				delta = SELECTION_DECAYED;
-			} else if (node.getInterest().getValue() == selectionFactor
-					&& node.getInterest().getDecayValue() < selectionFactor) {
-				delta = SELECTION_NEW;
-			} else {
-				delta = SELECTION_DEFAULT;
-			}
-		}
-
-		InteractionEvent event = new InteractionEvent(interactionKind, structureKind, obfuscatedElementHandle, part
-				.getSite().getId(), "null", delta, 0);
-		MylarPlugin.getDefault().notifyInteractionObserved(event);
-	}
-
-	private String obfuscateResourcePath(IPath path) {
-		if (path == null) {
-			return "";
-		} else {
-			StringBuffer obfuscatedPath = new StringBuffer();
-			for (int i = 0; i < path.segmentCount(); i++) {
-				obfuscatedPath.append(obfuscateString(path.segments()[i]));
-				if (i < path.segmentCount() - 1)
-					obfuscatedPath.append('/');
-			}
-			return obfuscatedPath.toString();
-		}
-	}
-
-	/**
-	 * Encrypts the string using SHA, then makes it reasonable to print.
-	 */
-	private String obfuscateString(String string) {
-		if(!isObfuscationEnabled()) { return string; }
-		String obfuscatedString = null;
-		try {
-			MessageDigest md = MessageDigest.getInstance(ENCRYPTION_ALGORITHM);
-			md.update(string.getBytes());
-			byte[] digest = md.digest();
-			obfuscatedString = new String(Base64.encode(digest)).replace('/', '=');
-			// obfuscatedString = "" + new String(digest).hashCode();
-		} catch (NoSuchAlgorithmException e) {
-			MylarStatusHandler.log("SHA not available", this);
-			obfuscatedString = LABEL_FAILED_TO_OBFUSCATE;
-		}
-		return obfuscatedString;
-	}
-
-	private boolean isObfuscationEnabled() {
-		return MylarMonitorPlugin.getPrefs()
-			.getBoolean(MylarMonitorPreferenceConstants.PREF_MONITORING_OBFUSCATE);
-	}
-
-	private String obfuscateJavaElementHandle(IJavaElement javaElement) {
-		try {
-			StringBuffer obfuscatedPath = new StringBuffer();
-			IResource resource;
-			resource = (IResource) javaElement.getUnderlyingResource();
-			if (resource != null && (resource instanceof IFile)) {
-				IFile file = (IFile) resource;
-				obfuscatedPath.append(obfuscateResourcePath(file.getProjectRelativePath()));
-				obfuscatedPath.append(':');
-				obfuscatedPath.append(obfuscateString(javaElement.getElementName()));
-				return obfuscatedPath.toString();
-			} else {
-				return obfuscateString(javaElement.getHandleIdentifier());
-			}
-		} catch (JavaModelException e) {
-			// ignore non-existing element
-			// MylarPlugin.log(this, "failed to resolve java element for
-			// element: " + javaElement.getHandleIdentifier());
-		}
-		return ID_JAVA_UNKNOWN;
-	}
-
-	/**
-	 * Some events do not have a valid handle, e.g. hande is null or ?
-	 */
-	public static boolean isValidStructureHandle(InteractionEvent event) {
-		String handle = event.getStructureHandle();
-		return handle != null 
-			&& !handle.trim().equals("") 
-			&& !handle.equals(SelectionMonitor.ID_JAVA_UNKNOWN)
-			&& !handle.equals(SelectionMonitor.ID_JAVA_UNKNOW_OLD)
-			&& event.isValidStructureHandle();
-	}
-}
diff --git a/org.eclipse.mylyn.monitor.ui/src/org/eclipse/mylyn/internal/monitor/ui/preferences/MylarMonitorPreferencePage.java b/org.eclipse.mylyn.monitor.ui/src/org/eclipse/mylyn/internal/monitor/ui/preferences/MylarMonitorPreferencePage.java
index ab374d8..8b3a552 100644
--- a/org.eclipse.mylyn.monitor.ui/src/org/eclipse/mylyn/internal/monitor/ui/preferences/MylarMonitorPreferencePage.java
+++ b/org.eclipse.mylyn.monitor.ui/src/org/eclipse/mylyn/internal/monitor/ui/preferences/MylarMonitorPreferencePage.java
@@ -18,7 +18,7 @@
 import org.eclipse.mylar.internal.core.MylarPreferenceContstants;
 import org.eclipse.mylar.internal.monitor.MylarMonitorPlugin;
 import org.eclipse.mylar.internal.monitor.MylarMonitorPreferenceConstants;
-import org.eclipse.mylar.internal.monitor.monitors.SelectionMonitor;
+import org.eclipse.mylar.internal.monitor.HandleObfuscator;
 import org.eclipse.mylar.provisional.core.MylarPlugin;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.SelectionEvent;
@@ -142,7 +142,7 @@
 		enableObfuscation.setText("Obfuscate elements using: ");
 		enableObfuscation.setSelection(getPreferenceStore().getBoolean(MylarMonitorPreferenceConstants.PREF_MONITORING_OBFUSCATE));
 		Label obfuscationLablel = new Label(group, SWT.NULL);
-		obfuscationLablel.setText(SelectionMonitor.ENCRYPTION_ALGORITHM + " message digest one-way hash");
+		obfuscationLablel.setText(HandleObfuscator.ENCRYPTION_ALGORITHM + " message digest one-way hash");
 	}
 
 	private void createUsageSection(Composite parent) {
diff --git a/org.eclipse.mylyn.monitor.ui/src/org/eclipse/mylyn/internal/monitor/ui/wizards/UsageSubmissionWizard.java b/org.eclipse.mylyn.monitor.ui/src/org/eclipse/mylyn/internal/monitor/ui/wizards/UsageSubmissionWizard.java
index 0d029a4..cb7707e 100644
--- a/org.eclipse.mylyn.monitor.ui/src/org/eclipse/mylyn/internal/monitor/ui/wizards/UsageSubmissionWizard.java
+++ b/org.eclipse.mylyn.monitor.ui/src/org/eclipse/mylyn/internal/monitor/ui/wizards/UsageSubmissionWizard.java
@@ -29,7 +29,6 @@
 import org.apache.commons.httpclient.methods.multipart.FilePart;
 import org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity;
 import org.apache.commons.httpclient.methods.multipart.Part;
-import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
@@ -53,7 +52,6 @@
 import org.eclipse.ui.INewWizard;
 import org.eclipse.ui.IWorkbench;
 import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.actions.WorkspaceModifyOperation;
 
 /**
  * A wizard for uploading the Mylar statistics to a website
@@ -160,21 +158,24 @@
 				&& backgroundPage != null) {
 			backgroundFile = backgroundPage.createFeedbackFile();
 		}
-
-		final WorkspaceModifyOperation op = new WorkspaceModifyOperation() {
-			protected void execute(final IProgressMonitor monitor) throws CoreException {
-				monitor.beginTask("Uploading user statistics", 3);
-				performUpload(monitor);
-				monitor.done();
-			}
-		};
+			
+//		final WorkspaceModifyOperation op = new WorkspaceModifyOperation() {
+//			protected void execute(final IProgressMonitor monitor) throws CoreException {
+//				monitor.beginTask("Uploading user statistics", 3);
+//				performUpload(monitor);
+//				monitor.done();
+//			}
+//		};
 
 		Job j = new Job("Upload User Statistics") {
 
 			@Override
 			protected IStatus run(IProgressMonitor monitor) {
 				try {
-					op.run(monitor);
+					monitor.beginTask("Uploading user statistics", 3);
+					performUpload(monitor);
+					monitor.done();
+//					op.run(monitor);
 					return Status.OK_STATUS;
 				} catch (Exception e) {
 					MylarStatusHandler.log(e, "Error uploading statistics");