diff --git a/commands/user/user.drush.inc b/commands/user/user.drush.inc
index e4beac2..4c5f173 100644
--- a/commands/user/user.drush.inc
+++ b/commands/user/user.drush.inc
@@ -159,6 +159,23 @@ function user_drush_command() {
       'open `drush user-login ryan`' => 'Open web browser and login as user ryan.',
     ),
   );
+  $items['user-list'] = array(
+    'callback' => 'drush_user_list',
+    'description' => 'Display a list of users.',
+    'aliases' => array('ulis'),
+    'options' => array(
+      'names' => 'A comma separated list of names to filter by',
+      'emails' => 'A comma separated list of emails to filter by',
+      'roles' => 'A comma sepparated list of roles to filter by',
+      'status' => 'Filter by status of the account. Can be active or blocked',
+    ),
+    'examples' => array(
+      'drush user-list --names=ryan,admin' => 'Displays a list of users with the name ryan or admin.',
+      'drush user-list --emails=dude@gmail.com' => 'Displays a list of users with the email dude@gmail.com.',
+      'drush user-list --roles=admin,editor' => 'Displays a list of users with the roles admin or editor.',
+      'drush user-list --status=blocked' => 'Displays a list of blocked users.',
+    ),
+  );
 
   // Drupal 7 only options.
   if (drush_drupal_major_version() >= 7) {
@@ -481,6 +498,104 @@ function drush_user_login($name = NULL) {
 }
 
 /**
+ * Displays a list of users
+ */
+function drush_user_list() {
+  // get options passed
+  $names = drush_get_option('names');
+  $names = (!empty($names)) ? explode(',', $names) : $names;
+
+  $emails = drush_get_option('emails');
+  $emails = (!empty($emails)) ? explode(',', $emails) : $emails;
+
+  $roles = drush_get_option('roles');
+  $roles = (!empty($roles)) ? explode(',', $roles) : $roles;
+
+  $status = drush_get_option('status');
+
+  $uids = array(); // this array will be used for printing the table
+
+  // if names were specified
+  if (!empty($names)) {
+    foreach($names as $name){
+      $uid = _drush_user_get_uid($name);
+      $uids[] = $uid;
+    }
+  }
+
+  // if emails were speficied
+  if (!empty($emails)) {
+    foreach($emails as $email){
+      $uid = _drush_user_get_uid($email);
+      $uids[] = $uid;
+    }
+  }
+
+  if(!empty($status)) {
+    if ($status == 'active') { $st = '1'; }
+    if ($status == 'blocked') { $st = '0'; }
+    if(isset($st)) {
+      $query_mod = "WHERE (users.status = $st)";
+    }
+  }
+
+  // @TODO get the uids for the roles specified
+  if(!empty($roles)) {
+    $placeholder = db_placeholders($roles, 'text');
+    $query = db_query("SELECT ur.uid FROM {users_roles} AS ur INNER JOIN {role} AS r on ur.rid = r.rid WHERE r.name IN ($placeholder)", $roles);
+    while ($uid = drush_db_fetch_object($query)) {
+      $uids[] = $uid->uid;
+    }
+  }
+
+  // remove posible duplicates
+  $uids = array_unique($uids);
+
+  // if we dont have any $uids, get the whole list
+  if (empty($uids)) {
+    // get all UIDs
+    $uid_query = db_query("SELECT uid FROM {users} AS users $query_mod");
+    while ($uid = drush_db_fetch_object($uid_query)) {
+      $uids[] = $uid->uid;
+    }
+  }
+
+  // build the table
+  $header = array('UID', 'Name', 'Email', 'Roles', 'Status');
+  $rows[] = $header;
+
+  // load each users info and add it to the results table
+  foreach ($uids as $key => $uid) {
+    if (empty($uid)) { // ignore annonymous user
+      continue;
+    }
+    $user = user_load(array('uid' => $uid));
+
+    // check the user status
+    if(isset($st)) {
+      if($user->status !== $st){
+        continue;
+      }
+    }
+
+    unset($user->roles[2]);// remove authenticated user from roles list
+    $user_roles = implode(', ', $user->roles);
+
+    $user_status = ($user->status) ? 'Active' : 'Blocked';
+    $user_row = array(
+      $uid,
+      $user->name,
+      $user->mail,
+      $user_roles,
+      $user_status,
+    );
+    $rows[] = $user_row;
+  }
+
+  drush_print_table($rows, TRUE);
+}
+
+/**
  * Print information about a given uid
  */
 function _drush_user_print_info($uid) {
