diff --git a/moderation_sidebar.module b/moderation_sidebar.module
index ad3687b..19ef861 100644
--- a/moderation_sidebar.module
+++ b/moderation_sidebar.module
@@ -5,6 +5,7 @@
  * Contains hook implementations for moderation_sidebar.
  */
 
+use Drupal\Core\Cache\CacheableMetadata;
 use Drupal\Core\Entity\ContentEntityInterface;
 use Drupal\Core\Entity\EntityPublishedInterface;
 use Drupal\Core\Url;
@@ -15,17 +16,14 @@ use Drupal\Core\Url;
 function moderation_sidebar_toolbar() {
   $items = [];
 
-  $items['moderation_sidebar'] = [
-    // @todo Can we set cache contexts based on the entity revision?
-    '#cache' => [
-      'max-age' => 0,
-      'contexts' => [
-        'user.permissions',
-      ],
-    ],
-  ];
+  // @todo Can we set cache contexts based on the entity revision?
+  $items['moderation_sidebar'] = [];
+  $cacheability = (new CacheableMetadata())
+    ->addCacheContexts(['route'])
+    ->addCacheContexts(['user.permissions']);
 
   if (!\Drupal::currentUser()->hasPermission('use moderation sidebar')) {
+    $cacheability->applyTo($items['moderation_sidebar']);
     return $items;
   }
 
@@ -37,9 +35,12 @@ function moderation_sidebar_toolbar() {
   $entity = \Drupal::routeMatch()->getParameter('node');
 
   if (!($entity instanceof ContentEntityInterface) || $admin_context->isAdminRoute()) {
+    $cacheability->applyTo($items['moderation_sidebar']);
     return $items;
   }
 
+  $cacheability->addCacheableDependency($entity);
+
   /** @var \Drupal\content_moderation\ModerationInformation $moderation_information */
   $moderation_information = \Drupal::service('content_moderation.moderation_information');
 
@@ -114,6 +115,7 @@ function moderation_sidebar_toolbar() {
     ],
   ];
 
+  $cacheability->applyTo($items['moderation_sidebar']);
   return $items;
 }
 
