diff --git a/source/deploy/modules/wf/wf_jenkins/wf_jenkins.features.user_permission.inc b/source/deploy/modules/wf/wf_jenkins/wf_jenkins.features.user_permission.inc
index c5c92a3..852828f 100644
--- a/source/deploy/modules/wf/wf_jenkins/wf_jenkins.features.user_permission.inc
+++ b/source/deploy/modules/wf/wf_jenkins/wf_jenkins.features.user_permission.inc
@@ -19,5 +19,14 @@ function wf_jenkins_user_default_permissions() {
     'module' => 'jenkins',
   );
 
+  // Exported permission: update job sandbox code.
+  $permissions['update job sandbox code'] = array(
+    'name' => 'update job sandbox code',
+    'roles' => array(
+      0 => 'developer',
+    ),
+    'module' => 'wf_jenkins',
+  );
+
   return $permissions;
 }
diff --git a/source/deploy/modules/wf/wf_jenkins/wf_jenkins.info b/source/deploy/modules/wf/wf_jenkins/wf_jenkins.info
index d5f2c34..d1e6957 100644
--- a/source/deploy/modules/wf/wf_jenkins/wf_jenkins.info
+++ b/source/deploy/modules/wf/wf_jenkins/wf_jenkins.info
@@ -9,6 +9,7 @@ dependencies[] = features
 dependencies[] = jenkins
 features[features_api][] = api:1
 features[user_permission][] = administer jenkins requests
+features[user_permission][] = update job sandbox code
 
 ; Information added by drupal.org packaging script on 2013-02-04
 version = "7.x-1.0-alpha1"
diff --git a/source/deploy/modules/wf/wf_jenkins/wf_jenkins.module b/source/deploy/modules/wf/wf_jenkins/wf_jenkins.module
index eea2b0d..0530172 100644
--- a/source/deploy/modules/wf/wf_jenkins/wf_jenkins.module
+++ b/source/deploy/modules/wf/wf_jenkins/wf_jenkins.module
@@ -5,12 +5,57 @@
  */
 
 /**
- * The Action function for 'wf_jenkins_update_code_submit'.
+ * Implements hook_menu().
  */
