diff --git a/modules/callbacks.inc b/modules/callbacks.inc
index 304f53f..2f1deef 100644
--- a/modules/callbacks.inc
+++ b/modules/callbacks.inc
@@ -638,13 +638,23 @@ function entity_metadata_no_hook_node_access($op, $node = NULL, $account = NULL)
  * Access callback for the user entity.
  */
 function entity_metadata_user_access($op, $entity = NULL, $account = NULL, $entity_type) {
-  $account = isset($account) ? $account : $GLOBALS['user'];
-  // Grant access to the users own user account and to the anonymous one.
-  if (isset($entity) && $op != 'delete' && (($entity->uid == $account->uid && $entity->uid) || (!$entity->uid && $op == 'view'))) {
-    return TRUE;
-  }
-  if (user_access('administer users', $account) || user_access('access user profiles', $account) && $op == 'view' && $entity->status) {
-    return TRUE;
+  // Make sure $entity is an object and has a uid.
+  if (($entity_type == 'user') && (isset($entity->uid))) {
+    // Make sure $account is useful.
+    $account = isset($account) ? $account : $GLOBALS['user'];
+    // Make sure $account isn't blocked
+    if ($account->status) {
+      if ($op == 'view') {
+        // Allow viewing for same user or those with view perms.
+        if (($entity->uid == $account->uid) || user_access('access user profiles', $account)) {
+          return TRUE;
+        }
+      }
+      // If the account isn't blocked and is an admin, then TRUE.
+      if (user_access('administer users', $account)) {
+        return TRUE;
+      }
+    }
   }
   return FALSE;
 }
