diff --git a/modules/simpletest/simpletest.info b/modules/simpletest/simpletest.info
index 5583c2f..9262a77 100644
--- a/modules/simpletest/simpletest.info
+++ b/modules/simpletest/simpletest.info
@@ -53,4 +53,5 @@ files[] = tests/upgrade/upgrade.user.test
 files[] = tests/upgrade/update.aggregator.test
 files[] = tests/upgrade/update.trigger.test
 files[] = tests/upgrade/update.field.test
+files[] = tests/upgrade/update.permissions.test
 files[] = tests/upgrade/update.user.test
diff --git a/modules/simpletest/tests/upgrade/drupal-7.drupal-6-permissions.database.php b/modules/simpletest/tests/upgrade/drupal-7.drupal-6-permissions.database.php
new file mode 100644
index 0000000..8827a67
--- /dev/null
+++ b/modules/simpletest/tests/upgrade/drupal-7.drupal-6-permissions.database.php
@@ -0,0 +1,175 @@
+<?php
+/**
+ * @file
+ * Test permissions for the 6.x blog, forum permission update path.
+ */
+
+// Add several content permissions from 6.x
+db_insert('role_permission')->fields(array(
+  'rid',
+  'permission',
+  'module',
+))
+->values(array(
+  'rid' => '2',
+  'permission' => 'create blog entries',
+  'module' => '',
+))
+->values(array(
+  'rid' => '2',
+  'permission' => 'edit own blog entries',
+  'module' => '',
+))
+->values(array(
+  'rid' => '2',
+  'permission' => 'delete own blog entries',
+  'module' => '',
+))
+->values(array(
+  'rid' => '3',
+  'permission' => 'create blog entries',
+  'module' => '',
+))
+->values(array(
+  'rid' => '3',
+  'permission' => 'edit own blog entries',
+  'module' => '',
+))
+->values(array(
+  'rid' => '3',
+  'permission' => 'delete own blog entries',
+  'module' => '',
+))
+->values(array(
+  'rid' => '3',
+  'permission' => 'edit any blog entry',
+  'module' => '',
+))
+->values(array(
+  'rid' => '3',
+  'permission' => 'delete any blog entry',
+  'module' => '',
+))
+->values(array(
+  'rid' => '2',
+  'permission' => 'create forum topics',
+  'module' => '',
+))
+->values(array(
+  'rid' => '2',
+  'permission' => 'edit own forum topics',
+  'module' => '',
+))
+->values(array(
+  'rid' => '2',
+  'permission' => 'delete own forum topics',
+  'module' => '',
+))
+->values(array(
+  'rid' => '3',
+  'permission' => 'create forum topics',
+  'module' => '',
+))
+->values(array(
+  'rid' => '3',
+  'permission' => 'edit own forum topics',
+  'module' => '',
+))
+->values(array(
+  'rid' => '3',
+  'permission' => 'delete own forum topics',
+  'module' => '',
+))
+->values(array(
+  'rid' => '3',
+  'permission' => 'edit any forum topic',
+  'module' => '',
+))
+->values(array(
+  'rid' => '3',
+  'permission' => 'delete any forum topic',
+  'module' => '',
+))
+->execute();
+
+// Add several content permissions from 7.x
+db_merge('role_permission')
+  ->key(array('rid' => '3', 'permission' => 'create blog content'))
+  ->fields(array(
+    'rid' => '3',
+    'permission' => 'create blog content',
+    'module' => 'node',
+  ))
+  ->execute();
+db_merge('role_permission')
+  ->key(array('rid' => '3', 'permission' => 'edit own blog content'))
+  ->fields(array(
+    'rid' => '3',
+    'permission' => 'edit own blog content',
+    'module' => 'node',
+  ))
+  ->execute();
+db_merge('role_permission')
+  ->key(array('rid' => '3', 'permission' => 'delete own blog content'))
+  ->fields(array(
+    'rid' => '3',
+    'permission' => 'delete own blog content',
+    'module' => 'node',
+  ))
+  ->execute();
+db_merge('role_permission')
+  ->key(array('rid' => '3', 'permission' => 'edit any blog content'))
+  ->fields(array(
+    'rid' => '3',
+    'permission' => 'edit any blog content',
+    'module' => 'node',
+  ))
+  ->execute();
+db_merge('role_permission')
+  ->key(array('rid' => '3', 'permission' => 'delete any blog content'))
+  ->fields(array(
+    'rid' => '3',
+    'permission' => 'delete any blog content',
+    'module' => 'node',
+  ))
+  ->execute();
+db_merge('role_permission')
+  ->key(array('rid' => '3', 'permission' => 'create forum content'))
+  ->fields(array(
+    'rid' => '3',
+    'permission' => 'create forum content',
+    'module' => 'node',
+  ))
+  ->execute();
+db_merge('role_permission')
+  ->key(array('rid' => '3', 'permission' => 'edit own forum content'))
+  ->fields(array(
+    'rid' => '3',
+    'permission' => 'edit own forum content',
+    'module' => 'node',
+  ))
+  ->execute();
+db_merge('role_permission')
+  ->key(array('rid' => '3', 'permission' => 'delete own forum content'))
+  ->fields(array(
+    'rid' => '3',
+    'permission' => 'delete own forum content',
+    'module' => 'node',
+  ))
+  ->execute();
+db_merge('role_permission')
+  ->key(array('rid' => '3', 'permission' => 'edit any forum content'))
+  ->fields(array(
+    'rid' => '3',
+    'permission' => 'edit any forum content',
+    'module' => 'node',
+  ))
+  ->execute();
+db_merge('role_permission')
+  ->key(array('rid' => '3', 'permission' => 'delete any forum content'))
+  ->fields(array(
+    'rid' => '3',
+    'permission' => 'delete any forum content',
+    'module' => 'node',
+  ))
+  ->execute();
diff --git a/modules/simpletest/tests/upgrade/update.permissions.test b/modules/simpletest/tests/upgrade/update.permissions.test
new file mode 100644
index 0000000..48015c6
--- /dev/null
+++ b/modules/simpletest/tests/upgrade/update.permissions.test
@@ -0,0 +1,34 @@
+<?php
+/**
+ * @file
+ * Provides upgrade path tests for the content (blog, forum) permissions.
+ */
+
+/**
+ * Tests the content permissions 6.x -> 7.x upgrade path.
+ */
+class ContentPermissionsUpdatePathTestCase extends UpdatePathTestCase {
+  public static function getInfo() {
+    return array(
+      'name'  => 'Content Permissions update path',
+      'description'  => 'Content Permissions update path tests.',
+      'group' => 'Upgrade path',
+    );
+  }
+
+  public function setUp() {
+    // Use the filled upgrade path and our content permissions from 6.x.
+    $this->databaseDumpFiles = array(
+      drupal_get_path('module', 'simpletest') . '/tests/upgrade/drupal-7.filled.standard_all.database.php.gz',
+      drupal_get_path('module', 'simpletest') . '/tests/upgrade/drupal-7.drupal-6-permissions.database.php',
+    );
+    parent::setUp();
+  }
+
+  /**
+   * Tests that the upgrade is successful.
+   */
+  public function testFilledUpgrade() {
+    $this->assertTrue($this->performUpgrade(), t('The upgrade was completed successfully.'));
+  }
+}
diff --git a/modules/system/system.install b/modules/system/system.install
index df0db71..3728f1d 100644
--- a/modules/system/system.install
+++ b/modules/system/system.install
@@ -3044,8 +3044,14 @@ function system_update_7075() {
   );
 
   foreach ($permission_changes as $permission_key => $permission_change) {
-    db_update('role_permission')
-      ->fields(array('permission' => $permission_change))
+    $permission_check = db_query("SELECT rid FROM {role_permission} WHERE permission = :permission", array(':permission' => $permission_change))->fetchField();
+    if (!$permission_check) {
+      db_update('role_permission')
+        ->fields(array('permission' => $permission_change))
+        ->condition('permission', $permission_key)
+        ->execute();
+    }
+    db_delete('role_permission')
       ->condition('permission', $permission_key)
       ->execute();
   }
