diff --git a/core/modules/breakpoint/breakpoint.module b/core/modules/breakpoint/breakpoint.module
index 6c606ec..b284e4c 100644
--- a/core/modules/breakpoint/breakpoint.module
+++ b/core/modules/breakpoint/breakpoint.module
@@ -6,6 +6,7 @@
  */
 
 use Drupal\breakpoint\Entity\Breakpoint;
+use Drupal\breakpoint\BreakpointGroupStorageControllerInterface;
 use Drupal\breakpoint\Entity\BreakpointGroup;
 use Drupal\Core\Config\Entity\ConfigStorageController;
 
@@ -49,7 +50,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')->_breakpoint_delete_breakpoints($theme_list, Breakpoint::SOURCE_TYPE_THEME);
 }
 
 /**
@@ -63,79 +64,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 = config_get_storage_names_with_prefix('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')->_breakpoint_delete_breakpoints($modules, Breakpoint::SOURCE_TYPE_MODULE);
 }
 
 /**
diff --git a/core/modules/breakpoint/lib/Drupal/breakpoint/Controller/BreakpointGroupStorageController.php b/core/modules/breakpoint/lib/Drupal/breakpoint/Controller/BreakpointGroupStorageController.php
new file mode 100644
index 0000000..d124da0
--- /dev/null
+++ b/core/modules/breakpoint/lib/Drupal/breakpoint/Controller/BreakpointGroupStorageController.php
@@ -0,0 +1,76 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\breakpoint\BreakpointGroupStorageController.
+ */
+
+namespace Drupal\breakpoint;
+
+use Drupal\Core\Config\Entity\ConfigStorageController;
+
+class BreakpointGroupStorageController extends ConfigStorageController implements BreakpointGroupStorageControllerInterface {
+
+  /**
+   * {@inheritdoc}
+   */
+  function _breakpoint_delete_breakpoints(array $list, $source_type) {
+    $ids = \Drupal::configFactory()->listAll('breakpoint.breakpoint_group.' . $source_type . '.');
+    $entity_manager = \Drupal::entityManager();
+    $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 = \Drupal::service('config.storage')->listAll('breakpoint.breakpoint.' . $source_type . '.' . $breakpoint_group->id() . '.');
+        $breakpoint_type = $entity_manager->getDefinition('breakpoint');
+
+        // Remove the breakpoint.breakpoint part of the breakpoint identifier.
+        foreach ($breakpoint_ids as &$breakpoint_id) {
+          $breakpoint_id = static::getIDFromConfigName($breakpoint_id, $breakpoint_type->getConfigPrefix());
+        }
+        $breakpoints = $entity_manager->getStorageController('breakpoint')->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);
+    }
+  }
+
+  /**
+   * 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.
+   */
+  protected function deleteBreakpointGroupsBySource(array $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();
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/core/modules/breakpoint/lib/Drupal/breakpoint/Controller/BreakpointGroupStorageControllerInterface.php b/core/modules/breakpoint/lib/Drupal/breakpoint/Controller/BreakpointGroupStorageControllerInterface.php
new file mode 100644
index 0000000..49bdeea
--- /dev/null
+++ b/core/modules/breakpoint/lib/Drupal/breakpoint/Controller/BreakpointGroupStorageControllerInterface.php
@@ -0,0 +1,26 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\user\BreakpointGroupStorageControllerInterface.
+ */
+
+namespace Drupal\breakpoint;
+
+use Drupal\Core\Config\Entity\ConfigStorageControllerInterface;
+
+/**
+ * Defines a common interface for breakpoint entity controller classes.
+ */
+interface BreakpointGroupStorageControllerInterface extends ConfigStorageControllerInterface {
+
+  /**
+   * Remove 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 _breakpoint_delete_breakpoints(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..eef5041 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"
