diff --git a/org.eclipse.epf.library.tests/src/org/eclipse/epf/library/tester/OutputDiffAnalyzor.java b/org.eclipse.epf.library.tests/src/org/eclipse/epf/library/tester/OutputDiffAnalyzor.java
new file mode 100644
index 0000000..6dddb64
--- /dev/null
+++ b/org.eclipse.epf.library.tests/src/org/eclipse/epf/library/tester/OutputDiffAnalyzor.java
@@ -0,0 +1,83 @@
+//------------------------------------------------------------------------------
+// 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.library.tester;
+
+import java.io.File;
+
+import org.eclipse.epf.common.utils.XMLUtil;
+import org.eclipse.epf.library.tester.iface.TestTracer;
+import org.w3c.dom.Document;
+
+/**
+ * Class to analyze the differneces between two library tester outputs
+ * 
+ * @author Weiping Lu
+ * @since 1.0
+ * 
+ */
+public class OutputDiffAnalyzor {
+	
+	private TestTracer tracer;
+	private boolean needToAnalyze = false; 
+	private File f1;
+	private File f2;
+	private Document d1;
+	private Document d2;
+
+	public OutputDiffAnalyzor(TestTracer t, Document d1, Document d2, File f1, File f2) {
+		tracer = t;
+		this.f1 = f1;
+		this.f2 = f2;
+		this.d1 = d1 == null ? getDocument(f1) : d1;
+		this.d2 = d2 == null ? getDocument(f2) : d2;
+	}		
+	
+	private Document getDocument(File file) {
+		if (file.exists()) {
+			try {
+				return XMLUtil.loadXml(file);
+			} catch (Exception e) {
+				e.printStackTrace();
+			}
+		}
+		return null;
+	}
+	
+	private void trace(String line) {
+		tracer.trace(line);
+	}
+	
+	private void analyze() {
+		trace("OutputDiffAnalyzor.analyze ->");
+		trace("f1: " + f1.getAbsolutePath());
+		trace("f2: " + f2.getAbsolutePath());
+		trace("");		
+		analyze_();
+		trace("OutputDiffAnalyzor.analyze <-");
+	}
+	
+	private void analyze_() {
+		if (! needToAnalyze) {
+			return;
+		}
+		
+						
+		needToAnalyze = false;
+	}
+
+	public boolean compare() {
+		analyze();
+		return true;
+	}
+	
+
+
+}
