diff --git a/client/work_fetch.cpp b/client/work_fetch.cpp
index a94779ff7ce7b77fd10bbbc95d13b793e96f895d..27455546eab6f3ec20c7ec5a42c37a3b49176589 100644
--- a/client/work_fetch.cpp
+++ b/client/work_fetch.cpp
@@ -664,6 +664,16 @@ void WORK_FETCH::setup() {
         PROJECT* p = rp->project;
         p->sched_priority -= rp->estimated_flops_remaining()/max_queued_flops;
     }
+
+    // don't request work from projects w/ > 1000 runnable jobs
+    //
+    for (unsigned int i=0; i<gstate.projects.size(); i++) {
+        PROJECT* p = gstate.projects[i];
+        if (p->pwf.n_runnable_jobs > 1000 && !p->pwf.cant_fetch_work_reason) {
+            p->pwf.cant_fetch_work_reason = CANT_FETCH_WORK_TOO_MANY_RUNNABLE;
+        }
+    }
+
     std::sort(
         gstate.projects.begin(),
         gstate.projects.end(),
diff --git a/client/work_fetch.h b/client/work_fetch.h
index a3a0ce7b606294dba2329c5f7132c7cb043a7213..4390b9a551072eabf17e09c010d2729b8e9c8be6 100644
--- a/client/work_fetch.h
+++ b/client/work_fetch.h
@@ -39,6 +39,7 @@
 #define CANT_FETCH_WORK_TOO_MANY_UPLOADS            8
 #define CANT_FETCH_WORK_NOT_HIGHEST_PRIORITY        9
 #define CANT_FETCH_WORK_DONT_NEED                   10
+#define CANT_FETCH_WORK_TOO_MANY_RUNNABLE           11
 
 inline const char* cant_fetch_work_string(int reason) {
     switch (reason) {
@@ -62,6 +63,8 @@ inline const char* cant_fetch_work_string(int reason) {
         return "project is not highest priority";
     case CANT_FETCH_WORK_DONT_NEED:
         return "don't need";
+    case CANT_FETCH_WORK_TOO_MANY_RUNNABLE:
+        return "too many runnable tasks";
     }
     return "";
 }
diff --git a/clientgui/CompletionErrorPage.cpp b/clientgui/CompletionErrorPage.cpp
index 75e4194c0fd188450061bf03a34de7ebca682aa2..a9f4875ea5bfd195634bdb2efd6340860c162eee 100644
--- a/clientgui/CompletionErrorPage.cpp
+++ b/clientgui/CompletionErrorPage.cpp
@@ -218,7 +218,7 @@ void CCompletionErrorPage::OnPageChanged( wxWizardExEvent& event ) {
 
     if (m_pServerMessagesCtrl->GetLabel().IsEmpty()) {
         m_pDirectionsStaticCtrl->SetLabel(
-            _("An error has occurred;\ncheck the Event Log for details.\n\nClick Finish to close.")
+            _("Please try again later.\n\nClick Finish to close.")
         );
     } else {
         m_pDirectionsStaticCtrl->SetLabel(