--- og_field_access.backup	2011-05-11 14:09:33.000000000 +0200
+++ og_field_access.module	2011-05-11 14:14:32.000000000 +0200
@@ -32,6 +32,14 @@
                   ),
                 'module' => 'og_field_access',
                 );
+            $perm = 'create ' . $field_name . ' field';
+            $perms[$perm] = array(
+                'title' => t('Create @label field.', array('@label' => $label)),
+                'description' => t('Create the @label field for existing groups.', array('@label' => $label)),
+                'roles' => array(OG_ANONYMOUS_ROLE, OG_AUTHENTICATED_ROLE),
+                'default role' => array(OG_ADMINISTRATOR_ROLE),
+                'module' => 'og_field_access',
+                );
 
             $perm = 'update ' . $field_name . ' field';
             $perms[$perm] = array(
@@ -56,13 +64,21 @@
  * Controls editing fields.
  */
 function og_field_access_field_attach_form($entity_type, $entity, &$form, $form_state, $langcode) {
-  // Make sure entity is a group or group content.
-  if (isset($entity->{OG_AUDIENCE_FIELD}) || isset($entity->{OG_GROUP_FIELD})) {
+  // Make sure entity is a group or group content
+  if ($form[OG_AUDIENCE_FIELD] || $form[OG_GROUP_FIELD]) { // This was changed from $entity->OG_* because New Nodes don't have these values in the Entity yet, but the Form does
+    // If the ID is Not Empty (anything other than FALSE, NULL or 0), this is an Update. Else, it is a Create.
+    list($id) = entity_extract_ids($entity_type, $entity);
+    if (!empty($id)) {
+      $op = 'update';
+    }
+    else {
+      $op = 'create';
+    }
     // Check field access permissions for the specific bundle.
     $fields = field_info_instances($entity_type, $form['#bundle']);
     if ($fields) {
       foreach ($fields as $field_name => $value) {
-        og_field_access_check_access($entity_type, $entity, $form, $form_state, $langcode, $field_name, 'update');
+        og_field_access_check_access($entity_type, $entity, $form, $form_state, $langcode, $field_name, $op);
       }
     }
   }
@@ -115,6 +131,13 @@
   if (!empty($form[$field_name]['#bundle'])) {
     $account = clone $user;
     list($id) = entity_extract_ids($entity_type, $entity);
+    // If the ID is empty, see if we can get it from the group context
+    if (empty($id)) {
+      $id = og_context();
+      if ($id) {
+        $gid = $id->gid;
+      }
+    }
     if (!empty($id)) {
       // Existing entity and the field exists.
       $access = FALSE;
@@ -126,6 +149,7 @@
       }
       // If there is no access, check if this is a group content.
       if (!$access && og_is_group_content_type($entity_type, $form[$field_name]['#bundle'])) {
+        // Check for Existing Bundles
         if ($gids = og_get_entity_groups($entity_type, $entity)) {
           foreach ($gids as $gid) {
             // TODO: Add "strict" mode.
@@ -135,13 +159,18 @@
             }
           }
         }
+        // Check for New Bundles
+        else if ($op == 'create' && $gid) {
+          if (og_user_access($gid, $perm)) {
+            $access = TRUE;
+          }
+        }
+        // This is an orphan group content.
         else {
-          // This is an orphan group content.
           $access = TRUE;
         }
       }
-
-      if ($op == 'update') {
+      if ($op == 'update' || $op == 'create') {
         $element = &$form[$field_name][$langcode]['#access'];
       }
       else {
