This commit was manufactured by cvs2svn to create tag 'N1020-20061228-1455'.
diff --git a/plugins/org.eclipse.epf.authoring.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.epf.authoring.ui/META-INF/MANIFEST.MF
index be1fc93..a0807a5 100755
--- a/plugins/org.eclipse.epf.authoring.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.epf.authoring.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.epf.authoring.ui; singleton:=true
-Bundle-Version: 1.0.1
+Bundle-Version: 1.0.2
 Bundle-Activator: org.eclipse.epf.authoring.ui.AuthoringUIPlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
diff --git a/plugins/org.eclipse.epf.authoring.ui/src/org/eclipse/epf/authoring/gef/edit/policies/DiagramLayoutEditPolicy.java b/plugins/org.eclipse.epf.authoring.ui/src/org/eclipse/epf/authoring/gef/edit/policies/DiagramLayoutEditPolicy.java
index fb9955f..c349dc8 100755
--- a/plugins/org.eclipse.epf.authoring.ui/src/org/eclipse/epf/authoring/gef/edit/policies/DiagramLayoutEditPolicy.java
+++ b/plugins/org.eclipse.epf.authoring.ui/src/org/eclipse/epf/authoring/gef/edit/policies/DiagramLayoutEditPolicy.java
@@ -16,6 +16,7 @@
 
 import org.eclipse.draw2d.AbsoluteBendpoint;
 import org.eclipse.draw2d.PositionConstants;
+import org.eclipse.draw2d.XYLayout;
 import org.eclipse.draw2d.geometry.Point;
 import org.eclipse.epf.authoring.gef.commands.ChangeBoundsCommand;
 import org.eclipse.epf.authoring.gef.commands.ChangeHeightCommand;
@@ -26,6 +27,7 @@
 import org.eclipse.epf.authoring.gef.edit.LinkEditPart;
 import org.eclipse.epf.authoring.gef.edit.RoleTaskCompositeEditPart;
 import org.eclipse.epf.authoring.gef.edit.WorkProductCompositeEditPart;
+import org.eclipse.epf.diagram.model.ActivityDetailDiagram;
 import org.eclipse.epf.diagram.model.Diagram;
 import org.eclipse.epf.diagram.model.Link;
 import org.eclipse.epf.diagram.model.Node;
@@ -37,12 +39,17 @@
 import org.eclipse.gef.commands.Command;
 import org.eclipse.gef.commands.CompoundCommand;
 import org.eclipse.gef.commands.UnexecutableCommand;
+import org.eclipse.gef.editpolicies.ConstrainedLayoutEditPolicy;
 import org.eclipse.gef.editpolicies.ResizableEditPolicy;
 import org.eclipse.gef.editpolicies.XYLayoutEditPolicy;
 import org.eclipse.gef.requests.ChangeBoundsRequest;
 import org.eclipse.gef.requests.CreateRequest;
 
 /**
+ * An EditPolicy for use with <code>Figures</code> in {@link XYLayout} of diagram. The constraint for
+ * XYLayout is a {@link org.eclipse.draw2d.geometry.Rectangle}. Implements the changeconstraint, delete,
+ * resize commands of {@link ConstrainedLayoutEditPolicy}
+ * 
  * @author Phong Nguyen Le
  * @since 1.0
  */
@@ -63,9 +70,12 @@
 		// special for ADD
 		EditPart parent = child.getParent();
 		if(parent instanceof ActivityDetailDiagramEditPart){
-			GraphicalDataHelper.createProperty(((Node)parent.getModel()).getGraphNode(),
+			String autolayout = GraphicalDataHelper.getAutoLayoutFlag((ActivityDetailDiagram)(Node)parent.getModel());
+			if(autolayout != null){
+				GraphicalDataHelper.createProperty(((Node)parent.getModel()).getGraphNode(),
 					GraphicalDataHelper.PROP_AUTO_LAYOUT, 
-					GraphicalDataHelper.PROP_AUTO_LAYOUT_VALUE_FALSE); 
+					GraphicalDataHelper.PROP_AUTO_LAYOUT_VALUE_FALSE);
+			}
 		}
 		
 		Node node = (Node) child.getModel();
diff --git a/plugins/org.eclipse.epf.authoring.ui/src/org/eclipse/epf/authoring/ui/actions/LibraryLockingOperationRunner.java b/plugins/org.eclipse.epf.authoring.ui/src/org/eclipse/epf/authoring/ui/actions/LibraryLockingOperationRunner.java
index 784818f..da5b6ae 100755
--- a/plugins/org.eclipse.epf.authoring.ui/src/org/eclipse/epf/authoring/ui/actions/LibraryLockingOperationRunner.java
+++ b/plugins/org.eclipse.epf.authoring.ui/src/org/eclipse/epf/authoring/ui/actions/LibraryLockingOperationRunner.java
@@ -12,20 +12,24 @@
 
 import java.lang.reflect.InvocationTargetException;
 
+import org.eclipse.core.resources.IWorkspace;
+import org.eclipse.core.resources.IWorkspaceRunnable;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.OperationCanceledException;
 import org.eclipse.epf.authoring.ui.AuthoringUIPlugin;
 import org.eclipse.epf.authoring.ui.AuthoringUIResources;
 import org.eclipse.epf.library.LibraryService;
 import org.eclipse.epf.persistence.util.LibrarySchedulingRule;
 import org.eclipse.jface.operation.IRunnableContext;
 import org.eclipse.jface.operation.IRunnableWithProgress;
-import org.eclipse.ui.actions.WorkspaceModifyDelegatingOperation;
 
 /**
  * Runs operation that locks the library for the duration of its execution
  * 
- * @author Phong Nguyen Le - Aug 14, 2006
+ * @author Phong Nguyen Le
  * @since  1.0
  */
 public class LibraryLockingOperationRunner implements IRunnableContext {
@@ -35,33 +39,50 @@
 	public LibraryLockingOperationRunner() {
 	}	
 	
-	private void doRun(final IRunnableWithProgress runnable, boolean workUnknown) throws InvocationTargetException,
+	private void doRun(final IRunnableWithProgress runnable, final boolean workUnknown) throws InvocationTargetException,
 			InterruptedException {
-		IRunnableWithProgress _runnable;
-		if(workUnknown) {
-			_runnable = new IRunnableWithProgress() {
-
-				public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
-					monitor.beginTask("", 2); //$NON-NLS-1$
-					monitor.worked(1);
-					try {
-						runnable.run(monitor);
-						monitor.worked(2);
-					}
-					finally {
-						monitor.done();
-					}
-					
-				}
-				
-			};
-		}
-		else {
-			_runnable = runnable;
-		}
-		WorkspaceModifyDelegatingOperation op = new WorkspaceModifyDelegatingOperation(_runnable, 
-				new LibrarySchedulingRule(LibraryService.getInstance().getCurrentMethodLibrary()));
-		op.run(getProgressMonitor());
+        final InvocationTargetException[] iteHolder = new InvocationTargetException[1];
+        try {
+            IWorkspaceRunnable workspaceRunnable = new IWorkspaceRunnable() {
+                public void run(IProgressMonitor pm) throws CoreException {
+                    try {
+                        if(workUnknown) {
+        					pm.beginTask("", 2); //$NON-NLS-1$
+        					pm.worked(1);
+        					try {
+        						runnable.run(pm);
+        						pm.worked(2);
+        					}
+        					finally {
+        						pm.done();
+        					}
+                        }
+                        else {
+                        	runnable.run(pm);
+                        }
+                    } catch (InvocationTargetException e) {
+                        // Pass it outside the workspace runnable
+                        iteHolder[0] = e;
+                    } catch (InterruptedException e) {
+                        // Re-throw as OperationCanceledException, which will be
+                        // caught and re-thrown as InterruptedException below.
+                        throw new OperationCanceledException(e.getMessage());
+                    }
+                    // CoreException and OperationCanceledException are propagated
+                }
+            };
+            ResourcesPlugin.getWorkspace().run(workspaceRunnable,
+            		new LibrarySchedulingRule(LibraryService.getInstance().getCurrentMethodLibrary()),
+            		IWorkspace.AVOID_UPDATE, getProgressMonitor());
+        } catch (CoreException e) {
+            throw new InvocationTargetException(e);
+        } catch (OperationCanceledException e) {
+            throw new InterruptedException(e.getMessage());
+        }
+        // Re-throw the InvocationTargetException, if any occurred
+        if (iteHolder[0] != null) {
+            throw iteHolder[0];
+        }
 	}
 
 	/* (non-Javadoc)
diff --git a/plugins/org.eclipse.epf.authoring.ui/src/org/eclipse/epf/authoring/ui/editors/ProcessEditor.java b/plugins/org.eclipse.epf.authoring.ui/src/org/eclipse/epf/authoring/ui/editors/ProcessEditor.java
index 0a03ae8..c6997d0 100755
--- a/plugins/org.eclipse.epf.authoring.ui/src/org/eclipse/epf/authoring/ui/editors/ProcessEditor.java
+++ b/plugins/org.eclipse.epf.authoring.ui/src/org/eclipse/epf/authoring/ui/editors/ProcessEditor.java
@@ -2617,10 +2617,29 @@
 						ColumnDescriptor[] cols = toColumnDescriptors(getPreferenceStore().getString(
 										event.getProperty()));
 						page.updateColumns(cols);
-						if (page == WBSTab) {
+						if (page == WBSTab || page == OBSTab) {
 							// update consolidated view as well
 							//
-							procTab.updateColumns(cols);
+							// get WBS columns
+							List list = toColumnDescriptorList(getPreferenceStore()
+									.getString(ApplicationPreferenceConstants.PREF_WBS_COLUMNS));
+
+							// get TBS columns 
+							ColumnDescriptor[] teamColumnDescriptors = toColumnDescriptors(getPreferenceStore()
+									.getString(ApplicationPreferenceConstants.PREF_TBS_COLUMNS));
+
+							// if TBS columns has TEAM column then add to consolidated view
+							for (int i = 0; i < teamColumnDescriptors.length; i++) {
+								ColumnDescriptor colDesc = teamColumnDescriptors[i];
+								if (colDesc == COL_DESC_TEAM) {
+									list.add(colDesc);
+									break;
+								}
+							}
+							
+							ColumnDescriptor[] columns = new ColumnDescriptor[list.size()];
+							list.toArray(columns);
+							procTab.updateColumns(columns);
 						}
 					}
 				}
@@ -2870,9 +2889,31 @@
 						.setFilter(ProcessAuthoringConfigurator.INSTANCE);
 			}
 			procTab.setAdapterFactory(adapterFactory);
-			columnDescriptors = toColumnDescriptors(store
+//			columnDescriptors = toColumnDescriptors(store
+//					.getString(ApplicationPreferenceConstants.PREF_WBS_COLUMNS));
+			
+			// get WBS columns
+			List list = toColumnDescriptorList(store
 					.getString(ApplicationPreferenceConstants.PREF_WBS_COLUMNS));
-			procTab.setColumnDescriptors(columnDescriptors);
+
+			// get TBS columns 
+			ColumnDescriptor[] teamColumnDescriptors = toColumnDescriptors(store
+					.getString(ApplicationPreferenceConstants.PREF_TBS_COLUMNS));
+
+			// if TBS columns has TEAM column then add to consolidated view
+			for (int i = 0; i < teamColumnDescriptors.length; i++) {
+				ColumnDescriptor colDesc = teamColumnDescriptors[i];
+				if (colDesc == COL_DESC_TEAM) {
+					list.add(colDesc);
+					break;
+				}
+			}
+
+			ColumnDescriptor[] columns = new ColumnDescriptor[list.size()];
+			list.toArray(columns);
+		
+			
+			procTab.setColumnDescriptors(columns);
 			id = addPage(procTab.createControl(getContainer()));
 			setPageText(id, procTab.getTitle());
 			procTab.setTabIndex(id);
diff --git a/plugins/org.eclipse.epf.authoring.ui/src/org/eclipse/epf/authoring/ui/views/LibraryView.java b/plugins/org.eclipse.epf.authoring.ui/src/org/eclipse/epf/authoring/ui/views/LibraryView.java
index fc02c8c..fd13b25 100755
--- a/plugins/org.eclipse.epf.authoring.ui/src/org/eclipse/epf/authoring/ui/views/LibraryView.java
+++ b/plugins/org.eclipse.epf.authoring.ui/src/org/eclipse/epf/authoring/ui/views/LibraryView.java
@@ -23,6 +23,7 @@
 import java.util.Iterator;
 import java.util.List;
 
+import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.IResourceChangeEvent;
 import org.eclipse.core.resources.IResourceChangeListener;
@@ -77,12 +78,14 @@
 import org.eclipse.epf.common.serviceability.MsgBox;
 import org.eclipse.epf.library.ILibraryManager;
 import org.eclipse.epf.library.LibraryService;
+import org.eclipse.epf.library.LibraryServiceException;
 import org.eclipse.epf.library.LibraryServiceUtil;
 import org.eclipse.epf.library.edit.TngAdapterFactory;
 import org.eclipse.epf.library.edit.ui.UserInteractionHelper;
 import org.eclipse.epf.library.edit.util.TngUtil;
 import org.eclipse.epf.library.edit.validation.IValidator;
 import org.eclipse.epf.library.edit.validation.IValidatorFactory;
+import org.eclipse.epf.library.project.MethodLibraryProjectNature;
 import org.eclipse.epf.library.services.SafeUpdateController;
 import org.eclipse.epf.library.ui.LibraryUIManager;
 import org.eclipse.epf.library.ui.dialogs.SwitchConfigDialog;
@@ -1438,6 +1441,25 @@
 	}
 
 	private void doRefresh(Shell shell) {
+		ArrayList movedResources = new ArrayList(RefreshJob.getInstance().getMovedResources());
+		if (!movedResources.isEmpty()) {
+			for (Iterator iter = movedResources.iterator();iter.hasNext();) {
+				Object o = iter.next();
+				if (o instanceof IProject) {
+					try {
+						if (((IProject)o).hasNature(MethodLibraryProjectNature.NATURE_ID)) {
+							// TODO: safe to assume XMI library?
+							XMILibraryUtil.openMethodLibrary(((IProject)o).getLocation().toString());
+							return;
+						}
+					} catch (LibraryServiceException e) {
+						AuthoringUIPlugin.getDefault().getLogger().logError(e);
+					} catch (CoreException e) { 
+						AuthoringUIPlugin.getDefault().getLogger().logError(e);
+					}
+				}
+			}
+		}
 		final boolean refreshViews = !RefreshJob.getInstance().getReloadedBeforeRefreshResources().isEmpty()
 			|| !RefreshJob.getInstance().getAddedResources().isEmpty();
 		ArrayList removedResources = new ArrayList(RefreshJob.getInstance()
diff --git a/plugins/org.eclipse.epf.base.feature/feature.xml b/plugins/org.eclipse.epf.base.feature/feature.xml
index 5b4a911..39e3e17 100755
--- a/plugins/org.eclipse.epf.base.feature/feature.xml
+++ b/plugins/org.eclipse.epf.base.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.epf.base"
       label="%featureName"
-      version="1.0.1"
+      version="1.0.2"
       provider-name="%providerName"
       image="rtFeatUpdate.gif">
 
@@ -26,14 +26,14 @@
          id="org.eclipse.epf.authoring.ui"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="1.0.2"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.epf.common"
          download-size="0"
          install-size="0"
-         version="0.0.0"/>
+         version="1.0.2"/>
 
    <plugin
          id="org.eclipse.epf.common.win32.win32.x86"
@@ -42,187 +42,181 @@
          arch="x86"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="1.0.2"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.epf.help.doc"
          download-size="0"
          install-size="0"
-         version="0.0.0"/>
+         version="1.0.2"/>
 
    <plugin
          id="org.eclipse.epf.library.ui"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="1.0.2"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.epf.richtext"
          download-size="0"
          install-size="0"
-         version="0.0.0"/>
+         version="1.0.2"/>
 
    <plugin
          id="org.eclipse.epf.search"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="1.0.2"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.epf.search.ui"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="1.0.2"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.epf.publishing.ui"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="1.0.2"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.epf.diagram"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="1.0.2"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.epf.library.edit"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="1.0.2"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.epf.library"
          download-size="0"
          install-size="0"
-         version="0.0.0"/>
+         version="1.0.2"/>
 
    <plugin
          id="org.eclipse.epf.library.xmi"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="1.0.2"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.epf.library.persistence"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="1.0.2"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.epf.publishing"
          download-size="0"
          install-size="0"
-         version="0.0.0"/>
+         version="1.0.2"/>
 
    <plugin
          id="org.eclipse.epf.uma"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="1.0.2"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.epf.uma.ecore"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="1.0.2"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.epf.uma.edit"
          download-size="0"
          install-size="0"
-         version="0.0.0"/>
+         version="1.0.2"/>
 
    <plugin
          id="org.eclipse.epf.export"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="1.0.2"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.epf.import"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="1.0.2"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.epf.rcp"
          download-size="0"
          install-size="0"
-         version="0.0.0"/>
+         version="1.0.2"/>
 
    <plugin
          id="org.eclipse.epf.base"
          download-size="0"
          install-size="0"
-         version="0.0.0"/>
+         version="1.0.2"/>
 
    <plugin
          id="org.eclipse.epf.export.msp"
          download-size="0"
          install-size="0"
-         version="0.0.0"/>
+         version="1.0.2"/>
 
    <plugin
          id="org.eclipse.epf.msproject"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="1.0.2"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.epf.dataexchange"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="1.0.2"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.epf.export.xml"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="1.0.2"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.epf.import.xml"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="1.0.2"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.epf.xml.uma"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="1.0.2"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.epf.publisher"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="1.0.2"
          unpack="false"/>
 
-   <plugin
-         id="org.eclipse.epf.platform"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"/>
-
 </feature>
diff --git a/plugins/org.eclipse.epf.base/about.properties b/plugins/org.eclipse.epf.base/about.properties
index 4a0c85f..1df7174 100755
--- a/plugins/org.eclipse.epf.base/about.properties
+++ b/plugins/org.eclipse.epf.base/about.properties
@@ -27,8 +27,8 @@
 
 featureText=EPF Base\n\
 \n\
-Version: 1.0.1.00 \n\
-Build Label: 20061015_1635\n\
+Version: 1.0.2.00 \n\
+Build Label: 20061228_1455\n\
 \n\
 (c) Copyright Eclipse contributors and others 2004, 2006.  All Rights Reserved.\n\
 \n\
diff --git a/plugins/org.eclipse.epf.base/plugin.xml b/plugins/org.eclipse.epf.base/plugin.xml
index dfa7ac9..57ca23f 100755
--- a/plugins/org.eclipse.epf.base/plugin.xml
+++ b/plugins/org.eclipse.epf.base/plugin.xml
@@ -3,7 +3,7 @@
 <plugin
    id="org.eclipse.epf.base"
    name="%featurePluginName"
-   version="1.0.1"
+   version="1.0.2"
    provider-name="%providerName">
 
 </plugin>
diff --git a/plugins/org.eclipse.epf.common.win32.win32.x86/META-INF/MANIFEST.MF b/plugins/org.eclipse.epf.common.win32.win32.x86/META-INF/MANIFEST.MF
index 8f4a7ff..d86b0ba 100755
--- a/plugins/org.eclipse.epf.common.win32.win32.x86/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.epf.common.win32.win32.x86/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.epf.common.win32.win32.x86
-Bundle-Version: 1.0.1
+Bundle-Version: 1.0.2
 Bundle-Localization: plugin
 Require-Bundle: org.eclipse.swt
 Bundle-Vendor: %providerName
diff --git a/plugins/org.eclipse.epf.common/META-INF/MANIFEST.MF b/plugins/org.eclipse.epf.common/META-INF/MANIFEST.MF
index b6f85a4..7188038 100755
--- a/plugins/org.eclipse.epf.common/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.epf.common/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.epf.common;singleton:=true
-Bundle-Version: 1.0.1
+Bundle-Version: 1.0.2
 Bundle-ClassPath: common.jar, lib/Tidy.jar
 Bundle-Activator: org.eclipse.epf.common.CommonPlugin
 Bundle-Vendor: %providerName
diff --git a/plugins/org.eclipse.epf.common/src/org/eclipse/epf/common/utils/FileUtil.java b/plugins/org.eclipse.epf.common/src/org/eclipse/epf/common/utils/FileUtil.java
index 0647fbf..603728f 100755
--- a/plugins/org.eclipse.epf.common/src/org/eclipse/epf/common/utils/FileUtil.java
+++ b/plugins/org.eclipse.epf.common/src/org/eclipse/epf/common/utils/FileUtil.java
@@ -759,6 +759,9 @@
 		FileOutputStream input = null;
 		FileLock lock = null;
 
+		if (!file.exists()) {
+			return false;
+		}
 		try {
 			input = new FileOutputStream(file);
 			FileChannel fileChannel = input.getChannel();
diff --git a/plugins/org.eclipse.epf.dataexchange/META-INF/MANIFEST.MF b/plugins/org.eclipse.epf.dataexchange/META-INF/MANIFEST.MF
index ee3f0dc..f45447e 100755
--- a/plugins/org.eclipse.epf.dataexchange/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.epf.dataexchange/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.epf.dataexchange
-Bundle-Version: 1.0.1
+Bundle-Version: 1.0.2
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
 Require-Bundle: org.eclipse.epf.library
diff --git a/plugins/org.eclipse.epf.diagram/META-INF/MANIFEST.MF b/plugins/org.eclipse.epf.diagram/META-INF/MANIFEST.MF
index 8c32d16..9e976fb 100755
--- a/plugins/org.eclipse.epf.diagram/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.epf.diagram/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.epf.diagram; singleton:=true
-Bundle-Version: 1.0.1
+Bundle-Version: 1.0.2
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
 Require-Bundle: org.eclipse.epf.library.edit,
diff --git a/plugins/org.eclipse.epf.diagram/src/org/eclipse/epf/diagram/model/impl/RoleTaskCompositeImpl.java b/plugins/org.eclipse.epf.diagram/src/org/eclipse/epf/diagram/model/impl/RoleTaskCompositeImpl.java
index c669a2c..c48549a 100755
--- a/plugins/org.eclipse.epf.diagram/src/org/eclipse/epf/diagram/model/impl/RoleTaskCompositeImpl.java
+++ b/plugins/org.eclipse.epf.diagram/src/org/eclipse/epf/diagram/model/impl/RoleTaskCompositeImpl.java
@@ -762,7 +762,24 @@
 						Collections.sort(taskNodes, comparator);
 					}
 			  }else{
-					for (Iterator iter = taskDescriptors.iterator(); iter.hasNext();) {
+					// Lame way of doing this, to fix a defect of 1.0 to 1.0.1 migration
+				  	List graphNodes = getUMADiagram().getContained();
+				  	List oldTaskDescriptors = new ArrayList();
+				  	for (Iterator iter = graphNodes.iterator(); iter.hasNext();) {
+				  		GraphNode element = (GraphNode) iter.next();
+				  		Object bridge = element.getSemanticModel();
+				  		if(bridge instanceof UMASemanticModelBridge){
+				  			Object taskObject = ((UMASemanticModelBridge)bridge).getElement();
+				  			List list = element.getList(UmaPackage.GRAPH_NODE__PROPERTY);
+							Property property = GraphicalDataHelper.getPropertyByKey(list,
+									GraphicalDataHelper.PROP_WORK_PRODUCT_COMPOSITE_TYPE);
+				  			if (taskDescriptors.contains(taskObject) && property == null) {
+				  				oldTaskDescriptors.add(taskObject);
+				  			}
+				  		}
+					}
+				  	
+					for (Iterator iter = oldTaskDescriptors.iterator(); iter.hasNext();) {
 						TaskDescriptor taskDescriptor = (TaskDescriptor) iter.next();
 						
 						// eliminate descriptor that is duplicate, suppressed or filtered out
diff --git a/plugins/org.eclipse.epf.diagram/src/org/eclipse/epf/diagram/model/impl/WorkProductCompositeImpl.java b/plugins/org.eclipse.epf.diagram/src/org/eclipse/epf/diagram/model/impl/WorkProductCompositeImpl.java
index 854b777..6ab65dd 100755
--- a/plugins/org.eclipse.epf.diagram/src/org/eclipse/epf/diagram/model/impl/WorkProductCompositeImpl.java
+++ b/plugins/org.eclipse.epf.diagram/src/org/eclipse/epf/diagram/model/impl/WorkProductCompositeImpl.java
@@ -413,7 +413,7 @@
 		// Set the Type information for workproduct composite.
 		if (type == TYPE_EDEFAULT) {
 			List list = graphNode.getList(UmaPackage.GRAPH_NODE__PROPERTY);
-			Property property = getPropertyByKey(list,
+			Property property = GraphicalDataHelper.getPropertyByKey(list,
 					GraphicalDataHelper.PROP_WORK_PRODUCT_COMPOSITE_TYPE);
 			if (property != null) {
 				property.setValue(property.getValue());
@@ -421,7 +421,7 @@
 			}
 		} else {
 			List list = graphNode.getList(UmaPackage.GRAPH_NODE__PROPERTY);
-			Property property = getPropertyByKey(list,
+			Property property = GraphicalDataHelper.getPropertyByKey(list,
 					GraphicalDataHelper.PROP_WORK_PRODUCT_COMPOSITE_TYPE);
 			if (property != null) {
 				property.setValue(new Integer(getType()).toString());
@@ -578,7 +578,7 @@
 							.getSemanticModel()).getElement()) {
 
 				List list = element.getList(UmaPackage.GRAPH_NODE__PROPERTY);
-				Property property = getPropertyByKey(list,
+				Property property = GraphicalDataHelper.getPropertyByKey(list,
 						GraphicalDataHelper.PROP_WORK_PRODUCT_COMPOSITE_TYPE);
 				if (property != null) {
 					String typeString = property.getValue();
@@ -617,25 +617,9 @@
 		return graphNode;
 	}
 
-	public Property getPropertyByKey(List list, String key) {
-		if (!list.isEmpty()) {
-			for (Iterator iror = list.iterator(); iror.hasNext();) {
-				Property property = (Property) iror.next();
-				if (property != null) {
-					if (property.getKey().equals(key)) {
-						return property;
-					} else {
-						return null;
-					}
-				}
-			}
-		}
-		return null;
-	}
-
 	public void setProperty(List list, String key, String value) {
 
-		Property property = getPropertyByKey(list, key);
+		Property property = GraphicalDataHelper.getPropertyByKey(list, key);
 		if (property != null) {
 			property.setValue(value);
 
diff --git a/plugins/org.eclipse.epf.diagram/src/org/eclipse/epf/diagram/model/util/GraphicalDataHelper.java b/plugins/org.eclipse.epf.diagram/src/org/eclipse/epf/diagram/model/util/GraphicalDataHelper.java
index 5d1c9d1..55f6567 100755
--- a/plugins/org.eclipse.epf.diagram/src/org/eclipse/epf/diagram/model/util/GraphicalDataHelper.java
+++ b/plugins/org.eclipse.epf.diagram/src/org/eclipse/epf/diagram/model/util/GraphicalDataHelper.java
@@ -1063,4 +1063,25 @@
 		}
 		return 10;
 	}
+
+	/**
+	 * @param list the list of {@link Property} objects
+	 * @param key
+	 * @return
+	 */
+	public static Property getPropertyByKey(List list, String key) {
+		if (!list.isEmpty()) {
+			for (Iterator iror = list.iterator(); iror.hasNext();) {
+				Property property = (Property) iror.next();
+				if (property != null) {
+					if (property.getKey().equals(key)) {
+						return property;
+					} else {
+						return null;
+					}
+				}
+			}
+		}
+		return null;
+	}
 }
