diff --git a/domain.drush.inc b/domain.drush.inc
index d17605c..ce8dca0 100644
--- a/domain.drush.inc
+++ b/domain.drush.inc
@@ -97,6 +97,44 @@ function domain_drush_command() {
       'drush domain-repair',
     ),
   );
+  $items['domain-user-domains'] = array(
+    'description' => 'List the domains assigned to a user.',
+    'examples' => array(
+      'drush domain-user-domains john.doe',
+    ),
+    'arguments' => array(
+      'user' => 'The username or email of the user',
+    ),
+  );
+  $items['domain-user-users'] = array(
+    'description' => 'List the users assigned to a domain.',
+    'examples' => array(
+      'drush domain-user-users',
+    ),
+    'arguments' => array(
+      'domain' => 'The domain id or name',
+    ),
+  );
+  $items['domain-user-assign'] = array(
+    'description' => 'Assign a user to a domain.',
+    'examples' => array(
+      'drush domain-user-assign example.com john.doe',
+    ),
+    'arguments' => array(
+      'domain' => 'The domain to which the user shall be assigned.',
+      'user' => 'The user (username or email) to assign to the domain.',
+    ),
+  );
+  $items['domain-user-unassign'] = array(
+    'description' => 'Unassign a user from a domain.',
+    'examples' => array(
+      'drush domain-user-unassign example.com john.doe',
+    ),
+    'arguments' => array(
+      'domain' => 'The domain from which the user shall be unassigned.',
+      'user' => 'The (username or email) user to unassign.',
+    ),
+  );
   return $items;
 }
 
@@ -421,7 +459,7 @@ function drush_domain_default($argument) {
 function drush_domain_get_from_argument($argument) {
   $domain = domain_lookup($argument);
   if ($domain == -1) {
-    $domain = domain_lookup(NULL, $argument);
+    $domain = domain_lookup(NULL, $argument, true);
   }
   if ($domain == -1) {
     drush_set_error('domain', dt('Domain record not found.'));
@@ -454,3 +492,156 @@ function drush_domain_repair() {
     }
   }
 }
+
+/**
+ * Assign a user to a domain
+ *
+ * @param $domain_search
+ *   The domain name
+ *
+ * @param $user_search
+ *   The user name or email
+ *
+ * @return
+ *   Void or error
+ */
+function drush_domain_user_assign($domain_argument, $user_argument) {
+  // get domain_id
+  if ($domain = drush_domain_get_from_argument($domain_argument)) {
+    $domain_id = $domain['domain_id'];
+  }
+  else {
+    return drush_set_error('domain', dt('Domain record not found.'));
+  }
+  // get uid
+  $uid = _drush_user_get_uid($user_argument);
+
+  // check that this user isn't already assigned to this domain
+  $user_domains = domain_get_user_domains(user_load($uid));
+  if (! in_array($domain_id, $user_domains)) {
+    // perform assignation
+      db_insert('domain_editor')
+      ->fields(array('uid', 'domain_id'))
+      ->values(array('uid' => $uid, 'domain_id' => $domain_id))
+      ->execute();
+
+    drush_print(dt('User !user assigned to domain !domain.', array('!user' => $user_argument, '!domain' => $domain_argument)));
+  }
+}
+
+/**
+ * Unssign a user from a domain
+ *
+ * @param $domain_search
+ *   The domain name
+ *
+ * @param $user_search
+ *   The user name or email
+ *
+ * @return
+ *   Void or error
+ */
+function drush_domain_user_unassign($domain_argument, $user_argument) {
+  // get domain_id
+  if ($domain = drush_domain_get_from_argument($domain_argument)) {
+    $domain_id = $domain['domain_id'];
+  }
+  else {
+    return drush_set_error('domain', dt('Domain record not found.'));
+  }
+  // get uid
+  $uid = _drush_user_get_uid($user_argument);
+
+  // check that this user is assigned to this domain
+  $user_domains = domain_get_user_domains(user_load($uid));
+  if (in_array($domain_id, $user_domains)) {
+    // perform unassignation
+      db_delete('domain_editor')
+      ->condition('uid', $uid)
+      ->condition('domain_id', $domain_id)
+      ->execute();
+
+    drush_print(dt('User !user unassigned from domain !domain.', array('!user' => $user_argument, '!domain' => $domain_argument)));
+  }
+}
+
+/**
+ * List the domains assigned to a user
+ *
+ * @return
+ *   Void
+ */
+function drush_domain_user_domains($argument) {
+  // get uid
+  $uid = _drush_user_get_uid($argument);
+
+  $domains = domain_domains();
+  $user_domains = domain_get_user_domains(user_load($uid));
+  foreach (array_keys($user_domains) as $domain_id) {
+    $user_domains[$domain_id] = $domains[$domain_id];
+  }
+
+  $header = array(
+    'weight' => dt('weight'),
+    'sitename' => dt('sitename'),
+    'subdomain' => dt('domain'),
+    'scheme' => dt('scheme'),
+    'valid' => dt('active'),
+    'is_default' => dt('is_default'),
+    'domain_id' => dt('domain_id'),
+    'machine_name' => dt('machine_name'),
+  );
+  $rows = array(array_values($header));
+  foreach ($user_domains as $domain) {
+    $row = array();
+    foreach ($header as $key => $name) {
+      $row[] = check_plain($domain[$key]);
+    }
+    $rows[] = $row;
+  }
+  drush_print_table($rows, TRUE);
+}
+
+/**
+ * List the users assigned to a domain
+ *
+ * @return
+ *   Void
+ */
+function drush_domain_user_users($argument) {
+  if ($domain = drush_domain_get_from_argument($argument)) {
+    $domain_id = $domain['domain_id'];
+  }
+  else {
+    return drush_set_error('domain', dt('Domain record not found.'));
+  }
+
+  $uids = db_select('domain_editor', 'de')
+    ->fields('de', array('uid'))
+    ->condition('domain_id', $domain_id)
+    ->execute()
+    ->fetchAll();
+
+  $header = array(
+    'uid' => dt('uid'),
+    'name' => dt('name'),
+    'mail' => dt('mail'),
+    'roles' => dt('roles'),
+    'status' => dt('status'),
+  );
+  $rows = array(array_values($header));
+  foreach ($uids as $uid) {
+    $user = user_load($uid->uid);
+    var_dump($user);
+    $row = array();
+    foreach ($header as $key => $name) {
+      $value = $user->$key;
+      if (is_array($value)) {
+        $value = implode(", ", $value);
+      }
+      $row[] = check_plain($value);
+    }
+    $rows[] = $row;
+  }
+  drush_print_table($rows, TRUE);
+}
