diff --git a/restui.module b/restui.module
index cd2139f..198aa30 100644
--- a/restui.module
+++ b/restui.module
@@ -24,7 +24,10 @@ function restui_theme() {
   return array(
     // List resources.
     'restui_resource_info' => array(
-      'variables' => array('resource' => array()),
+      'variables' => array(
+        'granularity' => array(),
+        'configuration' => array(),
+        ),
       'template' => 'restui-resource-info',
     ),
   );
diff --git a/src/Controller/RestUIController.php b/src/Controller/RestUIController.php
index 877ae84..c6cdeed 100644
--- a/src/Controller/RestUIController.php
+++ b/src/Controller/RestUIController.php
@@ -198,7 +198,8 @@ class RestUIController implements ContainerInjectionInterface {
 
           $list[$status]['table']['#rows'][$id]['data']['description']['data'] = array(
             '#theme' => 'restui_resource_info',
-            '#resource' => $config[$this->getResourceKey($id)]->get('configuration'),
+            '#granularity' => $config[$this->getResourceKey($id)]->get('granularity'),
+            '#configuration' => $config[$this->getResourceKey($id)]->get('configuration'),
           );
         }
       }
diff --git a/src/Form/RestUIForm.php b/src/Form/RestUIForm.php
index 9f86839..768b6fb 100644
--- a/src/Form/RestUIForm.php
+++ b/src/Form/RestUIForm.php
@@ -64,22 +64,28 @@ class RestUIForm extends ConfigFormBase {
   /**
    * Constructs a \Drupal\user\RestForm object.
    *
-   * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
+   * @param \Drupal\Core\Config\ConfigFactoryInterface                   $config_factory
    *   The config factory.
-   * @param \Drupal\Core\Extension\ModuleHandler $module_handler
+   * @param \Drupal\Core\Extension\ModuleHandler                         $module_handler
    *   The module handler.
    * @param \Drupal\Core\Authentication\AuthenticationCollectorInterface $authentication_collector
    *   The authentication collector.
-   * @param array $formats
+   * @param array                                                        $formats
    *   The available serialization formats.
-   * @param \Drupal\rest\Plugin\Type\ResourcePluginManager $resourcePluginManager
+   * @param \Drupal\rest\Plugin\Type\ResourcePluginManager               $resourcePluginManager
    *   The REST plugin manager.
-   * @param \Drupal\Core\Routing\RouteBuilderInterface $routeBuilder
+   * @param \Drupal\Core\Routing\RouteBuilderInterface                   $routeBuilder
    *   The route builder.
-   * @param \Drupal\Core\Entity\EntityStorageInterface $resource_config_storage
+   * @param \Drupal\Core\Entity\EntityStorageInterface                   $resource_config_storage
    *   The REST resource config storage.
    */
-  public function __construct(ConfigFactoryInterface $config_factory, ModuleHandler $module_handler, AuthenticationCollectorInterface $authentication_collector, array $formats, ResourcePluginManager $resourcePluginManager, RouteBuilderInterface $routeBuilder, EntityStorageInterface $resource_config_storage) {
+  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;
@@ -123,11 +129,11 @@ class RestUIForm extends ConfigFormBase {
   /**
    * {@inheritdoc}
    *
-   * @param array $form
+   * @param array                                $form
    *   The form array.
    * @param \Drupal\Core\Form\FormStateInterface $form_state
    *   The form state.
-   * @param string $resource_id
+   * @param string                               $resource_id
    *   A string that identifies the REST resource.
    *
    * @return array
@@ -136,7 +142,9 @@ class RestUIForm extends ConfigFormBase {
    * @throws \Symfony\Component\HttpKernel\Exception\NotFoundHttpException
    *   When no plugin found.
    */
-  public function buildForm(array $form, FormStateInterface $form_state, $resource_id = NULL) {
+  public function buildForm(
+    array $form, FormStateInterface $form_state, $resource_id = NULL
+  ) {
     $plugin = $this->resourcePluginManager->createInstance($resource_id);
     if (empty($plugin)) {
       throw new NotFoundHttpException();
@@ -147,32 +155,139 @@ class RestUIForm extends ConfigFormBase {
     $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']]);
+    $form['#title'] = $this->t(
+      'Settings for resource %label', ['%label' => $pluginDefinition['label']]
+    );
     $form['#tree'] = TRUE;
-    $form['resource_id'] = array('#type' => 'value', '#value' => $resource_id);
-    $form['methods'] = array('#type' => 'container');
+    $form['resource_id'] = array(
+      '#type' => 'value',
+      '#value' => $resource_id,
+    );
 
-    $authentication_providers = array_keys($this->authenticationCollector->getSortedProviders());
-    $authentication_providers = array_combine($authentication_providers, $authentication_providers);
+    $method_options = array_combine($methods, $methods);
+    $authentication_providers = array_keys(
+      $this->authenticationCollector->getSortedProviders()
+    );
+    $authentication_providers = array_combine(
+      $authentication_providers, $authentication_providers
+    );
     $format_options = array_combine($this->formats, $this->formats);
-    foreach ($methods as $method) {
-      $group = array();
-      $group[$method] = array(
-        '#title' => $method,
-        '#type' => 'checkbox',
-        '#default_value' => isset($config[$method]),
-      );
-      $group['settings'] = array(
-        '#type' => 'container',
-        '#attributes' => array('style' => 'padding-left:20px'),
+
+    // Granularity selection.
+    $granularity = $this->config("rest.resource.{$id}")->get('granularity');
+    if ($form_state->getValue('granularity')) {
+      // Form state takes priority over config.
+      $granularity = $form_state->getValue('granularity');
+    }
+
+    $form['granularity'] = array(
+      '#title' => t('Granularity'),
+      '#type' => 'select',
+      '#options' => array(
+        RestResourceConfigInterface::RESOURCE_GRANULARITY => $this->t(
+          'Resource'
+        ),
+        RestResourceConfigInterface::METHOD_GRANULARITY => $this->t('Method'),
+      ),
+      '#default_value' => $granularity,
+      '#ajax' => array(
+        'callback' => array($this, 'processAjaxForm'),
+        'wrapper' => 'wrapper',
+      ),
+    );
+
+    // Wrapper for ajax callback.
+    $form['wrapper'] = array(
+      '#type' => 'container',
+      '#attributes' => array('id' => 'wrapper'),
+    );
+
+    if ($granularity == RestResourceConfigInterface::METHOD_GRANULARITY) {
+      // Granularity is "Method".
+      foreach ($methods as $method) {
+        $group = array();
+
+        $group[$method] = array(
+          '#title' => $method,
+          '#type' => 'checkbox',
+          '#default_value' => isset($config[$method]),
+        );
+
+        $group['settings'] = array(
+          '#type' => 'container',
+          '#attributes' => array('style' => 'padding-left:20px'),
+        );
+
+        // Available request formats.
+        $enabled_formats = array();
+        if (isset($config[$method]['supported_formats'])) {
+          $enabled_formats = $config[$method]['supported_formats'];
+        }
+        $group['settings']['formats'] = array(
+          '#type' => 'checkboxes',
+          '#title' => $this->t('Accepted request formats'),
+          '#options' => $format_options,
+          '#default_value' => $enabled_formats,
+          '#states' => array(
+            'visible' => array(
+              ':input[name="wrapper[methods][' . $method . '][' . $method
+              . ']"]' => array('checked' => TRUE),
+            ),
+            'invisible' => array(
+              ':input[name="wrapper[methods][' . $method . '][' . $method
+              . ']"]' => array('checked' => FALSE),
+            ),
+          ),
+        );
+
+        // Authentication providers.
+        $enabled_auth = array();
+        if (isset($config[$method]['supported_auth'])) {
+          $enabled_auth = $config[$method]['supported_auth'];
+        }
+        $group['settings']['auth'] = array(
+          '#title' => $this->t('Authentication providers'),
+          '#type' => 'checkboxes',
+          '#options' => $authentication_providers,
+          '#default_value' => $enabled_auth,
+          '#states' => array(
+            'visible' => array(
+              ':input[name="wrapper[methods][' . $method . '][' . $method
+              . ']"]' => array('checked' => TRUE),
+            ),
+            'invisible' => array(
+              ':input[name="wrapper[methods][' . $method . '][' . $method
+              . ']"]' => array('checked' => FALSE),
+            ),
+          ),
+        );
+        $form['wrapper']['methods'][$method] = $group;
+      }
+    }
+    else {
+      // Granularity is "Resource".
+
+      // Set methods.
+      $enabled_methods = array();
+      foreach ($methods as $method) {
+        if (in_array($method, $config['methods'])) {
+          $enabled_methods[$method] = $method;
+        }
+      }
+      $form['wrapper']['settings']['methods'] = array(
+        '#type' => 'checkboxes',
+        '#title' => $this->t('Methods'),
+        '#options' => $method_options,
+        '#default_value' => $enabled_methods,
       );
 
-      // Available request formats.
+      // Formats.
       $enabled_formats = array();
-      if (isset($config[$method]['supported_formats'])) {
-        $enabled_formats = $config[$method]['supported_formats'];
+      if (isset($config['formats'])) {
+        $enabled_formats = $config['formats'];
       }
-      $group['settings']['formats'] = array(
+
+      $form['wrapper']['settings']['formats'] = array(
         '#type' => 'checkboxes',
         '#title' => $this->t('Accepted request formats'),
         '#options' => $format_options,
@@ -181,17 +296,18 @@ class RestUIForm extends ConfigFormBase {
 
       // Authentication providers.
       $enabled_auth = array();
-      if (isset($config[$method]['supported_auth'])) {
-        $enabled_auth = $config[$method]['supported_auth'];
+      if (isset($config['authentication'])) {
+        $enabled_auth = $config['authentication'];
       }
-      $group['settings']['auth'] = array(
+
+      $form['wrapper']['settings']['authentication'] = array(
         '#title' => $this->t('Authentication providers'),
         '#type' => 'checkboxes',
         '#options' => $authentication_providers,
         '#default_value' => $enabled_auth,
       );
-      $form['methods'][$method] = $group;
     }
+
     return parent::buildForm($form, $form_state);
   }
 
@@ -201,24 +317,55 @@ class RestUIForm extends ConfigFormBase {
    * @see \Drupal\rest\Routing\ResourceRoutes::alterRoutes()
    */
   public function validateForm(array &$form, FormStateInterface $form_state) {
-    // At least one method must be checked.
-    $method_checked = FALSE;
-    foreach ($form_state->getValue('methods') as $method => $values) {
-      if ($values[$method]) {
-        $method_checked = TRUE;
-        // At least one format and authentication provider must be selected.
-        $formats = array_filter($values['settings']['formats']);
-        if (empty($formats)) {
-          $form_state->setErrorByName('methods][' . $method . '][settings][formats', $this->t('At least one format must be selected for method @method.', array('@method' => $method)));
-        }
-        $auth = array_filter($values['settings']['auth']);
-        if (empty($auth)) {
-          $form_state->setErrorByName('methods][' . $method . '][settings][auth', $this->t('At least one authentication provider must be selected for method @method.', array('@method' => $method)));
-        }
+    if ($form_state->getValue('granularity') == RestResourceConfigInterface::RESOURCE_GRANULARITY) {
+      // Check if at least one method was selected.
+      $selected_methods = array_filter($form_state->getValue(array('wrapper', 'settings', 'methods')));
+      if (empty($selected_methods)) {
+        $form_state->setErrorByName('methods', $this->t('At least one HTTP method must be selected.'));
+      }
+      // Check if at least one format was selected.
+      $selected_formats = array_filter($form_state->getValue(array('wrapper', 'settings', 'formats')));
+      if (empty($selected_formats)) {
+        $form_state->setErrorByName('formats', $this->t('At least one request format must be selected.'));
+      }
+      // Check if at least one authentication method was selected.
+      $selected_authentication = array_filter($form_state->getValue(array('wrapper', 'settings', 'authentication')));
+      if (empty($selected_authentication)) {
+        $form_state->setErrorByName('authentication', $this->t('At least one authentication provider must be selected.'));
       }
     }
-    if (!$method_checked) {
-      $form_state->setErrorByName('methods', $this->t('At least one HTTP method must be selected'));
+    else {
+      foreach ($form_state->getValue(array('wrapper', 'methods')) as $method => $values) {
+        // At least one method must be checked.
+        $method_checked = FALSE;
+        if ($values[$method]) {
+          $method_checked = TRUE;
+          // At least one format and authentication provider must be selected.
+          $formats = array_filter($values['settings']['formats']);
+          if (empty($formats)) {
+            $form_state->setErrorByName(
+              'methods][' . $method . '][settings][formats', $this->t(
+              'At least one format must be selected for method @method.',
+              array('@method' => $method)
+            )
+            );
+          }
+          $auth = array_filter($values['settings']['auth']);
+          if (empty($auth)) {
+            $form_state->setErrorByName(
+              'methods][' . $method . '][settings][auth', $this->t(
+              'At least one authentication provider must be selected for method @method.',
+              array('@method' => $method)
+            )
+            );
+          }
+        }
+      }
+      if (!$method_checked) {
+        $form_state->setErrorByName(
+          'methods', $this->t('At least one HTTP method must be selected.')
+        );
+      }
     }
   }
 
@@ -226,31 +373,60 @@ class RestUIForm extends ConfigFormBase {
    * {@inheritdoc}
    */
   public function submitForm(array &$form, FormStateInterface $form_state) {
-    $methods = $form_state->getValue('methods');
     $resource_id = str_replace(':', '.', $form_state->getValue('resource_id'));
     $config = $this->resourceConfigStorage->load($resource_id);
+    $granularity = $form_state->getValue('granularity');
 
     if (!$config) {
-      $config = $this->resourceConfigStorage->create([
-        'id' => $resource_id,
-        'granularity' => RestResourceConfigInterface::METHOD_GRANULARITY,
-        'configuration' => [],
-      ]);
+      $config = $this->resourceConfigStorage->create(
+        [
+          'id' => $resource_id,
+          'granularity' => [],
+          'configuration' => [],
+        ]
+      );
     }
 
     $configuration = $config->get('configuration') ?: [];
 
-    foreach ($methods as $method => $settings) {
-      if ($settings[$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]);
+    if ($granularity == RestResourceConfigInterface::METHOD_GRANULARITY) {
+      // Granularity is "Method".
+      $methods = $form_state->getValue(array('wrapper', 'methods'));
+      foreach ($methods as $method => $values) {
+        if ($values[$method]) {
+          $configuration[$method] = [
+            'supported_formats' => array_keys(
+              array_filter($values['settings']['formats'])
+            ),
+            'supported_auth' => array_keys(
+              array_filter($values['settings']['auth'])
+            ),
+          ];
+        }
+        else {
+          unset($configuration[$method]);
+        }
       }
     }
+    else {
+      // Granularity is "Resource".
+      $configuration['methods'] = array_keys(
+        array_filter(
+          $form_state->getValue(array('wrapper', 'settings', 'methods'))
+        )
+      );
+      $configuration['formats'] = array_keys(
+        array_filter(
+          $form_state->getValue(array('wrapper', 'settings', 'formats'))
+        )
+      );
+      $configuration['authentication'] = array_keys(
+        array_filter(
+          $form_state->getValue(array('wrapper', 'settings', 'authentication'))
+        )
+      );
+    }
+    $config->set('granularity', $granularity);
     $config->set('configuration', $configuration);
     $config->save();
 
@@ -261,4 +437,18 @@ class RestUIForm extends ConfigFormBase {
     $form_state->setRedirect('restui.list');
   }
 
+  /**
+   * Return the settings part of the form when rebuilding through ajax.
+   *
+   * @param array                                $form
+   * @param \Drupal\Core\Form\FormStateInterface $form_state
+   *
+   * @return array
+   */
+  public function processAjaxForm(array $form, FormStateInterface &$form_state
+  ) {
+    return $form['wrapper'];
+  }
+
+
 }
diff --git a/templates/restui-resource-info.html.twig b/templates/restui-resource-info.html.twig
index e0a8b20..ce7c0f7 100644
--- a/templates/restui-resource-info.html.twig
+++ b/templates/restui-resource-info.html.twig
@@ -4,13 +4,22 @@
  * Default theme implementation for basic administrative info about a REST resource.
  *
  * Available variables:
- * - resource: array REST resource config.
+ * - granularity: string REST resource granularity.
+ * - configuration: array REST resource config.
  *
  * @ingroup themeable
  */
 #}
-{% for method, properties in resource %}
-  <p>{{ method }}</br>
-  authentication: {{ properties.supported_auth|join(', ') }}</br>
-  formats: {{ properties.supported_formats|join(', ') }}</p>
-{% endfor %}
+{% if granularity == 'resource' %}
+    <p>methods: {{ configuration.methods|join(', ') }}</br>
+        formats: {{ configuration.formats|join(', ') }}</br>
+        authentication: {{ configuration.authentication|join(', ') }}
+    </p>
+{% else %}
+    {% for method, properties in configuration %}
+        <p>{{ method }}</br>
+            formats: {{ properties.supported_formats|join(', ') }}</br>
+            authentication: {{ properties.supported_auth|join(', ') }}
+        </p>
+    {% endfor %}
+{% endif %}
