diff --git a/casetracker.module b/casetracker.module
index 8795b33..66410dc 100644
--- a/casetracker.module
+++ b/casetracker.module
@@ -34,8 +34,16 @@ function casetracker_help($path, $arg) {
 function casetracker_perm() {
   return array(
     'administer case tracker',
-    'assign cases',    
-  );
+    'assign cases',
+    'change own case project',
+    'change any case project',
+    'change own case priority',
+    'change any case priority',
+    'change own case status',
+    'change any case status',
+    'change own case type',
+    'change any case type',
+    );
 }
 
 /**
@@ -373,6 +381,7 @@ function casetracker_case_form_common(&$form, $default_project = NULL) {
       '#type' => 'select',
       '#default_value' => $default_project,
       '#options' => $project_options,
+      '#disabled' => !user_access('change any case project')&& !(user_access('change any case project') && $node->uid == $user->uid),
     );
   }
   else {
@@ -424,6 +433,7 @@ function casetracker_case_form_common(&$form, $default_project = NULL) {
     '#title' => t('Status'),
     '#options' => $case_status_options,
     '#default_value' => $default_status,
+    '#disabled' => !user_access('change any case status') && !(user_access('change own case status') && $node->uid == $user->uid),
   );
 
   $case_priority_options = casetracker_realm_load('priority');
@@ -433,6 +443,7 @@ function casetracker_case_form_common(&$form, $default_project = NULL) {
     '#title' => t('Priority'),
     '#options' => $case_priority_options,
     '#default_value' => $default_priority,
+    '#disabled' => !user_access('change any case priority') && !(user_access('change own case priority') && $node->uid == $user->uid),
   );
 
   $case_type_options = casetracker_realm_load('type');
@@ -442,6 +453,7 @@ function casetracker_case_form_common(&$form, $default_project = NULL) {
     '#title' => t('Type'),
     '#options' => $case_type_options,
     '#default_value' => $default_type,
+    '#disabled' => !user_access('change any case type') && !(user_access('change own case type') && $node->uid == $user->uid),
   );
 
   return $form;
diff --git a/casetracker_basic.module b/casetracker_basic.module
index 45ff3c4..0083397 100644
--- a/casetracker_basic.module
+++ b/casetracker_basic.module
@@ -9,7 +9,7 @@
  * Implementation of hook_perm().
  */
 function casetracker_basic_perm() {
-  return array('create projects', 'create cases', 'edit own projects', 'edit own cases');
+  return array('create projects', 'create cases', 'edit own projects', 'edit own cases', 'edit any project', 'edit any case');
 }
 
 /**
@@ -70,7 +70,7 @@ function casetracker_basic_project_access($op, $node, $account) {
       break;
     case 'update':
     case 'delete':
-      if (user_access('edit own projects', $account) && ($account->uid == $node->uid)) {
+      if (user_access('edit any project') || (user_access('edit own projects', $account) && ($account->uid == $node->uid))) {
         return TRUE;
       }
       break;
@@ -88,7 +88,7 @@ function casetracker_basic_case_access($op, $node) {
       return user_access('create cases');
     case 'update':
     case 'delete':
-      if (user_access('edit own cases') && ($user->uid == $node->uid)) {
+      if (user_access('edit any case') || (user_access('edit own cases') && ($user->uid == $node->uid))) {
         return TRUE;
       }
       break;