diff --git a/plugins/org.eclipse.epf.export.msp/META-INF/MANIFEST.MF b/plugins/org.eclipse.epf.export.msp/META-INF/MANIFEST.MF
index 1c96e6c..f5b99d3 100755
--- a/plugins/org.eclipse.epf.export.msp/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.epf.export.msp/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.epf.export.msp; singleton:=true
-Bundle-Version: 1.0.1
+Bundle-Version: 1.0.2
 Bundle-Activator: org.eclipse.epf.export.msp.ExportMSPPlugin
 Bundle-Localization: plugin
 Require-Bundle: org.eclipse.core.runtime,
diff --git a/plugins/org.eclipse.epf.export.msp/src/org/eclipse/epf/export/msp/ExportMSPXMLService.java b/plugins/org.eclipse.epf.export.msp/src/org/eclipse/epf/export/msp/ExportMSPXMLService.java
index 5b5d306..22f95bb 100755
--- a/plugins/org.eclipse.epf.export.msp/src/org/eclipse/epf/export/msp/ExportMSPXMLService.java
+++ b/plugins/org.eclipse.epf.export.msp/src/org/eclipse/epf/export/msp/ExportMSPXMLService.java
@@ -24,6 +24,8 @@
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
+import java.util.Stack;
 
 import org.eclipse.core.runtime.Path;
 import org.eclipse.emf.common.util.EList;
@@ -42,6 +44,7 @@
 import org.eclipse.epf.library.edit.ui.UserInteractionHelper;
 import org.eclipse.epf.library.edit.util.ConfigurableComposedAdapterFactory;
 import org.eclipse.epf.library.edit.util.ProcessUtil;
+import org.eclipse.epf.library.edit.util.Suppression;
 import org.eclipse.epf.library.edit.util.TngUtil;
 import org.eclipse.epf.library.util.ResourceHelper;
 import org.eclipse.epf.msproject.Assignment;
@@ -60,6 +63,7 @@
 import org.eclipse.epf.uma.CapabilityPattern;
 import org.eclipse.epf.uma.DeliveryProcess;
 import org.eclipse.epf.uma.DescribableElement;
+import org.eclipse.epf.uma.Descriptor;
 import org.eclipse.epf.uma.MethodConfiguration;
 import org.eclipse.epf.uma.MethodElement;
 import org.eclipse.epf.uma.Milestone;
@@ -89,6 +93,8 @@
  * https://bugs.eclipse.org/bugs/show_bug.cgi?id=156959
  * https://bugs.eclipse.org/bugs/show_bug.cgi?id=157321
  * https://bugs.eclipse.org/bugs/show_bug.cgi?id=159230
+ * https://bugs.eclipse.org/bugs/show_bug.cgi?id=162336
+ * https://bugs.eclipse.org/bugs/show_bug.cgi?id=168801
  * 
  */
 public class ExportMSPXMLService {
@@ -101,12 +107,11 @@
 
 	private HashMap rolesToUidMap = new HashMap();
 
-	private HashMap wbsToUidMap = new HashMap();
-
-	private HashMap taskToGuidMap = new HashMap();
-
-	private HashMap predListMap = new HashMap();
-
+	private HashMap taskUidToWbsWapperPathMap = new HashMap();
+	private HashMap wbsWapperPathToLocalPredListMap = new HashMap();
+	
+	private HashMap wbsGuidToTaskUidMap = new HashMap();
+	
 	// The name of the content folder. This will be named after the context.
 	private String contentFolderName;
 
@@ -128,12 +133,33 @@
 
 	private MsprojectFactory projectFactory = MsprojectFactory.eINSTANCE;
 
+	// The process to be exported.
+	private Process process;
+	
+	ConfigurableComposedAdapterFactory wbsAdapterFactory;
+	
 	// The process configurator for filtering breakdown elements in a
 	// configuration.
 	private ProcessConfigurator breakdownElementFilter;
 
-	private IStructuredContentProvider contentProvider;
+	private IStructuredContentProvider wbsContentProvider;
 
+	// Map processes to suppression objects.
+	private Map suppressionMap = new HashMap();
+	
+	// The suppression object associated with the selected process to be
+	// exported.
+	private Suppression suppression;
+	
+	// The WBS element paths.
+	private Stack elementPaths = new Stack();
+	
+	private Object currentElement;
+	private String currentElementPath;
+	
+	public ExportMSPXMLService() {
+		super();
+	}
 	/**
 	 * Export a process to a Microsoft Project XML file.
 	 * 
@@ -310,10 +336,6 @@
 			// Sets the export options.
 			setExportOptions(exportOptions);
 
-			// Get the suppression object for the process. Suppressed
-			// breakdown elements will be exluded from the export.
-			// suppression = new Suppression(process);
-
 			// Generate the Microsoft Project XML file.
 			// populate the project's attributes
 			project.setName(process.getName());
@@ -369,8 +391,8 @@
 				((ConfigurableComposedAdapterFactory) adapterFactory)
 						.setFilter(new ProcessConfigurator(config, null));
 			}
-			IStructuredContentProvider contentProvider = new AdapterFactoryContentProvider(
-					adapterFactory);
+			IStructuredContentProvider contentProvider = new AdapterFactoryContentProvider(adapterFactory);
+			
 			List elements = process.getBreakdownElements();
 			if (elements.size() > 0) {
 				generateProjectResource(contentProvider,
@@ -514,23 +536,34 @@
 	 */
 	protected void generateProjectTasks(Process process,
 			MethodConfiguration config, Project project) throws Exception {
-		ComposedAdapterFactory adapterFactory = null;
+//		 Save the reference to the exported process.
+		this.process = process;
+		
+		wbsAdapterFactory = null;
 		try {
-			adapterFactory = TngAdapterFactory.INSTANCE
+			// Add the suppression object associated with the process to be
+			// exported
+			// to the suppression map.
+			suppression = new Suppression(process);
+			suppressionMap.put(process, suppression);
+
+			wbsAdapterFactory = (ConfigurableComposedAdapterFactory)TngAdapterFactory.INSTANCE
 					.createWBSComposedAdapterFactory();
-			if (adapterFactory instanceof ConfigurableComposedAdapterFactory) {
-				breakdownElementFilter = new ProcessConfigurator(config, null);
-				((ConfigurableComposedAdapterFactory) adapterFactory)
-						.setFilter(breakdownElementFilter);
-			}
-			contentProvider = new AdapterFactoryContentProvider(adapterFactory);
+			breakdownElementFilter = new ProcessConfigurator(config, null);
+			wbsAdapterFactory.setFilter(breakdownElementFilter);
+					
+			wbsContentProvider = new AdapterFactoryContentProvider(wbsAdapterFactory);
+			
+			currentElement = process;
+			if (debug) System.out.println("$$$ theCurrent element: " + currentElement);
+			
 			if (process instanceof CapabilityPattern) {
-				generateProjectTask(contentProvider,
+				generateProjectTask(wbsContentProvider,
 						(BreakdownElement) process, 1, project);
 			} else {
 				List breakdownElements = process.getBreakdownElements();
 				if (breakdownElements.size() > 0) {
-					generateProjectTask(contentProvider,
+					generateProjectTask(wbsContentProvider,
 							(BreakdownElement) process, 1, project);
 				}
 			}
@@ -538,8 +571,15 @@
 			e.printStackTrace();
 			throw e;
 		} finally {
-			if (adapterFactory != null) {
-				adapterFactory.dispose();
+			if (wbsAdapterFactory != null) {
+				wbsAdapterFactory.dispose();
+			}
+			if (suppressionMap != null) {
+				suppressionMap.clear();
+				suppressionMap = null;
+			}
+			if (wbsContentProvider != null) {
+				wbsContentProvider.dispose();
 			}
 		}
 	}
@@ -616,10 +656,14 @@
 		Task newTask = null;
 		if (!exportOnlyPlannedElements || exportOnlyPlannedElements
 				&& isPlannedTask) {
-			newTask = addTask((WorkBreakdownElement) breakdownElement,
+			boolean suppressed = isSuppressed(breakdownElement);
+			if (!suppressed) {
+				newTask = addTask((WorkBreakdownElement) breakdownElement,
 					taskOLevel, proj);
+			} 
 		}
 
+		// if export planned only wbs, then we need to do the role rollup calculation
 		if (exportOnlyPlannedElements && newTask != null
 				&& breakdownElement instanceof Activity
 				&& contentProvider != null && !isSubTasksPlanned) {
@@ -637,22 +681,88 @@
 			}
 		}
 
+		// export the next level wbs
 		if (contentProvider != null) {
-			Object[] elements = contentProvider.getElements(breakdownElement);
-			for (int i = 0; i < elements.length; i++) {
-				Object element = elements[i];
-				if (element instanceof BreakdownElementWrapperItemProvider) {
-					BreakdownElementWrapperItemProvider provider = (BreakdownElementWrapperItemProvider) element;
-					Object value = provider.getValue();
-					generateProjectTask(contentProvider,
-							(BreakdownElement) value, taskOLevel + 1, proj);
-				} else if (element instanceof WorkBreakdownElement) {
-					generateProjectTask(contentProvider,
-							(WorkBreakdownElement) element, taskOLevel + 1,
-							proj);
+			boolean suppressed = isSuppressed(breakdownElement);
+			if (!suppressed) {
+				elementPaths.push(breakdownElement.getGuid());
+				Object[] elements = contentProvider.getElements(breakdownElement);
+				for (int i = 0; i < elements.length; i++) {
+					Object element = elements[i];
+					
+					// get the current wbs wrapper
+					currentElement = element;
+					if (debug) System.out.println("$$$ theCurrent element: " + element);
+					
+					// get the hierarcal guid paths to the element
+					String[] paths = new String[elementPaths.size()];
+					elementPaths.toArray(paths);
+					StringBuffer pathStr = new StringBuffer();
+					for (int j = 0; j < paths.length; j++) {
+						pathStr.append(paths[j]+ ".");
+					}
+					if (currentElement instanceof BreakdownElementWrapperItemProvider) {
+						Object wrapped = TngUtil.unwrap(element);
+						pathStr.append(((BreakdownElement)wrapped).getGuid());
+					} else {
+						pathStr.append(((BreakdownElement)currentElement).getGuid());
+					}
+					currentElementPath = pathStr.toString();
+					if (debug) System.out.println("                  path: " + currentElementPath);
+					
+					if (element instanceof BreakdownElementWrapperItemProvider) {
+						Object wrapped = TngUtil.unwrap(element);
+						generateProjectTask(contentProvider,
+								(BreakdownElement) wrapped, taskOLevel + 1, proj);
+					} else if (element instanceof WorkBreakdownElement) {
+						generateProjectTask(contentProvider,
+								(WorkBreakdownElement) element, taskOLevel + 1,
+								proj);
+					} 
 				}
+				generateLinks(process, proj);
+				elementPaths.pop();
 			}
 		}
+		
+	}
+
+	/**
+	 * Checks whether the given object is a suppressed work breakdown element in
+	 * its owning process.
+	 * 
+	 * @param object
+	 *            an object
+	 * @return <ocde>true</code> if the object is a suppressed work breakdown
+	 *         element in its owning process.
+	 */
+	protected boolean isSuppressed(Object object) {
+		if (object != null) {
+			if (object instanceof Descriptor) {
+				if (debug) System.out.println("Descriptor = " + ((Descriptor)object).getName());
+			}
+			Process owningProcess = TngUtil.getOwningProcess(object);
+			Suppression owningProcessSuppression = (Suppression) suppressionMap
+					.get(owningProcess);
+			if (owningProcessSuppression == null) {
+				owningProcessSuppression = new Suppression(owningProcess);
+				suppressionMap.put(owningProcess, owningProcessSuppression);
+			}
+			if (owningProcessSuppression.isSuppressed(object)) {
+				return true;
+			}
+			if (owningProcess != process
+					&& object instanceof WorkBreakdownElement) {
+				elementPaths.push(((WorkBreakdownElement) object).getGuid());
+				String[] paths = new String[elementPaths.size()];
+				elementPaths.toArray(paths);
+				Object wrapper = suppression.getObjectByPath(paths,
+						wbsAdapterFactory);
+				elementPaths.pop();
+				return suppression.isSuppressed(wrapper);
+			}
+		}
+		return false;
 	}
 
 	/**
@@ -728,14 +838,14 @@
 		// aTask.setSummary(false);
 		// aTask.setConstraintType(new BigInteger("2"));
 
-		// Store the task's predecessors.
+		// Store the task's local predecessors.
 		storeTaskPredecessors(element);
-
+		
 		// Add the task to the Microsoft Project object.
 		project.getTasks().getTask().add(task);
 
-		wbsToUidMap.put(element.getGuid(), BigInteger.valueOf(task_uid));
-		taskToGuidMap.put(BigInteger.valueOf(task_uid), element.getGuid());
+		taskUidToWbsWapperPathMap.put(BigInteger.valueOf(task_uid), currentElementPath);
+		wbsGuidToTaskUidMap.put(element.getGuid(), BigInteger.valueOf(task_uid));
 
 		task_uid++;
 
@@ -880,8 +990,9 @@
 		if (element == null) {
 			return;
 		}
+		
 		List predecessors = element.getLinkToPredecessor();
-		ArrayList predList = new ArrayList();
+		List predList = new ArrayList();
 		if (predecessors != null && predecessors.size() > 0) {
 			for (Iterator i = predecessors.iterator(); i.hasNext();) {
 				WorkOrder workOrder = (WorkOrder) i.next();
@@ -894,10 +1005,11 @@
 			}
 		}
 		if (debug) {
-			System.out.println("$$$ predlist for " + element.getName() + " = "
+			System.out.println("   local predlist for " + element.getName() + " = "
 					+ predList.toString());
 		}
-		predListMap.put(element.getGuid(), predList);
+		
+		wbsWapperPathToLocalPredListMap.put(currentElementPath, predList);
 	}
 
 	protected void generateLinks(Process process, Project project)
@@ -909,19 +1021,30 @@
 			// skip the MS project hidden task with uid = 0
 			if (taskUid.intValue() == 0)
 				continue;
-			String wbsGuid = (String) taskToGuidMap.get(taskUid);
-			ArrayList predList = (ArrayList) predListMap.get(wbsGuid);
+	
+			String wbsPathStr = (String) taskUidToWbsWapperPathMap.get(taskUid);
+			
+			List predList = (ArrayList) wbsWapperPathToLocalPredListMap.get(wbsPathStr);
 			if (predList != null) {
+				List removeList = new ArrayList();
 				for (Iterator iterator = predList.iterator(); iterator
 						.hasNext();) {
 					String predGuid = (String) iterator.next();
-					BigInteger predTaskUid = (BigInteger) wbsToUidMap
+					BigInteger predTaskUid = (BigInteger) wbsGuidToTaskUidMap
 							.get(predGuid);
 
 					if (predTaskUid == null
 							|| predTaskUid.intValue() == taskUid.intValue()) {
 						continue;
 					}
+					
+					if (debug) {
+						System.out.println("$$$ taskUid = " + taskUid + ", wbsPathStr = " + wbsPathStr);
+						System.out.println("    localPredList: " + predList);
+						System.out.println("    found pred guid: " + predGuid);
+					}
+					
+					removeList.add(predGuid);
 
 					PredecessorLink preLink = projectFactory
 							.createPredecessorLink();
@@ -932,6 +1055,7 @@
 					preLink.setLinkLag(new BigInteger("0")); //$NON-NLS-1$
 					preLink.setLagFormat(new BigInteger("7")); //$NON-NLS-1$
 				}
+				predList.removeAll(removeList);
 			}
 		}
 	}
diff --git a/plugins/org.eclipse.epf.export.xml/META-INF/MANIFEST.MF b/plugins/org.eclipse.epf.export.xml/META-INF/MANIFEST.MF
index eb7f726..df3e1ae 100755
--- a/plugins/org.eclipse.epf.export.xml/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.epf.export.xml/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.epf.export.xml;singleton:=true
-Bundle-Version: 1.0.1
+Bundle-Version: 1.0.2
 Bundle-Activator: org.eclipse.epf.export.xml.ExportXMLPlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
diff --git a/plugins/org.eclipse.epf.export/META-INF/MANIFEST.MF b/plugins/org.eclipse.epf.export/META-INF/MANIFEST.MF
index 8d14bde..c52192c 100755
--- a/plugins/org.eclipse.epf.export/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.epf.export/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.epf.export; singleton:=true
-Bundle-Version: 1.0.1
+Bundle-Version: 1.0.2
 Bundle-Activator: org.eclipse.epf.export.ExportPlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
diff --git a/plugins/org.eclipse.epf.export/src/org/eclipse/epf/export/services/ConfigurationExportService.java b/plugins/org.eclipse.epf.export/src/org/eclipse/epf/export/services/ConfigurationExportService.java
index 3a7d4a9..e2fba00 100755
--- a/plugins/org.eclipse.epf.export/src/org/eclipse/epf/export/services/ConfigurationExportService.java
+++ b/plugins/org.eclipse.epf.export/src/org/eclipse/epf/export/services/ConfigurationExportService.java
@@ -25,6 +25,7 @@
 import org.eclipse.epf.library.LibraryServiceUtil;
 import org.eclipse.epf.library.configuration.ConfigurationClosure;
 import org.eclipse.epf.library.layout.LayoutResources;
+import org.eclipse.epf.library.project.MethodLibraryProject;
 import org.eclipse.epf.library.util.LibraryUtil;
 import org.eclipse.epf.persistence.refresh.RefreshJob;
 import org.eclipse.epf.uma.MethodConfiguration;
@@ -167,6 +168,7 @@
 			if ( libMgr != null ) {
 				LibraryService.getInstance().removeLibraryManager(libMgr);
 				libMgr.closeMethodLibrary();
+				MethodLibraryProject.closeProject(filePath, null);	//162123
 				libMgr.dispose();
 			}
 			
@@ -199,6 +201,7 @@
 			if ( libMgr != null ) {
 				LibraryService.getInstance().removeLibraryManager(libMgr);
 				libMgr.closeMethodLibrary();
+				MethodLibraryProject.closeProject(filePath, null);	//162123
 				libMgr.dispose();
 			}
 			return;
@@ -219,6 +222,7 @@
 		if ( libMgr != null ) {
 			LibraryService.getInstance().removeLibraryManager(libMgr);
 			libMgr.closeMethodLibrary();
+			MethodLibraryProject.closeProject(filePath, null);	//162123
 			libMgr.dispose();
 		}
 	}
diff --git a/plugins/org.eclipse.epf.help.doc/plugin.xml b/plugins/org.eclipse.epf.help.doc/plugin.xml
index 7287ca0..d91e3c2 100755
--- a/plugins/org.eclipse.epf.help.doc/plugin.xml
+++ b/plugins/org.eclipse.epf.help.doc/plugin.xml
@@ -12,7 +12,7 @@
 <plugin
    id="org.eclipse.epf.help.doc"
    name="%pluginName"
-   version="1.0.1"
+   version="1.0.2"
    provider-name="%providerName"
    class="org.eclipse.epf.help.doc.DocPlugin">
 
diff --git a/plugins/org.eclipse.epf.import.xml/META-INF/MANIFEST.MF b/plugins/org.eclipse.epf.import.xml/META-INF/MANIFEST.MF
index 662f5f1..822e68d 100755
--- a/plugins/org.eclipse.epf.import.xml/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.epf.import.xml/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.epf.import.xml;singleton:=true
-Bundle-Version: 1.0.1
+Bundle-Version: 1.0.2
 Bundle-Activator: org.eclipse.epf.importing.xml.ImportXMLPlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
diff --git a/plugins/org.eclipse.epf.import/META-INF/MANIFEST.MF b/plugins/org.eclipse.epf.import/META-INF/MANIFEST.MF
index 97814e7..fc1f392 100755
--- a/plugins/org.eclipse.epf.import/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.epf.import/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.epf.import; singleton:=true
-Bundle-Version: 1.0.1
+Bundle-Version: 1.0.2
 Bundle-Activator: org.eclipse.epf.importing.ImportPlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
diff --git a/plugins/org.eclipse.epf.import/src/org/eclipse/epf/importing/services/ConfigurationImportService.java b/plugins/org.eclipse.epf.import/src/org/eclipse/epf/importing/services/ConfigurationImportService.java
index 53fb753..406e64e 100755
--- a/plugins/org.eclipse.epf.import/src/org/eclipse/epf/importing/services/ConfigurationImportService.java
+++ b/plugins/org.eclipse.epf.import/src/org/eclipse/epf/importing/services/ConfigurationImportService.java
@@ -69,9 +69,12 @@
 				path += File.separator + LibraryDocument.libraryFile;
 			}
 			File importingLibPath = new File(path);
+			
+			boolean isLibraryFile = true;		
 			if (!importingLibPath.exists()) {
 				importingLibPath = new File(importingLibPath.getParentFile(),
 						LibraryDocument.exportFile);
+				isLibraryFile = false;
 			}
 
 			if (!importingLibPath.exists()) {
@@ -101,6 +104,13 @@
 				data.specs = specsMgr.getConfigSpecs(importingLibDoc);
 
 			} else {
+				if (!isLibraryFile) {
+					data
+					.getErrorInfo()
+					.addError(
+							NLS.bind(ImportResources.ConfigurationImportService_MSG1, importingLibPath.getParent())); 
+					return;
+				}
 				data.specs = null;
 
 				// Open the library and compare the difference.
diff --git a/plugins/org.eclipse.epf.import/src/org/eclipse/epf/importing/services/LibraryImportManager.java b/plugins/org.eclipse.epf.import/src/org/eclipse/epf/importing/services/LibraryImportManager.java
index 71d565e..6eeecd2 100755
--- a/plugins/org.eclipse.epf.import/src/org/eclipse/epf/importing/services/LibraryImportManager.java
+++ b/plugins/org.eclipse.epf.import/src/org/eclipse/epf/importing/services/LibraryImportManager.java
@@ -291,14 +291,7 @@
 		// clear resources for deleted elements
 		deleteResoruces();
 	
-		final List modifiedFiles = getModifiedResources(baseLibrary);
-		modifiedFiles.addAll(resScanner.getFilesTobeReplaced());
-
-		SafeUpdateController.syncExec(new Runnable() {
-			public void run() {
-				fileCheckedOutStatus = FileModifyChecker.checkModify(modifiedFiles);
-			}
-		});
+		checkModifiedFiles();
 				
 		if ( fileCheckedOutStatus.isOK() ) {
 		 
@@ -871,17 +864,26 @@
 			if (newObj instanceof MethodPlugin) {
 				MethodPlugin plugin = (MethodPlugin)newObj;				
 				
+				checkModifiedFiles();				
+				error = ! fileCheckedOutStatus.isOK();
+				
 				// don't intitialize the storage since this will recreate the global packages
 				// and such causing two set of global packages
 				// 145850 - Import Configuration: CP/DPs did not shown in authering
 				// ModelStorage.initialize(plugin);
 				// NO, since the global packages are already created
-				((MethodLibrary)owner).getMethodPlugins().add(plugin);
-				LibraryUtil.saveLibrary((MethodLibrary)owner, false, false);
+				if (! error) {
+					((MethodLibrary)owner).getMethodPlugins().add(plugin);
+					LibraryUtil.saveLibrary((MethodLibrary)owner, false, false);
+				}
 								
 			} else if (newObj instanceof MethodConfiguration ) {
-				((MethodLibrary)owner).getPredefinedConfigurations().add(newObj);
-				LibraryUtil.saveLibrary((MethodLibrary)owner, false, false);
+				checkModifiedFiles();				
+				error = ! fileCheckedOutStatus.isOK();
+				if (! error) {
+					((MethodLibrary)owner).getPredefinedConfigurations().add(newObj);
+					LibraryUtil.saveLibrary((MethodLibrary)owner, false, false);
+				}
 			} else {
 				error = true;			
 			}
@@ -1481,5 +1483,16 @@
 		entryVal[1] = newName;
 		renameElementMap.put(element.getGuid(), entryVal);
 	}
+	
+	private void checkModifiedFiles() {
+		final List modifiedFiles = getModifiedResources(baseLibrary);
+		modifiedFiles.addAll(resScanner.getFilesTobeReplaced());
+
+		SafeUpdateController.syncExec(new Runnable() {
+			public void run() {
+				fileCheckedOutStatus = FileModifyChecker.checkModify(modifiedFiles);
+			}
+		});
+	}
 
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.epf.library.edit/META-INF/MANIFEST.MF b/plugins/org.eclipse.epf.library.edit/META-INF/MANIFEST.MF
index a783506..8c6c741 100755
--- a/plugins/org.eclipse.epf.library.edit/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.epf.library.edit/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.epf.library.edit; singleton:=true
-Bundle-Version: 1.0.1
+Bundle-Version: 1.0.2
 Bundle-ClassPath: libedit.jar
 Bundle-Activator: org.eclipse.epf.library.edit.LibraryEditPlugin
 Bundle-Vendor: %providerName
diff --git a/plugins/org.eclipse.epf.library.edit/src/org/eclipse/epf/library/edit/IConfigurator.java b/plugins/org.eclipse.epf.library.edit/src/org/eclipse/epf/library/edit/IConfigurator.java
index 6ed937f..ad26c94 100755
--- a/plugins/org.eclipse.epf.library.edit/src/org/eclipse/epf/library/edit/IConfigurator.java
+++ b/plugins/org.eclipse.epf.library.edit/src/org/eclipse/epf/library/edit/IConfigurator.java
@@ -96,4 +96,19 @@
 	 */
 	public IFilter getUncategorizedToolMentorFilter();
 	
+	/**
+	 * get filter for disciplines and displine groupings
+	 * 
+	 * @return IFilter
+	 */
+	public IFilter getDisciplinesFilter();
+	
+	/**
+	 * get filter for rolesets and roleset groupings
+	 * 
+	 * @return IFilter
+	 */
+	public IFilter getRoleSetsFilter();
+
+
 }
diff --git a/plugins/org.eclipse.epf.library.edit/src/org/eclipse/epf/library/edit/configuration/MethodConfigurationItemProvider.java b/plugins/org.eclipse.epf.library.edit/src/org/eclipse/epf/library/edit/configuration/MethodConfigurationItemProvider.java
index 5432212..0ad3902 100755
--- a/plugins/org.eclipse.epf.library.edit/src/org/eclipse/epf/library/edit/configuration/MethodConfigurationItemProvider.java
+++ b/plugins/org.eclipse.epf.library.edit/src/org/eclipse/epf/library/edit/configuration/MethodConfigurationItemProvider.java
@@ -50,6 +50,7 @@
  * @author Phong Nguyen Le
  * @author Shilpa Toraskar
  * @author Kelvin Low
+ * @author Jinhua Xi
  * @since 1.0
  */
 public class MethodConfigurationItemProvider extends
@@ -61,7 +62,7 @@
 	// changed to protected, extended class can play with children variable.
 	protected ArrayList children;
 
-	private static final IFilter disciplinesFilter = new IFilter() {
+	private IFilter disciplinesFilter = new IFilter() {
 
 		public boolean accept(Object obj) {
 			ContentCategory element = (ContentCategory) obj;
@@ -103,7 +104,7 @@
 
 	};
 
-	private static final IFilter roleSetsFilter = new IFilter() {
+	private IFilter roleSetsFilter = new IFilter() {
 
 		public boolean accept(Object obj) {
 			// Browsing: With categories, replace generalization
@@ -405,6 +406,12 @@
 				wpTypeUncategorizedWorkProductFilter = configurator.getWpTypeUncategorizedWorkProductFilter();
 				uncategorizedRoleFilter = configurator.getUncategorizedRoleFilter();
 				uncategorizedToolMentorFilter = configurator.getUncategorizedToolMentorFilter();
+				
+				// [Bug 162603] New: Replacing disciplines do appear inside their replaced elements discipline groupings as well as outside of the discipline grouping
+				// need to customize the filters for disciplines and rolesets
+				disciplinesFilter = configurator.getDisciplinesFilter();
+				roleSetsFilter = configurator.getRoleSetsFilter();
+				
 			}
 		}
 		this.filter = filter;
diff --git a/plugins/org.eclipse.epf.library.edit/src/org/eclipse/epf/library/edit/process/command/CreateProcessComponentCommand.java b/plugins/org.eclipse.epf.library.edit/src/org/eclipse/epf/library/edit/process/command/CreateProcessComponentCommand.java
index 87d391a..431e773 100755
--- a/plugins/org.eclipse.epf.library.edit/src/org/eclipse/epf/library/edit/process/command/CreateProcessComponentCommand.java
+++ b/plugins/org.eclipse.epf.library.edit/src/org/eclipse/epf/library/edit/process/command/CreateProcessComponentCommand.java
@@ -13,6 +13,8 @@
 import java.text.MessageFormat;
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
@@ -20,7 +22,6 @@
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.emf.common.command.Command;
-import org.eclipse.emf.common.util.WrappedException;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.EStructuralFeature;
 import org.eclipse.emf.ecore.resource.Resource;
@@ -39,6 +40,7 @@
 import org.eclipse.epf.uma.DeliveryProcess;
 import org.eclipse.epf.uma.Element;
 import org.eclipse.epf.uma.MethodConfiguration;
+import org.eclipse.epf.uma.MethodElement;
 import org.eclipse.epf.uma.MethodLibrary;
 import org.eclipse.epf.uma.MethodPackage;
 import org.eclipse.epf.uma.MethodPlugin;
@@ -57,12 +59,12 @@
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Shell;
 
-
 /**
  * Executes the Create Process Component command.
  * 
  * @author Phong Nguyen Le
  * @author Kelvin Low
+ * @author Shilpa Toraskar
  * @since 1.0
  */
 public class CreateProcessComponentCommand extends CreateChildCommand {
@@ -77,6 +79,15 @@
 		ECLASSES.add(UmaPackage.eINSTANCE.getMethodPackage());
 	}
 
+	public class CompareByName implements Comparator {
+
+		public int compare(Object obj1, Object obj2) {
+			String name1 = ((MethodElement) obj1).getName();
+			String name2 = ((MethodElement) obj2).getName();
+			return name1.compareToIgnoreCase(name2);
+		}
+	}
+
 	/**
 	 * Creates a new instance.
 	 */
@@ -92,9 +103,9 @@
 
 	public void execute() {
 		MethodLibrary lib = UmaUtil.getMethodLibrary(owner);
-		
+
 		Shell shell = MsgBox.getDefaultShell();
-		
+
 		// The owner must be updatable.
 		//
 		status = UserInteractionHelper.checkModify(owner, shell);
@@ -127,10 +138,13 @@
 			procClasses.add(DeliveryProcess.class);
 			procClasses.add(CapabilityPattern.class);
 		}
-		MethodPlugin plugin = UmaUtil.getMethodPlugin((Element) owner);		
+		MethodPlugin plugin = UmaUtil.getMethodPlugin((Element) owner);
 		List baseProcList = TngUtil.getAvailableBaseProcesses(plugin,
 				procClasses);
 
+		// sort by name
+		Collections.sort(methodConfigs, new CompareByName());
+
 		MethodConfiguration[] procCtxs = new MethodConfiguration[methodConfigs
 				.size()];
 		methodConfigs.toArray(procCtxs);
@@ -154,12 +168,9 @@
 			}
 
 			if (procComp.getProcess().getDefaultContext() == null) {
-				LibraryEditPlugin
-						.getDefault()
-						.getMsgDialog()
-						.displayError(
-								LibraryEditResources.createProcess_text, //$NON-NLS-1$
-								LibraryEditResources.noDefaultConfigError_msg); //$NON-NLS-1$
+				LibraryEditPlugin.getDefault().getMsgDialog().displayError(
+						LibraryEditResources.createProcess_text, //$NON-NLS-1$
+						LibraryEditResources.noDefaultConfigError_msg); //$NON-NLS-1$
 			} else {
 				String msg = IValidatorFactory.INSTANCE.createNameValidator(
 						owner, procComp).isValid(procComp.getName());
@@ -167,21 +178,21 @@
 					process = procComp.getProcess();
 					break;
 				} else {
-					LibraryEditPlugin
-							.getDefault()
-							.getMsgDialog()
-							.displayError(
-									LibraryEditResources.createProcess_text, //$NON-NLS-1$
-									msg);
+					LibraryEditPlugin.getDefault().getMsgDialog().displayError(
+							LibraryEditResources.createProcess_text, //$NON-NLS-1$
+							msg);
 				}
 			}
 		}
 
 		if (canExecute) {
-			// create process component need to update the configuration that has been selected as
-			// default context of its process. Check if the configuration file is updatable
+			// create process component need to update the configuration that
+			// has been selected as
+			// default context of its process. Check if the configuration file
+			// is updatable
 			//
-			status = UserInteractionHelper.checkModify(procComp.getProcess().getDefaultContext(), shell);
+			status = UserInteractionHelper.checkModify(procComp.getProcess()
+					.getDefaultContext(), shell);
 			if (!status.isOK()) {
 				return;
 			}
@@ -198,9 +209,11 @@
 			}
 
 			final MethodConfiguration procCtx = process.getDefaultContext();
-			
-			// need to add the parent packages and plugin into the configuration as well
-			// New process in new plug-in not automatically visible in configuration view
+
+			// need to add the parent packages and plugin into the configuration
+			// as well
+			// New process in new plug-in not automatically visible in
+			// configuration view
 			List pkgs = procCtx.getMethodPackageSelection();
 			for (EObject obj = procComp; obj != null; obj = obj.eContainer()) {
 				if (obj instanceof MethodPackage) {
@@ -208,7 +221,7 @@
 				}
 			}
 			procCtx.getMethodPluginSelection().add(plugin);
-			
+
 			process.getValidContext().add(procCtx);
 			process.setPresentation(ContentDescriptionFactory
 					.createContentDescription(process));
@@ -241,17 +254,24 @@
 								LibraryEditPlugin.INSTANCE.log(ex);
 								LibraryEditPlugin.INSTANCE.log(e);
 							}
-//							LibraryEditPlugin
-//									.getDefault()
-//									.getMsgDialog()
-//									.displayError(
-//											LibraryEditResources.createProcess_text, //$NON-NLS-1$
-//											LibraryEditResources.createProcessError_msg, //$NON-NLS-1$
-//											NLS.bind(LibraryEditResources.saveProcessError_reason, procComp.getName()), 
-//											e);
-							
+							// LibraryEditPlugin
+							// .getDefault()
+							// .getMsgDialog()
+							// .displayError(
+							// LibraryEditResources.createProcess_text,
+							// //$NON-NLS-1$
+							// LibraryEditResources.createProcessError_msg,
+							// //$NON-NLS-1$
+							// NLS.bind(LibraryEditResources.saveProcessError_reason,
+							// procComp.getName()),
+							// e);
+
 							status = Status.CANCEL_STATUS;
-							throw new MessageException(NLS.bind(LibraryEditResources.saveProcessError_reason, procComp.getName()), e);
+							throw new MessageException(
+									NLS
+											.bind(
+													LibraryEditResources.saveProcessError_reason,
+													procComp.getName()), e);
 						}
 					}
 				}
