diff --git a/README.txt b/README.txt
index 5c6db31..49e544f 100644
--- a/README.txt
+++ b/README.txt
@@ -22,9 +22,10 @@ CONTENTS
 3.  Permissions
 4.  Configuration
 4.1   Access schemes
-4.1.1  Automated section assignment
-4.1.2  Workbench Access message label
-4.1.3  Allow multiple section assignments
+4.1.1 Content types enabled
+4.1.2  Automated section assignment
+4.1.3  Workbench Access message label
+4.1.4  Allow multiple section assignments
 4.2   Access sections
 4.2.1  Manual section configuration
 4.2.2  Automated section configuration
@@ -460,9 +461,25 @@ section is the Museum vocabulary created during installation.
 
 Select your options and Save configuration.
 
+----
+4.1.1 Content types enabled
+
+This fieldset determines is access control rules will be enforced on each
+content type. You may select to disable complex access rules for any content
+type.
+
+  > Content types enabled
+  [*] Article
+  [*] Basic page
+  Only selected content types will have Workbench Access rules enforced.
+
+By default, access control is enforced for all content types.
+
+Note that these settings are also available under the "Workflow" tab of the
+content type settings page.
 
 ----
-4.1.1  Automated section assignment
+4.1.2  Automated section assignment
 
 On the settings page is another checkbox, labeled 'Automated section
 assignment'. This optional setting is enabled by default.
@@ -480,7 +497,7 @@ automatically configured for you.
 
 
 ----
-4.1.2  Workbench Access message label
+4.1.3  Workbench Access message label
 
 In the user interface, Workbench Access sets certain messages, such as the
 assigned editorial sections and the form label.
@@ -489,7 +506,7 @@ This settings lets you change how the item is labelled. The default is
 "Workbench Access". You may prefer "Sections" or "Editorial Team" instead.
 
 ----
-4.1.3  Allow multiple section assignments
+4.1.4  Allow multiple section assignments
 
 The checkbox labeled 'Allow multiple section assignments' controls the behavior
 of the section selection form when editing content. This optional setting is
diff --git a/tests/workbench_access.test b/tests/workbench_access.test
index a6cc7fc..392cee1 100644
--- a/tests/workbench_access.test
+++ b/tests/workbench_access.test
@@ -161,7 +161,17 @@ class WorkbenchAccessTestCase extends DrupalWebTestCase {
     $this->drupalGet("node/$node->nid/edit");
     $this->assertRaw('TestWA', t('Workbench Access field was renamed.'));
     $this->assertRaw('<select multiple="multiple" name="workbench_access_id[]" id="edit-workbench-access-id" class="form-select required">', t('Form presents a select list with multiple select.'));
-    // TODO: Test form options.
+
+    // Check that access control by node type settings work.
+    $this->assertTrue(variable_get('workbench_access_node_type_' . $node->type, 1), t('Workbench Access enforced for %type content.', array('%type' => $node->type)));
+    $response = workbench_access_node_access($node, 'update', $account);
+    $this->assertTrue($response != NODE_ACCESS_IGNORE, t('Workbench Access rules enforced on test node.'));
+
+    variable_set('workbench_access_node_type_' . $node->type, 0);
+    $this->assertFalse(variable_get('workbench_access_node_type_' . $node->type, 1), t('Workbench Access not enforced for %type content.', array('%type' => $node->type)));
+    $response = workbench_access_node_access($node, 'update', $account);
+    $this->assertTrue($response == NODE_ACCESS_IGNORE, t('Workbench Access rules ignored on test node.'));
+
   }
 
 }
diff --git a/workbench_access.admin.inc b/workbench_access.admin.inc
index 16f21a6..87bb595 100644
--- a/workbench_access.admin.inc
+++ b/workbench_access.admin.inc
@@ -53,6 +53,25 @@ function workbench_access_settings_form($form, &$form_state) {
       }
     }
   }
