diff --git a/org.eclipse.epf.import/src/org/eclipse/epf/importing/services/LibraryImportManager.java b/org.eclipse.epf.import/src/org/eclipse/epf/importing/services/LibraryImportManager.java
index 7ca5e5e..33cd35f 100644
--- a/org.eclipse.epf.import/src/org/eclipse/epf/importing/services/LibraryImportManager.java
+++ b/org.eclipse.epf.import/src/org/eclipse/epf/importing/services/LibraryImportManager.java
@@ -468,6 +468,19 @@
 			return;
 		}
 		
+		// if content description, check if it's changed or not
+		if ( (oldObj instanceof ContentDescription) && (newObj instanceof ContentDescription) ) {
+			if ( LibraryUtil.isIdentical((ContentDescription)oldObj, (ContentDescription)newObj) ) {
+				if (debug ) {
+					Resource res = oldObj.eResource();
+					if ( res != null ) {
+						System.out.println("Identical element not replaced: " + res.getURI().toFileString() );
+					}
+				}
+				return;
+			} 
+		}
+		
 		// set repalced first to avoid calling into the same object recursively
 		setReplaced(oldObj);
 		
@@ -483,7 +496,8 @@
 				//package structure is handled by the diff tree
 				// so we don't process the related feature
 				if ( feature == UmaPackage.eINSTANCE.getMethodPlugin_MethodPackages()
-						|| feature == UmaPackage.eINSTANCE.getMethodPackage_ChildPackages() )
+						|| feature == UmaPackage.eINSTANCE.getMethodPackage_ChildPackages() 
+						|| feature.isDerived() )
 				{
 					continue;
 				}
@@ -969,7 +983,7 @@
 //				System.out.println("No resource for " + obj);
 				
 				if (debug && res.isModified() ) {
-					System.out.println("Modified: " + obj);
+					System.out.println("Modified: " + res.getURI().toFileString());
 				}
 
 			}
diff --git a/org.eclipse.epf.library/src/org/eclipse/epf/library/util/LibraryUtil.java b/org.eclipse.epf.library/src/org/eclipse/epf/library/util/LibraryUtil.java
index 83f04f4..c7b5b57 100644
--- a/org.eclipse.epf.library/src/org/eclipse/epf/library/util/LibraryUtil.java
+++ b/org.eclipse.epf.library/src/org/eclipse/epf/library/util/LibraryUtil.java
@@ -21,6 +21,7 @@
 import org.eclipse.emf.common.util.TreeIterator;
 import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
 import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.emf.ecore.resource.ResourceSet;
 import org.eclipse.epf.library.LibraryResources;
@@ -408,4 +409,89 @@
 		}
 		return contained;
 	}
+	
+	/**
+	 * check if two method element are identical or not. Two elements are identical if and only if:
+	 * all the attribute values are equal
+	 * all the referenced elements are equal
+	 * all the contained elements are identical
+	 * 
+	 * @param oldObj MethodElement
+	 * @param newObj MethodElement
+	 * @return boolean
+	 */
+	public static boolean isIdentical(MethodElement oldObj, MethodElement newObj) {
+		
+		if ( (oldObj == null) && (newObj == null) ) {
+			return true;
+		}
+		
+		if ( (oldObj == null) || (newObj == null) ) {
+			return false;
+		}
+		
+		// this does not work, the toString contains the object instance info
+//		return oldObj.toString().equals(newObj.toString());
+		
+		List properties = oldObj.getInstanceProperties();
+		if (properties != null) {
+			for (int i = 0; i < properties.size(); i++) {
+				EStructuralFeature feature = (EStructuralFeature) properties.get(i);
+				Object oldValue = oldObj.eGet(feature);
+				Object newValue = newObj.eGet(feature);
+				if ( oldValue == null && newValue == null ) {
+					continue;
+				}
+				
+				if ( oldValue == null || newValue == null ) {
+					return false;
+				}
+				
+				if ( oldValue instanceof MethodElement ) {
+					
+					// if it'c containment feature value, iterate it
+					MethodElement olde = (MethodElement)oldValue;
+					if ( olde.eContainer() == oldObj ) {
+						if ( !isIdentical(olde, (MethodElement)newValue) ) {
+							return false;
+						}
+					} else if ( oldValue != newValue ) {
+						return false;
+					}
+				} else if ( oldValue instanceof List ) {
+					List oldl = (List)oldValue;
+					List newl = (List)newValue;
+					if ( oldl.size() != newl.size() ) {
+						return false;
+					}
+					
+					for ( int x = 0; x < oldl.size(); x++ ) {
+						Object o = oldl.get(x);
+						Object n = newl.get(x);
+						if ( o instanceof MethodElement) {
+							// if it'c containment feature value, iterate it
+							MethodElement olde = (MethodElement)o;
+							if ( olde.eContainer() == oldObj ) {
+								if ( !isIdentical(olde, (MethodElement)n) ) {
+									return false;
+								}
+							} else if ( oldValue != newValue ) {
+								return false;
+							}
+						} else {
+							if ( !o.equals(n) ) {
+								return false;
+							}	
+						}
+					}				
+				} else {
+					if ( !oldValue.equals(newValue) ) {
+						return false;
+					}					
+				}
+			}
+		}
+		
+		return true;
+	}
 }
