diff --git a/support.install b/support.install
index f1e7daf..14d056b 100644
--- a/support.install
+++ b/support.install
@@ -183,6 +183,12 @@ function support_schema() {
         'unsigned' => TRUE,
         'default' => 0,
       ),
+      'anonymous_email' => array(
+        'description' => t('Email address associated with a ticket submitted by an unauthenticated user.'),
+        'type' => 'varchar',
+        'length' => '64',
+        'not null' => FALSE,
+      ),
     ),
     'primary key' => array('nid'),
     'indexes' => array(
@@ -781,4 +787,17 @@ function support_update_7006() {
       drupal_set_message(t('Updated %role role %old permission to %new.', array('%role' => $role->name, '%old' => $old, '%new' => $new)));
     }
   }
-}
\ No newline at end of file
+}
+
+/**
+ * Introduce "anonymous_email" field to support anonymous tickets.
+ */
+function support_update_7007() {
+  $field =  array(
+    'type' => 'varchar',
+    'length' => '64',
+    'not null' => FALSE,
+    'description' => 'Email address associated with a ticket submitted by an unauthenticated user.',
+  );
+  db_add_field('support_ticket', 'anonymous_email', $field);
+}
diff --git a/support.module b/support.module
index ff471a8..8ac819f 100644
--- a/support.module
+++ b/support.module
@@ -844,6 +844,17 @@ function support_form($node, &$form_state) {
 
   $form = node_content_form($node, $form_state);
 
+  global $user;
+  if($user->uid === 0 || (user_access('edit any support_ticket content') && $node->uid === '0')) {
+    $form['anonymous_email'] = array(
+      '#type' => 'textfield',
+      '#title' => t('Email address'),
+      '#required' => TRUE,
+      '#default_value' => !empty($node->anonymous_email) ? $node->anonymous_email : NULL,
+      '#weight' => -1,
+    );
+  }
+
   _support_status_form_attach($form, $form_state, $node);
 
   if (isset($node->nid) && $node->nid) {
@@ -901,7 +912,7 @@ function support_node_view($node, $view_mode, $langcode) {
  * Implementation of hook_node_load().
  */
 function support_node_load($nodes, $types) {
-  $result = db_query('SELECT nid, message_id, state, priority, client, assigned FROM {support_ticket} WHERE nid IN(:nids)', array(':nids' => array_keys($nodes)));
+  $result = db_query('SELECT nid, message_id, state, priority, client, assigned, anonymous_email FROM {support_ticket} WHERE nid IN(:nids)', array(':nids' => array_keys($nodes)));
   foreach ($result as $record) {
     if ($nodes[$record->nid]->type == 'support_ticket') {
       $nodes[$record->nid]->message_id = $record->message_id;
@@ -909,6 +920,7 @@ function support_node_load($nodes, $types) {
       $nodes[$record->nid]->priority = $record->priority;
       $nodes[$record->nid]->client = $record->client;
       $nodes[$record->nid]->assigned = $record->assigned;
+      $nodes[$record->nid]->anonymous_email = $record->anonymous_email;
     }
   }
 }
@@ -999,6 +1011,7 @@ function _support_node_insert_update($node) {
       'priority' => $node->priority,
       'client' => $node->client,
       'assigned' => $node->assigned,
+      'anonymous_email' => isset($node->anonymous_email) ? $node->anonymous_email : '',
     ))
     ->execute();
 
@@ -1492,6 +1505,7 @@ function support_mail_tokens($account, $language, $nid, $comment, $suppress) {
   if (isset($elements['body'])) {
     $body = drupal_render($elements['body']);
   }
+
   // TODO Please change this theme call to use an associative array for the $variables parameter.
   $tokens = array(
     '!username' => $account->name,
@@ -1509,6 +1523,7 @@ function support_mail_tokens($account, $language, $nid, $comment, $suppress) {
     '!ticket_subject' => check_plain($node->title),
     '!ticket_body' => $suppress ? t('The text of this ticket was manually suppressed.  You must view the ticket online to see it.') . "<br />\n" : $body . _support_mail_list_attachments($node, $comment),
     '!ticket_url' => url("node/$nid", array('absolute' => TRUE, 'language' => $language, 'fragment' => "comment-$cid", 'alias' => variable_get('support_use_aliased_urls', TRUE))),
+    '!ticket_token' => url("node/$nid", array('query' => array('access_token' => $node->created), 'absolute' => TRUE, 'language' => $language, 'fragment' => "comment-$cid", 'alias' => variable_get('support_use_aliased_urls', TRUE))),
     '!update_url' => url("node/$nid", array('absolute' => TRUE, 'language' => $language, 'fragment' => "comment-form", 'alias' => variable_get('support_use_aliased_urls', TRUE))),
     '!update' => $suppress ? t('The text of this ticket update was manually suppressed.  You must view the ticket online to see the update.') . "<br />\n" : check_markup((isset($comment->language) && isset($comment->comment_body[$comment->language][0])) ? $comment->comment_body[$comment->language][0]['value'] : '') . _support_mail_list_attachments($node, $comment),
     '!state' => ((isset($previous->state) && $previous->state != $node->state) ? _support_state($previous->state) . ' -> ' : '') . _support_state($node->state),
@@ -2057,8 +2072,12 @@ function support_notification($comment = array(), $nid, $op = 'ticket_comment_ne
     $result = db_query('SELECT uid FROM {support_assigned} WHERE nid = :nid', array(':nid' => $nid));
     foreach ($result as $account) {
       $account = user_load($account->uid);
+      if (!$account->mail) {
+        $ticket = node_load($nid);
+      }
+      $address = $account->mail ? ($account->status ? $account->mail : FALSE) : $ticket->anonymous_email;
       // always send emails to admins, even if update was suppressed
-      if ($account->status && $account->mail && (!$suppress || user_access('administer support', $account))) {
+      if ($address && (!$suppress || user_access('administer support', $account))) {
         _support_mail_notify($op, $account, $comment, $nid, $suppress);
         if (variable_get('support_admin_notify', FALSE)) {
           if ((variable_get('support_admin_notify', FALSE) == 1 && user_access('administer support')) || variable_get('support_admin_notify', FALSE) == 2) {
@@ -2066,7 +2085,7 @@ function support_notification($comment = array(), $nid, $op = 'ticket_comment_ne
           }
         }
       }
-      else if (!$account->mail) {
+      else if ($address) {
         watchdog('support', 'User !name (!uid) has no email address.', array('!name' => $account->name, '!uid' => $account->uid), WATCHDOG_NOTICE);
       }
     }
@@ -2108,7 +2127,8 @@ function _support_mail_notify($op, $account, $comment = array(), $nid = NULL, $s
     else {
       $mailfrom = variable_get('support_global_mailfrom', '');
     }
-    $mail = drupal_mail('support', $op, $account->mail, $language, $params, $mailfrom);
+    $address = $account->mail ? $account->mail : $node->anonymous_email;
+    $mail = drupal_mail('support', $op, $address, $language, $params, $mailfrom);
     // TODO: notify admins as necessary
   }
   return empty($mail) ? NULL : $mail['result'];
@@ -3269,8 +3289,8 @@ function support_page_form($form, &$form_state, $client = NULL, $state = NULL) {
 
   if (!user_access('view other users tickets') && !user_access('administer support') && !user_access('edit any support_ticket content') && !user_access('delete any support_ticket content')) {
     $query->condition(db_or()
-      ->condition('n.uid', $user->uid)
-      ->condition('t.assigned', $user->uid));
+      ->condition('n.uid', $user->uid));
+//      ->condition('t.assigned', $user->uid)); //If the ticket is not assigned the anonymous user can see the ticket in the list although cannot access. 
   }
 
   if ($state == -2)
@@ -3330,7 +3350,11 @@ function support_page_form($form, &$form_state, $client = NULL, $state = NULL) {
     $form['id'][$ticket->nid] = array('#markup' => l($ticket->nid, "node/$ticket->nid", array('attributes' => array('class' => array('ticket-id')))));
     $form['title'][$ticket->nid] = array('#markup' => l(_support_truncate($ticket->title), "node/$ticket->nid", array('attributes' => array('class' => array('ticket-title')))));
     $form['updated'][$ticket->nid] = array('#markup' => format_date($ticket->last_updated, 'short', array('attributes' => array('class' => array('ticket-updated')))));
-    $form['reported'][$ticket->nid] = array('#markup' => l(_support_truncate($account->name, 24), "user/$account->uid", array('attributes' => array('class' => array('ticket-reported')))));
+    if ($account->uid === '0') {
+      $form['reported'][$ticket->nid] = array('#markup' => 'anonymous');
+    } else {
+      $form['reported'][$ticket->nid] = array('#markup' => l(_support_truncate($account->name, 24), "user/$account->uid", array('attributes' => array('class' => array('ticket-reported')))));
+    }
     // Assigned to
     if ((user_access('edit multiple tickets') && user_access('can assign tickets to any user')) || user_access('administer support')) {
       $node = node_load($ticket->nid);
