diff --git a/src/TaxonomyPermissionsControlHandler.php b/src/TaxonomyPermissionsControlHandler.php
index 39ddf88..a89e377 100644
--- a/src/TaxonomyPermissionsControlHandler.php
+++ b/src/TaxonomyPermissionsControlHandler.php
@@ -3,70 +3,40 @@
 namespace Drupal\taxonomy_permissions;
 
 use Drupal\Core\Access\AccessResult;
-use Drupal\Core\Entity\EntityAccessControlHandler;
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Session\AccountInterface;
+use Drupal\taxonomy\TermAccessControlHandler;
 
 /**
  * Defines the access control handler for the taxonomy term entity type.
  *
  * @see \Drupal\taxonomy\Entity\Term
  */
-class TaxonomyPermissionsControlHandler extends EntityAccessControlHandler {
+class TaxonomyPermissionsControlHandler extends TermAccessControlHandler {
 
   /**
    * {@inheritdoc}
    */
   protected function checkAccess(EntityInterface $entity, $operation, AccountInterface $account) {
+    // Same as core.
+    if ($account->hasPermission('administer taxonomy')) {
+      return AccessResult::allowed()->cachePerPermissions();
+    }
+    // Only check for the new view permission.
     switch ($operation) {
-
       case 'view':
-        return AccessResult::allowedIfHasPermissions(
-            $account,
-            [
-              "view terms in {$entity->bundle()}",
-              'administer taxonomy',
-            ],
-            'OR');
-
-      case 'create':
-        return AccessResult::allowedIfHasPermissions(
-            $account,
-            [
-              "create terms in {$entity->bundle()}",
-              'administer taxonomy',
-            ],
-            'OR');
-
-      case 'update':
-        return AccessResult::allowedIfHasPermissions(
-            $account,
-            [
-              "edit terms in {$entity->bundle()}",
-              'administer taxonomy',
-            ],
-            'OR');
-
-      case 'delete':
-        return AccessResult::allowedIfHasPermissions(
-            $account,
-            [
-              "delete terms in {$entity->bundle()}",
-              'administer taxonomy',
-            ],
-            'OR');
+        $access_result = AccessResult::allowedIf($account->hasPermission("view terms in {$entity->bundle()}") && $entity->isPublished())
+          ->cachePerPermissions()
+          ->addCacheableDependency($entity);
+        if (!$access_result->isAllowed()) {
+          $access_result->setReason("The 'view terms in {$entity->bundle()}' permission is required and the taxonomy term must be published.");
+        }
+        return $access_result;
 
       default:
-        // No opinion.
-        return AccessResult::neutral();
+        // Otherwise let core's taxonomy control handler kick in.
+        return parent::checkAccess($entity, $operation, $account);
     }
   }
 
-  /**
-   * {@inheritdoc}
-   */
-  protected function checkCreateAccess(AccountInterface $account, array $context, $entity_bundle = NULL) {
-    return AccessResult::allowedIfHasPermission($account, 'administer taxonomy');
-  }
-
 }
