diff --git a/google_appliance.module b/google_appliance.module
index 1fe8910..4e946c3 100644
--- a/google_appliance.module
+++ b/google_appliance.module
@@ -426,6 +426,17 @@ function google_appliance_parse_device_response_xml($gsa_xml) {
       return $results;
     }
     else {  // parse results
+      
+      foreach($payload->xpath('//GM') as $km) {
+        $keymatch = array();
+        
+        // keymatch information
+        $keymatch['description'] = (string) $km->GD;
+        $keymatch['url'] = (string) $km->GL;
+
+        $results['keymatch'][] = $keymatch;
+      }
+
       foreach ($payload->xpath('//R') as $res) {
         $result = array();
         
diff --git a/theme/google-appliance-keymatch.tpl.php b/theme/google-appliance-keymatch.tpl.php
new file mode 100644
index 0000000..b42d93f
--- /dev/null
+++ b/theme/google-appliance-keymatch.tpl.php
@@ -0,0 +1,21 @@
+<?php
+// $Id$
+/**
+ * @file 
+ *    default theme implementation for displaying a single keymatch
+ *
+ * This template renders a single keymatch result and is collected into
+ * google-applinace-results.tpl.php. This and the parent template are
+ * dependent on one another sharing the markup for keymatch listings.
+ *
+ * @see template_preprocess_google_appliance_keymatch()
+ * @see google-appliance-results.tpl.php
+ */
+//dsm($variables);
+?>
+<li class="keymatch <?php print $classes; ?>" id="keymatch-<?php print $keymatch_idx; ?>"<?php print $attributes; ?>>
+	<h3 class="keymatch-description"><a href="<?php print render($url); ?>"><?php print render($description); ?></a></h3>
+	<div class="google-appliance-snippet-info">
+		<p class="google-appliance-info"><?php print render($url); ?></p>
+	</div>
+</li>
diff --git a/theme/google-appliance-result.tpl.php b/theme/google-appliance-result.tpl.php
index ab91adb..8a2c97c 100644
--- a/theme/google-appliance-result.tpl.php
+++ b/theme/google-appliance-result.tpl.php
@@ -3,7 +3,7 @@
 /**
  * @file 
  *    default theme implementation for displaying a single search result.
- 
+ *
  * This template renders a single search result and is collected into
  * google-applinace-results.tpl.php. This and the parent template are
  * dependent on one another sharing the markup for results listings.
diff --git a/theme/google-appliance-results.tpl.php b/theme/google-appliance-results.tpl.php
index d8e2ada..2a006fe 100644
--- a/theme/google-appliance-results.tpl.php
+++ b/theme/google-appliance-results.tpl.php
@@ -23,6 +23,10 @@
     <?php print $sort_headers; ?>
   </div>
   
+  <ol class="keymatch-results google-appliance-keymatch-results">
+    <?php print $keymatch_results; ?>
+  </ol>
+
   <ol class="search-results google-appliance-results">
     <?php print $search_results; ?>
   </ol>
diff --git a/theme/google_appliance.css b/theme/google_appliance.css
index 805013d..01c914e 100644
--- a/theme/google_appliance.css
+++ b/theme/google_appliance.css
@@ -8,8 +8,9 @@
   margin-top: 0;
   margin-bottom: 4px;
 }
-.google-appliance-results {
+.google-appliance-results, .google-appliance-keymatch-results {
   list-style: none;
+  
 }
 
 /* result entries */
@@ -25,11 +26,31 @@
 .google-appliance-results .google-appliance-snippet-info {
   padding-left:0; 
 }
-.google-appliance-results .google-appliance-info {
+.google-appliance-results .google-appliance-info, .google-appliance-keymatch-results {
   font-size: 0.85em;
   color:#aaa;
 }
 
+/* key match results */
+.google-appliance-keymatch-results {
+	padding-left:0;
+}
+.google-appliance-keymatch-results li {
+	background:#f1f1ed;
+	border-bottom:1px solid #e7e7e3;
+	padding:10px 10px;
+	border-radius: 6px;
+  -webkit-border-radius:6px;
+  -moz-border-radius:6px;
+  margin-bottom:10px;
+}
+.google-appliance-keymatch-results h3 {
+	margin: 0;
+}
+.google-appliance-keymatch-results p {
+	margin:0;
+}
+
 /* results listings "control" bar */
 .google-appliance-results-control-bar {
   border:1px solid #ddd;
diff --git a/theme/google_appliance.theme.inc b/theme/google_appliance.theme.inc
index 3574ead..fcbd015 100644
--- a/theme/google_appliance.theme.inc
+++ b/theme/google_appliance.theme.inc
@@ -41,6 +41,13 @@ function google_appliance_theme() {
     'template' => 'google-appliance-result',
     'path' => $ga_template_dir,
   );
+
+  // single keymatch within the results page
+  $registry['google_appliance_keymatch'] = array(
+    'variables' => array('keymatch_data' => NULL),
+    'template' => 'google-appliance-keymatch',
+    'path' => $ga_template_dir,
+  );
   
   // pager
   $registry['google_appliance_pager'] = array(
@@ -187,6 +194,14 @@ function template_preprocess_google_appliance_results(&$vars) {
       'google_appliance_sort_headers', $vars['search_query_data']
     );
     
+    // get themed keymatch listing
+    $vars['keymatch_results'] = '';
+    $count = 0;
+    foreach ($vars['response_data']['keymatch'] as $keymatch) {
+      $keymatch['keymatch_idx'] = ++$count;
+      $vars['keymatch_results'] .= theme('google_appliance_keymatch', $keymatch);
+    }
+
     // get themed results listing
     $vars['search_results'] = '';
     $count = 0;
@@ -235,6 +250,18 @@ function template_preprocess_google_appliance_result(&$vars) {
 }
 
 /**
+ * preprocess for a single keymatch
+ */
+function template_preprocess_google_appliance_keymatch(&$vars) {
+
+  // sanatize urls
+  $vars['url'] = check_url($vars['url']);
+  $vars['description'] = filter_xss($vars['description'], array('b', 'string'));
+
+  // render template
+}
+
+/**
  * Set up Drupal pager for pagination of GSA-provided search results
  *
  * We're not paging druppal-database content in this version, so the core pager is not aware 
