diff --git a/org.eclipse.cdt.debug.edc.tests/src/org/eclipse/cdt/debug/edc/system/tests/K9SystemView.java b/org.eclipse.cdt.debug.edc.tests/src/org/eclipse/cdt/debug/edc/system/tests/K9SystemView.java
index 4614f99..e006f96 100644
--- a/org.eclipse.cdt.debug.edc.tests/src/org/eclipse/cdt/debug/edc/system/tests/K9SystemView.java
+++ b/org.eclipse.cdt.debug.edc.tests/src/org/eclipse/cdt/debug/edc/system/tests/K9SystemView.java
@@ -16,6 +16,7 @@
 import java.util.Map;
 import java.util.Random;
 
+import org.eclipse.cdt.debug.edc.internal.EDCDebugger;
 import org.eclipse.cdt.debug.edc.internal.ui.views.ISystemVMContainer;
 import org.eclipse.cdt.debug.edc.internal.ui.views.SystemDMContainer;
 import org.eclipse.cdt.debug.edc.internal.ui.views.SystemDataModel;
@@ -26,7 +27,6 @@
 import org.eclipse.cdt.internal.ui.util.StringMatcher;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.preferences.InstanceScope;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.PresentationContext;
 import org.eclipse.swt.widgets.Composite;
 
@@ -238,7 +238,7 @@
 	@Override
 	public void createPartControl(Composite parent) {
 		setRefreshInterval(5000);		
-		setPrefsNode(InstanceScope.INSTANCE.getNode(EDCTestPlugin.PLUGIN_ID));
+		setPrefsNode(EDCDebugger.getPrefs(EDCTestPlugin.PLUGIN_ID));
 		setPresentationContext(new PresentationContext(VIEW_ID));
 		setDataModel(new K9DataModel());
 		setViewModel(new K9ViewModel());
diff --git a/org.eclipse.cdt.debug.edc.ui/src/org/eclipse/cdt/debug/edc/internal/ui/TraceView.java b/org.eclipse.cdt.debug.edc.ui/src/org/eclipse/cdt/debug/edc/internal/ui/TraceView.java
index 20aedf7..d64ce8c 100644
--- a/org.eclipse.cdt.debug.edc.ui/src/org/eclipse/cdt/debug/edc/internal/ui/TraceView.java
+++ b/org.eclipse.cdt.debug.edc.ui/src/org/eclipse/cdt/debug/edc/internal/ui/TraceView.java
@@ -23,8 +23,8 @@
 import java.util.HashMap;
 import java.util.Map;
 
+import org.eclipse.cdt.debug.edc.internal.EDCDebugger;
 import org.eclipse.core.runtime.Path;
-import org.eclipse.core.runtime.preferences.InstanceScope;
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.action.IMenuManager;
 import org.eclipse.jface.action.IToolBarManager;
@@ -287,7 +287,7 @@
 	}
 
 	private Preferences getViewPreferences() {
-		return InstanceScope.INSTANCE.getNode(EDCDebugUI.PLUGIN_ID);
+		return EDCDebugger.getPrefs(EDCDebugUI.PLUGIN_ID);
 	}
 
 	@Override
diff --git a/org.eclipse.cdt.debug.edc.ui/src/org/eclipse/cdt/debug/edc/internal/ui/actions/ToggleCustomFormattingCommandHandler.java b/org.eclipse.cdt.debug.edc.ui/src/org/eclipse/cdt/debug/edc/internal/ui/actions/ToggleCustomFormattingCommandHandler.java
index 3079238..daed0c0 100644
--- a/org.eclipse.cdt.debug.edc.ui/src/org/eclipse/cdt/debug/edc/internal/ui/actions/ToggleCustomFormattingCommandHandler.java
+++ b/org.eclipse.cdt.debug.edc.ui/src/org/eclipse/cdt/debug/edc/internal/ui/actions/ToggleCustomFormattingCommandHandler.java
@@ -23,7 +23,6 @@
 import org.eclipse.core.commands.State;
 import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.preferences.IEclipsePreferences;
-import org.eclipse.core.runtime.preferences.InstanceScope;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.TreeModelViewer;
 import org.eclipse.debug.ui.AbstractDebugView;
@@ -67,7 +66,7 @@
 		Command command = event.getCommand();
 		boolean enabled = HandlerUtil.toggleCommandState(command);
 		FormatExtensionManager.instance().setEnabled(!enabled );