+  $types = node_type_get_types();
+  if (!empty($types)) {
+    $form['node_types'] = array(
+      '#type' => 'fieldset',
+      '#title' => t('Content types enabled'),
+      '#collapsible' => TRUE,
+      '#collapsed' => TRUE,
+    );
+    foreach ($types as $type => $data) {
+      $form['node_types']['workbench_access_node_type_' . $type] = array(
+        '#title' => check_plain($data->name),
+        '#type' => 'checkbox',
+        '#default_value' => variable_get('workbench_access_node_type_' . $type, 1),
+      );
+    }
+    $form['node_types']['message'] = array(
+      '#markup' => '<em>' . t('Only selected content types will have Workbench Access rules enforced.') . '</em>',
+    );
+  }
   $form['workbench_access_label'] = array(
     '#type' => 'textfield',
     '#title' => t('Workbench Access message label'),
diff --git a/workbench_access.module b/workbench_access.module
index a08050d..2aad45d 100644
--- a/workbench_access.module
+++ b/workbench_access.module
@@ -295,8 +295,10 @@ function workbench_access_field_extra_fields() {
   // @TODO: be more selective here.
   $extra = array();
   foreach (node_type_get_names() as $name => $value) {
-    $extra['node'][$name]['form'] = $base;
-    $extra['node'][$name]['display'] = $base;
+    if (variable_get('workbench_access_node_type_' . $name, 1)) {
+      $extra['node'][$name]['form'] = $base;
+      $extra['node'][$name]['display'] = $base;
+    }
   }
   return $extra;
 }
@@ -341,25 +343,34 @@ function workbench_access_node_access($node, $op, $account) {
   if (empty($tree['active'])) {
     return NODE_ACCESS_IGNORE;
   }
-  // Now check the user account.
-  if (!isset($account->workbench_access)) {
-    $account = user_load($account->uid);
+
+  // View step. We ignore for published nodes.
+  if ($op == 'view' && $node->status) {
+    return NODE_ACCESS_IGNORE;
   }
+
+  // If disabled for this content type, do nothing.
   if (!is_object($node)) {
     $type = $node;
   }
   else {
     $type = $node->type;
   }
+  if (!variable_get('workbench_access_node_type_' . $type, 1)) {
+    return NODE_ACCESS_IGNORE;
+  }
+
+  // Now check the user account.
+  if (!isset($account->workbench_access)) {
+    $account = user_load($account->uid);
+  }
+
   // Create step. User must be assigned to a section to create content.
   // Note that we do not currently enforce complex rules here.
   if ($op == 'create' && !empty($account->workbench_access)) {
     return NODE_ACCESS_IGNORE;
   }
-  // View step. We ignore for published nodes.
-  if ($op == 'view' && $node->status) {
-    return NODE_ACCESS_IGNORE;
-  }
+
   // Load the current scheme.
   workbench_access_load_include(variable_get('workbench_access', 'taxonomy'));
   // Get the access rules for this node.
@@ -367,9 +378,12 @@ function workbench_access_node_access($node, $op, $account) {
   if (!empty($node->workbench_access) && !empty($account->workbench_access)) {
     $result = workbench_access_check($op, $type, array_filter($node->workbench_access), $account->workbench_access);
   }
+
+  // workbench_access_check() returns either FALSE or a matching access_id.
   if ($result !== FALSE) {
     return NODE_ACCESS_ALLOW;
   }
+
   return NODE_ACCESS_DENY;
 }
 
@@ -1244,6 +1258,10 @@ function workbench_access_form_alter(&$form, $form_state, $form_id) {
   if (empty($form['#node_edit_form'])) {
     workbench_access_alter_form($form_id, $form, $form_state);
   }
+  // Ensure that we can enforce our rules.
+  elseif (!isset($form['#node']->type) || !variable_get('workbench_access_node_type_' . $form['#node']->type, 1)) {
+    return;
+  }
   // Fire the node form alter.
   else {
     // Make sure we prepared the user.
@@ -1555,6 +1573,20 @@ function workbench_access_menu_link_submit($form, &$form_state) {
 }
 
 /**
+ * Implements hook_form_FORM_ID_alter().
+ *
+ * Add access rules to node types.
+ */
+function workbench_access_form_node_type_form_alter(&$form, $form_state) {
+  $form['workflow']['workbench_access_node_type'] = array(
+    '#title' => t('Enforce Workbench Access control'),
+    '#type' => 'checkbox',
+    '#default_value' => variable_get('workbench_access_node_type_' . $form['#node_type']->type, 1),
+    '#description' => t('Use Workbench Access to enforce editorial control to all content of this type.'),
+  );
+}
+
+/**
  * Implements hook_block_view_workbench_block_alter().
  *
  * Show the editorial status of this node.
@@ -1563,7 +1595,10 @@ function workbench_access_workbench_block() {
   // Add editing information to this page (if it's a node).
   if ($node = menu_get_object()) {
     if (user_access('view workbench access information')) {
-      if (empty($node->workbench_access)) {
+      if (!variable_get('workbench_access_node_type_' . $node->type, 1)) {
+        return array(t('@message_label: <em>@type pages are not under access control</em>', array('@message_label' => variable_get('workbench_access_label', 'Section'), '@type' => node_type_get_name($node->type))));
+      }
+      elseif (empty($node->workbench_access)) {
         return array(t('@message_label: <em>Unassigned</em>', array('@message_label' => variable_get('workbench_access_label', 'Section'))));
       }
       else {
