diff --git a/README.txt b/README.txt
index 9d14320..51270e2 100644
--- a/README.txt
+++ b/README.txt
@@ -97,6 +97,13 @@ Fine Tuning
   * Hardcode the value in the site's settings.php file:
     $conf['metatag_load_all_pages'] = FALSE;
   To re-enable this option simply set the value to TRUE.
+* By default users will be able to edit meta tags on forms based on the 'Edit
+  meta tags' permission. The 'metatag_extended_permissions' variable may be set
+  to TRUE to give each individual meta tag to have a separate permission, thus
+  allowing fine-tuning of the site's editorial control. Note: The 'Edit meta
+  tags' permission is still required otherwise none of the meta tag fields will
+  display at all. The functionality may be disabled again by either removing
+  the variable or setting it to FALSE.
 
 
 Developers
diff --git a/metatag.module b/metatag.module
index cc5d0e8..9cae299 100644
--- a/metatag.module
+++ b/metatag.module
@@ -79,7 +79,7 @@ function metatag_hook_info() {
  */
 function metatag_permission() {
   $permissions['administer meta tags'] = array(
-    'title' => t('Administer meta tags.'),
+    'title' => t('Administer meta tags'),
     'restrict access' => TRUE,
     'description' => t('Control the main settings pages and modify per-object meta tags.'),
   );
@@ -87,6 +87,19 @@ function metatag_permission() {
     'title' => t('Edit meta tags'),
     'description' => t('Modify meta tags on individual entity records (nodes, terms, users, etc).'),
   );
+
+  // Optional extended edit permissions.
+  if (variable_get('metatag_extended_permissions', FALSE)) {
+    $permissions['edit meta tags']['description'] .= '<br />' . t('Extended Permissions has been enabled. Roles that do not have the :admin permission may be assigned individual meta tag permissions below.', array(':admin' => t('Administer meta tags')));
+    $metatags = metatag_get_info();
+    foreach ($metatags['tags'] as $metatag_name => $metatag) {
+      $permissions['edit meta tag: ' . $metatag_name] = array(
+        'title' => t('Extended permission: Edit :tag meta tag', array(':tag' => $metatag['label'])),
+        'description' => t('Customize the :tag meta tag on individual forms.', array(':tag' => $metatag['label'])),
+      );
+    }
+  }
+
   return $permissions;
 }
 
@@ -883,6 +896,11 @@ function metatag_metatags_form(array &$form, $instance, array $metatags = array(
       );
     }
 
+    // Optional extended edit permissions.
+    if (variable_get('metatag_extended_permissions', FALSE)) {
+      $metatag_form['#access'] = user_access('edit meta tag: ' . $metatag_info['label']) || user_access('administer meta tags');
+    }
+
     if (!empty($metatag_info['group'])) {
       $group_key = $metatag_info['group'];
       if (isset($info['groups'][$group_key]['label']) && !isset($form['metatags'][$group_key])) {
@@ -896,11 +914,17 @@ function metatag_metatags_form(array &$form, $instance, array $metatags = array(
         );
       }
       $form['metatags'][$group_key][$metatag] = $metatag_form + array('#parents' => array('metatags', $metatag));
+      
+      if (variable_get('metatag_extended_permissions', FALSE)) {
+        $form['metatags'][$group_key]['#access'] = count(element_get_visible_children($form['metatags'][$group_key])) > 0;
+      }
     }
     else {
       $form['metatags'][$metatag] = $metatag_form;
     }
   }
+  
+  $form['metatags']['#access'] = count(element_get_visible_children($form['metatags'])) > 0;
 
   // Show the list of available tokens.
   $form['metatags']['tokens'] = array(
diff --git a/remove_empty_goups.patch b/remove_empty_goups.patch
index f001a5d..e69de29 100644
--- a/remove_empty_goups.patch
+++ b/remove_empty_goups.patch
@@ -1,31 +0,0 @@
-diff --git a/metatag.module b/metatag.module
-index 4ba70a4..9cae299 100644
---- a/metatag.module
-+++ b/metatag.module
-@@ -898,7 +898,7 @@ function metatag_metatags_form(array &$form, $instance, array $metatags = array(
- 
-     // Optional extended edit permissions.
-     if (variable_get('metatag_extended_permissions', FALSE)) {
--      $metatag_form['#access'] = user_access('edit meta tag: ' . $metatag_name) || user_access('administer meta tags');
-+      $metatag_form['#access'] = user_access('edit meta tag: ' . $metatag_info['label']) || user_access('administer meta tags');
-     }
- 
-     if (!empty($metatag_info['group'])) {
-@@ -914,11 +914,17 @@ function metatag_metatags_form(array &$form, $instance, array $metatags = array(
-         );
-       }
-       $form['metatags'][$group_key][$metatag] = $metatag_form + array('#parents' => array('metatags', $metatag));
-+      
-+      if (variable_get('metatag_extended_permissions', FALSE)) {
-+        $form['metatags'][$group_key]['#access'] = count(element_get_visible_children($form['metatags'][$group_key])) > 0;
-+      }
-     }
-     else {
-       $form['metatags'][$metatag] = $metatag_form;
-     }
-   }
-+  
-+  $form['metatags']['#access'] = count(element_get_visible_children($form['metatags'])) > 0;
- 
-   // Show the list of available tokens.
-   $form['metatags']['tokens'] = array(
