diff --git a/bundles/org.eclipse.wst.jsdt.ui/META-INF/MANIFEST.MF b/bundles/org.eclipse.wst.jsdt.ui/META-INF/MANIFEST.MF
index 43952fc..3fb115d 100644
--- a/bundles/org.eclipse.wst.jsdt.ui/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.wst.jsdt.ui/META-INF/MANIFEST.MF
@@ -99,7 +99,7 @@
  org.eclipse.wst.jsdt.ui.text.java,
  org.eclipse.wst.jsdt.ui.text.java.hover,
  org.eclipse.wst.jsdt.ui.wizards
-Bundle-Version: 1.0.1.qualifier
+Bundle-Version: 1.0.2.qualifier
 Bundle-Activator: org.eclipse.wst.jsdt.internal.ui.JavaScriptPlugin
 Require-Bundle: org.eclipse.ui;bundle-version="[3.4.0,4.0.0)",
  org.eclipse.ui.console;bundle-version="[3.3.0,4.0.0)",
diff --git a/bundles/org.eclipse.wst.jsdt.ui/src/org/eclipse/wst/jsdt/internal/ui/navigator/JavaNavigatorContentProvider.java b/bundles/org.eclipse.wst.jsdt.ui/src/org/eclipse/wst/jsdt/internal/ui/navigator/JavaNavigatorContentProvider.java
index 9664d0c..be1dbf8 100644
--- a/bundles/org.eclipse.wst.jsdt.ui/src/org/eclipse/wst/jsdt/internal/ui/navigator/JavaNavigatorContentProvider.java
+++ b/bundles/org.eclipse.wst.jsdt.ui/src/org/eclipse/wst/jsdt/internal/ui/navigator/JavaNavigatorContentProvider.java
@@ -16,7 +16,6 @@
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Set;
-import java.util.Vector;
 
 import org.eclipse.core.resources.IContainer;
 import org.eclipse.core.resources.IFile;
@@ -24,6 +23,7 @@
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.jface.util.IPropertyChangeListener;
 import org.eclipse.jface.util.PropertyChangeEvent;
@@ -37,10 +37,7 @@
 import org.eclipse.wst.jsdt.core.IJavaScriptElement;
 import org.eclipse.wst.jsdt.core.IJavaScriptModel;
 import org.eclipse.wst.jsdt.core.IJavaScriptProject;
-import org.eclipse.wst.jsdt.core.IPackageFragment;
-import org.eclipse.wst.jsdt.core.IPackageFragmentRoot;
 import org.eclipse.wst.jsdt.core.JavaScriptCore;
-import org.eclipse.wst.jsdt.core.JavaScriptModelException;
 import org.eclipse.wst.jsdt.internal.ui.navigator.IExtensionStateConstants.Values;
 import org.eclipse.wst.jsdt.internal.ui.packageview.PackageExplorerContentProvider;
 import org.eclipse.wst.jsdt.ui.PreferenceConstants;
@@ -170,7 +167,7 @@
 		return getParent(object);
 	}
 
-		public PipelinedShapeModification interceptAdd(PipelinedShapeModification addModification) {
+	public PipelinedShapeModification interceptAdd(PipelinedShapeModification addModification) {
 		
 		Object parent= addModification.getParent();
 		
@@ -180,7 +177,8 @@
 		
 		if (parent instanceof IWorkspaceRoot) {		
 			deconvertJavaProjects(addModification);
-		}		
+		}
+		
 		convertToJavaElements(addModification);
 		return addModification;
 	}
