diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/ui/WTPDataModelSynchHelper.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/ui/WTPDataModelSynchHelper.java
index a9a29d5..5f7aa37 100644
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/ui/WTPDataModelSynchHelper.java
+++ b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/ui/WTPDataModelSynchHelper.java
@@ -168,7 +168,7 @@
 	public void propertyChanged(WTPOperationDataModelEvent event) {
 		String propertyName = event.getPropertyName();
 		int flag = event.getFlag();
-		if (flag == WTPOperationDataModelListener.ENABLE_CHG)
+		if (flag == WTPOperationDataModelEvent.ENABLE_CHG)
 			setEnablement(propertyName, ((Boolean) event.getNewValue()).booleanValue());
 		else
 			synchUIWithModel(propertyName, flag);
@@ -290,7 +290,7 @@
 	}
 
 	protected void setWidgetValue(String propertyName, int flag, Combo combo) {
-		if (flag == WTPOperationDataModelListener.VALID_VALUES_CHG || combo.getItemCount() == 0) {
+		if (flag == WTPOperationDataModelEvent.VALID_VALUES_CHG || combo.getItemCount() == 0) {
 			// Display properties should only fire if the contents change.
 			WTPPropertyDescriptor[] descriptors = dataModel.getValidPropertyDescriptors(propertyName);
 			String[] items = new String[descriptors.length];
@@ -411,7 +411,7 @@
 				String propertyName = null;
 				while (propertyNames.hasNext()) {
 					propertyName = (String) propertyNames.next();
-					synchUIWithModel(propertyName, WTPOperationDataModelListener.PROPERTY_CHG);
+					synchUIWithModel(propertyName, WTPOperationDataModelEvent.PROPERTY_CHG);
 				}
 			}
 		}
@@ -429,7 +429,7 @@
 				widgetToDepControls = new HashMap();
 			widgetToDepControls.put(widget, depControls);
 		}
