diff --git modules/comment/comment.module modules/comment/comment.module
index 950d4a6..a225e4c 100644
--- modules/comment/comment.module
+++ modules/comment/comment.module
@@ -733,6 +733,11 @@ function comment_node_page_additions($node) {
  * to consider the trailing "/" so we use a substring only.
  */
 function comment_get_thread($node, $mode, $comments_per_page) {
+  $cids = &drupal_static(__FUNCTION__);
+  if (isset($cids)) {
+    return $cids;
+  }
+
   $query = db_select('comment', 'c')->extend('PagerDefault');
   $query->addField('c', 'cid');
   $query
@@ -2129,8 +2134,9 @@ function template_preprocess_comment(&$variables) {
   $variables['new']       = !empty($comment->new) ? t('new') : '';
   $variables['picture']   = theme_get_setting('toggle_comment_user_picture') ? theme('user_picture', array('account' => $comment)) : '';
   $variables['signature'] = $comment->signature;
-  $variables['title']     = l($comment->subject, 'comment/' . $comment->cid, array('fragment' => "comment-$comment->cid"));
-  $variables['permalink'] = l('#', 'comment/' . $comment->cid, array('fragment' => "comment-$comment->cid"));
+  $variables['comment_url'] = url('comment/' . $comment->cid, array('fragment' => 'comment-' . $comment->cid));
+  $variables['title']     = '<a href="' . $variables['comment_url'] . '">' . check_plain($comment->subject) . '</a>';
+  $variables['permalink']     = '<a href="' . $variables['comment_url'] . '">#</a>';
 
   // Preprocess fields.
   field_attach_preprocess('comment', $comment, $variables['elements'], $variables);
diff --git modules/rdf/rdf.module modules/rdf/rdf.module
index 1126931..1cc3662 100644
--- modules/rdf/rdf.module
+++ modules/rdf/rdf.module
@@ -536,17 +536,46 @@ function rdf_preprocess_username(&$variables) {
  */
 function rdf_preprocess_comment(&$variables) {
   $comment = $variables['comment'];
+
+  // Some variables are cached since they are costly to generate.
+  static $stored_comment_data;
+  if (empty($stored_comment_data)) {
+    // Attempt to load data for all the comments to be displayed from cache.
+    $node = node_load($comment->nid);
+    $mode = variable_get('comment_default_mode_' . $node->type, COMMENT_MODE_THREADED);
+    $comments_per_page = variable_get('comment_default_per_page_' . $node->type, 50);
+    if ($comment_ids = comment_get_thread($node, $mode, $comments_per_page)) {
+      foreach ($comment_ids as $k => $comment_id) {
+        $cache_ids[$k] = 'comment:' . $comment_id;
+      }
+      $stored_comment_data = cache_get_multiple($cache_ids, 'cache');
+    }
+  }
+
+  // Attempt to use the cache data for the comment currently being preprocessed.
+  $cache_id = 'comment:' . $comment->cid;
+  if (!empty($stored_comment_data[$cache_id])) {
+    $comment_data = $stored_comment_data[$cache_id]->data;
+  }
+  else {
+    // Generate values if they haven't been cached yet.
+    $comment_data['date'] = rdf_rdfa_attributes($comment->rdf_mapping['created'], $comment->created);
+    $comment_data['nid_uri'] = url('node/' . $comment->nid);
+    $comment_data['pid_uri'] = url('comment/' . $comment->pid, array('fragment' => 'comment-' . $comment->pid));
+    cache_set($cache_id, $comment_data, 'cache');
+  }
+
   if (!empty($comment->rdf_mapping['rdftype'])) {
     // Adds RDFa markup to the comment container. The about attribute specifies
     // the URI of the resource described within the HTML element, while the
     // typeof attribute indicates its RDF type (e.g. sioc:Post, etc.).
-    $variables['attributes_array']['about'] = url('comment/' . $comment->cid, array('fragment' => 'comment-' . $comment->cid));
+    $variables['attributes_array']['about'] = $variables['comment_url'];
     $variables['attributes_array']['typeof'] = $comment->rdf_mapping['rdftype'];
   }
 
   // Adds RDFa markup for the date of the comment.
   if (!empty($comment->rdf_mapping['created'])) {
-    $date_attributes_array = rdf_rdfa_attributes($comment->rdf_mapping['created'], $comment->created);
+    $date_attributes_array = $comment_data['date'];
     $variables['rdf_template_variable_attributes_array']['created'] = $date_attributes_array;
   }
   // Adds RDFa markup for the relation between the comment and its author.
@@ -574,13 +603,13 @@ function rdf_preprocess_comment(&$variables) {
   if (!empty($comment->rdf_mapping['pid'])) {
     // Relation to parent node.
     $parent_node_attributes['rel'] = $comment->rdf_mapping['pid']['predicates'];
-    $parent_node_attributes['resource'] = url('node/' . $comment->nid);
+    $parent_node_attributes['resource'] = $comment_data['nid_uri'];
     $variables['rdf_metadata_attributes_array'][] = $parent_node_attributes;
 
     // Relation to parent comment if it exists.
     if ($comment->pid != 0) {
       $parent_comment_attributes['rel'] = $comment->rdf_mapping['pid']['predicates'];
-      $parent_comment_attributes['resource'] = url('comment/' . $comment->pid, array('fragment' => 'comment-' . $comment->pid));
+      $parent_comment_attributes['resource'] = $comment_data['pid_uri'];
       $variables['rdf_metadata_attributes_array'][] = $parent_comment_attributes;
     }
   }
