diff --git a/sigil/eclipse/core/src/org/apache/felix/sigil/eclipse/model/util/JavaHelper.java b/sigil/eclipse/core/src/org/apache/felix/sigil/eclipse/model/util/JavaHelper.java
index 7ece159..ba1b938 100644
--- a/sigil/eclipse/core/src/org/apache/felix/sigil/eclipse/model/util/JavaHelper.java
+++ b/sigil/eclipse/core/src/org/apache/felix/sigil/eclipse/model/util/JavaHelper.java
@@ -258,30 +258,31 @@
         IProgressMonitor monitor)
     {
         LinkedList<IPackageImport> imports = new LinkedList<IPackageImport>();
-
-        for (String packageName : findJavaImports(project, monitor))
-        {
-            if (!ProfileManager.isBootDelegate(project, packageName))
-            { // these must come from boot classloader
-                try
-                {
-                    if (!project.isInClasspath(packageName, monitor))
+        Set<String> names = findJavaImports(project, monitor);
+        if ( !monitor.isCanceled() ) {
+            for (String packageName : names)
+            {
+                if (!ProfileManager.isBootDelegate(project, packageName))
+                { // these must come from boot classloader
+                    try
                     {
-                        Collection<IPackageExport> exports = findExportsForPackage(
-                            project, packageName);
-                        if (!exports.isEmpty())
+                        if (!project.isInClasspath(packageName, monitor))
                         {
-                            imports.add(select(exports));
+                            Collection<IPackageExport> exports = findExportsForPackage(
+                                project, packageName);
+                            if (!exports.isEmpty())
+                            {
+                                imports.add(select(exports));
+                            }
                         }
                     }
-                }
-                catch (CoreException e)
-                {
-                    SigilCore.error("Failed to check classpath", e);
+                    catch (CoreException e)
+                    {
+                        SigilCore.error("Failed to check classpath", e);
+                    }
                 }
             }
         }
-
         return imports;
     }
 
@@ -297,53 +298,55 @@
 
         final Set<String> packages = findJavaImports(project, monitor);
 
-        project.visit(new IModelWalker()
-        {
-            public boolean visit(IModelElement element)
+        if (!monitor.isCanceled()) {
+            project.visit(new IModelWalker()
             {
-                if (element instanceof IPackageImport)
+                public boolean visit(IModelElement element)
                 {
-                    IPackageImport pi = (IPackageImport) element;
-                    if (!packages.contains(pi.getPackageName()))
+                    if (element instanceof IPackageImport)
                     {
-                        unused.add(pi);
-                    }
-                }
-                else if (element instanceof IRequiredBundle)
-                {
-                    IRequiredBundle rb = (IRequiredBundle) element;
-                    IRepositoryManager manager = project.getRepositoryManager();
-                    ResolutionConfig config = new ResolutionConfig(
-                        ResolutionConfig.INCLUDE_OPTIONAL
-                            | ResolutionConfig.IGNORE_ERRORS);
-                    try
-                    {
-                        IResolution r = manager.getBundleResolver().resolve(rb, config,
-                            new ResolutionMonitorAdapter(monitor));
-                        ISigilBundle bundle = r.getProvider(rb);
-                        boolean found = false;
-                        for (IPackageExport pe : bundle.getBundleInfo().getExports())
+                        IPackageImport pi = (IPackageImport) element;
+                        if (!packages.contains(pi.getPackageName()))
                         {
-                            if (packages.contains(pe.getPackageName()))
+                            unused.add(pi);
+                        }
+                    }
+                    else if (element instanceof IRequiredBundle)
+                    {
+                        IRequiredBundle rb = (IRequiredBundle) element;
+                        IRepositoryManager manager = project.getRepositoryManager();
+                        ResolutionConfig config = new ResolutionConfig(
+                            ResolutionConfig.INCLUDE_OPTIONAL
+                                | ResolutionConfig.IGNORE_ERRORS);
+                        try
+                        {
+                            IResolution r = manager.getBundleResolver().resolve(rb, config,
+                                new ResolutionMonitorAdapter(monitor));
+                            ISigilBundle bundle = r.getProvider(rb);
+                            boolean found = false;
+                            for (IPackageExport pe : bundle.getBundleInfo().getExports())
                             {
-                                found = true;
-                                break;
+                                if (packages.contains(pe.getPackageName()))
+                                {
+                                    found = true;
+                                    break;
+                                }
+                            }
+
+                            if (!found)
+                            {
+                                unused.add(rb);
                             }
                         }
-
-                        if (!found)
+                        catch (ResolutionException e)
                         {
-                            unused.add(rb);
+                            SigilCore.error("Failed to resolve " + rb, e);
                         }
                     }
-                    catch (ResolutionException e)
-                    {
-                        SigilCore.error("Failed to resolve " + rb, e);
-                    }
+                    return !monitor.isCanceled();
                 }
-                return true;
-            }
-        });
+            });
+        }
 
         return unused;
     }
@@ -860,7 +863,9 @@
         Set<String> imports = new HashSet<String>();
 
         findJavaModelImports(project, imports, monitor);
-        findTextImports(project, imports, monitor);
+        if ( !monitor.isCanceled() ) {
+            findTextImports(project, imports, monitor);
+        }
 
         return imports;
     }
@@ -905,6 +910,10 @@
         {
             for (IPackageFragment root : project.getJavaModel().getPackageFragments())
             {
+                if ( monitor.isCanceled() ) {
+                    return;
+                }
+                
                 IPackageFragmentRoot rt = (IPackageFragmentRoot) root.getAncestor(IJavaElement.PACKAGE_FRAGMENT_ROOT);
 
                 if (isInClassPath(project, rt))
diff --git a/sigil/eclipse/ui/src/org/apache/felix/sigil/eclipse/ui/actions/PruneProjectDependenciesAction.java b/sigil/eclipse/ui/src/org/apache/felix/sigil/eclipse/ui/actions/PruneProjectDependenciesAction.java
index d3715c0..1b44d7d 100644
--- a/sigil/eclipse/ui/src/org/apache/felix/sigil/eclipse/ui/actions/PruneProjectDependenciesAction.java
+++ b/sigil/eclipse/ui/src/org/apache/felix/sigil/eclipse/ui/actions/PruneProjectDependenciesAction.java
@@ -62,6 +62,8 @@
                 Collection<IModelElement> unused = JavaHelper.findUnusedReferences(
                     project, monitor);
 
+                if (monitor.isCanceled()) return Status.CANCEL_STATUS;
+                
                 if (unused.isEmpty())
                 {
                     info(shell, "No unused references found");
diff --git a/sigil/eclipse/ui/src/org/apache/felix/sigil/eclipse/ui/actions/ResolveProjectDependenciesAction.java b/sigil/eclipse/ui/src/org/apache/felix/sigil/eclipse/ui/actions/ResolveProjectDependenciesAction.java
index 413281e..6cd4b88 100644
--- a/sigil/eclipse/ui/src/org/apache/felix/sigil/eclipse/ui/actions/ResolveProjectDependenciesAction.java
+++ b/sigil/eclipse/ui/src/org/apache/felix/sigil/eclipse/ui/actions/ResolveProjectDependenciesAction.java
@@ -65,6 +65,10 @@
                 List<IPackageImport> imports = JavaHelper.findRequiredImports(project,
                     monitor);
 
+                if (monitor.isCanceled()) {
+                    return Status.CANCEL_STATUS;
+                }
+                
                 if (imports.isEmpty())
                 {
                     info(shell, "No new dependencies found");
