diff --git modules/callbacks.inc modules/callbacks.inc
index 12a4042..f8944e3 100644
--- modules/callbacks.inc
+++ modules/callbacks.inc
@@ -515,6 +515,22 @@ function entity_metadata_user_access($op, $entity = NULL, $account = NULL, $enti
 }
 
 /**
+ * Access callback for restricted user properties.
+ */
+function entity_metadata_user_properties_access($op, $property, $entity = NULL, $account = NULL) {
+  $account = isset($account) ? $account : $GLOBALS['user'];
+  // Grant access to all properties of the own account.
+  if (isset($entity) && $account->uid == $entity->uid) {
+    return TRUE;
+  }
+  // Only the administer users permission can access restricted user properties.
+  if (user_access('administer users', $account)) {
+    return TRUE;
+  }
+  return FALSE;
+}
+
+/**
  * Access callback for the comment entity.
  */
 function entity_metadata_comment_access($op, $entity = NULL, $account = NULL) {
diff --git modules/user.info.inc modules/user.info.inc
index b25f412..bdd93d1 100644
--- modules/user.info.inc
+++ modules/user.info.inc
@@ -34,6 +34,7 @@ function entity_metadata_user_entity_property_info() {
     'setter callback' => 'entity_property_verbatim_set',
     'validation callback' => 'valid_email_address',
     'required' => TRUE,
+    'access callback' => 'entity_metadata_user_properties_access',
   );
   $properties['url'] = array(
     'label' => t("URL"),
@@ -66,6 +67,7 @@ function entity_metadata_user_entity_property_info() {
     'setter callback' => 'entity_metadata_user_set_properties',
     'setter permission' => 'administer users',
     'options list' => 'entity_metadata_user_roles',
+    'access callback' => 'entity_metadata_user_properties_access',
   );
   return $info;
 }