-function wf_jenkins_update_code_submit($job) {
-  wf_jenkins_start_update_code($job);
+function wf_jenkins_menu() {
+  $items = array();
+
+  $items['job/%wf_job/update-code'] = array(
+    'title' => t('Update code'),
+    'access arguments' => array('update job sandbox code'),
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('wf_jenkins_update_job_code_form', 1),
+    'type' => MENU_LOCAL_TASK,
+  );
+
+  return $items;
+}
+
+/**
+ * Implements hook_permission().
+ */
+function wf_jenkins_permission() {
+  $perms = array();
+
+  $perms['update job sandbox code'] = array(
+    'title' => t('Update job sandbox code'),
+  );
+
+  return $perms;
+}
+
+/**
+ * Page callback for job/%wf_job/update-code
+ */
+function wf_jenkins_update_job_code_form($form, $form_state, $job) {
+  $job_uri = entity_uri('wf_job', $job);
+  return confirm_form(
+    $form,
+    t('Are you sure you want to update the code for job <strong>@job</strong>', array('@job' => entity_label('wf_job', $job))),
+    $job_uri['path'],
+    t('This action takes at least a few minutes to complete.'),
+    t('Update code'),
+    t('Cancel')
+  );
 }
 
+/**
+ * Submit handler for wf_jenkins_update_job_code_form.
+ */
+function wf_jenkins_update_job_code_form_submit($form, &$form_state) {
+  $job = reset($form_state['build_info']['args']);
+  wf_jenkins_start_update_code($job);
+}
 
 /**
  * Inform Drupal that a job's code has been updated.
@@ -34,7 +79,7 @@ function wf_jenkins_start_update_code($job) {
   $query = array(
     'GIT_BRANCH' => wf_job_slug($job->jid),
   );
-  // Schedule the code update in Jenkins.
+  // Schedule the code update in Jenkins
   jenkins_request($path, $query);
 
   drupal_set_message(t('A code update for this job has commenced'));
@@ -51,7 +96,7 @@ function wf_jenkins_action_event_invoke($event, $job) {
   $assigned = user_load($job->assigned);
   $env = wf_environment_load($job->eid);
 
-  rules_invoke_event_by_args("wf_job_$event", array(
+  rules_invoke_event_by_args("wf_jenkins_$event", array(
     'job' => $job,
     'environment' => $env,
     'owner' => $owner,
diff --git a/source/deploy/modules/wf/wf_jenkins/wf_jenkins.rules.inc b/source/deploy/modules/wf/wf_jenkins/wf_jenkins.rules.inc
index 1531ac8..dfa0b65 100644
--- a/source/deploy/modules/wf/wf_jenkins/wf_jenkins.rules.inc
+++ b/source/deploy/modules/wf/wf_jenkins/wf_jenkins.rules.inc
@@ -1,23 +1,36 @@
 <?php
 /**
- * @file
- * Workflow jenkins rules.
+ * Implements hook_rules_event_info().
  */
+function wf_jenkins_rules_event_info() {
+  $defaults = array(
+    'group' => t('Jenkins'),
+    'module' => 'wf_jenkins',
+    'access callback' => 'wf_jenkins_rules_integration_access',
+  );
+
+  $default_variables = array(
+    'job' => array('type' => 'wf_job', 'label' => t('The job affected')),
+    'environment' => array('type' => 'wf_environment', 'label' => t('The job\'s current environment')),
+    'owner' => array('type' => 'user', 'label' => t('The owner of the job')),
+    'assigned' => array('type' => 'user', 'label' => t('The user assigned the job')),
+  );
 
-/**
- * Implementation of hook_rules_action_info().
- */
-function wf_jenkins_rules_action_info() {
   return array(
-    'wf_jenkins_update_code_submit' => array(
-      'label' => t('Update code for given job using Jenkins.'),
-      'group' => t('WF Jenkins'),
-      'parameter' => array(
-        'job' => array(
-          'type' => 'wf_job',
-          'label' => 'Job',
-        ),
-      ),
+    'wf_jenkins_updated_code' => $defaults + array(
+      'label' => t('After a job\'s code has been updated.'),
+      'variables' => $default_variables,
+    ),
+    'wf_jenkins_start_update_code' => $defaults + array(
+      'label' => t('When a code update is started for a job.'),
+      'variables' => $default_variables,
     ),
   );
 }
+
+/**
+ * Access callback for wf_jenkins rules integration.
+ */
+function wf_jenkins_rules_integration_access($type, $name) {
+  return user_access('administer jenkins requests');
+}
diff --git a/source/deploy/modules/wf/wf_job/wf_job.features.user_permission.inc b/source/deploy/modules/wf/wf_job/wf_job.features.user_permission.inc
index 481714e..e4e743b 100644
--- a/source/deploy/modules/wf/wf_job/wf_job.features.user_permission.inc
+++ b/source/deploy/modules/wf/wf_job/wf_job.features.user_permission.inc
@@ -76,14 +76,5 @@ function wf_job_user_default_permissions() {
     'module' => 'wf_job',
   );
 
-  // Exported permission: update job sandbox code.
-  $permissions['update job sandbox code'] = array(
-    'name' => 'update job sandbox code',
-    'roles' => array(
-      0 => 'developer',
-    ),
-    'module' => 'wf_job',
-  );
-
   return $permissions;
 }
diff --git a/source/deploy/modules/wf/wf_job/wf_job.info b/source/deploy/modules/wf/wf_job/wf_job.info
index 7381b77..84f9f85 100644
--- a/source/deploy/modules/wf/wf_job/wf_job.info
+++ b/source/deploy/modules/wf/wf_job/wf_job.info
@@ -7,6 +7,7 @@ version = 7.x-1.0-dev
 project = wf_job
 dependencies[] = context
 dependencies[] = ctools
+dependencies[] = entity
 dependencies[] = features
 dependencies[] = reply
 dependencies[] = rules
@@ -25,7 +26,6 @@ features[user_permission][] = deploy jobs
 features[user_permission][] = manage jobs
 features[user_permission][] = review others jobs
 features[user_permission][] = review own jobs
-features[user_permission][] = update job sandbox code
 features[views_view][] = job_list
 features[views_view][] = job_users
 files[] = includes/wf_job.class.inc
diff --git a/source/deploy/modules/wf/wf_job/wf_job.module b/source/deploy/modules/wf/wf_job/wf_job.module
index e4027f6..8847a31 100644
--- a/source/deploy/modules/wf/wf_job/wf_job.module
+++ b/source/deploy/modules/wf/wf_job/wf_job.module
@@ -28,15 +28,13 @@ function wf_job_entity_info() {
       'uuid' => 'uuid',
       'revision uuid' => 'vuuid',
     ),
-    'bundle keys' => array(
-      'bundle' => 'bundle',
-    ),
+    'bundle keys' => array('bundle' => 'bundle'),
     'bundles' => array(),
     'load hook' => 'wf_job_load',
     'view modes' => array(
       'full' => array(
         'label' => t('Full Job'),
-        'custom settings' =>  FALSE,
+        'custom settings' => FALSE,
       ),
     ),
     'label callback' => 'entity_class_label',
@@ -45,6 +43,7 @@ function wf_job_entity_info() {
     'uuid' => TRUE,
     'access callback' => 'wf_job_access',
     'views controller class' => 'WfJobViewsController',
+    'default_revision' => TRUE,
   );
 
   $info['wf_job_bundle'] = array(
@@ -175,13 +174,6 @@ function wf_job_menu() {
     'file' => 'includes/wf_job.pages.inc',
     'weight' => 10,
   );
-  $items['job/%wf_job/update-code'] = array(
-    'title' => 'Update code',
-    'access arguments' => array('update job sandbox code'),
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('wf_job_update_job_code_form', 1),
-    'type' => MENU_LOCAL_TASK,
-  );
   $items['admin/content/jobs/drush-aliases'] = array(
     'title' => 'Download drush aliases',
     'description' => 'Admin page for exporting drush wf.aliases.drushrc.php file',
@@ -207,30 +199,6 @@ function wf_job_menu() {
   return $items;
 }
 
-/**
- * Page callback for job/%wf_job/update-code.
- */
-function wf_job_update_job_code_form($form, $form_state, $job) {
-  $job_uri = entity_uri('wf_job', $job);
-  return confirm_form(
-    $form,
-    t('Are you sure you want to update the code for job <strong>@job</strong>', array('@job' => entity_label('wf_job', $job))),
-    $job_uri['path'],
-    t('This action takes at least a few minutes to complete.'),
-    t('Update code'),
-    t('Cancel')
-  );
-}
-
-/**
- * Submit handler for wf_job_update_job_code_form.
- */
-function wf_job_update_job_code_form_submit($form, &$form_state) {
-  // Gets the current job and fires wf_job_update_code_submit rules event.
-  $job = reset($form_state['build_info']['args']);
-  rules_invoke_event('wf_job_update_code_submit', $job);
-}
-
 /**
  * Implements hook_menu_local_tasks_alter().
  */
@@ -294,10 +262,6 @@ function wf_job_permission() {
     'title' => t('Review own jobs.'),
   );
 
-  $perms['update job sandbox code'] = array(
-    'title' => t('Update job sandbox code'),
-  );
-
   return $perms;
 }
 
@@ -507,7 +471,7 @@ function wf_job_load_bundles() {
  * Creates a new job object.
  */
 function entityform_create($values = array()) {
-  return entity_get_controller('wf_job')->create($values);
+  return entity_create('wf_job', $values);
 }
 
 /**
@@ -524,7 +488,7 @@ function wf_job_delete(WfJob $job) {
  *   A list of job ids to delete.
  */
 function entityform_delete_multiple(array $ids) {
-  entity_get_controller('wf_job')->delete($ids);
+  entity_delete('wf_job', $ids);
 }
 
 /**
@@ -556,7 +520,7 @@ function wf_job_save($job) {
     $job->created = REQUEST_TIME;
     $job->uid = $GLOBALS['user']->uid;
   }
-  entity_get_controller('wf_job')->save($job);
+  entity_save('wf_job', $job);
 }
 
 // /Entity CRUD
@@ -939,7 +903,7 @@ function wf_job_reply_save($job, $title, $body, array $extra_values = array()) {
     $reply_fields['body'] => array(LANGUAGE_NONE => array(array('value' => $body))),
   ) + $extra_values;
 
-  $reply = entity_get_controller('reply')->create($reply_values);
+  $reply = entity_create('reply', $reply_values);
   reply_save($reply);
 
   return $reply;
@@ -959,7 +923,7 @@ function wf_job_action_event_invoke($event, $job, $reply) {
   }
 
   if (empty($next_env)) {
-    $next_env = entity_get_controller('wf_environment')->create(array('env' => 'None'));
+    $next_env = entity_create('wf_environment', array('env' => 'None'));
   }
 
   rules_invoke_event_by_args("wf_job_$event", array(
@@ -1210,4 +1174,4 @@ function wf_job_get_deploy_conflicts($job) {
   else {
     return $data['conflicts'];
   }
-}
\ No newline at end of file
+}
diff --git a/source/deploy/modules/wf/wf_job/wf_job.rules.inc b/source/deploy/modules/wf/wf_job/wf_job.rules.inc
index 5871951..8db6958 100644
--- a/source/deploy/modules/wf/wf_job/wf_job.rules.inc
+++ b/source/deploy/modules/wf/wf_job/wf_job.rules.inc
@@ -1,10 +1,5 @@
 <?php
 /**
- * @file
- * Workflow job rules.
- */
-
-/**
  * Implements hook_rules_event_info().
  */
 function wf_job_rules_event_info() {
@@ -52,18 +47,6 @@ function wf_job_rules_event_info() {
       'label' => t('After a job is deployed to the final environment'),
       'variables' => $default_variables,
     ),
-    'wf_job_update_code_submit' => $defaults + array(
-      'label' => t('When a user clicks the Update code button.'),
-      'variables' => array('job' => array('type' => 'wf_job', 'label' => t('The job affected'))),
-    ),
-    'wf_job_start_update_code' => $defaults + array(
-      'label' => t('When a code update is started for a job.'),
-      'variables' => array('job' => array('type' => 'wf_job', 'label' => t('The job affected'))),
-    ),
-    'wf_job_updated_code' => $defaults + array(
-      'label' => t('After a job\'s code has been updated.'),
-      'variables' => array('job' => array('type' => 'wf_job', 'label' => t('The job affected'))),
-    ),
   );
 }
 
diff --git a/source/deploy/modules/wf/wf_job/wf_job.services.inc b/source/deploy/modules/wf/wf_job/wf_job.services.inc
index 53c8b31..babaf07 100644
--- a/source/deploy/modules/wf/wf_job/wf_job.services.inc
+++ b/source/deploy/modules/wf/wf_job/wf_job.services.inc
@@ -209,7 +209,7 @@ function wf_job_services_retrieve($jid) {
  *   Unique identifier for the job (jid) or errors if there was a problem.
  */
 function wf_job_services_create($job) {
-  $job = entity_get_controller('wf_job')->create($job);
+  $job = entity_create('wf_job', $job);
   unset($job->jid);
 
   try {
@@ -236,7 +236,7 @@ function wf_job_services_create($job) {
  *   Unique identifier for the job (jid) or FALSE if there was a problem.
  */
 function wf_job_services_update($jid, $job) {
-  $job = entity_get_controller('wf_job')->create($job);
+  $job = entity_create('wf_job', $job);
   $job->jid = $jid;
   try {
     wf_job_save($job);
