diff --git a/plugins/access/response_code.inc b/plugins/access/response_code.inc
new file mode 100644
index 0000000..c2a8b1a
--- /dev/null
+++ b/plugins/access/response_code.inc
@@ -0,0 +1,64 @@
+<?php
+
+/**
+ * @file
+ * Plugin to provide access control based on HTTP response code.
+ */
+
+/**
+ * Plugins are described by creating a $plugin array which will be used
+ * by the system that includes this file.
+ */
+$plugin = array(
+  'title' => t('Response code'),
+  'description' => t('Is this the response code.'),
+  'callback' => 'ctools_response_code_ctools_access_check',
+  'settings form' => 'ctools_response_code_ctools_access_settings',
+  'summary' => 'ctools_response_code_ctools_access_summary',
+);
+
+/**
+ * Provide a list of the response codes we support.
+ *
+ * Abstracted so it can be more readily used both on input and output.
+ */
+function ctools_response_code_http_response_codes() {
+  return array(
+    '403 Forbidden' => t('403 Access denied'),
+    '404 Not Found' => t('404 Page not found'),
+  );
+}
+
+/**
+ * Settings form for the '403 Forbidden' access plugin.
+ */
+function ctools_response_code_ctools_access_settings($form, &$form_state, $conf) {
+  $form['settings']['code'] = array(
+    '#title' => t('Response code'),
+    '#type' => 'select',
+    '#options' => ctools_response_code_http_response_codes(),
+    '#default_value' => $conf['code'],
+  );
+
+  return $form;
+}
+
+/**
+ * Check for access.
+ */
+function ctools_response_code_ctools_access_check($conf, $context) {
+  $response_code = drupal_get_http_header('status');
+  if ($response_code == $conf['code']) {
+    return TRUE;
+  }
+
+  return FALSE;
+}
+
+/**
+ * Provide a summary description based upon the checked response code.
+ */
+function ctools_response_code_ctools_access_summary($conf, $context) {
+  $response_codes = ctools_response_code_http_response_codes();
+  return $response_codes[$conf['code']];
+}
