diff --git a/src/Controller/RestUIController.php b/src/Controller/RestUIController.php
index 2b631e4..f3a85b6 100644
--- a/src/Controller/RestUIController.php
+++ b/src/Controller/RestUIController.php
@@ -2,6 +2,9 @@
 
 namespace Drupal\restui\Controller;
 
+use Drupal\Core\Config\Entity\ConfigEntityStorageInterface;
+use Drupal\Core\Entity\EntityStorageInterface;
+use Drupal\rest\RestResourceConfigInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 use Symfony\Component\HttpFoundation\RedirectResponse;
 use Symfony\Component\HttpFoundation\Request;
@@ -39,13 +42,21 @@ class RestUIController implements ContainerInjectionInterface {
   protected $routeBuilder;
 
   /**
+   * Configuration entity to store enabled REST resources.
+   *
+   * @var \Drupal\rest\RestResourceConfigInterface
+   */
+  protected $resourceConfigStorage;
+
+  /**
    * Injects RestUIManager Service.
    */
   public static function create(ContainerInterface $container) {
     return new static(
       $container->get('plugin.manager.rest'),
       $container->get('url_generator'),
-      $container->get('router.builder')
+      $container->get('router.builder'),
+      $container->get('entity_type.manager')->getStorage('rest_resource_config')
     );
   }
 
@@ -58,11 +69,14 @@ class RestUIController implements ContainerInjectionInterface {
    *   The URL generator.
    * @param \Drupal\Core\Routing\RouteBuilderInterface $routeBuilder
    *   The router builder.
+   * @param \Drupal\Core\Entity\EntityStorageInterface
+   *   The REST resource config storage.
    */
-  public function __construct(ResourcePluginManager $resourcePluginManager, UrlGeneratorInterface $url_generator, RouteBuilderInterface $routeBuilder) {
+  public function __construct(ResourcePluginManager $resourcePluginManager, UrlGeneratorInterface $url_generator, RouteBuilderInterface $routeBuilder, EntityStorageInterface $resource_config_storage) {
     $this->resourcePluginManager = $resourcePluginManager;
     $this->urlGenerator = $url_generator;
     $this->routeBuilder= $routeBuilder;
+    $this->resourceConfigStorage = $resource_config_storage;
   }
 
   /**
@@ -73,14 +87,16 @@ class RestUIController implements ContainerInjectionInterface {
    */
   public function listResources() {
     // Get the list of enabled and disabled resources.
-    $config = \Drupal::config('rest.settings')->get('resources') ?: array();
+    $config = $this->resourceConfigStorage->loadMultiple();
+
     // Strip out the nested method configuration, we are only interested in the
     // plugin IDs of the resources.
     $enabled_resources = array_combine(array_keys($config), array_keys($config));
     $available_resources = array('enabled' => array(), 'disabled' => array());
     $resources = $this->resourcePluginManager->getDefinitions();
+
     foreach ($resources as $id => $resource) {
-      $status = in_array($id, $enabled_resources) ? 'enabled' : 'disabled';
+      $status = in_array( str_replace(':', '.', $id), $enabled_resources) ? 'enabled' : 'disabled';
       $available_resources[$status][$id] = $resource;
     }
 
@@ -206,15 +222,11 @@ class RestUIController implements ContainerInjectionInterface {
    *   Access is denied, if the token is invalid or missing.
    */
   public function disable($resource_id) {
-    $config = \Drupal::configFactory()->getEditable('rest.settings');
-    $resources = $config->get('resources') ?: array();
-    $plugin = $this->resourcePluginManager->createInstance($resource_id);
-    if (!empty($plugin)) {
-      // disable the resource.
-      unset($resources[$resource_id]);
-      $config->set('resources', $resources);
-      $config->save();
 
+    $resources = $this->resourceConfigStorage->loadMultiple();
+
+    if ($resources[str_replace(':', '.', $resource_id)]) {
+      $resources[str_replace(':', '.', $resource_id)]->delete();
       // Rebuild routing cache.
       $this->routeBuilder->rebuild();
       drupal_set_message(t('The resource was disabled successfully.'));
diff --git a/src/Form/RestUIForm.php b/src/Form/RestUIForm.php
index 9224560..4d2f19a 100644
--- a/src/Form/RestUIForm.php
+++ b/src/Form/RestUIForm.php
@@ -3,10 +3,12 @@
 namespace Drupal\restui\Form;
 
 use Drupal\Core\Authentication\AuthenticationCollectorInterface;
+use Drupal\Core\Entity\EntityStorageInterface;
 use Drupal\Core\Form\ConfigFormBase;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Config\ConfigFactoryInterface;
 use Drupal\Core\Extension\ModuleHandler;
+use Drupal\rest\RestResourceConfigInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
 use Drupal\rest\Plugin\Type\ResourcePluginManager;
@@ -53,6 +55,13 @@ class RestUIForm extends ConfigFormBase {
   protected $routeBuilder;
 
   /**
+   * The REST resource config storage.
+   *
+   * @var \Drupal\Core\Entity\EntityStorageInterface
+   */
+  protected $resourceConfigStorage;
+
+  /**
    * Constructs a \Drupal\user\RestForm object.
    *
    * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
@@ -67,14 +76,17 @@ class RestUIForm extends ConfigFormBase {
    *   The REST plugin manager.
    * @param \Drupal\Core\Routing\RouteBuilderInterface $routeBuilder
    *   The route builder.
+   * @param \Drupal\Core\Entity\EntityStorageInterface
+   *   The REST resource config storage.
    */
-  public function __construct(ConfigFactoryInterface $config_factory, ModuleHandler $module_handler, AuthenticationCollectorInterface $authentication_collector, array $formats, ResourcePluginManager $resourcePluginManager, RouteBuilderInterface $routeBuilder) {
+  public function __construct(ConfigFactoryInterface $config_factory, ModuleHandler $module_handler, AuthenticationCollectorInterface $authentication_collector, array $formats, ResourcePluginManager $resourcePluginManager, RouteBuilderInterface $routeBuilder, EntityStorageInterface $resource_config_storage) {
     parent::__construct($config_factory);
     $this->moduleHandler = $module_handler;
     $this->authenticationCollector = $authentication_collector;
     $this->formats = $formats;
     $this->resourcePluginManager = $resourcePluginManager;
     $this->routeBuilder= $routeBuilder;
+    $this->resourceConfigStorage = $resource_config_storage;
   }
 
   /**
@@ -87,7 +99,8 @@ class RestUIForm extends ConfigFormBase {
       $container->get('authentication_collector'),
       $container->getParameter('serializer.formats'),
       $container->get('plugin.manager.rest'),
-      $container->get('router.builder')
+      $container->get('router.builder'),
+      $container->get('entity_type.manager')->getStorage('rest_resource_config')
     );
   }
 
@@ -115,7 +128,7 @@ class RestUIForm extends ConfigFormBase {
    * @param \Drupal\Core\Form\FormStateInterface $form_state
    *   The form state.
    * @var string $resource_id
-   *   A string that identfies the REST resource.
+   *   A string that identifies the REST resource.
    *
    * @return array
    *   The form structure.
@@ -129,7 +142,9 @@ class RestUIForm extends ConfigFormBase {
       throw new NotFoundHttpException();
     }
 
-    $config = $this->config('rest.settings')->get('resources') ?: [];
+    $id = str_replace(':', '.', $resource_id);
+
+    $config = $this->config("rest.resource.{$id}")->get('configuration') ?: [];
     $methods = $plugin->availableMethods();
     $pluginDefinition = $plugin->getPluginDefinition();
     $form['#title'] = $this->t('Settings for resource %label', ['%label' => $pluginDefinition['label']]);
@@ -145,7 +160,7 @@ class RestUIForm extends ConfigFormBase {
       $group[$method] = array(
         '#title' => $method,
         '#type' => 'checkbox',
-        '#default_value' => isset($config[$resource_id][$method]),
+        '#default_value' => isset($config[$method]),
       );
       $group['settings'] = array(
         '#type' => 'container',
@@ -154,8 +169,8 @@ class RestUIForm extends ConfigFormBase {
 
       // Available request formats.
       $enabled_formats = array();
-      if (isset($config[$resource_id][$method]['supported_formats'])) {
-        $enabled_formats = $config[$resource_id][$method]['supported_formats'];
+      if (isset($config[$method]['supported_formats'])) {
+        $enabled_formats = $config[$method]['supported_formats'];
       }
       $group['settings']['formats'] = array(
         '#type' => 'checkboxes',
@@ -166,8 +181,8 @@ class RestUIForm extends ConfigFormBase {
 
       // Authentication providers.
       $enabled_auth = array();
-      if (isset($config[$resource_id][$method]['supported_auth'])) {
-        $enabled_auth = $config[$resource_id][$method]['supported_auth'];
+      if (isset($config[$method]['supported_auth'])) {
+        $enabled_auth = $config[$method]['supported_auth'];
       }
       $group['settings']['auth'] = array(
         '#title' => $this->t('Authentication providers'),
@@ -212,20 +227,33 @@ class RestUIForm extends ConfigFormBase {
    */
   public function submitForm(array &$form, FormStateInterface $form_state) {
     $methods = $form_state->getValue('methods');
-    $resource_id = $form_state->getValue('resource_id');
-    $config = $this->config('rest.settings');
-    $resources = $config->get('resources') ?: [];
-    // Reset the resource configuration.
-    $resources[$resource_id] = [];
+    $resource_id = $id = str_replace(':', '.', $form_state->getValue('resource_id'));
+    $config = $this->resourceConfigStorage->load($resource_id);
+
+    if (!$config) {
+      $config = $this->resourceConfigStorage->create([
+        'id' => $resource_id,
+        'granularity' => RestResourceConfigInterface::METHOD_GRANULARITY,
+        'configuration' => []
+      ]);
+    }
+
+    $configuration = $config->get('configuration') ?: [];
+
     foreach ($methods as $method => $settings) {
       if ($settings[$method]) {
-        $resources[$resource_id][$method] = [
+        $configuration[$method] = [
           'supported_formats' => array_keys(array_filter($settings['settings']['formats'])),
           'supported_auth' => array_keys(array_filter($settings['settings']['auth'])),
         ];
       }
+      else {
+        unset($configuration[$method]);
+      }
+
     }
-    $config->set('resources', $resources);
+
+    $config->set('configuration', $configuration);
     $config->save();
 
     // Rebuild routing cache.