@@ -262,7 +282,8 @@
 							runnable,
 							MessageFormat
 									.format(
-											LibraryEditResources.creatingProcessComponentTask_name, new Object[] { procComp.getName() })); //$NON-NLS-1$
+											LibraryEditResources.creatingProcessComponentTask_name,
+											new Object[] { procComp.getName() })); //$NON-NLS-1$
 		}
 	}
 
diff --git a/plugins/org.eclipse.epf.library.edit/src/org/eclipse/epf/library/edit/process/consolidated/ActivityItemProvider.java b/plugins/org.eclipse.epf.library.edit/src/org/eclipse/epf/library/edit/process/consolidated/ActivityItemProvider.java
index a062d12..94a904b 100755
--- a/plugins/org.eclipse.epf.library.edit/src/org/eclipse/epf/library/edit/process/consolidated/ActivityItemProvider.java
+++ b/plugins/org.eclipse.epf.library.edit/src/org/eclipse/epf/library/edit/process/consolidated/ActivityItemProvider.java
@@ -19,6 +19,7 @@
 import org.eclipse.emf.common.notify.AdapterFactory;
 import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
 import org.eclipse.epf.library.edit.process.BSActivityItemProvider;
+import org.eclipse.epf.library.edit.util.Comparators;
 import org.eclipse.epf.library.edit.util.ExposedAdapterFactory;
 import org.eclipse.epf.library.edit.util.ProcessUtil;
 import org.eclipse.epf.library.edit.util.TngUtil;
diff --git a/plugins/org.eclipse.epf.library.edit/src/org/eclipse/epf/library/edit/process/consolidated/RoleDescriptorItemProvider.java b/plugins/org.eclipse.epf.library.edit/src/org/eclipse/epf/library/edit/process/consolidated/RoleDescriptorItemProvider.java
index 6605f1c..5a48955 100755
--- a/plugins/org.eclipse.epf.library.edit/src/org/eclipse/epf/library/edit/process/consolidated/RoleDescriptorItemProvider.java
+++ b/plugins/org.eclipse.epf.library.edit/src/org/eclipse/epf/library/edit/process/consolidated/RoleDescriptorItemProvider.java
@@ -14,6 +14,7 @@
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Iterator;
+import java.util.List;
 
 import org.eclipse.emf.common.notify.AdapterFactory;
 import org.eclipse.emf.common.notify.Notification;
@@ -27,6 +28,7 @@
 import org.eclipse.epf.library.edit.process.BreakdownElementWrapperItemProvider;
 import org.eclipse.epf.library.edit.process.IBSItemProvider;
 import org.eclipse.epf.library.edit.process.IBreakdownElementWrapperItemProviderFactory;
+import org.eclipse.epf.library.edit.util.Comparators;
 import org.eclipse.epf.library.edit.util.ProcessUtil;
 import org.eclipse.epf.library.edit.util.TngUtil;
 import org.eclipse.epf.uma.Process;
@@ -174,7 +176,7 @@
 
 	public Collection getChildren(Object obj) {
 		RoleDescriptor roleDesc = (RoleDescriptor) obj;
-		Collection newChildren;
+		List newChildren;
 	
 		// If roles has any of taskdescriptor linked then don't show any
 		// children otherwise show it's linked workproduct descriptor
@@ -200,6 +202,10 @@
 				}
 			}
 		}
+		
+		// sort the children
+		Collections.sort(newChildren, Comparators.PRESENTATION_NAME_COMPARATOR);
+		
 		updateCachedChildren(newChildren);
 		return newChildren;
 	}
diff --git a/plugins/org.eclipse.epf.library.edit/src/org/eclipse/epf/library/edit/process/consolidated/TaskDescriptorItemProvider.java b/plugins/org.eclipse.epf.library.edit/src/org/eclipse/epf/library/edit/process/consolidated/TaskDescriptorItemProvider.java
index 6fd18a2..4c1b618 100755
--- a/plugins/org.eclipse.epf.library.edit/src/org/eclipse/epf/library/edit/process/consolidated/TaskDescriptorItemProvider.java
+++ b/plugins/org.eclipse.epf.library.edit/src/org/eclipse/epf/library/edit/process/consolidated/TaskDescriptorItemProvider.java
@@ -26,9 +26,11 @@
 import org.eclipse.emf.edit.provider.ViewerNotification;
 import org.eclipse.emf.edit.provider.WrapperItemProvider;
 import org.eclipse.epf.library.edit.IFilter;
+import org.eclipse.epf.library.edit.configuration.GuidanceItemProvider.CompareByName;
 import org.eclipse.epf.library.edit.process.BreakdownElementWrapperItemProvider;
 import org.eclipse.epf.library.edit.process.IBSItemProvider;
 import org.eclipse.epf.library.edit.process.IBreakdownElementWrapperItemProviderFactory;
+import org.eclipse.epf.library.edit.util.Comparators;
 import org.eclipse.epf.library.edit.util.ProcessUtil;
 import org.eclipse.epf.library.edit.util.TngUtil;
 import org.eclipse.epf.uma.Activity;
@@ -59,9 +61,7 @@
 		super(adapterFactory, delegateItemProvider);
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
+	/**
 	 * @see com.ibm.library.edit.process.BreakdownElementItemProvider#collectNewChildDescriptors(java.util.Collection,
 	 *      java.lang.Object)
 	 */
@@ -86,9 +86,11 @@
 		newChildDescriptors.add(createChildParameter(UmaPackage.eINSTANCE
 				.getTaskDescriptor_OptionalInput(), UmaFactory.eINSTANCE
 				.createWorkProductDescriptor()));
+		
 		newChildDescriptors.add(createChildParameter(UmaPackage.eINSTANCE
 				.getTaskDescriptor_ExternalInput(), UmaFactory.eINSTANCE
 				.createWorkProductDescriptor()));
+		
 		newChildDescriptors.add(createChildParameter(UmaPackage.eINSTANCE
 				.getTaskDescriptor_Output(), UmaFactory.eINSTANCE
 				.createWorkProductDescriptor()));
@@ -248,6 +250,13 @@
 	public Collection getChildren(Object obj) {
 		Collection children = super.getChildren(obj);
 		List newChildren = new ArrayList();
+		List primaryPerformers = new ArrayList();
+		List additionalPerformers = new ArrayList();
+		List assitedBy = new ArrayList();
+		List mandatoryInput = new ArrayList();
+		List externalInput = new ArrayList();
+		List optionalInput = new ArrayList();
+		List output = new ArrayList();
 
 		IFilter filter = getFilter(obj);
 
@@ -255,12 +264,61 @@
 			Object o = itor.next();
 			if (o instanceof WrapperItemProvider) {
 				Object child = ((WrapperItemProvider) o).getValue();
+				
+				
 				if ((filter != null) && (filter.accept(child))) {
-					newChildren.add(o);
+					if (((WrapperItemProvider) o).getFeature().equals(
+							UmaPackage.eINSTANCE
+									.getTaskDescriptor_PerformedPrimarilyBy())) {
+						primaryPerformers.add(o);
+					} else if (((WrapperItemProvider) o)
+							.getFeature()
+							.equals(
+									UmaPackage.eINSTANCE
+											.getTaskDescriptor_AdditionallyPerformedBy())) {
+						additionalPerformers.add(o);
+					} else if (((WrapperItemProvider) o).getFeature()
+							.equals(
+									UmaPackage.eINSTANCE
+											.getTaskDescriptor_AssistedBy())) {
+						assitedBy.add(o);
+					} else if (((WrapperItemProvider) o).getFeature().equals(
+							UmaPackage.eINSTANCE
+									.getTaskDescriptor_MandatoryInput())) {
+						mandatoryInput.add(o);
+					} else if (((WrapperItemProvider) o).getFeature().equals(
+							UmaPackage.eINSTANCE
+									.getTaskDescriptor_ExternalInput())) {
+						externalInput.add(o);
+					} else if (((WrapperItemProvider) o).getFeature().equals(
+							UmaPackage.eINSTANCE
+									.getTaskDescriptor_OptionalInput())) {
+						optionalInput.add(o);
+					} else if (((WrapperItemProvider) o).getFeature().equals(
+							UmaPackage.eINSTANCE.getTaskDescriptor_Output())) {
+						output.add(o);
+					}
 				}
 			}
 		}
 
+		// sort for all children
+		Collections.sort(primaryPerformers, Comparators.PRESENTATION_NAME_COMPARATOR);
+		Collections.sort(additionalPerformers, Comparators.PRESENTATION_NAME_COMPARATOR);
+		Collections.sort(assitedBy, Comparators.PRESENTATION_NAME_COMPARATOR);
+		Collections.sort(externalInput, Comparators.PRESENTATION_NAME_COMPARATOR);
+		Collections.sort(mandatoryInput, Comparators.PRESENTATION_NAME_COMPARATOR);
+		Collections.sort(optionalInput, Comparators.PRESENTATION_NAME_COMPARATOR);
+		Collections.sort(output, Comparators.PRESENTATION_NAME_COMPARATOR);
+		
+		newChildren.addAll(primaryPerformers);
+		newChildren.addAll(additionalPerformers);
+		newChildren.addAll(assitedBy);
+		newChildren.addAll(externalInput);
+		newChildren.addAll(mandatoryInput);
+		newChildren.addAll(optionalInput);
+		newChildren.addAll(output);
+		
 		newChildren = removeSubartifactsFromChildren(newChildren, true);
 		updateCachedChildren(newChildren);
 		return newChildren;
