diff --git a/casetracker.install b/casetracker.install
index a8db583..7959625 100644
--- a/casetracker.install
+++ b/casetracker.install
@@ -200,6 +200,20 @@ function casetracker_uninstall() {
   variable_del('casetracker_current_project_number');
 }
 
+/*
+* Implementation of hook_enable()
+*/
+function casetracker_enable() {
+  cache_clear_all('services:methods', 'cache');
+}
+
+/*
+* Implementation of hook_disable()
+*/
+function casetracker_disable() {
+  cache_clear_all('services:methods', 'cache');
+}
+
 /**
  * Implementation of hook_update_N
  */
diff --git a/casetracker.module b/casetracker.module
index 6e8b316..df86df6 100644
--- a/casetracker.module
+++ b/casetracker.module
@@ -1071,3 +1071,28 @@ function casetracker_token_list($type = 'all') {
   module_load_include('inc', 'casetracker', 'casetracker.token');
   return _casetracker_token_list($type);
 }
+
+/*
+* Implementation of hook_service()
+*/
+function casetracker_service() {
+  return array(
+    array(
+      '#method' => 'casetracker.getStates',
+      '#callback' => 'casetracker_get_states',
+      '#return' => 'array',
+      '#help' => 'Returns an array of arrays mapping case state csids to descriptions',
+    )
+  );
+}
+
+/**
+* Callback for "casetracker.getStates" service
+*/
+function casetracker_get_states() {
+  $states = array();
+  foreach (array('priority', 'status', 'type') as $realm) {
+    $states[$realm] = casetracker_case_state_load(NULL, $realm);
+  }
+  return $states;
+}
