diff --git a/core/plugins/org.eclipse.dltk.core/model/org/eclipse/dltk/internal/core/DeltaProcessor.java b/core/plugins/org.eclipse.dltk.core/model/org/eclipse/dltk/internal/core/DeltaProcessor.java
index 93e9b07..40d1dff 100644
--- a/core/plugins/org.eclipse.dltk.core/model/org/eclipse/dltk/internal/core/DeltaProcessor.java
+++ b/core/plugins/org.eclipse.dltk.core/model/org/eclipse/dltk/internal/core/DeltaProcessor.java
@@ -2191,7 +2191,7 @@
 										fragment.getPath(),
 										new Long(newTimeStamp));
 								// index new library
-								ProjectIndexerManager.indexLibrary(
+								ProjectIndexerManager.indexProjectFragment(
 										scriptProject, fragment.getPath());
 								if (fragment instanceof Openable) {
 									this.elementAdded((Openable) fragment,
@@ -2203,7 +2203,7 @@
 							if (newTimeStamp == 0) {
 								this.state.getCustomTimeStamps().remove(
 										fragment.getPath());
-								ProjectIndexerManager.removeLibrary(
+								ProjectIndexerManager.removeProjectFragment(
 										scriptProject, fragment.getPath());
 								if (fragment instanceof Openable) {
 									this.elementRemoved((Openable) fragment,
@@ -2215,7 +2215,7 @@
 										fragment.getPath(),
 										new Long(newTimeStamp));
 								// index new library
-								ProjectIndexerManager.indexLibrary(
+								ProjectIndexerManager.indexProjectFragment(
 										scriptProject, fragment.getPath());
 								if (fragment instanceof Openable) {
 									this.contentChanged((Openable) fragment);
diff --git a/core/plugins/org.eclipse.dltk.core/search/org/eclipse/dltk/core/search/indexing/IndexManager.java b/core/plugins/org.eclipse.dltk.core/search/org/eclipse/dltk/core/search/indexing/IndexManager.java
index 3394f5e..1d018eb 100644
--- a/core/plugins/org.eclipse.dltk.core/search/org/eclipse/dltk/core/search/indexing/IndexManager.java
+++ b/core/plugins/org.eclipse.dltk.core/search/org/eclipse/dltk/core/search/indexing/IndexManager.java
@@ -35,6 +35,7 @@
 import org.eclipse.dltk.core.IProjectFragment;
 import org.eclipse.dltk.core.IScriptProject;
 import org.eclipse.dltk.core.ISourceElementParser;
+import org.eclipse.dltk.core.ModelException;
 import org.eclipse.dltk.core.environment.IFileHandle;
 import org.eclipse.dltk.core.search.BasicSearchEngine;
 import org.eclipse.dltk.core.search.IDLTKSearchScope;
@@ -42,6 +43,7 @@
 import org.eclipse.dltk.core.search.index.Index;
 import org.eclipse.dltk.core.search.index.MixinIndex;
 import org.eclipse.dltk.internal.core.Model;
+import org.eclipse.dltk.internal.core.ModelManager;
 import org.eclipse.dltk.internal.core.ScriptProject;
 import org.eclipse.dltk.internal.core.search.PatternSearchJob;
 import org.eclipse.dltk.internal.core.search.ProjectIndexerManager;
@@ -317,7 +319,7 @@
 				// should only be reachable for query jobs
 				// IF you put an index in the cache, then AddArchiveFileToIndex
 				// fails because it thinks there is nothing to do
-				if (!createIfMissing && !mixin) {
+				if (!createIfMissing) {
 					this.rebuildIndex(indexLocation, containerPath);
 					return null;
 				}
@@ -524,30 +526,35 @@
 			return;
 		}
 
-		Object target = Model.getTarget(workspace.getRoot(), containerPath,
-				true);
+		String cp = containerPath.toString();
+		if (cp.startsWith(SPECIAL_MIXIN)) {
+			cp = cp.substring(SPECIAL_MIXIN.length());
+		}
+		Path pathCP = new Path(cp);
+
+		Object target = Model.getTarget(workspace.getRoot(), pathCP, true);
 		// Try to search for specified container path using model
-		// if (target == null || target instanceof IFileHandle) {
-		// try {
-		// IScriptProject[] scriptProjects = ModelManager
-		// .getModelManager().getModel().getScriptProjects();
-		// for (IScriptProject project : scriptProjects) {
-		// IProjectFragment[] fragments = project
-		// .getProjectFragments();
-		// for (IProjectFragment fragment : fragments) {
-		// if (fragment.getPath().equals(containerPath)) {
-		// target = fragment;
-		// break;
-		// }
-		// }
-		// if (target != null) {
-		// break;
-		// }
-		// }
-		// } catch (ModelException e) {
-		// DLTKCore.error("Failed to obtain list of DLTK projects", e);
-		// }
-		// }
+		if (target == null || target instanceof IFileHandle) {
+			try {
+				IScriptProject[] scriptProjects = ModelManager
+						.getModelManager().getModel().getScriptProjects();
+				for (IScriptProject project : scriptProjects) {
+					IProjectFragment[] fragments = project
+							.getProjectFragments();
+					for (IProjectFragment fragment : fragments) {
+						if (fragment.getPath().equals(pathCP)) {
+							target = fragment;
+							break;
+						}
+					}
+					if (target != null) {
+						break;
+					}
+				}
+			} catch (ModelException e) {
+				DLTKCore.error("Failed to obtain list of DLTK projects", e);
+			}
+		}
 		if (target == null) {
 			return;
 		}
@@ -567,8 +574,7 @@
 			}
 		} else if (target instanceof IProjectFragment) {
 			ProjectIndexerManager.indexProjectFragment(
-					((IProjectFragment) target).getScriptProject(),
-					containerPath);
+					((IProjectFragment) target).getScriptProject(), pathCP);
 			return;
 		} else if (target instanceof IFile) {
 			// request = new AddArchiveFileToIndex((IFile) target, this);
diff --git a/core/plugins/org.eclipse.dltk.core/search/org/eclipse/dltk/core/search/indexing/core/AbstractProjectIndexer.java b/core/plugins/org.eclipse.dltk.core/search/org/eclipse/dltk/core/search/indexing/core/AbstractProjectIndexer.java
index d0abbf2..dcc5123 100644
--- a/core/plugins/org.eclipse.dltk.core/search/org/eclipse/dltk/core/search/indexing/core/AbstractProjectIndexer.java
+++ b/core/plugins/org.eclipse.dltk.core/search/org/eclipse/dltk/core/search/indexing/core/AbstractProjectIndexer.java
@@ -21,6 +21,7 @@
 import org.eclipse.dltk.core.IProjectFragment;
 import org.eclipse.dltk.core.IScriptProject;
 import org.eclipse.dltk.core.ISourceModule;
+import org.eclipse.dltk.core.ModelException;
 import org.eclipse.dltk.core.search.SearchEngine;
 import org.eclipse.dltk.core.search.SearchParticipant;
 import org.eclipse.dltk.core.search.index.Index;
@@ -79,8 +80,26 @@
 	}
 
 	public void indexProjectFragment(IScriptProject project, IPath path) {
-		// TODO optimize
-		requestIfNotWaiting(new ProjectRequest(this, project, true));
+		IProjectFragment fragmentToIndex = null;
+		try {
+			IProjectFragment[] fragments = project.getProjectFragments();
+			for (IProjectFragment fragment : fragments) {
+				if (fragment.getPath().equals(path)) {
+					fragmentToIndex = fragment;
+					break;
+				}
+			}
+		} catch (ModelException e) {
+			DLTKCore.error("Failed to index fragment:" + path.toString(), e);
+		}
+		if (fragmentToIndex == null || !fragmentToIndex.isExternal()
+				|| fragmentToIndex.isBuiltin()) {
+			requestIfNotWaiting(new ProjectRequest(this, project, true));
+			return;
+		}
+		requestIfNotWaiting(new ExternalProjectFragmentRequest(this,
+				fragmentToIndex, DLTKLanguageManager
+						.getLanguageToolkit(project)));
 	}
 
 	public void indexSourceModule(ISourceModule module,