@@ -269,88 +267,35 @@
 	 * @param proposedChildren
 	 */
 	private void customize(Object[] javaElements, Set proposedChildren) {
-	//	List elementList= Arrays.asList(javaElements);
-//		IResource[] javaElementResources;
-//		for(int i = 0;i<javaElements.length;i++) {
-//			if(javaElements[i] instanceof IJavaScriptElement) {
-//				
-//			}
-//		}
-		
-		
-//		for (Iterator iter= proposedChildren.iterator(); iter.hasNext();) {
-//			Object element= iter.next();
-//			IResource resource= null;
-//			if (element instanceof IResource) {
-//				resource= (IResource)element;
-//			} else if (element instanceof IAdaptable) {
-//				resource= (IResource)((IAdaptable)element).getAdapter(IResource.class);
-//			}
-//			if (resource != null) {
-//				int i= elementList.indexOf(resource);
-//				if (i >= 0) {
-//					javaElements[i]= null;
-//				}
-//			}
-//		}
-		
-		
-			
-		proposedChildren.removeAll(Arrays.asList(javaElements));
-		proposedChildren.addAll(Arrays.asList(javaElements));
-			
-			
-		
-		Vector allJavaElements = new Vector(Arrays.asList(javaElements));
-		boolean addedPfRoot = false;
-		while(allJavaElements.size()>0) {
-			Object element=null;
-			try {
-				element = allJavaElements.remove(0);
+		List elementList= Arrays.asList(javaElements);
+		for (Iterator iter= proposedChildren.iterator(); iter.hasNext();) {
+			Object element= iter.next();
+			IResource resource= null;
+			if (element instanceof IResource) {
+				resource= (IResource)element;
+			} else if (element instanceof IAdaptable) {
+				resource= (IResource)((IAdaptable)element).getAdapter(IResource.class);
 			}
-			catch (Exception e1) {
-				// TODO Auto-generated catch block
-				e1.printStackTrace();
-			}
-			
-			if (element instanceof IJavaScriptElement) {
-				IJavaScriptElement cElement= (IJavaScriptElement)element;
-				IResource resource= cElement.getResource();
-				proposedChildren.remove(resource);
-				if(cElement instanceof IPackageFragmentRoot) {
-					IPackageFragmentRoot root = (IPackageFragmentRoot)cElement;
-					try {
-						Object[] nonJava = root.getNonJavaScriptResources();
-						allJavaElements.addAll(Arrays.asList(root.getChildren()));
-						proposedChildren.removeAll(Arrays.asList(nonJava));
-					}
-					catch (JavaScriptModelException e) {
-						// TODO Auto-generated catch block
-						e.printStackTrace();
-					}
-				}else if(cElement instanceof IPackageFragment) {
-						IPackageFragment root = (IPackageFragment)cElement;
-						
-						if(root.isDefaultPackage()) {
-							IPackageFragmentRoot pfRoot = (IPackageFragmentRoot)root.getParent();
-							if(!addedPfRoot) allJavaElements.add(pfRoot);
-							addedPfRoot = true;
-						}
-						
-						try {
-							Object[] nonJava = root.getNonJavaScriptResources();
-							Object[] children = root.getChildren();
-							allJavaElements.addAll(Arrays.asList(children));
-							proposedChildren.removeAll(Arrays.asList(nonJava));
-						}
-						catch (Exception e) {
-							// TODO Auto-generated catch block
-							e.printStackTrace();
-						}
+			if (resource != null) {
+				int i= elementList.indexOf(resource);
+				if (i >= 0) {
+					javaElements[i]= null;
 				}
 			}
 		}
-		
+		for (int i= 0; i < javaElements.length; i++) {
+			Object element= javaElements[i];
+			if (element instanceof IJavaScriptElement) {
+				IJavaScriptElement cElement= (IJavaScriptElement)element;
+				IResource resource= cElement.getResource();
+				if (resource != null) {
+					proposedChildren.remove(resource);
+				}
+				proposedChildren.add(element);
+			} else if (element != null) {
+				proposedChildren.add(element);
+			}
+		}
 	}
 
 
@@ -364,7 +309,6 @@
 		return convertToJavaElements(updateSynchronization.getRefreshTargets());
 	}
 
-
 	protected void postAdd(final Object parent, final Object element, Collection runnables) {
 		if (parent instanceof IJavaScriptModel)
 			super.postAdd(((IJavaScriptModel) parent).getWorkspace(), element, runnables);
@@ -387,5 +331,4 @@
 		} 
 		super.postRefresh(toRefresh, updateLabels, runnables);		
 	}
-
 }
