diff --git a/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/ui/browsing/ext/ExtendedClasesContentProvider.java b/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/ui/browsing/ext/ExtendedClasesContentProvider.java
index 1b63acf..d6d1f95 100644
--- a/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/ui/browsing/ext/ExtendedClasesContentProvider.java
+++ b/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/ui/browsing/ext/ExtendedClasesContentProvider.java
@@ -3,13 +3,14 @@
  */
 package org.eclipse.dltk.ui.browsing.ext;
 
+import java.lang.reflect.InvocationTargetException;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
-import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.dltk.core.DLTKCore;
 import org.eclipse.dltk.core.IModelElement;
 import org.eclipse.dltk.core.IScriptModel;
@@ -21,8 +22,11 @@
 import org.eclipse.dltk.core.search.SearchPattern;
 import org.eclipse.dltk.core.search.TypeNameMatch;
 import org.eclipse.dltk.core.search.TypeNameMatchRequestor;
+import org.eclipse.jface.dialogs.ProgressMonitorDialog;
+import org.eclipse.jface.operation.IRunnableWithProgress;
 import org.eclipse.jface.viewers.ITreeContentProvider;
 import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.swt.widgets.Composite;
 
 class ExtendedClasesContentProvider implements ITreeContentProvider {
 	/**
@@ -31,10 +35,15 @@
 	private final ExtendedClassesView contentProvider;
 	Object input;
 	private IDLTKSearchScope scope;
+	private Composite parent;
+	private boolean firstTime = true;
 
-	public ExtendedClasesContentProvider(ExtendedClassesView extendedClassesView, IDLTKSearchScope scope) {
+	public ExtendedClasesContentProvider(
+			ExtendedClassesView extendedClassesView, IDLTKSearchScope scope,
+			Composite parent) {
 		contentProvider = extendedClassesView;
 		this.scope = scope;
+		this.parent = parent;
 	}
 
 	public Object[] getChildren(Object parentElement) {
@@ -44,8 +53,7 @@
 			List els = new ArrayList();
 			MixedClass cl = (MixedClass) parentElement;
 			List elements = cl.getElements();
-			for (Iterator iterator = elements.iterator(); iterator
-					.hasNext();) {
+			for (Iterator iterator = elements.iterator(); iterator.hasNext();) {
 				Object element = iterator.next();
 				if (element instanceof IType) {
 					IType type = (IType) element;
@@ -74,38 +82,59 @@
 	}
 
 	public Object[] getElements(Object inputElement) {
+		ProgressMonitorDialog dialog = new ProgressMonitorDialog(this.parent
+				.getShell());
+		dialog.setCancelable(false);
 		final List elements = new ArrayList();
-		try {
-			(new SearchEngine()).searchAllTypeNames(
-					null,
-					SearchPattern.R_EXACT_MATCH,
-					"*".toCharArray(), //$NON-NLS-1$
-					SearchPattern.R_PATTERN_MATCH
-							| SearchPattern.R_CASE_SENSITIVE,
-					IDLTKSearchConstants.TYPE,
-					scope,
-					new TypeNameMatchRequestor() {
-						public void acceptTypeNameMatch(TypeNameMatch match) {
-							try {
-								IType type = match.getType();
-								if (type.exists()
-										&& type.getParent()
-												.getElementType() != IModelElement.TYPE) {
-									elements.add(type);
+		IRunnableWithProgress runnable = new IRunnableWithProgress() {
+			public void run(IProgressMonitor monitor)
+					throws InvocationTargetException, InterruptedException {
+				try {
+					(new SearchEngine()).searchAllTypeNames(
+							null,
+							SearchPattern.R_EXACT_MATCH,
+							"*".toCharArray(), //$NON-NLS-1$
+							SearchPattern.R_PATTERN_MATCH
+									| SearchPattern.R_CASE_SENSITIVE,
+							IDLTKSearchConstants.TYPE,
+							scope,
+							new TypeNameMatchRequestor() {
+								public void acceptTypeNameMatch(
+										TypeNameMatch match) {
+									try {
+										IType type = match.getType();
+										if (type.exists()
+												&& type.getParent()
+														.getElementType() != IModelElement.TYPE) {
+											elements.add(type);
+										}
+									} catch (Exception e) {
+
+									}
 								}
-							} catch (Exception e) {
+							},
 
-							}
-						}
-					},
-
-					IDLTKSearchConstants.WAIT_UNTIL_READY_TO_SEARCH,
-					new NullProgressMonitor());
-		} catch (ModelException e) {
+							IDLTKSearchConstants.WAIT_UNTIL_READY_TO_SEARCH,
+							monitor);
+				} catch (ModelException e) {
+					if (DLTKCore.DEBUG) {
+						e.printStackTrace();
+					}
+				}
+			}
+		};
+		try {
+			dialog.run(false, false, runnable);
+		} catch (InvocationTargetException e) {
+			if (DLTKCore.DEBUG) {
+				e.printStackTrace();
+			}
+		} catch (InterruptedException e) {
 			if (DLTKCore.DEBUG) {
 				e.printStackTrace();
 			}
 		}
+
 		return convert(elements);
 	}
 
diff --git a/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/ui/browsing/ext/ExtendedClasesLabelProvider.java b/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/ui/browsing/ext/ExtendedClasesLabelProvider.java
index 29474cc..bf02059 100644
--- a/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/ui/browsing/ext/ExtendedClasesLabelProvider.java
+++ b/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/ui/browsing/ext/ExtendedClasesLabelProvider.java
@@ -36,12 +36,12 @@
 			return ((IModelElement) element).getElementName();
 		} else if (element instanceof MixedClass) {
 			MixedClass cl = (MixedClass) element;
-			if (cl.getElements().size() > 1) {
-				return cl.getName() + "("
-						+ Integer.toString(cl.getElements().size()) + ")";
-			} else {
-				return cl.getName();
-			}
+			// if (cl.getElements().size() > 1) {
+			// return cl.getName() + "("
+			// + Integer.toString(cl.getElements().size()) + ")";
+			// } else {
+			return cl.getName();
+			// }
 		} else if (element != null) {
 			return element.toString();
 		}
diff --git a/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/ui/browsing/ext/ExtendedClassesView.java b/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/ui/browsing/ext/ExtendedClassesView.java
index c6aeb86..b438174 100644
--- a/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/ui/browsing/ext/ExtendedClassesView.java
+++ b/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/ui/browsing/ext/ExtendedClassesView.java
@@ -156,7 +156,7 @@
 
 		};
 		browsingPane.setContentProvider(new ExtendedClasesContentProvider(this,
-				SearchEngine.createWorkspaceScope(this.fToolkit)));
+				SearchEngine.createWorkspaceScope(this.fToolkit), parent));
 		IDLTKUILanguageToolkit languageToolkit = DLTKUILanguageManager
 				.getLanguageToolkit(this.fToolkit.getNatureId());
 
