diff --git a/modules/field/field.multilingual.inc b/modules/field/field.multilingual.inc
index 16ace959b7c1ee00f0682d26b6100f086d1f8b1f..e0b134849915b11636b96c297819e65c05cf383f 100644
--- a/modules/field/field.multilingual.inc
+++ b/modules/field/field.multilingual.inc
@@ -31,7 +31,11 @@ function field_multilingual_settings_changed() {
  *   An array of valid language codes.
  */
 function field_available_languages($entity_type, $field) {
-  $field_languages = &drupal_static(__FUNCTION__, array());
+  static $drupal_static_fast;
+  if (!isset($drupal_static_fast)) {
+    $drupal_static_fast['field_languages'] = &drupal_static(__FUNCTION__);
+  }
+  $field_languages = &$drupal_static_fast['field_languages'];
   $field_name = $field['field_name'];
 
   if (!isset($field_languages[$entity_type][$field_name])) {
diff --git a/modules/rdf/rdf.test b/modules/rdf/rdf.test
index d77f8968f9fdf3f4332d740d17de77d81bf8d465..137bb7c784899eaf860783a558e46ca44dda3209 100644
--- a/modules/rdf/rdf.test
+++ b/modules/rdf/rdf.test
@@ -391,7 +391,7 @@ class RdfMappingDefinitionTestCase extends TaxonomyWebTestCase {
   }
 }
 
-class RdfCommentAttributesTestCase extends DrupalWebTestCase {
+class RdfCommentAttributesTestCase extends CommentHelperCase {
 
   public static function getInfo() {
     return array(
@@ -402,28 +402,155 @@ class RdfCommentAttributesTestCase extends DrupalWebTestCase {
   }
 
   public function setUp() {
-    parent::setUp('rdf', 'rdf_test', 'comment');
-    // Enable anonymous posting of content.
+    parent::setUp('comment', 'rdf', 'rdf_test');
+
+    $this->admin_user = $this->drupalCreateUser(array('administer content types', 'administer comments', 'administer permissions', 'administer blocks'));
+    $this->web_user = $this->drupalCreateUser(array('access comments', 'post comments', 'create article content', 'access user profiles'));
+
+    // Enables anonymous user comments.
     user_role_change_permissions(DRUPAL_ANONYMOUS_RID, array(
-      'create article content' => TRUE,
       'access comments' => TRUE,
       'post comments' => TRUE,
       'post comments without approval' => TRUE,
     ));
+    // Allows anonymous to leave their contact information.
+    $this->setCommentAnonymous(COMMENT_ANONYMOUS_MAY_CONTACT);
+    $this->setCommentPreview(DRUPAL_OPTIONAL);
+    $this->setCommentForm(TRUE);
+    $this->setCommentSubject(TRUE);
+    $this->setCommentSettings('comment_default_mode', COMMENT_MODE_THREADED, t('Comment paging changed.'));
+
+    // Creates the nodes on which the test comments will be posted.
+    $this->drupalLogin($this->web_user);
+    $this->node1 = $this->drupalCreateNode(array('type' => 'article', 'promote' => 1));
+    $this->node2 = $this->drupalCreateNode(array('type' => 'article', 'promote' => 1));
+    $this->drupalLogout();
   }
 
-  public function testAttributesInTeaser() {
-    $node = $this->drupalCreateNode(array('type' => 'article', 'uid' => 1, 'promote' => 1));
-    $comment = array(
-      'subject' => $this->randomName(),
-      'comment_body[' . LANGUAGE_NONE . '][0][value]' => $this->randomName(),
-    );
-    $this->drupalPost('comment/reply/' . $node->nid, $comment, t('Save'));
-    $this->drupalGet('');
-    $comment_count_link = $this->xpath('//div[@about=:url]//a[contains(@property, "sioc:num_replies") and @rel=""]', array(':url' => url("node/$node->nid")));
+  /**
+   * Tests the presence of the RDFa markup for the number of comments.
+   */
+  public function testNumberOfCommentsRdfaMarkup() {
+    // Posts 2 comments as a registered user.
+    $this->drupalLogin($this->web_user);
+    $this->postComment($this->node1, $this->randomName(), $this->randomName());
+    $this->postComment($this->node1, $this->randomName(), $this->randomName());
+
+    // Tests number of comments in teaser view.
+    $this->drupalGet('node');
+    $comment_count_teaser = $this->xpath('//div[contains(@typeof, "sioc:Item")]//li[contains(@class, "comment-comments")]/a[contains(@property, "sioc:num_replies") and contains(@content, "2") and @datatype="xsd:integer"]');
+    $this->assertTrue(!empty($comment_count_teaser), t('RDFa markup for the number of comments found on teaser view.'));
+    $comment_count_link = $this->xpath('//div[@about=:url]//a[contains(@property, "sioc:num_replies") and @rel=""]', array(':url' => url("node/{$this->node1->nid}")));
     $this->assertTrue(!empty($comment_count_link), t('Empty rel attribute found in comment count link.'));
+
+    // Tests number of comments in full node view.
+    $this->drupalGet('node/' . $this->node1->nid);
+    $node_url = url('node/' . $this->node1->nid);
+    $comment_count_teaser = $this->xpath('/html/head/meta[@about=:node-url and @property="sioc:num_replies" and @content="2" and @datatype="xsd:integer"]', array(':node-url' => $node_url));
+    $this->assertTrue(!empty($comment_count_teaser), t('RDFa markup for the number of comments found on full node view.'));
   }
 
+  /**
+   * Tests the presence of the RDFa markup for the title, date and author and
+   * homepage on registered users and anonymous comments.
+   */
+  public function testCommentRdfaMarkup() {
+
+    // Posts comment #1 as a registered user.
+    $this->drupalLogin($this->web_user);
+    $comment1_subject = $this->randomName();
+    $comment1_body = $this->randomName();
+    $comment1 = $this->postComment($this->node1, $comment1_body, $comment1_subject);
+
+    // Tests comment #1 with access to the user profile.
+    $this->drupalGet('node/' . $this->node1->nid);
+    $this->_testBasicCommentRdfaMarkup($comment1);
+
+    // Tests comment #1 with no access to the user profile (as anonymous user).
+    $this->drupalLogout();
+    $this->drupalGet('node/' . $this->node1->nid);
+    $this->_testBasicCommentRdfaMarkup($comment1);
+
+    // Posts comment #2 as anonymous user.
+    $comment2_subject = $this->randomName();
+    $comment2_body = $this->randomName();
+    $anonymous_user = array();
+    $anonymous_user['name'] = $this->randomName();
+    $anonymous_user['mail'] = 'tester@simpletest.org';
+    $anonymous_user['homepage'] = 'http://example.org/';
+    $comment2 = $this->postComment($this->node2, $comment2_body, $comment2_subject, $anonymous_user);
+    $this->drupalGet('node/' . $this->node2->nid);
+
+    // Tests comment #2 as anonymous user.
+    $this->_testBasicCommentRdfaMarkup($comment2, $anonymous_user);
+    // Tests the RDFa markup for the homepage (specific to anonymous comments).
+    $comment_homepage = $this->xpath('//div[contains(@class, "comment") and contains(@typeof, "sioct:Comment")]//span[@rel="sioc:has_creator"]/a[contains(@class, "username") and @typeof="sioc:UserAccount" and @property="foaf:name" and @href="http://example.org/" and contains(@rel, "foaf:page")]');
+    $this->assertTrue(!empty($comment_homepage), t('RDFa markup for the homepage of anonymous user found.'));
+    // There should be no about attribute on anonymous comments.
+    $comment_homepage = $this->xpath('//div[contains(@class, "comment") and contains(@typeof, "sioct:Comment")]//span[@rel="sioc:has_creator"]/a[@about]');
+    $this->assertTrue(empty($comment_homepage), t('No about attribute is present on anonymous user comment.'));
+
+    // Tests comment #2 as logged in user.
+    $this->drupalLogin($this->web_user);
+    $this->drupalGet('node/' . $this->node2->nid);
+    $this->_testBasicCommentRdfaMarkup($comment2, $anonymous_user);
+    // Tests the RDFa markup for the homepage (specific to anonymous comments).
+    $comment_homepage = $this->xpath('//div[contains(@class, "comment") and contains(@typeof, "sioct:Comment")]//span[@rel="sioc:has_creator"]/a[contains(@class, "username") and @typeof="sioc:UserAccount" and @property="foaf:name" and @href="http://example.org/" and contains(@rel, "foaf:page")]');
+    $this->assertTrue(!empty($comment_homepage), t("RDFa markup for the homepage of anonymous user found."));
+    // There should be no about attribute on anonymous comments.
+    $comment_homepage = $this->xpath('//div[contains(@class, "comment") and contains(@typeof, "sioct:Comment")]//span[@rel="sioc:has_creator"]/a[@about]');
+    $this->assertTrue(empty($comment_homepage), t("No about attribute is present on anonymous user comment."));
+  }
+
+  /**
+   * Test RDF comment replies.
+   */
+  public function testCommentReplyOfRdfaMarkup() {
+    // Posts comment #1 as a registered user.
+    $this->drupalLogin($this->web_user);
+    $comments[] = $this->postComment($this->node1, $this->randomName(), $this->randomName());
+
+    // Tests the reply_of relationship of a first level comment.
+    $result = $this->xpath("id('comments')//div[@class='comment' and position()=0]//span[@rel='sioc:reply_of' and @resource=:node]", array(':node' => url("node/{$this->node1->nid}")));
+    $this->assertEqual(1, count($result), t('RDFa markup referring to the node is present.'));
+    $result = $this->xpath("id('comments')//div[@class='comment' and position()=0]//span[@rel='sioc:reply_of' and @resource=:comment]", array(':comment' => url('comment/1#comment-1')));
+    $this->assertFalse($result, t('No RDFa markup referring to the comment itself is present.'));
+
+    // Posts a reply to the first comment.
+    $this->drupalGet('comment/reply/' . $this->node1->nid . '/' . $comments[0]->id);
+    $comments[] = $this->postComment(NULL, $this->randomName(), $this->randomName(), TRUE);
+
+    // Tests the reply_of relationship of a second level comment.
+    $result = $this->xpath("id('comments')//div[@class='comment' and position()=1]//span[@rel='sioc:reply_of' and @resource=:node]", array(':node' => url("node/{$this->node1->nid}")));
+    $this->assertEqual(1, count($result), t('RDFa markup referring to the node is present.'));
+    $result = $this->xpath("id('comments')//div[@class='comment' and position()=1]//span[@rel='sioc:reply_of' and @resource=:comment]", array(':comment' => url('comment/1#comment-1')));
+    $this->assertEqual(1, count($result), t('RDFa markup referring to the parent comment is present.'));
+  }
+
+  /**
+   * Helper function for testCommentRdfaMarkup().
+   *
+   * Tests the current page for basic comment RDFa markup.
+   *
+   * @param $comment
+   *   Comment object.
+   * @param $account
+   *   An array containing information about an anonymous user.
+   */
+  function _testBasicCommentRdfaMarkup($comment, $account = array()) {
+    $comment_container = $this->xpath('//div[contains(@class, "comment") and contains(@typeof, "sioct:Comment")]');
+    $this->assertTrue(!empty($comment_container), t("Comment RDF type for comment found."));
+    $comment_title = $this->xpath('//div[contains(@class, "comment") and contains(@typeof, "sioct:Comment")]//h3[@property="dc:title"]');
+    $this->assertEqual((string)$comment_title[0]->a, $comment->subject, t("RDFa markup for the comment title found."));
+    $comment_date = $this->xpath('//div[contains(@class, "comment") and contains(@typeof, "sioct:Comment")]//*[contains(@property, "dc:date") and contains(@property, "dc:created")]');
+    $this->assertTrue(!empty($comment_date), t("RDFa markup for the date of the comment found."));
+    // The author tag can be either a or span
+    $comment_author = $this->xpath('//div[contains(@class, "comment") and contains(@typeof, "sioct:Comment")]//span[@rel="sioc:has_creator"]/*[contains(@class, "username") and @typeof="sioc:UserAccount" and @property="foaf:name"]');
+    $name = empty($account["name"]) ? $this->web_user->name : $account["name"] . " (not verified)";
+    $this->assertEqual((string)$comment_author[0], $name, t("RDFa markup for the comment author found."));
+    $comment_body = $this->xpath('//div[contains(@class, "comment") and contains(@typeof, "sioct:Comment")]//div[@class="content"]//div[contains(@class, "comment-body")]//div[@property="content:encoded"]');
+    $this->assertEqual((string)$comment_body[0]->p, $comment->comment, t("RDFa markup for the comment body found."));
+  }
 }
 
 class RdfTrackerAttributesTestCase extends DrupalWebTestCase {