diff --git a/org.eclipse.epf.authoring.ui/src/org/eclipse/epf/authoring/ui/editors/ProcessEditor.java b/org.eclipse.epf.authoring.ui/src/org/eclipse/epf/authoring/ui/editors/ProcessEditor.java
index 47030a5..484d9f3 100644
--- a/org.eclipse.epf.authoring.ui/src/org/eclipse/epf/authoring/ui/editors/ProcessEditor.java
+++ b/org.eclipse.epf.authoring.ui/src/org/eclipse/epf/authoring/ui/editors/ProcessEditor.java
@@ -103,7 +103,6 @@
 import org.eclipse.epf.diagram.model.util.GraphicalDataHelper;
 import org.eclipse.epf.diagram.model.util.GraphicalDataManager;
 import org.eclipse.epf.diagram.ui.DiagramUIPlugin;
-import org.eclipse.epf.diagram.ui.service.DiagramUIService;
 import org.eclipse.epf.diagram.wpdd.part.WPDDiagramEditorPlugin;
 import org.eclipse.epf.library.ILibraryManager;
 import org.eclipse.epf.library.ILibraryServiceListener;
@@ -355,7 +354,7 @@
 	// duplicate definition for now, will need to merge together later
 	// see PreferenceConstants.org.eclipse.epf.library.prefs
 	
-	public static final List DEFAULT_TBS_COLUMNS = Arrays
+	public static final List<ColumnDescriptor> DEFAULT_TBS_COLUMNS = Arrays
 			.asList(new ColumnDescriptor[] {
 					COL_DESC_PRESENTATION_NAME,
 					// COL_DESC_ID,
@@ -364,7 +363,7 @@
 					COL_DESC_IS_PLANNED,
 					COL_DESC_HAS_MULTIPLE_OCCURRENCES, COL_DESC_IS_OPTIONAL });
 
-	public static final List DEFAULT_WPBS_COLUMNS = Arrays
+	public static final List<ColumnDescriptor> DEFAULT_WPBS_COLUMNS = Arrays
 			.asList(new ColumnDescriptor[] {
 					COL_DESC_PRESENTATION_NAME,
 					// COL_DESC_ID,
@@ -374,7 +373,7 @@
 					COL_DESC_DELIVERABLE, COL_DESC_TYPE, 
 					COL_DESC_IS_PLANNED, COL_DESC_HAS_MULTIPLE_OCCURRENCES, COL_DESC_IS_OPTIONAL });
 
-	public static final List DEFAULT_WBS_COLUMNS = Arrays
+	public static final List<ColumnDescriptor> DEFAULT_WBS_COLUMNS = Arrays
 			.asList(new ColumnDescriptor[] { COL_DESC_PRESENTATION_NAME,
 					COL_DESC_ID, 
 					//COL_DESC_PREFIX, 
@@ -385,16 +384,16 @@
 					 });
 
 	 
-	public static final List ALL_WBS_COLUMNS = new ArrayList(
+	public static final List<ColumnDescriptor> ALL_WBS_COLUMNS = new ArrayList<ColumnDescriptor>(
 			DEFAULT_WBS_COLUMNS);
 
-	public static final List ALL_TBS_COLUMNS = new ArrayList(
+	public static final List<ColumnDescriptor> ALL_TBS_COLUMNS = new ArrayList<ColumnDescriptor>(
 			DEFAULT_TBS_COLUMNS);
 
-	public static final List ALL_WPBS_COLUMNS = new ArrayList(
+	public static final List<ColumnDescriptor> ALL_WPBS_COLUMNS = new ArrayList<ColumnDescriptor>(
 			DEFAULT_WPBS_COLUMNS);
 
-	public static final Map idToColumnDescriptorMap = new HashMap();
+	public static final Map<String, ColumnDescriptor> idToColumnDescriptorMap = new HashMap<String, ColumnDescriptor>();
 	static {
 		ALL_WBS_COLUMNS.add(COL_DESC_PREFIX);
 		ALL_TBS_COLUMNS.add(COL_DESC_PREFIX);
@@ -3246,21 +3245,19 @@
 							Command mostRecentCommand = ((CommandStack) event
 									.getSource()).getMostRecentCommand();
 							if (mostRecentCommand != null) {
-								if (mostRecentCommand instanceof CreateChildCommand
-										&& currentViewer instanceof ProcessViewer) {
-									Object[] arr = mostRecentCommand
-											.getAffectedObjects().toArray();
-									if (arr.length == 1) {
-										ProcessViewer viewer = (ProcessViewer) currentViewer;
-										viewer.editElement(arr[0], 0);
-									}
-								} else {
 									if (!(TngUtil.unwrap(mostRecentCommand) instanceof SetCommand)) {
 										setSelectionToViewer(mostRecentCommand
 												.getAffectedObjects());
 									}
-
-								}
+									if (mostRecentCommand instanceof CreateChildCommand
+											&& currentViewer instanceof ProcessViewer) {
+										Object[] arr = mostRecentCommand
+												.getAffectedObjects().toArray();
+										if (arr.length == 1) {
+											ProcessViewer viewer = (ProcessViewer) currentViewer;
+											viewer.editElement(arr[0], 0);
+										}
+									}
 							}
 							// if (propertySheetPage != null) {
 							// propertySheetPage.refresh();
@@ -3381,31 +3378,12 @@
 	 * 
 	 */
 	public void setSelectionToViewer(Collection collection) {
-		// System.out.println(getClass().getName() + ".setSelectionToViewer:
-		// selection="+collection);
-		final Collection theSelection = collection;
-		// Make sure it's okay.
-		//
-		if (theSelection != null && !theSelection.isEmpty()) {
-			// I don't know if this should be run this deferred
-			// because we might have to give the editor a chance to process the
-			// viewer update events
-			// and hence to update the views first.
-			//
-			//
-			Runnable runnable = new Runnable() {
-				public void run() {
+		if (currentViewer != null && collection != null && !collection.isEmpty()) {
 					// Try to select the items in the current content viewer of
 					// the editor.
 					//
-					if (currentViewer != null) {
-						currentViewer.setSelection(new StructuredSelection(
-								theSelection.toArray()), true);
-
-					}
-				}
-			};
-			runnable.run();
+			currentViewer.setSelection(new StructuredSelection(
+					collection.toArray()), true);
 		}
 	}
 
