diff --git a/org.eclipse.epf.library.tests/src/org/eclipse/epf/library/tester/TesterOutputUtil.java b/org.eclipse.epf.library.tests/src/org/eclipse/epf/library/tester/TesterOutputUtil.java
index 0700736..95a6a0e 100644
--- a/org.eclipse.epf.library.tests/src/org/eclipse/epf/library/tester/TesterOutputUtil.java
+++ b/org.eclipse.epf.library.tests/src/org/eclipse/epf/library/tester/TesterOutputUtil.java
@@ -21,6 +21,7 @@
 import org.eclipse.epf.uma.MethodElement;
 import org.eclipse.epf.uma.MethodLibrary;
 import org.eclipse.epf.uma.MethodPlugin;
+import org.eclipse.epf.uma.ProcessElement;
 import org.eclipse.epf.uma.ProcessPackage;
 
 /**
@@ -88,7 +89,24 @@
 		return getMethodConfiguration(lib, firstPath);
 	}
 	
-	public static ProcessPackage getBreakdownElementParent(MethodLibrary lib, 
+	public static ProcessElement getProcessElement(MethodLibrary lib, String path) {
+		int ix = path.lastIndexOf("/");
+		String parentPath = path.substring(0, ix);
+		String name = path.substring(ix);
+		
+		ProcessPackage outerParent = getProcessElementParent(lib, parentPath, name);
+		
+		Map nameMap = getMethodElementNameMap(outerParent.getChildPackages());
+		ProcessPackage innerParent = (ProcessPackage) nameMap.get(name);
+		List pes = innerParent.getProcessElements();
+		if (pes.size() != 1) {
+			System.out.println("LD> pes.size() != 1");
+		}
+		
+		return (ProcessElement) pes.get(0);
+	}
+	
+	public static ProcessPackage getProcessElementParent(MethodLibrary lib, 
 			String parentPath, String beName) {
 		if (parentPath == null || parentPath.length() == 0) {
 			return null;
diff --git a/org.eclipse.epf.library.tests/src/org/eclipse/epf/library/tester/impl/testcommands/TCEditMethodElementBase.java b/org.eclipse.epf.library.tests/src/org/eclipse/epf/library/tester/impl/testcommands/TCEditMethodElementBase.java
index 83ac6b9..fe25a5f 100644
--- a/org.eclipse.epf.library.tests/src/org/eclipse/epf/library/tester/impl/testcommands/TCEditMethodElementBase.java
+++ b/org.eclipse.epf.library.tests/src/org/eclipse/epf/library/tester/impl/testcommands/TCEditMethodElementBase.java
@@ -23,7 +23,6 @@
 import org.eclipse.emf.ecore.EDataType;
 import org.eclipse.emf.ecore.EReference;
 import org.eclipse.emf.ecore.EStructuralFeature;
-import org.eclipse.epf.library.tester.LibraryTestService;
 import org.eclipse.epf.library.tester.TesterOutputUtil;
 import org.eclipse.epf.library.tester.iface.TCExeReply;
 import org.eclipse.epf.library.tester.iface.TestCommand;
@@ -32,7 +31,8 @@
 import org.eclipse.epf.uma.DescribableElement;
 import org.eclipse.epf.uma.MethodElement;
 import org.eclipse.epf.uma.MethodLibrary;
-import org.eclipse.epf.uma.MethodPlugin;
+import org.eclipse.epf.uma.ProcessElement;
+import org.eclipse.epf.uma.UmaFactory;
 import org.w3c.dom.Element;
 import org.w3c.dom.NodeList;
 
@@ -212,7 +212,11 @@
 		MethodLibrary currLib = getOwner().getCurrentBaseLib();		
 		String path = getAttribute(AT_Path);
 		if (methodElement == null) {
-			methodElement = (MethodElement) TesterOutputUtil.getMethodElement(currLib, path);
+			if (UmaFactory.eINSTANCE.create(eclass) instanceof ProcessElement) {
+				methodElement = TesterOutputUtil.getProcessElement(currLib, path);
+			} else {
+				methodElement = TesterOutputUtil.getMethodElement(currLib, path);
+			}
 		}
 		if (methodElement == null) {
 			return null;
diff --git a/org.eclipse.epf.library.tests/src/org/eclipse/epf/library/tester/impl/testcommands/TCNewMethodElement.java b/org.eclipse.epf.library.tests/src/org/eclipse/epf/library/tester/impl/testcommands/TCNewMethodElement.java
index d804bfa..3028375 100644
--- a/org.eclipse.epf.library.tests/src/org/eclipse/epf/library/tester/impl/testcommands/TCNewMethodElement.java
+++ b/org.eclipse.epf.library.tests/src/org/eclipse/epf/library/tester/impl/testcommands/TCNewMethodElement.java
@@ -35,6 +35,7 @@
 import org.eclipse.epf.uma.MethodPackage;
 import org.eclipse.epf.uma.MethodPlugin;
 import org.eclipse.epf.uma.ProcessComponent;
+import org.eclipse.epf.uma.ProcessElement;
 import org.eclipse.epf.uma.ProcessPackage;
 import org.eclipse.epf.uma.UmaFactory;
 import org.eclipse.epf.uma.UmaPackage;
@@ -111,7 +112,7 @@
 
 	private TCExeReply addToLib(String parentPath, MethodElement me) {
 		if (me instanceof BreakdownElement) {
-			return addBeToLib(parentPath, (BreakdownElement) me);
+			return addBeToLib(parentPath, (ProcessElement) me);
 		}
 		MethodLibrary currLib = getOwner().getCurrentBaseLib();
 		MethodElement parentMe = TesterOutputUtil.getMethodElement(currLib, parentPath);
@@ -126,23 +127,23 @@
 		return null;
 	}
 	
-	private TCExeReply addBeToLib(String parentPath, BreakdownElement be) {
+	private TCExeReply addBeToLib(String parentPath, ProcessElement pe) {
 		MethodLibrary currLib = getOwner().getCurrentBaseLib();
-		ProcessPackage parentMe = TesterOutputUtil.getBreakdownElementParent(currLib, parentPath, be.getName());
+		ProcessPackage parentMe = TesterOutputUtil.getProcessElementParent(currLib, parentPath, pe.getName());
 		if (parentMe == null) {
 			return new TCExeReplyImpl("parentMe == null", false);
 		}
-		if (be instanceof CapabilityPattern) {			
-			CapabilityPattern cp = (CapabilityPattern) be;
+		if (pe instanceof CapabilityPattern) {			
+			CapabilityPattern cp = (CapabilityPattern) pe;
 			//cp.setDefaultContext(defaultConfig);
 
 			ProcessComponent pc = UmaFactory.eINSTANCE.createProcessComponent();
 			pc.setGuid(EcoreUtil.generateUUID());
-			pc.setName(be.getName());
+			pc.setName(pe.getName());
 			parentMe.getChildPackages().add(pc);
 			pc.setProcess(cp);
 			
-			addToParent(be, pc);
+			addToParent(pe, pc);
 		}
 
 		save(parentMe);
