diff -Naur storm/stormteammember/stormteammember.admin.inc stormNew/stormteammember/stormteammember.admin.inc
--- storm/stormteammember/stormteammember.admin.inc	2009-06-03 02:53:48.000000000 +0200
+++ stormNew/stormteammember/stormteammember.admin.inc	2009-06-29 18:20:01.000000000 +0200
@@ -13,9 +13,11 @@
     unset($_SESSION['stormteammember_list_filter']['project_nid']);
     unset($_SESSION['stormteammember_list_filter']['task_nid']);
     unset($_SESSION['stormteammember_list_filter']['ticket_nid']);
+    unset($_SESSION['stormteammember_list_filter']['person_title']);
   }
 
   if (array_key_exists('project_nid', $_GET)) {
+
     if ($_SESSION['stormteammember_list_filter']['project_nid'] != $_GET['project_nid']) {
       $_SESSION['stormteammember_list_filter']['project_nid'] = $_GET['project_nid'];
     }
@@ -24,6 +26,7 @@
 
     unset($_SESSION['stormteammember_list_filter']['task_nid']);
     unset($_SESSION['stormteammember_list_filter']['ticket_nid']);
+    unset($_SESSION['stormteammember_list_filter']['person_title']);
   }
 
   if (array_key_exists('task_nid', $_GET)) {
@@ -34,6 +37,7 @@
     $t = node_load($_GET['task_nid']);
     $_SESSION['stormteammember_list_filter']['organization_nid'] = $t->organization_nid;
     $_SESSION['stormteammember_list_filter']['project_nid'] = $t->project_nid;
+    $_SESSION['stormteammember_list_filter']['person_title'] = $t->person_title;
     unset($_SESSION['stormteammember_list_filter']['ticket_nid']);
   }
 
@@ -46,8 +50,24 @@
     $_SESSION['stormteammember_list_filter']['organization_nid'] = $ti->organization_nid;
     $_SESSION['stormteammember_list_filter']['project_nid'] = $ti->project_nid;
     $_SESSION['stormteammember_list_filter']['task_nid'] = $ti->task_nid;
+    $_SESSION['stormteammember_list_filter']['person_title'] = $t->person_title;
   }
 
+  if (array_key_exists('person_nid', $_GET)) {
+
+    if ($_SESSION['stormteammember_list_filter']['person_nid'] != $_GET['person_nid']) {
+      $_SESSION['stormteammember_list_filter']['person_nid'] = $_GET['person_nid'];
+    }
+
+    $ti = node_load($_GET['person_nid']);
+    $_SESSION['stormteammember_list_filter']['organization_nid'] = $ti->organization_nid;
+    $_SESSION['stormteammember_list_filter']['project_nid'] = $ti->project_nid;
+    $_SESSION['stormteammember_list_filter']['task_nid'] = $ti->task_nid;
+    $_SESSION['stormteammember_list_filter']['person_title'] = $t->person_title;
+  }
+
+
+
   $o = drupal_get_form('stormteammember_list_filter');
 
   $i = new stdClass();
@@ -71,6 +91,10 @@
       'field' => 'stm.ticket_title',
     ),
     array(
+      'data' => t('Person'),
+      'field' => 'stm.person_title ',
+    ),
+    array(
       'data' => storm_icon_add('storm/teammembers/add', $i, $_GET),
       'class' => 'storm_list_operations',
     ),
@@ -87,6 +111,9 @@
   if ($_SESSION['stormteammember_list_filter']['task_nid']) {
     $where[] = 'stm.task_nid='. $_SESSION['stormteammember_list_filter']['task_nid'];
   }
+  if ($_SESSION['stormteammember_list_filter']['person_nid']) {
+    $where[] = 'stm.person_nid='. $_SESSION['stormteammember_list_filter']['person_nid'];
+  }
   if ($_SESSION['stormteammember_list_filter']['ticket_nid']) {
     $where[] = 'stm.ticket_nid='. $_SESSION['stormteammember_list_filter']['ticket_nid'];
   }