diff --git a/plugins/org.eclipse.epf.library.persistence/META-INF/MANIFEST.MF b/plugins/org.eclipse.epf.library.persistence/META-INF/MANIFEST.MF
index ed31131..9e0a3fb 100755
--- a/plugins/org.eclipse.epf.library.persistence/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.epf.library.persistence/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.epf.library.persistence; singleton:=true
-Bundle-Version: 1.0.1
+Bundle-Version: 1.0.2
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
 Require-Bundle: org.eclipse.epf.common;visibility:=reexport,
diff --git a/plugins/org.eclipse.epf.library.persistence/src/org/eclipse/epf/persistence/migration/MigrationResourceHandler.java b/plugins/org.eclipse.epf.library.persistence/src/org/eclipse/epf/persistence/migration/MigrationResourceHandler.java
new file mode 100755
index 0000000..b2c38f1
--- /dev/null
+++ b/plugins/org.eclipse.epf.library.persistence/src/org/eclipse/epf/persistence/migration/MigrationResourceHandler.java
@@ -0,0 +1,152 @@
+//------------------------------------------------------------------------------
+// Copyright (c) 2005, 2006 IBM Corporation 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:
+// IBM Corporation - initial implementation
+//------------------------------------------------------------------------------
+package org.eclipse.epf.persistence.migration;
+
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Map;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.util.FeatureMap;
+import org.eclipse.emf.ecore.util.FeatureMap.Entry;
+import org.eclipse.emf.ecore.xmi.XMLResource;
+import org.eclipse.emf.ecore.xmi.impl.BasicResourceHandler;
+import org.eclipse.emf.ecore.xml.type.AnyType;
+
+/**
+ * Resource handler for migrating UMA library from one version to another.
+ * 
+ * @author Phong Nguyen Le
+ * @since 1.0
+ */
+public abstract class MigrationResourceHandler extends BasicResourceHandler {
+
+	private static final boolean DEBUG = true;
+
+	public MigrationResourceHandler() {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.emf.ecore.xmi.impl.BasicResourceHandler#postLoad(org.eclipse.emf.ecore.xmi.XMLResource,
+	 *      java.io.InputStream, java.util.Map)
+	 */
+	public void postLoad(XMLResource resource, InputStream inputStream,
+			Map options) {
+		if (!resource.getEObjectToExtensionMap().isEmpty()) {
+			if (DEBUG) {
+				System.out
+						.println("MigrationResourceHandler.postLoad(): " + resource.getURI()); //$NON-NLS-1$
+				System.out.println("---- Start unknown features ----"); //$NON-NLS-1$
+			}
+			for (Iterator iter = resource.getEObjectToExtensionMap().entrySet()
+					.iterator(); iter.hasNext();) {
+				Map.Entry entry = (Map.Entry) iter.next();
+				if (entry.getKey() instanceof EObject) {
+					// handle moved data
+					//
+					handleUnknownData((EObject) entry.getKey(), (AnyType)entry.getValue());
+				}
+			}
+			if (DEBUG)
+				System.out.println("---- End unknown features ----"); //$NON-NLS-1$
+		}
+	}
+
+	public static String getText(AnyType value) {
+		try {
+			if (value == null)
+				return null;
+			FeatureMap.Entry entry = (FeatureMap.Entry) value.getMixed().get(0);
+			return (String) entry.getValue();
+		} catch (RuntimeException e) {
+			throw e;
+		}
+	}
+
+	protected static EAttribute getEAttribute(EClass eClass, String name) {
+		for (Iterator iterator = eClass.getEAllAttributes().iterator(); iterator
+				.hasNext();) {
+			EAttribute attrib = (EAttribute) iterator.next();
+			if (attrib.getName().equals(name)) {
+				return attrib;
+			}
+		}
+		return null;
+	}
+
+	public static void setValue(EObject eObject, EStructuralFeature feature,
+			Object value) {
+		if (!feature.isMany()) {
+			eObject.eSet(feature, value);
+		} else {
+			Collection values = (Collection) eObject.eGet(feature);
+			if (value instanceof Collection) {
+				values.addAll((Collection) value);
+			} else {
+				values.add(value);
+			}
+		}
+
+	}
+	
+	protected abstract boolean handleUnknownFeature(EObject owner, EStructuralFeature feature, Object value);
+
+	private void handleUnknownFeatures(EObject owner, FeatureMap featureMap) {
+		for (Iterator iter = featureMap.iterator(); iter.hasNext();) {
+			FeatureMap.Entry entry = (FeatureMap.Entry) iter.next();
+			EStructuralFeature f = entry.getEStructuralFeature();
+			if(handleUnknownFeature(owner, f, entry.getValue())) {
+				iter.remove();
+			}
+		}
+	}
+
+	/**
+	 * @param key
+	 * @param value
+	 */
+	protected void handleUnknownData(EObject e, AnyType unknownData) {
+		handleUnknownFeatures(e, unknownData.getMixed());
+		handleUnknownFeatures(e, unknownData.getAnyAttribute());
+	}
+
+
+	public static Object getSingleValue(FeatureMap featureMap,
+			String featureName) {
+		for (Iterator iter = featureMap.iterator(); iter.hasNext();) {
+			FeatureMap.Entry entry = (Entry) iter.next();
+			if (entry.getEStructuralFeature().getName().equals(featureName)) {
+				return entry.getValue();
+			}
+		}
+		return null;
+	}
+
+	protected static Collection getValue(FeatureMap featureMap,
+			String featureName) {
+		Collection list = new ArrayList();
+		for (Iterator iter = featureMap.iterator(); iter.hasNext();) {
+			FeatureMap.Entry entry = (Entry) iter.next();
+			if (entry.getEStructuralFeature().getName().equals(featureName)) {
+				list.add(entry.getValue());
+			}
+		}
+		return list;
+	}
+
+}
diff --git a/plugins/org.eclipse.epf.library.persistence/src/org/eclipse/epf/persistence/migration/UMA2UMAResourceHandler.java b/plugins/org.eclipse.epf.library.persistence/src/org/eclipse/epf/persistence/migration/UMA2UMAResourceHandler.java
index dc2a998..1425d1b 100755
--- a/plugins/org.eclipse.epf.library.persistence/src/org/eclipse/epf/persistence/migration/UMA2UMAResourceHandler.java
+++ b/plugins/org.eclipse.epf.library.persistence/src/org/eclipse/epf/persistence/migration/UMA2UMAResourceHandler.java
@@ -10,40 +10,18 @@
 //------------------------------------------------------------------------------
 package org.eclipse.epf.persistence.migration;
 
-import java.io.InputStream;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
-import java.util.Map;
-import java.util.Set;
 
-import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.ecore.EAttribute;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.EStructuralFeature;
-import org.eclipse.emf.ecore.InternalEObject;
 import org.eclipse.emf.ecore.util.FeatureMap;
 import org.eclipse.emf.ecore.util.FeatureMap.Entry;
-import org.eclipse.emf.ecore.xmi.XMLResource;
-import org.eclipse.emf.ecore.xmi.impl.BasicResourceHandler;
 import org.eclipse.emf.ecore.xml.type.AnyType;
-import org.eclipse.epf.persistence.MultiFileResourceSetImpl;
-import org.eclipse.epf.uma.Activity;
-import org.eclipse.epf.uma.ContentDescription;
-import org.eclipse.epf.uma.ContentPackage;
-import org.eclipse.epf.uma.DescribableElement;
-import org.eclipse.epf.uma.ProcessElement;
-import org.eclipse.epf.uma.ProcessPackage;
-import org.eclipse.epf.uma.UmaFactory;
-import org.eclipse.epf.uma.UmaPackage;
-import org.eclipse.epf.uma.WorkBreakdownElement;
-import org.eclipse.epf.uma.WorkOrder;
-import org.eclipse.epf.uma.WorkOrderType;
 
 /**
  * Resource handler for migrating UMA library from one version to another.
@@ -51,94 +29,14 @@
  * @author Phong Nguyen Le
  * @since 1.0
  */