-		IEclipsePreferences scope = InstanceScope.INSTANCE.getNode(EDCDebugger.PLUGIN_ID);
+		IEclipsePreferences scope = EDCDebugger.getPrefs(EDCDebugger.PLUGIN_ID);
 		scope.putBoolean(FormatExtensionManager.VARIABLE_FORMATS_ENABLED, !enabled);
 		try {
 			scope.flush();
diff --git a/org.eclipse.cdt.debug.edc.ui/src/org/eclipse/cdt/debug/edc/internal/ui/actions/ToggleShowAllVariablesCommandHandler.java b/org.eclipse.cdt.debug.edc.ui/src/org/eclipse/cdt/debug/edc/internal/ui/actions/ToggleShowAllVariablesCommandHandler.java
index 38523cb..fa608a0 100644
--- a/org.eclipse.cdt.debug.edc.ui/src/org/eclipse/cdt/debug/edc/internal/ui/actions/ToggleShowAllVariablesCommandHandler.java
+++ b/org.eclipse.cdt.debug.edc.ui/src/org/eclipse/cdt/debug/edc/internal/ui/actions/ToggleShowAllVariablesCommandHandler.java
@@ -21,7 +21,6 @@
 import org.eclipse.core.commands.ExecutionException;
 import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.preferences.IEclipsePreferences;
-import org.eclipse.core.runtime.preferences.InstanceScope;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.TreeModelViewer;
 import org.eclipse.debug.ui.AbstractDebugView;
@@ -43,7 +42,7 @@
 		// Note: toggleCommandState() returns the state before it is toggled
 		boolean enabled = !HandlerUtil.toggleCommandState(command);
 
-		IEclipsePreferences scope = InstanceScope.INSTANCE.getNode(EDCDebugger.PLUGIN_ID);
+		IEclipsePreferences scope = EDCDebugger.getPrefs(EDCDebugger.PLUGIN_ID);
 		scope.putBoolean(IEDCSymbols.SHOW_ALL_VARIABLES_ENABLED, enabled);
 		try {
 			scope.flush();
diff --git a/org.eclipse.cdt.debug.edc.windows.ui/src/org/eclipse/cdt/debug/edc/internal/windows/ui/WindowsSystemView.java b/org.eclipse.cdt.debug.edc.windows.ui/src/org/eclipse/cdt/debug/edc/internal/windows/ui/WindowsSystemView.java
index 9b85132..779ae2f 100644
--- a/org.eclipse.cdt.debug.edc.windows.ui/src/org/eclipse/cdt/debug/edc/internal/windows/ui/WindowsSystemView.java
+++ b/org.eclipse.cdt.debug.edc.windows.ui/src/org/eclipse/cdt/debug/edc/internal/windows/ui/WindowsSystemView.java
@@ -34,7 +34,6 @@
 import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.core.runtime.jobs.Job;
-import org.eclipse.core.runtime.preferences.InstanceScope;
 import org.eclipse.debug.core.DebugPlugin;
 import org.eclipse.debug.core.ILaunchConfiguration;
 import org.eclipse.debug.core.ILaunchConfigurationType;
@@ -194,7 +193,7 @@
 	@Override
 	public void createPartControl(Composite parent) {
 		setPresentationContext(new PresentationContext(VIEW_ID));
-		setPrefsNode(InstanceScope.INSTANCE.getNode(WindowsDebuggerUI.PLUGIN_ID));
+		setPrefsNode(EDCDebugger.getPrefs(WindowsDebuggerUI.PLUGIN_ID));
 		setDataModel(new WindowsDataModel());
 		setViewModel(new WindowsViewModel());
 		getViewModel().buildViewModel();
diff --git a/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/formatter/AbstractStringFormatter.java b/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/formatter/AbstractStringFormatter.java
index d4ac10f..68f7089 100644
--- a/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/formatter/AbstractStringFormatter.java
+++ b/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/formatter/AbstractStringFormatter.java
@@ -11,6 +11,7 @@
 package org.eclipse.cdt.debug.edc.formatter;
 
 import org.eclipse.cdt.core.IAddress;
+import org.eclipse.cdt.debug.edc.internal.EDCDebugger;
 import org.eclipse.cdt.debug.edc.internal.symbols.IArrayBoundType;
 import org.eclipse.cdt.debug.edc.internal.symbols.IArrayType;
 import org.eclipse.cdt.debug.edc.services.IEDCExpression;
@@ -21,7 +22,6 @@
 import org.eclipse.cdt.dsf.debug.service.IExpressions.IExpressionDMContext;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.preferences.IEclipsePreferences;
-import org.eclipse.core.runtime.preferences.InstanceScope;
 
 /**
  * Base class for string formatters.
@@ -115,7 +115,7 @@
 	 * @return size in characters
 	 */
 	protected int getMaximumLength() {
-		IEclipsePreferences scope = InstanceScope.INSTANCE.getNode("org.eclipse.debug.ui");
+		IEclipsePreferences scope = EDCDebugger.getPrefs("org.eclipse.debug.ui");
 		return scope.getInt("org.eclipse.debug.ui.max_detail_length", 256);
 	}
 	
diff --git a/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/EDCApplication.java b/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/EDCApplication.java
index 6920e72..7d97c15 100644
--- a/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/EDCApplication.java
+++ b/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/EDCApplication.java
@@ -12,7 +12,6 @@
 
 import org.eclipse.cdt.scripting.ScriptingPlugin;
 import org.eclipse.core.runtime.preferences.IEclipsePreferences;
-import org.eclipse.core.runtime.preferences.InstanceScope;
 import org.eclipse.debug.core.DebugPlugin;
 import org.eclipse.debug.internal.core.IInternalDebugCoreConstants;
 import org.eclipse.equinox.app.IApplication;
@@ -27,10 +26,10 @@
 		
 		running = true;
 	
-	 	IEclipsePreferences prefs = InstanceScope.INSTANCE.getNode(ScriptingPlugin.PLUGIN_ID);
+	 	IEclipsePreferences prefs = EDCDebugger.getPrefs(ScriptingPlugin.PLUGIN_ID);
 	 	prefs.putBoolean(ScriptingPlugin.SCRIPTING_ENABLED, true);
 
-	 	prefs = InstanceScope.INSTANCE.getNode(DebugPlugin.getUniqueIdentifier());
+	 	prefs = EDCDebugger.getPrefs(DebugPlugin.getUniqueIdentifier());
 	 	prefs.putBoolean(IInternalDebugCoreConstants.PREF_ENABLE_STATUS_HANDLERS, false);
 
 	 	ScriptingPlugin.getBundleContext();
diff --git a/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/EDCDebugger.java b/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/EDCDebugger.java
index 5494bc0..2fd0805 100644
--- a/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/EDCDebugger.java
+++ b/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/EDCDebugger.java
@@ -17,10 +17,13 @@
 import org.eclipse.cdt.debug.edc.tcf.extension.services.LoggingProxy;
 import org.eclipse.cdt.debug.edc.tcf.extension.services.SettingsProxy;
 import org.eclipse.cdt.dsf.concurrent.IDsfStatusConstants;
+import org.eclipse.cdt.scripting.ScriptingPlugin;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Plugin;
 import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.core.runtime.preferences.InstanceScope;
 import org.eclipse.debug.core.DebugException;
 import org.eclipse.osgi.service.debug.DebugOptions;
 import org.eclipse.osgi.service.debug.DebugTrace;
@@ -246,4 +249,9 @@
 		}
 		return cache;
 	}
+	
+	public static IEclipsePreferences getPrefs(String qualifier)
+	{
+	 	return InstanceScope.INSTANCE.getNode(qualifier);
+	}
 }
