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 95a6a0e..5148043 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
@@ -92,7 +92,7 @@
 	public static ProcessElement getProcessElement(MethodLibrary lib, String path) {
 		int ix = path.lastIndexOf("/");
 		String parentPath = path.substring(0, ix);
-		String name = path.substring(ix);
+		String name = path.substring(ix + 1);
 		
 		ProcessPackage outerParent = getProcessElementParent(lib, parentPath, name);
 		
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 3028375..6772edd 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
@@ -25,6 +25,7 @@
 import org.eclipse.epf.library.tester.TesterOutputUtil;
 import org.eclipse.epf.library.tester.iface.TCExeReply;
 import org.eclipse.epf.library.tester.impl.TestCommandImpl;
+import org.eclipse.epf.uma.Activity;
 import org.eclipse.epf.uma.BreakdownElement;
 import org.eclipse.epf.uma.CapabilityPattern;
 import org.eclipse.epf.uma.ContentElement;
@@ -90,9 +91,6 @@
 		if (reply != null && !reply.passing()) {
 			return reply;
 		}
-		if (true) {
-			return null;
-		}
 		return executeEdit(name, parentPath);
 	}
 
@@ -112,7 +110,7 @@
 
 	private TCExeReply addToLib(String parentPath, MethodElement me) {
 		if (me instanceof BreakdownElement) {
-			return addBeToLib(parentPath, (ProcessElement) me);
+			return addProcessElementToLib(parentPath, (ProcessElement) me);
 		}
 		MethodLibrary currLib = getOwner().getCurrentBaseLib();
 		MethodElement parentMe = TesterOutputUtil.getMethodElement(currLib, parentPath);
@@ -127,7 +125,7 @@
 		return null;
 	}
 	
-	private TCExeReply addBeToLib(String parentPath, ProcessElement pe) {
+	private TCExeReply addProcessElementToLib(String parentPath, ProcessElement pe) {
 		MethodLibrary currLib = getOwner().getCurrentBaseLib();
 		ProcessPackage parentMe = TesterOutputUtil.getProcessElementParent(currLib, parentPath, pe.getName());
 		if (parentMe == null) {
@@ -141,9 +139,18 @@
 			pc.setGuid(EcoreUtil.generateUUID());
 			pc.setName(pe.getName());
 			parentMe.getChildPackages().add(pc);
-			pc.setProcess(cp);
-			
+			pc.setProcess(cp);			
 			addToParent(pe, pc);
+			
+		} else if (pe instanceof BreakdownElement) {
+			BreakdownElement be = (BreakdownElement) pe;
+			ProcessPackage pkg = UmaFactory.eINSTANCE.createProcessPackage();
+			pkg.setName(pe.getName());
+			parentMe.getChildPackages().add(pkg);;
+			addToParent(pe, pkg);
+			
+			Activity parentAct = (Activity) parentMe.getProcessElements().get(0);
+			parentAct.getBreakdownElements().add(be);
 		}
 
 		save(parentMe);
@@ -176,6 +183,18 @@
 			if (eobj instanceof MethodConfiguration) {
 				return up.getMethodLibrary_PredefinedConfigurations();
 			}
+		}		
+		
+		if (owner instanceof ContentPackage) {
+			if (eobj instanceof ContentElement) {
+				return up.getContentPackage_ContentElements();
+			}
+		}
+		
+		if (owner instanceof ProcessPackage) {
+			if (eobj instanceof ProcessElement) {
+				return up.getProcessPackage_ProcessElements();
+			}
 		}
 		
 		if (owner instanceof MethodPackage) {
@@ -184,12 +203,6 @@
 			}
 		}
 		
-		if (owner instanceof ContentPackage) {
-			if (eobj instanceof ContentElement) {
-				return up.getContentPackage_ContentElements();
-			}
-		}
-		
 		return null;
 	}
 	
