diff --git a/feedback-entry.tpl.php b/feedback-entry.tpl.php
index 4059a7f..3e6679f 100644
--- a/feedback-entry.tpl.php
+++ b/feedback-entry.tpl.php
@@ -23,7 +23,7 @@
   </div>
   <div class="field">
     <div class="field-label"><?php print t('Message'); ?>:&nbsp;</div>
-    <?php print $message; ?>
+    <?php print render($message); ?>
   </div>
 
   <?php print render($content); ?>
diff --git a/feedback.admin.inc b/feedback.admin.inc
index 1e517a1..fe0bebe 100644
--- a/feedback.admin.inc
+++ b/feedback.admin.inc
@@ -19,6 +19,7 @@ function feedback_admin_view_form($form, &$form_state) {
     array('data' => t('Date'), 'field' => 'f.timestamp'),
     array('data' => t('User'), 'field' => 'u.name'),
     t('Message'),
+    t('Delete'),
   );
   // Hack to prevent pager_query() from issuing PHP notices.
   if (!isset($_GET['page'])) {
@@ -56,7 +57,8 @@ function feedback_admin_view_form($form, &$form_state) {
         $form['feedback-messages'][$status][$fid]['location'] = array('#markup' => l(truncate_utf8($entry->location, 32, FALSE, TRUE), $entry->url));
         $form['feedback-messages'][$status][$fid]['date'] = array('#markup' => format_date($entry->timestamp, 'small'));
         $form['feedback-messages'][$status][$fid]['user'] = array('#markup' => format_username($entry));
-        $form['feedback-messages'][$status][$fid]['message'] = array('#markup' => feedback_format_message($entry));
+        $form['feedback-messages'][$status][$fid]['message'] = feedback_format_message($entry);
+        $form['feedback-messages'][$status][$fid]['delete'] = array('#type' => 'link', '#title' => t('delete'), '#href' => "admin/reports/feedback/$fid/delete");
       }
     }
   }
@@ -86,12 +88,13 @@ function theme_feedback_admin_view_form($variables) {
         drupal_render($entry['date']),
         drupal_render($entry['user']),
         drupal_render($entry['message']),
+        drupal_render($entry['delete']),
       );
       // Render the checkbox.
       $rows[count($rows) - 1][0] = drupal_render($entry);
     }
     if (empty($rows)) {
-      $rows[] = array(array('data' => t('No feedback entries available.'), 'colspan' => 5));
+      $rows[] = array(array('data' => t('No feedback entries available.'), 'colspan' => 6));
     }
     // Inject the table.
     $item['messages'] = array(
@@ -227,3 +230,28 @@ function template_preprocess_feedback_entry(&$variables) {
   $variables['message'] = feedback_format_message($entry);
 }
 
+/**
+ * Menu callback; confirm deletion of a feedback entry.
+ *
+ * @ingroup forms
+ * @see feedback_delete_confirm_submit()
+ */
+function feedback_delete_confirm($form, &$form_state, $entry) {
+  $form['fid'] = array('#type' => 'value', '#value' => $entry->fid);
+  $output = confirm_form($form,
+    t('Are you sure you want to delete the feedback entry?'),
+    'admin/reports/feedback',
+    NULL,
+    t('Delete'));
+  return $output;
+}
+
+/**
+ * Process feedback_delete_confirm form submissions.
+ */
+function feedback_delete_confirm_submit($form, &$form_state) {
+  feedback_delete($form_state['values']['fid']);
+  drupal_set_message(t('The feedback entry was deleted.'));
+
+  $form_state['redirect'] = 'admin/reports/feedback';
+}
diff --git a/feedback.module b/feedback.module
index cb3bb30..b7a2a59 100644
--- a/feedback.module
+++ b/feedback.module
@@ -113,6 +113,13 @@ function feedback_menu() {
     'access arguments' => array('view feedback messages'),
     'file' => 'feedback.admin.inc',
   );
+  $items['admin/reports/feedback/%feedback/delete'] = array(
+    'title' => 'Delete feedback entry',
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('feedback_delete_confirm', 3),
+    'access arguments' => array('view feedback messages'),
+    'file' => 'feedback.admin.inc',
+  );
   $items['admin/config/user-interface/feedback'] = array(
     'title' => 'Feedback',
     'description' => 'Administer feedback settings.',
@@ -212,16 +219,15 @@ function feedback_form($form, &$form_state) {
       $feedbacks = feedback_load_multiple(array(), array('status' => FEEDBACK_OPEN, 'location' => $_GET['q']));
     }
     if ($feedbacks) {
-      $rows = '';
-      foreach ($feedbacks as $feedback) {
-        $rows .= '<div class="feedback-submitted">' . format_username($feedback) . ' ' . format_date($feedback->timestamp, 'small') . ':</div>';
-        $rows .= '<div class="feedback-body">'. feedback_format_message($feedback) .'</div>';
-      }
       $form['messages'] = array(
         '#prefix' => '<div class="feedback-messages">',
-        '#markup' => $rows,
         '#suffix' => '</div>',
       );
+      foreach ($feedbacks as $fid => $feedback) {
+        $form['messages'][$fid] = feedback_format_message($feedback);
+        $form['messages'][$fid]['#prefix'] = '<div class="feedback-submitted">' . format_username($feedback) . ' ' . format_date($feedback->timestamp, 'small') . ':</div><div class="feedback-body">';
+        $form['messages'][$fid]['#suffix'] = '</div>';
+      }
     }
   }
   $form['message'] = array(
@@ -332,9 +338,14 @@ function feedback_format_message($entry) {
   }
   $uri = entity_uri('feedback', $entry);
   if ($uri['path'] != $_GET['q']) {
-    $message .= l("view full", $uri['path']);
+    $links['view'] = array('title' => t('view'), 'href' => $uri['path']);
+  }
+  else {
+    $links['delete'] = array('title' => t('delete'), 'href' => $uri['path'] . '/delete');
   }
-  return $message;
+  $elements['message'] = array('#markup' => $message);
+  $elements['links'] = array('#theme' => 'links__feedback_message', '#links' => $links);
+  return $elements;
 }
 
 /**