diff --git a/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/formatter/FormatExtensionManager.java b/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/formatter/FormatExtensionManager.java
index f18648f..f08a945 100644
--- a/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/formatter/FormatExtensionManager.java
+++ b/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/formatter/FormatExtensionManager.java
@@ -24,7 +24,6 @@
 import org.eclipse.core.runtime.IConfigurationElement;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.preferences.IEclipsePreferences;
-import org.eclipse.core.runtime.preferences.InstanceScope;
 
 /**
  * Manages format extensions
@@ -102,7 +101,7 @@
 	private FormatExtensionManager(IVariableFormatProviderChooser chooser) {
 		readProviders();
 		setFormatProviderChooser(chooser);
-		IEclipsePreferences scope = InstanceScope.INSTANCE.getNode(EDCDebugger.PLUGIN_ID);
+		IEclipsePreferences scope = EDCDebugger.getPrefs(EDCDebugger.PLUGIN_ID);
 		enabled = scope.getBoolean(VARIABLE_FORMATS_ENABLED, FormatExtensionManager.VARIABLE_FORMATS_ENABLED_DEFAULT);
 	}
 
diff --git a/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/services/dsf/BreakpointAttributeTranslator.java b/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/services/dsf/BreakpointAttributeTranslator.java
index 8419e9d..4c1f78d 100644
--- a/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/services/dsf/BreakpointAttributeTranslator.java
+++ b/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/services/dsf/BreakpointAttributeTranslator.java
@@ -22,11 +22,11 @@
 import org.eclipse.cdt.debug.core.model.ICWatchpoint;
 import org.eclipse.cdt.debug.edc.internal.EDCDebugger;
 import org.eclipse.cdt.debug.edc.internal.EDCTrace;
-import org.eclipse.cdt.debug.edc.internal.services.dsf.Modules.ModuleDMC;
 import org.eclipse.cdt.debug.edc.internal.symbols.InvalidVariableLocation;
 import org.eclipse.cdt.debug.edc.launch.EDCLaunch;
 import org.eclipse.cdt.debug.edc.services.IEDCExpression;
 import org.eclipse.cdt.debug.edc.services.ITargetEnvironment;
+import org.eclipse.cdt.debug.edc.services.Stack;
 import org.eclipse.cdt.debug.edc.symbols.ILineEntryProvider.ILineAddresses;
 import org.eclipse.cdt.debug.edc.symbols.IType;
 import org.eclipse.cdt.debug.edc.symbols.IVariableLocation;
@@ -53,9 +53,6 @@
 import org.eclipse.debug.core.DebugPlugin;
 import org.eclipse.debug.core.model.IBreakpoint;
 
-//trying to avoid dependence on the ui, even the core debug UI
-//import org.eclipse.debug.ui.DebugUITools;
-
 public class BreakpointAttributeTranslator implements IBreakpointAttributeTranslator2 {
 
 	private DsfServicesTracker	dsfServicesTracker;
@@ -208,7 +205,7 @@
 			return;
 		}
 
-		final ModuleDMC module = (ModuleDMC) context;
+		final Modules.ModuleDMC module = (Modules.ModuleDMC)context;
 
 		Map<String, Object> oneBPAttr;
 		if (breakpoint instanceof ICWatchpoint) {
@@ -218,72 +215,52 @@
 				drm.setStatus(
 						new Status(IStatus.ERROR, EDCDebugger.PLUGIN_ID,
 								MessageFormat.format(
-										EDCServicesMessages.BPAttrTranslator_WatchptNoExprService,
+										EDCServicesMessages
+										.BPAttrTranslator_WatchptNoExprService,
 										wpExpr)));
 				drm.done();
 			} else {
-				IEDCExpression exprDMC = (IEDCExpression)expressions.createExpression(module, wpExpr);
+				IEDCExpression exprDMC
+				  = (IEDCExpression)expressions.createExpression(module, wpExpr);
 				exprDMC.evaluateExpression();
 				IVariableLocation varLoc = exprDMC.getEvaluatedLocation();
-// the following depends upon org.eclipse.debug.ui to get the current stackFrame;
-// not certain that creating a ui dependency is exactly kosher in this situation.
-//				if (varLoc == null || varLoc instanceof InvalidVariableLocation) {
-//				    IAdaptable adaptable = DebugUITools.getDebugContext();
-//				    if (adaptable == null) {
-//						drm.setStatus(
-//								new Status(IStatus.ERROR, EDCDebugger.PLUGIN_ID,
-//										MessageFormat.format(
-//												EDCServicesMessages.BPAttrTranslator_WatchptNoContext,
-//												wpExpr)));
-//						drm.done();
-//						return;
-//				    }	
-//					StackFrameDMC frame = (StackFrameDMC)adaptable.getAdapter(StackFrameDMC.class);
-//					if (frame == null) {
-//						drm.setStatus(
-//								new Status(IStatus.ERROR, EDCDebugger.PLUGIN_ID,
-//										MessageFormat.format(
-//												EDCServicesMessages.BPAttrTranslator_WatchptNoContext,
-//												wpExpr)));
-//						drm.done();
-//						return;		// message is ready, need to skip all setStatus() calls below
-//					}
-//					exprDMC = (IEDCExpression)expressions.createExpression(frame, wpExpr);
-//					exprDMC.evaluateExpression();
-//					varLoc = exprDMC.getEvaluatedLocation();
-//				}
-				if (varLoc == null || varLoc instanceof InvalidVariableLocation) {
+				IAddress wpAddr;
+				if (varLoc == null || varLoc instanceof InvalidVariableLocation
+						|| (wpAddr = varLoc.getAddress()) == null) {
 					drm.setStatus(
 							new Status(IStatus.WARNING, EDCDebugger.PLUGIN_ID,
 									   MessageFormat.format(
-											   EDCServicesMessages.BPAttrTranslator_WatchptLocationInvalid,
+											   EDCServicesMessages
+											   .BPAttrTranslator_WatchptLocationInvalid,
 											   wpExpr, module.getName())));
 				} else {
-					try {
-						IAddress wpAddr = varLoc.getAddress();
-						if (wpAddr == null)
-							throw new CoreException(null);
-						String wpAddrString = wpAddr.toString(16);
-						if (module.containsAddress(wpAddr)) {
-							IType exprType = TypeUtils.getStrippedType(exprDMC.getEvaluatedType());
-							Map<String,Object> wpAttr = new HashMap<String, Object>(attributes);
-							wpAttr.put(Breakpoints.RUNTIME_ADDRESS, wpAddrString);
-							wpAttr.put(CWatchpoint.RANGE, exprType.getByteSize());
-							targetBPAttrs.add(wpAttr);
-							drm.setData(targetBPAttrs);
-						} else {
-							drm.setStatus(
-									new Status(IStatus.WARNING, EDCDebugger.PLUGIN_ID,
-											   MessageFormat.format(
-													   EDCServicesMessages.BPAttrTranslator_WatchptNotInModule,
-													   wpExpr, wpAddrString, module.getName())));
-						}
-					} catch (CoreException e) {
+					boolean wpValidForModule = module.containsAddress(wpAddr);
+					if (!wpValidForModule
+							&& varLoc.getContext() instanceof Stack.StackFrameDMC) {
+						Stack.StackFrameDMC frame
+						  = (Stack.StackFrameDMC)varLoc.getContext();
+						wpValidForModule = module == frame.getModule();
+					}
+
+					String wpAddrString = wpAddr.toString(16);
+					// used in both parts of "if (...) {...} else {...}" below
+
+					if (wpValidForModule) {
+						IType exprType
+						  = TypeUtils.getStrippedType(exprDMC.getEvaluatedType());
+						Map<String,Object> wpAttr
+						  = new HashMap<String, Object>(attributes);
+						wpAttr.put(Breakpoints.RUNTIME_ADDRESS, wpAddrString);
+						wpAttr.put(CWatchpoint.RANGE, exprType.getByteSize());
+						targetBPAttrs.add(wpAttr);
+						drm.setData(targetBPAttrs);
+					} else {
 						drm.setStatus(
-								new Status(IStatus.ERROR, EDCDebugger.PLUGIN_ID,
+								new Status(IStatus.WARNING, EDCDebugger.PLUGIN_ID,
 										   MessageFormat.format(
-												   EDCServicesMessages.BPAttrTranslator_WatchptCoreExceptionGettingAddr,
-												   wpExpr, e.getLocalizedMessage())));
+												   EDCServicesMessages
+												   .BPAttrTranslator_WatchptNotInModule,
+												   wpExpr, wpAddrString, module.getName())));
 					}
 				}
 				drm.done();
diff --git a/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/services/dsf/Breakpoints.java b/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/services/dsf/Breakpoints.java
index acf8034..a41918a 100644
--- a/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/services/dsf/Breakpoints.java
+++ b/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/services/dsf/Breakpoints.java
@@ -774,6 +774,7 @@
 
 				if (usesTCFBreakpointService()) {
 					final Map<String, Object> tcfProperties = new HashMap<String, Object>();
+
 					tcfProperties.put(TCF_BP_ACCESSMODE, TCF_BP_ACCESSMODE_EXECUTE);
 					tcfProperties.put(TCF_BP_ID, Long.toString(id));
 					tcfProperties.put(TCF_BP_ENABLED, true);
@@ -781,13 +782,15 @@
 					tcfProperties.put(TCF_BP_LOCATION, address.toString());
 					tcfProperties.put(TCF_BP_CONTEXTIDS, getTcfContextIDs(exeDMC));
 
+					ITargetEnvironment te = getTargetEnvironmentService();
+					te.updateBreakpointProperties(exeDMC, address, tcfProperties);
+
 					transferOptionalTcfProperties(allProps, tcfProperties);
 
 					// save the separated TCF properties as a property
 					// set amongst the regular properties; makes them
 					// easy to pass as a set when calling the agent's add()
 					allProps.put(TCF_PROPERTIES, tcfProperties);
-					getTargetEnvironmentService().updateBreakpointProperties(exeDMC, address, allProps);
 
 					drm.setData(new BreakpointDMData(id, bp_dmc, bp_addrs, allProps));
 					drm.done();
@@ -857,10 +860,12 @@
 
 					tcfProperties.put(TCF_BP_CONTEXTIDS, getTcfContextIDs(dmc));
 
+					ITargetEnvironment te = getTargetEnvironmentService();
+					te.updateBreakpointProperties(dmc, address, tcfProperties);
+
 					transferOptionalTcfProperties(allProps, tcfProperties);
 
 					allProps.put(TCF_PROPERTIES, tcfProperties);
-					getTargetEnvironmentService().updateBreakpointProperties(dmc, address, allProps);
 
 					drm.setData(new BreakpointDMData(id, bp_dmc, bp_addrs, allProps));
 				} else { // generic software watchpoint?  i don't think so, tim!
diff --git a/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/services/dsf/EDCServicesMessages.java b/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/services/dsf/EDCServicesMessages.java
index 14aa020..52d1e35 100644
--- a/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/services/dsf/EDCServicesMessages.java
+++ b/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/services/dsf/EDCServicesMessages.java
@@ -33,8 +33,6 @@
 
 	public static String BPAttrTranslator_BkptAddressNotInModule;
 
-	public static String BPAttrTranslator_WatchptCoreExceptionGettingAddr;
-
 	public static String BPAttrTranslator_WatchptLocationInvalid;
 
 	public static String BPAttrTranslator_WatchptNoContext;
diff --git a/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/services/dsf/EDCServicesMessages.properties b/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/services/dsf/EDCServicesMessages.properties
index dab568e..29f43cd 100644
--- a/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/services/dsf/EDCServicesMessages.properties
+++ b/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/services/dsf/EDCServicesMessages.properties
@@ -18,7 +18,6 @@
 Disassembly_NoDisassemblerYet=No disassembler is available yet.
 
 BPAttrTranslator_BkptAddressNotInModule=Address breakpoint at {0} does not fall in the module [{1}].
-BPAttrTranslator_WatchptCoreExceptionGettingAddr=CoreException thrown acquiring address for expression "{0}": {1}
 BPAttrTranslator_WatchptLocationInvalid=Cannot get address for expression "{0}" in module [{1}].
 BPAttrTranslator_WatchptNoContext=Cannot evaluate expression "{0}"; context unavailable.
 BPAttrTranslator_WatchptNoExprService=Cannot evaluate expression "{0}"; EDC Expression service unavailable.
diff --git a/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/services/dsf/Expressions.java b/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/services/dsf/Expressions.java
index 0ac5c73..2e9319a 100644
--- a/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/services/dsf/Expressions.java
+++ b/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/services/dsf/Expressions.java
@@ -96,34 +96,38 @@
 		private String valueString;
 
 		public BaseEDCExpressionDMC(IDMContext parent, String expression, String name) {
-			super(Expressions.this, new IDMContext[] { parent }, name, ((IEDCDMContext)parent).getID() + "." + name); //$NON-NLS-1$
+			// use the full expression in the id as their hashcode is based on
+			// id, so they must be unique
+			super(Expressions.this, new IDMContext[] { parent }, name,
+				  ((IEDCDMContext)parent).getID() + '.' + expression);
 			this.expression = expression;
 			frame = DMContexts.getAncestorOfType(parent, StackFrameDMC.class);
-			TypeEngine typeEngine;
-			if (frame != null) {
-				typeEngine = frame.getTypeEngine();
-				engine = new ASTEvaluationEngine(getEDCServicesTracker(), frame, typeEngine);
-			} else if (parent instanceof ModuleDMC) {
+			engine = initEngine(parent);
+		}
+
+		private ASTEvaluationEngine initEngine(IDMContext parent) {
+			if (frame != null)
+				return new ASTEvaluationEngine(getEDCServicesTracker(), frame,
+												frame.getTypeEngine());
+
+			if (parent instanceof ModuleDMC) {
 				IEDCSymbolReader edcSymbolReader = ((ModuleDMC)parent).getSymbolReader();
 				if (edcSymbolReader instanceof EDCSymbolReader) {
 					IDebugInfoProvider debugInfoProvider
 					  = ((EDCSymbolReader)edcSymbolReader).getDebugInfoProvider();
-					typeEngine = new TypeEngine(getTargetEnvironmentService(), debugInfoProvider);
-					engine = new ASTEvaluationEngine(getEDCServicesTracker(), parent, typeEngine);
-				} else {
-					typeEngine = null;
-					engine = null;
+					TypeEngine typeEngine
+					  = new TypeEngine(getTargetEnvironmentService(), debugInfoProvider);
+					return new ASTEvaluationEngine(getEDCServicesTracker(), parent, typeEngine);
 				}
-			} else {
-				typeEngine = null;
-				engine = null;
 			}
+
+			return null;
 		}
-		
+
 		public BaseEDCExpressionDMC(IDMContext parent, String expression) {
 			this(parent, expression, expression);
 		}
-		
+
 		/* (non-Javadoc)
 		 * @see org.eclipse.cdt.debug.edc.services.DMContext#toString()
 		 */
