Index: modules/contact/contact.admin.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/contact/contact.admin.inc,v
retrieving revision 1.5
diff -u -p -r1.5 contact.admin.inc
--- modules/contact/contact.admin.inc	2 Jul 2008 20:05:11 -0000	1.5
+++ modules/contact/contact.admin.inc	21 Nov 2008 16:31:49 -0000
@@ -13,9 +13,9 @@ function contact_admin_categories() {
   $result = db_query('SELECT cid, category, recipients, selected FROM {contact} ORDER BY weight, category');
   $rows = array();
   while ($category = db_fetch_object($result)) {
-    $rows[] = array($category->category, $category->recipients, ($category->selected ? t('Yes') : t('No')), l(t('edit'), 'admin/build/contact/edit/' . $category->cid), l(t('delete'), 'admin/build/contact/delete/' . $category->cid));
+    $rows[] = array($category->category, $category->recipients, ($category->selected ? t('Yes') : t('No')), l(t('contact form'), 'contact/'. $category->cid), l(t('edit'), 'admin/build/contact/edit/' . $category->cid), l(t('delete'), 'admin/build/contact/delete/' . $category->cid));
   }
-  $header = array(t('Category'), t('Recipients'), t('Selected'), array('data' => t('Operations'), 'colspan' => 2));
+  $header = array(t('Category'), t('Recipients'), t('Selected'), t('Link'), array('data' => t('Operations'), 'colspan' => 2));
 
   return theme('table', $header, $rows);
 }
Index: modules/contact/contact.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/contact/contact.module,v
retrieving revision 1.111
diff -u -p -r1.111 contact.module
--- modules/contact/contact.module	9 Oct 2008 15:15:51 -0000	1.111
+++ modules/contact/contact.module	21 Nov 2008 16:31:50 -0000
@@ -99,6 +99,14 @@ function contact_menu() {
     'access arguments' => array('access site-wide contact form'),
     'type' => MENU_SUGGESTED_ITEM,
   );
+  $items['contact/%contact'] = array(
+    'title callback' => 'contact_page_title',
+    'title arguments' => array(1),
+    'page callback' => 'contact_site_page',
+    'page arguments' => array(1),
+    'access arguments' => array('access site-wide contact form'),
+    'type' => MENU_SUGGESTED_ITEM,
+  );
   $items['user/%user/contact'] = array(
     'title' => 'Contact',
     'page callback' => 'contact_user_page',
@@ -199,3 +207,10 @@ function contact_mail($key, &$message, $
       break;
   }
 }
+
+/**
+ * Set the page title for the contact pages.
+ */
+function contact_page_title($contact) {
+  return t('Contact @category', array('@category' => $contact['category']));
+}
\ No newline at end of file
Index: modules/contact/contact.pages.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/contact/contact.pages.inc,v
retrieving revision 1.15
diff -u -p -r1.15 contact.pages.inc
--- modules/contact/contact.pages.inc	13 Oct 2008 00:33:02 -0000	1.15
+++ modules/contact/contact.pages.inc	21 Nov 2008 16:31:50 -0000
@@ -9,30 +9,50 @@
 
 /**
  * Site-wide contact page.
+ *
+ * @param $contact
+ *   A keyed array containing the current data of the contact.
+ *
+ * @return
+ *   The generated page.
  */
-function contact_site_page() {
+function contact_site_page($contact = NULL) {
   global $user;
 
   if (!flood_is_allowed('contact', variable_get('contact_hourly_threshold', 3)) && !user_access('administer site-wide contact form')) {
     $output = t("You cannot send more than %number messages per hour. Please try again later.", array('%number' => variable_get('contact_hourly_threshold', 3)));
   }
   else {
-    $output = drupal_get_form('contact_mail_page');
+    $output = drupal_get_form('contact_mail_page', $contact);
   }
 
   return $output;
 }
 
-function contact_mail_page() {
+/**
+ * Contact form.
+ *
+ * @param  $form_state
+ *   A keyed array containing the current state of the form.
+ * @param $contact
+ *   A keyed array containing the current data of the contact.
+ * @return
+ *   The contact form.
+ */
+function contact_mail_page($form_state, $contact = NULL) {
   global $user;
 
   $form = $categories = array();
-
-  $result = db_query('SELECT cid, category, selected FROM {contact} ORDER BY weight, category');
-  while ($category = db_fetch_object($result)) {
-    $categories[$category->cid] = $category->category;
-    if ($category->selected) {
-      $default_category = $category->cid;
+  if (is_array($contact)) {
+    $categories[] = $contact;
+  }
+  else {
+    $result = db_query('SELECT cid, category, selected FROM {contact} ORDER BY weight, category');
+    while ($category = db_fetch_object($result)) {
+      $categories[$category->cid] = $category->category;
+      if ($category->selected) {
+        $default_category = $category->cid;
+      }
     }
   }
 