@@ -114,6 +141,7 @@
 function stormteammember_list_filter() {
   $organization_nid = $_SESSION['stormteammember_list_filter']['organization_nid'];
   $project_nid = $_SESSION['stormteammember_list_filter']['project_nid'];
+  $person_nid = $_SESSION['stormteammember_list_filter']['person_nid'];
   $task_nid = $_SESSION['stormteammember_list_filter']['task_nid'];
   $ticket_nid = $_SESSION['stormteammember_list_filter']['ticket_nid'];
   $itemsperpage = $_SESSION['stormteammember_list_filter']['itemsperpage'];
@@ -153,7 +181,7 @@
     '#title' => t('Organization'),
     '#default_value' => $organization_nid,
     '#options' => $organizations,
-    '#attributes' => array('onchange' => "stormticket_organization_project_task_tickets(this, 'edit-project-nid', 'edit-task-nid', 'edit-ticket-nid', true, 'All')"),
+    '#attributes' => array('onchange' => "stormticket_organization_project_task_tickets(this, 'edit-project-nid', 'edit-person-nid', 'edit-task-nid', 'edit-ticket-nid', true, 'All')"),
   );
 
   $s = "SELECT n.nid, n.title FROM {node} AS n INNER JOIN {stormproject} AS spr ON spr.vid=n.vid
@@ -172,9 +200,28 @@
     '#default_value' => $project_nid,
     '#options' => $projects,
     '#process' => array('storm_dependent_select_process'),
-    '#attributes' => array('onchange' => "stormticket_project_task_tickets(this, 'edit-organization-nid', 'edit-task-nid', 'edit-ticket-nid', true, 'All')"),
+    '#attributes' => array('onchange' => "stormticket_project_task_tickets(this, 'edit-organization-nid', 'edit-person-nid','edit-task-nid', 'edit-ticket-nid', true, 'All')"),
+  );
+
+// Filter for project person
+  $s = "SELECT n.nid, n.title FROM {node} AS n INNER JOIN {stormperson} AS sor ON sor.vid=n.vid
+  WHERE n.status=1 AND n.type='stormperson' ORDER BY n.title";
+  $s = stormorganization_access_sql($s);
+  $s = db_rewrite_sql($s);
+  $r = db_query($s);
+  $persons = array();
+  while ($person = db_fetch_object($r)) {
+    $persons[$person->nid] = $person->title;
+  }
+  $persons = array(0 => t('All')) + $persons;
+  $form['filter']['group1']['person_nid'] = array(
+    '#type' => 'select',
+    '#title' => t('Person'),
+    '#default_value' => $person_nid,
+    '#options' => $persons,
   );
 
+
   $tree = _stormtask_get_tree($project_nid);
   $tasks = _stormtask_plain_tree($tree);
   $tasks = array(0 => t('All')) + $tasks;
@@ -187,6 +234,8 @@
     '#attributes' => array('onchange' => "stormticket_task_tickets(this, 'edit-organization-nid', 'edit-project-nid', 'edit-ticket-nid', true, 'All')"),
   );
 
+
+
   $s = "SELECT n.nid, n.title FROM {node} AS n INNER JOIN {stormticket} AS sti
   ON sti.vid=n.vid WHERE n.status=1 AND n.type='stormticket' AND sti.organization_nid=%d AND sti.project_nid=%d AND sti.task_nid=%d ORDER BY title ";
   $s = stormticket_access_sql($s);
@@ -238,6 +287,7 @@
   $_SESSION['stormteammember_list_filter']['organization_nid'] = $form_state['values']['organization_nid'];
   $_SESSION['stormteammember_list_filter']['project_nid'] = $form_state['values']['project_nid'];
   $_SESSION['stormteammember_list_filter']['task_nid'] = $form_state['values']['task_nid'];
