diff --git a/diff.services.yml b/diff.services.yml
index b670e5f..ab533fb 100755
--- a/diff.services.yml
+++ b/diff.services.yml
@@ -25,6 +25,8 @@ services:
   diff.entity_comparison:
     class: Drupal\diff\DiffEntityComparison
     arguments: ['@config.factory', '@diff.diff.formatter','@plugin.manager.field.field_type', '@diff.entity_parser', '@plugin.manager.diff.builder']
+    calls:
+      - [setModerationInformation, ['@?content_moderation.moderation_information']]
 
   diff.html_diff:
     class: HtmlDiffAdvanced
diff --git a/src/DiffEntityComparison.php b/src/DiffEntityComparison.php
index 65e15d0..a749700 100644
--- a/src/DiffEntityComparison.php
+++ b/src/DiffEntityComparison.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\diff;
 
+use Drupal\content_moderation\ModerationInformationInterface;
 use Drupal\Core\Config\ConfigFactory;
 use Drupal\Component\Plugin\PluginManagerInterface;
 use Drupal\Core\Entity\ContentEntityInterface;
@@ -57,6 +58,13 @@ class DiffEntityComparison {
   protected $diffBuilderManager;
 
   /**
+   * The content moderation service, if available.
+   *
+   * @var \Drupal\content_moderation\ModerationInformationInterface
+   */
+  protected $moderationInformation;
+
+  /**
    * Constructs a DiffEntityComparison object.
    *
    * @param \Drupal\Core\Config\ConfigFactory $config_factory
@@ -301,6 +309,11 @@ class DiffEntityComparison {
       }
     }
 
+    // Add workflow/content moderation state information.
+    if ($state = $this->getModerationState($revision)) {
+      $revision_summary .= " ($state)";
+    }
+
     return $revision_summary;
   }
 
@@ -351,4 +364,34 @@ class DiffEntityComparison {
     return $result;
   }
 
+  /**
+   * Gets the revision's content moderation state, if available.
+   *
+   * @param \Drupal\Core\Entity\ContentEntityInterface $entity
+   *   The entity revision.
+   *
+   * @return string|bool
+   *   Returns the label of the moderation state, if available, otherwise FALSE.
+   */
+  protected function getModerationState(ContentEntityInterface $entity) {
+    if ($this->moderationInformation && $this->moderationInformation->isModeratedEntity($entity)) {
+      if ($state = $entity->moderation_state->value) {
+        $workflow = $this->moderationInformation->getWorkflowForEntity($entity);
+        return $workflow->getTypePlugin()->getState($state)->label();
+      }
+    }
+
+    return FALSE;
+  }
+
+  /**
+   * Sets the content moderation service if available.
+   *
+   * @param \Drupal\content_moderation\ModerationInformationInterface $moderation_information
+   *   The moderation information service.
+   */
+  public function setModerationInformation(ModerationInformationInterface $moderation_information) {
+    $this->moderationInformation = $moderation_information;
+  }
+
 }
diff --git a/src/Tests/DiffRevisionContentModerationTest.php b/src/Tests/DiffRevisionContentModerationTest.php
new file mode 100644
index 0000000..7490b19
--- /dev/null
+++ b/src/Tests/DiffRevisionContentModerationTest.php
@@ -0,0 +1,73 @@
+<?php
+
+namespace Drupal\diff\Tests;
+use Drupal\workflows\Entity\Workflow;
+
+/**
+ * Tests the revision overview with content moderation enabled.
+ *
+ * @group diff
+ */
+class DiffRevisionContentModerationTest extends DiffRevisionTest {
+
+  /**
+   * {@inheritdoc}
+   */
+  public static $modules = ['content_moderation'];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+
+    // Enable moderation on articles.
+    /** @var \Drupal\workflows\WorkflowInterface $workflow */
+    $workflow = Workflow::load('editorial');
+    /** @var \Drupal\content_moderation\Plugin\WorkflowType\ContentModeration $plugin */
+    $plugin = $workflow->getTypePlugin();
+    $plugin->addEntityTypeAndBundle('node', 'article');
+    $workflow->save();
+
+    // Add necessary admin permissions for moderated content.
+    $this->adminPermissions = array_merge([
+      'use editorial transition create_new_draft',
+      'use editorial transition publish',
+      'use editorial transition archive',
+      'use editorial transition archived_draft',
+      'use editorial transition archived_published',
+      'view latest version',
+      'view any unpublished content',
+    ], $this->adminPermissions);
+  }
+
+  /**
+   * {@inheritdoc}
+   *
+   * Override form submission to work with content moderation.
+   */
+  protected function drupalPostNodeForm($path, array $edit, $submit) {
+    // New revisions are automatically enabled, so remove the manual value.
+    unset($edit['revision']);
+    parent::drupalPostNodeForm($path, $edit, $submit);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function testAll() {
+    // Ensure revision tab still works as expected.
+    parent::testAll();
+
+    // Specifically test for content moderation functionality.
+    $this->doTestContentModeration();
+  }
+
+  /**
+   * Test content moderation integration.
+   */
+  protected function doTestContentModeration() {
+    
+  }
+
+}
diff --git a/src/Tests/DiffRevisionTest.php b/src/Tests/DiffRevisionTest.php
index aebc08f..e594d09 100644
--- a/src/Tests/DiffRevisionTest.php
+++ b/src/Tests/DiffRevisionTest.php
@@ -53,9 +53,12 @@ class DiffRevisionTest extends DiffTestBase {
       <p>first_unique_text</p>
       <p>second_unique_text</p>',
     );
