diff --git a/sites/all/modules/casetracker/casetracker.install b/sites/all/modules/casetracker/casetracker.install
index 9529627..4f49411 100644
--- a/sites/all/modules/casetracker/casetracker.install
+++ b/sites/all/modules/casetracker/casetracker.install
@@ -5,6 +5,48 @@
  * Implementation of hook_schema().
  */
 function casetracker_schema() {
+  $schema['casetracker_case_realms'] = array(
+    'fields' => array(
+      'case_nid' => array(
+        'type' => 'int',
+        'not null' => TRUE,
+        'default' => 0,
+      ),
+      'realm_csid' => array(
+        'type' => 'int',
+        'not null' => TRUE,
+        'default' => 0,
+      ),
+      'realm_name' => array(
+        'type' => 'varchar',
+        'length' => 255,
+        'not null' => TRUE,
+      ),
+    ),
+    'primary key' => array('case_nid','realm_name'),
+  );
+
+  $schema['casetracker_comment_status_realms'] = array(
+    'fields' => array(
+      'comment_cid' => array(
+        'type' => 'int',
+        'not null' => TRUE,
+        'default' => 0,
+      ),
+      'realm_csid' => array(
+        'type' => 'int',
+        'not null' => TRUE,
+        'default' => 0,
+      ),
+      'realm_name' => array(
+        'type' => 'varchar',
+        'length' => 255,
+        'not null' => TRUE,
+      ),
+    ),
+    'primary key' => array('comment_cid','realm_name'),
+  );
+
   $schema['casetracker_case'] = array(
     'fields' => array(
       'nid' => array(
diff --git a/sites/all/modules/casetracker/casetracker.module b/sites/all/modules/casetracker/casetracker.module
index 4e2cf72..ab53617 100644
--- a/sites/all/modules/casetracker/casetracker.module
+++ b/sites/all/modules/casetracker/casetracker.module
@@ -143,19 +143,23 @@ function casetracker_nodeapi(&$node, $op, $teaser = NULL, $page = NULL) {
         break;
 
       case 'load':
-        $casetracker = db_fetch_object(db_query('SELECT pid, case_priority_id, case_type_id, assign_to, case_status_id FROM {casetracker_case} WHERE nid = %d AND vid = %d', $node->nid, $node->vid));
+        $casetracker = db_fetch_object(db_query('SELECT pid, assign_to, nid FROM {casetracker_case} WHERE nid = %d AND vid = %d', $node->nid, $node->vid));
         if ($casetracker) {
+          $casetracker = load_realm_associations($casetracker);
           return array('casetracker' => $casetracker);
         }
         break;
 
       case 'update':
         $record = (object) $node->casetracker;
+        
         $record->assign_to = casetracker_get_uid($record->assign_to);
         $record->nid = $node->nid;
         $record->vid = $node->vid;
-
         $primary = $node->revision ? array('nid') : array('nid', 'vid');
+
+        $record = build_realm_associations($record);
+
         drupal_write_record('casetracker_case', $record, $primary);
         break;
 
@@ -244,8 +248,10 @@ function casetracker_comment(&$comment, $op) {
       db_query("DELETE FROM {casetracker_comment_status} WHERE cid = %d", $comment->cid);
       break;
     case 'view':
-      $results = db_query("SELECT * FROM {casetracker_comment_status} WHERE cid = %d", $comment->cid);
+      $results = db_query("SELECT cid, pid, title, assign_to, state
+                           FROM {casetracker_comment_status} WHERE cid = %d", $comment->cid);
       while ($result = db_fetch_object($results)) {
+        $result = load_realm_associations($result);
         $state = $result->state ? 'new' : 'old';
         $case_data[$state] = $result;
       }
@@ -378,33 +384,30 @@ function casetracker_case_form_common(&$form, $default_project = NULL) {
   else {
     $form['casetracker']['assign_to']['#default_value'] = variable_get('casetracker_default_assign_to', variable_get('anonymous', t('Anonymous')));
   }
+  $realms = casetracker_case_state_load('whatever');
 
-  $case_status_options = casetracker_case_state_load('status');
-  $default_status = !empty($node->casetracker->case_status_id) ? $node->casetracker->case_status_id : variable_get('casetracker_default_case_status', key($case_status_options));
-  $form['casetracker']['case_status_id'] = array(
-    '#type' => 'select',
-    '#title' => t('Status'),
-    '#options' => $case_status_options,
-    '#default_value' => $default_status,
-  );
-
-  $case_priority_options = casetracker_case_state_load('priority');
-  $default_priority = !empty($node->casetracker->case_priority_id) ? $node->casetracker->case_priority_id : variable_get('casetracker_default_case_priority', key($case_priority_options));
-    $form['casetracker']['case_priority_id'] = array(
-    '#type' => 'select',
-    '#title' => t('Priority'),
-    '#options' => $case_priority_options,
-    '#default_value' => $default_priority,
-  );
+  while (list($key, $val) = each($realms)) {
+    $options = array(); // suitable for form api.
+    if (!empty($val)) {
+      foreach ($val as $state) {
+        $options[$state['csid']] = $state['name'];
+      }
+    }
 
-  $case_type_options = casetracker_case_state_load('type');
-  $default_type = !empty($node->casetracker->case_type_id) ? $node->casetracker->case_type_id : variable_get('casetracker_default_case_type', key($case_type_options));
-  $form['casetracker']['case_type_id'] = array(
-    '#type' => 'select',
-    '#title' => t('Type'),
-    '#options' => $case_type_options,
-    '#default_value' => $default_type,
-  );
+    if ( !empty($node->casetracker->{"case_{$key}_id"}) ) {
+      $default = $node->casetracker->{"case_{$key}_id"};
+    }
+    else {
+      $default = variable_get("casetracker_default_case_{$key}", key($options));
+    }
+    
+    $form['casetracker']["case_{$key}_id"] = array(
+      '#type' => 'select',
+      '#title' => t($key),
+      '#options' => $options,
+      '#default_value' => $default,
+    );
+  }
 
   return $form;
 }
@@ -418,7 +421,7 @@ function casetracker_case_form_common(&$form, $default_project = NULL) {
  * The number of parameters passed will determine the return value.
  *
  * @param $realm
- *   Optional; the name of the realm ('status', 'priority', or 'type').
+ *   Optional; the name of the realm.
  * @param $csid
  *   Optional; the state ID to return from the passed $realm.
  * @return $values
@@ -429,7 +432,9 @@ function casetracker_case_form_common(&$form, $default_project = NULL) {
  */
 function casetracker_case_state_load($realm = NULL, $csid = NULL) {
   static $states_lookup = array();
-
+  
+  $returning = NULL;
+  
   if (!$states_lookup) {
     $results = db_query("SELECT csid, case_state_name, case_state_realm, weight FROM {casetracker_case_states} ORDER BY weight");
     while ($result = db_fetch_object($results)) { // offer cached csid and realm lookups from a one-time query.
@@ -439,25 +444,124 @@ function casetracker_case_state_load($realm = NULL, $csid = NULL) {
         'weight' => (int)$result->weight,
         'csid' => (int)$result->csid
       );
-      $states_lookup[$result->csid] = $states_lookup[$result->case_state_realm][$result->csid];
+      $csid_lookup[$result->csid] = $states_lookup[$result->case_state_realm][$result->csid];
     }
   }
 
-  if ($csid && $realm) {
-    return $states_lookup[$csid]['name'];
+  if ( $csid and $realm ) {
+    $returning = $states_lookup[$realm][$csid]['name'];
   }
-  elseif ($csid && !$realm) {
-    return $states_lookup[$csid];
+  elseif ( $csid ) {
+    $returning = $csid_lookup[$csid]['name']; 
   }
-  elseif (!$csid && $realm) {
-    $options = array(); // suitable for form api.
-    if (!empty($states_lookup[$realm])) {
-      foreach ($states_lookup[$realm] as $state) {
-        $options[$state['csid']] = $state['name'];
-      }
+  else {
+    $returning = $states_lookup;
+  }
+  
+  if ($returning == NULL and $realm != 'type') {
+    echo "why the FUCK is it null";
+    analyze($states_lookup[$realm][$csid]['name']);
+  }
+  
+  return $returning;
+  
+  // if ($csid && $realm) {
+  //   return $states_lookup[$csid]['name'];
+  // }
+  // elseif ($csid && !$realm) {
+  //   return $states_lookup[$csid];
+  // }
+  // elseif (!$csid && $realm) {
+  //   $options = array(); // suitable for form api.
+  //   if (!empty($states_lookup[$realm])) {
+  //     foreach ($states_lookup[$realm] as $state) {
+  //       $options[$state['csid']] = $state['name'];
+  //     }
+  //   }
+  //   return $options;
+  // }
+}
+
+/**
+ * Gives you an array of all of the current realms.
+ * 
+ * @return $realms
+ *   has a pass through in the event this method
+ *   was previously called in the current execution.
+ */
+function casetracker_case_state_realms() {
+  global $current_realms;
+  if ( !$current_realms ) {
+    $current_realms = array_keys(casetracker_case_state_load());
+  }
+  return $current_realms;
+}
+
+function realm_assocation_values($record) {
+  if ($record->cid) {
+    $table = 'casetracker_comment_status_realms';
+    $col   = 'comment_cid';
+    $id    = $record->cid;
+  }
+  else {
+    $table = 'casetracker_case_realms';
+    $col   = 'case_nid';
+    $id    = $record->nid;
+  }
+  
+  return array($table, $col, $id);
+}
+
+/**
+ * Gives you an array of all of the current realms.
+ * 
+ * @param $record
+ *   processes the realm assocations on the passed record
+ * @return $record
+ *   returns the record with all of the weird fields removed
+ */
+function build_realm_associations($record) {
+  $realms = casetracker_case_state_realms();
+  list($table, $col, $id) = realm_assocation_values($record);
+
+  foreach($realms as $realm) {
+    $record_realm->realm_csid = (int) $record->{"case_{$realm}_id"};
+    $record_realm->{$col}     = (int) $record->{$col};
+    $record_realm->realm_name = (string) $realm;
+    $res = db_fetch_object(
+      db_query("SELECT %s, realm_name FROM {%s} WHERE (%s = '%s' AND realm_name = '%s')", 
+        $col, $table, $col, $case_realm->case_nid, $case_realm->realm_name));
+    if ( $res ) {
+      drupal_write_record('casetracker_case_realms', $case_realm,array_keys((array) $res));
+    }
+    else {
+      drupal_write_record('casetracker_case_realms', $case_realm);
     }
-    return $options;
   }
+
+  return $record;
+}
+
+/**
+ * Gives you an array of all of the current realms.
+ * 
+ * @param $record
+ *   processes the realm assocations on the passed record
+ * @return $record
+ *   returns the record with all of the weird fields removed
+ */
+function load_realm_associations($record) {
+  $realms = casetracker_case_state_realms();
+  list($table, $col, $id) = realm_assocation_values($record);
+  
+  foreach($realms as $realm) {
+    $case_realm = db_fetch_object(
+      db_query("SELECT * FROM {%s} WHERE (%s = %d AND realm_name = '%s')", 
+        $table, $col, $id, $realm));
+    $record->{"case_{$realm}_id"} = $case_realm->realm_csid;
+  }
+  
+  return $record;
 }
 
 /**
@@ -560,7 +664,7 @@ function _casetracker_get_og_query_string(&$project) {
       $querystring[] = 'gids[]='. $group;
     }
   }
- 
+  
   return (0 < count($querystring))
       ? implode('&', $querystring)
       : NULL;
@@ -595,41 +699,37 @@ function theme_casetracker_comment_changes($old, $new) {
   $fields = array(
     'pid' => t('Project'),
     'title' => t('Title'),
-    'case_status_id' => t('Status'),
     'assign_to' => t('Assigned'),
-    'case_priority_id' => t('Priority'),
-    'case_type_id' => t('Type'),
   );
+
+  $realms = casetracker_case_state_realms();
+
+  while (list($key, $val) = each($realms)) {
+    $field = "case_{$val}_id";
+    $label = $val;
+
+    if ($new->{$field} != $old->{$field}) {
+      $old->{$field} = casetracker_case_state_load($val, $old->{$field});
+      $new->{$field} = casetracker_case_state_load($val, $new->{$field});
+      $rows[] = array(t('!label: !old &raquo; !new', array('!label' => $label, '!old' => $old->{$field}, '!new' => $new->{$field})));    
+    }
+  }
+
   foreach ($fields as $field => $label) {
     if ($new->{$field} != $old->{$field}) {
-      switch ($field) {
-        case 'pid':
-          $old_title = db_result(db_query("SELECT title FROM {node} WHERE nid = %d", $old->pid));
-          $new_title = db_result(db_query("SELECT title FROM {node} WHERE nid = %d", $new->pid));
-          $old->{$field} = l($old_title, "node/{$old->pid}");
-          $new->{$field} = l($new_title, "node/{$new->pid}");
-          break;
-        case 'case_status_id':
-          $old->{$field} = casetracker_case_state_load('status', $old->{$field});
-          $new->{$field} = casetracker_case_state_load('status', $new->{$field});
-          break;
-        case 'assign_to':
-          $old->{$field} = casetracker_get_name($old->{$field});
-          $new->{$field} = casetracker_get_name($new->{$field});
-          break;
-        case 'case_priority_id':
-          $old->{$field} = casetracker_case_state_load('priority', $old->{$field});
-          $new->{$field} = casetracker_case_state_load('priority', $new->{$field});
-          break;
-        case 'case_type_id':
-          $old->{$field} = casetracker_case_state_load('type', $old->{$field});
-          $new->{$field} = casetracker_case_state_load('type', $new->{$field});
-          break;
+      if ( $field == 'pid' ) {
+        $old_title = db_result(db_query("SELECT title FROM {node} WHERE nid = %d", $old->pid));
+        $new_title = db_result(db_query("SELECT title FROM {node} WHERE nid = %d", $new->pid));
+        $old->{$field} = l($old_title, "node/{$old->pid}");
+        $new->{$field} = l($new_title, "node/{$new->pid}");
+      }
+      elseif ( $field == 'assign_to' ) {
+        $old->{$field} = casetracker_get_name($old->{$field});
+        $new->{$field} = casetracker_get_name($new->{$field});
       }
       $rows[] = array(t('!label: !old &raquo; !new', array('!label' => $label, '!old' => $old->{$field}, '!new' => $new->{$field})));
     }
   }
-
   return theme('table', NULL, $rows, array('class' => 'case_changes'));
 }
 
@@ -845,3 +945,11 @@ function casetracker_get_name($uid = NULL, $reset = FALSE) {
   }
   return !empty($users[$uid]) ? $users[$uid] : variable_get('casetracker_default_assign_to', variable_get('anonymous', t('Anonymous')));
 }
+
+function analyze($var, $exiting = TRUE) {
+  echo "<pre>";
+  var_dump($var);
+  echo "</pre>";
+  if ($exiting)
+    exit;
+}
