diff --git a/core/modules/breakpoint/breakpoint.module b/core/modules/breakpoint/breakpoint.module
index 754d968..3c57690 100644
--- a/core/modules/breakpoint/breakpoint.module
+++ b/core/modules/breakpoint/breakpoint.module
@@ -6,8 +6,6 @@
  */
 
 use Drupal\breakpoint\Entity\Breakpoint;
-use Drupal\breakpoint\Entity\BreakpointGroup;
-use Drupal\Core\Config\Entity\ConfigStorageController;
 
 /**
  * Implements hook_help().
@@ -49,7 +47,7 @@ function breakpoint_help($path, $arg) {
  * @todo: This should be removed if https://drupal.org/node/1813110 is resolved.
  */
 function breakpoint_themes_disabled($theme_list) {
-  _breakpoint_delete_breakpoints($theme_list, Breakpoint::SOURCE_TYPE_THEME);
+  \Drupal::entityManager()->getStorageController('breakpoint_group')->deleteBreakpointsBySource($theme_list, Breakpoint::SOURCE_TYPE_THEME);
 }
 
 /**
@@ -63,79 +61,7 @@ function breakpoint_themes_disabled($theme_list) {
  * @todo: This should be removed if https://drupal.org/node/1813110 is resolved.
  */
 function breakpoint_modules_uninstalled($modules) {
-  _breakpoint_delete_breakpoints($modules, Breakpoint::SOURCE_TYPE_MODULE);
-}
-
-/**
- * Remove breakpoints from all disabled themes or uninstalled modules.
- *
- * The source type has to match the original source type, otherwise the group
- * will not be deleted. All groups created by the theme or module will be
- * deleted as well.
- *
- * @param array $list
- *   A list of modules or themes that are disabled.
- * @param string $source_type
- *   Either Breakpoint::SOURCE_TYPE_THEME or Breakpoint::SOURCE_TYPE_MODULE.
- */
-function _breakpoint_delete_breakpoints($list, $source_type) {
-  $ids = \Drupal::configFactory()->listAll('breakpoint.breakpoint_group.' . $source_type . '.');
-  $entity_manager = \Drupal::entityManager();
-  $entity_type = $entity_manager->getDefinition('breakpoint_group');
-
-  // Remove the breakpoint.breakpoint part of the breakpoint identifier.
-  foreach ($ids as &$id) {
-    $id = ConfigStorageController::getIDFromConfigName($id, $entity_type->getConfigPrefix());
-  }
-  $breakpoint_groups = entity_load_multiple('breakpoint_group', $ids);
-
-  foreach ($breakpoint_groups as $breakpoint_group) {
-    if ($breakpoint_group->sourceType == $source_type && in_array($breakpoint_group->source, $list)) {
-      // Delete the automatically created breakpoint group.
-      $breakpoint_group->delete();
-
-      // Get all breakpoints defined by this theme/module.
-      $breakpoint_ids = \Drupal::service('config.storage')->listAll('breakpoint.breakpoint.' . $source_type . '.' . $breakpoint_group->id() . '.');
-      $entity_type = $entity_manager->getDefinition('breakpoint');
-
-      // Remove the breakpoint.breakpoint part of the breakpoint identifier.
-      foreach ($breakpoint_ids as &$breakpoint_id) {
-        $breakpoint_id = ConfigStorageController::getIDFromConfigName($breakpoint_id, $entity_type->getConfigPrefix());
-      }
-      $breakpoints = entity_load_multiple('breakpoint', $breakpoint_ids);
-
-      // Make sure we only delete breakpoints defined by this theme/module.
-      foreach ($breakpoints as $breakpoint) {
-        if ($breakpoint->sourceType == $source_type && $breakpoint->source == $breakpoint_group->name) {
-          $breakpoint->delete();
-        }
-      }
-    }
-  }
-
-  // Delete groups defined by a module/theme even if that module/theme didn't
-  // define any breakpoints.
-  foreach ($ids as $id) {
-    // Delete all breakpoint groups defined by the theme or module.
-    _breakpoint_delete_breakpoint_groups($id, $source_type);
-  }
-}
-
-/**
- * Remove breakpoint groups from all disabled themes or uninstalled modules.
- *
- * @param array $group_id
- *   Machine readable name of the breakpoint group.
- * @param string $source_type
- *   Either Breakpoint::SOURCE_TYPE_THEME or Breakpoint::SOURCE_TYPE_MODULE.
- */
-function _breakpoint_delete_breakpoint_groups($group_id, $source_type) {
-  $breakpoint_groups = entity_load_multiple('breakpoint_group');
-  foreach ($breakpoint_groups as $breakpoint_group) {
-    if ($breakpoint_group->sourceType == $source_type && $breakpoint_group->source == $group_id) {
-      $breakpoint_group->delete();
-    }
-  }
+  \Drupal::entityManager()->getStorageController('breakpoint_group')->deleteBreakpointsBySource($modules, Breakpoint::SOURCE_TYPE_MODULE);
 }
 
 /**
diff --git a/core/modules/breakpoint/lib/Drupal/breakpoint/BreakpointGroupStorageController.php b/core/modules/breakpoint/lib/Drupal/breakpoint/BreakpointGroupStorageController.php
new file mode 100644
index 0000000..cd7a2cd
--- /dev/null
+++ b/core/modules/breakpoint/lib/Drupal/breakpoint/BreakpointGroupStorageController.php
@@ -0,0 +1,135 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\breakpoint\BreakpointGroupStorageController.
+ */
+
+namespace Drupal\breakpoint;
+
+use Drupal\Component\Uuid\UuidInterface;
+use Drupal\Core\Config\ConfigFactoryInterface;
+use Drupal\Core\Config\Entity\ConfigStorageController;
+use Drupal\Core\Config\Entity\ConfigStorageControllerInterface;
+use Drupal\Core\Config\StorageInterface;
+use Drupal\Core\Entity\EntityTypeInterface;
+use Drupal\Core\Entity\Query\QueryFactory;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+
+/**
+ * Provides storage for breakpoint groups.
+ */
+class BreakpointGroupStorageController extends ConfigStorageController implements BreakpointGroupStorageControllerInterface {
+
+  /**
+   * The breakpoint entity type.
+   *
+   * @var \Drupal\Core\Entity\EntityTypeInterface
+   */
+  protected $breakpointEntityType;
+
+  /**
+   * The breakpoint storage.
+   *
+   * @var \Drupal\Core\Config\Entity\ConfigStorageControllerInterface
+   */
+  protected $breakpointStorage;
+
+  /**
+   * @param \Drupal\Core\Entity\EntityTypeInterface $entity_type
+   *   The entity type definition.
+   * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
+   *   The config factory service.
+   * @param \Drupal\Core\Config\StorageInterface $config_storage
+   *   The config storage service.
+   * @param \Drupal\Core\Entity\Query\QueryFactory $entity_query_factory
+   *   The entity query factory.
+   * @param \Drupal\Component\Uuid\UuidInterface $uuid_service
+   *   The UUID service.
+   * @param \Drupal\Core\Entity\EntityTypeInterface $breakpoint_entity_type
+   *   The breakpoint entity type.
+   * @param \Drupal\Core\Config\Entity\ConfigStorageControllerInterface $breakpoint_storage
+   *   The breakpoint storage.
+   */
+  public function __construct(EntityTypeInterface $entity_type, ConfigFactoryInterface $config_factory, StorageInterface $config_storage, QueryFactory $entity_query_factory, UuidInterface $uuid_service, EntityTypeInterface $breakpoint_entity_type, ConfigStorageControllerInterface $breakpoint_storage) {
+    parent::__construct($entity_type, $config_factory, $config_storage, $entity_query_factory, $uuid_service);
+
+    $this->breakpointEntityType = $breakpoint_entity_type;
+    $this->breakpointStorage = $breakpoint_storage;
+  }
+
+  public static function createInstance(ContainerInterface $container, EntityTypeInterface $entity_type) {
+    $entity_manager = $container->get('entity.manager');
+    return new static(
+      $entity_type,
+      $container->get('config.factory'),
+      $container->get('config.storage'),
+      $container->get('entity.query'),
+      $container->get('uuid'),
+      $entity_manager->getDefinition('breakpoint'),
+      $entity_manager->getStorageController('breakpoint')
+    );
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  function deleteBreakpointsBySource(array $list, $source_type) {
+    $ids = $this->configFactory->listAll('breakpoint.breakpoint_group.' . $source_type . '.');
+    $breakpoint_group_type = $this->getEntityType();
+
+    // Remove the breakpoint.breakpoint part of the breakpoint identifier.
+    foreach ($ids as &$id) {
+      $id = static::getIDFromConfigName($id, $breakpoint_group_type->getConfigPrefix());
+    }
+    $breakpoint_groups = $this->loadMultiple($ids);
+
+    foreach ($breakpoint_groups as $breakpoint_group) {
+      if ($breakpoint_group->sourceType == $source_type && in_array($breakpoint_group->source, $list)) {
+        // Delete the automatically created breakpoint group.
+        $breakpoint_group->delete();
+
+        // Get all breakpoints defined by this theme/module.
+        $breakpoint_ids = $this->configStorage->listAll('breakpoint.breakpoint.' . $source_type . '.' . $breakpoint_group->id() . '.');
+
+        // Remove the breakpoint.breakpoint part of the breakpoint identifier.
+        foreach ($breakpoint_ids as &$breakpoint_id) {
+          $breakpoint_id = static::getIDFromConfigName($breakpoint_id, $this->breakpointEntityType->getConfigPrefix());
+        }
+        $breakpoints = $this->breakpointStorage->loadMultiple($breakpoint_ids);
+
+        // Make sure we only delete breakpoints defined by this theme/module.
+        foreach ($breakpoints as $breakpoint) {
+          if ($breakpoint->sourceType == $source_type && $breakpoint->source == $breakpoint_group->name) {
+            $breakpoint->delete();
+          }
+        }
+      }
+    }
+
+    // Delete groups defined by a module/theme even if that module/theme didn't
+    // define any breakpoints.
+    foreach ($ids as $id) {
+      // Delete all breakpoint groups defined by the theme or module.
+      $this->deleteBreakpointGroupsBySource($id, $source_type);
+    }
+  }
+
+  /**
+   * Removes breakpoint groups from all disabled themes or uninstalled modules.
+   *
+   * @param string $group_id
+   *   Machine readable name of the breakpoint group.
+   * @param string $source_type
+   *   Either Breakpoint::SOURCE_TYPE_THEME or Breakpoint::SOURCE_TYPE_MODULE.
+   */
+  protected function deleteBreakpointGroupsBySource($group_id, $source_type) {
+    $breakpoint_groups = $this->loadMultiple();
+    foreach ($breakpoint_groups as $breakpoint_group) {
+      if ($breakpoint_group->sourceType == $source_type && $breakpoint_group->source == $group_id) {
+        $breakpoint_group->delete();
+      }
+    }
+  }
+
+}
diff --git a/core/modules/breakpoint/lib/Drupal/breakpoint/BreakpointGroupStorageControllerInterface.php b/core/modules/breakpoint/lib/Drupal/breakpoint/BreakpointGroupStorageControllerInterface.php
new file mode 100644
index 0000000..a45828f
--- /dev/null
+++ b/core/modules/breakpoint/lib/Drupal/breakpoint/BreakpointGroupStorageControllerInterface.php
@@ -0,0 +1,27 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\user\BreakpointGroupStorageControllerInterface.
+ */
+
+namespace Drupal\breakpoint;
+
+use Drupal\Core\Config\Entity\ConfigStorageControllerInterface;
+
+/**
+ * Provides an interface for breakpoint group storage.
+ */
+interface BreakpointGroupStorageControllerInterface extends ConfigStorageControllerInterface {
+
+  /**
+   * Removes breakpoints from all disabled themes or uninstalled modules.
+   *
+   * @param array $list
+   *   A list of modules or themes that are disabled.
+   * @param string $source_type
+   *   Either Breakpoint::SOURCE_TYPE_THEME or Breakpoint::SOURCE_TYPE_MODULE.
+   */
+  public function deleteBreakpointsBySource(array $list, $source_type);
+
+}
diff --git a/core/modules/breakpoint/lib/Drupal/breakpoint/Entity/BreakpointGroup.php b/core/modules/breakpoint/lib/Drupal/breakpoint/Entity/BreakpointGroup.php
index f3807af..b0ea9f9 100644
--- a/core/modules/breakpoint/lib/Drupal/breakpoint/Entity/BreakpointGroup.php
+++ b/core/modules/breakpoint/lib/Drupal/breakpoint/Entity/BreakpointGroup.php
@@ -18,6 +18,9 @@
  * @ConfigEntityType(
  *   id = "breakpoint_group",
  *   label = @Translation("Breakpoint group"),
+ *   controllers = {
+ *     "storage" = "Drupal\breakpoint\BreakpointGroupStorageController"
+ *   },
  *   entity_keys = {
  *     "id" = "id",
  *     "label" = "label"