+    // Set to published if content moderation is enabled.
+    if (\Drupal::moduleHandler()->moduleExists('content_moderation')) {
+      $edit['moderation_state[0][state]'] = 'published';
+    }
     $this->drupalPostNodeForm('node/add/article', $edit, t('Save and publish'));
     $node = $this->drupalGetNodeByTitle($title);
-    $created = $node->getCreatedTime();
     $this->drupalGet('node/' . $node->id());
 
     // Make sure the revision tab doesn't exist.
@@ -70,6 +73,10 @@ class DiffRevisionTest extends DiffTestBase {
       'revision' => TRUE,
       'revision_log[0][value]' => 'Revision 2 comment',
     );
+    // Set to published if content moderation is enabled.
+    if (\Drupal::moduleHandler()->moduleExists('content_moderation')) {
+      $edit['moderation_state[0][state]'] = 'published';
+    }
     $this->drupalPostNodeForm('node/' . $node->id() . '/edit', $edit, t('Save and keep published'));
     $this->drupalGet('node/' . $node->id());
 
@@ -214,19 +221,27 @@ class DiffRevisionTest extends DiffTestBase {
     // Assert that there are no radio buttons for revision selection.
     $this->assertNoFieldByXPath('//input[@type="radio"]');
     // Assert that there is no submit button.
-    $this->assertNoFieldByXPath('//input[@type="submit"]');
+    $this->assertNoFieldByXPath('//input[@type="submit" and text()="Compare selected revisions"]');
 
     // Create two new revisions of node.
     $edit = [
       'title[0][value]' => 'new test title',
       'body[0][value]' => '<p>new body</p>',
     ];
+    // Set to published if content moderation is enabled.
+    if (\Drupal::moduleHandler()->moduleExists('content_moderation')) {
+      $edit['moderation_state[0][state]'] = 'published';
+    }
     $this->drupalPostNodeForm('node/' . $node->id() . '/edit', $edit, 'Save and keep published');
 
     $edit = [
       'title[0][value]' => 'newer test title',
       'body[0][value]' => '<p>newer body</p>',
     ];
+    // Set to published if content moderation is enabled.
+    if (\Drupal::moduleHandler()->moduleExists('content_moderation')) {
+      $edit['moderation_state[0][state]'] = 'published';
+    }
     $this->drupalPostNodeForm('node/' . $node->id() . '/edit', $edit, 'Save and keep published');
 
     $this->clickLink(t('Revisions'));
@@ -253,6 +268,10 @@ class DiffRevisionTest extends DiffTestBase {
     $node = $this->getNodeByTitle('newer test title');
     $node->setNewRevision(TRUE);
     $node->isDefaultRevision(FALSE);
+    if ($node->hasField('moderation_state')) {
+      // If testing with content_moderation enabled, set as draft.
+      $node->moderation_state = 'draft';
+    }
     $node->save();
     $this->drupalGet('node/' . $node->id() . '/revisions');
 
@@ -265,10 +284,18 @@ class DiffRevisionTest extends DiffTestBase {
     $this->clickLink('Set as current revision');
     $this->drupalPostForm(NULL, [], t('Revert'));
 
-    // Check the last revision is set as current.
-    $text = $this->xpath('//tbody/tr[1]/td[4]/em');
-    $this->assertEqual($text[0], 'Current revision');
-    $this->assertNoLink(t('Set as current revision'));
+    if (\Drupal::moduleHandler()->moduleExists('content_moderation')) {
+      // With content moderation, the new revision will not be current.
+      // @see https://www.drupal.org/node/2899719
+      $text = $this->xpath('//tbody/tr[1]/td[4]/div/div/ul/li/a');
+      $this->assertEqual($text[0], 'Set as current revision');
+    }
+    else {
+      // Check the last revision is set as current.
+      $text = $this->xpath('//tbody/tr[1]/td[4]/em');
+      $this->assertEqual($text[0], 'Current revision');
+      $this->assertNoLink(t('Set as current revision'));
+    }
   }
 
   /**
@@ -426,6 +453,9 @@ class DiffRevisionTest extends DiffTestBase {
       'title[0][value]' => $title,
       'body[0][value]' => '<p>First article</p>',
     ];
+    if (\Drupal::moduleHandler()->moduleExists('content_moderation')) {
+      $edit['moderation_state[0][state]'] = 'published';
+    }
     $this->drupalPostNodeForm('node/add/article', $edit, t('Save and publish'));
     $node_one = $this->drupalGetNodeByTitle($title);
 
@@ -435,6 +465,9 @@ class DiffRevisionTest extends DiffTestBase {
       'title[0][value]' => $title,
       'body[0][value]' => '<p>Second article</p>',
     ];
+    if (\Drupal::moduleHandler()->moduleExists('content_moderation')) {
+      $edit['moderation_state[0][state]'] = 'published';
+    }
     $this->drupalPostNodeForm('node/add/article', $edit, t('Save and publish'));
     $node_two = $this->drupalGetNodeByTitle($title);
 
@@ -444,6 +477,9 @@ class DiffRevisionTest extends DiffTestBase {
       'field_content[0][target_id]' => $node_two->getTitle(),
       'revision' => TRUE,
     ];
+    if (\Drupal::moduleHandler()->moduleExists('content_moderation')) {
+      $edit['moderation_state[0][state]'] = 'published';
+    }
     $this->drupalPostNodeForm('node/' . $node_one->id() . '/edit', $edit, t('Save and keep published'));
 
     // Delete referenced node.
