diff --git a/org.eclipse.epf.diagram.tests/META-INF/MANIFEST.MF b/org.eclipse.epf.diagram.tests/META-INF/MANIFEST.MF
index df17710..4ad56f0 100644
--- a/org.eclipse.epf.diagram.tests/META-INF/MANIFEST.MF
+++ b/org.eclipse.epf.diagram.tests/META-INF/MANIFEST.MF
@@ -8,12 +8,13 @@
 Require-Bundle: org.eclipse.ui,
  org.eclipse.core.runtime,
  org.junit,
- org.eclipse.epf.diagram.ui,
- org.eclipse.epf.library.tests,
+ org.eclipse.epf.common,
  org.eclipse.epf.uma,
- org.eclipse.gmf.runtime.notation,
- org.eclipse.epf.authoring.ui,
+ org.eclipse.epf.library,
  org.eclipse.epf.library.xmi,
- org.eclipse.uml2.uml,
- org.eclipse.epf.diagram.core
+ org.eclipse.epf.library.tests,
+ org.eclipse.epf.diagram.core,
+ org.eclipse.epf.diagram.ad,
+ org.eclipse.epf.diagram.ui,
+ org.eclipse.epf.authoring.ui
 Eclipse-LazyStart: true
diff --git a/org.eclipse.epf.diagram.tests/src/org/eclipse/epf/diagram/tests/DiagramUIServiceTest.java b/org.eclipse.epf.diagram.tests/src/org/eclipse/epf/diagram/tests/DiagramUIServiceTest.java
index 8b3396b..04cea33 100644
--- a/org.eclipse.epf.diagram.tests/src/org/eclipse/epf/diagram/tests/DiagramUIServiceTest.java
+++ b/org.eclipse.epf.diagram.tests/src/org/eclipse/epf/diagram/tests/DiagramUIServiceTest.java
@@ -10,8 +10,12 @@
 //------------------------------------------------------------------------------
 package org.eclipse.epf.diagram.tests;
 
+import java.util.Collections;
 import java.util.List;
 
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.transaction.Transaction;
+import org.eclipse.epf.diagram.core.services.DiagramManager;
 import org.eclipse.epf.diagram.ui.service.DiagramUIService;
 import org.eclipse.epf.diagram.ui.service.IDiagramUIService;
 import org.eclipse.epf.library.tests.LibraryTestHelper;
@@ -74,67 +78,82 @@
 
 		Activity act1 = LibraryTestHelper.createActivity(plugin, cp1, "A1",
 				tasks);
