diff --git a/includes/registration.forms.inc b/includes/registration.forms.inc
index 40872ec..82b0590 100644
--- a/includes/registration.forms.inc
+++ b/includes/registration.forms.inc
@@ -8,47 +8,30 @@
  *   object with a node defined.
  */
 function registration_form($form, &$form_state, $registration) {
-  $form_state['registration'] = $registration;
-
   global $user;
+  $form_state['registration'] = $registration;
 
-  $mail_access = $user_access = FALSE;
-
-  $who_options = array();
-
-  if ($user->uid) {
-    $who_options['me'] = t('Myself');
-  }
-
-  if (user_access("create $registration->type registration other users")) {
-    $who_options['user'] = t('Other account');
-    $user_access = TRUE;
-  }
+  $default_who = NULL;
+  $who_options = registration_entity_people($registration);
 
-  if (!$user->uid || user_access("create $registration->type registration other anonymous")) {
-    // the label will vary if this is an anon user or not
-    $label = !$user->uid ? t('Myself') : t('Other person');
-    $who_options['anon'] = $label;
-    $mail_access = TRUE;
-  }
-  
-  // get default value of who's registering field
-  $default_who = 'anon';
   if ($registration->registration_id) {
     if ($user->uid && $user->uid === $registration->user_uid) {
-      $default_who = 'me';      
+      $default_who = 'me';
     }
     else if($registration->user_uid) {
       $default_who = 'user';
     }
+    else if(isset($who_options['anon'])) {
+      $default_who = 'anon';
+    }
   }
 
   $form['who_is_registering'] = array(
     '#type' => 'select',
     '#title' => t('This registration is for:'),
     '#options' => $who_options,
-    '#access' => (count($who_options) > 1),
-    '#default_value' => $default_who
+    '#default_value' => $default_who,
+    '#required' => TRUE,
   );
 
   $form['user'] = array(
@@ -57,9 +40,9 @@ function registration_form($form, &$form_state, $registration) {
     '#default_value' => isset($registration->user) ? $registration->user->name : '',
     '#maxlength' => 60,
     '#size' => 30,
-    '#description' => t('Select a registered user by typing their username to get a list of matches.'),
+    '#description' => t('Select a user by typing their username to get a list of matches.'),
     '#autocomplete_path' => 'user/autocomplete',
-    '#access' => $user_access,
+    '#access' => isset($who_options['user']),
     '#states' => array(
       'visible' => array(
         ':input[name="who_is_registering"]' => array('value' => 'user'),
@@ -74,7 +57,7 @@ function registration_form($form, &$form_state, $registration) {
     '#default_value' => isset($registration->anon_mail) ? $registration->anon_mail : '',
     '#size' => 40,
     '#maxlength' => 255,
-    '#access' => $mail_access,
+    '#access' => isset($who_options['anon']),
     '#states' => array(
       'visible' => array(
         ':input[name="who_is_registering"]' => array('value' => 'anon'),
diff --git a/registration.module b/registration.module
index 9842b27..f40f668 100644
--- a/registration.module
+++ b/registration.module
@@ -228,7 +228,9 @@ function registration_register_page_access($entity_type, $entity) {
 
   if ($type = registration_get_entity_registration_type($entity_type, $entity)) {
     $registration = entity_get_controller('registration')->create(array('type' => $type));
-    if (entity_access('create', 'registration', $registration)) {
+    $registration->entity_id = $entity_id;
+    $registration->entity_type = $entity_type;
+    if (entity_access('create', 'registration', $registration) && count(registration_entity_people($registration)) > 0) {
       $settings = registration_entity_settings($entity_id, $entity_type);
       if ($settings['status']) {
         return TRUE;
@@ -882,3 +884,40 @@ function registration_is_registered(Registration $registration, $anon_mail = NUL
   $count = $query->countQuery()->execute()->fetchField();
   return $count > 0;
 }
+
+/**
+ * Determine people types user may register for an event.
+ * 
+ * @param Registration $registration
+ *   A registration entity.
+ * @param $account
+ *   An account, or omit to get logged in user.
+ * @return array
+ *   Array keyed with people types, with descriptions.
+ */
+function registration_entity_people(Registration $registration, $account = NULL) {
+  $account = isset($account) ? $account : $GLOBALS['user'];
+  $people = array();
+
+  // Me
+  //!empty($registration->registration_id) 
+  if ($account->uid > 0 && ($account->uid === $registration->user_uid || !registration_is_registered($registration, NULL, $account->uid))) {
+    $people['me'] = t('Myself');
+  }
+
+  // Other users
+  if (user_access("create $registration->type registration other users", $account)) {
+    $people['user'] = t('Other account');
+  }
+
+  // Anonymous people
+  if (user_access("create $registration->type registration other anonymous", $account)) {
+    $people['anon'] = (empty($account->uid)) ? t('Myself') : t('Other person');;
+  }
+  
+  if ($account->uid == 0 && user_access("create $registration->type registration", $account)) {
+    $people['anon'] = (empty($account->uid)) ? t('Myself') : t('Other person');;
+  }
+
+  return $people;
+}
\ No newline at end of file
