diff --git a/field_permissions.module b/field_permissions.module
index ce14ee0..4ad60d0 100644
--- a/field_permissions.module
+++ b/field_permissions.module
@@ -136,23 +136,21 @@ function field_permissions_field_access($op, $field, $obj_type, $object, $accoun
   if (!isset($field['field_permissions']['type']) || $field['field_permissions']['type'] == FIELD_PERMISSIONS_PUBLIC) {
     return;
   }
+  elseif (user_access('administer field permissions', $account) || user_access('access private fields', $account)) {
+    return TRUE;
+  }
   // If the field is private, then only the author (and administrators with the
   // 'access private fields' permissions) can view and edit it.
   elseif ($field['field_permissions']['type'] == FIELD_PERMISSIONS_PRIVATE) {
-    if (user_access('access private fields', $account)) {
+    if (!isset($object) && $op == 'view') {
+      // See comments in _field_permissions_field_view_access() about why we
+      // need to return TRUE in this situation for Views to work correctly
+      // (and why it should be safe to do so).
       return TRUE;
     }
     else {
-      if (!isset($object) && $op == 'view') {
-        // See comments in _field_permissions_field_view_access() about why we
-        // need to return TRUE in this situation for Views to work correctly
-        // (and why it should be safe to do so).
-        return TRUE;
-      }
-      else {
-        module_load_include('inc', 'field_permissions', 'includes/field_access');
-        return _field_permissions_object_is_owned_by_account($object, $account);
-      }
+      module_load_include('inc', 'field_permissions', 'includes/field_access');
+      return _field_permissions_object_is_owned_by_account($object, $account);
     }
   }
   // Otherwise, check access by permission.
