diff --git a/modules/apply_for_role/apply_for_role.module b/modules/apply_for_role/apply_for_role.module
index e15bffd..509992f 100644
--- a/modules/apply_for_role/apply_for_role.module
+++ b/modules/apply_for_role/apply_for_role.module
@@ -37,7 +37,8 @@ function apply_for_role_menu() {
   $items['admin/settings/apply_for_role'] = array(
     'title' => t('Apply for role administration'),
     'description' => t('Administer which roles users can apply for.'),
-    'page callback' => 'apply_for_role_settings',
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('apply_for_role_settings_form'),
     'access arguments' => array('administer apply for role'),
   );
 
@@ -48,26 +49,26 @@ function apply_for_role_menu() {
     'access arguments' => array('approve role applications'),
   );
 
-  $items['admin/user/apply_for_role/approve'] = array(
+  $items['admin/user/apply_for_role/approve/%user/%'] = array(
     'title' => t('Approve role application'),
     'page callback' => 'drupal_get_form',
-    'page arguments' => array('apply_for_role_manage_form'),
+    'page arguments' => array('apply_for_role_approve_form', 4, 5),
     'access arguments' => array('approve role applications'),
     'type' => MENU_CALLBACK,
   );
 
-  $items['admin/user/apply_for_role/remove'] = array(
+  $items['admin/user/apply_for_role/remove/%user/%'] = array(
     'title' => t('Remove role application'),
     'page callback' => 'drupal_get_form',
-    'page arguments' => array('apply_for_role_manage_form'),
+    'page arguments' => array('apply_for_role_remove_form', 4, 5),
     'access arguments' => array('approve role applications'),
     'type' => MENU_CALLBACK,
   );
 
   $items['user/%user/apply_for_role'] = array(
     'title' => t('Apply for role'),
-    'page callback' => 'apply_for_role_page',
-    'page arguments' => array(1),
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('apply_for_role_apply_form', 1),
     'access callback' => 'apply_for_role_access',
     'access arguments' => array(1),
     'type' => MENU_LOCAL_TASK,
@@ -79,10 +80,6 @@ function apply_for_role_menu() {
 /**
  * Administration
  */
-function apply_for_role_settings() {
-  $output = drupal_get_form('apply_for_role_settings_form');
-  print theme('page', $output, TRUE);
-}
 
 function apply_for_role_settings_form() {
   $selected_roles = variable_get('users_apply_roles', array());
@@ -111,7 +108,7 @@ function apply_for_role_settings_form() {
     '#description' => t("Choosing 'yes' will allow users to apply for roles when creating a new account."),
     '#required' => TRUE,
   );
-  $roles = (user_roles(TRUE));
+  $roles = user_roles(TRUE);
   unset($roles[DRUPAL_AUTHENTICATED_RID]);
   $form['roles'] = array(
     '#type' => 'checkboxes',
@@ -202,98 +199,88 @@ function apply_for_role_approve() {
   return $output;
 }
 
-function apply_for_role_manage_form() {
-  $uid = arg(4);
-  $rid = arg(5);
+function apply_for_role_approve_form(&$form_state, $user, $rid) {
   $form['uid'] = array(
-    '#type' => 'hidden',
-    '#value' => $uid,
+    '#type' => 'value',
+    '#value' => $user->uid,
   );
   $form['rid'] = array(
-    '#type' => 'hidden',
+    '#type' => 'value',
     '#value' => $rid,
   );
 
-  $user = user_load(array('uid' => $uid));
   $roles = user_roles(TRUE);
-  switch (arg(3)) {
-    case 'approve':
-      return confirm_form($form, t('Do you want to approve the application from user <i> !username </i> for role <i> !role </i>', array('!username' => $user->name, '!role' => $roles[$rid])), 'admin/user/apply_for_role', t('The role will be automatically assigned to the user'), t('Approve'));
-      break;
+  return confirm_form($form, t('Do you want to approve the application from user %username for role %role', array('%username' => $user->name, '%role' => $roles[$rid])), 'admin/user/apply_for_role', t('The role will be automatically assigned to the user'), t('Approve'));
+}
 
-    case 'remove':
-      return confirm_form($form, t('Do you want to remove the application from user <i> !username </i> for role <i> !role </i>', array('!username' => $user->name, '!role' => $roles[$rid])), 'admin/user/apply_for_role', t('The role will be automatically deleted from the user'), t('Delete'));
-      break;
+function apply_for_role_approve_form_submit($form, &$form_state) {
+  if (apply_for_role_approve_apply($form_state['values']['uid'], $form_state['values']['rid'])) {
+    drupal_set_message(t('The application was approved.'));
+  }
+  else {
+    drupal_set_message(t('Error approving application. Please try again!'), 'error');
   }
+  cache_clear_all();
+  $form_state['redirect'] = 'admin/user/apply_for_role';
 }
 
-function apply_for_role_manage_form_submit($form, &$form_state) {
-  switch (arg(3)) {
-    case 'approve':
-      if (apply_for_role_approve_apply($form_state['values']['uid'], $form_state['values']['rid'])) {
-        drupal_set_message(t('The application was approved.'));
-      }
-      else {
-        drupal_set_message(t('Error approving application. Please try again!'), 'error');
-      }
-      break;
+function apply_for_role_remove_form(&$form_state, $user, $rid) {
+  $form['uid'] = array(
+    '#type' => 'value',
+    '#value' => $user->uid,
+  );
+  $form['rid'] = array(
+    '#type' => 'value',
+    '#value' => $rid,
+  );
 
-    case 'remove':
-      if (apply_for_role_remove_apply($form_state['values']['uid'], $form_state['values']['rid'])) {
-        drupal_set_message(t('The application was deleted.'));
-      }
-      else {
-        drupal_set_message(t('Error deleting application. Please try again!'), 'error');
-      }
-      break;
-  }
+  $roles = user_roles(TRUE);
+  return confirm_form($form, t('Do you want to remove the application from user %username for role %role', array('%username' => $user->name, '%role' => isset($roles[$rid]) ? $roles[$rid] : t('Invalid role'))), 'admin/user/apply_for_role', t('The role will be automatically deleted from the user'), t('Delete'));
+}
 
+function apply_for_role_remove_form_submit($form, &$form_state) {
+  if (apply_for_role_remove_apply($form_state['values']['uid'], $form_state['values']['rid'])) {
+    drupal_set_message(t('The application was deleted.'));
+  }
+  else {
+    drupal_set_message(t('Error deleting application. Please try again!'), 'error');
+  }
   cache_clear_all();
-
   $form_state['redirect'] = 'admin/user/apply_for_role';
-  return;
 }
 
 /**
  * User interface
  */
-function apply_for_role_page() {
-  $output = drupal_get_form('apply_for_role_apply_form');
-  print theme('page', $output, TRUE);
-}
 
-function apply_for_role_apply_form() {
+function apply_for_role_apply_form(&$form_state) {
   global $user;
-  $roles = variable_get('users_apply_roles', array());
-  $multiple = variable_get('apply_for_role_multiple', array());
-  foreach ($roles as $rid => $role) {
-    // Check if the user has this role or has applied for this role
-    if (!$user->roles[$rid] && (db_result(db_query("SELECT uid, rid FROM {users_roles_apply} WHERE uid = %d AND rid = %d", $user->uid, $rid)) == 0)) {
-      $filter_roles[$rid] = $role;
-    }
-  }
 
-  if (is_array($filter_roles)) {
-    if ($multiple == 1) {
-      $form['rid'] = array(
-        '#type' => 'checkboxes',
-        '#title' => t('Select the role or roles you want to apply for'),
-        '#options' => $filter_roles,
-      );
-    }
-    else {
-      $form['rid'] = array(
-        '#type' => 'select',
-        '#title' => t('Select the role you want to apply for'),
-        '#default_value' => '',
-        '#options' => $filter_roles,
-      );
-    }
+  $roles = user_roles(TRUE);
 
+  // Figure out all the roles they've applid for do it in one query.
+  $applied = array();
+  $result = db_query("SELECT rid FROM {users_roles_apply} WHERE uid = %d", $user->uid, $rid);
+  while ($row = db_fetch_object($result)) {
+    $applied[$row->rid] = isset($roles[$row->rid]) ? $roles[$row->rid] : t('Invalid role');
+  }
+  
+  // Figure out which roles are enabled, figure out which roles they have or
+  // have applied for, then take the remainder.
+  $enabled = variable_get('users_apply_roles', array());
+  $used = $user->roles + $applied;
+  $filter_roles = array_diff($enabled, $used);
+
+  if (count($filter_roles)) {
+    $form['rid'] = array(
+      '#type' => variable_get('apply_for_role_multiple', 0) ? 'checkboxes' : 'radios',
+      '#title' => variable_get('apply_for_role_multiple', 0) ? t('Select the roles you want to apply for') : t('Select the role you want to apply for'),
+      '#options' => $filter_roles,
+    );
     $form['submit'] = array(
       '#type' => 'submit',
       '#value' => t('Apply')
-    );    
+    );
   }
   else {
     drupal_set_message(t('No roles are available at this time.'), 'notice');
@@ -306,6 +293,7 @@ function apply_for_role_apply_form_submit($form, &$form_state) {
   global $user;
   $received = array();
   $not_received = array();
+
   if (is_array($form_state['values']['rid'])) {
     foreach ($form_state['values']['rid'] as $rid => $value) {
       if (!empty($value)) {
@@ -367,7 +355,6 @@ function apply_for_role_user($op, &$edit, &$user, $category = NULL) {
       }
       if (variable_get('apply_for_role_register', array())) {
         $roles = variable_get('users_apply_roles', array());
-        $multiple = variable_get('apply_for_role_multiple', array());
         foreach ($roles as $rid => $role) {
           if ($rid > 2) {
             $filter_roles[$rid] = $role;
@@ -379,7 +366,7 @@ function apply_for_role_user($op, &$edit, &$user, $category = NULL) {
           '#collapsible' => FALSE,
         );
         if (is_array($filter_roles)) {
-          if ($multiple == 1) {
+          if (variable_get('apply_for_role_multiple', 0)) {
             $form['apply_for_role']['rid'] = array(
               '#type' => 'checkboxes',
               '#title' => t('Select the role or roles you want to apply for'),
@@ -469,8 +456,7 @@ function apply_for_role_add_apply($uid, $rid) {
 function apply_for_role_approve_apply($uid, $rid) {
   if (!apply_for_role_check_role_exist($uid, $rid)) {
     $result = db_query("SELECT uid, rid, approved FROM {users_roles_apply} WHERE uid = %d AND rid = %d", $uid, $rid);
-    if (!empty($result)) {
-      $row = db_fetch_object($result);
+    if ($row = db_fetch_object($result)) {
       if ($row->approved == 0) {
         apply_for_role_add_role($uid, $rid);
           db_query("UPDATE {users_roles_apply} SET approved = 1, approve_date = %d WHERE uid = %d AND rid = %d", time(), $uid, $rid);
diff --git a/modules/devel/CVS/Entries b/modules/devel/CVS/Entries
index 2b4da8a..8bf2770 100644
--- a/modules/devel/CVS/Entries
+++ b/modules/devel/CVS/Entries
@@ -18,7 +18,6 @@ D/translations////
 /devel_generate_batch.inc/1.1.2.3/Thu Jun 19 18:34:18 2008//TDRUPAL-6--1-9
 /devel_node_access.info/1.7.2.1/Wed Jun 11 18:46:44 2008//TDRUPAL-6--1-9
 /devel_node_access.install/1.1.4.1/Sun May 11 20:51:09 2008//TDRUPAL-6--1-9
-/devel_node_access.module/1.15.2.5/Wed Jun 11 18:46:44 2008//TDRUPAL-6--1-9
 /devel_themer.css/1.14/Tue May  6 18:08:59 2008//TDRUPAL-6--1-9
 /devel_themer.info/1.3/Tue May  6 18:08:59 2008//TDRUPAL-6--1-9
 /devel_themer.install/1.1.2.2/Tue May  6 18:08:59 2008//TDRUPAL-6--1-9
@@ -32,3 +31,4 @@ D/translations////
 /ui.draggable.js/1.1.2.1/Tue May  6 18:08:59 2008//TDRUPAL-6--1-9
 /ui.mouse.js/1.1.2.1/Tue May  6 18:08:59 2008//TDRUPAL-6--1-9
 D/krumo////
+/devel_node_access.module/1.15.2.5/Wed Jul 16 21:15:05 2008//TDRUPAL-6--1-9
diff --git a/modules/l10n_client/CVS/Entries b/modules/l10n_client/CVS/Entries
index d1a343e..30850ab 100644
--- a/modules/l10n_client/CVS/Entries
+++ b/modules/l10n_client/CVS/Entries
@@ -1,8 +1,8 @@
 D/translations////
-/README.txt/1.4/Mon Apr 28 23:39:22 2008//TDRUPAL-6--1-3
-/jquery.cookie.js/1.1/Mon Apr 28 23:39:22 2008//TDRUPAL-6--1-3
-/jquery.hotkeys.js/1.1/Mon Apr 28 23:39:22 2008//TDRUPAL-6--1-3
-/l10n_client.css/1.3/Mon Apr 28 23:39:22 2008//TDRUPAL-6--1-3
-/l10n_client.info/1.4/Mon Apr 28 23:39:22 2008//TDRUPAL-6--1-3
-/l10n_client.js/1.7/Thu May  1 23:00:20 2008//TDRUPAL-6--1-3
-/l10n_client.module/1.11/Mon Apr 28 23:39:22 2008//TDRUPAL-6--1-3
+/README.txt/1.4/Tue May  6 18:08:59 2008//TDRUPAL-6--1-3
+/jquery.cookie.js/1.1/Tue May  6 18:08:59 2008//TDRUPAL-6--1-3
+/jquery.hotkeys.js/1.1/Tue May  6 18:08:59 2008//TDRUPAL-6--1-3
+/l10n_client.css/1.3/Tue May  6 18:08:59 2008//TDRUPAL-6--1-3
+/l10n_client.info/1.4/Tue May  6 18:08:59 2008//TDRUPAL-6--1-3
+/l10n_client.js/1.7/Tue May  6 18:08:59 2008//TDRUPAL-6--1-3
+/l10n_client.module/1.11/Tue May  6 18:08:59 2008//TDRUPAL-6--1-3
diff --git a/modules/l10n_client/translations/CVS/Entries b/modules/l10n_client/translations/CVS/Entries
index 9f5653b..60d93ea 100644
--- a/modules/l10n_client/translations/CVS/Entries
+++ b/modules/l10n_client/translations/CVS/Entries
@@ -1,4 +1,4 @@
-/modules-l10n_client.de.po/1.4/Mon Apr 28 23:39:22 2008//TDRUPAL-6--1-3
-/modules-l10n_client.he.po/1.1/Mon Apr 28 23:39:22 2008//TDRUPAL-6--1-3
-/modules-l10n_client.pot/1.2/Mon Apr 28 23:39:22 2008//TDRUPAL-6--1-3
+/modules-l10n_client.de.po/1.4/Tue May  6 18:08:59 2008//TDRUPAL-6--1-3
+/modules-l10n_client.he.po/1.1/Tue May  6 18:08:59 2008//TDRUPAL-6--1-3
+/modules-l10n_client.pot/1.2/Tue May  6 18:08:59 2008//TDRUPAL-6--1-3
 D
diff --git a/modules/nikemedia/nikemedia.install b/modules/nikemedia/nikemedia.install
index 27901f7..d4893d3 100644
--- a/modules/nikemedia/nikemedia.install
+++ b/modules/nikemedia/nikemedia.install
@@ -96,6 +96,30 @@ function nikemedia_update_6004() {
 
   return $ret;
 }
+
+/**
+ * Allow applying for roles.
+ */
+function nikemedia_update_6005() {
+  $ret = array();
+  drupal_install_modules(array('apply_for_role'));
+
+  // This looks bad but is actually okay since all the values are hard coded.
+  $ret[] = update_sql("INSERT INTO {role} (name) VALUES ('broadcaster')");
+
+  // Pass out permissions
+  $rids = array_flip(user_roles());
+  $ret[] = _nikemedia_add_perms_to_role(DRUPAL_AUTHENTICATED_RID, array('apply for roles'));
+  $ret[] = _nikemedia_add_perms_to_role($rids['nike global admin'], array('approve role applications'));
+#  $ret[] = _nikemedia_add_perms_to_role($rids['broadcaster'], array('VIEW VIDEO'));
+
+  variable_set('users_apply_roles', $rids['broadcaster']);
+
+  return $ret;
+}
+
+
+
 /**
  * Enable the wysiwyg module
  */
diff --git a/themes/zen/nikemedia_beijing/template.php b/themes/zen/nikemedia_beijing/template.php
index c9bb9bc..46248b3 100644
--- a/themes/zen/nikemedia_beijing/template.php
+++ b/themes/zen/nikemedia_beijing/template.php
@@ -56,27 +56,33 @@ function nikemedia_beijing_feed_icon($url, $title) {
   }
 }
 
-/**
- * Generate the HTML representing a given menu item ID.
- *
- * An implementation of theme_menu_item_link()
- *
- * @param $link
- *   array The menu item to render.
- * @return
- *   string The rendered menu item.
- */
 function nikemedia_beijing_menu_item_link($link) {
+  // A little custom work to get our nodes listed under the correct menu item.
   $mapping = array('athletes' => 'athlete', 'products' => 'product', 'technologies' => 'tech', 'feature_archive' => 'feature');
-  if (isset($mapping[$link['router_path']])) {
-    $menu = menu_get_item();
-    if ($menu['path'] == 'node/%' && isset($menu['page_arguments'][0]->type)) {
-      $link['in_active_trail'] = ($mapping[$link['router_path']] == $menu['page_arguments'][0]->type);
+  if (isset($link['router_path']) && isset($mapping[$link['router_path']])) {
+    $menu_item = menu_get_item();
+    if ($menu_item['path'] == 'node/%' && isset($menu_item['page_arguments'][0]->type)) {
+      $link['in_active_trail'] = ($mapping[$link['router_path']] == $menu_item['page_arguments'][0]->type);
     }
   }
+//if ($link['in_active_trail']) dvm($link);
   return phptemplate_menu_item_link($link);
 }
 
+function nikemedia_beijing_menu_item($link, $has_children, $menu = '', $in_active_trail = FALSE, $extra_class = NULL) {
+//dsm(($link));
+
+  $class = ($menu ? 'expanded' : ($has_children ? 'collapsed' : 'leaf'));
+  if (!empty($extra_class)) {
+    $class .= ' '. $extra_class;
+  }
+  if ($in_active_trail) {
+    $class .= ' active-trail';
+  }
+
+  return '<li class="'. $class .'">'. $link . $menu ."</li>\n";
+
+}
 
 /**
  * Override or insert PHPTemplate variables into all templates.
@@ -123,11 +129,9 @@ function nikemedia_beijing_preprocess_node(&$vars) {
     unset($vars['title']);
   }
 
-  // Hide the taxonomy terms from non-editors.
-  if (!in_array('editor', $vars['user']->roles)) {
-    unset($vars['terms']);
-    unset($vars['taxonomy']);
-  }
+  // Hide the taxonomy terms
+  unset($vars['terms']);
+  unset($vars['taxonomy']);
 }
 
 /**