@@ -131,7 +135,7 @@
 		public String toString() {
 			return getExpression();
 		}
-		
+
 		/* (non-Javadoc)
 		 * @see org.eclipse.cdt.debug.edc.internal.services.dsf.IEDCExpression#getFrame()
 		 */
diff --git a/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/snapshot/Album.java b/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/snapshot/Album.java
index 30fa634..41bac9e 100644
--- a/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/snapshot/Album.java
+++ b/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/snapshot/Album.java
@@ -67,7 +67,6 @@
 import org.eclipse.core.runtime.SubMonitor;
 import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.core.runtime.preferences.IEclipsePreferences;
-import org.eclipse.core.runtime.preferences.InstanceScope;
 import org.eclipse.debug.core.DebugPlugin;
 import org.eclipse.debug.core.sourcelookup.ISourceContainer;
 import org.eclipse.debug.core.sourcelookup.ISourceLookupDirector;
@@ -980,7 +979,7 @@
 	}
 
 	public static void setVariableCaptureDepth(int newSetting) {
-		IEclipsePreferences scope = InstanceScope.INSTANCE.getNode(EDCDebugger.PLUGIN_ID);
+		IEclipsePreferences scope = EDCDebugger.getPrefs(EDCDebugger.PLUGIN_ID);
 		scope.putInt(PREF_VARIABLE_CAPTURE_DEPTH, newSetting);
 		try {
 			scope.flush();
@@ -995,7 +994,7 @@
 	}
 
 	public static void setPlaySnapshotInterval(int delayInMilliseconds) {
-		IEclipsePreferences scope = InstanceScope.INSTANCE.getNode(EDCDebugger.PLUGIN_ID);
+		IEclipsePreferences scope = EDCDebugger.getPrefs(EDCDebugger.PLUGIN_ID);
 		scope.putInt(PLAY_SNAPSHOT_DELAY_TIME, delayInMilliseconds);
 		try {
 			scope.flush();
@@ -1010,7 +1009,7 @@
 	}
 
 	public static void setSnapshotCreationControl(String newSetting) {
-		IEclipsePreferences scope = InstanceScope.INSTANCE.getNode(EDCDebugger.PLUGIN_ID);
+		IEclipsePreferences scope = EDCDebugger.getPrefs(EDCDebugger.PLUGIN_ID);
 		scope.put(PREF_CREATION_CONTROL, newSetting);
 		try {
 			scope.flush();
diff --git a/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/symbols/Variable.java b/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/symbols/Variable.java
index 1c631f0..a2faabd 100644
--- a/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/symbols/Variable.java
+++ b/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/symbols/Variable.java
@@ -113,7 +113,21 @@
 		if (scope != null) {
 			builder.append(", "); //$NON-NLS-1$
 			builder.append("scope="); //$NON-NLS-1$
-			builder.append(scope.getName());
+			String sname = scope.getName();
+			if (sname.length() == 0) {
+				for (IScope parent = scope.getParent()
+						; parent != null
+						; parent = parent.getParent())
+					if ((sname = parent.getName()).length() != 0)
+						break;
+				if (sname.length() != 0) {
+					sname += "()"; //$NON-NLS-1$
+					if (scope instanceof LexicalBlockScope)
+						sname += "{.lexBlk.}"; //$NON-NLS-1$
+				} else
+					sname = "{." + scope.getClass().getSimpleName() + ".}";
+			}
+			builder.append(sname);
 		}
 		builder.append("]"); //$NON-NLS-1$
 		return builder.toString();
diff --git a/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/symbols/dwarf/DwarfDebugInfoProvider.java b/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/symbols/dwarf/DwarfDebugInfoProvider.java
index 0ee68a0..ffbbbc6 100644
--- a/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/symbols/dwarf/DwarfDebugInfoProvider.java
+++ b/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/symbols/dwarf/DwarfDebugInfoProvider.java
@@ -613,26 +613,32 @@
 	}
 	
 	// list of compilation units per source file 
-	protected HashMap<IPath, List<ICompileUnitScope>> compileUnitsPerFile = new HashMap<IPath, List<ICompileUnitScope>>();
+	protected HashMap<IPath, List<ICompileUnitScope>> compileUnitsPerFile
+	  = new HashMap<IPath, List<ICompileUnitScope>>();
 	
 	// list of compile units in .debug_info order
-	protected ArrayList<DwarfCompileUnit> compileUnits = new ArrayList<DwarfCompileUnit>();
+	protected ArrayList<DwarfCompileUnit> compileUnits
+	  = new ArrayList<DwarfCompileUnit>();
 
 	// list of compile units with code (non-zero high address), sorted by low address
-	protected ArrayList<DwarfCompileUnit> sortedCompileUnitsWithCode = new ArrayList<DwarfCompileUnit>();
+	protected ArrayList<DwarfCompileUnit> sortedCompileUnitsWithCode
+	  = new ArrayList<DwarfCompileUnit>();
 
 	// function and type declarations can be referenced by offsets relative to
 	// the compile unit or to the entire .debug_info section. therefore we keep
 	// maps by .debug_info offset, and for compile unit relative offsets, we
 	// just add the compile unit offset into the .debug_info section.
-	protected Map<Long, AttributeList> functionsByOffset = new HashMap<Long, AttributeList>();
-	protected Map<Long, IType> typesByOffset = Collections.synchronizedMap(new HashMap<Long, IType>());
+	protected Map<Long, AttributeList> functionsByOffset
+	  = new HashMap<Long, AttributeList>();
+	protected Map<Long, IType> typesByOffset
+	  = Collections.synchronizedMap(new HashMap<Long, IType>());
 	// These references may eventually become pointless so weak reference them
 	protected Map<Long, IForwardTypeReference> referenceTypesByOffset
 	  = Collections.synchronizedMap(new WeakHashMap<Long, IForwardTypeReference>());
 
 	// for casting to a type, keep certain types by name
-	protected Map<String, List<IType>> typesByName = new HashMap<String, List<IType>>();
+	protected Map<String, List<IType>> typesByName
+	  = new HashMap<String, List<IType>>();
 	// for casting to a type, track whether the cast name includes an aggregate designator
 	enum TypeAggregate { Class, Struct, Union, None };
 
@@ -640,24 +646,40 @@
 	protected Map<Long, Scope> scopesByOffset = new HashMap<Long, Scope>();
 	
 	// entry points for CUs in the .debug_info section, used to dynamically parse CUs as needed 
-	protected TreeMap<Long, CompilationUnitHeader> debugOffsetsToCompileUnits = new TreeMap<Long, CompilationUnitHeader>();
+	protected TreeMap<Long, CompilationUnitHeader>
+	  debugOffsetsToCompileUnits = new TreeMap<Long, CompilationUnitHeader>();
 	
-	// forward references for tags we have not parsed yet.  (These will go into typesByOffset once handled)
-	//Map<Long, ForwardDwarfDefinition> forwardDwarfDefinitions = new HashMap<Long, ForwardDwarfDefinition>();
+	// forward references for tags we have not parsed yet.
+// (These will go into typesByOffset once handled)
+//	Map<Long, ForwardDwarfDefinition> forwardDwarfDefinitions
+//	  = new HashMap<Long, ForwardDwarfDefinition>();
 	
 	// these are just for faster lookups
-	protected Map<String, List<IFunctionScope>> functionsByName = new HashMap<String, List<IFunctionScope>>();
-	protected Map<String, List<IVariable>> variablesByName = new HashMap<String, List<IVariable>>();
-	protected Map<String, List<PublicNameInfo>> publicFunctions = new HashMap<String, List<PublicNameInfo>>();
-	protected Map<String, List<PublicNameInfo>> publicVariables = new HashMap<String, List<PublicNameInfo>>();
+	protected Map<String, List<IFunctionScope>> functionsByName
+	  = new HashMap<String, List<IFunctionScope>>();
+	protected Map<String, List<PublicNameInfo>> publicFunctions
+	  = new HashMap<String, List<PublicNameInfo>>();
+	protected Map<String, List<PublicNameInfo>> publicVariables
+	  = new HashMap<String, List<PublicNameInfo>>();
+	protected Map<String, List<IVariable>> variablesByName
+	  = new HashMap<String, List<IVariable>>();
+
+	private List<IVariable> getCachedVariablesByName(String name,
+			boolean globalsOnly) {
+		List<IVariable> v = variablesByName.get(name);
+		return (v != null && globalsOnly) ? new ArrayList<IVariable>(v) : v;
+	}
 
 	// abbreviation tables (lists of abbrev entries), mapped by .debug_abbrev offset
-	protected Map<Integer, Map<Long, AbbreviationEntry>> abbreviationMaps = new HashMap<Integer, Map<Long, AbbreviationEntry>>();
+	protected Map<Integer, Map<Long, AbbreviationEntry>> abbreviationMaps
+	  = new HashMap<Integer, Map<Long, AbbreviationEntry>>();
 
 	// mapping of PC range to frame description entries
-	protected TreeMap<IRangeList.Entry, FrameDescriptionEntry> frameDescEntries = new TreeMap<IRangeList.Entry, FrameDescriptionEntry>();
+	protected TreeMap<IRangeList.Entry, FrameDescriptionEntry> frameDescEntries
+	  = new TreeMap<IRangeList.Entry, FrameDescriptionEntry>();
 	// mapping of CIE offsets to parsed common info entries
-	protected Map<Long, CommonInformationEntry> commonInfoEntries = new HashMap<Long, CommonInformationEntry>();
+	protected Map<Long, CommonInformationEntry> commonInfoEntries
+	  = new HashMap<Long, CommonInformationEntry>();
 	
 	
 	protected Set<String> referencedFiles = new HashSet<String>();
@@ -938,18 +960,20 @@
 					}
 				} else {
 					// not a public name, so parse all compilation units looking for variables
-					if (!globalsOnly)
+					if (globalsOnly)
+						ensureParsedForGlobalVariables();
+					else
 						ensureParsedForVariables();
 				}
 			}
