diff --git a/translators/tmgmt_local/includes/tmgmt_local.pages.inc b/translators/tmgmt_local/includes/tmgmt_local.pages.inc
index ee0d82e..f9ca06c 100644
--- a/translators/tmgmt_local/includes/tmgmt_local.pages.inc
+++ b/translators/tmgmt_local/includes/tmgmt_local.pages.inc
@@ -406,6 +406,12 @@ function tmgmt_local_translation_form_update_state_ajax($form, &$form_state) {
 function tmgmt_local_translation_assign_form($form, &$form_state, $tasks) {
   $form_state['tasks'] = explode(',', $tasks);
 
+  $roles = tmgmt_local_translator_roles();
+  if (empty($roles)) {
+    drupal_set_message(t('No user role has the "provide translation services" permission. <a href="@url">Configure permissions</a> for the Local translator module.',
+      array('@url' => url('admin/people/permissions'))), 'warning');
+  }
+
   $form['tuid'] = array(
     '#title' => t('Assign to'),
     '#type' => 'select',
@@ -453,6 +459,12 @@ function tmgmt_local_translation_assign_form_submit($form, &$form_state) {
 function tmgmt_local_translation_reassign_form($form, &$form_state, $tasks) {
   $form_state['tasks'] = explode(',', $tasks);
 
+  $roles = tmgmt_local_translator_roles();
+  if (empty($roles)) {
+    drupal_set_message(t('No user role has the "provide translation services" permission. <a href="@url">Configure permissions</a> for the Local translator module.',
+      array('@url' => url('admin/people/permissions'))), 'warning');
+  }
+
   $form['tuid'] = array(
     '#title' => t('Assign to'),
     '#type' => 'select',
diff --git a/translators/tmgmt_local/tmgmt_local.module b/translators/tmgmt_local/tmgmt_local.module
index 83576cc..847cd23 100644
--- a/translators/tmgmt_local/tmgmt_local.module
+++ b/translators/tmgmt_local/tmgmt_local.module
@@ -588,8 +588,11 @@ function tmgmt_local_get_translators_for_tasks($tasks) {
   if (count($translators) > 1) {
     return call_user_func_array('array_intersect', $translators);
   }
+  elseif (count($translators) == 1) {
+    return array_shift($translators);
+  }
 
-  return array_shift($translators);
+  return $translators;
 }
 
 /**
@@ -718,10 +721,9 @@ function tmgmt_local_supported_language_pairs($source_language = NULL, $uids = a
     return $language_pairs[$cache_key];
   }
 
-  $query = tmgmt_local_capabilities_query($source_language, NULL, $uids);
   $language_pairs[$cache_key] = array();
 
-  foreach ($query->execute() as $row) {
+  foreach (tmgmt_local_capabilities($source_language, NULL, $uids) as $row) {
     // Prevent duplicates.
     $pair_key = $row->tmgmt_translation_skills_language_from . '__' . $row->tmgmt_translation_skills_language_to;
     $language_pairs[$cache_key][$pair_key] = array(
@@ -777,9 +779,8 @@ function tmgmt_local_translators($source_language = NULL, array $target_language
   }
 
   // Get all capabilities keyed by uids for given source language.
-  $query = tmgmt_local_capabilities_query($source_language);
   $translators_capabilities = array();
-  foreach ($query->execute() as $row) {
+  foreach (tmgmt_local_capabilities($source_language) as $row) {
     $translators_capabilities[$row->uid][] = $row->tmgmt_translation_skills_language_to;
   }
 
@@ -806,7 +807,7 @@ function tmgmt_local_translators($source_language = NULL, array $target_language
 }
 
 /**
- * Builds a query to search for language capabilities.
+ * Gets language capabilities.
  *
  * @param string $source_language
  *   (optional) Limit the source language.
@@ -815,10 +816,22 @@ function tmgmt_local_translators($source_language = NULL, array $target_language
  * @param array $uids
  *   (optional) Limit to specific users.
  *
- * @return SelectQuery
- *   A select query that is preconfigured based on the passed in conditions.
+ * @return array
+ *   Array of language capabilities with following data:
+ *   - tmgmt_translation_skills_language_from
+ *   - tmgmt_translation_skills_language_to
+ *   - uid
+ *   - name
+ *   - mail
  */
-function tmgmt_local_capabilities_query($source_language = NULL, $target_language = NULL, $uids = array()) {
+function tmgmt_local_capabilities($source_language = NULL, $target_language = NULL, $uids = array()) {
+
+  $roles = tmgmt_local_translator_roles();
+  // If there are no roles that have the required permission, return an empty
+  // array.
+  if (empty($roles)) {
+    return array();
+  }
 
   $query = db_select('field_data_tmgmt_translation_skills', 'ts')
     ->fields('ts', array('tmgmt_translation_skills_language_from', 'tmgmt_translation_skills_language_to'))
@@ -841,14 +854,27 @@ function tmgmt_local_capabilities_query($source_language = NULL, $target_languag
     $query->condition('u.uid', $uids);
   }
 
-  // Only consider users that have the 'provide translation services' perm.
-  $roles = user_roles(TRUE, 'provide translation services');
-  $query->leftJoin('users_roles', 'ur', "ur.uid = u.uid AND ur.rid IN (:roles)", array(':roles' => implode(', ', array_keys($roles))));
+  // If authenticated user is has the required permission we do not have to do
+  // the role check.
+  if (!in_array('authenticated user', $roles)) {
+    $query->leftJoin('users_roles', 'ur', 'ur.uid = u.uid');
+    $query->leftJoin('users_roles', 'ur', "ur.uid = u.uid AND ur.rid IN (:roles)", array(':roles' => implode(', ', array_keys($roles))));
+  }
 
   // Add a tag so other modules can alter this query at will.
   $query->addTag('tmgmt_translation_combination');
 
-  return $query;
+  return $query->execute()->fetchAll();
 }
 
+/**
+ * Get roles with 'provide translation services' permissions.
+ *
+ * @return array
+ *   An associative array with the role id as the key and the role name as
+ *   value.
+ */
+function tmgmt_local_translator_roles() {
+  return user_roles(TRUE, 'provide translation services');
+}
 
diff --git a/translators/tmgmt_local/tmgmt_local.test b/translators/tmgmt_local/tmgmt_local.test
index 17cfe4f..b8ead9c 100644
--- a/translators/tmgmt_local/tmgmt_local.test
+++ b/translators/tmgmt_local/tmgmt_local.test
@@ -10,13 +10,6 @@
  */
 class TMGMTLocalTestCase extends TMGMTBaseTestCase {
 
-  /**
-   * Translator user.
-   *
-   * @var object
-   */
-  protected $local_translator;
-
   protected $local_translator_permissions = array(
     'provide translation services',
     'use Rules component rules_tmgmt_local_task_assign_to_me',
@@ -35,9 +28,6 @@ class TMGMTLocalTestCase extends TMGMTBaseTestCase {
     parent::setUp(array('tmgmt_language_combination', 'tmgmt_local', 'tmgmt_ui'));
     $this->loginAsAdmin();
     $this->setEnvironment('de');
-
-    $this->local_translator = $this->drupalCreateUser($this->local_translator_permissions);
-
   }
 
   function testTranslatorSkillsForTasks() {
@@ -151,13 +141,30 @@ class TMGMTLocalTestCase extends TMGMTBaseTestCase {
   function testBasicWorkflow() {
     $translator = tmgmt_translator_load('local');
 
-    // Create a job and request a local translation.
-    $this->loginAsTranslator();
+    // Login as admin and visit the assign/reassign tasks page to check for the
+    // warning message about the missing permission.
+    $this->loginAsAdmin(array('administer translation tasks'));
+
     $job = $this->createJob();
     $job->translator = $translator->name;
-    $job->settings['job_comment'] = $job_comment = 'Dummy job comment';
-    $job->addItem('test_source', 'test', '1');
-    $job->addItem('test_source', 'test', '2');
+    $job->save();
+    // Request translation directly on controller to bypass the language checks.
+    tmgmt_translator_load('local')->getController()->requestTranslation($job);
+
+    $query = new EntityFieldQuery();
+    $result = $query->entityCondition('entity_type', 'tmgmt_local_task')->propertyCondition('tjid', $job->tjid)->execute();
+    $tasks_ids = array_keys($result['tmgmt_local_task']);
+    $task_id = reset($tasks_ids);
+
+    $this->drupalGet('manage-translate/reassign-tasks/' . $task_id);
+    $this->assertRaw(t('No user role has the "provide translation services" permission. <a href="@url">Configure permissions</a> for the Local translator module.',
+      array('@url' => url('admin/people/permissions'))));
+
+    $this->drupalGet('manage-translate/assign-tasks/' . $task_id);
+    $this->assertRaw(t('No user role has the "provide translation services" permission. <a href="@url">Configure permissions</a> for the Local translator module.',
+      array('@url' => url('admin/people/permissions'))));
+
+    $job->delete();
 
     // Create another local translator with the required capabilities.
     $other_translator_same = $this->drupalCreateUser($this->local_translator_permissions);
@@ -169,26 +176,35 @@ class TMGMTLocalTestCase extends TMGMTBaseTestCase {
     );
     $this->drupalPost('user/' . $other_translator_same->uid . '/edit', $edit, t('Save'));
 
+    $local_translator = $this->drupalCreateUser($this->local_translator_permissions);
+
+    $job = $this->createJob();
+    $job->translator = $translator->name;
+    $job->save();
+    $job->settings['job_comment'] = $job_comment = 'Dummy job comment';
+    $job->addItem('test_source', 'test', '1');
+    $job->addItem('test_source', 'test', '2');
+
     // Check that the user is not listed in the translator selection form.
     $uri = $job->uri();
     $this->loginAsAdmin();
     $this->drupalGet($uri['path']);
     $this->assertText(t('Select translator for this job'));
     $this->assertText($other_translator_same->name);
-    $this->assertNoText($this->local_translator->name);
+    $this->assertNoText($local_translator->name);
 
-    $this->drupalLogin($this->local_translator);
+    $this->drupalLogin($local_translator);
     // Configure language capabilities.
     $edit = array(
       'tmgmt_translation_skills[und][0][language_from]' => 'en',
       'tmgmt_translation_skills[und][0][language_to]' => 'de',
     );
-    $this->drupalPost('user/' . $this->local_translator->uid . '/edit', $edit, t('Save'));
+    $this->drupalPost('user/' . $local_translator->uid . '/edit', $edit, t('Save'));
 
     // Check that the translator is now listed.
     $this->loginAsAdmin();
     $this->drupalGet($uri['path']);
-    $this->assertText($this->local_translator->name);
+    $this->assertText($local_translator->name);
 
     $job->requestTranslation();
 
@@ -197,7 +213,7 @@ class TMGMTLocalTestCase extends TMGMTBaseTestCase {
     $this->drupalGet($uri['path']);
     $this->assertText($job_comment);
 
-    $this->drupalLogin($this->local_translator);
+    $this->drupalLogin($local_translator);
 
     // Create a second local translator with different language capabilities,
     // make sure that he does not see the task.
@@ -212,7 +228,7 @@ class TMGMTLocalTestCase extends TMGMTBaseTestCase {
     $this->drupalGet('translate');
     $this->assertNoText(t('Task for @job', array('@job' => $job->label())));
 
-    $this->drupalLogin($this->local_translator);
+    $this->drupalLogin($local_translator);
 
     // Check the translate overview.
     $this->drupalGet('translate');
@@ -227,7 +243,7 @@ class TMGMTLocalTestCase extends TMGMTBaseTestCase {
     $this->drupalGet('translate');
     $this->assertNoText(t('Task for @job', array('@job' => $job->label())));
 
-    $this->drupalLogin($this->local_translator);
+    $this->drupalLogin($local_translator);
 
     // @todo: Assign bulk action missing, permission problem?
     /*$edit = array(
@@ -453,6 +469,31 @@ class TMGMTLocalTestCase extends TMGMTBaseTestCase {
 
     $all_translators = array();
 
+    // Create a user that will have removed the translation permissions.
+    $not_translator = $this->drupalCreateUser($this->local_translator_permissions);
+    $this->drupalLogin($not_translator);
+    $edit = array(
+      'tmgmt_translation_skills[und][0][language_from]' => 'en',
+      'tmgmt_translation_skills[und][0][language_to]' => 'ru',
+    );
+    $this->drupalPost('user/' . $not_translator->uid . '/edit', $edit, t('Save'));
+    // Now revoke translation permissions.
+    foreach ($not_translator->roles as $rid => $role) {
+      if ($role != 'authenticated user') {
+        user_role_revoke_permissions($rid, $this->local_translator_permissions);
+        break;
+      }
+    }
+
+    // Test for the case when we have users with capabilities but not with
+    // permissions to translate.
+    $this->assertEqual(tmgmt_local_supported_language_pairs(), array());
+    $local_cache = &drupal_static('tmgmt_local_supported_language_pairs');
+    $local_cache = NULL;
+    $this->assertEqual(tmgmt_local_translators(), array());
+    $local_cache = &drupal_static('tmgmt_local_translators');
+    $local_cache = NULL;
+
     $translator1 = $this->drupalCreateUser($this->local_translator_permissions);
     $all_translators[$translator1->uid] = $translator1->name;
     $this->drupalLogin($translator1);
