diff --git a/modules/callbacks.inc b/modules/callbacks.inc
index 5203028..d5872eb 100644
--- a/modules/callbacks.inc
+++ b/modules/callbacks.inc
@@ -344,6 +344,9 @@ function entity_metadata_user_get_properties($account, array $options, $name, $e
 
     case 'theme':
       return empty($account->theme) ? variable_get('theme_default', 'bartik') : $account->theme;
+
+    case 'pass':
+      return empty($account->pass) ? NULL : $account->pass;
   }
 }
 
@@ -356,6 +359,22 @@ function entity_metadata_user_set_properties($account, $name, $value) {
     case 'roles':
       $account->roles = array_intersect_key(user_roles(), array_flip($value));
       break;
+    
+    case 'pass':
+      // Skip if already hashed.
+      if (strpos($value, '$S$') !== FALSE) {
+        // Verbatim set password
+        $account->pass = $value;
+        break;
+      }else{
+        // Generate password hash.
+        require_once DRUPAL_ROOT . '/' . variable_get('password_inc', 'includes/password.inc');
+        $hash_count_log2 = 11;
+        if ($new_hash = user_hash_password($value, $hash_count_log2)) {
+          $account->pass = $new_hash;
+        }
+      }
+      break;
   }
 }
 
diff --git a/modules/user.info.inc b/modules/user.info.inc
index 6a8e4b8..1864423 100644
--- a/modules/user.info.inc
+++ b/modules/user.info.inc
@@ -103,6 +103,14 @@ function entity_metadata_user_entity_property_info() {
     'access callback' => 'entity_metadata_user_properties_access',
     'schema field' => 'theme',
   );
+  $properties['pass'] = array(
+    'label' => t("Password"),
+    'description' => t("User's password (hashed)."),
+    'getter callback' => 'entity_metadata_user_get_properties',
+    'setter callback' => 'entity_metadata_user_set_properties',
+    'access callback' => 'entity_metadata_user_properties_access',
+    'schema field' => 'pass',
+  );
   return $info;
 }
 