-		synchUIWithModel(propertyName, WTPOperationDataModelListener.PROPERTY_CHG);
+		synchUIWithModel(propertyName, WTPOperationDataModelEvent.PROPERTY_CHG);
 	}
 
 	public void synchText(Text text, String propertyName, Control[] dependentControls) {
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/ui/WTPWizardPage.java b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/ui/WTPWizardPage.java
index 2b2bb95..35549de 100644
--- a/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/ui/WTPWizardPage.java
+++ b/plugins/org.eclipse.wst.common.frameworks.ui/wtp_ui/org/eclipse/wst/common/frameworks/ui/WTPWizardPage.java
@@ -384,7 +384,7 @@
 	 */
 	public void propertyChanged(WTPOperationDataModelEvent event) {
 		String propertyName = event.getPropertyName();
-		if (validationPropertyNames != null && (event.getFlag() == PROPERTY_CHG || (!isPageComplete() && event.getFlag() == VALID_VALUES_CHG))) {
+		if (validationPropertyNames != null && (event.getFlag() == WTPOperationDataModelEvent.PROPERTY_CHG || (!isPageComplete() && event.getFlag() == WTPOperationDataModelEvent.VALID_VALUES_CHG))) {
 			for (int i = 0; i < validationPropertyNames.length; i++) {
 				if (validationPropertyNames[i].equals(propertyName)) {
 					validatePage();
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/operations/WTPOperationDataModel.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/operations/WTPOperationDataModel.java
index 82f0de5..0a719eb 100644
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/operations/WTPOperationDataModel.java
+++ b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/operations/WTPOperationDataModel.java
@@ -47,8 +47,8 @@
  * <LI>Compose and decompose entire DataModels through nesting.</LI>
  * </UL>
  * 
- * <B>PropertyNames</B> Clients interact with DataModels by getting and setting properties (Objects)
- * with PropertyNames. A PropertyName is a String Object uniquely identifing a particular
+ * <B>PropertyNames </B> Clients interact with DataModels by getting and setting properties
+ * (Objects) with PropertyNames. A PropertyName is a String Object uniquely identifing a particular
  * property. The recommended practice for defining PropertyNames is to define them as static final
  * Class level Strings and to use the DataModel instance class name appended with the property name
  * as the value (this should ensure uniqueness and gives a readible value when debugging).
@@ -270,6 +270,33 @@
 		throw new RuntimeException(PROPERTY_NOT_LOCATED_ + propertyName);
 	}
 
+	/**
+	 * <p>
+	 * Returns a WTPPropertyDescriptor array consisting of all valid WTPPropertyDescriptors for the
+	 * specified property. Each WTPPropertyDescriptor {@see WTPPropertyDescriptor for details}
+	 * contains a value and a human readible description for the value. The set of all values in the
+	 * returned array are those values which are valid for the DataModel. This value set only makes
+	 * sense when valid property values conform to a well defined finite set. If no such value set
+	 * exists for the property, the a 0 length array is returned. <code>null</code> is never
+	 * returned.
+	 * </p>
+	 * <p>
+	 * As an example, suppose there is a property called <code>SHIRT_SIZE</code> which is an
+	 * <code>Integer</code> type. Also suppse that valid shirt sizes are only small, medium, or
+	 * large. However, the actual values representing small, medium, and large are 1, 2, and 3
+	 * respectively. A call to <code>getValidPropertyDescriptors(SHIRT_SIZE)</code> would return a
+	 * WTPPropertyDescriptor array where the value, description pairs would be {(1, small), (2,
+	 * medium), (3, large)}.
+	 * </p>
+	 * <p>
+	 * Subclasses should override {@see #doGetValidPropertyDescriptors(String)}as necessary.
+	 * </p>
+	 * 
+	 * @param propertyName
+	 * @return
+	 * @see #getPropertyDescriptor(String)
+	 * @see #doGetPropertyDescriptor(String)
+	 */
 	public final WTPPropertyDescriptor[] getValidPropertyDescriptors(String propertyName) {
 		checkValidPropertyName(propertyName);
 		if (isBaseProperty(propertyName)) {
@@ -288,15 +315,45 @@
 	}
 
 	/**
-	 * Subclasses may override to provide specific valid property values for the given propertyName.
+	 * Subclasses should override this method to return their set of valid WTPPropertyDescriptors.
+	 * This default implementation returns: <code>new WTPPropertyDescriptor[0];</code>
 	 * 
 	 * @param propertyName
 	 * @return
+	 * 
+	 * @see #getValidPropertyDescriptors(String)
 	 */
 	protected WTPPropertyDescriptor[] doGetValidPropertyDescriptors(String propertyName) {
 		return new WTPPropertyDescriptor[0];
 	}
 
+	/**
+	 * <p>
+	 * Returns a WTPPropertyDescriptor for the specified property. The
+	 * <code>getPropertyValue()</code> method on the returned WTPPropertyDescriptor will be the
+	 * same value as returned by <code>getPropertyValue(propertyName)</code>.
+	 * </p>
+	 * <p>
+	 * Following the example introduced in {@see #getValidPropertyDescriptors(String)}, suppose the
+	 * <code>SHIRT_SIZE</code> property is currently set to 1. A call to this method would return
+	 * a WTPPropertyDescriptor whose <code>getPropertyValue()</code> returns <code>1</code> and
+	 * whose <code>getPropertyDescription()</code> returns <code>small</code>.
+	 * </p>
+	 * <p>
+	 * Also, note that even if a particular property is not confined to a finite set of values as
+	 * defined by {@see #getValidPropertyDescriptors(String)}this method will always return a valid
+	 * WTPPropertyDescriptor.
+	 * </p>
+	 * <p>
+	 * Subclasses should should override {@see #doGetPropertyDescriptor(String)}as necessary.
+	 * </p>
+	 * 
+	 * @param propertyName
+	 * @return
+	 * 
+	 * @see #getValidPropertyDescriptors(String)
+	 * @see #doGetPropertyDescriptor(String)
+	 */
 	public final WTPPropertyDescriptor getPropertyDescriptor(String propertyName) {
 		checkValidPropertyName(propertyName);
 		if (isBaseProperty(propertyName)) {
@@ -314,6 +371,13 @@
 		throw new RuntimeException(PROPERTY_NOT_LOCATED_ + propertyName);
 	}
 
+	/**
+	 * Subclasses should override this method as necessary. This default implementation returns
+	 * <code>new WTPPropertyDescriptor(getProperty(propertyName));</code>.
+	 * 
+	 * @param propertyName
+	 * @return
+	 */
 	protected WTPPropertyDescriptor doGetPropertyDescriptor(String propertyName) {
 		return new WTPPropertyDescriptor(getProperty(propertyName));
 	}
@@ -463,14 +527,17 @@
 	/**
 	 * <p>
 	 * Returns the property value for the specified propertyName.
+	 * </p>
 	 * <p>
-	 * If the specified propertyName is not a property (see#isProperty(String)) then a
+	 * If the specified propertyName is not a property {@see #isProperty(String)}then a
 	 * RuntimeException will be thrown.
+	 * </p>
 	 * <p>
-	 * If the specified propertyName is a base property (see#isBaseProperty(String)) then it will
+	 * If the specified propertyName is a base property {@see #isBaseProperty(String)}then it will
 	 * immediatly be set and nested models will not be affected. If it is not a base property (i.e.
 	 * it is a property for a nested DataModel) then a recursive search through nested DataModels
 	 * will be conducted. The first nested DataModel having the property will return its value.
+	 * </p>
 	 * 
 	 * @param propertyName
 	 * @return
@@ -478,10 +545,12 @@
 	 * <p>
 	 * There are also convenience methods for getting properties representing property types of
 	 * boolean, int, and String
-	 * <p>
-	 * @see #getBooleanProperty(String)
-	 * @see #getIntProperty(String)
-	 * @see #getStringProperty(String)
+	 * </p>
+	 * <ul>
+	 * <li>{@see #getBooleanProperty(String)}</li>
+	 * <li>{@see #getIntProperty(String)}</li>
+	 * <li>{@see #getStringProperty(String)}</li>
+	 * </ul>
 	 */
 	public final Object getProperty(String propertyName) {
 		checkValidPropertyName(propertyName);
@@ -612,7 +681,7 @@
 	 * @param propertyValue
 	 */
 	public void notifyListeners(String propertyName, Object oldValue, Object propertyValue) {
-		notifyListeners(propertyName, PROPERTY_CHG, oldValue, propertyValue);
+		notifyListeners(propertyName, WTPOperationDataModelEvent.PROPERTY_CHG, oldValue, propertyValue);
 	}
 
 	/**
@@ -828,13 +897,13 @@
 	 * @param propertyName
 	 */
 	public void notifyValidValuesChange(String propertyName) {
-		notifyListeners(propertyName, WTPOperationDataModelListener.VALID_VALUES_CHG, null, null);
+		notifyListeners(propertyName, WTPOperationDataModelEvent.VALID_VALUES_CHG, null, null);
 	}
 
 	protected void notifyEnablementChange(String propertyName) {
 		Boolean enable = isEnabled(propertyName);
 		if (enable != null)
-			notifyListeners(propertyName, ENABLE_CHG, null, enable);
+			notifyListeners(propertyName, WTPOperationDataModelEvent.ENABLE_CHG, null, enable);
 	}
 
 	public void dispose() {
@@ -851,7 +920,7 @@
 	/**
 	 * @return Returns the locked.
 	 */
-	protected boolean isLocked() {
+	protected final boolean isLocked() {
 		return locked;
 	}
 
@@ -859,7 +928,7 @@
 	 * @param locked
 	 *            The locked to set.
 	 */
-	protected void setLocked(boolean locked) {
+	protected final void setLocked(boolean locked) {
 		this.locked = locked;
 		if (locked)
 			hasBeenExecutedAgainst = true;
@@ -923,7 +992,7 @@
 	public boolean hasBeenExecutedAgainst() {
 		return hasBeenExecutedAgainst;
 	}
-	
+
 	///////////////////////////////////////////////////////////////////////////////////////////////
 	//TODO figure out the best way support ExtendedOperations
 	///////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/operations/WTPOperationDataModelListener.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/operations/WTPOperationDataModelListener.java
index 1d3698b..8dbf0be 100644
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/operations/WTPOperationDataModelListener.java
+++ b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/operations/WTPOperationDataModelListener.java
@@ -8,27 +8,34 @@
  **************************************************************************************************/
 package org.eclipse.wst.common.frameworks.operations;
 
+/**
+ * Clients wishing to register with a WTPOperationData to receive WTPOperationDataModelEvents need
+ * to implement this interface.
+ * 
+ * @see org.eclipse.wst.common.frameworks.operations.WTPOperationDataModel#addListener(WTPOperationDataModelListener)
+ */
 public interface WTPOperationDataModelListener {
 	/**
-	 * Flags associated with the propertyChanged event. <code>PROPERTY_CHG</code>= A simple
-	 * property change. <code>VALID_VALUES_CHG</code>= The valid values for the given property
-	 * have changed. <code>ENABLE_CHG</code>= The enablement for the given property has changed.
+	 * Use WTPOperationDataModelEvent.PROPERTY_CHG instead.
+	 * @deprecated
 	 */
 	final int PROPERTY_CHG = WTPOperationDataModelEvent.PROPERTY_CHG;
-	final int VALID_VALUES_CHG = WTPOperationDataModelEvent.VALID_VALUES_CHG;
-	final int ENABLE_CHG = WTPOperationDataModelEvent.ENABLE_CHG;
-
+	
 	/**
-	 * A property has changed on the model with the given propertyName. Use the flag to detect the
-	 * type of change.
+	 * Use WTPOperationDataModelEvent.VALID_VALUES_CHG instead.
+	 * @deprecated
+	 */
+	final int VALID_VALUES_CHG = WTPOperationDataModelEvent.VALID_VALUES_CHG;
+	
+	/**
+	 * Use WTPOperationDataModelEvent.ENABLE_CHG instead.
+	 * @deprecated
+	 */
+	final int ENABLE_CHG = WTPOperationDataModelEvent.ENABLE_CHG;
+	/**
+	 * This method is invoked on listening clients when a property changes.
 	 * 
-	 * @param propertyName
-	 * @param flag
-	 * @param oldValue
-	 * @param newValue
-	 * 
-	 * @see WTPOperationDataModelListener#PROPERTY_CHG
-	 * @see WTPOperationDataModelListener#VALID_VALUES_CHG
+	 * @param event
 	 */
 	void propertyChanged(WTPOperationDataModelEvent event);
 
diff --git a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/operations/WTPPropertyDescriptor.java b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/operations/WTPPropertyDescriptor.java
index 22a779d..9114863 100644
--- a/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/operations/WTPPropertyDescriptor.java
+++ b/plugins/org.eclipse.wst.common.frameworks/src/org/eclipse/wst/common/frameworks/operations/WTPPropertyDescriptor.java
@@ -1,14 +1,24 @@
-/*
- * Created on Nov 18, 2004 
- * @author jsholl
- */
 package org.eclipse.wst.common.frameworks.operations;
 
+//TODO link to an example in the tutorial
 /**
- * @author jsholl
+ * A WTPPropertyDescriptor provides a human readible description for a WTPDataModel propertyValue.
+ * 
+ * @see org.eclipse.wst.common.frameworks.operations.WTPOperationDataModel#getPropertyDescriptor(String)
+ * @see org.eclipse.wst.common.frameworks.operations.WTPOperationDataModel#getValidPropertyDescriptors(String)
  */
 public class WTPPropertyDescriptor {
 
+	/**
+	 * A convenience method which returns an array of WTPPropertyDescriptors. If <code>values</code>
+	 * is <code>null</code> then a 0 length array is returned. Otherwise for each
+	 * <code>values[i]</code> in the array, a new WTPPropertyDescriptor is created using
+	 * <code>new WTPPropertyDescriptor(values[i]);</code>.
+	 * 
+	 * @param values
+	 *            the array of property values
+	 * @return the constructed WTPPropertyDescriptor array
+	 */
 	public static WTPPropertyDescriptor[] createDescriptors(Object[] values) {
 		if (null == values) {
 			return new WTPPropertyDescriptor[0];
@@ -20,6 +30,20 @@
 		return descriptors;
 	}
 
+	/**
+	 * A convenience method which returns an array of WTPPropertyDescriptors. If <code>values</code>
+	 * is <code>null</code> then a 0 length array is returned. Otherwise for each
+	 * <code>values[i]</code> and <code>descriptions[i]</code> in the arrays, a new
+	 * WTPPropertyDescriptor is created using
+	 * <code>new WTPPropertyDescriptor(values[i], descriptions[i]);</code>. Both arrays must be
+	 * the same length.
+	 * 
+	 * @param values
+	 *            the array of property values
+	 * @param descriptions
+	 *            the array of property descriptions cooresponding the values array
+	 * @return the constructed WTPPropertyDescriptor array
+	 */
 	public static WTPPropertyDescriptor[] createDescriptors(Object[] values, String[] descriptions) {
 		if (null == values) {
 			return new WTPPropertyDescriptor[0];
@@ -35,19 +59,43 @@
 	private Object propertyValue;
 	private String propertyDescription;
 
+	/**
+	 * This is equavalent to calling <code>WTPPropertyDescriptor(propertyValue, null);</code>
+	 * 
+	 * @param propertyValue
+	 */
 	public WTPPropertyDescriptor(Object propertyValue) {
 		this.propertyValue = propertyValue;
 	}
 
+	/**
+	 * Creates a new WTPPropertyDescriptor with the specified propertyValue and propertyDescription.
+	 * 
+	 * @param propertyValue
+	 * @param propertyDescription
+	 */
 	public WTPPropertyDescriptor(Object propertyValue, String propertyDescription) {
 		this.propertyValue = propertyValue;
 		this.propertyDescription = propertyDescription;
 	}
 
+	/**
+	 * Returns the property value.
+	 * 
+	 * @return the property value
+	 */
 	public Object getPropertyValue() {
 		return propertyValue;
 	}
 
+	/**
+	 * Returns a human readible property description. If a non null description has been specified,
+	 * then it will be returned. Otherwise, the property value's <code>toString()</code> will be
+	 * returned if it is not null. Otherwise the empty String (<code>""</code>) will be
+	 * returned. Null will never be returned.
+	 * 
+	 * @return the human readible property description, never <code>null</code>
+	 */
 	public String getPropertyDescription() {
 		if (null != propertyDescription) {
 			return propertyDescription;