-		Activity act2 = LibraryTestHelper.createActivity(plugin, cp1, "A1",
+		Activity act2 = LibraryTestHelper.createActivity(plugin, cp1, "A2",
 				tasks);
 
 		diagramUIService = new DiagramUIService();
-		
-		Diagram diagram = diagramUIService.createActivityDiagram(cp1);
-
-		assertTrue(diagram != null);
+		DiagramManager mgr = DiagramManager.getInstance(cp1);
+		Diagram diagram = null;
+		try {
+			Transaction tx =  mgr.getEditingDomain().startTransaction(false,
+					Collections.EMPTY_MAP);
+			Resource resource = mgr.getResource();
 	
+			diagram = diagramUIService.createActivityDiagram(cp1);
+	
+			Node act1Node = diagramUIService.createNode(diagram,  act1);
+			Node initialNode = diagramUIService.createNode(diagram, IDiagramUIService.INITIAL_NODE, "initial");
+			Node act2Node = diagramUIService.createNode(diagram, act2);
+			Node decisionNode = diagramUIService.createNode(diagram, IDiagramUIService.DECISION_NODE, "decision");
+			Node endNode = diagramUIService.createNode(diagram, IDiagramUIService.FINAL_NODE, "end");
+			
+			diagramUIService.createEdge(diagram, initialNode, act1Node, "link1");
+			diagramUIService.createEdge(diagram, act1Node, decisionNode, "link2");
+			diagramUIService.createEdge(diagram, decisionNode, act2Node, "link3");
+			diagramUIService.createEdge(diagram, act2Node, endNode, "link4");
+						
+			List nodes = diagramUIService.getNodes(diagram, cp1, IDiagramUIService.ACTIVITY_NODE);
+			if (!nodes.isEmpty()) {
+				System.out.println("****** ACTIVITY Nodes - ");
+				for (int i=0; i < nodes.size(); i++)
+					System.out.println(nodes.get(i));
+			}
+			
+			nodes = diagramUIService.getNodes(diagram, cp1, IDiagramUIService.INITIAL_NODE);
+			if (!nodes.isEmpty()) {
+				System.out.println("****** Initial Nodes - ");
+				for (int i=0; i < nodes.size(); i++)
+					System.out.println(nodes.get(i));
+			}
+			
+			nodes = diagramUIService.getNodes(diagram, cp1, IDiagramUIService.DECISION_NODE);
+			if (!nodes.isEmpty()) {
+				System.out.println("****** Decision Nodes - ");
+				for (int i=0; i < nodes.size(); i++)
+					System.out.println(nodes.get(i));
+			}
+			
+			nodes = diagramUIService.getAllNodes(diagram);
+			if (!nodes.isEmpty()) {
+				System.out.println("****** ALL Nodes - ");
+				for (int i=0; i < nodes.size(); i++)
+					System.out.println(nodes.get(i));
+			}
+			
+			assertTrue(!nodes.isEmpty());
+			
+			List edges = diagramUIService.getEdges(diagram);
+			if (!edges.isEmpty()) {
+				System.out.println("****** ALL Edges - ");
+				for (int i=0; i < edges.size(); i++)
+					System.out.println(edges.get(i));
+			}
+			
+			assertTrue(!edges.isEmpty());
 		
-		Node act1Node = diagramUIService.createNode(diagram,  act1);
-		Node initialNode = diagramUIService.createNode(diagram, IDiagramUIService.INITIAL_NODE, "initial");
-		Node act2Node = diagramUIService.createNode(diagram, act2);
-		Node decisionNode = diagramUIService.createNode(diagram, IDiagramUIService.DECISION_NODE, "decision");
-		Node endNode = diagramUIService.createNode(diagram, IDiagramUIService.FINAL_NODE, "end");
-		
-		diagramUIService.createEdge(diagram, initialNode, act1Node, "link1");
-		diagramUIService.createEdge(diagram, act1Node, decisionNode, "link2");
-		diagramUIService.createEdge(diagram, decisionNode, act2Node, "link3");
-		diagramUIService.createEdge(diagram, act2Node, endNode, "link4");
-		
-		
-		List nodes = diagramUIService.getNodes(diagram, cp1, IDiagramUIService.ACTIVITY_NODE);
-		if (!nodes.isEmpty()) {
-			System.out.println("****** ACTIVITY Nodes - ");
-			for (int i=0; i < nodes.size(); i++)
-				System.out.println(nodes.get(i));
-		}
-		
-		nodes = diagramUIService.getNodes(diagram, cp1, IDiagramUIService.INITIAL_NODE);
-		if (!nodes.isEmpty()) {
-			System.out.println("****** Initial Nodes - ");
-			for (int i=0; i < nodes.size(); i++)
-				System.out.println(nodes.get(i));
-		}
-		
-		nodes = diagramUIService.getNodes(diagram, cp1, IDiagramUIService.DECISION_NODE);
-		if (!nodes.isEmpty()) {
-			System.out.println("****** Decision Nodes - ");
-			for (int i=0; i < nodes.size(); i++)
-				System.out.println(nodes.get(i));
-		}
-		
-		nodes = diagramUIService.getAllNodes(diagram);
-		if (!nodes.isEmpty()) {
-			System.out.println("****** ALL Nodes - ");
-			for (int i=0; i < nodes.size(); i++)
-				System.out.println(nodes.get(i));
-		}
-		
-		assertTrue(!nodes.isEmpty());
-		
-		List edges = diagramUIService.getEdges(diagram);
-		if (!edges.isEmpty()) {
-			System.out.println("****** ALL Edges - ");
-			for (int i=0; i < edges.size(); i++)
-				System.out.println(edges.get(i));
-		}
-		
-		assertTrue(!edges.isEmpty());
-		
+			// save diagram
+			resource.getContents().add(diagram.getElement());
+			resource.getContents().add(diagram);
+			tx.commit();
+			resource.save(null);
+
+		} catch (Exception e) {
+			e.printStackTrace();
+		} finally {
+			if (mgr != null) {
+				mgr.release();
+			}
+		}		
 	}
 
 }
