diff --git a/cod_bof/cod_bof.features.field.inc b/cod_bof/cod_bof.features.field.inc
index be4ab6a..063d38b 100644
--- a/cod_bof/cod_bof.features.field.inc
+++ b/cod_bof/cod_bof.features.field.inc
@@ -10,7 +10,7 @@
 function cod_bof_field_default_fields() {
   $fields = array();
 
-  // Exported field: 'node-bof_session-body'
+  // Exported field: 'node-bof_session-body'.
   $fields['node-bof_session-body'] = array(
     'field_config' => array(
       'active' => '1',
@@ -36,6 +36,7 @@ function cod_bof_field_default_fields() {
           0 => 'format',
         ),
       ),
+      'locked' => '0',
       'module' => 'text',
       'settings' => array(
         'field_permissions' => array(
@@ -62,6 +63,12 @@ function cod_bof_field_default_fields() {
           'type' => 'text_default',
           'weight' => 0,
         ),
+        'listing' => array(
+          'label' => 'above',
+          'settings' => array(),
+          'type' => 'hidden',
+          'weight' => 0,
+        ),
         'teaser' => array(
           'label' => 'hidden',
           'module' => 'text',
@@ -94,11 +101,11 @@ function cod_bof_field_default_fields() {
     ),
   );
 
-  // Exported field: 'node-bof_session-field_session_room'
+  // Exported field: 'node-bof_session-field_session_room'.
   $fields['node-bof_session-field_session_room'] = array(
     'field_config' => array(
       'active' => '1',
-      'cardinality' => '-1',
+      'cardinality' => '1',
       'deleted' => '0',
       'entity_types' => array(),
       'field_name' => 'field_session_room',
@@ -106,58 +113,65 @@ function cod_bof_field_default_fields() {
         'type' => '2',
       ),
       'foreign keys' => array(
-        'nid' => array(
+        'node' => array(
           'columns' => array(
-            'nid' => 'nid',
+            'target_id' => 'nid',
           ),
           'table' => 'node',
         ),
       ),
       'indexes' => array(
-        'nid' => array(
-          0 => 'nid',
+        'target_id' => array(
+          0 => 'target_id',
         ),
       ),
-      'module' => 'node_reference',
+      'locked' => '0',
+      'module' => 'entityreference',
       'settings' => array(
-        'field_permissions' => array(
-          'create' => 0,
-          'edit' => 'edit',
-          'edit own' => 0,
-          'view' => 'view',
-          'view own' => 0,
-        ),
-        'referenceable_types' => array(
-          'article' => 0,
-          'bof_session' => 0,
-          'page' => 0,
-          'room' => 'room',
-          'schedule_item' => 0,
-          'session' => 0,
-          'time_slot' => 0,
-        ),
-        'view' => array(
-          'args' => array(),
-          'display_name' => '',
-          'view_name' => '',
+        'handler' => 'base',
+        'handler_settings' => array(
+          'behaviors' => array(
+            'views-select-list' => array(
+              'status' => 0,
+            ),
+          ),
+          'sort' => array(
+            'direction' => 'ASC',
+            'field' => 'body:value',
+            'property' => 'title',
+            'type' => 'property',
+          ),
+          'target_bundles' => array(
+            'room' => 'room',
+          ),
         ),
+        'handler_submit' => 'Change handler',
+        'target_type' => 'node',
       ),
-      'translatable' => '1',
-      'type' => 'node_reference',
+      'translatable' => '0',
+      'type' => 'entityreference',
     ),
     'field_instance' => array(
       'bundle' => 'bof_session',
       'default_value' => NULL,
       'deleted' => '0',
-      'description' => 'Select room in which this BoF occurs.',
+      'description' => '',
       'display' => array(
         'default' => array(
           'label' => 'above',
-          'module' => 'node_reference',
-          'settings' => array(),
-          'type' => 'node_reference_default',
+          'module' => 'entityreference',
+          'settings' => array(
+            'link' => FALSE,
+          ),
+          'type' => 'entityreference_label',
           'weight' => 1,
         ),
+        'listing' => array(
+          'label' => 'above',
+          'settings' => array(),
+          'type' => 'hidden',
+          'weight' => 0,
+        ),
         'teaser' => array(
           'label' => 'above',
           'settings' => array(),
@@ -168,7 +182,7 @@ function cod_bof_field_default_fields() {
       'entity_type' => 'node',
       'field_name' => 'field_session_room',
       'label' => 'Room',
-      'required' => 0,
+      'required' => 1,
       'settings' => array(
         'user_register_form' => FALSE,
       ),
@@ -182,7 +196,7 @@ function cod_bof_field_default_fields() {
     ),
   );
 
-  // Exported field: 'node-bof_session-field_session_slot'
+  // Exported field: 'node-bof_session-field_session_slot'.
   $fields['node-bof_session-field_session_slot'] = array(
     'field_config' => array(
       'active' => '1',
@@ -194,44 +208,43 @@ function cod_bof_field_default_fields() {
         'type' => '2',
       ),
       'foreign keys' => array(
-        'nid' => array(
+        'node' => array(
           'columns' => array(
-            'nid' => 'nid',
+            'target_id' => 'nid',
           ),
           'table' => 'node',
         ),
       ),
       'indexes' => array(
-        'nid' => array(
-          0 => 'nid',
+        'target_id' => array(
+          0 => 'target_id',
         ),
       ),
-      'module' => 'node_reference',
+      'locked' => '0',
+      'module' => 'entityreference',
       'settings' => array(
-        'field_permissions' => array(
-          'create' => 0,
-          'edit' => 'edit',
-          'edit own' => 0,
-          'view' => 'view',
-          'view own' => 0,
-        ),
-        'referenceable_types' => array(
-          'article' => 0,
-          'bof_session' => 0,
-          'page' => 0,
-          'room' => 0,
-          'schedule_item' => 0,
-          'session' => 0,
-          'time_slot' => 'time_slot',
-        ),
-        'view' => array(
-          'args' => array(),
-          'display_name' => '',
-          'view_name' => '',
+        'handler' => 'base',
+        'handler_settings' => array(
+          'behaviors' => array(
+            'views-select-list' => array(
+              'status' => 0,
+            ),
+          ),
+          'sort' => array(
+            'direction' => 'ASC',
+            'field' => 'body:value',
+            'property' => 'title',
+            'type' => 'property',
+          ),
+          'target_bundles' => array(
+            'time_slot' => 'time_slot',
+          ),
         ),
+        'handler_submit' => 'Change handler',
+        'target_type' => 'node',
       ),
-      'translatable' => '1',
-      'type' => 'node_reference',
+      'translatable' => '0',
+      'type' => 'entityreference',
     ),
     'field_instance' => array(
       'bundle' => 'bof_session',
@@ -241,11 +254,19 @@ function cod_bof_field_default_fields() {
       'display' => array(
         'default' => array(
           'label' => 'above',
-          'module' => 'node_reference',
-          'settings' => array(),
-          'type' => 'node_reference_default',
+          'module' => 'entityreference',
+          'settings' => array(
+            'link' => FALSE,
+          ),
+          'type' => 'entityreference_label',
           'weight' => 2,
         ),
+        'listing' => array(
+          'label' => 'above',
+          'settings' => array(),
+          'type' => 'hidden',
+          'weight' => 0,
+        ),
         'teaser' => array(
           'label' => 'above',
           'settings' => array(),
@@ -256,7 +277,7 @@ function cod_bof_field_default_fields() {
       'entity_type' => 'node',
       'field_name' => 'field_session_slot',
       'label' => 'Time slot',
-      'required' => 0,
+      'required' => 1,
       'settings' => array(
         'user_register_form' => FALSE,
       ),
@@ -274,7 +295,6 @@ function cod_bof_field_default_fields() {
   // Included for use with string extractors like potx.
   t('Description');
   t('Room');
-  t('Select room in which this BoF occurs.');
   t('Time slot');
 
   return $fields;
diff --git a/cod_bof/cod_bof.features.user_permission.inc b/cod_bof/cod_bof.features.user_permission.inc
index a044ac1..65240e6 100644
--- a/cod_bof/cod_bof.features.user_permission.inc
+++ b/cod_bof/cod_bof.features.user_permission.inc
@@ -10,7 +10,7 @@
 function cod_bof_user_default_permissions() {
   $permissions = array();
 
-  // Exported permission: create bof_session content
+  // Exported permission: create bof_session content.
   $permissions['create bof_session content'] = array(
     'name' => 'create bof_session content',
     'roles' => array(
@@ -19,13 +19,32 @@ function cod_bof_user_default_permissions() {
     'module' => 'node',
   );
 
-  // Exported permission: delete any bof_session content
+  // Exported permission: create field_session_room.
+  $permissions['create field_session_room'] = array(
+    'name' => 'create field_session_room',
+    'roles' => array(
+      0 => 'authenticated user',
+    ),
+    'module' => 'field_permissions',
+  );
+
+  // Exported permission: create field_session_slot.
+  $permissions['create field_session_slot'] = array(
+    'name' => 'create field_session_slot',
+    'roles' => array(
+      0 => 'authenticated user',
+    ),
+    'module' => 'field_permissions',
+  );
+
+  // Exported permission: delete any bof_session content.
   $permissions['delete any bof_session content'] = array(
     'name' => 'delete any bof_session content',
     'roles' => array(),
+    'module' => 'node',
   );
 
-  // Exported permission: delete own bof_session content
+  // Exported permission: delete own bof_session content.
   $permissions['delete own bof_session content'] = array(
     'name' => 'delete own bof_session content',
     'roles' => array(
@@ -34,13 +53,32 @@ function cod_bof_user_default_permissions() {
     'module' => 'node',
   );
 
-  // Exported permission: edit any bof_session content
+  // Exported permission: edit any bof_session content.
   $permissions['edit any bof_session content'] = array(
     'name' => 'edit any bof_session content',
     'roles' => array(),
+    'module' => 'node',
+  );
+
+  // Exported permission: edit field_session_room.
+  $permissions['edit field_session_room'] = array(
+    'name' => 'edit field_session_room',
+    'roles' => array(
+      0 => 'session organizer',
+    ),
+    'module' => 'field_permissions',
   );
 
-  // Exported permission: edit own bof_session content
+  // Exported permission: edit field_session_slot.
+  $permissions['edit field_session_slot'] = array(
+    'name' => 'edit field_session_slot',
+    'roles' => array(
+      0 => 'session organizer',
+    ),
+    'module' => 'field_permissions',
+  );
+
+  // Exported permission: edit own bof_session content.
   $permissions['edit own bof_session content'] = array(
     'name' => 'edit own bof_session content',
     'roles' => array(
@@ -49,5 +87,34 @@ function cod_bof_user_default_permissions() {
     'module' => 'node',
   );
 
+  // Exported permission: schedule bof_session.
+  $permissions['schedule bof_session'] = array(
+    'name' => 'schedule bof_session',
+    'roles' => array(
+      0 => 'authenticated user',
+    ),
+    'module' => 'cod_session',
+  );
+
+  // Exported permission: view field_session_room.
+  $permissions['view field_session_room'] = array(
+    'name' => 'view field_session_room',
+    'roles' => array(
+      0 => 'anonymous user',
+      1 => 'authenticated user',
+    ),
+    'module' => 'field_permissions',
+  );
+
+  // Exported permission: view field_session_slot.
+  $permissions['view field_session_slot'] = array(
+    'name' => 'view field_session_slot',
+    'roles' => array(
+      0 => 'anonymous user',
+      1 => 'authenticated user',
+    ),
+    'module' => 'field_permissions',
+  );
+
   return $permissions;
 }
diff --git a/cod_bof/cod_bof.info b/cod_bof/cod_bof.info
index 3a3a971..e55a29b 100644
--- a/cod_bof/cod_bof.info
+++ b/cod_bof/cod_bof.info
@@ -1,35 +1,46 @@
-name = "COD BoF Session"
-description = "BoFs are self-scheduled, unconference style sessions"
-core = "7.x"
-package = "COD"
-php = "5.2.4"
-dependencies[] = "cod_session"
-dependencies[] = "features"
-dependencies[] = "node_reference"
-dependencies[] = "strongarm"
-dependencies[] = "views"
-features[ctools][] = "strongarm:strongarm:1"
-features[ctools][] = "views:views_default:3.0"
-features[field][] = "node-bof_session-body"
-features[field][] = "node-bof_session-field_session_room"
-features[field][] = "node-bof_session-field_session_slot"
-features[node][] = "bof_session"
-features[user_permission][] = "create bof_session content"
-features[user_permission][] = "delete any bof_session content"
-features[user_permission][] = "delete own bof_session content"
-features[user_permission][] = "edit any bof_session content"
-features[user_permission][] = "edit own bof_session content"
-features[variable][] = "cod_unique_bof_session"
-features[variable][] = "comment_anonymous_bof_session"
-features[variable][] = "comment_bof_session"
-features[variable][] = "comment_default_mode_bof_session"
-features[variable][] = "comment_default_per_page_bof_session"
-features[variable][] = "comment_form_location_bof_session"
-features[variable][] = "comment_preview_bof_session"
-features[variable][] = "comment_subject_field_bof_session"
-features[variable][] = "menu_options_bof_session"
-features[variable][] = "menu_parent_bof_session"
-features[variable][] = "node_options_bof_session"
-features[variable][] = "node_preview_bof_session"
-features[variable][] = "node_submitted_bof_session"
-features[views_view][] = "bof_schedule"
+name = COD BoF Session
+description = BoFs are self-scheduled, unconference style sessions
+core = 7.x
+package = COD
+php = 5.2.4
+dependencies[] = cod_session
+dependencies[] = entityreference
+dependencies[] = features
+dependencies[] = options
+dependencies[] = strongarm
+dependencies[] = views
+features[ctools][] = strongarm:strongarm:1
+features[ctools][] = views:views_default:3.0
+features[features_api][] = api:1
+features[field][] = node-bof_session-body
+features[field][] = node-bof_session-field_session_room
+features[field][] = node-bof_session-field_session_slot
+features[node][] = bof_session
+features[user_permission][] = create bof_session content
+features[user_permission][] = create field_session_room
+features[user_permission][] = create field_session_slot
+features[user_permission][] = delete any bof_session content
+features[user_permission][] = delete own bof_session content
+features[user_permission][] = edit any bof_session content
+features[user_permission][] = edit field_session_room
+features[user_permission][] = edit field_session_slot
+features[user_permission][] = edit own bof_session content
+features[user_permission][] = schedule bof_session
+features[user_permission][] = view field_session_room
+features[user_permission][] = view field_session_slot
+features[variable][] = cod_unique_bof_session
+features[variable][] = comment_anonymous_bof_session
+features[variable][] = comment_bof_session
+features[variable][] = comment_default_mode_bof_session
+features[variable][] = comment_default_per_page_bof_session
+features[variable][] = comment_form_location_bof_session
+features[variable][] = comment_preview_bof_session
+features[variable][] = comment_subject_field_bof_session
+features[variable][] = field_bundle_settings_node__bof_session
+features[variable][] = menu_options_bof_session
+features[variable][] = menu_parent_bof_session
+features[variable][] = node_options_bof_session
+features[variable][] = node_preview_bof_session
+features[variable][] = node_submitted_bof_session
+features[views_view][] = bof_schedule
+files[] = cod_bof_views_style_plugin_schedule.inc
diff --git a/cod_bof/cod_bof.module b/cod_bof/cod_bof.module
index 2d4252b..e728ad8 100644
--- a/cod_bof/cod_bof.module
+++ b/cod_bof/cod_bof.module
@@ -5,3 +5,497 @@
  */
 
 include_once('cod_bof.features.inc');
+
+
+function cod_bof_menu() {
+  $items['program/bofs'] = array(
+    'title' => 'BoFs',
+    'page arguments' => array('bof_schedule', 'page'),
+    'page callback' => 'cod_bof_schedule_tabs',
+    'access callback' => 'user_access',
+    'access arguments' => array('access content'),
+    'type' => MENU_CALLBACK,
+  );
+  return $items;
+}
+
+function cod_bof_schedule_tabs($view_id, $display_id) {
+  $days = cod_session_days();
+  if (!empty($days)) {
+    $tabs = array();
+    $cnt = 0;
+    foreach($days as $day) {
+      $tabs[] = array(
+        'title' => $day,
+        'type' => 'view',
+        'vid' => $view_id,
+        'display' => $display_id,
+        'args' => cod_session_day_url($day),
+        'weight' => $cnt++, // Doesn't properly sort if we provide same values
+      );
+    }
+    $qtoptions = array(
+      'style' => 'Basic',
+      'ajax' => FALSE,
+       );
+    $qtname = 'cod_session_tabs';
+    $quicktabs = quicktabs_build_quicktabs($qtname,$qtoptions,$tabs);
+    return drupal_render($quicktabs['content']);
+  }
+  else {
+    return views_embed_view($view_id, $display_id);
+  }
+}
+
+/**
+ * Theme function to render the schedule grid.
+ *
+ * Build arrays of schedulable content, visible rooms, and time slots with
+ * context-appropriate meta information like available schedulable slots.
+ */
+function template_preprocess_cod_bof_schedule(&$vars) {
+  global $user;
+  // Warning, this preprocess function is massive, like Godzilla eating the
+  // worlds largest pizza massive. It needs to be refactored and broken apart,
+  // but that has not yet happened, or you wouldn't be reading this. Attempts
+  // are made to document this code, but proceed and alter at risk.
+
+  // $view->result contains the raw data
+  // $vars['rows'] contains the row-formatted fields
+
+  $view = $vars['view'];
+
+  // Save raw row View results keyed on nid.
+  $view_results = $scheduled_items = $displayed_node_types = array();
+  $node_types = node_type_get_types();
+  foreach ($node_types as $type => $content_type) {
+    $fields = field_info_instances('node', $type);
+    $node_types[$type]->fields = (object) $fields;
+  }
+
+  if (!empty($view->result)) {
+    foreach ($view->result as $key => $view_result) {
+      $node = node_load($view_result->nid);
+      $scheduled_items[$node->nid] = $node;
+      // $view_results will be what is actually output in the tpl file.
+      $view_results[$node->nid] = $vars['rows'][$key];
+      // Hold onto node types seen in this View.
+      if (!in_array($node->type, $displayed_node_types)) {
+        $displayed_node_types[$node->type] = $node_types[$node->type];
+      }
+    }
+  }
+
+  // There is no contextual argument filter, but if a valid day
+  // argument is present, we modify the cod_schedule_days
+  // to only display that day overriden by the URL.
+  if(isset($view->args[0])) {
+    foreach ($view->cod_schedule_days as $day_key => $day_value) {
+      if(cod_session_day_url($day_value) == $view->args[0]) {
+        $view->cod_schedule_days[$day_key] = $day_value;
+      } elseif($view->args[0] != 'all') {
+        unset($view->cod_schedule_days[$day_key]);
+      }
+    }
+  }
+
+  // Get days of the schedule from the View style setting. This will be used
+  // when depicting day links and for determining time slots to appear on this
+  // day's grid.
+  $all_schedule_days = $view->cod_schedule_days;
+  // If an argument is present limit the schedule days.
+  $schedule_days = $all_schedule_days;
+  if (!empty($view->args[0])) {
+    if (array_key_exists($view->args[0], $all_schedule_days)) {
+      $schedule_days = array($view->args[0] => $all_schedule_days[$view->args[0]]);
+    }
+  }
+
+  // Get a list of time slots. The list can be powered by a View, see cod_session_day_slots().
+  // The list of sessions is not filtered by this list. A View filter argument should be used for that.
+  // @todo this won't allow different Views on the same day to show different time slots (maybe if one was sessions and the other bofs)?
+  $time_slots = array();
+  foreach ($schedule_days as $day_key => $day) {
+    // @todo Because Date does not yet provide granularity for date fields in
+    // contextual filters, I've set the second argument to be the date, rather
+    // than the key. (I'm thinking that's way the it should work anyway.)
+    // -- oadaeh 2012-01-21
+    $time_slots = array_merge($time_slots, cod_session_day_slots($view, $day));
+    //$time_slots = array_merge($time_slots, cod_session_day_slots($view, $day_key));
+  }
+  if (empty($time_slots)) {
+    // No time slots exist so do not continue.
+    return;
+  }
+
+  // Get a list of rooms. The list can be powered by the View schedule_room_list
+  $rooms = _cod_session_schedule_rooms($view);
+  if (empty($rooms)) {
+    // No rooms exist so do not continue.
+    return;
+  }
+  else {
+    foreach ($rooms as $room_key => $room) {
+      $room_node = node_load($room_key);
+      if (isset($room_node->field_room_bofs) && $room_node->field_room_bofs[LANGUAGE_NONE][0]['value'] != 1) {
+        unset($rooms[$room_key]);
+      }
+    }
+  }
+
+  // Build an array of links to days to display at the top of the grid.
+  $day_links = array();
+  $current_path = $view->display_handler->display->display_options['path'];
+  if (!empty($view->args[0]) && count($all_schedule_days) > 1) {
+    foreach ($all_schedule_days as $day_key => $day) {
+      // @todo pass along links with attribute information?
+      $day_links[] = l($day, $current_path . '/' . $day_key);
+    }
+  }
+
+  // Build attributes for scheduled items.
+  // Consider revising architecture to be taxonomy or node reference to simplify the following.
+  $session_attrs = array();
+  foreach ($node_types as $type => $type_array) {
+    foreach ($type_array->fields as $field) {
+      if (in_array($field['widget']['type'], array('options_buttons', 'options_select', 'options_onoff'))) {
+        if (!isset($session_attrs[$field['field_name']])) {
+          // Allowed values of a field may or may not have machine-readable keys.
+          if (!empty($field['settings']['allowed_values_function']) || !empty($field['settings']['allowed_values'])) {
+            $allowed_values = list_allowed_values($field);
+            $session_attrs[$field['field_name']] = array(
+              'name' => $field['field_name'],
+              'values' => array_values($allowed_values),
+              'keys' => array_keys($allowed_values),
+              'machine_keys' => _cod_session_machine_keys($field['field_name'], array_keys($allowed_values)),
+            );
+          }
+        }
+      }
+    }
+  }
+
+  // Create text CCK optionwidgets as attributes of items for CSS usage.
+  // @todo review for sanitization
+  if (!empty($session_attrs)) {
+    foreach ($scheduled_items as $session_nid => $session) {
+      foreach ($session_attrs as $field) {
+        // See if field exists for particular session node.
+        if (is_array($session->$field['name'])) {
+          // Field could have multiple instances.
+          foreach ($session->$field['name'] as $instance) {
+            // Emtpy values are NULL.
+            if (isset($instance['value'])) {
+              // Create container if doesn't exist.
+              if (!isset($scheduled_items[$session_nid]->cod_session_classes)) {
+                $scheduled_items[$session_nid]->cod_session_classes = array();
+              }
+              $key = array_search($instance['value'], $field['values']);
+              if ($key === FALSE) {
+                // It's possible we've rewritten the keys.
+                $key = array_search($instance['value'], $field['keys']);
+                if ($key !== FALSE) {
+                  $value = $field['values'][$key];
+                }
+              }
+              else {
+                $value = $instance['value'];
+              }
+              if ($key !== FALSE) {
+                // Create class based on field key.
+                $scheduled_items[$session_nid]->cod_session_classes[$field['machine_keys'][$key]] = $value;
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+
+  // Collect capacity information about rooms to inform availability processing.
+  $room_nids = array_keys($rooms);
+  foreach ($room_nids as $room_nid) {
+    // Explicitly get room capacity.
+    $node = node_load($room_nid);
+    if (!empty($node->field_room_session_capacity)) {
+      $capacity = check_plain($node->field_room_session_capacity[LANGUAGE_NONE][0]['value']);
+    }
+    else {
+      $capacity = 1;
+    }
+    $rooms[$room_nid]['capacity'] = $capacity;
+  }
+
+  // Load each slot.
+  // @todo This could be malperformant. Consider revising such that all slots
+  // are loaded with single query.
+  foreach ($time_slots as $slot) {
+    $node = node_load($slot->nid);
+    $slots[$node->nid] = $node;
+  }
+
+  // Create structured grid of scheduled items in format [slot][room][item_nid]
+  $used_slots = $item_grid = $used_rooms = $authored = array();
+
+  if (!empty($scheduled_items)) {
+    foreach ($scheduled_items as $item) {
+      if (!empty($item->field_session_slot['und'][0]['target_id'])) {
+        $target_slot = $item->field_session_slot['und'][0]['target_id'];
+      }
+      if (isset($target_slot) && !empty($item->field_session_room['und'][0]['target_id'])) {
+        if (!empty($item->cod_session_classes)) {
+          $class = ' ' . implode(' ', array_keys($item->cod_session_classes));
+        }
+        else {
+          $class = '';
+        }
+
+        // Handle sessions in multiple rooms.
+        foreach ($item->field_session_room['und'] as $room_instance) {
+          $item_grid[$target_slot][$room_instance['target_id']][$item->nid]['session'] = $item;
+          $item_grid[$target_slot][$room_instance['target_id']][$item->nid]['class'] = $class;
+          // Record rooms and used slots.
+          $used_rooms[$room_instance['target_id']][] = $target_slot;
+        }
+
+      // Create array of populated slots.
+        if (!in_array($target_slot, $used_slots)) {
+          $used_slots[] = $target_slot;
+        }
+      }
+      // Record sessions for this user, their call-to-action can use it.
+      if ($item->uid == $user->uid) {
+        $authored[] = $item->nid;
+      }
+    }
+
+    // Explicitly discover if there are unscheduled sessions by this user if
+    // the interactive workflow is enabled.
+    if ($view->cod_schedule_interactive) {
+      $authored = cod_session_users_content($user, $view->cod_interactive_type, TRUE);
+      if (!empty($authored)) {
+        $unscheduled_bofs = TRUE;
+      }
+    }
+  }
+
+  // Arrange slots by days.
+  // @todo Give plugin options for date formats and text?
+  $arranged_slots = array();
+  foreach ($slots as $slot) {
+    // Do not fill slots on non-interactive schedules that are not in use.
+    if (!$view->cod_schedule_interactive && !in_array($slot->nid, $used_slots)) {
+      continue;
+    }
+    // Make formatted times.
+    $time_format = cod_session_time_slot_format($slot);
+    $day_key = date_format_date($time_format['date_start'], 'custom', 'Y-m-d');
+    $timestamp = date_format_date($time_format['date_start'], 'custom', DATE_FORMAT_UNIX);
+    $arranged_slots[$day_key][$timestamp] = array(
+      'nid' => $slot->nid,
+      'start' => $time_format['formatted_start'],
+      'end' => $time_format['formatted_end'],
+      'class' => '',
+      'bofs' => $slot->field_slot_bofs,
+    );
+    // If interactive and row is empty include a class.
+    if ($view->cod_schedule_interactive && !in_array($slot->nid, $used_slots)) {
+      $arranged_slots[$day_key][$timestamp]['class'] = 'empty';
+    }
+    // Hold onto what slots go with a day_key so the empty rooms for a day can
+    // be easily calculated.
+    $days_slots[$day_key][] = $slot->nid;
+    if (!isset($days[$day_key])) {
+      $days[$day_key] = date_format_date($time_format['date_start'], 'custom', 'l F jS, Y');
+    }
+  }
+
+  // Sort the arranged slots.
+  cod_session_ksort_recurse($arranged_slots);
+
+  // Calculate unused rooms in each day. Unused rooms will be left off the grid
+  // if the room is not interactive and will be showing (to allow scheduling) if
+  // it is.
+  $empty_rooms = $show_rooms = array();
+  if (!empty($days_slots)) {
+    foreach ($room_nids as $room_nid) {
+      foreach ($days_slots as $day_key => $day_slots) {
+        $intersect = array();
+        if (!empty($used_rooms[$room_nid])) {
+          $intersect = array_intersect($used_rooms[$room_nid], $day_slots);
+        }
+        if (empty($intersect)) {
+          // Room not used on this day.
+          $empty_rooms[$day_key][$room_nid] = TRUE;
+          if ($view->cod_schedule_interactive) {
+            $show_rooms[$day_key][$room_nid] = TRUE;
+          }
+          else {
+            $show_rooms[$day_key][$room_nid] = FALSE;
+          }
+        }
+        else {
+          // Room is in use, so show it.
+          $show_rooms[$day_key][$room_nid] = TRUE;
+        }
+      }
+    }
+  }
+
+  $single_node_types = cod_session_single_schedulable_types();
+
+  // @todo get rooms for each day?
+  // Build schedule grid array. This is the final processing before handing over
+  // to the tpl file.
+  $schedule_grid = array();
+  if (!empty($days)) {
+    // For each day...
+    foreach ($days as $day_key => $day_title) {
+      $schedule_grid[$day_key] = array();
+      // For each slot...
+      foreach ($arranged_slots[$day_key] as $slot_key => $slot) {
+
+        // Check if slot is set to Allow BoFs
+        if (!empty($slot['bofs']) && $slot['bofs'][LANGUAGE_NONE][0]['value'] == 0) {
+          unset($arranged_slots[$day_key][$slot_key]);
+          continue;
+        }
+
+        $schedule_grid[$day_key][$slot['nid']] = array();
+
+        // For each room. $room_key is used for determing colspans.
+        foreach ($room_nids as $room_key => $room_nid) {
+          // Leave out empty rooms on non-interactive schedules.
+          if (!$view->cod_schedule_interactive && !empty($empty_rooms[$day_key][$room_nid])) {
+            continue;
+          }
+          // Collect sessions and availability and call-to-schedule information.
+          // The tpl file determines what to print. @todo make that determination here?
+
+          // Now at the level of depth of session_grid, that is [slot][room].
+          // If we have not already marked this room/slot combo as spanned, continue forward.
+          if (empty($schedule_grid[$day_key][$slot['nid']][$room_nid])) {
+            $schedule_grid[$day_key][$slot['nid']][$room_nid]['sessions'] = array();
+            $schedule_grid[$day_key][$slot['nid']][$room_nid]['class'] = '';
+            $schedule_grid[$day_key][$slot['nid']][$room_nid]['spanned'] = FALSE;
+
+            $available = $rooms[$room_nid]['capacity'];
+
+            // Check $item_grid for if items exists in this slot.
+            if (!empty($item_grid[$slot['nid']][$room_nid])) {
+              $colspan = 1;
+              // Record the session(s) in this room and slot.
+              // $item_grid[slot][room] is an array of sessions. Store sessions
+              // in $schedule_grid at [day][slot][room]['sessions'].
+              $schedule_grid[$day_key][$slot['nid']][$room_nid]['sessions'] = $item_grid[$slot['nid']][$room_nid];
+              // Count scheduled items.
+              $available = $available - count($item_grid[$slot['nid']][$room_nid]);
+              // Check for single item, to set uniqueness and colspan.
+              if (count($item_grid[$slot['nid']][$room_nid]) == 1) {
+                $this_session = current($item_grid[$slot['nid']][$room_nid]);
+                // Exclusive content types override non-exclusive.
+                $this_exclusive = variable_get('cod_unique_' . $this_session['session']->type, COD_SCHEDULE_SINGLE);
+                if ($this_exclusive == COD_SCHEDULE_SINGLE) {
+                  $available = 0;
+                }
+
+                // This slot has only one session, calculate colspans in time slot (row).
+                // @todo consider if session is in this and not next sequential room?
+                // Check for sessions in remaining rooms.
+                for ($i = $room_key + 1; $i < count($room_nids); $i++) {
+                  if (!empty($item_grid[$slot['nid']][$room_nids[$i]]) && count($item_grid[$slot['nid']][$room_nids[$i]]) == 1) {
+                    $adjacent = current($item_grid[$slot['nid']][$room_nids[$i]]);
+                    // Check to see if adjacent column matches.
+                    if ($this_session['session']->nid == $adjacent['session']->nid) {
+                      // We'll accommodate for this in the markup.
+                      $colspan++;
+                      // Mark the room/slot combo as spanned from the previous slot.
+                      $schedule_grid[$day_key][$slot['nid']][$room_nids[$i]]['spanned'] = TRUE;
+                      // Don't process adjacent room when setting schedule grid.
+                      unset($item_grid[$slot['nid']][$room_nids[$i]]);
+                    }
+                    else {
+                      // Adjacent session does not match.
+                      break;
+                    }
+                  }
+                  else {
+                    // Only consider those which are adjacent.
+                    break;
+                  }
+                }
+              }
+
+              // Set colspan.
+              $schedule_grid[$day_key][$slot['nid']][$room_nid]['colspan'] = $colspan;
+            }
+          }
+
+          // Check if there are any nodes with COD_SCHEDULE_SINGLE assigned to this room and time
+          // It is already by default that the room is not available if the session is COD_SCHEDULE_SINGLE
+          if ($view->cod_schedule_interactive && $available) {
+            $query = new EntityFieldQuery();
+            $entities = $query->entityCondition('entity_type', 'node')
+            ->propertyCondition('type', $single_node_types, 'IN')
+            ->fieldCondition('field_session_room', 'target_id', $room_nid)
+            ->fieldCondition('field_session_slot', 'target_id', $slot['nid'])
+            ->propertyCondition('status', 1)
+            ->range(0,1)
+            ->execute();
+            if (count($entities) > 0) {
+              $available = 0;
+            }
+          }
+
+          // Include room availability and call-to-action if this is an interactive
+          // schedule and user is allowed to create and schedule.
+          if ($view->cod_schedule_interactive && cod_session_schedule_access($view->cod_interactive_type, $user)) {
+            $type_url_str = str_replace('_', '-', $view->cod_interactive_type); // Oh, Drupal.
+            if ($available <= 0) {
+              $availability = ''; // Do not display anything if the room is full.
+              $schedule_grid[$day_key][$slot['nid']][$room_nid]['class'] .= ' full';
+            }
+            else {
+              $availability = t('@avail of @cap slots available', array('@avail' => $available, '@cap' => $rooms[$room_nid]['capacity']));
+              // There is availability so provide a call-to-action for scheduling.
+              $options = array(
+                'query' => array(
+                  // The session room field is unlimited so it would be rendered as
+                  // checkboxes but because it's being altered by cod_bof set the
+                  // Prepopulate arguments to what it will be, a select list.
+                  'edit[field_session_room][nid][nid]' => $room_nid,
+                  'edit[field_session_slot][nid][nid]' => $slot['nid'],
+                  'destination' => $_GET['q'], // @todo may be menu tab depth?
+                ),
+              );
+              // If the user has unscheduled items or has not submitted any
+              // they are given a link to add and otherwise a link to schedule.
+              if (!$authored || !$unscheduled_bofs) {
+                $cta = l(t('Add a @name', array('@name' => $node_types[$view->cod_interactive_type]->name)), 'node/add/' . $type_url_str, $options);
+              }
+              else {
+                $cta = l(t('Schedule a @name', array('@name' => $node_types[$view->cod_interactive_type]->name)), 'scheduler-form/' . $view->cod_interactive_type, $options);
+              }
+              $schedule_grid[$day_key][$slot['nid']][$room_nid]['cta'] = $cta;
+              $schedule_grid[$day_key][$slot['nid']][$room_nid]['class'] .= ' available';
+            }
+            // Include availability message.
+            $schedule_grid[$day_key][$slot['nid']][$room_nid]['availability'] = $availability;
+          }
+        }
+      }
+    }
+
+    $vars['days'] = $days;
+  }
+
+  $vars['view_results'] = $view_results;
+  $vars['session_grid'] = $item_grid;
+  $vars['arranged_slots'] = $arranged_slots;
+  $vars['schedule_grid'] = $schedule_grid;
+  $vars['day_links'] = $day_links;
+  $vars['rooms'] = $rooms;
+  $vars['room_nids'] = $room_nids;
+  $vars['show_rooms'] = $show_rooms;
+  $vars['schedule_display'] = 0; //$view->cod_schedule_display;
+}
diff --git a/cod_bof/cod_bof.strongarm.inc b/cod_bof/cod_bof.strongarm.inc
index c8a0685..7e794ec 100644
--- a/cod_bof/cod_bof.strongarm.inc
+++ b/cod_bof/cod_bof.strongarm.inc
@@ -10,63 +10,80 @@
 function cod_bof_strongarm() {
   $export = array();
 
-  $strongarm = new stdClass;
+  $strongarm = new stdClass();
   $strongarm->disabled = FALSE; /* Edit this to true to make a default strongarm disabled initially */
   $strongarm->api_version = 1;
   $strongarm->name = 'cod_unique_bof_session';
   $strongarm->value = 'multiple';
   $export['cod_unique_bof_session'] = $strongarm;
 
-  $strongarm = new stdClass;
+  $strongarm = new stdClass();
   $strongarm->disabled = FALSE; /* Edit this to true to make a default strongarm disabled initially */
   $strongarm->api_version = 1;
   $strongarm->name = 'comment_anonymous_bof_session';
   $strongarm->value = 0;
   $export['comment_anonymous_bof_session'] = $strongarm;
 
-  $strongarm = new stdClass;
+  $strongarm = new stdClass();
   $strongarm->disabled = FALSE; /* Edit this to true to make a default strongarm disabled initially */
   $strongarm->api_version = 1;
   $strongarm->name = 'comment_bof_session';
   $strongarm->value = '2';
   $export['comment_bof_session'] = $strongarm;
 
-  $strongarm = new stdClass;
+  $strongarm = new stdClass();
   $strongarm->disabled = FALSE; /* Edit this to true to make a default strongarm disabled initially */
   $strongarm->api_version = 1;
   $strongarm->name = 'comment_default_mode_bof_session';
   $strongarm->value = 1;
   $export['comment_default_mode_bof_session'] = $strongarm;
 
-  $strongarm = new stdClass;
+  $strongarm = new stdClass();
   $strongarm->disabled = FALSE; /* Edit this to true to make a default strongarm disabled initially */
   $strongarm->api_version = 1;
   $strongarm->name = 'comment_default_per_page_bof_session';
   $strongarm->value = '50';
   $export['comment_default_per_page_bof_session'] = $strongarm;
 
-  $strongarm = new stdClass;
+  $strongarm = new stdClass();
   $strongarm->disabled = FALSE; /* Edit this to true to make a default strongarm disabled initially */
   $strongarm->api_version = 1;
   $strongarm->name = 'comment_form_location_bof_session';
   $strongarm->value = 1;
   $export['comment_form_location_bof_session'] = $strongarm;
 
-  $strongarm = new stdClass;
+  $strongarm = new stdClass();
   $strongarm->disabled = FALSE; /* Edit this to true to make a default strongarm disabled initially */
   $strongarm->api_version = 1;
   $strongarm->name = 'comment_preview_bof_session';
   $strongarm->value = '1';
   $export['comment_preview_bof_session'] = $strongarm;
 
-  $strongarm = new stdClass;
+  $strongarm = new stdClass();
   $strongarm->disabled = FALSE; /* Edit this to true to make a default strongarm disabled initially */
   $strongarm->api_version = 1;
   $strongarm->name = 'comment_subject_field_bof_session';
   $strongarm->value = 1;
   $export['comment_subject_field_bof_session'] = $strongarm;
 
-  $strongarm = new stdClass;
+  $strongarm = new stdClass();
+  $strongarm->disabled = FALSE; /* Edit this to true to make a default strongarm disabled initially */
+  $strongarm->api_version = 1;
+  $strongarm->name = 'field_bundle_settings_node__bof_session';
+  $strongarm->value = array(
+    'view_modes' => array(),
+    'extra_fields' => array(
+      'form' => array(
+        'title' => array(
+          'weight' => '-5',
+        ),
+      ),
+      'display' => array(),
+    ),
+  );
+  $export['field_bundle_settings_node__bof_session'] = $strongarm;
+
+  $strongarm = new stdClass();
   $strongarm->disabled = FALSE; /* Edit this to true to make a default strongarm disabled initially */
   $strongarm->api_version = 1;
   $strongarm->name = 'menu_options_bof_session';
@@ -75,14 +92,14 @@ function cod_bof_strongarm() {
   );
   $export['menu_options_bof_session'] = $strongarm;
 
-  $strongarm = new stdClass;
+  $strongarm = new stdClass();
   $strongarm->disabled = FALSE; /* Edit this to true to make a default strongarm disabled initially */
   $strongarm->api_version = 1;
   $strongarm->name = 'menu_parent_bof_session';
   $strongarm->value = 'main-menu:0';
   $export['menu_parent_bof_session'] = $strongarm;
 
-  $strongarm = new stdClass;
+  $strongarm = new stdClass();
   $strongarm->disabled = FALSE; /* Edit this to true to make a default strongarm disabled initially */
   $strongarm->api_version = 1;
   $strongarm->name = 'node_options_bof_session';
@@ -92,14 +109,14 @@ function cod_bof_strongarm() {
   );
   $export['node_options_bof_session'] = $strongarm;
 
-  $strongarm = new stdClass;
+  $strongarm = new stdClass();
   $strongarm->disabled = FALSE; /* Edit this to true to make a default strongarm disabled initially */
   $strongarm->api_version = 1;
   $strongarm->name = 'node_preview_bof_session';
   $strongarm->value = '1';
   $export['node_preview_bof_session'] = $strongarm;
 
-  $strongarm = new stdClass;
+  $strongarm = new stdClass();
   $strongarm->disabled = FALSE; /* Edit this to true to make a default strongarm disabled initially */
   $strongarm->api_version = 1;
   $strongarm->name = 'node_submitted_bof_session';
diff --git a/cod_bof/cod_bof.views_default.inc b/cod_bof/cod_bof.views_default.inc
index 33d9598..a706c98 100644
--- a/cod_bof/cod_bof.views_default.inc
+++ b/cod_bof/cod_bof.views_default.inc
@@ -30,14 +30,8 @@ function cod_bof_views_default_views() {
   $handler->display->display_options['exposed_form']['type'] = 'basic';
   $handler->display->display_options['pager']['type'] = 'full';
   $handler->display->display_options['pager']['options']['items_per_page'] = '10';
-  $handler->display->display_options['style_plugin'] = 'cod_session_schedule';
+  $handler->display->display_options['style_plugin'] = 'cod_bof_schedule';
   $handler->display->display_options['style_options']['schedule_interactive'] = '1';
-  $handler->display->display_options['style_options']['schedule_days'] = array(
-    'Friday May, 04 2012' => 0,
-    'Saturday May, 05 2012' => 0,
-    'Sunday May, 06 2012' => 0,
-    'Monday May, 07 2012' => 0,
-  );
   $handler->display->display_options['style_options']['interactive_type'] = 'bof_session';
   $handler->display->display_options['row_plugin'] = 'fields';
   /* Field: Content: Title */
@@ -94,7 +88,11 @@ function cod_bof_views_default_views() {
 
   /* Display: Page */
   $handler = $view->new_display('page', 'Page', 'page');
-  $handler->display->display_options['path'] = 'program/bofs';
+  $handler->display->display_options['path'] = 'program/grid/bofs/%';
+
+  /* Display: Page */
+  $handler = $view->new_display('page', 'Page', 'page_1');
+  $handler->display->display_options['path'] = 'program/grid/bofs';
   $export['bof_schedule'] = $view;
 
   return $export;
diff --git a/cod_session/cod_session.features.field.inc b/cod_session/cod_session.features.field.inc
index 3d1bd2f..2fdf6de 100644
--- a/cod_session/cod_session.features.field.inc
+++ b/cod_session/cod_session.features.field.inc
@@ -186,12 +186,90 @@ function cod_session_field_default_fields() {
           'summary_rows' => 5,
         ),
         'type' => 'text_textarea_with_summary',
-        'weight' => '3',
+        'weight' => '4',
       ),
       'widget_type' => 'text_textarea_with_summary',
     ),
   );
 
+  // Exported field: 'node-room-field_room_bofs'.
+  $fields['node-room-field_room_bofs'] = array(
+    'field_config' => array(
+      'active' => '1',
+      'cardinality' => '1',
+      'deleted' => '0',
+      'entity_types' => array(),
+      'field_name' => 'field_room_bofs',
+      'field_permissions' => array(
+        'type' => '1',
+      ),
+      'foreign keys' => array(),
+      'indexes' => array(
+        'value' => array(
+          0 => 'value',
+        ),
+      ),
+      'locked' => '0',
+      'module' => 'list',
+      'settings' => array(
+        'allowed_values' => array(
+          0 => '',
+          1 => '',
+        ),
+        'allowed_values_function' => '',
+      ),
+      'translatable' => '0',
+      'type' => 'list_boolean',
+    ),
+    'field_instance' => array(
+      'bundle' => 'room',
+      'default_value' => array(
+        0 => array(
+          'value' => 1,
+        ),
+      ),
+      'deleted' => '0',
+      'description' => 'Birds of a Feather (BoFs) may take place in this room.',
+      'display' => array(
+        'default' => array(
+          'label' => 'above',
+          'module' => 'list',
+          'settings' => array(),
+          'type' => 'list_default',
+          'weight' => 4,
+        ),
+        'listing' => array(
+          'label' => 'above',
+          'settings' => array(),
+          'type' => 'hidden',
+          'weight' => 0,
+        ),
+        'teaser' => array(
+          'label' => 'above',
+          'settings' => array(),
+          'type' => 'hidden',
+          'weight' => 0,
+        ),
+      ),
+      'entity_type' => 'node',
+      'field_name' => 'field_room_bofs',
+      'label' => 'Allow BoFs',
+      'required' => 0,
+      'settings' => array(
+        'user_register_form' => FALSE,
+      ),
+      'widget' => array(
+        'active' => 1,
+        'module' => 'options',
+        'settings' => array(
+          'display_label' => 1,
+        ),
+        'type' => 'options_onoff',
+        'weight' => '3',
+      ),
+    ),
+  );
+
   // Exported field: 'node-room-field_room_capacity'.
   $fields['node-room-field_room_capacity'] = array(
     'field_config' => array(
@@ -344,7 +422,7 @@ function cod_session_field_default_fields() {
           'progress_indicator' => 'throbber',
         ),
         'type' => 'image_image',
-        'weight' => '4',
+        'weight' => '5',
       ),
     ),
   );
@@ -415,7 +493,7 @@ function cod_session_field_default_fields() {
         'module' => 'number',
         'settings' => array(),
         'type' => 'number',
-        'weight' => '2',
+        'weight' => '1',
       ),
     ),
   );
@@ -1487,6 +1565,83 @@ function cod_session_field_default_fields() {
     ),
   );
 
+  // Exported field: 'node-time_slot-field_slot_bofs'.
+  $fields['node-time_slot-field_slot_bofs'] = array(
+    'field_config' => array(
+      'active' => '1',
+      'cardinality' => '1',
+      'deleted' => '0',
+      'entity_types' => array(),
+      'field_name' => 'field_slot_bofs',
+      'field_permissions' => array(
+        'type' => '1',
+      ),
+      'foreign keys' => array(),
+      'indexes' => array(
+        'value' => array(
+          0 => 'value',
+        ),
+      ),
+      'locked' => '0',
+      'module' => 'list',
+      'settings' => array(
+        'allowed_values' => array(
+          0 => '',
+          1 => '',
+        ),
+        'allowed_values_function' => '',
+      ),
+      'translatable' => '0',
+      'type' => 'list_boolean',
+    ),
+    'field_instance' => array(
+      'bundle' => 'time_slot',
+      'default_value' => array(
+        0 => array(
+          'value' => 0,
+        ),
+      ),
+      'deleted' => '0',
+      'description' => 'Birds of a Feather (BoFs) may be scheduled during this time slot.',
+      'display' => array(
+        'default' => array(
+          'label' => 'above',
+          'settings' => array(),
+          'type' => 'hidden',
+          'weight' => '1',
+        ),
+        'listing' => array(
+          'label' => 'above',
+          'settings' => array(),
+          'type' => 'hidden',
+          'weight' => 0,
+        ),
+        'teaser' => array(
+          'label' => 'above',
+          'settings' => array(),
+          'type' => 'hidden',
+          'weight' => 0,
+        ),
+      ),
+      'entity_type' => 'node',
+      'field_name' => 'field_slot_bofs',
+      'label' => 'Allow BoFs',
+      'required' => 0,
+      'settings' => array(
+        'user_register_form' => FALSE,
+      ),
+      'widget' => array(
+        'active' => 1,
+        'module' => 'options',
+        'settings' => array(
+          'display_label' => 1,
+        ),
+        'type' => 'options_onoff',
+        'weight' => '3',
+      ),
+    ),
+  );
+
   // Exported field: 'node-time_slot-field_slot_datetime'.
   $fields['node-time_slot-field_slot_datetime'] = array(
     'field_config' => array(
@@ -1536,7 +1691,6 @@ function cod_session_field_default_fields() {
             'multiple_from' => '',
             'multiple_number' => '',
             'multiple_to' => '',
-            'show_repeat_rule' => 'show',
           ),
           'type' => 'date_default',
           'weight' => '0',
@@ -1602,13 +1756,16 @@ function cod_session_field_default_fields() {
           'year_range' => '-3:+3',
         ),
         'type' => 'date_popup',
-        'weight' => '-4',
+        'weight' => '1',
       ),
     ),
   );
 
   // Translatables
   // Included for use with string extractors like potx.
+  t('Allow BoFs');
+  t('Birds of a Feather (BoFs) may be scheduled during this time slot.');
+  t('Birds of a Feather (BoFs) may take place in this room.');
   t('Body');
   t('Date and time');
   t('Description');
diff --git a/cod_session/cod_session.features.inc b/cod_session/cod_session.features.inc
index d71cbc4..1f03930 100644
--- a/cod_session/cod_session.features.inc
+++ b/cod_session/cod_session.features.inc
@@ -52,9 +52,11 @@ function cod_session_flag_default_flags() {
       ),
       'unflag' => array(),
     ),
+    'weight' => 0,
     'show_on_page' => 1,
     'show_on_teaser' => 1,
     'show_on_form' => 0,
+    'show_contextual_link' => FALSE,
     'access_author' => '',
     'i18n' => 0,
     'module' => 'cod_session',
@@ -84,9 +86,11 @@ function cod_session_flag_default_flags() {
       'flag' => array(),
       'unflag' => array(),
     ),
+    'weight' => 0,
     'show_on_page' => 1,
     'show_on_teaser' => 0,
     'show_on_form' => 0,
+    'show_contextual_link' => FALSE,
     'access_author' => '',
     'i18n' => 0,
     'module' => 'cod_session',
@@ -119,9 +123,11 @@ function cod_session_flag_default_flags() {
         0 => '4',
       ),
     ),
+    'weight' => 0,
     'show_on_page' => 1,
     'show_on_teaser' => 0,
     'show_on_form' => 0,
+    'show_contextual_link' => FALSE,
     'access_author' => '',
     'i18n' => 0,
     'module' => 'cod_session',
diff --git a/cod_session/cod_session.info b/cod_session/cod_session.info
index 03bf809..987acea 100644
--- a/cod_session/cod_session.info
+++ b/cod_session/cod_session.info
@@ -32,6 +32,7 @@ features[ctools][] = views:views_default:3.0
 features[features_api][] = api:1
 features[field][] = node-page-body
 features[field][] = node-room-body
+features[field][] = node-room-field_room_bofs
 features[field][] = node-room-field_room_capacity
 features[field][] = node-room-field_room_photo
 features[field][] = node-room-field_room_session_capacity
@@ -47,6 +48,7 @@ features[field][] = node-session-field_session_slot
 features[field][] = node-session-field_slides
 features[field][] = node-session-field_speakers
 features[field][] = node-session-field_track
+features[field][] = node-time_slot-field_slot_bofs
 features[field][] = node-time_slot-field_slot_datetime
 features[field_group][] = group_audience|node|session|default
 features[field_group][] = group_audience|node|session|form
@@ -117,8 +119,10 @@ features[variable][] = comment_subject_field_schedule_item
 features[variable][] = comment_subject_field_session
 features[variable][] = comment_subject_field_time_slot
 features[variable][] = comment_time_slot
+features[variable][] = field_bundle_settings_node__room
 features[variable][] = field_bundle_settings_node__schedule_item
 features[variable][] = field_bundle_settings_node__session
+features[variable][] = field_bundle_settings_node__time_slot
 features[variable][] = menu_options_time_slot
 features[variable][] = menu_parent_time_slot
 features[variable][] = node_options_page
diff --git a/cod_session/cod_session.module b/cod_session/cod_session.module
index b9c9405..5316ce1 100644
--- a/cod_session/cod_session.module
+++ b/cod_session/cod_session.module
@@ -1027,7 +1027,7 @@ function template_preprocess_cod_session_schedule(&$vars) {
   $vars['rooms'] = $rooms;
   $vars['room_nids'] = $room_nids;
   $vars['show_rooms'] = $show_rooms;
-  $vars['schedule_display'] = $view->cod_schedule_display;
+  $vars['schedule_display'] = 0; //$view->cod_schedule_display;
 }
 
 /**
diff --git a/cod_session/cod_session.strongarm.inc b/cod_session/cod_session.strongarm.inc
index a07812f..9afa8e5 100644
--- a/cod_session/cod_session.strongarm.inc
+++ b/cod_session/cod_session.strongarm.inc
@@ -230,6 +230,26 @@ function cod_session_strongarm() {
   $strongarm = new stdClass();
   $strongarm->disabled = FALSE; /* Edit this to true to make a default strongarm disabled initially */
   $strongarm->api_version = 1;
+  $strongarm->name = 'field_bundle_settings_node__room';
+  $strongarm->value = array(
+    'view_modes' => array(),
+    'extra_fields' => array(
+      'form' => array(
+        'title' => array(
+          'weight' => '0',
+        ),
+        'path' => array(
+          'weight' => '6',
+        ),
+      ),
+      'display' => array(),
+    ),
+  );
+  $export['field_bundle_settings_node__room'] = $strongarm;
+
+  $strongarm = new stdClass();
+  $strongarm->disabled = FALSE; /* Edit this to true to make a default strongarm disabled initially */
+  $strongarm->api_version = 1;
   $strongarm->name = 'field_bundle_settings_node__schedule_item';
   $strongarm->value = array(
     'view_modes' => array(),
@@ -264,6 +284,48 @@ function cod_session_strongarm() {
   $strongarm = new stdClass();
   $strongarm->disabled = FALSE; /* Edit this to true to make a default strongarm disabled initially */
   $strongarm->api_version = 1;
+  $strongarm->name = 'field_bundle_settings_node__time_slot';
+  $strongarm->value = array(
+    'view_modes' => array(
+      'teaser' => array(
+        'custom_settings' => TRUE,
+      ),
+      'listing' => array(
+        'custom_settings' => TRUE,
+      ),
+      'full' => array(
+        'custom_settings' => FALSE,
+      ),
+      'rss' => array(
+        'custom_settings' => FALSE,
+      ),
+      'search_index' => array(
+        'custom_settings' => FALSE,
+      ),
+      'search_result' => array(
+        'custom_settings' => FALSE,
+      ),
+      'token' => array(
+        'custom_settings' => FALSE,
+      ),
+    ),
+    'extra_fields' => array(
+      'form' => array(
+        'title' => array(
+          'weight' => '0',
+        ),
+        'path' => array(
+          'weight' => '2',
+        ),
+      ),
+      'display' => array(),
+    ),
+  );
+  $export['field_bundle_settings_node__time_slot'] = $strongarm;
+
+  $strongarm = new stdClass();
+  $strongarm->disabled = FALSE; /* Edit this to true to make a default strongarm disabled initially */
+  $strongarm->api_version = 1;
   $strongarm->name = 'menu_options_time_slot';
   $strongarm->value = array(
     0 => 'main-menu',