-public class UMA2UMAResourceHandler extends BasicResourceHandler {
+public class UMA2UMAResourceHandler extends MigrationResourceHandler {
 
 	private static final boolean DEBUG = true;
 
 	private List moveInfos;
 
-	private Set procMovedFeatureNames;
-
-	private Map guidToPresentationMap;
-
-	private Set classNamesToSavePresentationURI;
-
 	public UMA2UMAResourceHandler() {
 		moveInfos = new ArrayList();
-
-		guidToPresentationMap = new HashMap();
-
-		procMovedFeatureNames = new HashSet(Arrays.asList(new String[] {
-				"purpose" //$NON-NLS-1$
-				, "keyConsiderations" //$NON-NLS-1$
-				, "alternatives" //$NON-NLS-1$
-				, "howtoStaff" //$NON-NLS-1$
-				, "usageGuidance" //$NON-NLS-1$
-				, "externalId" //$NON-NLS-1$
-				, "scope" //$NON-NLS-1$
-				, "usageNotes" //$NON-NLS-1$
-				, "scale" //$NON-NLS-1$
-				, "projectCharacteristics" //$NON-NLS-1$
-				, "riskLevel" //$NON-NLS-1$
-				, "estimatingTechnique" //$NON-NLS-1$
-				, "projectMemberExpertise" //$NON-NLS-1$
-				, "typeOfContract" //$NON-NLS-1$
-				, "techniques" //$NON-NLS-1$
-				, "mainDescription" //$NON-NLS-1$
-		}));
-
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.emf.ecore.xmi.impl.BasicResourceHandler#postLoad(org.eclipse.emf.ecore.xmi.XMLResource,
-	 *      java.io.InputStream, java.util.Map)
-	 */
-	public void postLoad(XMLResource resource, InputStream inputStream,
-			Map options) {
-		if (!resource.getEObjectToExtensionMap().isEmpty()) {
-			if (DEBUG) {
-				System.out
-						.println("UMA2UMAResourceHandler.postLoad(): " + resource.getURI()); //$NON-NLS-1$
-				System.out.println("---- Start unknown features ----"); //$NON-NLS-1$
-			}
-			// System.out.println(resource.getEObjectToExtensionMap());
-			for (Iterator iter = resource.getEObjectToExtensionMap().entrySet()
-					.iterator(); iter.hasNext();) {
-				Map.Entry entry = (Map.Entry) iter.next();
-				if (entry.getKey() instanceof EObject) {
-					// handle moved data
-					//
-					handleMovedData((EObject) entry.getKey(), entry.getValue());
-				}
-
-				// String str;
-				// if(entry.getKey() instanceof MethodElement) {
-				// MethodElement e = (MethodElement)entry.getKey();
-				// str = e.getGuid() + " - " + e.getName() + "(" +
-				// e.getClass().getName() + ")";
-				// }
-				// else {
-				// str = entry.getKey().toString();
-				// }
-				// str += " = " + entry.getValue();
-				// System.out.println(str);
-			}
-			if (DEBUG)
-				System.out.println("---- End unknown features ----"); //$NON-NLS-1$
-		}
-	}
-
-	private static String getText(AnyType value) {
-		try {
-			if (value == null)
-				return null;
-			FeatureMap.Entry entry = (FeatureMap.Entry) value.getMixed().get(0);
-			return (String) entry.getValue();
-		} catch (RuntimeException e) {
-			throw e;
-		}
 	}
 
 	protected static EAttribute getEAttribute(EClass eClass, String name) {
@@ -160,23 +58,6 @@
 	 * @return
 	 */
 	protected EStructuralFeature getNewFeature(EObject owner, String featureName) {
-		if ("presentationName".equals(featureName) && owner instanceof ContentDescription) { //$NON-NLS-1$
-			return UmaPackage.eINSTANCE
-					.getDescribableElement_PresentationName();
-		}
-		if (procMovedFeatureNames.contains(featureName)) {
-			if (owner instanceof ProcessElement) {
-				ContentDescription content = ((ProcessElement) owner)
-						.getPresentation();
-				EAttribute attrib = getEAttribute(content.eClass(), featureName);
-				if (attrib != null) {
-					return attrib;
-				}
-			}
-		}
-		if ("WorkOrder".equals(featureName) && owner instanceof ProcessPackage) { //$NON-NLS-1$
-			return UmaPackage.eINSTANCE.getProcessPackage_ProcessElements();
-		}
 		return null;
 	}
 
@@ -188,46 +69,12 @@
 	 * @return
 	 */
 	protected EObject getNewOwner(EObject oldOwner, String featureName) {
-		if ("presentationName".equals(featureName) && oldOwner instanceof ContentDescription) { //$NON-NLS-1$
-			DescribableElement de = ((DescribableElement) oldOwner.eContainer());
-			if (de instanceof Activity) {
-				return null;
-			}
-			return de;
-		}
-		if (procMovedFeatureNames.contains(featureName)
-				&& oldOwner instanceof ProcessElement) {
-			return ((ProcessElement) oldOwner).getPresentation();
-		}
-		if ("WorkOrder".equals(featureName) && oldOwner instanceof ProcessPackage) { //$NON-NLS-1$
-			return oldOwner;
-		}
-
 		return null;
 	}
 
 	protected Object getNewValue(EObject oldOwner, String featureName,
 			AnyType value) {
-		if ("WorkOrder".equals(featureName) && oldOwner instanceof ProcessPackage) { //$NON-NLS-1$
-			WorkOrder workOrder = UmaFactory.eINSTANCE.createWorkOrder();
-			workOrder.setGuid((String) getSingleValue(value.getAnyAttribute(),
-					"guid")); //$NON-NLS-1$
-			String predGuid = (String) getSingleValue(value.getAnyAttribute(),
-					"pred"); //$NON-NLS-1$
-			if (predGuid == null) {
-				InternalEObject obj = (InternalEObject) getSingleValue(value
-						.getMixed(), "pred"); //$NON-NLS-1$
-				predGuid = obj.eProxyURI().authority();
-			}
-			MultiFileResourceSetImpl resourceSet = (MultiFileResourceSetImpl) oldOwner
-					.eResource().getResourceSet();
-			WorkBreakdownElement pred = (WorkBreakdownElement) resourceSet
-					.getEObject(predGuid);
-			workOrder.setPred(pred);
-			workOrder.setLinkType(WorkOrderType.FINISH_TO_FINISH_LITERAL);
-			return workOrder;
-		}
-		return getText(value);
+		return null;
 	}
 
 	public void moveData() {
@@ -280,71 +127,6 @@
 		}
 	}
 
-	private void handleMovedData(EObject owner, FeatureMap featureMap) {
-		for (Iterator iter = featureMap.iterator(); iter.hasNext();) {
-			FeatureMap.Entry entry = (FeatureMap.Entry) iter.next();
-			EStructuralFeature f = entry.getEStructuralFeature();
-			EStructuralFeature newFeature = getNewFeature(owner, f.getName());
-			// System.out.println("UMA2UMAResourceHandler.handleMovedData():");
-			// System.out.println(" feature: " + f.getName());
-			// System.out.println(" owner: " + owner);
-			if (newFeature != null) {
-				MoveInfo moveInfo = new MoveInfo();
-				moveInfo.oldOwner = owner;
-				moveInfo.oldFeatureName = f.getName();
-				moveInfo.newFeature = newFeature;
-				moveInfo.value = entry.getValue() instanceof AnyType ? getNewValue(
-						owner, f.getName(), (AnyType) entry.getValue())
-						: entry.getValue();
-				moveInfos.add(moveInfo);
-				if (DEBUG) {
-					System.out.println(moveInfo);
-					System.out.println();
-				}
-				iter.remove();
-			}
-		}
-	}
-
-	/**
-	 * @param key
-	 * @param value
-	 */
-	protected void handleMovedData(EObject e, Object movedData) {
-		AnyType anyType = (AnyType) movedData;
-
-		handleMovedData(e, anyType.getMixed());
-
-		handleMovedData(e, anyType.getAnyAttribute());
-
-		if (classNamesToSavePresentationURI != null
-				&& e instanceof ContentPackage) {
-			for (Iterator iter = getValue(anyType.getMixed(), "contentElements").iterator(); iter.hasNext();) { //$NON-NLS-1$
-				AnyType value = (AnyType) iter.next();
-				if (value != null
-						&& classNamesToSavePresentationURI.contains(value
-								.eClass().getName())) {
-					Object presentation = getSingleValue(value.getMixed(),
-							"presentation"); //$NON-NLS-1$
-					if (presentation != null) {
-						Object guid = getSingleValue(value.getAnyAttribute(),
-								"guid"); //$NON-NLS-1$
-						URI uri = ((InternalEObject) presentation).eProxyURI();
-						guidToPresentationMap.put(guid, uri);
-					}
-				}
-			}
-		}
-	}
-
-	public void savePresentationURIFor(Set classNames) {
-		classNamesToSavePresentationURI = classNames;
-	}
-
-	public URI getPresentationURI(String guid) {
-		return (URI) guidToPresentationMap.get(guid);
-	}
-
 	public static Object getSingleValue(FeatureMap featureMap,
 			String featureName) {
 		for (Iterator iter = featureMap.iterator(); iter.hasNext();) {
@@ -371,5 +153,29 @@
 	public void clearMoveInfos() {
 		moveInfos.clear();
 	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.epf.persistence.migration.MigrationResourceHandler#handleUnknownFeature(org.eclipse.emf.ecore.EObject, org.eclipse.emf.ecore.EStructuralFeature, java.lang.Object)
+	 */
+	protected boolean handleUnknownFeature(EObject owner, EStructuralFeature feature, Object value) {
+		String featureName = feature.getName();
+		EStructuralFeature newFeature = getNewFeature(owner, featureName);
+		if (newFeature != null) {
+			MoveInfo moveInfo = new MoveInfo();
+			moveInfo.oldOwner = owner;
+			moveInfo.oldFeatureName = featureName;
+			moveInfo.newFeature = newFeature;
+			moveInfo.value = value instanceof AnyType ? getNewValue(
+					owner, featureName, (AnyType) value)
+					: value;
+			moveInfos.add(moveInfo);
+			if (DEBUG) {
+				System.out.println(moveInfo);
+				System.out.println();
+			}
+			return true;
+		}
+		return false;
+	}
 
 }
diff --git a/plugins/org.eclipse.epf.library.persistence/src/org/eclipse/epf/persistence/migration/internal/UMA2UMAResourceHandler0.java b/plugins/org.eclipse.epf.library.persistence/src/org/eclipse/epf/persistence/migration/internal/UMA2UMAResourceHandler0.java
index 6b8a259..f3d21c2 100755
--- a/plugins/org.eclipse.epf.library.persistence/src/org/eclipse/epf/persistence/migration/internal/UMA2UMAResourceHandler0.java
+++ b/plugins/org.eclipse.epf.library.persistence/src/org/eclipse/epf/persistence/migration/internal/UMA2UMAResourceHandler0.java
@@ -23,6 +23,7 @@
 import org.eclipse.emf.ecore.EStructuralFeature;
 import org.eclipse.emf.ecore.InternalEObject;
 import org.eclipse.emf.ecore.xml.type.AnyType;
+import org.eclipse.epf.persistence.MultiFileResourceSetImpl;
 import org.eclipse.epf.persistence.migration.UMA2UMAResourceHandler;
 import org.eclipse.epf.uma.Activity;
 import org.eclipse.epf.uma.ContentDescription;
@@ -30,7 +31,11 @@
 import org.eclipse.epf.uma.DescribableElement;
 import org.eclipse.epf.uma.ProcessElement;
 import org.eclipse.epf.uma.ProcessPackage;
+import org.eclipse.epf.uma.UmaFactory;
 import org.eclipse.epf.uma.UmaPackage;
+import org.eclipse.epf.uma.WorkBreakdownElement;
+import org.eclipse.epf.uma.WorkOrder;
+import org.eclipse.epf.uma.WorkOrderType;
 
 /**
  * @author Phong Nguyen Le
@@ -121,6 +126,32 @@
 
 		return super.getNewOwner(oldOwner, featureName);
 	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.epf.persistence.migration.UMA2UMAResourceHandler#getNewValue(org.eclipse.emf.ecore.EObject, java.lang.String, org.eclipse.emf.ecore.xml.type.AnyType)
+	 */
+	protected Object getNewValue(EObject oldOwner, String featureName, AnyType value) {
+		if ("WorkOrder".equals(featureName) && oldOwner instanceof ProcessPackage) { //$NON-NLS-1$
+			WorkOrder workOrder = UmaFactory.eINSTANCE.createWorkOrder();
+			workOrder.setGuid((String) getSingleValue(value.getAnyAttribute(),
+					"guid")); //$NON-NLS-1$
+			String predGuid = (String) getSingleValue(value.getAnyAttribute(),
+					"pred"); //$NON-NLS-1$
+			if (predGuid == null) {
+				InternalEObject obj = (InternalEObject) getSingleValue(value
+						.getMixed(), "pred"); //$NON-NLS-1$
+				predGuid = obj.eProxyURI().authority();
+			}
+			MultiFileResourceSetImpl resourceSet = (MultiFileResourceSetImpl) oldOwner
+					.eResource().getResourceSet();
+			WorkBreakdownElement pred = (WorkBreakdownElement) resourceSet
+					.getEObject(predGuid);
+			workOrder.setPred(pred);
+			workOrder.setLinkType(WorkOrderType.FINISH_TO_FINISH_LITERAL);
+			return workOrder;
+		}
+		return getText(value);
+	}
 
 	public void savePresentationURIFor(Set classNames) {
 		classNamesToSavePresentationURI = classNames;
@@ -129,21 +160,16 @@
 	public URI getPresentationURI(String guid) {
 		return (URI) guidToPresentationMap.get(guid);
 	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.epf.persistence.migration.UMA2UMAResourceHandler#handleMovedData(org.eclipse.emf.ecore.EObject,
-	 *      java.lang.Object)
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.epf.persistence.migration.MigrationResourceHandler#handleUnknownData(org.eclipse.emf.ecore.EObject, java.lang.Object)
 	 */
-	protected void handleMovedData(EObject e, Object movedData) {
-		super.handleMovedData(e, movedData);
-
-		if (movedData instanceof AnyType
-				&& classNamesToSavePresentationURI != null
+	protected void handleUnknownData(EObject e, AnyType unknownData) {
+		super.handleUnknownData(e, unknownData);
+		
+		if (classNamesToSavePresentationURI != null
 				&& e instanceof ContentPackage) {
-			AnyType anyType = (AnyType) movedData;
-			for (Iterator iter = getValue(anyType.getMixed(), "contentElements").iterator(); iter.hasNext();) { //$NON-NLS-1$
+			for (Iterator iter = getValue(unknownData.getMixed(), "contentElements").iterator(); iter.hasNext();) { //$NON-NLS-1$
 				AnyType value = (AnyType) iter.next();
 				if (value != null
 						&& classNamesToSavePresentationURI.contains(value
@@ -158,6 +184,7 @@
 					}
 				}
 			}
-		}
+		}		
 	}
+
 }
diff --git a/plugins/org.eclipse.epf.library.persistence/src/org/eclipse/epf/persistence/refresh/RefreshJob.java b/plugins/org.eclipse.epf.library.persistence/src/org/eclipse/epf/persistence/refresh/RefreshJob.java
index b6ade3d..d9991b7 100755
--- a/plugins/org.eclipse.epf.library.persistence/src/org/eclipse/epf/persistence/refresh/RefreshJob.java
+++ b/plugins/org.eclipse.epf.library.persistence/src/org/eclipse/epf/persistence/refresh/RefreshJob.java
@@ -67,6 +67,8 @@
 
 	private Collection removedResources = new UniqueEList();
 
+	private Collection movedResources = new UniqueEList();
+
 	private UniqueEList savedResources = new UniqueEList();
 
 	private Collection loadedBeforeRefreshResources = new ArrayList();
@@ -74,7 +76,7 @@
 	private IRefreshHandler refreshHandler;
 
 	private boolean enabled = true;
-
+	
 	private Collection addedWorkspaceResources = new UniqueEList();
 
 	private RefreshJob() {
@@ -162,6 +164,13 @@
 		return removedResources;
 	}
 
+	/**
+	 * @return Returns the movedResources.
+	 */
+	public Collection getMovedResources() {
+		return movedResources;
+	}
+
 	public void resourceSaved(Resource resource) {
 		synchronized (savedResources) {
 			savedResources.add(resource);
@@ -178,6 +187,7 @@
 	public void reset() {
 		changedResources.clear();
 		removedResources.clear();
+		movedResources.clear();
 		savedResources.clear();
 		loadedBeforeRefreshResources.clear();
 		addedResources.clear();
@@ -236,7 +246,7 @@
 
 	private boolean shouldRefresh() {
 		return !removedResources.isEmpty() || !changedResources.isEmpty()
-				|| !addedResources.isEmpty()
+				|| !addedResources.isEmpty() || !movedResources.isEmpty()
 				|| !loadedBeforeRefreshResources.isEmpty()
 				|| !addedWorkspaceResources.isEmpty();
 	}
@@ -310,6 +320,8 @@
 
 				private Collection removedResources = new ArrayList();
 
+				private Collection movedResources = new ArrayList();
+
 				private Collection addedResources = new ArrayList();
 
 				private ArrayList addedWorkspaceResources = new ArrayList();
@@ -318,6 +330,7 @@
 					Resource resource;
 					IPath path;
 					String loc;
+
 					if (delta.getFlags() != IResourceDelta.MARKERS
 							&& delta.getResource().getType() == IResource.FILE) {
 						switch (delta.getKind()) {
@@ -351,6 +364,13 @@
 						case IResourceDelta.REMOVED:
 							if ((IResourceDelta.MOVED_TO & delta.getFlags()) != 0) {
 								// handle file move
+								path = delta.getResource().getLocation();
+								if(path != null) {
+									resource = getResource(path.toString());
+									if (resource != null) {
+										movedResources.add(resource);
+									}
+								}
 								//
 								if (DEBUG) {
 									IPath movedFromPath = delta
@@ -391,6 +411,21 @@
 							break;
 						}
 					}
+					// watch for project move
+					else if (delta.getFlags() != IResourceDelta.MARKERS
+							&& delta.getResource().getType() == IResource.PROJECT) {
+						// tested using the Move.. command in the Resource Navigator view
+						// the REPLACED flag only seemed to occur when the library was moved
+						// outside of EPF and EPF was re-started, so make sure it's clear, otherwise
+						// we reload the library right after loading it when starting EPF
+						if (delta.getKind() == IResourceDelta.CHANGED && 
+								((delta.getFlags() & IResourceDelta.REPLACED) == 0) &&
+								((delta.getFlags() & IResourceDelta.DESCRIPTION) != 0)) {
+							movedResources.add(delta.getResource());
+									
+						}
+						return true;
+					}
 					return true;
 				}
 
@@ -402,13 +437,17 @@
 					return removedResources;
 				}
 
-			}
-			;
+				public Collection getMovedResources() {
+					return movedResources;
+				}
+
+			};
 
 			ResourceDeltaVisitor visitor = new ResourceDeltaVisitor();
 			delta.accept(visitor);
 
 			removedResources.addAll(visitor.getRemovedResources());
+			movedResources.addAll(visitor.getMovedResources());
 			changedResources.addAll(visitor.getChangedResources());
 			addedResources.addAll(visitor.addedResources);
 			addedWorkspaceResources.addAll(visitor.addedWorkspaceResources);
@@ -458,5 +497,4 @@
 	}
 
 	private static RefreshJob instance = new RefreshJob();
-
 }
diff --git a/plugins/org.eclipse.epf.library.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.epf.library.ui/META-INF/MANIFEST.MF
index 2b1e67f..7f5e486 100755
--- a/plugins/org.eclipse.epf.library.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.epf.library.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.epf.library.ui
-Bundle-Version: 1.0.1
+Bundle-Version: 1.0.2
 Bundle-Activator: org.eclipse.epf.library.ui.LibraryUIPlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
diff --git a/plugins/org.eclipse.epf.library.xmi/META-INF/MANIFEST.MF b/plugins/org.eclipse.epf.library.xmi/META-INF/MANIFEST.MF
index 9422929..316275a 100755
--- a/plugins/org.eclipse.epf.library.xmi/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.epf.library.xmi/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.epf.library.xmi; singleton:=true
-Bundle-Version: 1.0.1
+Bundle-Version: 1.0.2
 Bundle-Activator: org.eclipse.epf.library.xmi.XMILibraryPlugin
 Bundle-Localization: plugin
 Require-Bundle: org.eclipse.core.runtime,
diff --git a/plugins/org.eclipse.epf.library.xmi/src/org/eclipse/epf/library/xmi/XMILibraryManager.java b/plugins/org.eclipse.epf.library.xmi/src/org/eclipse/epf/library/xmi/XMILibraryManager.java
index 17efc3d..f42ac48 100755
--- a/plugins/org.eclipse.epf.library.xmi/src/org/eclipse/epf/library/xmi/XMILibraryManager.java
+++ b/plugins/org.eclipse.epf.library.xmi/src/org/eclipse/epf/library/xmi/XMILibraryManager.java
@@ -148,7 +148,7 @@
 	private ListenerList resourceChangeListeners = new ListenerList();
 
 	// The file lock for the managed library.
-	private FileLock lock;
+//	private FileLock lock;
 
 	// The save library options.
 	private Map saveOptions;
@@ -965,15 +965,17 @@
 	/**
 	 * Checks whether the managed method library is locked.
 	 * 
+	 * @deprecated disable this code for now - see https://bugs.eclipse.org/bugs/show_bug.cgi?id=147106
 	 * @return <code>true</code> if the method library is locked
 	 */
 	public boolean isMethodLibraryLocked() {
-		if (debug) {
+		return false;
+/*		if (debug) {
 			DebugTrace.print(this, "isMethodLibraryLocked"); //$NON-NLS-1$
 		}
 
 		return XMILibraryUtil.isMethodLibraryLocked(getMethodLibraryPath());
-	}
+*/	}
 
 	/**
 	 * Checks whether the managed method library is read only.
@@ -1268,20 +1270,23 @@
 	 * The .lock file in the method library folder will be locked. If it does
 	 * not exists, a new .lock file will be created.
 	 * 
+	 * @deprecated disable this code for now - see https://bugs.eclipse.org/bugs/show_bug.cgi?id=147106
 	 * @param path
 	 *            a <code>File</code> object that contains the path to the
 	 *            method library.
 	 */
 	protected void lockMethodLibrary(File path) {
-		File lockFile = new File(path, ResourceUtil.LOCK_FILENAME);
+/*		File lockFile = new File(path, ResourceUtil.LOCK_FILENAME);
 		lock = FileUtil.lockFile(lockFile);
-	}
+*/	}
 
 	/**
 	 * Unlocks the managed method library.
+	 *
+	 * @deprecated disable this code for now - see https://bugs.eclipse.org/bugs/show_bug.cgi?id=147106
 	 */
 	protected void unlockMethodLibrary() {
-		try {
+/*		try {
 			if (lock != null) {
 				lock.release();
 				lock.channel().close();
@@ -1292,7 +1297,7 @@
 				DebugTrace.print(this, "unlockMethodLibrary", e); //$NON-NLS-1$
 			}
 		}
-	}
+*/	}
 
 	/**
 	 * Handles a persistence refresh event.
diff --git a/plugins/org.eclipse.epf.library.xmi/src/org/eclipse/epf/library/xmi/XMILibraryUtil.java b/plugins/org.eclipse.epf.library.xmi/src/org/eclipse/epf/library/xmi/XMILibraryUtil.java
index 502c33b..ed53892 100755
--- a/plugins/org.eclipse.epf.library.xmi/src/org/eclipse/epf/library/xmi/XMILibraryUtil.java
+++ b/plugins/org.eclipse.epf.library.xmi/src/org/eclipse/epf/library/xmi/XMILibraryUtil.java
@@ -24,7 +24,6 @@
 import org.eclipse.core.runtime.Path;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.Status;
-import org.eclipse.epf.common.utils.FileUtil;
 import org.eclipse.epf.common.utils.StrUtil;
 import org.eclipse.epf.library.LibraryPlugin;
 import org.eclipse.epf.library.LibraryResources;
@@ -237,12 +236,14 @@
 	 * Once a method library is locked, it cannot be accessed by another EPF
 	 * Composer instance.
 	 * 
+	 * @deprecated disable this code for now - see https://bugs.eclipse.org/bugs/show_bug.cgi?id=147106
 	 * @param path
 	 *            an absolute path to a method library
 	 * @return <code>true</code> if the method library is locked
 	 */
 	public static boolean isMethodLibraryLocked(String path) {
-		// check if library is currently opened by this instance
+		return false;
+/*		// check if library is currently opened by this instance
 		// the FileLock mechanism in Java does not seem to properly detect when
 		// 		the current JVM has locked the file
 		// TODO: check all opened libraries (rather than just current) when the API allows it
@@ -251,7 +252,7 @@
 			return false;
 		File lockFile = new File(path, ResourceUtil.LOCK_FILENAME);
 		return FileUtil.isFileLocked(lockFile);
-	}
+*/	}
 
 	/**
 	 * Checks whether a method library needs to be upgraded to a new format.
diff --git a/plugins/org.eclipse.epf.library.xmi/src/org/eclipse/epf/library/xmi/internal/migration/Migrator102.java b/plugins/org.eclipse.epf.library.xmi/src/org/eclipse/epf/library/xmi/internal/migration/Migrator102.java
index 2fbede1..c6c1af4 100755
--- a/plugins/org.eclipse.epf.library.xmi/src/org/eclipse/epf/library/xmi/internal/migration/Migrator102.java
+++ b/plugins/org.eclipse.epf.library.xmi/src/org/eclipse/epf/library/xmi/internal/migration/Migrator102.java
@@ -18,6 +18,7 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.StringTokenizer;
 
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
@@ -35,8 +36,11 @@
 import org.eclipse.emf.ecore.util.EContentsEList;
 import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.emf.ecore.util.EContentsEList.FeatureIterator;
+import org.eclipse.emf.ecore.xmi.XMLResource;
 import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
 import org.eclipse.epf.common.serviceability.MsgBox;
+import org.eclipse.epf.diagram.model.util.GraphicalDataHelper;
+import org.eclipse.epf.diagram.model.util.GraphicalDataManager;
 import org.eclipse.epf.library.edit.TngAdapterFactory;
 import org.eclipse.epf.library.edit.util.ModelStructure;
 import org.eclipse.epf.library.edit.util.TngUtil;
@@ -47,14 +51,22 @@
 import org.eclipse.epf.persistence.MultiFileResourceSetImpl;
 import org.eclipse.epf.persistence.MultiFileXMISaveImpl;
 import org.eclipse.epf.persistence.migration.IMigrator;
+import org.eclipse.epf.persistence.migration.MigrationResourceHandler;
 import org.eclipse.epf.persistence.migration.MigrationUtil;
 import org.eclipse.epf.persistence.util.PersistenceResources;
 import org.eclipse.epf.persistence.util.PersistenceUtil;
 import org.eclipse.epf.uma.Activity;
+import org.eclipse.epf.uma.Diagram;
+import org.eclipse.epf.uma.GraphNode;
 import org.eclipse.epf.uma.MethodElement;
 import org.eclipse.epf.uma.MethodLibrary;
 import org.eclipse.epf.uma.MethodPackage;
 import org.eclipse.epf.uma.MethodPlugin;
+import org.eclipse.epf.uma.Property;
+import org.eclipse.epf.uma.RoleDescriptor;
+import org.eclipse.epf.uma.SemanticModelBridge;
+import org.eclipse.epf.uma.TaskDescriptor;
+import org.eclipse.epf.uma.UMASemanticModelBridge;
 import org.eclipse.epf.uma.UmaPackage;
 import org.eclipse.epf.uma.VariabilityType;
 import org.eclipse.epf.uma.ecore.impl.MultiResourceEObject;
@@ -64,6 +76,7 @@
 import org.eclipse.jface.dialogs.IDialogConstants;
 import org.eclipse.jface.viewers.ILabelProvider;
 import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
 
 /**
  * @author Phong Nguyen Le - Jun 12, 2006
@@ -99,6 +112,70 @@
 
 	private MethodLibrary lib;
 
+	private MigrationResourceHandler resourceHandler = new MigrationResourceHandler() {
+
+		protected boolean handleUnknownFeature(EObject owner,
+				EStructuralFeature feature, Object value) {
+			// Order graph nodes of task descriptors in ADD based on their order
+			// in the task descriptor list of the role descriptor
+			// old feature: RoleDescriptor.performsAsOwner
+			//
+			if(owner instanceof RoleDescriptor
+					&& "performsAsOwner".equals(feature.getName()) //$NON-NLS-1$
+					&& value != null)
+			{
+				ArrayList GUIDs = new ArrayList();
+				StringTokenizer tokens = new StringTokenizer((String) value);
+				while(tokens.hasMoreTokens()) {
+					GUIDs.add(tokens.nextToken());
+				}
+				if(GUIDs.size() > 1) {
+					Activity act = ((RoleDescriptor)owner).getSuperActivities();
+					Diagram add = GraphicalDataManager.getInstance().getUMADiagram(act, GraphicalDataHelper.ACTIVITY_DETAIL_DIAGRAM, false);
+					if(add != null) {
+						Map tdGuidToGraphNodeMap = new HashMap();
+						int size = add.getContained().size();
+						for (int i = 0; i < size; i++) {
+							Object element = add.getContained().get(i);
+							if(element instanceof GraphNode) {
+								GraphNode graphNode = ((GraphNode)element);
+								SemanticModelBridge bridge = graphNode.getSemanticModel();
+								if (bridge instanceof UMASemanticModelBridge) {
+									MethodElement me = ((UMASemanticModelBridge) bridge).getElement();								
+									if(me instanceof TaskDescriptor) {
+										List list = graphNode.getList(UmaPackage.GRAPH_NODE__PROPERTY);
+										Property property = GraphicalDataHelper.getPropertyByKey(list,
+												GraphicalDataHelper.PROP_WORK_PRODUCT_COMPOSITE_TYPE);
+										if (property == null) {
+											// this is not a GraphNode for WorkProductComposite
+											// it must be a GraphNode for a TaskDescriptor
+											//
+											tdGuidToGraphNodeMap.put(me.getGuid(), graphNode);
+										}
+									}
+								}
+							}
+						}
+						
+						// reorder the graph nodes to match order of their linked task descriptors
+						//
+						ArrayList graphNodes = new ArrayList();
+						for(int i = 0; i < GUIDs.size(); i++) {
+							Object graphNode = tdGuidToGraphNodeMap.get(GUIDs.get(i));
+							if(graphNode != null) {
+								graphNodes.add(graphNode);
+							}
+						}
+						add.getContained().removeAll(graphNodes);
+						add.getContained().addAll(graphNodes);
+					}					
+				}
+			}
+			return true;
+		}
+
+	};
+
 	private static final String FILE_PATH = XMILibraryResources.filePath;
 
 	/*
@@ -121,6 +198,10 @@
 			//
 			updateStatus(monitor, PersistenceResources.loadLibraryTask_name);
 			resourceSet = new MultiFileResourceSetImpl(false);
+			resourceSet.getLoadOptions().put(
+					XMLResource.OPTION_RECORD_UNKNOWN_FEATURE, Boolean.TRUE);
+			resourceSet.getLoadOptions().put(
+					XMLResource.OPTION_RESOURCE_HANDLER, resourceHandler);
 			lib = resourceSet.loadLibrary(libPath);
 
 			removeProcessContributions(monitor);
@@ -129,7 +210,17 @@
 			//
 			// TODO: uncomment after externalize the text
 			// updateStatus(monitor, "Verifying...");
-			verify();
+
+			Display dis = Display.getDefault();
+			if (dis == null || dis.getThread() == Thread.currentThread()) {
+				verify();
+			} else {
+				dis.syncExec(new Runnable() {
+					public void run() {
+						verify();
+					}
+				});
+			}
 
 			removeUnresolvedReferences(monitor);
 
@@ -147,7 +238,8 @@
 					} catch (Exception e) {
 						CommonPlugin.INSTANCE.log(e);
 						if (DEBUG) {
-							System.err.println("Error iterate thru cross references of element: " + element); //$NON-NLS-1$
+							System.err
+									.println("Error iterate thru cross references of element: " + element); //$NON-NLS-1$
 						}
 					}
 					update((MethodElement) element, monitor);
diff --git a/plugins/org.eclipse.epf.library/META-INF/MANIFEST.MF b/plugins/org.eclipse.epf.library/META-INF/MANIFEST.MF
index 2d7ac3e..fee1e57 100755
--- a/plugins/org.eclipse.epf.library/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.epf.library/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.epf.library; singleton:=true
-Bundle-Version: 1.0.1
+Bundle-Version: 1.0.2
 Bundle-ClassPath: library.jar
 Bundle-Activator: org.eclipse.epf.library.LibraryPlugin
 Bundle-Vendor: %providerName
diff --git a/plugins/org.eclipse.epf.library/layout/css/default.css b/plugins/org.eclipse.epf.library/layout/css/default.css
index 09f971a..d4bd0cd 100755
--- a/plugins/org.eclipse.epf.library/layout/css/default.css
+++ b/plugins/org.eclipse.epf.library/layout/css/default.css
@@ -430,6 +430,16 @@
 	border: #ccc solid 0px;
 }
 
+.stepTable table
+{
+	border: #999999 solid 1px;
+}
+
+.stepTable table td
+{
+	border: #ccc solid 1px;
+}
+
 .stepSeparator
 {
 	background-color: #cccccc;
diff --git a/plugins/org.eclipse.epf.library/layout/xsl/activity_wbs.xsl b/plugins/org.eclipse.epf.library/layout/xsl/activity_wbs.xsl
index 14dd845..7b02bdd 100755
--- a/plugins/org.eclipse.epf.library/layout/xsl/activity_wbs.xsl
+++ b/plugins/org.eclipse.epf.library/layout/xsl/activity_wbs.xsl
@@ -303,7 +303,7 @@
 				<xsl:otherwise>false</xsl:otherwise>
 			</xsl:choose>
 		</xsl:variable>	
-wbsItemHtml.initRow("<xsl:value-of select="$element/@nodeId"/>", "<xsl:value-of select="$parentNodeId"/>", "<xsl:value-of select="$element/@relProcessPath"/>", "<xsl:value-of select="$element/@isSupressed"/>", <xsl:value-of select="$indent"/>, <xsl:value-of select="$hasChildren"/>, "<xsl:value-of select="$element/@Index"/>", "<xsl:value-of select="$element/attribute[@name='prefix']"/>", "<xsl:value-of select="$element/@Name"/>", "<xsl:value-of select="$element/@DisplayName"/>", "<xsl:value-of select="concat(/Element/@BackPath, $element/@Url)"/>", "", "<xsl:value-of select="$element/@Predecessors"/>", "<xsl:value-of select="$element/@ModelInfo"/>", "<xsl:value-of select="$element/@TypeName"/>", "<xsl:value-of select="$element/attribute[@name='isRepeatable']"/>", "<xsl:value-of select="$element/attribute[@name='hasMultipleOccurrences']"/>", "<xsl:value-of select="$element/attribute[@name='isOptional']"/>", "<xsl:value-of select="$element/attribute[@name='isPlanned']"/>",  "<xsl:value-of select="$element/attribute[@name='isOngoing']"/>", "<xsl:value-of select="$element/attribute[@name='isEventDriven']"/>", "", "", "","", "<xsl:value-of select="$element/attribute[@name='variabilityType']"/>");<xsl:for-each select="$element/Steps/Step">wbsItemHtml.addStep(<xsl:value-of select="@selected"/>, <xsl:value-of select="position() mod 5 = 0"/>);</xsl:for-each>
+wbsItemHtml.initRow("<xsl:value-of select="$element/@nodeId"/>", "<xsl:value-of select="$parentNodeId"/>", "<xsl:value-of select="$element/@relProcessPath"/>", "<xsl:value-of select="$element/@isSupressed"/>", <xsl:value-of select="$indent"/>, <xsl:value-of select="$hasChildren"/>, "<xsl:value-of select="$element/@Index"/>", "<xsl:value-of select="$element/attribute[@name='prefix']"/>", "<xsl:value-of select="$element/@Name"/>", "<xsl:value-of select="$element/@DisplayName"/>", "<xsl:value-of select="concat(/Element/@BackPath, $element/@Url)"/>", "", "<xsl:value-of select="$element/@Predecessors"/>", "<xsl:value-of select="$element/@ModelInfo"/>", "<xsl:value-of select="$element/@TypeName"/>", "<xsl:value-of select="$element/attribute[@name='isRepeatable']"/>", "<xsl:value-of select="$element/attribute[@name='hasMultipleOccurrences']"/>", "<xsl:value-of select="$element/attribute[@name='isOptional']"/>", "<xsl:value-of select="$element/attribute[@name='isPlanned']"/>",  "<xsl:value-of select="$element/attribute[@name='isOngoing']"/>", "<xsl:value-of select="$element/attribute[@name='isEventDriven']"/>", "<xsl:value-of select="$element/@Team"/>", "", "","", "<xsl:value-of select="$element/attribute[@name='variabilityType']"/>");<xsl:for-each select="$element/Steps/Step">wbsItemHtml.addStep(<xsl:value-of select="@selected"/>, <xsl:value-of select="position() mod 5 = 0"/>);</xsl:for-each>
 wbsItemHtml.writeRow();	
 <xsl:if test="count($element/Element) > 0">
 			<xsl:for-each select="$element/Element">
diff --git a/plugins/org.eclipse.epf.library/layout/xsl/artifact_descriptor.xsl b/plugins/org.eclipse.epf.library/layout/xsl/artifact_descriptor.xsl
index 74e99fe..8866243 100755
--- a/plugins/org.eclipse.epf.library/layout/xsl/artifact_descriptor.xsl
+++ b/plugins/org.eclipse.epf.library/layout/xsl/artifact_descriptor.xsl
@@ -237,8 +237,8 @@
 		<xsl:variable name="impacts" select="referenceList[@name='impacts']/Element[@Type='WorkProductDescriptor']"/>
 		<xsl:variable name="impactedBy" select="referenceList[@name='impactedBy']/Element[@Type='WorkProductDescriptor']"/>
 		<xsl:variable name="mandatoryInputTo" select="referenceList[@name='WorkProductDescriptor_MandatoryInputTo_TaskDescriptors']/Element[@Type='TaskDescriptor']"/>
-		<xsl:variable name="optionalInputTo" select="referenceList[@name='OptionalInputTo']/Element[@Type='TaskDescriptor']"/>
-		<xsl:variable name="externalInputTo" select="referenceList[@name='externalInputTo']/Element[@Type='TaskDescriptor']"/>
+		<xsl:variable name="optionalInputTo" select="referenceList[@name='WorkProductDescriptor_OptionalInputTo_TaskDescriptors']/Element[@Type='TaskDescriptor']"/>
+		<xsl:variable name="externalInputTo" select="referenceList[@name='WorkProductDescriptor_ExternalInputTo_TaskDescriptors']/Element[@Type='TaskDescriptor']"/>
 		<xsl:variable name="outputFrom" select="referenceList[@name='WorkProductDescriptor_OutputFrom_TaskDescriptors']/Element[@Type='TaskDescriptor']"/>
 		<xsl:variable name="superActivities" select="referenceList[@name='superActivities']/Element[@Type='Activity']"/>
 		<xsl:variable name="responsibleRole" select="referenceList[@name='WorkProductDescriptor_ResponsibleRoleDescriptors']/Element[@Type='RoleDescriptor']"/>
@@ -400,4 +400,4 @@
 		</xsl:if>
 	</xsl:template>
 	
-</xsl:stylesheet>
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/plugins/org.eclipse.epf.library/layout/xsl/guidance.xsl b/plugins/org.eclipse.epf.library/layout/xsl/guidance.xsl
index 00a5e06..2f1bc44 100755
--- a/plugins/org.eclipse.epf.library/layout/xsl/guidance.xsl
+++ b/plugins/org.eclipse.epf.library/layout/xsl/guidance.xsl
@@ -116,14 +116,15 @@
 	
 		
 	<xsl:template name="moreInfoSection">
-		<xsl:variable name="checklists" select="referenceList[@name !='contentElements']/Element[@Type='Checklist']"/>
-		<xsl:variable name="concepts" select="referenceList[@name !='contentElements']/Element[@Type='Concept']"/>
-		<xsl:variable name="guidelines" select="referenceList[@name !='contentElements']/Element[@Type='Guideline']"/>
-		<xsl:variable name="supportingMaterials" select="referenceList[@name !='contentElements']/Element[@Type='SupportingMaterial']"/>
+			<!-- use the specific named list,  otherwise, the variability base element will be included , bug 163885  -->
+		<xsl:variable name="checklists" select="referenceList[@name ='checklists']/Element[@Type='Checklist']"/>
+		<xsl:variable name="concepts" select="referenceList[@name ='conceptsAndPapers']/Element[@Type='Concept']"/>
+		<xsl:variable name="guidelines" select="referenceList[@name ='guidelines']/Element[@Type='Guideline']"/>
+		<xsl:variable name="supportingMaterials" select="referenceList[@name ='supportingMaterials']/Element"/>
 		<xsl:variable name="toolMentors" select="referenceList[@name !='contentElements']/Element[@Type='ToolMentor']"/>
-		<xsl:variable name="whitePapers" select="referenceList[@name !='contentElements']/Element[@Type='Whitepaper']"/>
-		<xsl:variable name="examples" select="referenceList[@name !='contentElements']/Element[@Type='Example']"/>
-		<xsl:variable name="reusableAssets" select="referenceList[@name !='contentElements']/Element[@Type='ReusableAsset']"/>
+		<xsl:variable name="whitePapers" select="referenceList[@name ='conceptsAndPapers']/Element[@Type='Whitepaper']"/>
+		<xsl:variable name="examples" select="referenceList[@name ='examples']/Element[@Type='Example']"/>
+		<xsl:variable name="reusableAssets" select="referenceList[@name ='assets']/Element[@Type='ReusableAsset']"/>
 		<xsl:if test="count($checklists) + count($concepts) + count($guidelines) + count($supportingMaterials) + count($toolMentors) + count($whitePapers) + count($reusableAssets) + count($examples) > 0">
 			<div class="sectionHeading">
 				<xsl:value-of select="$moreInfoText"/>
diff --git a/plugins/org.eclipse.epf.library/layout/xsl/task_descriptor.xsl b/plugins/org.eclipse.epf.library/layout/xsl/task_descriptor.xsl
index b47b1d6..5ef07eb 100755
--- a/plugins/org.eclipse.epf.library/layout/xsl/task_descriptor.xsl
+++ b/plugins/org.eclipse.epf.library/layout/xsl/task_descriptor.xsl
@@ -202,7 +202,6 @@
 	
 	<xsl:template name="relationshipsSection">
 		<xsl:variable name="performingRole" select="reference[@name='performedPrimarilyBy']/Element[@Type='RoleDescriptor']"/>
-		<xsl:variable name="performingRoleName" select="$performingRole/@DisplayName"/>
 		<xsl:variable name="additionallyPerformedBy" select="referenceList[@name='additionallyPerformedBy']/Element"/>
 		<xsl:variable name="assistedBy" select="referenceList[@name='assistedBy']/Element"/>
 		<xsl:variable name="mandatoryInputs" select="referenceList[@name='mandatoryInput']/Element"/>
@@ -211,51 +210,49 @@
 		<xsl:variable name="outputs" select="referenceList[@name='output']/Element"/>
 		<xsl:variable name="imagePath" select="concat(/Element/@BackPath, 'images/')"/>
 
-		<xsl:if test="$performingRoleName != '' or count($additionallyPerformedBy) + count($mandatoryInputs) + count($optionalInputs) + count($outputs) > 0">
+		<xsl:if test="count($performingRole) + count($additionallyPerformedBy) + count($mandatoryInputs) + count($optionalInputs) + count($outputs) > 0">
 			<div class="sectionHeading"><xsl:value-of select="$relationshipsText"/></div>
 			<div class="sectionContent">
-				<table class="sectionTable" border="0" cellspacing="0" cellpadding="0">
-					<xsl:if test="$performingRoleName != ''">
-						<tr valign="top">
-							<th class="sectionTableHeading" scope="row"><xsl:value-of select="$rolesText"/></th>
-							<td class="sectionTableCell" width="30%">
-								<xsl:value-of select="$mainText"/>:
-								<xsl:if test="$performingRoleName">
-									<ul>
-										<li>
-											<a><xsl:attribute name="href"><xsl:value-of select="/Element/@BackPath"/><xsl:value-of select="$performingRole/@Url"/></xsl:attribute><xsl:value-of select="$performingRoleName"/></a>
-										</li>
-									</ul>
-								</xsl:if>
-							</td>
-							<td class="sectionTableCell" width="30%">								
-								<xsl:value-of select="$additionalText"/>:
-								<xsl:if test="count($additionallyPerformedBy) > 0">									
+				<table class="sectionTable" border="0" cellspacing="0" cellpadding="0">					
+					<tr valign="top">
+						<th class="sectionTableHeading" scope="row"><xsl:value-of select="$rolesText"/></th>
+						<td class="sectionTableCell" width="30%">
+							<xsl:value-of select="$mainText"/>:
+							<xsl:if test="count($performingRole) > 0">
 								<ul>
-									<xsl:for-each select="$additionallyPerformedBy">
-									<xsl:sort select="@DisplayName"/>
-										<li>
-											<a><xsl:attribute name="href"><xsl:value-of select="/Element/@BackPath"/><xsl:value-of select="@Url"/></xsl:attribute><xsl:value-of select="@DisplayName"/></a>
-										</li>
-									</xsl:for-each>
+									<li>
+										<a><xsl:attribute name="href"><xsl:value-of select="/Element/@BackPath"/><xsl:value-of select="$performingRole/@Url"/></xsl:attribute><xsl:value-of select="$performingRole/@DisplayName"/></a>
+									</li>
 								</ul>
-								</xsl:if>
-							</td>
-							<td class="sectionTableCell">								
-								<xsl:value-of select="$assistingText"/>:
-								<xsl:if test="count($assistedBy) > 0">									
-								<ul>
-									<xsl:for-each select="$assistedBy">
-									<xsl:sort select="@DisplayName"/>
-										<li>
-											<a><xsl:attribute name="href"><xsl:value-of select="/Element/@BackPath"/><xsl:value-of select="@Url"/></xsl:attribute><xsl:value-of select="@DisplayName"/></a>
-										</li>
-									</xsl:for-each>
-								</ul>
-								</xsl:if>
-							</td>
-						</tr>
-					</xsl:if>
+							</xsl:if>
+						</td>
+						<td class="sectionTableCell" width="30%">								
+							<xsl:value-of select="$additionalText"/>:
+							<xsl:if test="count($additionallyPerformedBy) > 0">
+							<ul>
+								<xsl:for-each select="$additionallyPerformedBy">
+								<xsl:sort select="@DisplayName"/>
+									<li>
+										<a><xsl:attribute name="href"><xsl:value-of select="/Element/@BackPath"/><xsl:value-of select="@Url"/></xsl:attribute><xsl:value-of select="@DisplayName"/></a>
+									</li>
+								</xsl:for-each>
+							</ul>
+							</xsl:if>
+						</td>
+						<td class="sectionTableCell">								
+							<xsl:value-of select="$assistingText"/>:
+							<xsl:if test="count($assistedBy) > 0">									
+							<ul>
+								<xsl:for-each select="$assistedBy">
+								<xsl:sort select="@DisplayName"/>
+									<li>
+										<a><xsl:attribute name="href"><xsl:value-of select="/Element/@BackPath"/><xsl:value-of select="@Url"/></xsl:attribute><xsl:value-of select="@DisplayName"/></a>
+									</li>
+								</xsl:for-each>
+							</ul>
+							</xsl:if>
+						</td>
+					</tr>					
 					<xsl:if test="count($mandatoryInputs) + count($optionalInputs) > 0">
 						<tr valign="top">
 							<th class="sectionTableHeading" scope="row"><xsl:value-of select="$inputsText"/></th>
@@ -431,4 +428,4 @@
 		</xsl:if>
 	</xsl:template>
 	
-</xsl:stylesheet>
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/plugins/org.eclipse.epf.library/plugin.properties b/plugins/org.eclipse.epf.library/plugin.properties
index 833894b..261df50 100755
--- a/plugins/org.eclipse.epf.library/plugin.properties
+++ b/plugins/org.eclipse.epf.library/plugin.properties
@@ -13,3 +13,11 @@
 # Plug-in
 pluginName=EPF Library
 providerName=Eclipse.org
+
+# to anable the exted-replace feature
+#EnableExtendReplace=true
+
+# for element exteding from another, 
+# turn this flag on to ignore the base to-many outgoing associations if the element has its own.
+#IgnoreBaseToManyAssociations=true
+
diff --git a/plugins/org.eclipse.epf.library/src/org/eclipse/epf/library/configuration/AttributeFeatureValue.java b/plugins/org.eclipse.epf.library/src/org/eclipse/epf/library/configuration/AttributeFeatureValue.java
index 1193cfb..315ff30 100755
--- a/plugins/org.eclipse.epf.library/src/org/eclipse/epf/library/configuration/AttributeFeatureValue.java
+++ b/plugins/org.eclipse.epf.library/src/org/eclipse/epf/library/configuration/AttributeFeatureValue.java
@@ -14,6 +14,7 @@
 import java.util.LinkedHashMap;
 import java.util.Map;
 
+import org.eclipse.epf.common.utils.StrUtil;
 import org.eclipse.epf.library.util.LibraryUtil;
 import org.eclipse.epf.library.util.ResourceHelper;
 import org.eclipse.epf.uma.ContentDescription;
@@ -84,10 +85,17 @@
 			MethodElement e = (MethodElement)entry.getKey();
 			Object v = entry.getValue();
 			
-//			if (v == null || v.toString().length() == 0) {
-//				continue;
-//			}
+			if (v == null || v.toString().length() == 0) {
+				continue;
+			}
 
+			if ( ElementRealizer.isExtendReplaceEnabled() ) {
+				String str = StrUtil.getPlainText(v.toString()).trim();
+				if ( str.equals(_NULL_) ) {
+					continue;
+				}
+			}
+			
 			if (feature == UmaPackage.eINSTANCE
 					.getDescribableElement_PresentationName()) {
 				if (size() > 1) {
diff --git a/plugins/org.eclipse.epf.library/src/org/eclipse/epf/library/configuration/ConfigurationFilter.java b/plugins/org.eclipse.epf.library/src/org/eclipse/epf/library/configuration/ConfigurationFilter.java
index f04a7ed..a94af29 100755
--- a/plugins/org.eclipse.epf.library/src/org/eclipse/epf/library/configuration/ConfigurationFilter.java
+++ b/plugins/org.eclipse.epf.library/src/org/eclipse/epf/library/configuration/ConfigurationFilter.java
@@ -24,10 +24,14 @@
 import org.eclipse.epf.library.services.SafeUpdateController;
 import org.eclipse.epf.library.util.LibraryUtil;
 import org.eclipse.epf.library.util.Log;
+import org.eclipse.epf.uma.Discipline;
+import org.eclipse.epf.uma.DisciplineGrouping;
 import org.eclipse.epf.uma.MethodConfiguration;
 import org.eclipse.epf.uma.MethodElement;
 import org.eclipse.epf.uma.MethodPackage;
 import org.eclipse.epf.uma.Role;
+import org.eclipse.epf.uma.RoleSet;
+import org.eclipse.epf.uma.RoleSetGrouping;
 import org.eclipse.epf.uma.Task;
 import org.eclipse.epf.uma.ToolMentor;
 import org.eclipse.epf.uma.VariabilityElement;
@@ -61,6 +65,12 @@
 
 		obj = LibraryUtil.unwrap(obj);
 
+		if ( ElementRealizer.isExtendReplaceEnabled() && 
+				(obj instanceof MethodElement) && 
+				FeatureValue._NULL_.equals(((MethodElement)obj).getName()) ) {
+			return false;
+		}
+
 		if (obj instanceof MethodPackage) {
 			return methodConfig.getMethodPackageSelection().contains(obj);
 		} else if (obj instanceof MethodElement) {
@@ -318,4 +328,54 @@
 			}
 		};
 	}
+	
+	
+	/**
+	 * get filter for disciplines and displine groupings
+	 * 
+	 * @return IFilter
+	 */
+	public IFilter getDisciplinesFilter() {
+		return new IFilter() {
+			public boolean accept(Object obj) {
+				// [Bug 162603] New: Replacing disciplines do appear inside their replaced elements discipline groupings 
+				// as well as outside of the discipline grouping
+				if ( obj instanceof DisciplineGrouping ) {
+					return true;
+				}
+				
+				return ( obj instanceof Discipline ) && 
+				ConfigurationHelper.calc0nFeatureValue(
+						(MethodElement)obj, 
+						AssociationHelper.Discipline_DisciplineGroupings, 
+						new DefaultElementRealizer(methodConfig)).isEmpty();					
+			}
+		};
+	}
+	
+	/**
+	 * get filter for rolesets and roleset groupings
+	 * 
+	 * @return IFilter
+	 */
+	public IFilter getRoleSetsFilter() {
+		return new IFilter() {
+			public boolean accept(Object obj) {
+				// [Bug 162603] New: Replacing disciplines do appear inside their replaced elements discipline groupings 
+				// as well as outside of the discipline grouping
+				// same for roleset grouping
+				if ( obj instanceof RoleSetGrouping ) {
+					return true;
+				}
+				
+				return ( obj instanceof RoleSet ) && 
+					ConfigurationHelper.calc0nFeatureValue(
+							(MethodElement)obj, 
+							AssociationHelper.RoleSet_RoleSetGrouppings, 
+							new DefaultElementRealizer(methodConfig)).isEmpty();					
+			}
+		};
+	}
+	
+	
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.epf.library/src/org/eclipse/epf/library/configuration/ConfigurationHelper.java b/plugins/org.eclipse.epf.library/src/org/eclipse/epf/library/configuration/ConfigurationHelper.java
index c044d60..fd2f6c9 100755
--- a/plugins/org.eclipse.epf.library/src/org/eclipse/epf/library/configuration/ConfigurationHelper.java
+++ b/plugins/org.eclipse.epf.library/src/org/eclipse/epf/library/configuration/ConfigurationHelper.java
@@ -66,6 +66,10 @@
 	private static boolean debug = LibraryPlugin.getDefault().isDebugging();
 
 	public static boolean isDescriptionElement(MethodElement element) {
+		if ( element == null ) {
+			return false;
+		}
+		
 		return (element instanceof ContentDescription || element.eContainer() instanceof ContentDescription);
 
 	}
@@ -627,10 +631,17 @@
 
 		// if the element is an extended element, get the base element's
 		// properties if needed
-		if (isExtender(ve)) {
+		boolean extendReplace = ElementRealizer.isExtendReplaceEnabled() && isReplacer(ve);
+		boolean isExtender = isExtender(ve);
+		
+		if (isExtender || extendReplace) {
 			boolean mergebase = false;
 			if (is0nFeature(feature)) {
 				mergebase = true;
+				if ( extendReplace 
+						|| isExtender && ElementRealizer.ignoreBaseToManyAssociations()) {
+					mergebase = (values.size() == 0);
+				} 
 			} else if (is01Feature(feature)) {
 				mergebase = (values.size() == 0);
 			} else {
@@ -643,11 +654,23 @@
 				// need to get the realized element,
 				// the base element might be replaced by another one,
 				// or might be a contributor to another base
-				MethodElement e = getCalculatedElement(ve
-						.getVariabilityBasedOnElement(), config);
+				MethodElement e = ve.getVariabilityBasedOnElement();
+				if ( !extendReplace ) {
+					e= getCalculatedElement(e, config);
+				}					
 				MethodElement o = e;
 
-				if ((ve != e) && inConfig(e, config)) {
+				// if it's a containment feature, such as sub-artifacts
+				// the base should not be the container
+				// 162154 - Check circular references with parent-/sub-artifacts and practices/sub-practices				
+				if ( isContainmentFeature(feature) ) {
+					List containers = getContainers(ve, config);
+					if (containers.contains(e) ) {
+						mergebase = false;
+					}
+				}
+
+				if (mergebase && (ve != e) && inConfig(e, config)) {
 					// if the current element is a description,
 					// get the the description object of the base
 					if (element instanceof ContentDescription) {
@@ -670,7 +693,7 @@
 				}
 			}
 		}
-
+				
 	}
 
 	/**
@@ -930,6 +953,21 @@
 	}
 
 	/**
+	 * get the target feature for the opposite feature if the target feature is a to-One feature, 
+	 * otherwise, return null.
+	 * @param oFeature
+	 * @return EStructuralFeature
+	 */
+	public static EStructuralFeature get01Feature(OppositeFeature oFeature) {
+		if ( oFeature == AssociationHelper.Role_Primary_Tasks 
+				|| oFeature == AssociationHelper.RoleDescriptor_PrimaryTaskDescriptors ) {
+			return oFeature.getTargetFeature();
+		}
+		
+		return null;
+	}
+	
+	/**
 	 * get the calculated 0..n feature value of the specipied element and
 	 * feature. if the opposite feature on the other end is a to-one feature,
 	 * the feature value item can't be in the value list unless it's opposite
diff --git a/plugins/org.eclipse.epf.library/src/org/eclipse/epf/library/configuration/ElementRealizer.java b/plugins/org.eclipse.epf.library/src/org/eclipse/epf/library/configuration/ElementRealizer.java
index 00d23da..3d60409 100755
--- a/plugins/org.eclipse.epf.library/src/org/eclipse/epf/library/configuration/ElementRealizer.java
+++ b/plugins/org.eclipse.epf.library/src/org/eclipse/epf/library/configuration/ElementRealizer.java
@@ -13,6 +13,7 @@
 import java.util.List;
 
 import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.epf.library.LibraryPlugin;
 import org.eclipse.epf.library.edit.IFilter;
 import org.eclipse.epf.library.util.LibraryUtil;
 import org.eclipse.epf.uma.MethodConfiguration;
@@ -43,6 +44,22 @@
 
 	protected IFilter filter = null;
 	
+	// this is the default setting based on the property setting
+	private static boolean defaultEnableExtendReplace = false;
+	private static boolean defaultIgnoreBaseToManyAssociations = false;
+	
+	static {
+		String str = LibraryPlugin.getDefault().getString("EnableExtendReplace");
+		if ( str != null && str.trim().equals("true") ) {
+			defaultEnableExtendReplace = true;
+		}
+		
+		str = LibraryPlugin.getDefault().getString("IgnoreBaseToManyAssociations");
+		if ( str != null && str.trim().equals("true") ) {
+			defaultIgnoreBaseToManyAssociations = true;
+		}
+	}
+
 	public ElementRealizer(MethodConfiguration config) {
 		this(config, true, true);
 	}
@@ -54,6 +71,19 @@
 		this.resolveReplacer = resolveReplacer;
 	}
 
+	/**
+	 * is extend-replace enabled for replacement
+	 * 
+	 * @return boolean
+	 */
+	public static boolean isExtendReplaceEnabled() {
+		return defaultEnableExtendReplace;
+	}
+	
+	public static boolean ignoreBaseToManyAssociations() {
+		return defaultIgnoreBaseToManyAssociations;
+	}
+	
 	public void setDiscardContributor(boolean discardContributor) {
 		this.discardContributor = discardContributor;
 	}
diff --git a/plugins/org.eclipse.epf.library/src/org/eclipse/epf/library/configuration/FeatureValue.java b/plugins/org.eclipse.epf.library/src/org/eclipse/epf/library/configuration/FeatureValue.java
index 5db21fd..4acc931 100755
--- a/plugins/org.eclipse.epf.library/src/org/eclipse/epf/library/configuration/FeatureValue.java
+++ b/plugins/org.eclipse.epf.library/src/org/eclipse/epf/library/configuration/FeatureValue.java
@@ -27,6 +27,8 @@
  */
 abstract class FeatureValue {
 	
+	protected static final String _NULL_ = "_NULL_";
+
 	protected MethodElement element;  // the element
 	protected MethodElement ownerElement;  // the container of the element
 	protected Object feature; // EStructrualFeature or Oppositefeature
diff --git a/plugins/org.eclipse.epf.library/src/org/eclipse/epf/library/configuration/ToManyFeatureValue.java b/plugins/org.eclipse.epf.library/src/org/eclipse/epf/library/configuration/ToManyFeatureValue.java
index 9abb38b..71ad338 100755
--- a/plugins/org.eclipse.epf.library/src/org/eclipse/epf/library/configuration/ToManyFeatureValue.java
+++ b/plugins/org.eclipse.epf.library/src/org/eclipse/epf/library/configuration/ToManyFeatureValue.java
@@ -40,12 +40,15 @@
 		}
 			
 		for (Iterator it = ((List) value).iterator(); it.hasNext();) {
-			MethodElement e = (MethodElement) it.next();
-			MethodElement ce = realizer.realize(e);
-
-			// calculated element can be null if it can't show
-			if (ce != null && !values.contains(ce)) {
-				values.add(ce);
+			Object obj = it.next();
+			if ( obj instanceof MethodElement ) {
+				MethodElement e = (MethodElement) obj;
+				MethodElement ce = realizer.realize(e);
+	
+				// calculated element can be null if it can't show
+				if (ce != null && !values.contains(ce)) {
+					values.add(ce);
+				}
 			}
 		}
 		
@@ -58,8 +61,25 @@
 	}
 	
 
-	public Object getValue() {
+	public Object getValue() {		
+		if ( ElementRealizer.isExtendReplaceEnabled() ) {
+			List items = new ArrayList();
+			
+			// remove the _NULL_ item. that is used as an indicator to blank out the base 
+			// for the extend-replace
+			for (Iterator it = values.iterator(); it.hasNext(); ) {
+				Object o = (Object) it.next();
+				if ( (o instanceof MethodElement) && _NULL_.equals(((MethodElement)o).getName()) ){
+					continue;
+				}
+				items.add(o);
+			}
+			
+			return items;
+		}
+		
 		return values;
+
 	}
 
 	public int size() {
diff --git a/plugins/org.eclipse.epf.library/src/org/eclipse/epf/library/configuration/ToManyOppositeFeatureValue.java b/plugins/org.eclipse.epf.library/src/org/eclipse/epf/library/configuration/ToManyOppositeFeatureValue.java
index b9c6800..e3199de 100755
--- a/plugins/org.eclipse.epf.library/src/org/eclipse/epf/library/configuration/ToManyOppositeFeatureValue.java
+++ b/plugins/org.eclipse.epf.library/src/org/eclipse/epf/library/configuration/ToManyOppositeFeatureValue.java
@@ -14,6 +14,7 @@
 import java.util.Iterator;
 import java.util.List;
 
+import org.eclipse.emf.ecore.EStructuralFeature;
 import org.eclipse.epf.uma.MethodElement;
 import org.eclipse.epf.uma.VariabilityElement;
 import org.eclipse.epf.uma.ecore.util.OppositeFeature;
@@ -66,9 +67,62 @@
 			// so for A1's responsible role opposite feature,
 			// the value R1 should be dropped instead of realize to R2
 			// Jinhua Xi, 10/27/2005
-			boolean isValueReplaced = (e instanceof VariabilityElement)
-					&& (ConfigurationHelper.getReplacer((VariabilityElement) e, realizer.getConfiguration()) != null);
-			if (!isValueReplaced) {
+			MethodElement replacer = null;
+			if ( e instanceof VariabilityElement ) {
+				replacer = ConfigurationHelper.getReplacer((VariabilityElement) e, realizer.getConfiguration());
+			}
+			boolean isValueReplaced = (replacer != null);
+
+			boolean keep = !isValueReplaced;
+			if ( isValueReplaced && ElementRealizer.isExtendReplaceEnabled() ) {
+				// if the value is replaced, but the out going feature is inherited by the replacer
+				// then we should keep this value, so we need to calculate the feature value 
+				// of the replacer
+				OppositeFeature of = (OppositeFeature)feature;
+				EStructuralFeature f = of.getTargetFeature();
+				if ( f.isMany() ) {
+					List items = ConfigurationHelper.calc0nFeatureValue(replacer, f, realizer);
+					keep = items.contains(owner);
+				} else {
+					MethodElement item = ConfigurationHelper.calc01FeatureValue(replacer, f, realizer);
+					keep = (item == owner);
+				}
+			}
+			
+			// if the value's feature to this element is to-one, 
+			// then this value's feature value should be the element,
+			// otherwise drop the value
+			// for example, 
+			// T1 -> R1 (primary performaer)
+			// T2 -> R2
+			// T2 contributes to T1
+			// since T1 already has R1, so R2 is droped
+			// so when calculating R2's performing tasks, T1 should not be included
+			if ( keep ) {
+				MethodElement ve = ConfigurationHelper.getCalculatedElement(e, realizer);
+				if ( ve != null ) {
+					OppositeFeature of = (OppositeFeature)feature;
+					
+					// check if this is a to-one feature, currently only Task->Primary Role and TD -> Primary RD
+					EStructuralFeature f = ConfigurationHelper.get01Feature(of);
+					if ( f != null ) {
+						MethodElement item = ConfigurationHelper.calc01FeatureValue(ve, f, realizer);
+						
+						// if the value element's to-one feature value item is not the current element, 
+						// then the element's opposite feature value should not contain this value.
+						// say, the value element is a task and the current element is a role,
+						// then if the task's primary performer (item above) is not this role (the current element), 
+						// then the role's performing tasks (the opposite feature value) 
+						// should not contain this task (the value, ve above)
+						if ( item != element) {
+							keep = false;
+						}
+					}
+				}
+			}
+			
+			if ( keep ) {
+					
 				MethodElement ce = ConfigurationHelper.getCalculatedElement(e, realizer);
 
 				// calculated element can be null if it can't show
diff --git a/plugins/org.eclipse.epf.library/src/org/eclipse/epf/library/configuration/ToOneFeatureValue.java b/plugins/org.eclipse.epf.library/src/org/eclipse/epf/library/configuration/ToOneFeatureValue.java
index c9157f2..34af93a 100755
--- a/plugins/org.eclipse.epf.library/src/org/eclipse/epf/library/configuration/ToOneFeatureValue.java
+++ b/plugins/org.eclipse.epf.library/src/org/eclipse/epf/library/configuration/ToOneFeatureValue.java
@@ -52,20 +52,32 @@
 			return null;
 		}
 		
+		Object v = null;
 		Object[] entries = valueMap.entrySet().toArray();
 		if ( size() == 1 ) {
 			// if just one entry, return it
-			return ((Map.Entry)entries[0]).getValue();
+			v = ((Map.Entry)entries[0]).getValue();
 		} else {
 			// if more than one entry, if the first entry is from the element itself, then return the value
 			// otherwise, return null
 			Map.Entry entry = (Map.Entry)entries[0];
 			if ( entry.getKey() == super.element ) {
-				return entry.getValue();
+				v =  entry.getValue();
 			}
 		}
 		
-		return null;
+		if ( ElementRealizer.isExtendReplaceEnabled() ) {
+			if ( v != null && (v instanceof MethodElement) ) {
+				// remove the _NULL_ item. that is used as an indicator to blank out the base 
+				// for the extend-replace
+				MethodElement e = (MethodElement)v;
+				if ( e != null && _NULL_.equals(e.getName()) ) {
+					v = null;
+				}
+			}
+		}
+		
+		return v;
 	}
 
 	public int size() {
diff --git a/plugins/org.eclipse.epf.library/src/org/eclipse/epf/library/configuration/ToOneOppositeFeatureValue.java b/plugins/org.eclipse.epf.library/src/org/eclipse/epf/library/configuration/ToOneOppositeFeatureValue.java
index 52ba2c9..38703de 100755
--- a/plugins/org.eclipse.epf.library/src/org/eclipse/epf/library/configuration/ToOneOppositeFeatureValue.java
+++ b/plugins/org.eclipse.epf.library/src/org/eclipse/epf/library/configuration/ToOneOppositeFeatureValue.java
@@ -79,24 +79,37 @@
 	}
 
 	public Object getValue() {
+		Object v = null;
+		
 		if ( size() == 0 ) {
-			return null;
+			return v;
 		}
 		
 		Object[] entries = valueMap.entrySet().toArray();
 		if ( size() == 1 ) {
 			// if just one entry, return it
-			return ((Map.Entry)entries[0]).getValue();
+			v = ((Map.Entry)entries[0]).getValue();
 		} else {
 			// if more than one entry, if the first entry is from the element itself, then return the value
 			// otherwise, return null
 			Map.Entry entry = (Map.Entry)entries[0];
 			if ( entry.getKey() == super.element ) {
-				return entry.getValue();
+				v = entry.getValue();
 			}
 		}
 		
-		return null;
+		if ( ElementRealizer.isExtendReplaceEnabled() ) {
+			if ( v != null && (v instanceof MethodElement) ) {
+				// remove the _NULL_ item. that is used as an indicator to blank out the base 
+				// for the extend-replace
+				MethodElement e = (MethodElement)v;
+				if ( e != null && _NULL_.equals(e.getName()) ) {
+					v = null;
+				}
+			}
+		}
+		
+		return v;
 	}
 	
 }
diff --git a/plugins/org.eclipse.epf.library/src/org/eclipse/epf/library/layout/LayoutResources.properties b/plugins/org.eclipse.epf.library/src/org/eclipse/epf/library/layout/LayoutResources.properties
index 7aad0ec..e9a45ef 100755
--- a/plugins/org.eclipse.epf.library/src/org/eclipse/epf/library/layout/LayoutResources.properties
+++ b/plugins/org.eclipse.epf.library/src/org/eclipse/epf/library/layout/LayoutResources.properties
@@ -14,7 +14,7 @@
 #externalUrl_startWith=http://|https://|ftp://
 # see all the possible protocals at:
 # http://www.iana.org/assignments/uri-schemes.html
-externalUrl_startWith=[^file][a-zA-Z0-9\\.]{1,15}://
+externalUrl_startWith=[a-zA-Z0-9\\.]{1,15}://
 
 # XSL Stylesheet Mapping for the Method Elements.
 
diff --git a/plugins/org.eclipse.epf.library/src/org/eclipse/epf/library/layout/elements/AbstractProcessElementLayout.java b/plugins/org.eclipse.epf.library/src/org/eclipse/epf/library/layout/elements/AbstractProcessElementLayout.java
index fe04c93..96bd3a6 100755
--- a/plugins/org.eclipse.epf.library/src/org/eclipse/epf/library/layout/elements/AbstractProcessElementLayout.java
+++ b/plugins/org.eclipse.epf.library/src/org/eclipse/epf/library/layout/elements/AbstractProcessElementLayout.java
@@ -62,7 +62,7 @@
 					.getOwningProcess((BreakdownElement) super.element);
 		}
 
-		if (element instanceof Process) {
+		if (LibraryUtil.isProcess(element)) {
 			owningProcess = (Process) element;
 			elementProcessPath = AbstractProcessElementLayout.makePath(null,
 					element);
@@ -182,9 +182,10 @@
 		
 		String path = element.getGuid();
 		BreakdownElement act = element;
-		
+		Process proc = TngUtil.getOwningProcess(element);
+
 		// Check superactivity is process and should owning process (this is useful in deepcopy
-		while ( !((act instanceof Process) && act.equals(TngUtil.getOwningProcess(element))) )
+		while ( act != proc )
 		{
 			Activity superActs = act.getSuperActivities();
 			if ( superActs != null )
diff --git a/plugins/org.eclipse.epf.library/src/org/eclipse/epf/library/layout/elements/ActivityLayout.java b/plugins/org.eclipse.epf.library/src/org/eclipse/epf/library/layout/elements/ActivityLayout.java
index 649dcf1..76a9572 100755
--- a/plugins/org.eclipse.epf.library/src/org/eclipse/epf/library/layout/elements/ActivityLayout.java
+++ b/plugins/org.eclipse.epf.library/src/org/eclipse/epf/library/layout/elements/ActivityLayout.java
@@ -12,6 +12,7 @@
 
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
@@ -30,6 +31,7 @@
 import org.eclipse.epf.library.configuration.ConfigurationHelper;
 import org.eclipse.epf.library.edit.IFilter;
 import org.eclipse.epf.library.edit.process.IBSItemProvider;
+import org.eclipse.epf.library.edit.util.Comparators;
 import org.eclipse.epf.library.edit.util.PredecessorList;
 import org.eclipse.epf.library.edit.util.ProcessUtil;
 import org.eclipse.epf.library.edit.util.Suppression;
@@ -866,15 +868,19 @@
 			additionalTasks.addAll(items);
 		}
 		
+		Collections.sort(responsibleFor, Comparators.PRESENTATION_NAME_COMPARATOR);
 		createRoleRollupNodes(parentXml, responsibleFor, TngUtil
 				.getFeatureText(UmaPackage.eINSTANCE.getRoleDescriptor_ResponsibleFor()));
 
+		Collections.sort(modifies, Comparators.PRESENTATION_NAME_COMPARATOR);
 		createRoleRollupNodes(parentXml, modifies, TngUtil
 				.getFeatureText(UmaPackage.eINSTANCE.getRoleDescriptor_Modifies()));
 
+		Collections.sort(primaryTasks, Comparators.PRESENTATION_NAME_COMPARATOR);
 		createRoleRollupNodes(parentXml, primaryTasks, 
 				LibraryResources.ActivityLayout_primaryTasks_text); 
 
+		Collections.sort(additionalTasks, Comparators.PRESENTATION_NAME_COMPARATOR);
 		createRoleRollupNodes(parentXml, additionalTasks, 
 				LibraryResources.ActivityLayout_additionalTasks_text); 
 
diff --git a/plugins/org.eclipse.epf.library/src/org/eclipse/epf/library/layout/elements/ProcessLayoutData.java b/plugins/org.eclipse.epf.library/src/org/eclipse/epf/library/layout/elements/ProcessLayoutData.java
index 5ffe0f0..f9027a0 100755
--- a/plugins/org.eclipse.epf.library/src/org/eclipse/epf/library/layout/elements/ProcessLayoutData.java
+++ b/plugins/org.eclipse.epf.library/src/org/eclipse/epf/library/layout/elements/ProcessLayoutData.java
@@ -10,7 +10,7 @@
 //------------------------------------------------------------------------------
 package org.eclipse.epf.library.layout.elements;
 
-import java.io.PrintStream;
+import java.io.PrintWriter;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
@@ -55,7 +55,7 @@
 		return activityMap;
 	}
 	
-	public void print(PrintStream ps)
+	public void print(PrintWriter ps)
 	{
 		for ( Iterator it = activityMap.entrySet().iterator(); it.hasNext(); )
 		{
@@ -92,7 +92,7 @@
 		}
 	}
 	
-	private void printImgFile(PrintStream ps, String key, String fileName)
+	private void printImgFile(PrintWriter ps, String key, String fileName)
 	{
 		String line = "imageFiles[\"" + key + "\"]=\"" + fileName + "\"";
 		ps.println(line);
@@ -100,7 +100,7 @@
 		
 	}
 	
-	private void printSuppressedItem(PrintStream ps, String key)
+	private void printSuppressedItem(PrintWriter ps, String key)
 	{
 		String line = "suppressedItems[\"" + key + "\"]=true";
 		ps.println(line);	
diff --git a/plugins/org.eclipse.epf.library/src/org/eclipse/epf/library/prefs/PreferenceUtil.java b/plugins/org.eclipse.epf.library/src/org/eclipse/epf/library/prefs/PreferenceUtil.java
index e571e5b..34613f1 100755
--- a/plugins/org.eclipse.epf.library/src/org/eclipse/epf/library/prefs/PreferenceUtil.java
+++ b/plugins/org.eclipse.epf.library/src/org/eclipse/epf/library/prefs/PreferenceUtil.java
@@ -35,6 +35,10 @@
 	private static Properties xslParams;
 	private static Map colIdLabelMap = new HashMap();
 	
+	// quick solution, the team column for the WBS view.
+	// 162783 - Publish team information in WBS for TDs
+	private static BSColumn teamCol = null;
+	
 	private static final String ID_STEPS = "steps";
 	static {
 		try {
@@ -76,7 +80,16 @@
 	}
 	
 	public static List getWBSColumns() {
-		return getPreferenceItems(PreferenceConstants.PREF_WBS_COLUMNS);
+		List cols = getPreferenceItems(PreferenceConstants.PREF_WBS_COLUMNS);
+		
+		// if the TBS columns has team, also add to the WBS
+		// 162783 - Publish team information in WBS for TDs
+		teamCol = null;
+		getTBSColumns();
+		if ( teamCol != null ) {
+			cols.add(cols.size(), teamCol);
+		}
+		return cols;
 	}
 	
 	public static List getTBSColumns() {
@@ -121,6 +134,12 @@
 					col = new BSColumn(ID_STEPS, getColText(ID_STEPS));
 					items.add(col);
 				}
+				
+				// save the team column for WBS
+				// 162783 - Publish team information in WBS for TDs
+				if ( IBSItemProvider.COL_TEAMS.equals(id) ) {
+					teamCol = col;
+				}
 			}
 		}
 		
diff --git a/plugins/org.eclipse.epf.library/src/org/eclipse/epf/library/util/LibraryUtil.java b/plugins/org.eclipse.epf.library/src/org/eclipse/epf/library/util/LibraryUtil.java
index 81a1c7a..1dd9032 100755
--- a/plugins/org.eclipse.epf.library/src/org/eclipse/epf/library/util/LibraryUtil.java
+++ b/plugins/org.eclipse.epf.library/src/org/eclipse/epf/library/util/LibraryUtil.java
@@ -591,4 +591,9 @@
 
 		return true;
 	}
+	
+	public static boolean isProcess(EObject e) {
+		return (e instanceof org.eclipse.epf.uma.Process) && 
+			(e.eContainer() instanceof ProcessComponent);
+	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.epf.library/src/org/eclipse/epf/library/util/ResourceHelper.java b/plugins/org.eclipse.epf.library/src/org/eclipse/epf/library/util/ResourceHelper.java
index 034a3f0..00c6146 100755
--- a/plugins/org.eclipse.epf.library/src/org/eclipse/epf/library/util/ResourceHelper.java
+++ b/plugins/org.eclipse.epf.library/src/org/eclipse/epf/library/util/ResourceHelper.java
@@ -1178,18 +1178,25 @@
 					"(" + EXTERNAL_URL_START_WITH + ")", Pattern.CASE_INSENSITIVE | Pattern.DOTALL); //$NON-NLS-1$
 
 	public static boolean isExternalLink(String url) {
-		// return url.startsWith("http://") || url.startsWith("www.") ||
-		// url.startsWith("ftp://") ; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 		
+		// 162969 - Refine external link's regular exp in epf.library/layout/LayoutResources.properties
 		// file:// should be excluded
 		if ( url == null ) {
 			return false;
 		}
 		
-		if ( url.toLowerCase().startsWith("file://") ) {  //$NON-NLS-1$
+		url = url.toLowerCase();
+		if ( url.startsWith("file://") ) {  //$NON-NLS-1$
 			return false;
 		}
 		
+		if ( url.startsWith("http://") 	//$NON-NLS-1$
+				|| url.startsWith("https://") //$NON-NLS-1$
+				|| url.startsWith("ftp://")  //$NON-NLS-1$
+				|| url.startsWith("www.") ) { //$NON-NLS-1$
+			return true;
+		}
+		
 		Matcher m = p_external_url_startWith.matcher(url);
 		if (m.find()) {
 			return (m.start(1) == 0);
diff --git a/plugins/org.eclipse.epf.msproject/META-INF/MANIFEST.MF b/plugins/org.eclipse.epf.msproject/META-INF/MANIFEST.MF
index 2bae44e..0fd83b1 100755
--- a/plugins/org.eclipse.epf.msproject/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.epf.msproject/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.epf.msproject; singleton:=true
-Bundle-Version: 1.0.1
+Bundle-Version: 1.0.2
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
 Export-Package: org.eclipse.epf.msproject,
diff --git a/plugins/org.eclipse.epf.platform.feature/feature.xml b/plugins/org.eclipse.epf.platform.feature/feature.xml
index 63d6ed7..3726af8 100755
--- a/plugins/org.eclipse.epf.platform.feature/feature.xml
+++ b/plugins/org.eclipse.epf.platform.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.epf.platform"
       label="%featureName"
-      version="1.0.1"
+      version="1.0.2"
       provider-name="%providerName"
       os="linux,win32"
       ws="gtk,win32"
@@ -25,345 +25,349 @@
       <update label="%updateSiteName" url="http://update.eclipse.org/updates/3.2"/>
    </url>
 
+   <includes
+         id="org.eclipse.platform.launchers"
+         version="0.0.0"/>
+
    <plugin
          id="com.ibm.icu"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="3.4.4.1"
          unpack="false"/>
 
    <plugin
          id="org.apache.ant"
          download-size="0"
          install-size="0"
-         version="0.0.0"/>
+         version="1.6.5"/>
 
    <plugin
          id="org.apache.lucene"
          download-size="0"
          install-size="0"
-         version="0.0.0"/>
+         version="1.4.103.v20060601"/>
 
    <plugin
          id="org.eclipse.ant.core"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="3.1.100.v20060531"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.core.commands"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="3.2.0.I20060605-1400"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.core.contenttype"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="3.2.0.v20060603"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.core.expressions"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="3.2.0.v20060605-1400"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.core.filesystem"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="1.0.0.v20060603"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.core.jobs"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="3.2.0.v20060603"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.core.resources"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="3.2.0.v20060603"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.core.runtime"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="3.2.0.v20060603"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.core.runtime.compatibility"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="3.1.100.v20060603"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.core.runtime.compatibility.auth"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="3.2.0.v20060601"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.core.variables"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="3.1.100.v20060605"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.draw2d"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="3.2.0.v20060626"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.emf.common"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="2.2.0.v200606271057"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.emf.common.ui"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="2.2.0.v200606271057"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.emf.commonj.sdo"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="2.1.0.v200606271057"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.emf.ecore"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="2.2.0.v200606271057"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.emf.ecore.xmi"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="2.2.0.v200606271057"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.emf.edit"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="2.2.0.v200606271057"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.emf.edit.ui"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="2.2.0.v200606271057"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.emf.mapping"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="2.2.0.v200606271057"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.emf.mapping.ecore2ecore"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="2.2.0.v200606271057"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.emf.mapping.ecore2xml"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="2.2.0.v200606271057"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.equinox.common"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="3.2.0.v20060603"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.equinox.preferences"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="3.2.0.v20060601"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.equinox.registry"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="3.2.0.v20060601"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.gef"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="3.2.0.v20060626"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.help"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="3.2.0.v20060602"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.help.appserver"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="3.1.100.v20060602"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.help.base"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="3.2.0.v20060601"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.help.ui"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="3.2.0.v20060602"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.jface"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="3.2.0.I20060605-1400"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.jface.text"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="3.2.0.v20060605-1400"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.osgi"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="3.2.0.v20060601"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.swt"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="3.2.0.v3232o"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.text"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="3.2.0.v20060605-1400"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.ui"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="3.2.0.I20060605-1400"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.ui.cheatsheets"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="3.2.0.v20060602"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.ui.forms"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="3.2.0.v20060602"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.ui.ide"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="3.2.0.I20060605-1400"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.ui.intro"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="3.2.0.v20060601"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.ui.views"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="3.2.0.I20060605-1400"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.ui.views.properties.tabbed"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="3.2.0.I20060605-1400"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.ui.workbench"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="3.2.0.I20060605-1400"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.update.configurator"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="3.2.0.v20060605"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.update.core"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="3.2.0.v20060605"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.update.ui"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="3.2.0.v20060605"
          unpack="false"/>
 
    <plugin
@@ -373,7 +377,7 @@
          arch="x86"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="3.2.0.I20060605-1400"
          fragment="true"
          unpack="false"/>
 
@@ -384,7 +388,7 @@
          arch="x86"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="1.0.0.v20060603"
          fragment="true"
          unpack="false"/>
 
@@ -395,7 +399,7 @@
          arch="x86"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="3.2.0.v20060603"
          fragment="true"
          unpack="false"/>
 
@@ -406,7 +410,7 @@
          arch="x86"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="3.2.0.v3232m"
          fragment="true"
          unpack="false"/>
 
@@ -417,7 +421,7 @@
          arch="x86"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="3.2.0.v20060605"
          fragment="true"
          unpack="false"/>
 
@@ -425,54 +429,54 @@
          id="org.eclipse.emf.ecore.change"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="2.2.0.v200606271057"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.emf.ecore.edit"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="2.2.0.v200606271057"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.emf.ecore.sdo"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="2.2.0.v200606271057"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.help.webapp"
          download-size="0"
          install-size="0"
-         version="0.0.0"/>
+         version="3.2.0.v20060602"/>
 
    <plugin
          id="org.eclipse.tomcat"
          download-size="0"
          install-size="0"
-         version="0.0.0"/>
+         version="4.1.130.v20060601"/>
 
    <plugin
          id="org.eclipse.core.filebuffers"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="3.2.0.v20060605-1400"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.search"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="3.2.0.v20060605-1400"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.ui.workbench.texteditor"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="3.2.0.v20060605-1400"
          unpack="false"/>
 
    <plugin
@@ -482,7 +486,7 @@
          arch="x86"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="1.0.0.v20060603"
          fragment="true"
          unpack="false"/>
 
@@ -493,7 +497,7 @@
          arch="x86"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="3.2.0.v3232m"
          fragment="true"
          unpack="false"/>
 
@@ -504,7 +508,7 @@
          arch="x86"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="3.2.0.v20060605"
          fragment="true"
          unpack="false"/>
 
@@ -512,90 +516,90 @@
          id="org.eclipse.team.core"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="3.2.0.I200606051140"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.team.cvs.core"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="3.2.0.M20060628"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.team.cvs.ssh"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="3.2.0.I200606011710"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.team.cvs.ssh2"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="3.2.0.I200606051140"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.team.cvs.ui"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="3.2.0.I200606051140"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.team.ui"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="3.2.0.I200606051140"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.compare"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="3.2.0.v20060605"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.ui.console"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="3.1.100.v20060605"
          unpack="false"/>
 
    <plugin
          id="com.jcraft.jsch"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="0.1.28"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.ui.navigator"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="3.2.0.I20060605-1400"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.ui.navigator.resources"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="3.2.0.I20060605-1400"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.ui.editors"
          download-size="0"
          install-size="0"
-         version="0.0.0"
+         version="3.2.0.v20060605-1400"
          unpack="false"/>
 
    <plugin
          id="org.eclipse.epf.platform"
          download-size="0"
          install-size="0"
-         version="0.0.0"/>
+         version="1.0.2"/>
 
 </feature>
diff --git a/plugins/org.eclipse.epf.platform/about.properties b/plugins/org.eclipse.epf.platform/about.properties
index 39c8189..8c83423 100755
--- a/plugins/org.eclipse.epf.platform/about.properties
+++ b/plugins/org.eclipse.epf.platform/about.properties
@@ -24,12 +24,12 @@
 #
 # Do not translate any values surrounded by {}
 
-featureName=Eclipse Platform 3.2.0 with EMF and GEF 
+featureName=Eclipse Platform 3.2.1 with EMF and GEF 
 
 blurb=Eclipse Platform\n\
 \n\
-Version: 3.2.0\n\
-Build id: M20060629-1905\n\
+Version: 3.2.1\n\
+Build id: M20060921-0945\n\
 \n\
 (c) Copyright Eclipse contributors and others 2000, 2006.  All rights reserved.\n\
 Visit http://www.eclipse.org/platform\n\
diff --git a/plugins/org.eclipse.epf.platform/plugin.xml b/plugins/org.eclipse.epf.platform/plugin.xml
index 4e97255..e76071d 100755
--- a/plugins/org.eclipse.epf.platform/plugin.xml
+++ b/plugins/org.eclipse.epf.platform/plugin.xml
@@ -3,7 +3,7 @@
 <plugin
    id="org.eclipse.epf.platform"
    name="%featurePluginName"
-   version="1.0.1"
+   version="1.0.2"
    provider-name="%providerName">
 
 </plugin>
diff --git a/plugins/org.eclipse.epf.publisher/META-INF/MANIFEST.MF b/plugins/org.eclipse.epf.publisher/META-INF/MANIFEST.MF
index 5c6b117..0508c89 100755
--- a/plugins/org.eclipse.epf.publisher/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.epf.publisher/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.epf.publisher;singleton:=true
-Bundle-Version: 1.0.1
+Bundle-Version: 1.0.2
 Bundle-Activator: org.eclipse.epf.publisher.PublisherPlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
diff --git a/plugins/org.eclipse.epf.publishing.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.epf.publishing.ui/META-INF/MANIFEST.MF
index 5c7c017..8271924 100755
--- a/plugins/org.eclipse.epf.publishing.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.epf.publishing.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.epf.publishing.ui; singleton:=true
-Bundle-Version: 1.0.1
+Bundle-Version: 1.0.2
 Bundle-Activator: org.eclipse.epf.publishing.ui.PublishingUIPlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
diff --git a/plugins/org.eclipse.epf.publishing/META-INF/MANIFEST.MF b/plugins/org.eclipse.epf.publishing/META-INF/MANIFEST.MF
index 356f695..1366e42 100755
--- a/plugins/org.eclipse.epf.publishing/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.epf.publishing/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.epf.publishing
-Bundle-Version: 1.0.1
+Bundle-Version: 1.0.2
 Bundle-ClassPath: publishing.jar, lib/rpwcore.jar
 Bundle-Activator: org.eclipse.epf.publishing.PublishingPlugin
 Bundle-Vendor: %providerName
diff --git a/plugins/org.eclipse.epf.publishing/docroot/noapplet/toc.js b/plugins/org.eclipse.epf.publishing/docroot/noapplet/toc.js
index dc37da9..799786e 100755
--- a/plugins/org.eclipse.epf.publishing/docroot/noapplet/toc.js
+++ b/plugins/org.eclipse.epf.publishing/docroot/noapplet/toc.js
@@ -512,12 +512,19 @@
   	var plus_minus = getPlusMinus(clickedNode);
   	if (plus_minus != null)
   	{	
-    	if (isCollapsed(plus_minus)) 
-   			expand(plus_minus);
-  		else if (isExpanded(plus_minus)) 
-  	  		collapse(plus_minus);
-  	  		  		  
-  		highlightTopic(plus_minus);
+    	if (clickedNode.tagName == "A" && getChildNode(clickedNode.parentNode, "UL") == null) 
+  		{
+  			highlightTopic(plus_minus);
+  		}
+  		else
+  		{  		
+    		if (isCollapsed(plus_minus)) 
+   				expand(plus_minus);
+  			else if (isExpanded(plus_minus)) 
+  	  			collapse(plus_minus);  	  		  		  
+  	  			
+  			highlightTopic(plus_minus);
+  		}
   	}
   
   	if (isMozilla)
diff --git a/plugins/org.eclipse.epf.publishing/src/org/eclipse/epf/publishing/services/ConfigurationViewBuilder.java b/plugins/org.eclipse.epf.publishing/src/org/eclipse/epf/publishing/services/ConfigurationViewBuilder.java
index bda1143..35630ff 100755
--- a/plugins/org.eclipse.epf.publishing/src/org/eclipse/epf/publishing/services/ConfigurationViewBuilder.java
+++ b/plugins/org.eclipse.epf.publishing/src/org/eclipse/epf/publishing/services/ConfigurationViewBuilder.java
@@ -12,7 +12,8 @@
 
 import java.io.File;
 import java.io.FileOutputStream;
-import java.io.PrintStream;
+import java.io.OutputStreamWriter;
+import java.io.PrintWriter;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
@@ -149,36 +150,23 @@
 
 	protected EObjectComparator nameComparator = new EObjectComparator();
 	
+	/**
+	 * constructor
+	 * 
+	 * @param builder HtmlBuilder
+	 * @param options PublishOptions
+	 */
 	public ConfigurationViewBuilder(HtmlBuilder builder, PublishOptions options) {
 		super(builder, options);
 	}
 
-//	public static ConfigurationViewBuilder getViewBuilder(String pubDir,
-//			MethodConfiguration config, PublishOptions options) {
-//		boolean validateExternalLinks = (options != null)
-//				&& options.checkExtLinks;
-//
-//		PublishingContentValidator validator = null;
-//		ElementRealizer realizer = null;
-//		if ((options != null) && options.publishProcess) {
-//			validator = new ProcessPublishingContentValidator(pubDir,
-//					validateExternalLinks);
-//			realizer = new ProcessPublishingElementRealizer(config, 
-//					(ProcessPublishingContentValidator)validator);
-//		} else {
-//			validator = new PublishingContentValidator(pubDir,
-//					validateExternalLinks);
-//			realizer = new PublishingElementRealizer(config, validator);
-//		}
-//
-//		ElementLayoutManager layoutMgr = new ElementLayoutManager(config,
-//				pubDir, validator, true);
-//		layoutMgr.setElementRealizer(realizer);
-//		HtmlBuilder builder = new HtmlBuilder(layoutMgr);
-//
-//		return new ConfigurationViewBuilder(builder, options);
-//	}
 
+	/**
+	 * build the views defined in the configuration and publish the related contents
+	 * 
+	 * @param monitor IProgressMonitor
+	 * @return List a list of Bookmarks for the views
+	 */
 	public List buildViews(IProgressMonitor monitor)
 	{
 		this.monitor = monitor;
@@ -307,7 +295,7 @@
 				// collect process specific layout info with suppression status
 				// this will incldue the diagrams and the supression states of
 				// each item under the current procee
-				if (e instanceof org.eclipse.epf.uma.Process) {
+				if ( LibraryUtil.isProcess(e)) {
 					publishProcessLayout((org.eclipse.epf.uma.Process) e);
 				}
 
@@ -377,12 +365,13 @@
 				if (e instanceof MethodPlugin || e instanceof MethodPackage) {
 					continue;
 				}
+								
 				super.publish(monitor, e);
 
 				// collect process specific layout info with suppression status
 				// this will incldue the diagrams and the supression states of
 				// each item under the current procee
-				if (e instanceof org.eclipse.epf.uma.Process) {
+				if ( LibraryUtil.isProcess(e)) {
 					publishProcessLayout((org.eclipse.epf.uma.Process) e);
 				}
 			} catch (Exception ex) {
@@ -446,78 +435,30 @@
 	private void printLayoutScript(ProcessLayoutData data) {
 		File outputFile = new File(getLayoutMgr().getPublishDir(),
 				"/scripts/activitylayout.js"); //$NON-NLS-1$
-		PrintStream ps = null;
+		PrintWriter pw = null;
 		try {
-			ps = new PrintStream(new FileOutputStream(outputFile, true), true);
-			data.print(ps);
+			// create a stream with append enabled
+			FileOutputStream os = new FileOutputStream(outputFile, true);
+			
+			// create a write with utf-8 encoding
+			OutputStreamWriter writer = new OutputStreamWriter(os, "utf-8");	//$NON-NLS-1$
+			
+			// create a print writer with auto flush
+			pw = new PrintWriter(writer, true);
+			data.print(pw);
 		} catch (Exception e) {
+			getValidator()
+				.logError("unable to save process layout data", e); //$NON-NLS-1$
 
 		} finally {
-			if (ps != null) {
-				ps.flush();
-				ps.close();
+			if (pw != null) {
+				pw.flush();
+				pw.close();
 			}
 		}
 
 	}
 
-	// /**
-	// * build a closure for the element and fill the list with the elements
-	// referenced by this element and it's referenced elements, ..., within the
-	// configuration
-	// * @param element MethodElement
-	// * @param colsureElements List
-	// */
-	// private void buildElementClosure(MethodElement element,
-	// MethodConfiguration config, List closureElements)
-	// {
-	// if ( monitor != null )
-	// {
-	// monitor.subTask(PublishingResources.formatString("Publishing.buildingElementClosureTask.name",
-	// element.getName()) ); //$NON-NLS-1$
-	// }
-	//
-	// List properties = element.getInstanceProperties();
-	// if (properties != null)
-	// {
-	// // get element references
-	// for (int i = 0; i < properties.size(); i++)
-	// {
-	// EStructuralFeature feature = (EStructuralFeature)properties.get(i);
-	// EClassifier type = feature.getEType();
-	// if ( !(type instanceof EClass) )
-	// {
-	// continue;
-	// }
-	//
-	// if ( feature.isMany() )
-	// {
-	// List items = calc0nFeatureValue(element, feature);
-	// if ( items != null && items.size() > 0 )
-	// {
-	// for ( Iterator it = items.iterator(); it.hasNext(); )
-	// {
-	// MethodElement e = (MethodElement) it.next();
-	// if ( (e != null) && (e != element) && !closureElements.contains(e) )
-	// {
-	// closureElements.add(e);
-	// buildElementClosure(e, config, closureElements);
-	// }
-	// }
-	// }
-	// }
-	// else
-	// {
-	// MethodElement e = calc01FeatureValue(element, feature);
-	// if ( (e != null) && (e != element) && !closureElements.contains(e) )
-	// {
-	// closureElements.add(e);
-	// buildElementClosure(e, config, closureElements);
-	// }
-	// }
-	// }
-	// }
-	// }
 
 	/**
 	 * Iterate thru tuee
@@ -650,7 +591,7 @@
 			buildRoleSubTree((Role) element, bm);
 		} else if (element instanceof WorkProduct) {
 			buildWorkProductSubTree((WorkProduct) element, bm);
-		} else if (element instanceof org.eclipse.epf.uma.Process) {
+		} else if ( LibraryUtil.isProcess(element)) {
 			buildProcessSubTree(obj, (org.eclipse.epf.uma.Process) element, bm);
 		} else {
 			// System.out.println("Not handled: " + element);
@@ -1297,29 +1238,6 @@
 
 		List items;
 		String url = ""; //$NON-NLS-1$
-		// Bookmark b;
-
-		// // performing roles, 0.1 reference element will be realized in
-		// buildItem
-		// Role r = AssociationHelper.getResponsibleRole(element);
-		// if ( r != null )
-		// {
-		// items = new ArrayList();
-		// items.add(r);
-		// createFolderBookmark(element, bm, NODE_Responsible_Role, items,
-		// true);
-		// }
-
-		// WorkProduct wp = ((Artifact)element).getContainerArtifact();
-		// createBookmark(NODE_Containing_Work_Product,
-		// NODE_Containing_Work_Product, url, "", "");
-		// if ( wp != null )
-		// {
-		// items = new ArrayList();
-		// items.add(wp);
-		// createFolderBookmark(element, bm, NODE_Containing_Work_Product,
-		// items, true);
-		// }
 
 		// contained work products, need a summary page, TODO
 		// items = ((Artifact)element).getContainedArtifacts();
@@ -1350,24 +1268,6 @@
 			}
 		}
 
-		// // input to tasks
-		// items = new ArrayList();
-		// items.addAll(ConfigurationHelper.calc0nFeatureValue(element,
-		// AssociationHelper.WorkProduct_MandatoryInputTo_Tasks, config));
-		// items.addAll(ConfigurationHelper.calc0nFeatureValue(element,
-		// AssociationHelper.WorkProduct_OptionalInputTo_Tasks, config));
-		// if ( items.size() > 0 )
-		// {
-		// createFolderBookmark(element, bm, NODE_InputTo_Task, items, true);
-		// }
-		//
-		// // output from tasks
-		// items = ConfigurationHelper.calc0nFeatureValue(element,
-		// AssociationHelper.WorkProduct_OutputFrom_Tasks, config);
-		// if ( items.size() > 0 )
-		// {
-		// createFolderBookmark(element, bm, NODE_OutputOf_Task, items, true);
-		// }
 
 		if (!showGuidances) {
 			return;
@@ -1500,51 +1400,9 @@
 		Suppression sup = new Suppression(element);
 		iterateActivity(procItem, bm, adapterFactory, sup);
 
-		// ITreeItemContentProvider provider = null;
-		//		
-		// if ( obj instanceof ITreeItemContentProvider )
-		// {
-		// provider = (ITreeItemContentProvider)obj;
-		// }
-		// else
-		// {
-		// // work breakdown structure
-		// ComposedAdapterFactory adapterFactory =
-		// TngAdapterFactory.INSTANCE.getWBS_ComposedAdapterFactory();
-		// provider = (ITreeItemContentProvider) adapterFactory.adapt(element,
-		// ITreeItemContentProvider.class);
-		// }
-		//		
-		// if (provider != null )
-		// {
-		// Collection children = provider.getChildren(element) ;
-		// for (Iterator it = children.iterator(); it.hasNext();)
-		// {
-		// items.add(LibraryUtil.unwrap(it.next()));
-		// }
-		// }
-
 		String url;
 		Bookmark b;
 
-		// if ( items.size() > 0 )
-		// {
-		// //createFolderBookmark(element, bm, NODE_Work_Break_Down_Structure,
-		// items, true);
-		// buildItems(items, bm);
-		// }
-
-		// // included patterns, need a summary page, TODO
-		// //items = element.getIncludesPatterns();
-		// items = ConfigurationHelper.calc0nFeatureValue(element,
-		// UmaPackage.eINSTANCE.getProcess_IncludesPatterns(), config);
-		//
-		// if ( items.size() > 0 )
-		// {
-		// createFolderBookmark(element, bm, NODE_Included_Patterns, items,
-		// true);
-		// }
-
 		if (monitor.isCanceled()) {
 			return;
 		}
@@ -1574,6 +1432,9 @@
 		}
 	}
 
+	/**
+	 * dispose the object
+	 */
 	public void dispose() {
 		super.dispose();
 		
@@ -1611,12 +1472,25 @@
 		FileUtil.writeUTF8File(f.getAbsolutePath(), html, true);
 	}
 
+	/**
+	 * data structure to define url of an element
+	 * 
+	 * @author Jinhua Xi
+	 *
+	 */
 	public class ElementUrl{
 
 		String guid;
 		String url; 
 		String text;
 		
+		/**
+		 * constructor
+		 * 
+		 * @param guid String the guid of the element
+		 * @param url String the url of the element
+		 * @param text String the text alone with the url
+		 */
 		public ElementUrl(String guid, String url, String text) {
 			this.guid = guid;
 			this.url = url;
diff --git a/plugins/org.eclipse.epf.publishing/src/org/eclipse/epf/publishing/services/ProcessPublishingContentValidator.java b/plugins/org.eclipse.epf.publishing/src/org/eclipse/epf/publishing/services/ProcessPublishingContentValidator.java
index bbabb0b..f8af7d7 100755
--- a/plugins/org.eclipse.epf.publishing/src/org/eclipse/epf/publishing/services/ProcessPublishingContentValidator.java
+++ b/plugins/org.eclipse.epf.publishing/src/org/eclipse/epf/publishing/services/ProcessPublishingContentValidator.java
@@ -15,6 +15,7 @@
 import java.util.Iterator;
 import java.util.List;
 
+import org.eclipse.epf.library.configuration.ConfigurationHelper;
 import org.eclipse.epf.library.util.LibraryUtil;
 import org.eclipse.epf.publishing.PublishingPlugin;
 import org.eclipse.epf.uma.BreakdownElement;
@@ -104,15 +105,20 @@
 		if ( !hasClosure() ) {
 			return true;
 		}
-		
-		if ( closureElements.contains(e) ) {
-			return true;
-		}
-		
+				
 		if ( e instanceof ContentCategory ) {
 			return true;
 		}
 		
+		// 166048 - check-items, task-steps don't appear when using the publishing type "publish the processes selected below"
+		if ( ConfigurationHelper.isDescriptionElement(e) ) {
+			return true;
+		}
+
+		if ( closureElements.contains(e) ) {
+			return true;
+		}
+
 		if ( !(e instanceof Guidance) ) {
 			return false;
 		}
diff --git a/plugins/org.eclipse.epf.rcp/beacon.product b/plugins/org.eclipse.epf.rcp/beacon.product
index 3c011f9..3ca61cd 100755
--- a/plugins/org.eclipse.epf.rcp/beacon.product
+++ b/plugins/org.eclipse.epf.rcp/beacon.product
@@ -8,7 +8,7 @@
       <text>
          Eclipse Process Framework Composer 
 
-Version: 1.0.1-N20061109-1435-PLE
+Version: 1.0.2-N20061228-1455
 
 (c) Copyright Eclipse contributors and others 2004, 2006. All Rights Reserved.
       </text>
@@ -17,7 +17,7 @@
    <configIni use="default"/>
 
    <launcherArgs>
-      <programArgs>-data @user.home/EPF/workspace.20061109-1435 -defaultlibrary OpenUP</programArgs>
+      <programArgs>-data @user.home/EPF/workspace.20061228-1455 -defaultlibrary OpenUP</programArgs>
       <vmArgs>-Xms64m -Xmx512m</vmArgs>
    </launcherArgs>
 
@@ -36,14 +36,8 @@
    </plugins>
 
    <features>
-      <feature id="org.eclipse.epf.base" version="1.0.1"/>
-      <feature id="org.eclipse.epf.base.nl1" version="1.0.1"/>
-      <feature id="org.eclipse.epf.base.nl2" version="1.0.1"/>
-      <feature id="org.eclipse.epf.base.nl2a" version="1.0.1"/>
-      <feature id="org.eclipse.epf.platform" version="1.0.1"/>
-      <feature id="org.eclipse.epf.platform.nl1" version="1.0.1"/>
-      <feature id="org.eclipse.epf.platform.nl2" version="1.0.1"/>
-      <feature id="org.eclipse.epf.platform.nl2a" version="1.0.1"/>
+      <feature id="org.eclipse.epf.base" version="1.0.2"/>
+      <feature id="org.eclipse.epf.platform" version="1.0.2"/>
    </features>
 
 </product>
diff --git a/plugins/org.eclipse.epf.rcp/plugin.xml b/plugins/org.eclipse.epf.rcp/plugin.xml
index 7b1ea12..2ea42ea 100755
--- a/plugins/org.eclipse.epf.rcp/plugin.xml
+++ b/plugins/org.eclipse.epf.rcp/plugin.xml
@@ -3,7 +3,7 @@
 <plugin
    id="org.eclipse.epf.rcp"
    name="%pluginName"
-   version="1.0.1"
+   version="1.0.2"
    provider-name="%providerName"
    class="org.eclipse.epf.rcp.MainPlugin">
 
@@ -54,7 +54,7 @@
                value="icons/about.gif"/>
          <property
                name="aboutText"
-               value="Eclipse Process Framework Composer &#x0A;&#x0A;Version: 1.0.1-N20061109-1435-PLE&#x0A;&#x0A;(c) Copyright Eclipse contributors and others 2004, 2006. All Rights Reserved."/>
+               value="Eclipse Process Framework Composer &#x0A;&#x0A;Version: 1.0.2-N20061228-1455&#x0A;&#x0A;(c) Copyright Eclipse contributors and others 2004, 2006. All Rights Reserved."/>
          <property
                name="windowImages"
                value="icons/full/obj16/product.gif,icons/full/obj32/product32.gif"/>
@@ -66,9 +66,9 @@
       <intro
             class="org.eclipse.ui.intro.config.CustomizableIntroPart"
             icon="icons/full/obj16/product.gif"
-            id="org.eclipse.ui.intro"/>
+            id="org.eclipse.epf.intro"/>
          <introProductBinding
-               introId="org.eclipse.ui.intro"
+               introId="org.eclipse.epf.intro"
                productId="org.eclipse.epf.rcp.beacon"/>
    </extension>
      
@@ -77,7 +77,7 @@
       <config
             content="$nl$/introContent.xml"
             id="org.eclipse.ui.intro.config"
-            introId="org.eclipse.ui.intro">
+            introId="org.eclipse.epf.intro">
          <presentation home-page-id="root" standby-page-id="standby">
            	<implementation
            	  	   ws="win32,gtk"
diff --git a/plugins/org.eclipse.epf.richtext/META-INF/MANIFEST.MF b/plugins/org.eclipse.epf.richtext/META-INF/MANIFEST.MF
index 62c3368..335317b 100755
--- a/plugins/org.eclipse.epf.richtext/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.epf.richtext/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.epf.richtext
-Bundle-Version: 1.0.1
+Bundle-Version: 1.0.2
 Bundle-ClassPath: richtext.jar
 Bundle-Activator: org.eclipse.epf.richtext.RichTextPlugin
 Bundle-Vendor: %providerName
diff --git a/plugins/org.eclipse.epf.search.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.epf.search.ui/META-INF/MANIFEST.MF
index d47717f..285f39a 100755
--- a/plugins/org.eclipse.epf.search.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.epf.search.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.epf.search.ui; singleton:=true
-Bundle-Version: 1.0.1
+Bundle-Version: 1.0.2
 Bundle-Activator: org.eclipse.epf.search.ui.SearchUIPlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
diff --git a/plugins/org.eclipse.epf.search.ui/plugin.xml b/plugins/org.eclipse.epf.search.ui/plugin.xml
index 248df04..f4dee4b 100755
--- a/plugins/org.eclipse.epf.search.ui/plugin.xml
+++ b/plugins/org.eclipse.epf.search.ui/plugin.xml
@@ -8,7 +8,7 @@
             label="%methodSearchDialogLabel"
             icon="icons/full/obj16/MethodSearch.gif"
             sizeHint="250,160"
-            tabPosition="1"
+            tabPosition="0"
             extensions="*:1"
             showScopeSection="false"		
             canSearchEnclosingProjects="false">
diff --git a/plugins/org.eclipse.epf.search/META-INF/MANIFEST.MF b/plugins/org.eclipse.epf.search/META-INF/MANIFEST.MF
index f4ffab6..191b6ed 100755
--- a/plugins/org.eclipse.epf.search/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.epf.search/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.epf.search
-Bundle-Version: 1.0.1
+Bundle-Version: 1.0.2
 Bundle-Activator: org.eclipse.epf.search.SearchPlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
diff --git a/plugins/org.eclipse.epf.uma.ecore/META-INF/MANIFEST.MF b/plugins/org.eclipse.epf.uma.ecore/META-INF/MANIFEST.MF
index e35e676..07b5a3e 100755
--- a/plugins/org.eclipse.epf.uma.ecore/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.epf.uma.ecore/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.epf.uma.ecore
-Bundle-Version: 1.0.1
+Bundle-Version: 1.0.2
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
 Require-Bundle: org.eclipse.core.resources,
diff --git a/plugins/org.eclipse.epf.uma.edit/META-INF/MANIFEST.MF b/plugins/org.eclipse.epf.uma.edit/META-INF/MANIFEST.MF
index 6ded986..eec0765 100755
--- a/plugins/org.eclipse.epf.uma.edit/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.epf.uma.edit/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.epf.uma.edit;singleton:=true
 Bundle-ClassPath: umaedit.jar
-Bundle-Version: 1.0.1
+Bundle-Version: 1.0.2
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
 Require-Bundle: org.eclipse.core.runtime,
diff --git a/plugins/org.eclipse.epf.uma/META-INF/MANIFEST.MF b/plugins/org.eclipse.epf.uma/META-INF/MANIFEST.MF
index eccaf84..83f6574 100755
--- a/plugins/org.eclipse.epf.uma/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.epf.uma/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.epf.uma;singleton:=true
-Bundle-Version: 1.0.1
+Bundle-Version: 1.0.2
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
 Require-Bundle: org.eclipse.core.runtime,
diff --git a/plugins/org.eclipse.epf.xml.uma/META-INF/MANIFEST.MF b/plugins/org.eclipse.epf.xml.uma/META-INF/MANIFEST.MF
index 0343958..d068ddc 100755
--- a/plugins/org.eclipse.epf.xml.uma/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.epf.xml.uma/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.epf.xml.uma; singleton:=true
-Bundle-Version: 1.0.1
+Bundle-Version: 1.0.2
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
 Export-Package: org.eclipse.epf.xml.uma,