Index: stormteam/stormteam.module
===================================================================
--- stormteam/stormteam.module	(.../storm)	(revision 233)
+++ stormteam/stormteam.module	(.../storm-6.x-2.x)	(working copy)
@@ -293,10 +293,10 @@
   
   $i = 1;
   $variable = 'members_array_'. $i;
-  
+
   // Add rows for existing team members
   if (isset($node->members_array) && is_array($node->members_array)) {
-    foreach ($node->members_array as $node->$variable => $name) {
+    foreach($node->members_array as $node->$variable => $name) {
       $form['group1'][$variable] = array(
         '#type' => 'select',
         '#title' => t('Team Member @num', array('@num' => $i)),
@@ -307,9 +307,9 @@
       $variable = 'members_array_'. $i;
     }
   }
-  
+
   // Add placeholder rows
-  for ($j = 0; $j < 3; $j++) {
+  for($j = 0; $j < 3; $j++) {
     $variable = 'members_array_'. $i;
     $form['group1'][$variable] = array(
       '#type' => 'select',
@@ -319,7 +319,17 @@
     );
     $i++;
   }
-  
+  /*
+  $form['members'] = array(
+    '#type' => 'select',
+    '#title' => t('Team Members'),
+    '#multiple' => TRUE,
+    '#description' => t('Select the members of this team.'),
+    '#options' => $options,
+    '#default_value' => !empty($node->members) ? $node->members : '',
+    '#weight' => -5,
+  );
+  */
   if ($type->has_body) {
     $form['body_field'] = node_body_field($node, $type->body_label, $type->min_word_count);
   }
@@ -337,9 +347,11 @@
  * Implementation of hook_load
  */
 function stormteam_load($node) {
-  $additions = db_fetch_object(db_query('SELECT * FROM {stormteam} WHERE vid = %d', $node->vid));
-  if (isset($additions->members)) {
-    $additions->members_array = unserialize($additions->members);
+  $result = db_query('SELECT mnid FROM {stormteam} WHERE vid = %d', $node->vid);
+  $additions = new stdClass();
+  while ($members = db_fetch_object($result)) {
+    $mnode = node_load($members->mnid);
+    $additions->members_array[$members->mnid] = $mnode->title;
   }
   $additions->title_old = $node->title;
   return $additions;
@@ -390,12 +402,14 @@
  */
 function stormteam_insert($node) {
   _stormteam_beforesave($node);
-  if (isset($node->vid) && (isset($node->nid)) && (isset($node->members))) {
-    db_query("INSERT INTO {stormteam}
-      (vid, nid, members) VALUES
-      (%d, %d, '%s')",
-      $node->vid, $node->nid, $node->members
-    );
+  if (isset($node->vid) && (isset($node->nid)) && (isset($node->members_array))) {
+    $member = new stdClass();
+    $member->nid = $node->nid;
+    $member->vid = $node->vid;
+    foreach($node->members_array as $mnid => $member_name) {
+      $member->mnid = $mnid;
+      drupal_write_record('stormteam', $member);
+    }
   }
 }
 
@@ -410,11 +424,21 @@
     stormexpense_insert($node);
   }
   else {
-    db_query("UPDATE {stormteam} SET
-      members = '%s' WHERE vid = %d",
-      $node->members, $node->vid
-    );
     
+    if (isset($node->vid) && (isset($node->nid)) && (isset($node->members_array))) {
+      // Delete the old members
+      db_query("DELETE FROM {stormteam} WHERE nid = %d AND vid = %d", $node->nid, $node->vid);
+      
+      // Insert entries
+      $member = new stdClass();
+      $member->nid = $node->nid;
+      $member->vid = $node->vid;
+      foreach($node->members_array as $mnid => $member_name) {
+        $member->mnid = $mnid;
+        drupal_write_record('stormteam', $member);
+      }
+    }
+    
     // Invokes hook_stormteam_change so that if title has changed, other modules that have cached the title can update it.
     if ($node->title != $node->title_old) {
       module_invoke_all('stormteam_change', $node->nid, $node->title);
@@ -678,12 +702,13 @@
     $account = $user;
   }
   
-  $s = "SELECT ste.nid FROM {stormteam} ste WHERE (ste.members LIKE '%%i:%d;%%' OR ste.members LIKE '%%i:%d;%%')";
-  $r = db_query($s, $account->stormperson_nid, $account->stormorganization_nid);
+  // Get the list of team nodes. Include organizations which the person is a member of.
+  $s =   "SELECT ste.nid FROM {stormteam} ste JOIN {stormperson} stp ON (stp.nid = ste.mnid OR stp.orgnization_nid = ste.mnid) WHERE stp.user_uid = %d";
+  $r = db_query($s, $account->uid);
   $teams = array();
   while ($team = db_fetch_object($r)) {
     $teams[] = $team->nid;
   }
 
   return $teams;
-}
+}
\ No newline at end of file
Index: stormteam/stormteam.views.inc
===================================================================
--- stormteam/stormteam.views.inc	(.../storm)	(revision 233)
+++ stormteam/stormteam.views.inc	(.../storm-6.x-2.x)	(working copy)
@@ -2,7 +2,7 @@
 // $Id: stormteam.views.inc,v 1.1.2.2 2009/12/12 21:38:39 magnity Exp $
 
 function stormteam_views_data() {
-  $data['stormteam']['table']['group']  = 'Storm';
+  $data['stormteam']['table']['group']  = 'Storm Team';
   $data['stormteam']['table']['join'] = array(
     'node' => array(
       'left_field' => 'vid',
@@ -10,27 +10,34 @@
     ),
   );
   
-  $data['stormteam']['members'] = array(
-    'title' => t('Team Members'),
+  $data['stormteam']['mnid'] = array(
+    'title' => t('Team Member Nid'),
     'help' => 'Storm Team Members',
     'field' => array(
-      'handler' => 'stormteam_handler_field_teammembers',
+      'handler' => 'views_handler_field_node',
       'click sortable' => FALSE,
     ),
+    'argument' => array(
+      'handler' => 'views_handler_argument_node_nid',
+      'parent' => 'views_handler_argument_numeric',
+      'numeric' => TRUE,
+      'validate type' => 'nid',
+    ),
+    // Information for accepting a nid as a filter
+    'filter' => array(
+      'handler' => 'views_handler_filter_nid',
+    ),
+    // Information for sorting on a nid.
+    'sort' => array(
+      'handler' => 'views_handler_sort',
+    ),
+    'relationship' => array(
+      'base' => 'node',
+      'field' => 'nid',
+      'handler' => 'views_handler_relationship',
+      'label' => t('Member -> Node'),
+    ),
   );
   
   return $data;
-}
-
-function stormteam_views_handlers() {
-  return array(
-    'info' => array(
-      'path' => drupal_get_path('module', 'stormteam'),
-    ),
-    'handlers' => array(
-      'stormteam_handler_field_teammembers' => array(
-        'parent' => 'views_handler_field_prerender_list',
-      ),
-    ),
-  );
-}
+}
\ No newline at end of file
Index: stormteam/stormteam.install
===================================================================
--- stormteam/stormteam.install	(.../storm)	(revision 233)
+++ stormteam/stormteam.install	(.../storm-6.x-2.x)	(working copy)
@@ -47,9 +47,10 @@
         'type' => 'int',
         'not null' => TRUE,
         'default' => 0),
-      'members' => array(
-        'type' => 'text',
-        'size' => 'medium',
+      'mnid' => array(
+        'type' => 'int',
+        'not null' => TRUE,
+        'default' => 0
       ),
     ),
     'primary key' => array(
@@ -87,3 +88,82 @@
   }
   return $ret;
 }
+
+/**
+* Implements hook_update_N().
+*
+* Migrate members serialized array to member node id
+*/
+function stormteam_update_6200() {
+ 
+ $ret = array();
+ $new_schema = array();
+ $new_schema['stormteam_6200'] = array(
+   'fields' => array(
+     'vid' => array(
+       'type' => 'int',
+       'not null' => TRUE,
+       'default' => 0,
+     ),
+     'nid' => array(
+       'type' => 'int',
+       'not null' => TRUE,
+       'default' => 0
+     ),
+     'mnid' => array(
+       'type' => 'int',
+       'not null' => TRUE,
+       'default' => 0
+     ),
+   ),
+   'primary key' => array(
+     'vid',
+     'nid',
+     'mnid',
+   ),
+ );
+ 
+ // Create the new table with a temporary name
+ db_create_table($ret, 'stormteam_6200', $new_schema['stormteam_6200']);
+ 
+ // Check for collisions between org names and person names
+ $result = db_query("SELECT * FROM {stormteam}");
+ $mapping = array();
+ while ($team = db_fetch_object($result)) {
+
+   $members = unserialize($team->members);
+
+   // Generate the mapping array and save it to the database
+   foreach($members as $nid => $fullname) {
+      $mapping = new stdClass();
+      $mapping->nid = $team->nid;
+      $mapping->vid = $team->vid;
+      $mapping->mnid = $nid;
+     $result = db_query('INSERT INTO {stormteam_6200} VALUES (%d, %d, %d)', $mapping->nid, $mapping->vid, $mapping->mnid);
+     if (FALSE === $result) {
+       // Write failed, abort the update
+       $mapping = FALSE;
+       break 2;
+     }
+   }
+ }
+ 
+ if (FALSE === $mapping) {
+   // Abort the changes
+   $ret['#abort'] = array('success' => FALSE, 'query' => "Unable to map team members to nodes. Failed to write data to new table.");
+
+   // Remove the new table
+   db_drop_table($ret, 'stormteam_6200');
+
+   // Return the failed update
+   return $ret;
+ }
+   
+ // Remove the old table
+ db_drop_table($ret, 'stormteam');
+ 
+ // Rename the table to the proper name
+ db_rename_table($ret, 'stormteam_6200', 'stormteam');
+ 
+ return $ret;
+}
\ No newline at end of file
Index: stormteam/stormteam_handler_field_teammembers.inc
===================================================================
--- stormteam/stormteam_handler_field_teammembers.inc	(.../storm)	(revision 233)
+++ stormteam/stormteam_handler_field_teammembers.inc	(.../storm-6.x-2.x)	(working copy)
@@ -1,34 +0,0 @@
-<?php
-// $Id: stormteam_handler_field_teammembers.inc,v 1.1.2.1 2009/10/03 17:03:35 magnity Exp $
-
-/**
- * Separate team members into array.
- */
-class stormteam_handler_field_teammembers extends views_handler_field_prerender_list {
-  
-  function render($values) {
-    $field = $values->{$this->field_alias};
-    $field = unserialize($field);
-    
-    if (!empty($field)) {
-      // Turn member names into links to Storm person.
-      if (is_array($field)) {
-        $temp_field = array();
-        foreach ($field as $field_nid => $field_title) {
-          $temp_field[] = l($field_title, 'node/'. $field_nid);
-        }
-        $field = $temp_field;
-      }
-      
-      if ($this->options['type'] == 'separator') {
-        return implode(check_plain($this->options['separator']), $field);
-      }
-      else {
-        return theme('item_list', $field, NULL, $this->options['type']);
-      }
-    }
-    else if (!empty($this->options['empty'])) {
-      return $this->options['empty'];
-    }
-  }
-}