+  $_SESSION['stormteammember_list_filter']['person_nid'] = $form_state['values']['person_nid'];
   $_SESSION['stormteammember_list_filter']['ticket_nid'] = $form_state['values']['ticket_nid'];
   $_SESSION['stormteammember_list_filter']['itemsperpage'] = $form_state['values']['itemsperpage'];
 }
@@ -370,6 +420,12 @@
       $p = node_load($teammember->project_nid);
       $teammember->organization_nid = $p->organization_nid;
     }
+     if (array_key_exists('person_nid', $_GET) && !$teammember->person_nid) {
+      $teammember->person_nid = $_GET['person_nid'];
+      $p = node_load($teammember->person_nid);
+      $teammember->organization_nid = $p->organization_nid;
+    }
+
     if (array_key_exists('task_nid', $_GET) && !$teammember->task_nid) {
       $teammember->task_nid = $_GET['task_nid'];
       $t = node_load($teammember->task_nid);
@@ -390,6 +446,9 @@
     if ($_SESSION['stormteammember_list_filter']['project_nid'] && !$teammember->project_nid) {
       $teammember->project_nid = $_SESSION['stormteammember_list_filter']['project_nid'];
     }
+    if ($_SESSION['stormteammember_list_filter']['person_nid'] && !$teammember->person_nid) {
+      $teammember->person_nid = $_SESSION['stormteammember_list_filter']['person_nid'];
+    }
     if ($_SESSION['stormteammember_list_filter']['task_nid'] && !$teammember->task_nid) {
       $teammember->task_nid = $_SESSION['stormteammember_list_filter']['task_nid'];
     }
@@ -398,6 +457,7 @@
     }
     if (array_key_exists('organization_nid', $_GET)) $teammember->organization_nid = $_GET['organization_nid'];
     if (array_key_exists('project_nid', $_GET)) $teammember->project_nid = $_GET['project_nid'];
+    if (array_key_exists('person_nid', $_GET)) $teammember->person_nid = $_GET['person_nid'];
     if (array_key_exists('task_nid', $_GET)) $teammember->task_nid = $_GET['task_nid'];
     if (array_key_exists('ticket_nid', $_GET)) $teammember->ticket_nid = $_GET['ticket_nid'];
 
 
diff -Naur storm/stormteammember/stormteammember.theme.inc stormNew/stormteammember/stormteammember.theme.inc
--- storm/stormteammember/stormteammember.theme.inc	2009-02-15 10:03:35.000000000 +0100
+++ stormNew/stormteammember/stormteammember.theme.inc	2009-06-29 15:44:50.000000000 +0200
@@ -16,6 +16,7 @@
       l($teammember->project_title, 'node/'. $teammember->project_nid),
       l($teammember->task_title, 'node/'. $teammember->task_nid),
       l($teammember->ticket_title, 'node/'. $teammember->ticket_nid),
+      l($teammember->person_title, 'node/'. $teammember->person_nid),
       array(
         'data' => storm_icon_edit('storm/teammembers/edit/'. $teammember->tid, $i, $_GET) .'&nbsp;'.  storm_icon_delete('storm/teammembers/delete/'. $teammember->tid, $i, $_GET),
         'class' => 'storm_list_operations',
@@ -78,6 +79,7 @@
         t('Organization', array(), $language),
         t('Project', array(), $language),
         t('Title', array(), $language),
+	t('Person', array(), $language),
         t('Date', array(), $language),
         t('Duration (hours)', array(), $language));
       $total_duration = 0;
@@ -86,6 +88,7 @@
           $teammember->organization_title,
           $teammember->project_title,
           $teammember->title,
+	  $teammember->person_title,
           format_date($teammember->trackingdate, 'small'),
           array('data' => sprintf('%.2f', $teammember->duration), 'align' => 'right'),
         );
