diff --git a/config/install/features.assignment.yml b/config/install/features.assignment.yml
deleted file mode 100644
index 0166397..0000000
--- a/config/install/features.assignment.yml
+++ /dev/null
@@ -1,65 +0,0 @@
-base:
-  types:
-    config:
-      comment_type: comment_type
-      node_type: node_type
-    content:
-      user: user
-core:
-  types:
-    config:
-      date_format: date_format
-      field_storage_config: field_storage_config
-      entity_form_mode: entity_form_mode
-      image_style: image_style
-      menu: menu
-      responsive_image_style: responsive_image_style
-      user_role: user_role
-      entity_view_mode: entity_view_mode
-exclude:
-  types:
-    config: {  }
-  curated: 1
-  module:
-    enabled: 1
-    profile: 1
-    namespace: 1
-optional:
-  types:
-    config:
-      image_style: image_style
-      migration: migration
-      rdf_mapping: rdf_mapping
-      responsive_image_style: responsive_image_style
-      search_page: search_page
-      tour: tour
-      view: view
-profile:
-profile:
-  curated: 1
-  standard:
-    files: 1
-    dependencies: 1
-  types:
-    config:
-      block: block
-      language_content_settings: language_content_settings
-      configurable_language: configurable_language
-      migration: migration
-      shortcut_set: shortcut_set
-      tour: tour
-site:
-  types:
-    config:
-      action: action
-      contact_form: contact_form
-      block_content_type: block_content_type
-      rdf_mapping: rdf_mapping
-      search_page: search_page
-      taxonomy_vocabulary: taxonomy_vocabulary
-      editor: editor
-      filter_format: filter_format
-packages: null
-namespace: null
-dependency: null
-existing: null
diff --git a/config/install/features.settings.yml b/config/install/features.settings.yml
index 575fb06..ed8b37a 100644
--- a/config/install/features.settings.yml
+++ b/config/install/features.settings.yml
@@ -1,28 +1,3 @@
-assignment:
-  enabled:
-    - base
-    - core
-    - dependency
-    - exclude
-    - existing
-    - namespace
-    - optional
-    - packages
-    - profile
-    - site
-  method_weights:
-    base: -2
-    core: 5
-    dependency: 15
-    exclude: -5
-    existing: 12
-    namespace: 0
-    optional: 0
-    packages: -20
-    profile: 10
-    site: 7
 export:
   folder: 'custom'
-bundle:
-  settings: []
 langcode: en
