diff --git a/context_admin_exclude.module b/context_admin_exclude.module
index 5f14f0e..96fd67d 100644
--- a/context_admin_exclude.module
+++ b/context_admin_exclude.module
@@ -13,6 +13,7 @@ function context_admin_exclude_form_alter(&$form, $form_state, $form_id) {
   }
   switch ($form_id) {
     case 'context_ui_settings':
+      $admin_paths = context_admin_exclude_get_admin_paths();
       // Context settings page.
       $form['context_admin_exclude_exception'] = array(
           '#type' => 'fieldset',
@@ -27,7 +28,7 @@ function context_admin_exclude_form_alter(&$form, $form_state, $form_id) {
       );
       $form['context_admin_exclude_exception']['paths'] = array(
         '#prefix' => '<div><p><strong>' . t('Contexts will not be executed on the following paths:') . '</strong></p>',
-        '#markup' => implode("<br/>", context_admin_exclude_get_admin_paths()),
+        '#markup' => implode("<br/>", $admin_paths['admin']),
         '#suffix' => '</div>',
       );
       break;
@@ -74,14 +75,22 @@ function context_admin_exclude_save_context(&$form, &$form_state) {
 function context_admin_exclude_context_load_alter(&$context) {
   // Get list of stored settings.
   $exception_list = variable_get('context_admin_exclude_exception', array());
+  $is_admin_path = &drupal_static(__FUNCTION__);

   // Check if this context is allowed to be executed in admin paths.
   if (isset($exception_list[$context->name]) && $exception_list[$context->name] == TRUE) {
     // Allow the context to be executed normally.
   }
   else {
+    if (!isset($is_admin_path)) {
+      $path = current_path();
+      $patterns = context_admin_exclude_get_admin_paths();
+      $admin_path = drupal_match_path($path, $patterns['admin']);
+      $non_admin_path = drupal_match_path($path, $patterns['non_admin']);
+      $is_admin_path = $admin_path && !$non_admin_path;
+    }
     // Do not allow the context to be executed in admin paths.
-    if (drupal_match_path(current_path(), implode("\r\n", context_admin_exclude_get_admin_paths()))) {
+    if ($is_admin_path) {
       // Clear the context.
       $context = new StdClass();
       $context->name = NULL;
@@ -100,31 +109,26 @@ function hook_context_admin_exclude_admin_paths(&$paths) {
  * Generate a list of admin paths to be excluded.
  */
 function context_admin_exclude_get_admin_paths() {
-  $paths = &drupal_static(__FUNCTION__, array());
-  $patterns = array();
+  $patterns = &drupal_static(__FUNCTION__, array());
+  if (empty($patterns)) {
+    $patterns = path_get_admin_paths();
+    $patterns['admin'] = explode("\n", $patterns['admin']);
+    $patterns['non_admin'] = explode("\n", $patterns['non_admin']);

-  if (empty($paths)) {
-    $paths = module_invoke_all('admin_paths');
-    drupal_alter('admin_paths', $paths);
+    $patterns['admin'][] = 'admin';
+    $patterns['admin'][] = 'admin/*';
+    $patterns['admin'][] = 'system/ajax';
+    $patterns['admin'][] = 'system/ajax/*';
+    $patterns['admin'][] = 'media/browser';
+    $patterns['admin'][] = 'media/browser/*';
+    $patterns['admin'][] = '*/edit';
+    $patterns['admin'][] = '*/autocomplete';
+    $patterns['admin'][] = '*/files/*';

-    $paths['admin'] = TRUE;
-    $paths['admin/*'] = TRUE;
-    $paths['system/ajax'] = TRUE;
-    $paths['system/ajax/*'] = TRUE;
-    $paths['media/browser'] = TRUE;
-    $paths['media/browser/*'] = TRUE;
-    $paths['*/edit'] = TRUE;
-    $paths['*/autocomplete'] = TRUE;
-    $paths['*/files/*'] = TRUE;
+    drupal_alter('context_admin_exclude_admin_patterns', $patterns);

-    drupal_alter('context_admin_exclude_admin_paths', $paths);
+    $patterns['admin'] = implode("\n", $patterns['admin']);
+    $patterns['non_admin'] = implode("\n", $patterns['non_admin']);
   }
-
-  foreach ($paths as $path => $enabled) {
-    if ($enabled) {
-      $patterns[] = $path;
-    }
-  }
-
   return $patterns;
 }