@@ -98,6 +101,7 @@
       $header = array(
         t('Project', array(), $language),
         t('Title', array(), $language),
+	t('Person', array(), $language),
         t('Date', array(), $language),
         t('Duration (hours)', array(), $language));
       $total_duration = 0;
@@ -105,6 +109,7 @@
         $rows[] = array(
           $teammember->project_title,
           $teammember->title,
+	  $teammember->person_title,
           format_date($teammember->trackingdate, 'small'),
           array('data' => sprintf('%.2f', $teammember->duration), 'align' => 'right'),
         );
@@ -119,6 +124,7 @@
         t('Project', array(), $language),
         t('Task', array(), $language),
         t('Title', array(), $language),
+	t('Person', array(), $language),
         t('Date', array(), $language),
         t('Duration (hours)', array(), $language));
       $total_duration = 0;
@@ -127,6 +133,7 @@
           $teammember->project_title,
           $teammember->task_title,
           $teammember->title,
+	  $teammember->person_title,
           format_date($teammember->trackingdate, 'small'),
           array('data' => sprintf('%.2f', $teammember->duration), 'align' => 'right'),
         );
@@ -142,6 +149,7 @@
       $header = array(
         t('Task', array(), $language),
         t('Title', array(), $language),
+	t('Person', array(), $language),
         t('Date', array(), $language),
         t('Duration (hours)', array(), $language));
       $total_duration = 0;
@@ -149,6 +157,7 @@
         $rows[] = array(
           $teammember->task_title,
           $teammember->title,
+	  $teammember->person_title,
           format_date($teammember->trackingdate, 'small'),
           array('data' => sprintf('%.2f', $teammember->duration), 'align' => 'right'),
         );
 
diff -Naur storm/stormticket/stormticket.js stormNew/stormticket/stormticket.js
--- storm/stormticket/stormticket.js	2009-04-13 13:36:05.000000000 +0200
+++ stormNew/stormticket/stormticket.js	2009-06-29 18:31:55.000000000 +0200
@@ -31,13 +31,34 @@
 
 function stormticket_project_task_tickets(_project_select, _organization_select_id, _task_select_id, _ticket_select_id, _with_all_option, _all_text) {
   stormtask_project_tasks(_project_select, _task_select_id, _with_all_option, _all_text);
+/*  stormperson_project_people(_project_select, _person_select_id, _with_all_option, _all_text);*/
   var task_select = $("#" + _task_select_id).get(0);
   stormticket_task_tickets(task_select, _organization_select_id, _project_select.id, _ticket_select_id, _with_all_option, _all_text);
 };
 
-function stormticket_organization_project_task_tickets(_organization_select, _project_select_id, _task_select_id, _ticket_select_id, _with_all_option, _all_text) {
+function stormticket_organization_project_task_tickets(_organization_select, _project_select_id, _person_select_id, _task_select_id, _ticket_select_id, _with_all_option, _all_text) {
   stormproject_organization_projects(_organization_select, _project_select_id, _with_all_option, _all_text);
+//   stormperson_organization_people(_organization_select, _person_select_id, _with_all_option, _all_text);
   var project_select = $("#" + _project_select_id).get(0);
   stormticket_project_task_tickets(project_select, _organization_select.id, _task_select_id, _ticket_select_id, _with_all_option, _all_text);
 };
 
+
+
+function stormperson_project_people(_project_select, _person_select_id, _with_all_option, _all_text) {
+  var person_select = $("#" + _person_select_id).get(0);
+  storm_empty_select(person_select);
+  var project_nid = _project_select.value;
+  if (!project_nid) project_nid=0;
+
+  $.ajax({
+    type: "GET",
+    async: true,
+    url: Drupal.settings.storm.organization_people_url + Drupal.encodeURIComponent(project_nid),
+    dataType: "string",
+    success: function (data) {
+      var items = Drupal.parseJson(data);
+      storm_fill_select(person_select, items, _with_all_option, _all_text);
+    }
+  });
+};
\ No newline at end of file
 
