diff --git a/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/internal/ui/navigator/ScriptExplorerContentProvider.java b/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/internal/ui/navigator/ScriptExplorerContentProvider.java
index e0a9406..610d928 100644
--- a/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/internal/ui/navigator/ScriptExplorerContentProvider.java
+++ b/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/internal/ui/navigator/ScriptExplorerContentProvider.java
@@ -34,6 +34,7 @@
 import org.eclipse.dltk.core.IScriptModel;
 import org.eclipse.dltk.core.ISourceModule;
 import org.eclipse.dltk.core.ModelException;
+import org.eclipse.dltk.internal.core.ExternalProjectFragment;
 import org.eclipse.dltk.internal.core.ScriptFolder;
 import org.eclipse.dltk.internal.ui.StandardModelElementContentProvider;
 import org.eclipse.dltk.internal.ui.scriptview.BuildPathContainer;
@@ -142,6 +143,9 @@
 	public Object[] getChildren(Object parentElement) {
 		Object[] children = NO_CHILDREN;
 		try {
+			if (parentElement instanceof LibrariesFragment) {
+				return ((LibrariesFragment) parentElement).elements.toArray();
+			}
 			if (parentElement instanceof IScriptModel)
 				return concatenate(
 						getScriptProjects((IScriptModel) parentElement),
@@ -188,7 +192,25 @@
 				if (!containedRoots.contains(roots[i])) {
 					result.add(roots[i]);
 				}
+			} else if (roots[i] instanceof LibrariesFragment) {
+				LibrariesFragment frag = (LibrariesFragment) roots[i];
+				LibrariesFragment nFrag = new LibrariesFragment();
+				nFrag.parent = frag.parent;
+				for (Iterator iterator = frag.elements.iterator(); iterator
+						.hasNext();) {
+					Object object = (Object) iterator.next();
+					if (!containedRoots.contains(object)) {
+						nFrag.elements.add(object);
+					}
+				}
+				if( nFrag.elements.size() > 1 ) {
+					result.add(nFrag);
+				}
+				else if( nFrag.elements.size() == 1 ) {
+					result.add(nFrag.elements.get(0));
+				}
 			} else {
+
 				result.add(roots[i]);
 			}
 		}
@@ -209,6 +231,9 @@
 	}
 
 	public Object getParent(Object child) {
+		if( child instanceof LibrariesFragment ) {
+			return ((LibrariesFragment) child).parent;
+		}
 		if (needsToDelegateGetParent(child)) {
 			return fScriptFolderProvider.getParent(child);
 		} else
@@ -249,6 +274,11 @@
 		return (!fIsFlatLayout && type == IModelElement.SCRIPT_FOLDER);
 	}
 
+	public static class LibrariesFragment {
+		public List elements = new ArrayList();
+		public Object parent;
+	}
+
 	/**
 	 * Returns the given objects with the resources of the parent.
 	 */
@@ -259,15 +289,28 @@
 		if (existingObject != null) {
 			list.addAll(Arrays.asList(existingObject));
 		}
+		// Show all external libraris in libraries section.
+		LibrariesFragment fragment = new LibrariesFragment();
+		fragment.parent = parent;
 		// Add everything that is not a ScriptFolder
 		for (int i = 0; i < objects.length; i++) {
 			Object object = objects[i];
 			if (!(object instanceof ScriptFolder)) {
-				if( !list.contains(object)) {
-					list.add(object);
+				if (!list.contains(object)) {
+					if (object instanceof ExternalProjectFragment) {
+						fragment.elements.add(object);
+					} else {
+						list.add(object);
+					}
 				}
 			}
 		}
+		// Filter fragment
+		if (fragment.elements.size() == 1) {
+			list.add(fragment.elements.get(0));
+		} else if (fragment.elements.size() > 1) {
+			list.add(fragment);
+		}
 		return list.toArray();
 	}
 
diff --git a/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/internal/ui/navigator/ScriptExplorerLabelProvider.java b/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/internal/ui/navigator/ScriptExplorerLabelProvider.java
index 8fb681f..24241a3 100644
--- a/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/internal/ui/navigator/ScriptExplorerLabelProvider.java
+++ b/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/internal/ui/navigator/ScriptExplorerLabelProvider.java
@@ -12,8 +12,10 @@
 import org.eclipse.core.resources.IFolder;
 import org.eclipse.core.runtime.Assert;
 import org.eclipse.dltk.core.IScriptFolder;
+import org.eclipse.dltk.ui.DLTKPluginImages;
 import org.eclipse.dltk.ui.viewsupport.AppearanceAwareLabelProvider;
 import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.swt.graphics.Image;
 
 
 /**
@@ -40,8 +42,18 @@
 	}		
 
 
+	public Image getImage(Object element) {
+		if( element instanceof ScriptExplorerContentProvider.LibrariesFragment ) {
+			return DLTKPluginImages.get(DLTKPluginImages.IMG_OBJS_LIBRARY);
+		}
+		return super.getImage(element);
+	}
+
+
 	public String getText(Object element) {
-		
+		if( element instanceof ScriptExplorerContentProvider.LibrariesFragment) {
+			return "Libraries";
+		}
 		if (fIsFlatLayout || !(element instanceof IScriptFolder))
 			return super.getText(element);			
 
