diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/builder/DependencyGraphImpl.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/builder/DependencyGraphImpl.java
index 04d8dcd..678b9bd 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/builder/DependencyGraphImpl.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/builder/DependencyGraphImpl.java
@@ -25,6 +25,7 @@
 import org.eclipse.wst.common.componentcore.ComponentCore;
 import org.eclipse.wst.common.componentcore.internal.ModulecorePlugin;
 import org.eclipse.wst.common.componentcore.internal.impl.WTPModulesResourceFactory;
+import org.eclipse.wst.common.componentcore.internal.resources.VirtualComponent;
 import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
 import org.eclipse.wst.common.componentcore.resources.IVirtualReference;
 
@@ -40,9 +41,12 @@
 	 * {A, B} }
 	 */
 	private Map<IProject, Set<IProject>> graph = null;
-
+	
 	private long modStamp = 0;
 
+	private Map<String, Object> referenceOptions = new HashMap<String, Object>();
+	
+	
 	/**
 	 * This is not public; only {@link IDependencyGraph#INSTANCE} should be
 	 * used.
@@ -153,20 +157,33 @@
 	 */
 	private void initGraph() {
 		synchronized (graphLock) {
+			referenceOptions.put("GET_JAVA_REFS", Boolean.FALSE);
 			try {
 				preUpdate();
 				graph = new HashMap<IProject, Set<IProject>>();
 				listener = new DependencyGraphResourceChangedListener();
 				ResourcesPlugin.getWorkspace().addResourceChangeListener(listener, IResourceChangeEvent.POST_CHANGE);
-				IProject[] allProjects = ResourcesPlugin.getWorkspace().getRoot().getProjects();
-				for (IProject sourceProject : allProjects) {
-					queueProjectAdded(sourceProject);
-				}
+				initAll();
 			} finally {
 				postUpdate();
 			}
 		}
 	}
+	
+	private void initAll(){
+		synchronized (graphLock) {
+			try{
+				preUpdate();
+				IProject[] allProjects = ResourcesPlugin.getWorkspace().getRoot().getProjects();
+				for (IProject sourceProject : allProjects) {
+					queueProjectAdded(sourceProject);
+				}	
+			} finally{
+				postUpdate();
+			}
+			
+		}
+	}
 
 	private void removeAllReferences(IProject project) {
 		synchronized (graphLock) {
@@ -300,7 +317,12 @@
 						for (IProject sourceProject : allProjects) {
 							IVirtualComponent component = ComponentCore.createComponent(sourceProject);
 							if (component != null) {
-								IVirtualReference[] references = component.getReferences();
+								IVirtualReference[] references = null;
+								if(referenceOptions != null && component instanceof VirtualComponent) {
+									references = ((VirtualComponent)component).getReferences(referenceOptions);
+								} else {
+									references = component.getReferences();
+								}
 								for (IVirtualReference ref : references) {
 									IVirtualComponent targetComponent = ref.getReferencedComponent();
 									if (targetComponent != null) {
@@ -320,7 +342,12 @@
 							IVirtualComponent component = ComponentCore.createComponent(sourceProject);
 							if (component != null) {
 								validRefs.clear();
-								IVirtualReference[] references = component.getReferences();
+								IVirtualReference[] references = null;
+								if(referenceOptions != null && component instanceof VirtualComponent) {
+									references = ((VirtualComponent)component).getReferences(referenceOptions);
+								} else {
+									references = component.getReferences();
+								}
 								for (IVirtualReference ref : references) {
 									IVirtualComponent targetComponent = ref.getReferencedComponent();
 									if (targetComponent != null) {
@@ -349,6 +376,17 @@
 							}
 						}
 					}
+					boolean scheduleUpdate = false;
+					synchronized (graphLock) {
+						if(referenceOptions != null){
+							scheduleUpdate = true;
+							referenceOptions = null;
+						}
+					}
+					if(scheduleUpdate){
+						initAll();
+					}
+					
 				}
 			});
 			// System.err.println(IDependencyGraph.INSTANCE);