diff --git a/config/schema/features.schema.yml b/config/schema/features.schema.yml
new file mode 100644
index 0000000..7917116
--- /dev/null
+++ b/config/schema/features.schema.yml
@@ -0,0 +1,31 @@
+features.bundle.*:
+  type: config_entity
+  label: 'Features bundle'
+  mapping:
+    machine_name:
+      type: string
+      label: "Machine name"
+    name:
+      type: string
+      label: "Name"
+    description:
+      type: string
+      label: "Description"
+    assignments:
+      type: ignore
+      label: "Assignment"
+      # @todo Profile a proper config schema.
+    settings:
+      # @todo Profile a proper config schema.
+      type: ignore
+    profile_name:
+      type: string
+      label: "Profile name"
+    weights:
+      type: mapping
+      mapping:
+        type: int
+    is_profile:
+      type: boolean
+      label: "Is install profile"
+
diff --git a/src/Entity/FeaturesBundle.php b/src/Entity/FeaturesBundle.php
new file mode 100644
index 0000000..7ea28aa
--- /dev/null
+++ b/src/Entity/FeaturesBundle.php
@@ -0,0 +1,312 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\features\Entity\FeaturesBundle.
+ */
+
+namespace Drupal\features\Entity;
+
+use Drupal\Core\Config\Entity\ConfigEntityBase;
+use Drupal\features\FeaturesBundleInterface;
+
+/**
+ * Defines a features bundle.
+ * @todo Better description
+ *
+ * @ConfigEntityType(
+ *   id = "features_bundle",
+ *   label = @Translation("Features bundle"),
+ *   handlers = {
+ *   },
+ *   admin_permission = "administer site configuration",
+ *   config_prefix = "bundle",
+ *   entity_keys = {
+ *     "id" = "machine_name",
+ *     "label" = "name"
+ *   },
+ *   links = {
+ *   },
+ *   config_export = {
+ *     "name",
+ *     "machine_name",
+ *     "description",
+ *     "assignments",
+ *     "weights",
+ *     "settings",
+ *     "profile_name",
+ *     "is_profile",
+ *   }
+ * )
+ */
+class FeaturesBundle extends ConfigEntityBase implements FeaturesBundleInterface {
+
+  /**
+   * @var string
+   */
+  protected $name;
+
+  /**
+   * @var
+   */
+  protected $machine_name;
+
+  /**
+   * @var string
+   */
+  protected $description;
+
+  /**
+   * @var string[]
+   */
+  protected $assignments = [];
+
+  /**
+   * @var array
+   */
+  protected $assignment_settings = [];
+
+  /**
+   * @var int[]
+   */
+  protected $weights = [];
+
+  /**
+   * @var array
+   */
+  protected $settings = [];
+
+  /**
+   * @var string
+   */
+  protected $profile_name;
+
+  /**
+   * @var bool
+   */
+  protected $is_profile;
+
+  public function id() {
+    // @todo Convert it to $this->id on the longrun.
+    return $this->getMachineName();
+  }
+
+
+  /**
+   * {@inheritdoc}
+   */
+  public function isDefault() {
+    return $this->machine_name == 'default';
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getMachineName() {
+    return $this->machine_name;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setMachineName($machine_name) {
+    $this->machine_name = $machine_name;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getName() {
+    return $this->name;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setName($name) {
+    $this->name = $name;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getFullName($short_name) {
+    if ($this->isDefault() || $this->inBundle($short_name)) {
+      return $short_name;
+    }
+    else {
+      return $this->machine_name . '_' . $short_name;
+    }
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getShortName($machine_name) {
+    if (!$this->isProfilePackage($machine_name) && $this->inBundle($machine_name)) {
+      return substr($machine_name, strlen($this->getMachineName()) + 1, strlen($machine_name) - strlen($this->getMachineName()) - 1);
+    }
+    return $machine_name;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function inBundle($machine_name) {
+    return ($this->isProfilePackage($machine_name) || strpos($machine_name, $this->machine_name . '_') === 0);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function isProfilePackage($machine_name) {
+    return ($this->isProfile() && $machine_name == $this->getProfileName());
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getDescription() {
+    return $this->description;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setDescription($description) {
+    $this->description = $description;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function isProfile() {
+    return $this->is_profile;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setIsProfile($value) {
+    $this->is_profile = $value;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getProfileName() {
+    $name = $this->isProfile() ? $this->profile_name : '';
+    return !empty($name) ? $name : drupal_get_profile();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setProfileName($machine_name) {
+    $this->profileName = $machine_name;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getEnabledAssignments() {
+    $list = array();
+    foreach ($this->assignments as $method_id => $method) {
+      if ($method['enabled']) {
+        $list[$method_id] = $method_id;
+      }
+    }
+    return $list;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setEnabledAssignments(array $assignments) {
+    foreach ($this->assignments as $method_id => &$method) {
+      $method['enabled'] = in_array($method_id, $assignments);
+    }
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getAssignmentWeights() {
+    $list = array();
+    foreach ($this->assignments as $method_id => $method) {
+      $list[$method_id] = $method['weight'];
+    }
+    return $list;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setAssignmentWeights(array $assignments) {
+    foreach ($this->assignments as $method_id => &$method) {
+      if (isset($assignments[$method_id])) {
+        $method['weight'] = $assignments[$method_id];
+      }
+    }
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getAssignmentSettings($method_id) {
+    if (isset($method_id)) {
+      if (isset($this->assignments[$method_id])) {
+        return $this->assignments[$method_id];
+      }
+    }
+    else {
+      $list = array();
+      foreach ($this->assignments as $method_id => $method) {
+        $list[$method_id] = $method;
+      }
+      return $list;
+    }
+    return array();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setAssignmentSettings($method_id, array $settings) {
+    if (isset($method_id)) {
+      if (isset($this->assignments[$method_id])) {
+        $this->assignments[$method_id] = $settings;
+      }
+    }
+    else {
+      foreach ($settings as $method_id => $method_settings) {
+        if (!empty($method_settings)) {
+          $this->setAssignmentSettings($method_id, $method_settings);
+        }
+      }
+    }
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getSettings() {
+    return $this->settings;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setSettings(array $settings) {
+    $this->settings = $settings;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function remove() {
+    $this->delete();
+  }
+
+}
diff --git a/src/FeaturesAssigner.php b/src/FeaturesAssigner.php
index e7f563b..75886bf 100644
--- a/src/FeaturesAssigner.php
+++ b/src/FeaturesAssigner.php
@@ -8,8 +8,8 @@
 namespace Drupal\features;
 
 use Drupal\Component\Plugin\PluginManagerInterface;
+use Drupal\features\Entity\FeaturesBundle;
 use Drupal\features\FeaturesManagerInterface;
-use Drupal\features\FeaturesBundle;
 use Drupal\Core\Config\ConfigFactoryInterface;
 use Drupal\Core\Entity\EntityManagerInterface;
 use Drupal\Core\Config\StorageInterface;
@@ -21,7 +21,7 @@ use Drupal\Core\StringTranslation\StringTranslationTrait;
 class FeaturesAssigner implements FeaturesAssignerInterface {
   use StringTranslationTrait;
 
-  const DEFAULTBUNDLE = '_default_';
+  const DEFAULTBUNDLE = 'default';
 
   /**
    * The package assignment method plugin manager.
@@ -255,12 +255,7 @@ class FeaturesAssigner implements FeaturesAssignerInterface {
   public function getBundleList() {
     if (empty($this->bundles)) {
       $this->bundles = array();
-      $this->bundles[self::DEFAULTBUNDLE] = new FeaturesBundle('', $this->featuresManager, $this, $this->configFactory);
-      $this->bundles[self::DEFAULTBUNDLE]->load();
-      $bundles = array_keys($this->configFactory->get('features.bundles')->get());
-      foreach ($bundles as $machine_name) {
-        $bundle = new FeaturesBundle($machine_name, $this->featuresManager, $this, $this->configFactory);
-        $bundle->load();
+      foreach (\Drupal::entityTypeManager()->getStorage('features_bundle')->loadMultiple() as $machine_name => $bundle) {
         $this->bundles[$machine_name] = $bundle;
       }
     }
@@ -288,8 +283,7 @@ class FeaturesAssigner implements FeaturesAssignerInterface {
    * {@inheritdoc}
    */
   public function createBundle($name, $machine_name = NULL, $description = NULL, $is_profile = FALSE, $profile_name = NULL) {
-    $bundle = new FeaturesBundle('', $this->featuresManager, $this, $this->configFactory);
-    $bundle->load();
+    $bundle = FeaturesBundle::create([]);
     if (empty($machine_name)) {
       $machine_name = strtolower(str_replace(array(' ', '-'), '_', $name));
     }
@@ -415,7 +409,7 @@ class FeaturesAssigner implements FeaturesAssignerInterface {
       // If bundle no longer exists then return default.
       $bundle = $this->bundles[self::DEFAULTBUNDLE];
     }
-    return $this->setCurrent($bundle->load());
+    return $this->setCurrent($bundle);
   }
 
   /**
diff --git a/src/FeaturesAssignerInterface.php b/src/FeaturesAssignerInterface.php
index 0d3d812..a07bbd5 100644
--- a/src/FeaturesAssignerInterface.php
+++ b/src/FeaturesAssignerInterface.php
@@ -127,7 +127,7 @@ interface FeaturesAssignerInterface {
   /**
    * Returns an array of all existing features bundles.
    *
-   * @return array
+   * @return \Drupal\features\FeaturesBundleInterface[]
    *   Keyed by machine_name with value of
    *   \Drupal\features\FeaturesBundleInterface.
    */
diff --git a/src/FeaturesBundle.php b/src/FeaturesBundle.php
deleted file mode 100644
index c0632ae..0000000
--- a/src/FeaturesBundle.php
+++ /dev/null
@@ -1,423 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\features\FeaturesBundle.
- */
-
-namespace Drupal\features;
-
-use Drupal\features\FeaturesAssignerInterface;
-use Drupal\features\FeaturesManagerInterface;
-use Drupal\features\FeaturesBundleInterface;
-use Drupal\Core\Config\ConfigFactoryInterface;
-
-/**
- * Defines the Features Bundle object.
- */
-class FeaturesBundle implements FeaturesBundleInterface {
-
-  /**
-   * The features manager.
-   *
-   * @var array
-   */
-  protected $featuresManager;
-
-  /**
-   * The package assigner.
-   *
-   * @var array
-   */
-  protected $assigner;
-
-  /**
-   * The configuration factory.
-   *
-   * @var \Drupal\Core\Config\ConfigFactoryInterface
-   */
-  protected $configFactory;
-
-  /**
-   * The machine name of the bundle.
-   *
-   * @var string
-   */
-  protected $machineName;
-
-  /**
-   * The human readable name of the bundle.
-   *
-   * @var string
-   */
-  protected $name;
-
-  /**
-   * The description of the bundle.
-   *
-   * @var string
-   */
-  protected $description;
-
-  /**
-   * Settings for the bundle.
-   *
-   * @var array
-   */
-  protected $settings;
-
-  /**
-   * The profile name associated with this bundle.
-   *
-   * @var string
-   */
-  protected $profileName;
-
-  /**
-   * Whether this bundle is a profile.
-   *
-   * @var bool
-   */
-  protected $isProfile;
-
-  /**
-   * A list of assignments.
-   *
-   * Assignments are keyed by assignment ID.
-   *  - enabled: whether method is enabled.
-   *  - weight' weight (order it is applied).
-   *  - settings' method-specific settings.
-   *
-   * @var array
-   */
-  protected $assignments;
-
-  /**
-   * Constructs a FeaturesBundle object.
-   */
-  public function __construct($machine_name, FeaturesManagerInterface $features_manager, FeaturesAssignerInterface $assigner, ConfigFactoryInterface $config_factory) {
-    $this->machineName = $machine_name;
-    $this->featuresManager = $features_manager;
-    $this->assigner = $assigner;
-    $this->configFactory = $config_factory;
-    $this->assignments = $this->initAssignments();
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public static function create(ContainerInterface $container) {
-    return new static(
-      '',
-      $container->get('features.manager'),
-      $container->get('features_assigner'),
-      $container->get('config.factory')
-    );
-  }
-
-  /**
-   * Initializes the $assignments array with defaults for a new bundle.
-   */
-  protected function initAssignments() {
-    $assignments = array();
-    $enabled = $this->configFactory->get('features.settings')->get('assignment.enabled');
-    $weights = $this->configFactory->get('features.settings')->get('assignment.method_weights');
-    $settings = $this->configFactory->get('features.assignment');
-    foreach ($this->assigner->getAssignmentMethods() as $method_id => $method) {
-      $assignments[$method_id] = array(
-        'enabled' => !empty($enabled[$method_id]),
-        'weight' => !empty($weights[$method_id]) ? $weights[$method_id] : 0,
-        'settings' => $settings->get($method_id),
-      );
-    }
-    return $assignments;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function isDefault() {
-    return $this->machineName == '';
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getMachineName() {
-    return $this->machineName;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function setMachineName($machine_name) {
-    $this->machineName = $machine_name;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getName() {
-    return $this->name;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function setName($name) {
-    $this->name = $name;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getFullName($short_name) {
-    if ($this->isDefault() || $this->inBundle($short_name)) {
-      return $short_name;
-    }
-    else {
-      return $this->machineName . '_' . $short_name;
-    }
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getShortName($machine_name) {
-    if (!$this->isProfilePackage($machine_name) && $this->inBundle($machine_name)) {
-      return substr($machine_name, strlen($this->getMachineName()) + 1, strlen($machine_name) - strlen($this->getMachineName()) - 1);
-    }
-    return $machine_name;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function inBundle($machine_name) {
-    return ($this->isProfilePackage($machine_name) || strpos($machine_name, $this->machineName . '_') === 0);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function isProfilePackage($machine_name) {
-    return ($this->isProfile() && $machine_name == $this->getProfileName());
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getDescription() {
-    return $this->description;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function setDescription($description) {
-    $this->description = $description;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function isProfile() {
-    return $this->isProfile;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function setIsProfile($value) {
-    $this->isProfile = $value;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getProfileName() {
-    $name = $this->isProfile() ? $this->profileName : '';
-    return !empty($name) ? $name : drupal_get_profile();
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function setProfileName($machine_name) {
-    $this->profileName = $machine_name;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getEnabledAssignments() {
-    $list = array();
-    foreach ($this->assignments as $method_id => $method) {
-      if ($method['enabled']) {
-        $list[$method_id] = $method_id;
-      }
-    }
-    return $list;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function setEnabledAssignments(array $assignments) {
-    foreach ($this->assignments as $method_id => &$method) {
-      $method['enabled'] = in_array($method_id, $assignments);
-    }
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getAssignmentWeights() {
-    $list = array();
-    foreach ($this->assignments as $method_id => $method) {
-      $list[$method_id] = $method['weight'];
-    }
-    return $list;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function setAssignmentWeights(array $assignments) {
-    foreach ($this->assignments as $method_id => &$method) {
-      if (isset($assignments[$method_id])) {
-        $method['weight'] = $assignments[$method_id];
-      }
-    }
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getAssignmentSettings($method_id) {
-    if (isset($method_id)) {
-      if (isset($this->assignments[$method_id])) {
-        return $this->assignments[$method_id]['settings'];
-      }
-    }
-    else {
-      $list = array();
-      foreach ($this->assignments as $method_id => $method) {
-        $list[$method_id] = $method['settings'];
-      }
-      return $list;
-    }
-    return array();
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function setAssignmentSettings($method_id, array $settings) {
-    if (isset($method_id)) {
-      if (isset($this->assignments[$method_id])) {
-        $this->assignments[$method_id]['settings'] = $settings;
-      }
-    }
-    else {
-      foreach ($settings as $method_id => $method_settings) {
-        if (!empty($method_settings)) {
-          $this->setAssignmentSettings($method_id, $method_settings);
-        }
-      }
-    }
-    return $this;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getSettings() {
-    return $this->settings;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function setSettings(array $settings) {
-    $this->settings = $settings;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function load($machine_name = NULL) {
-    $machine_name = isset($machine_name) ? $machine_name : $this->machineName;
-    if ($machine_name == '') {
-      // Return defaults set by module.
-      $enabled = $this->configFactory->get('features.settings')->get('assignment.enabled');
-      $weights = $this->configFactory->get('features.settings')->get('assignment.method_weights');
-      $settings = $this->configFactory->get('features.settings')->get('bundle.settings');
-      $assignment_settings = $this->configFactory->get('features.assignment');
-      foreach ($this->assigner->getAssignmentMethods() as $method_id => $method) {
-        $this->assignments[$method_id] = array(
-          'enabled' => in_array($method_id, $enabled),
-          'weight' => !empty($weights[$method_id]) ? $weights[$method_id] : 0,
-          'settings' => $assignment_settings->get($method_id),
-        );
-      }
-      $this->setMachineName('');
-      $this->setProfileName('');
-      $this->setIsProfile(FALSE);
-      $this->setName(t('--None--'));
-      $this->setDescription(t('Default bundle with no namespace.'));
-      $this->setSettings($settings);
-    }
-    else {
-      $bundle = $this->configFactory->get('features.bundles')->get($machine_name);
-      $this->setMachineName($machine_name);
-      $this->setName($bundle['name']);
-      $this->setDescription($bundle['description']);
-      $this->setEnabledAssignments($bundle['assignments']);
-      $this->setAssignmentWeights($bundle['weights']);
-      $this->setAssignmentSettings(NULL, $bundle['assignment_settings']);
-      $this->setSettings($bundle['settings']);
-      $this->setProfileName($bundle['profile_name']);
-      $this->setIsProfile($bundle['is_profile']);
-    }
-    return $this;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function save() {
-    $bundle = array(
-      'name' => $this->getName(),
-      'description' => $this->getDescription(),
-      'assignments' => array_keys($this->getEnabledAssignments()),
-      'weights' => $this->getAssignmentWeights(),
-      'assignment_settings' => $this->getAssignmentSettings(NULL),
-      'settings' => $this->getSettings(),
-      'profile_name' => $this->isProfile() ? $this->getProfileName() : '',
-      'is_profile' => $this->isProfile(),
-    );
-    if ($this->getMachineName() == '') {
-      // Save new default settings into config.
-      $this->configFactory->getEditable('features.settings')->set('assignment.enabled', $bundle['assignments'])->save();
-      $this->configFactory->getEditable('features.settings')->set('assignment.method_weights', $bundle['weights'])->save();
-      $this->configFactory->getEditable('features.settings')->set('bundle.settings', $bundle['settings'])->save();
-      $settings = $this->configFactory->getEditable('features.assignment');
-      foreach ($bundle['assignment_settings'] as $method_id => $value) {
-        $settings->set($method_id, $value);
-      }
-      $settings->save();
-    }
-    else {
-      $this->configFactory->getEditable('features.bundles')->set($this->getMachineName(), $bundle)->save();
-    }
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function remove() {
-    $this->configFactory->getEditable('features.bundles')->clear($this->getMachineName())->save();
-  }
-
-}
diff --git a/src/FeaturesBundleInterface.php b/src/FeaturesBundleInterface.php
index 28bd526..daaa9c3 100644
--- a/src/FeaturesBundleInterface.php
+++ b/src/FeaturesBundleInterface.php
@@ -258,15 +258,6 @@ interface FeaturesBundleInterface {
   public function setSettings(array $settings);
 
   /**
-   * Loads a named bundle from the active config.
-   *
-   * @param string $machine_name
-   *   The machine name of a bundle. If omitted, use the current machine_name,
-   *   otherwise replace the data in the bundle with the data from the config.
-   */
-  public function load($machine_name = NULL);
-
-  /**
    * Saves the bundle to the active config.
    */
   public function save();
diff --git a/tests/src/Kernel/Entity/FeaturesBundleIntegrationTest.php b/tests/src/Kernel/Entity/FeaturesBundleIntegrationTest.php
new file mode 100644
index 0000000..8d0be48
--- /dev/null
+++ b/tests/src/Kernel/Entity/FeaturesBundleIntegrationTest.php
@@ -0,0 +1,65 @@
+<?php
+
+namespace Drupal\features\tests\src\Kernel\Entity;
+
+use Drupal\features\Entity\FeaturesBundle;
+use Drupal\KernelTests\KernelTestBase;
+
+/**
+ * @coversDefaultClass \Drupal\features\Entity\FeaturesBundle
+ * @group features
+ */
+class FeaturesBundleIntegrationTest extends KernelTestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public static $modules  = ['features'];
+
+  public function testCrud() {
+    $bundle = FeaturesBundle::create([
+      'machine_name' => 'test',
+      'name' => 'Test',
+    ]);
+    $bundle->save();
+
+    /** @var \Drupal\features\Entity\FeaturesBundle $bundle */
+    $bundle = FeaturesBundle::load('test');
+    $this->assertEquals('Test', $bundle->getName());
+  }
+
+  /**
+   * @covers ::isDefault
+   */
+  public function testIsDefaultWithDefaultBundle() {
+    $bundle = FeaturesBundle::create([
+      'machine_name' => 'default',
+    ]);
+
+    $this->assertTrue($bundle->isDefault());
+  }
+
+  /**
+   * @covers ::isDefault
+   */
+  public function testIsDefaultWithNonDefaultBundle() {
+    $bundle = FeaturesBundle::create([
+      'machine_name' => 'other',
+    ]);
+
+    $this->assertFalse($bundle->isDefault());
+  }
+
+  /**
+   * @covers ::getFullName
+   */
+  public function testGetFullName() {
+  }
+
+  /**
+   * @covers ::getShortName
+   */
+  public function testGetShortName() {
+  }
+
+}
