diff --git a/shield.module b/shield.module
index c2b1168..5d8a957 100644
--- a/shield.module
+++ b/shield.module
@@ -53,6 +53,12 @@ function shield_admin_settings() {
     '#description' => t('When the site is accessed from command line (e.g. from Drush, cron), the shield should not work.'),
     '#default_value' => variable_get('shield_allow_cli', 1),
   );
+  $form['general']['shield_excluded_paths'] = array(
+    '#type' => 'textarea',
+    '#title' => t('Exclude these paths from Shield protection'),
+    '#description' => t('Enter a list of paths that should be accessible without Shield credentials. Leave blank to protect all paths.'),
+    '#default_value' => variable_get('shield_excluded_paths', ''),
+  );
 
   $form['credentials'] = array(
     '#type' => 'fieldset',
@@ -102,6 +108,31 @@ function shield_boot() {
     return;
   }
 
+  // Allow excluded paths to bypass Shield protection.
+  $excluded_paths = variable_get('shield_excluded_paths', '');
+  if (!empty($excluded_paths)) {
+    require_once './includes/unicode.inc';
+    require_once './includes/path.inc';
+    require_once './includes/locale.inc';
+    require_once './includes/language.inc';
+    drupal_language_initialize();
+    $pages = drupal_strtolower($excluded_paths);
+    //drupal_set_message("pages $pages");
+    $path = drupal_strtolower(drupal_get_path_alias($_GET['q']));
+    //drupal_set_message($path);
+    // Compare the lowercase internal and lowercase path alias (if any).
+    $page_match = drupal_match_path($path, $pages);
+
+    if ($path != $_GET['q']) {
+      $page_match = $page_match || drupal_match_path($_GET['q'], $pages);
+
+    }
+    // We're on a path that is excluded from Shield protection.
+    if ($page_match) {
+      return;
+    }
+  }
+
   $print = variable_get('shield_print', 'Hello, user: [user], pass: [pass]!');
   header(sprintf('WWW-Authenticate: Basic realm="%s"', strtr($print, array('[user]' => $user, '[pass]' => $pass))));
   header('HTTP/1.0 401 Unauthorized');
