diff --git a/plugins/org.eclipse.dd.dsf.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.dd.dsf.ui/META-INF/MANIFEST.MF
index 6cc41f28e37..2ffed4637d8 100644
--- a/plugins/org.eclipse.dd.dsf.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.dd.dsf.ui/META-INF/MANIFEST.MF
@@ -14,6 +14,7 @@ Eclipse-LazyStart: true
Export-Package: org.eclipse.dd.dsf.ui.concurrent,
org.eclipse.dd.dsf.ui.viewmodel,
org.eclipse.dd.dsf.ui.viewmodel.dm,
+ org.eclipse.dd.dsf.ui.viewmodel.properties,
org.eclipse.dd.dsf.ui.viewmodel.update,
org.eclipse.dd.dsf.ui.viewmodel.update.actions
Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/properties/IElementPropertiesProvider.java b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/properties/IElementPropertiesProvider.java
new file mode 100644
index 00000000000..139bd3408cd
--- /dev/null
+++ b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/properties/IElementPropertiesProvider.java
@@ -0,0 +1,27 @@
+package org.eclipse.dd.dsf.ui.viewmodel.properties;
+
+
+/**
+ * Provides context-sensitive properties. Can be registered as an adapter for
+ * an element or implemented directly
+ */
+public interface IElementPropertiesProvider {
+
+ /**
+ * Updates the specified property sets.
+ *
+ * @param updates each update specifies the element and context for which
+ * a set of properties is requested and stores them
+ */
+ public void update(IPropertiesUpdate[] updates);
+
+ /**
+ * Returns a user-presentable name for the given property.
+ */
+ public String getPropertyName(String property);
+
+ /**
+ * Returns a description for the given property.
+ */
+ public String getPropertyDescription(String property);
+}
diff --git a/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/properties/ILabelAttributeChangedListener.java b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/properties/ILabelAttributeChangedListener.java
new file mode 100644
index 00000000000..6f60b2c33d0
--- /dev/null
+++ b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/properties/ILabelAttributeChangedListener.java
@@ -0,0 +1,19 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Wind River Systems 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:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.dd.dsf.ui.viewmodel.properties;
+
+/**
+ *
+ */
+public interface ILabelAttributeChangedListener {
+
+ public void attributesChanged();
+}
diff --git a/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/properties/IPropertiesUpdate.java b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/properties/IPropertiesUpdate.java
new file mode 100644
index 00000000000..c81586edba4
--- /dev/null
+++ b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/properties/IPropertiesUpdate.java
@@ -0,0 +1,21 @@
+package org.eclipse.dd.dsf.ui.viewmodel.properties;
+
+import org.eclipse.debug.internal.ui.viewers.model.provisional.IViewerUpdate;
+
+/**
+ * Context sensitive properties update request for an element.
+ */
+public interface IPropertiesUpdate extends IViewerUpdate {
+ /**
+ * Returns the list of element properties that the provider should set.
+ * If null
, all available properties should be set.
+ */
+ public String[] getProperties();
+
+ /**
+ * Sets the given property to update.
+ * @param property Property ID.
+ * @param value Property value.
+ */
+ public void setProperty(String property, Object value);
+}
diff --git a/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/properties/LabelAttribute.java b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/properties/LabelAttribute.java
new file mode 100644
index 00000000000..e615c0ce5f4
--- /dev/null
+++ b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/properties/LabelAttribute.java
@@ -0,0 +1,109 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Wind River Systems 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:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.dd.dsf.ui.viewmodel.properties;
+
+import java.util.Map;
+
+import org.eclipse.core.runtime.ListenerList;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.ILabelUpdate;
+
+/**
+ * This is a base class for a label attribute used in generating label
+ * information based on properties of an element. There are currently
+ * four types of attributes: text, image, font, and color, and a given
+ * attribute can be either enabled or disabled based on the element
+ * properties.
+ *
+ * When this provider is registered for an element it calculates the properties
+ * that need to be retrieved based on view's active columns, and then it calls the
+ * element's property provider to retrieve those properties. After the property
+ * values are retrieved, they are processed in order to produce correct label text,
+ * images, fonts, and colors, for the given element.
+ */
+@SuppressWarnings("restriction")
+@ThreadSafe
+public class PropertyBasedLabelProvider
+ implements IElementLabelProvider, ILabelAttributeChangedListener
+{
+ private static final String[] EMPTY_PROPERTY_NAMES_ARRAY = new String[0];
+
+ /**
+ * Properties update used as to collect property data from the provider.
+ */
+ private class PropertiesUpdate extends VMViewerUpdate implements IPropertiesUpdate {
+
+ private final String[] fProperties;
+ private final Map