diff --git a/a/context.module b/b/context.module
index a3beee2..c99b033 100644
--- a/a/context.module
+++ b/b/context.module
@@ -168,6 +168,9 @@ function context_init() {
   if ($plugin = context_get_plugin('condition', 'path')) {
     $plugin->execute();
   }
+  if ($plugin = context_get_plugin('condition', 'query_string')) {
+    $plugin->execute();
+  }
   if ($plugin = context_get_plugin('condition', 'language')) {
     global $language;
     $plugin->execute($language->language);
diff --git a/a/context.plugins.inc b/b/context.plugins.inc
index 6f86559..fa758ff 100644
--- a/a/context.plugins.inc
+++ b/b/context.plugins.inc
@@ -26,6 +26,11 @@ function _context_context_registry() {
       'description' => t('Set this context when any of the paths above match the page path. Put each path on a separate line. You can use the <code>*</code> character (asterisk) as a wildcard and the <code>~</code> character (tilde) to exclude one or more paths. Use &lt;front&gt; for the site front page.'),
       'plugin' => 'context_condition_path',
     ),
+    'query_string' => array(
+      'title' => t('Query String'),
+      'description' => t('Set this context when any of the query strings above match the page query string. Put each query string on a separate line. You can use the "*" character as a wildcard and <code>~</code> to exclude one or more query strings.'),
+      'plugin' => 'context_condition_query_string',
+    ),
     'user' => array(
       'title' => t('User role'),
       'description' => t('Set this context when the current user has one of the selected role(s).'),
@@ -179,6 +184,14 @@ function _context_context_plugins() {
       'parent' => 'context_condition',
     ),
   );
+  $plugins['context_condition_query_string'] = array(
+    'handler' => array(
+      'path' => drupal_get_path('module', 'context') .'/plugins',
+      'file' => 'context_condition_query_string.inc',
+      'class' => 'context_condition_query_string',
+      'parent' => 'context_condition_path',
+    ),
+  );
   $plugins['context_condition_user'] = array(
     'handler' => array(
       'path' => drupal_get_path('module', 'context') . '/plugins',
diff --git a/b/plugins/context_condition_query_string.inc b/b/plugins/context_condition_query_string.inc
new file mode 100644
index 0000000..3f91ab3
--- /dev/null
+++ b/b/plugins/context_condition_query_string.inc
@@ -0,0 +1,76 @@
+<?php
+
+/**
+ * Expose query strings as a context condition.
+ */
+class context_condition_query_string extends context_condition_path {
+
+  /**
+   * Execute.
+   */
+  function execute() {
+    if ($this->condition_used() && !empty($_SERVER["QUERY_STRING"])) {
+      $current_query_string = $_SERVER["QUERY_STRING"];
+      foreach ($this->get_contexts() as $context) {
+        $query_strings = $this->fetch_from_context($context, 'values');
+        if ($this->match($current_query_string, $query_strings)) {
+          $this->condition_met($context);
+        }
+      }
+    }
+  }
+  protected function match($subject, $patterns) {
+    $match = FALSE;
+    $positives = $negatives = 0;
+    $subject = !is_array($subject) ? array($subject) : $subject;
+    foreach ($patterns as $pattern) {
+      if (strpos($pattern, '~') === 0) {
+        $negate = TRUE;
+        $negatives++;
+      }
+      else {
+        $negate = FALSE;
+        $positives++;
+      }
+      $pattern = ltrim($pattern, '~');
+
+      foreach ($subject as $value) {
+
+        $q_subject = $this->parse_query_string($value);
+        $q_pattern = $this->parse_query_string($pattern);
+       
+        foreach ($q_subject as $k => $v) {
+          if (isset($q_pattern[$k])) {
+            if ($q_pattern[$k] == '*' || $q_pattern[$k] == $v) {
+              if ($negate) {
+                return FALSE;
+              }
+              $match = TRUE;
+            }
+          }
+        }
+       
+      }
+    }
+    // If there are **only** negative conditions and we've gotten this far none
+  // we actually have a match.
+    if ($positives === 0 && $negatives) {
+      return TRUE;
+    }
+    return $match;
+  }
+  protected function parse_query_string($str) {
+    $op = array();
+    $pairs = explode("&", $str);
+    foreach ($pairs as $pair) {
+      if(strpos($pair,'=')){
+        list($k, $v) = explode('=', $pair);
+        $op[$k] = $v;
+      } else {
+      	// Just in case we hit a query string like ?one=1&two&three=3
+        $op[$pair] = true;
+      }
+    }
+    return $op;
+  }
+}
\ No newline at end of file
