diff --git a/plugins/access/response_code.inc b/plugins/access/response_code.inc
new file mode 100644
index 0000000..d5ebf5f
--- /dev/null
+++ b/plugins/access/response_code.inc
@@ -0,0 +1,59 @@
+<?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',
+);
+
+/**
+ * Keys are http headers for easily compare.
+ *
+ * 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 'Response code' 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) {
+  return $conf['code'] == drupal_get_http_header('status');
+}
+
+/**
+ * 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']];
+}