-	
-			result = variablesByName.get(name);
+
+			result = getCachedVariablesByName(name, globalsOnly);
 	
 			// check against unqualified name because RVCT 2.x did not include namespace
 			// info for globals that are inside namespaces
 			if (result == null && baseNameStart != -1)
-				result = variablesByName.get(baseName);
-				
+				result = getCachedVariablesByName(baseName, globalsOnly);
+
 			if (result == null)
 				return new ArrayList<IVariable>(0);
 		}
diff --git a/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/services/Stack.java b/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/services/Stack.java
index e5e9d8c..b1b0f76 100644
--- a/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/services/Stack.java
+++ b/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/services/Stack.java
@@ -72,7 +72,6 @@
 import org.eclipse.core.runtime.Path;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.core.runtime.preferences.IEclipsePreferences;
-import org.eclipse.core.runtime.preferences.InstanceScope;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 import org.w3c.dom.NodeList;
@@ -794,13 +793,13 @@
 			// may need to refresh the locals list because "Show All Variables"
 			// toggle has changed
 		    if (showAllVariablesEnabled == null) {
-				IEclipsePreferences scope = InstanceScope.INSTANCE.getNode(EDCDebugger.PLUGIN_ID);
+				IEclipsePreferences scope = EDCDebugger.getPrefs(EDCDebugger.PLUGIN_ID);
 		    	showAllVariablesEnabled = scope.getBoolean(IEDCSymbols.SHOW_ALL_VARIABLES_ENABLED, false);
 		    }
 
 			boolean enabled = showAllVariablesEnabled.booleanValue();
 			if (locals != null) {
-				IEclipsePreferences scope = InstanceScope.INSTANCE.getNode(EDCDebugger.PLUGIN_ID);
+				IEclipsePreferences scope = EDCDebugger.getPrefs(EDCDebugger.PLUGIN_ID);
 				enabled = scope.getBoolean(IEDCSymbols.SHOW_ALL_VARIABLES_ENABLED, showAllVariablesEnabled);
 			}
 
