diff --git a/modules/update/update.install b/modules/update/update.install
index f0d5499..9f40f4c 100644
--- a/modules/update/update.install
+++ b/modules/update/update.install
@@ -123,7 +123,7 @@ function _update_requirement_check($project, $type) {
     $requirement['title'] = t('Module and theme update status');
   }
   $status = $project['status'];
-  if ($status != UPDATE_CURRENT) {
+  if ($status != UPDATE_CURRENT && user_access('update notification')) {
     $requirement['reason'] = $status;
     $requirement['description'] = _update_message_text($type, $status, TRUE);
     $requirement['severity'] = REQUIREMENT_ERROR;
@@ -157,3 +157,34 @@ function _update_requirement_check($project, $type) {
   $requirement['value'] = l($requirement_label, update_manager_access() ? 'admin/reports/updates/update' : 'admin/reports/updates');
   return $requirement;
 }
+
+/**
+ * Grants 'update notification' permission to users with permission to 
+ * 'access administration pages'.
+ * 
+ * Implements hook_update_N().
+ *
+ * Up to now everyone with 'access administration pages' permission
+ * receives error messages on admin pages whenever there are security updates
+ * to Drupal or contrib projects. As of update 8000, these notifications can be
+ * enabled or disabled by granting/revoking 'update notification' permission.
+ * This update grants 'update notification' permission to anyone who has had 
+ * this permission through 'access administration pages' in the past.
+ */
+function update_update_8000() {
+  $roles = user_roles();
+
+  $rids = array();
+  foreach ($roles as $rid => $role) {
+    $rids[] = $rid;
+  }
+
+  $permissions_by_role = user_role_permissions($rids);
+
+  foreach ($permissions_by_role as $rid => $permissions) {
+    if ($permissions['access administration pages']) {
+      user_role_grant_permissions($rid, array('update notification'));
+    }
+  }
+
+}
diff --git a/modules/update/update.module b/modules/update/update.module
index a2d705a..8b3392f 100644
--- a/modules/update/update.module
+++ b/modules/update/update.module
@@ -259,6 +259,19 @@ function update_manager_access() {
 }
 
 /**
+ * Implements hook_permission().
+ */
+function update_permission() {
+  return array(
+    'update notification' => array(
+      'title' => t('Update notification'),
+      'description' => t('Access update notification message. This notification '
+        . 'is displayed on all admin pages when security updates are available for Drupal.'),
+    ),
+  );  
+}
+
+/**
  * Implements hook_theme().
  */
 function update_theme() {
diff --git a/modules/update/update.settings.inc b/modules/update/update.settings.inc
index 60ac3ca..ef6d4c5 100644
--- a/modules/update/update.settings.inc
+++ b/modules/update/update.settings.inc
@@ -43,7 +43,12 @@ function update_settings($form) {
       'all' => t('All newer versions'),
       'security' => t('Only security updates'),
     ),
-    '#description' => t('You can choose to send e-mail only if a security update is available, or to be notified about all newer versions. If there are updates available of Drupal core or any of your installed modules and themes, your site will always print a message on the <a href="@status_report">status report</a> page, and will also display an error message on administration pages if there is a security update.', array('@status_report' => url('admin/reports/status')))
+    '#description' => t('You can choose to send e-mail only if a security update is available, or to be notified about all newer versions. If there are updates available of Drupal core or any of your installed modules and themes, your site will always print a message on the <a href="@status_report">status report</a> page. Users with permission to receive <a href="@update_notifications">update notifications</a> will see an error message on administration pages if there is a security update.', 
+      array(
+        '@status_report' => url('admin/reports/status'), 
+        '@update_notifications' => url('admin/people/permissions', 
+                                   array('fragment' => 'module-update')),
+      )),
   );
 
   $form = system_settings_form($form);
diff --git a/modules/update/update.test b/modules/update/update.test
index e72f4c5..04cfbd0 100644
--- a/modules/update/update.test
+++ b/modules/update/update.test
@@ -64,7 +64,7 @@ class UpdateCoreTestCase extends UpdateTestHelper {
 
   function setUp() {
     parent::setUp('update_test', 'update');
-    $admin_user = $this->drupalCreateUser(array('administer site configuration', 'administer modules'));
+    $admin_user = $this->drupalCreateUser(array('administer site configuration', 'administer modules', 'update notification'));
     $this->drupalLogin($admin_user);
   }
 
@@ -226,6 +226,50 @@ class UpdateCoreTestCase extends UpdateTestHelper {
 
 }
 
+class UpdateLimitedPermissionsCoreTestCase extends UpdateTestHelper {
+
+  public static function getInfo() {
+    return array(
+      'name' => 'Update permissions',
+      'description' => "Confirm users without 'update notification' permission will not see security update warnings",
+      'group' => 'Update',
+    );
+  }
+
+  function setUp() {
+    parent::setUp('update_test', 'update');
+    $admin_user = $this->drupalCreateUser(array('access administration pages', 'administer site configuration'));
+    $this->drupalLogin($admin_user);
+  }
+
+  /**
+   * Check the messages at admin page when missing a security update.
+   */
+  function testAdminPageSecurityUpdate() {
+    $this->setSystemInfo7_0();
+
+    // Instead of using refreshUpdateStatus(), set these manually.
+    variable_set('update_fetch_url', url('update-test', array('absolute' => TRUE)));
+    variable_set('update_test_xml_map', array('drupal' => '2-sec'));
+    //$this->drupalGet('admin/reports/updates'); 
+    $this->drupalGet('admin/reports/updates/check');
+
+    // Make sure admin page does NOT warn you you're missing a security update.
+    $this->drupalGet('admin');
+    $this->assertNoText(t('There are updates available for your version of Drupal.'));
+    $this->assertNoText(t('There is a security update available for your version of Drupal.'));
+  }
+
+  protected function setSystemInfo7_0() {
+    $setting = array(
+      '#all' => array(
+        'version' => '7.0',
+      ),
+    );
+    variable_set('update_test_system_info', $setting);
+  }
+}
+
 class UpdateTestContribCase extends UpdateTestHelper {
 
   public static function getInfo() {
@@ -598,7 +642,7 @@ class UpdateTestUploadCase extends UpdateTestHelper {
   public function setUp() {
     parent::setUp('update', 'update_test');
     variable_set('allow_authorize_operations', TRUE);
-    $admin_user = $this->drupalCreateUser(array('administer software updates', 'administer site configuration'));
+    $admin_user = $this->drupalCreateUser(array('administer software updates', 'administer site configuration', 'update notification'));
     $this->drupalLogin($admin_user);
   }
 
