diff --git a/flag.module b/flag.module
index fe0e96f..64d81be 100644
--- a/flag.module
+++ b/flag.module
@@ -126,9 +126,11 @@ function flag_entity_extra_field_info() {
       continue;
     }
 
-    foreach ($flag->types as $bundle_name) {
+    $flaggable_bundles = $flag->getTypes();
+
+    foreach ($flaggable_bundles as $bundle_name) {
       if ($flag_type_plugin->showOnForm()) {
-        $extra[$flag->entity_type][$bundle_name]['form']['flag'] = [
+        $extra[$flag->getFlaggableEntityTypeId()][$bundle_name]['form']['flag'] = [
           'label' => t('Flags'),
           'description' => t('Checkboxes for toggling flags'),
           'weight' => 10,
@@ -136,7 +138,7 @@ function flag_entity_extra_field_info() {
       }
 
       if ($flag_type_plugin->showAsField()) {
-        $extra[$flag->entity_type][$bundle_name]['display']['flag_' . $flag->id()] = [
+        $extra[$flag->getFlaggableEntityTypeId()][$bundle_name]['display']['flag_' . $flag->id()] = [
           // It would be nicer to use % as the placeholder, but the label is
           // run through check_plain() by field_ui_display_overview_form()
           // (arguably incorrectly; see http://drupal.org/node/1991292).
@@ -298,7 +300,7 @@ function flag_flag_access($flag, $entity_id, $action, $account) {
 
   // Restrict access by authorship. It's important that TRUE is never returned
   // here, otherwise we'd grant permission even if other modules denied access.
-  if ($flag->entity_type == 'node') {
+  if ($flag->getFlaggableEntityTypeId() == 'node') {
     // For non-existent nodes (such as on the node add form), assume that the
     // current user is creating the content.
     if (empty($entity_id) || !($node = $flag->fetch_entity($entity_id))) {
@@ -314,7 +316,7 @@ function flag_flag_access($flag, $entity_id, $action, $account) {
   }
 
   // Restrict access by comment authorship.
-  if ($flag->entity_type == 'comment') {
+  if ($flag->getFlaggableEntityTypeId() == 'comment') {
     // For non-existent comments (such as on the comment add form), assume that
     // the current user is creating the content.
     if (empty($entity_id) || !($comment = $flag->fetch_entity($entity_id))) {
@@ -348,7 +350,7 @@ function flag_flag_access_multiple($flag, $entity_ids, $account) {
     return $access;
   }
 
-  if ($flag->entity_type == 'node') {
+  if ($flag->getFlaggableEntityTypeId() == 'node') {
     // Restrict access by authorship. This is similar to flag_flag_access()
     // above, but returns an array of 'nid' => $access values. Similarly, we
     // should never return TRUE in any of these access values, only FALSE if we
@@ -356,7 +358,7 @@ function flag_flag_access_multiple($flag, $entity_ids, $account) {
     $result = db_select('node', 'n')
       ->fields('n', array('nid', 'uid'))
       ->condition('nid', array_keys($entity_ids), 'IN')
-      ->condition('type', $flag->types, 'IN')
+      ->condition('type', $flag->getTypes(), 'IN')
       ->execute();
     foreach ($result as $row) {
       if ($flag->access_author == 'own') {
@@ -368,7 +370,7 @@ function flag_flag_access_multiple($flag, $entity_ids, $account) {
     }
   }
 
-  if ($flag->entity_type == 'comment') {
+  if ($flag->getFlaggableEntityTypeId() == 'comment') {
     // Restrict access by comment ownership.
     $query = db_select('comment', 'c');
     $query->leftJoin('node', 'n', 'c.nid = n.nid');
diff --git a/src/Entity/Flag.php b/src/Entity/Flag.php
index 19623c1..d5829de 100644
--- a/src/Entity/Flag.php
+++ b/src/Entity/Flag.php
@@ -84,7 +84,7 @@ class Flag extends ConfigEntityBundleBase implements FlagInterface {
    *
    * @var string
    */
-  public $entity_type = NULL;
+  protected $entity_type = NULL;
 
   /**
    * The flag label.
@@ -114,7 +114,7 @@ class Flag extends ConfigEntityBundleBase implements FlagInterface {
    *
    * @var array
    */
-  public $types = [];
+  protected $types = [];
 
   /**
    * The text for the "flag this" link for this flag.
@@ -299,6 +299,13 @@ class Flag extends ConfigEntityBundleBase implements FlagInterface {
   /**
    * {@inheritdoc}
    */
+  public function getTypes() {
+    return $this->types;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
   public function getPluginCollections() {
     return [
       'flagTypeConfig' => $this->flagTypeCollection,
diff --git a/src/FlagInterface.php b/src/FlagInterface.php
index e174f7c..0eeb658 100644
--- a/src/FlagInterface.php
+++ b/src/FlagInterface.php
@@ -56,6 +56,14 @@ interface FlagInterface extends ConfigEntityInterface, EntityWithPluginCollectio
   public function getFlaggableEntityTypeId();
 
   /**
+   * Get the flag types property.
+   *
+   * @return array
+   *  An array containing the bundles this flag may be applied to.
+   */
+  public function getTypes();
+
+  /**
    * Set the flag type plugin.
    *
    * @param string $plugin_id
diff --git a/src/Form/FlagDisableConfirmForm.php b/src/Form/FlagDisableConfirmForm.php
index 7fa50db..f1dc229 100644
--- a/src/Form/FlagDisableConfirmForm.php
+++ b/src/Form/FlagDisableConfirmForm.php
@@ -88,7 +88,7 @@ class FlagDisableConfirmForm extends ConfirmFormBase {
 
     // Invalidate the flaggable render cache.
     \Drupal::entityManager()
-      ->getViewBuilder($this->flag->entity_type)
+      ->getViewBuilder($this->flag->getFlaggableEntityTypeId())
       ->resetCache();
 
     // Save The flag entity.
diff --git a/src/Form/FlagFormBase.php b/src/Form/FlagFormBase.php
index 5956476..e14629d 100644
--- a/src/Form/FlagFormBase.php
+++ b/src/Form/FlagFormBase.php
@@ -138,7 +138,7 @@ abstract class FlagFormBase extends EntityForm {
       '#type' => 'checkboxes',
       '#title' => t('Flaggable types'),
       '#options' => $entity_bundles,
-      '#default_value' => $flag->types,
+      '#default_value' => $flag->getTypes(),
       '#description' => t('Check any sub-types that this flag may be used on.'),
       '#required' => TRUE,
       '#weight' => 10,
