diff --git a/config/install/paragraphs.paragraphs_type.container.yml b/config/install/paragraphs.paragraphs_type.container.yml
index 16bce23..b61f940 100644
--- a/config/install/paragraphs.paragraphs_type.container.yml
+++ b/config/install/paragraphs.paragraphs_type.container.yml
@@ -9,6 +9,3 @@ dependencies:
 id: container
 label: 'Container'
 description: 'Use <em>Container</em> to group paragraphs to apply a common style.'
-behavior_plugins:
-  style:
-    enabled: true
diff --git a/config/schema/paragraphs_collection.schema.yml b/config/schema/paragraphs_collection.schema.yml
index 44aa228..348e908 100644
--- a/config/schema/paragraphs_collection.schema.yml
+++ b/config/schema/paragraphs_collection.schema.yml
@@ -1,12 +1,16 @@
 paragraphs.behavior.settings.style:
   type: paragraphs.behavior.settings_base
   mapping:
-    group:
-      type: string
-      label: Style group
-    default:
-      type: string
-      label: Default style
+    groups:
+      type: sequence
+      label: 'Style groups'
+      sequence:
+        type: mapping
+        label: 'Style groups configuration'
+        mapping:
+          default:
+            type: string
+            label: 'Default group style'
 
 paragraphs.behavior.settings.grid_layout:
   type: paragraphs.behavior.settings_base
diff --git a/modules/paragraphs_collection_demo/paragraphs_collection_demo.install b/modules/paragraphs_collection_demo/paragraphs_collection_demo.install
index 1f35529..9983872 100644
--- a/modules/paragraphs_collection_demo/paragraphs_collection_demo.install
+++ b/modules/paragraphs_collection_demo/paragraphs_collection_demo.install
@@ -82,11 +82,10 @@ function _paragraphs_collection_demo_add_background_plugin_field() {
     ],
     'style' => [
       'enabled' => TRUE,
-      'group' => '',
+      'groups' => ['general_group' => ['default' => '']],
     ],
   ]);
   $container->save();
-
 }
 
 /**
@@ -108,7 +107,7 @@ function _paragraphs_collection_demo_create_demo_article() {
     'type' => 'container',
     'paragraphs_container_paragraphs' => [$style_text_paragraph],
   ]);
-  $style_paragraph->setBehaviorSettings('style', ['style' => 'paragraphs-green']);
+  $style_paragraph->setBehaviorSettings('style', ['styles' => ['general_group' => 'paragraphs-green']]);
   $style_paragraph->save();
   $paragraphs[] = $style_paragraph;
 
diff --git a/modules/paragraphs_collection_demo/paragraphs_collection_demo.paragraphs.style.yml b/modules/paragraphs_collection_demo/paragraphs_collection_demo.paragraphs.style.yml
index 52550f5..0b38382 100644
--- a/modules/paragraphs_collection_demo/paragraphs_collection_demo.paragraphs.style.yml
+++ b/modules/paragraphs_collection_demo/paragraphs_collection_demo.paragraphs.style.yml
@@ -2,27 +2,27 @@ paragraphs-green:
   title: 'Green'
   description: 'Green background with white font color, text centered.'
   groups:
-    - 'General Group'
+    - general_group
   libraries:
     - 'paragraphs_collection_demo/style'
 paragraphs-blue:
   title: 'Blue'
   description: 'Blue background with white font color, text centered.'
   groups:
-    - 'General Group'
+    - general_group
   libraries:
     - 'paragraphs_collection_demo/style'
 paragraphs-slideshow-light:
   title: 'Slideshow Light'
   description: 'Light blue background with centered text.'
   groups:
-    - 'Slideshow Group'
+    - slideshow_group
   libraries:
     - 'paragraphs_collection_demo/style'
 paragraphs-slideshow-dark:
   title: 'Slideshow Dark'
   description: 'Dark blue background with centered text.'
   groups:
-    - 'Slideshow Group'
+    - slideshow_group
   libraries:
     - 'paragraphs_collection_demo/style'
diff --git a/modules/paragraphs_collection_demo/paragraphs_collection_demo.paragraphs.style_group.yml b/modules/paragraphs_collection_demo/paragraphs_collection_demo.paragraphs.style_group.yml
new file mode 100644
index 0000000..379aea7
--- /dev/null
+++ b/modules/paragraphs_collection_demo/paragraphs_collection_demo.paragraphs.style_group.yml
@@ -0,0 +1,4 @@
+general_group:
+  label: 'General Group'
+slideshow_group:
+  label: 'Slideshow Group'
diff --git a/modules/paragraphs_collection_demo/src/Tests/ParagraphsCollectionDemoTest.php b/modules/paragraphs_collection_demo/src/Tests/ParagraphsCollectionDemoTest.php
index 2899252..725e88a 100644
--- a/modules/paragraphs_collection_demo/src/Tests/ParagraphsCollectionDemoTest.php
+++ b/modules/paragraphs_collection_demo/src/Tests/ParagraphsCollectionDemoTest.php
@@ -36,7 +36,10 @@ class ParagraphsCollectionDemoTest extends ParagraphsExperimentalTestBase {
     $this->drupalGet('admin/structure/paragraphs_type/container');
     $this->assertText('Container');
     $this->assertFieldChecked('edit-behavior-plugins-style-enabled');
-    $this->assertFieldById('edit-behavior-plugins-style-settings-group', '');
+    $this->assertOptionSelected('edit-behavior-plugins-style-settings-groups', 'general_group');
+    $this->assertNoOptionSelected('edit-behavior-plugins-style-settings-groups', 'slideshow_group');
+    $options = $this->xpath('//*[@id="edit-behavior-plugins-style-settings-groups"]/option');
+    $this->assertEqual(2, count($options));
     // @todo When other plugins are available, add assertion.
 
     $this->drupalGet('admin/structure/paragraphs_type/text');
@@ -95,20 +98,26 @@ class ParagraphsCollectionDemoTest extends ParagraphsExperimentalTestBase {
     $node->save();
 
     // Use green style for this container.
-    $paragraph->setBehaviorSettings('style', ['style' => 'paragraphs-green']);
+    $paragraph->setBehaviorSettings('style', ['styles' => ['general_group' => 'paragraphs-green']]);
     $paragraph->save();
 
     // Check the applied style on the paragraph.
     $this->drupalGet('node/' . $node->id());
-    $this->assertRaw('class="paragraphs-behavior-style--paragraphs-green paragraphs-behavior-background paragraph paragraph--type--container paragraph--view-mode--default"');
+    $this->assertRaw('paragraphs-behavior-background');
+    $this->assertRaw('paragraphs-behavior-style--paragraphs-green');
+    $this->assertRaw('paragraph--type--container');
+    $this->assertRaw('paragraph--view-mode--default');
 
     // Use blue style for the container.
-    $paragraph->setBehaviorSettings('style', ['style' => 'paragraphs-blue']);
+    $paragraph->setBehaviorSettings('style', ['styles' => ['general_group' => 'paragraphs-blue']]);
     $paragraph->save();
 
     // Check that the blue style is applied on the paragraph.
     $this->drupalGet('node/' . $node->id());
-    $this->assertRaw('class="paragraphs-behavior-style--paragraphs-blue paragraphs-behavior-background paragraph paragraph--type--container paragraph--view-mode--default"');
+    $this->assertRaw('paragraphs-behavior-background');
+    $this->assertRaw('paragraphs-behavior-style--paragraphs-blue');
+    $this->assertRaw('paragraph--type--container');
+    $this->assertRaw('paragraph--view-mode--default');
   }
 
   /**
diff --git a/modules/paragraphs_collection_test/paragraphs_collection_test.paragraphs.style.yml b/modules/paragraphs_collection_test/paragraphs_collection_test.paragraphs.style.yml
index a821fc3..14dfa07 100644
--- a/modules/paragraphs_collection_test/paragraphs_collection_test.paragraphs.style.yml
+++ b/modules/paragraphs_collection_test/paragraphs_collection_test.paragraphs.style.yml
@@ -2,7 +2,7 @@ regular:
   title: 'Regular'
   description: 'Default style.'
   groups:
-    - 'Regular Test Group'
+    - regular_test_group
   libraries:
     - 'paragraphs_collection_test/style'
   classes:
@@ -13,29 +13,23 @@ bold:
   title: 'Bold'
   description: 'Bold text.'
   groups:
-    - 'Bold Test Group'
-    - 'Italic Test Group'
-    - 'Underline Test Group'
-    - 'Regular Test Group'
+    - bold_test_group
+    - italic_test_group
+    - underline_test_group
+    - regular_test_group
   libraries:
     - 'paragraphs_collection_test/style'
 italic:
   title: 'Italic'
   description: 'Italic text.'
   groups:
-    - 'Italic Test Group'
+    - italic_test_group
   libraries:
     - 'paragraphs_collection_test/style'
 underline:
   title: 'Underline'
   description: 'Underlined text.'
   groups:
-    - 'Underline Test Group'
-  libraries:
-    - 'paragraphs_collection_test/style'
-groupless:
-  title: 'Groupless'
-  description: 'A test style that does not belong to any style groups.'
-  groups: [  ]
+    - underline_test_group
   libraries:
     - 'paragraphs_collection_test/style'
diff --git a/modules/paragraphs_collection_test/paragraphs_collection_test.paragraphs.style_group.yml b/modules/paragraphs_collection_test/paragraphs_collection_test.paragraphs.style_group.yml
new file mode 100644
index 0000000..ba24d0a
--- /dev/null
+++ b/modules/paragraphs_collection_test/paragraphs_collection_test.paragraphs.style_group.yml
@@ -0,0 +1,8 @@
+regular_test_group:
+  label: 'Regular Test Group'
+bold_test_group:
+  label: 'Bold Test Group'
+italic_test_group:
+  label: 'Italic Test Group'
+underline_test_group:
+  label: 'Underline Test Group'
diff --git a/paragraphs_collection.install b/paragraphs_collection.install
index e43c56c..a8abcf5 100644
--- a/paragraphs_collection.install
+++ b/paragraphs_collection.install
@@ -4,6 +4,8 @@
  * Installation hooks for paragraphs collection module.
  */
 
+use Drupal\paragraphs\Entity\ParagraphsType;
+
 /**
  * Add default config for enabled styles.
  */
@@ -13,3 +15,38 @@ function paragraphs_collection_update_8001() {
     ->set('enabled_styles', [])
     ->save();
 }
+
+/**
+ * Update style plugin config of Paragraph types.
+ */
+function paragraphs_collection_update_8002() {
+  // Clear group and style collection caches.
+  \Drupal::cache('discovery')->deleteMultiple(['paragraphs_collection_style', 'paragraphs_collection_style_group']);
+  // Get all groups id.
+  $groups = \Drupal::service('paragraphs_collection.style_discovery')->getStyleGroups();
+  $group_ids = [];
+  foreach ($groups as $group) {
+    $group_ids[$group->getUntranslatedString()] = strtolower(str_replace(' ', '_', $group->getUntranslatedString()));
+  }
+  $config_factory = \Drupal::configFactory();
+  // Loop over all paragraph types.
+  foreach ($config_factory->listAll('paragraphs.paragraphs_type.') as $name) {
+    $paragraph_type = $config_factory->getEditable($name);
+    if ($paragraph_type->get('behavior_plugins.style')) {
+      $default = '';
+      // Get the old configuration if the style plugins was enabled.
+      if (!empty($group = $paragraph_type->get('behavior_plugins.style.group')) && isset($group_ids[$paragraph_type->get('behavior_plugins.style.group')])) {
+        $default_style = $paragraph_type->get('behavior_plugins.style.default');
+        if ($style = \Drupal::service('paragraphs_collection.style_discovery')->getStyle($default_style)) {
+          if (in_array($group_ids[$group], $style['groups'])) {
+            $default = $default_style;
+          }
+        }
+        $paragraph_type->set('behavior_plugins.style.groups.' . $group_ids[$group] . '.default', $default);
+        $paragraph_type->clear('behavior_plugins.style.group');
+        $paragraph_type->clear('behavior_plugins.style.default');
+        $paragraph_type->save();
+      }
+    }
+  }
+}
diff --git a/paragraphs_collection.module b/paragraphs_collection.module
index 41f4a0b..dc952ab 100644
--- a/paragraphs_collection.module
+++ b/paragraphs_collection.module
@@ -68,7 +68,7 @@ function paragraphs_collection_theme() {
  * * Implements hook_modules_installed().
  */
 function paragraphs_collection_modules_installed($modules) {
-  \Drupal::cache('discovery')->deleteMultiple(['paragraphs_collection_grid_layouts', 'paragraphs_collection_style']);
+  \Drupal::cache('discovery')->deleteMultiple(['paragraphs_collection_grid_layouts', 'paragraphs_collection_style', 'paragraphs_collection_style_group']);
 }
 
 /**
diff --git a/src/Controller/OverviewController.php b/src/Controller/OverviewController.php
index 281278c..43a7c6d 100644
--- a/src/Controller/OverviewController.php
+++ b/src/Controller/OverviewController.php
@@ -200,7 +200,7 @@ class OverviewController extends ControllerBase {
       /** @var ParagraphsType $paragraphs_type */
       $configuration = $paragraphs_type->getBehaviorPlugin('style')->getConfiguration();
       if (isset($configuration['enabled']) && $configuration['enabled']) {
-        $styles_grouped_by_paragraphs_types[$paragraph_type_id] = $configuration['group'];
+        $styles_grouped_by_paragraphs_types[$paragraph_type_id] = array_keys($configuration['groups']);
       }
     }
 
@@ -214,9 +214,12 @@ class OverviewController extends ControllerBase {
     $paragraphs_types_grouped_by_styles = [];
     foreach ($styles as $style_id => $style) {
       $paragraphs_types_grouped_by_styles[$style_id] = [];
-      foreach ($styles_grouped_by_paragraphs_types as $paragraphs_type_id => $used_style_group) {
-        $enabled_styles = array_keys($this->styleDiscovery->getStyleOptions($used_style_group));
-        if (in_array($style_id, $enabled_styles)) {
+      foreach ($styles_grouped_by_paragraphs_types as $paragraphs_type_id => $used_style_groups) {
+        $enabled_styles = [];
+        foreach ($used_style_groups as $used_style_group) {
+          $enabled_styles += $this->styleDiscovery->getStyleOptions($used_style_group);
+        }
+        if (in_array($style_id, array_keys($enabled_styles))) {
           $paragraphs_types_grouped_by_styles[$style_id][$paragraphs_type_id] = $paragraphs_types[$paragraphs_type_id];
         }
       }
diff --git a/src/Plugin/paragraphs/Behavior/ParagraphsStylePlugin.php b/src/Plugin/paragraphs/Behavior/ParagraphsStylePlugin.php
index f111814..4c7438b 100644
--- a/src/Plugin/paragraphs/Behavior/ParagraphsStylePlugin.php
+++ b/src/Plugin/paragraphs/Behavior/ParagraphsStylePlugin.php
@@ -10,7 +10,6 @@ use Drupal\Core\Entity\EntityFieldManager;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
 use Drupal\paragraphs\Entity\Paragraph;
-use Drupal\paragraphs\Entity\ParagraphsType;
 use Drupal\paragraphs\ParagraphInterface;
 use Drupal\paragraphs\ParagraphsBehaviorBase;
 use Drupal\paragraphs_collection\StyleDiscoveryInterface;
@@ -81,16 +80,22 @@ class ParagraphsStylePlugin extends ParagraphsBehaviorBase implements ContainerF
         'id' => $wrapper_id,
       ],
     ];
-    $form['style_wrapper']['style'] = [
-      '#type' => 'select',
-      '#options' => $this->getStyleOptions($this->configuration['group'], $this->configuration['default']),
-      '#default_value' => $paragraph->getBehaviorSetting($this->getPluginId(), 'style', $this->configuration['default']),
-      '#title' => !empty($this->configuration['group']) ? t('%group Style', ['%group' => $this->configuration['group']]) : t('Style'),
-      '#attributes' => ['class' => ['paragraphs-style']],
-    ];
-    // Allow empty option in case there is no default style configured.
-    if (!$this->configuration['default']) {
-      $form['style_wrapper']['style']['#empty_option'] = $this->t('- Default -');
+    foreach ($this->configuration['groups'] as $group_id => $default) {
+      $plugin_default = '';
+      if (isset($this->configuration['groups'][$group_id]['default'])) {
+        $plugin_default = $this->configuration['groups'][$group_id]['default'];
+      }
+      $form['style_wrapper']['styles'][$group_id] = [
+        '#type' => 'select',
+        '#title' => $this->t('%group Style', ['%group' => $this->yamlStyleDiscovery->getGroupLabel($group_id)]),
+        '#options' => $this->getStyleOptions($group_id, $plugin_default),
+        '#default_value' => $paragraph->getBehaviorSetting($this->getPluginId(), ['styles', $group_id], $this->configuration['groups'][$group_id]['default']),
+        '#attributes' => ['class' => ['paragraphs-style']],
+      ];
+      // Allow empty option in case there is no default style configured.
+      if (empty($plugin_default)) {
+        $form['style_wrapper']['styles'][$group_id]['#empty_option'] = $this->t('- Default -');
+      }
     }
 
     return $form;
@@ -129,31 +134,43 @@ class ParagraphsStylePlugin extends ParagraphsBehaviorBase implements ContainerF
    * {@inheritdoc}
    */
   public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
-    $form['group'] = [
+    $form['groups'] = [
       '#type' => 'select',
-      '#empty_option' => $this->t('- None -'),
+      '#title' => $this->t('Style groups'),
+      '#multiple' => TRUE,
       '#options' => $this->yamlStyleDiscovery->getStyleGroups(),
-      '#title' => $this->t('Style group'),
-      '#description' => $this->t('Restrict available styles to a certain style group. Select "- None -" to allow all styles.'),
-      '#default_value' => $this->configuration['group'],
+      '#description' => $this->t('Restrict available styles to a certain style group. Select none to allow all styles.'),
+      '#default_value' => array_keys($this->configuration['groups']),
       '#ajax' => [
         'callback' => [$this, 'updateDefaultStyle'],
         'wrapper' => 'style-wrapper',
       ],
     ];
     // @todo: Remove getCompleteFormState() after https://www.drupal.org/project/drupal/issues/2798261.
-    $group_key = ['behavior_plugins', $this->getPluginId(), 'settings', 'group'];
-    $group = $form_state->getCompleteFormState()->getValue($group_key, $this->configuration['group']);
-    $form['default'] = [
-      '#type' => 'select',
-      '#empty_option' => $this->t('- None -'),
-      '#options' => $this->yamlStyleDiscovery->getStyleOptions($group),
-      '#title' => $this->t('Default style'),
-      '#description' => $this->t('This style will be default option on a behavior form.'),
-      '#default_value' => $this->configuration['default'],
+    $group_key = ['behavior_plugins', $this->getPluginId(), 'settings', 'groups'];
+    $groups = $form_state->getCompleteFormState()->getValue($group_key, $this->configuration['groups']);
+    $form['groups_defaults'] = [
+      '#type' => 'container',
       '#prefix' => '<div id="style-wrapper">',
       '#suffix' => '</div>',
     ];
+
+    foreach ($groups as $group_id => $group_default) {
+      $default = '';
+      if (!empty($this->configuration['groups'][$group_id]['default'])) {
+        $default = $this->configuration['groups'][$group_id]['default'];
+      }
+      $group_label = $this->yamlStyleDiscovery->getGroupLabel($group_id);
+      $form['groups_defaults'][$group_id]['default'] = [
+        '#type' => 'select',
+        '#title' => $this->t($group_label . ' default style'),
+        '#empty_option' => $this->t('- None -'),
+        '#options' => $this->yamlStyleDiscovery->getStyleOptions($group_id),
+        '#description' => $this->t('This style will be default option on a behavior form.'),
+        '#default_value' => $default,
+      ];
+    }
+
     return $form;
   }
 
@@ -164,7 +181,7 @@ class ParagraphsStylePlugin extends ParagraphsBehaviorBase implements ContainerF
     $group_select = $form_state->getTriggeringElement();
     // Gets the behavior plugin settings form.
     $settings_form = NestedArray::getValue($form, array_slice($group_select['#array_parents'], 0, -1));
-    return $settings_form['default'];
+    return $settings_form['groups_defaults'];
   }
 
   /**
@@ -175,14 +192,16 @@ class ParagraphsStylePlugin extends ParagraphsBehaviorBase implements ContainerF
     if (empty($this->yamlStyleDiscovery->getStyleGroups())) {
       $form_state->setErrorByName('message', $this->t('There is no style group available, the style plugin can not be enabled.'));
     }
+    if (!$form_state->getValue('groups')) {
+      $form_state->setErrorByName('groups', $this->t('The style plugin cannot be enabled if no groups are selected.'));
+    }
   }
 
   /**
    * {@inheritdoc}
    */
   public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
-    $this->configuration['group'] = $form_state->getValue('group');
-    $this->configuration['default'] = $form_state->getValue('default');
+    $this->configuration['groups'] = $form_state->getValue('groups_defaults');
   }
 
   /**
@@ -190,8 +209,7 @@ class ParagraphsStylePlugin extends ParagraphsBehaviorBase implements ContainerF
    */
   public function defaultConfiguration() {
     return [
-      'group' => '',
-      'default' => '',
+      'groups' => [],
     ];
   }
 
@@ -201,34 +219,46 @@ class ParagraphsStylePlugin extends ParagraphsBehaviorBase implements ContainerF
   public function view(array &$build, Paragraph $paragraph, EntityViewDisplayInterface $display, $view_mode) {
     // In case the current style is not set, fallback to the default style.
     // If default style is set to none, no style will be applied.
-    $paragraph_style = $paragraph->getBehaviorSetting($this->getPluginId(), 'style', $this->configuration['default']);
-    $style = $this->yamlStyleDiscovery->getStyle($paragraph_style, $this->configuration['default']);
-    if ($style) {
-      $build['#attributes']['class'][] = 'paragraphs-behavior-' . $this->getPluginId() . '--' . $style['name'];
-      if (!isset($build['#attached']['library'])) {
-        $build['#attached']['library'] = [];
-      }
-      $build['#attached']['library'] = array_merge($style['libraries'], $build['#attached']['library']);
+    $paragraph_styles = [];
+    foreach ($this->configuration['groups'] as $key => $value) {
+      $paragraph_styles[$key] = $paragraph->getBehaviorSetting($this->getPluginId(), ['styles', $key], $this->configuration['groups'][$key]['default']);
+    }
+    foreach ($paragraph_styles as $key => $value) {
+      $style = $this->yamlStyleDiscovery->getStyle($value, $this->configuration['groups'][$key]['default']);
+      if ($style) {
+        $build['#attributes']['class'][] = 'paragraphs-behavior-' . $this->getPluginId() . '--' . $style['name'];
+        if (!isset($build['#attached']['library'])) {
+          $build['#attached']['library'] = [];
+        }
+        $build['#attached']['library'] = array_merge($style['libraries'], $build['#attached']['library']);
 
-      // Add CSS classes from style configuration if they are defined.
-      if (!empty($style['classes'])) {
-        $build['#attributes']['class'] = array_merge($style['classes'], $build['#attributes']['class']);
+        // Add CSS classes from style configuration if they are defined.
+        if (!empty($style['classes'])) {
+          $build['#attributes']['class'] = array_merge($style['classes'], $build['#attributes']['class']);
+        }
       }
     }
   }
 
-   /**
-    * {@inheritdoc}
-    */
-   public function settingsSummary(Paragraph $paragraph) {
-     $styles = $this->yamlStyleDiscovery->getStyleOptions();
-     if ($style = $paragraph->getBehaviorSetting($this->getPluginId(), 'style')) {
-       if ($style != $this->configuration['default']) {
-         return [$this->t('Style: @style', ['@style' => $styles[$style]])];
-       }
-     }
-     return [];
-   }
+  /**
+   * {@inheritdoc}
+   */
+  public function settingsSummary(Paragraph $paragraph) {
+    $style_options = $this->yamlStyleDiscovery->getStyleOptions();
+    $summary = [];
+    if ($styles = $paragraph->getBehaviorSetting($this->getPluginId(), 'styles')) {
+      foreach ($styles as $group_id => $style) {
+        if (!isset($this->configuration['groups'][$group_id]) || $style != $this->configuration['groups'][$group_id]['default']) {
+          $summary[] = $this->t('@group: @style', [
+            '@group' => $this->yamlStyleDiscovery->getGroupLabel($group_id),
+            '@style' => $style_options[$style]
+          ]);
+        }
+      }
+      return !empty($summary) ? [implode($summary, ', ')] : [];
+    }
+    return [];
+  }
 
   /**
    * Ajax callback for loading the style description for the currently
@@ -269,8 +299,8 @@ class ParagraphsStylePlugin extends ParagraphsBehaviorBase implements ContainerF
    */
   public static function getStyleTemplate(ParagraphInterface $paragraph) {
     if ($paragraph->getParagraphType()->hasEnabledBehaviorPlugin('style')) {
-      $default = $paragraph->getParagraphType()->getBehaviorPlugin('style')->getConfiguration()['default'];
-      if ($paragraph_style = $paragraph->getBehaviorSetting('style', 'style', $default)) {
+      $defaults = $paragraph->getParagraphType()->getBehaviorPlugin('style')->getConfiguration()['groups'];
+      if ($paragraph_style = $paragraph->getBehaviorSetting('style', ['styles', key($defaults)], reset($defaults)['default'])) {
         $style = \Drupal::service('paragraphs_collection.style_discovery')
           ->getStyle($paragraph_style);
         if (!empty($style['template'])) {
diff --git a/src/StyleDiscovery.php b/src/StyleDiscovery.php
index aae5828..476ce74 100644
--- a/src/StyleDiscovery.php
+++ b/src/StyleDiscovery.php
@@ -102,7 +102,7 @@ class StyleDiscovery implements StyleDiscoveryInterface {
     $enabled_styles = $this->configFactory->get('paragraphs_collection.settings')->get('enabled_styles');
     foreach ($style_collection as $style => $definition) {
       if (empty($enabled_styles) || in_array($style, $enabled_styles)) {
-        if ((empty($group) || in_array($group, $definition['groups']))) {
+        if (empty($group) || in_array($group, $definition['groups'])) {
           $options[$style] = $definition['title'];
         }
       }
@@ -165,41 +165,69 @@ class StyleDiscovery implements StyleDiscoveryInterface {
   }
 
   /**
+   * Gets the YAML discovery.
+   *
+   * @return \Drupal\Core\Discovery\YamlDiscovery
+   *   The YAML discovery.
+   */
+  protected function getYamlDiscovery() {
+    return new YamlDiscovery('paragraphs.style', $this->moduleHandler->getModuleDirectories() + $this->themeHandler->getThemeDirectories());
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getLibraries($style) {
+    $collection = $this->getStyles();
+    return $collection[$style]['libraries'];
+  }
+
+  /**
    * {@inheritdoc}
    */
   public function getStyleGroups() {
+    $cache_id = 'paragraphs_collection_style_group';
     if ($this->groupCollection !== NULL) {
       return $this->groupCollection;
     }
-    else if (!empty($styles = $this->getStyles())) {
-      foreach ($styles as $style => $definition) {
-        foreach ($definition['groups'] as $group) {
-          $this->groupCollection[$group] = $group;
-        }
-      }
+    else if ($cached = $this->cache->get($cache_id)) {
+      $this->groupCollection = $cached->data;
     }
     else {
+      $yaml_discovery = $this->getYamlGroupDiscovery();
       $this->groupCollection = [];
+      foreach ($yaml_discovery->findAll() as $module => $groups) {
+        foreach ($groups as $group => $definition) {
+          if (empty($definition['label'])) {
+            throw new InvalidStyleException('The "label" of "' . $group . '" must be non-empty.');
+          }
+          $this->groupCollection[$group] = $this->t($definition['label']);
+        }
+      }
+      $this->cache->set($cache_id, $this->groupCollection);
     }
     return $this->groupCollection;
   }
 
   /**
-   * Gets the YAML discovery.
-   *
-   * @return \Drupal\Core\Discovery\YamlDiscovery
-   *   The YAML discovery.
+   * {@inheritdoc}
    */
-  protected function getYamlDiscovery() {
-    return new YamlDiscovery('paragraphs.style', $this->moduleHandler->getModuleDirectories() + $this->themeHandler->getThemeDirectories());
+  public function getGroupLabel($group_id) {
+    $groups = $this->getStyleGroups();
+    if (in_array($group_id, array_keys($groups))) {
+      return $groups[$group_id];
+    }
+    return NULL;
   }
 
   /**
-   * {@inheritdoc}
+   * Gets the YAML group discovery.
+   *
+   * @return \Drupal\Core\Discovery\YamlDiscovery
+   *   The YAML discovery.
    */
-  public function getLibraries($style) {
-    $collection = $this->getStyles();
-    return $collection[$style]['libraries'];
+  protected function getYamlGroupDiscovery() {
+    return new YamlDiscovery('paragraphs.style_group', $this->moduleHandler->getModuleDirectories() + $this->themeHandler->getThemeDirectories());
   }
 
 }
diff --git a/src/StyleDiscoveryInterface.php b/src/StyleDiscoveryInterface.php
index bb1d0de..f3c83cf 100644
--- a/src/StyleDiscoveryInterface.php
+++ b/src/StyleDiscoveryInterface.php
@@ -61,4 +61,15 @@ interface StyleDiscoveryInterface {
    */
   public function getStyle($style, $default = NULL);
 
+  /**
+   * Gets group label.
+   *
+   * @param string $group_id
+   *   The group id.
+   *
+   * @return string
+   *   The translatable group label.
+   */
+  public function getGroupLabel($group_id);
+
 }
diff --git a/src/Tests/ParagraphsCollectionOverviewTest.php b/src/Tests/ParagraphsCollectionOverviewTest.php
index fbe9c68..bf5a9f3 100644
--- a/src/Tests/ParagraphsCollectionOverviewTest.php
+++ b/src/Tests/ParagraphsCollectionOverviewTest.php
@@ -84,13 +84,6 @@ class ParagraphsCollectionOverviewTest extends ParagraphsExperimentalTestBase {
     $this->assertLink('Layouts');
     $this->assertLink('Styles');
 
-    // Check that the groupless style from Paragraph Collection Test is being
-    // displayed in the styles overview.
-    $this->drupalGet('/admin/reports/paragraphs_collection/styles');
-    $this->assertText('Groupless');
-    $this->assertText('groupless');
-    $this->assertText('A test style that does not belong to any style groups.');
-
     // Disable the grid layout and style plugins for all paragraphs types.
     $paragraph_type_ids = \Drupal::entityQuery('paragraphs_type')->execute();
     $paragraphs_types = ParagraphsType::loadMultiple($paragraph_type_ids);
diff --git a/src/Tests/ParagraphsStylePluginTest.php b/src/Tests/ParagraphsStylePluginTest.php
index 78f6c86..d232dc1 100644
--- a/src/Tests/ParagraphsStylePluginTest.php
+++ b/src/Tests/ParagraphsStylePluginTest.php
@@ -48,12 +48,20 @@ class ParagraphsStylePluginTest extends ParagraphsExperimentalTestBase {
     // Add a text field.
     $this->fieldUIAddExistingField('admin/structure/paragraphs_type/' . $paragraph_type, 'paragraphs_text', $paragraph_type);
     $this->drupalGet('admin/structure/paragraphs_type/' . $paragraph_type);
-    $this->assertFieldByName('behavior_plugins[style][settings][group]', '');
-    $this->assertFieldByName('behavior_plugins[style][settings][default]', '');
+    $this->assertFieldByName('behavior_plugins[style][settings][groups][]');
     $edit = [
       'behavior_plugins[style][enabled]' => TRUE,
-      'behavior_plugins[style][settings][group]' => '',
-      'behavior_plugins[style][settings][default]' => '',
+      'behavior_plugins[style][settings][groups][]' => [],
+    ];
+    $this->drupalPostForm(NULL, $edit, t('Save'));
+    $this->assertText('The style plugin cannot be enabled if no groups are selected.');
+    $edit = [
+      'behavior_plugins[style][settings][groups][]' => ['regular_test_group'],
+    ];
+    $this->drupalPostAjaxForm(NULL, $edit, 'behavior_plugins[style][settings][groups][]');
+    $edit = [
+      'behavior_plugins[style][settings][groups][]' => ['regular_test_group'],
+      'behavior_plugins[style][settings][groups_defaults][regular_test_group][default]' => '',
     ];
     $this->drupalPostForm(NULL, $edit, t('Save'));
 
@@ -63,43 +71,31 @@ class ParagraphsStylePluginTest extends ParagraphsExperimentalTestBase {
 
     // Check that we have style plugin.
     $this->assertText('Style');
-    $this->assertField('paragraphs[0][behavior_plugins][style][style_wrapper][style]');
-
-    // Check that a style without a style group is available.
-    $options = $this->xpath('//select[@name=:name]//option[normalize-space(text())=:text]', [
-      ':name' => 'paragraphs[0][behavior_plugins][style][style_wrapper][style]',
-      ':text' => 'Groupless',
-    ]);
-    $this->assertTrue(isset($options[0]), 'Groupless style available.');
+    $this->assertField('paragraphs[0][behavior_plugins][style][style_wrapper][styles][regular_test_group]');
 
     // Check that the style options are sorted alphabetically.
     $styles = $this->xpath('//select[contains(@id, :id)]', [':id' => 'edit-paragraphs-0-behavior-plugins-style-style']);
     $this->assertEqual('- Default -', $styles[0]->option[0]);
     $this->assertEqual('Bold', $styles[0]->option[1]);
-    $this->assertEqual('Groupless', $styles[0]->option[2]);
-    $this->assertEqual('Italic', $styles[0]->option[3]);
-    $this->assertEqual('Regular', $styles[0]->option[4]);
-    $this->assertEqual('Underline', $styles[0]->option[5]);
+    $this->assertEqual('Regular', $styles[0]->option[2]);
 
     // Restrict the paragraphs type to the "Italic Test Group" style group.
     $this->drupalGet('admin/structure/paragraphs_type/' . $paragraph_type);
-    $this->assertFieldByName('behavior_plugins[style][settings][group]', '');
+    $this->assertFieldByName('behavior_plugins[style][settings][groups][]');
     $edit = [
       'behavior_plugins[style][enabled]' => TRUE,
-      'behavior_plugins[style][settings][group]' => 'Italic Test Group',
+      'behavior_plugins[style][settings][groups][]' => ['italic_test_group'],
+    ];
+    $this->drupalPostAjaxForm(NULL, $edit, 'behavior_plugins[style][settings][groups][]');
+    $edit = [
+      'behavior_plugins[style][settings][groups][]' => ['italic_test_group'],
+      'behavior_plugins[style][settings][groups_defaults][italic_test_group][default]' => '',
     ];
     $this->drupalPostForm(NULL, $edit, t('Save'));
 
     // Check that the style without a style group is no longer available.
     $this->drupalGet('node/add/paragraphed_test');
     $this->drupalPostAjaxForm(NULL, [], 'paragraphs_test_style_plugin_add_more');
-    $this->assertText('Style');
-    $this->assertField('paragraphs[0][behavior_plugins][style][style_wrapper][style]');
-    $options = $this->xpath('//select[@name=:name]//option[normalize-space(text())=:text]', [
-      ':name' => 'paragraphs[0][behavior_plugins][style][style_wrapper][style]',
-      ':text' => 'Groupless',
-    ]);
-    $this->assertTrue(!isset($options[0]), 'Groupless style not available.');
 
     // Since Italic Group defines only two styles, assert that only they appear.
     $styles = $this->xpath('//select[contains(@id, :id)]', [':id' => 'edit-paragraphs-0-behavior-plugins-style-style']);
@@ -110,14 +106,14 @@ class ParagraphsStylePluginTest extends ParagraphsExperimentalTestBase {
 
     // Configure Regular as a default style.
     $this->drupalGet('admin/structure/paragraphs_type/' . $paragraph_type);
-    $this->assertFieldByName('behavior_plugins[style][settings][default]', '');
+    $this->assertFieldByName('behavior_plugins[style][settings][groups_defaults][italic_test_group][default]', '');
     $edit = [
-      'behavior_plugins[style][settings][group]' => 'Regular Test Group',
+      'behavior_plugins[style][settings][groups][]' => ['regular_test_group'],
     ];
-    $this->drupalPostAjaxForm(NULL, $edit, 'behavior_plugins[style][settings][group]');
+    $this->drupalPostAjaxForm(NULL, $edit, 'behavior_plugins[style][settings][groups][]');
     $edit = [
-      'behavior_plugins[style][settings][group]' => 'Regular Test Group',
-      'behavior_plugins[style][settings][default]' => 'regular',
+      'behavior_plugins[style][settings][groups][]' => ['regular_test_group'],
+      'behavior_plugins[style][settings][groups_defaults][regular_test_group][default]' => 'regular',
     ];
     $this->drupalPostForm(NULL, $edit, t('Save'));
 
@@ -145,7 +141,7 @@ class ParagraphsStylePluginTest extends ParagraphsExperimentalTestBase {
     // Assert default value for the style selection.
     $node = $this->getNodeByTitle('style_plugin_node');
     $this->drupalGet('node/' . $node->id() . '/edit');
-    $this->assertFieldByName('paragraphs[0][behavior_plugins][style][style_wrapper][style]', 'regular');
+    $this->assertFieldByName('paragraphs[0][behavior_plugins][style][style_wrapper][styles][regular_test_group]', 'regular');
   }
 
   /**
@@ -189,30 +185,41 @@ class ParagraphsStylePluginTest extends ParagraphsExperimentalTestBase {
     $node->save();
 
     // Check the empty summary.
+    $behavior_plugins = $paragraph->getParagraphType()->get('behavior_plugins');
+    $behavior_plugins['style'] = [
+      'enabled' => TRUE,
+      'groups' => ['bold_test_group' => ['default' => '']],
+    ];
+    $paragraph->getParagraphType()->set('behavior_plugins', $behavior_plugins);
+    $paragraph->getParagraphType()->save();
     $style_plugin = $paragraph->getParagraphType()->getEnabledBehaviorPlugins()['style'];
     $this->assertEqual([], $style_plugin->settingsSummary($paragraph));
 
     // Use bold style for this container.
-    $paragraph->setBehaviorSettings('style', ['style' => 'bold']);
+    $paragraph->setBehaviorSettings('style', ['styles' => ['bold_test_group' => 'bold']]);
     $paragraph->save();
-    $this->assertEqual(['Style: Bold'], $style_plugin->settingsSummary($paragraph));
+    $this->assertEqual(['Bold Test Group: Bold'], $style_plugin->settingsSummary($paragraph));
 
     // Check the settings summary in a closed mode.
     $this->setParagraphsWidgetMode('paragraphed_test', 'field_paragraphs', 'closed');
     $this->drupalGet('node/' . $node->id() . '/edit');
     $this->assertRaw('edit-field-paragraphs-0-top-icons');
-    $this->assertRaw('Test text 1., Style: Bold');
+    $this->assertRaw('Test text 1., Bold Test Group: Bold');
 
     // Configure style bold as default.
     $edit = [
-      'behavior_plugins[style][settings][group]' => '',
-      'behavior_plugins[style][settings][default]' => 'bold',
+      'behavior_plugins[style][settings][groups][]' => ['bold_test_group'],
+    ];
+    $this->drupalPostAjaxForm('admin/structure/paragraphs_type/' . $paragraph->getType(), $edit, 'behavior_plugins[style][settings][groups][]');
+    $edit = [
+      'behavior_plugins[style][settings][groups][]' => ['bold_test_group'],
+      'behavior_plugins[style][settings][groups_defaults][bold_test_group][default]' => 'bold',
     ];
-    $this->drupalPostForm('admin/structure/paragraphs_type/' . $paragraph->getType(), $edit, t('Save'));
+    $this->drupalPostForm(NULL, $edit, t('Save'));
 
     // Check that the settings summary does not show the default style.
     $this->drupalGet('node/' . $node->id() . '/edit');
-    $this->assertRaw('Test text 1.');
+    $this->assertRaw('<div class="paragraphs-collapsed-description">Test text 1.</div>');
     $this->assertNoRaw('Style: Bold');
     $this->assertNoRaw('Style: - Bold -');
   }
@@ -234,7 +241,8 @@ class ParagraphsStylePluginTest extends ParagraphsExperimentalTestBase {
     // Add a text field.
     $this->fieldUIAddExistingField('admin/structure/paragraphs_type/' . $paragraph_type, 'paragraphs_text');
     $this->drupalGet('admin/structure/paragraphs_type/' . $paragraph_type);
-    $this->assertFieldByName('behavior_plugins[style][settings][group]', '');
+    $options = $this->xpath('//*[contains(@id,"edit-behavior-plugins-style-settings-groups")]/option');
+    $this->assertEqual(0, count($options));
     $edit = [
       'behavior_plugins[style][enabled]' => TRUE,
     ];
@@ -261,36 +269,52 @@ class ParagraphsStylePluginTest extends ParagraphsExperimentalTestBase {
     // Add a text field.
     $this->fieldUIAddExistingField('admin/structure/paragraphs_type/' . $paragraph_type, 'paragraphs_text');
     $this->drupalGet('admin/structure/paragraphs_type/' . $paragraph_type);
-    $this->assertFieldByName('behavior_plugins[style][settings][group]', '');
+    $this->assertFieldByName('behavior_plugins[style][settings][groups][]');
+    $edit = [
+      'behavior_plugins[style][enabled]' => TRUE,
+      'behavior_plugins[style][settings][groups][]' => ['bold_test_group'],
+    ];
+    $this->drupalPostAjaxForm(NULL, $edit, 'behavior_plugins[style][settings][groups][]');
     $edit = [
       'behavior_plugins[style][enabled]' => TRUE,
+      'behavior_plugins[style][settings][groups][]' => ['bold_test_group'],
     ];
     $this->drupalPostForm(NULL, $edit, t('Save'));
+    $this->drupalGet('admin/structure/paragraphs_type/' . $paragraph_type);
 
     // Assert global settings.
     $this->drupalGet('admin/reports/paragraphs_collection/styles');
     $this->assertFieldByName('styles[bold][enabled]', FALSE);
-    $this->assertFieldByName('styles[groupless][enabled]', FALSE);
     $this->assertFieldByName('styles[italic][enabled]', FALSE);
     $this->assertFieldByName('styles[regular][enabled]', FALSE);
     $this->assertFieldByName('styles[underline][enabled]', FALSE);
 
     // Add a node with paragraphs and check the available styles.
     $this->drupalGet('node/add/paragraphed_test');
-    $this->drupalPostAjaxForm(NULL, NULL, 'paragraphs_container_add_more');
+    $this->drupalPostAjaxForm(NULL, NULL, 'paragraphs_' . $paragraph_type . '_add_more');
     $options = $this->xpath('//*[contains(@class,"paragraphs-style")]/option');
-    $this->assertEqual(6, count($options));
+    $this->assertEqual(2, count($options));
     $edit = [
       'title[0][value]' => 'global_settings',
-      'paragraphs[0][behavior_plugins][style][style_wrapper][style]' => 'bold'
+      'paragraphs[0][behavior_plugins][style][style_wrapper][styles][bold_test_group]' => 'bold'
     ];
     $this->drupalPostForm(NULL, $edit, 'Save');
     $this->assertRaw('paragraphs-behavior-style--bold');
 
+    $edit = [
+      'behavior_plugins[style][enabled]' => TRUE,
+      'behavior_plugins[style][settings][groups][]' => ['italic_test_group'],
+    ];
+    $this->drupalPostAjaxForm('admin/structure/paragraphs_type/' . $paragraph_type, $edit, 'behavior_plugins[style][settings][groups][]');
+    $edit = [
+      'behavior_plugins[style][enabled]' => TRUE,
+      'behavior_plugins[style][settings][groups][]' => ['italic_test_group'],
+    ];
+    $this->drupalPostForm(NULL, $edit, t('Save'));
+
     // Update global settings and enable two styles.
     $this->drupalGet('admin/reports/paragraphs_collection/styles');
     $edit = [
-      'styles[groupless][enabled]' => TRUE,
       'styles[italic][enabled]' => TRUE,
     ];
     $this->drupalPostForm(NULL, $edit, 'Save configuration');
@@ -301,18 +325,12 @@ class ParagraphsStylePluginTest extends ParagraphsExperimentalTestBase {
     $this->clickLink('Edit');
     // Assert that only the two enabled styles are available.
     $options = $this->xpath('//*[contains(@class,"paragraphs-style")]/option');
-    $this->assertEqual(3, count($options));
+    $this->assertEqual(2, count($options));
     $this->assertEqual($options[0], '- Default -');
-    $this->assertEqual($options[1], 'Groupless');
-    $this->assertEqual($options[2], 'Italic');
+    $this->assertEqual($options[1], 'Italic');
 
-    // Check that styles are not shown in style config when disabled.
-    $edit = [
-      'behavior_plugins[style][settings][group]' => 'Italic Test Group'
-    ];
-    $this->drupalPostForm('admin/structure/paragraphs_type/' . $paragraph_type, $edit, 'Save');
     $this->drupalGet('admin/structure/paragraphs_type/' . $paragraph_type);
-    $options = $this->xpath('//*[contains(@name,"behavior_plugins[style][settings][default]")]/option');
+    $options = $this->xpath('//*[contains(@name,"behavior_plugins[style][settings][groups_defaults][italic_test_group][default]")]/option');
     $this->assertEqual(2, count($options));
     $this->assertEqual($options[0], '- None -');
     $this->assertEqual($options[1], 'Italic');
@@ -324,11 +342,22 @@ class ParagraphsStylePluginTest extends ParagraphsExperimentalTestBase {
     ];
     $this->drupalPostForm('admin/reports/paragraphs_collection/styles', $edit, 'Save configuration');
     // Set default style to italic.
-    $this->drupalGet('admin/structure/paragraphs_type/container');
-    $this->drupalPostForm(NULL, ['behavior_plugins[style][settings][default]' => 'italic'], t('Save'));
+    $edit = [
+      'behavior_plugins[style][enabled]' => TRUE,
+      'behavior_plugins[style][settings][groups][]' => ['italic_test_group'],
+    ];
+    $this->drupalPostAjaxForm('admin/structure/paragraphs_type/' . $paragraph_type, $edit, 'behavior_plugins[style][settings][groups][]');
+    $edit = [
+      'behavior_plugins[style][settings][groups][]' => ['italic_test_group'],
+      'behavior_plugins[style][settings][groups_defaults][italic_test_group][default]' => 'italic',
+    ];
+    $this->drupalPostForm(NULL, $edit, t('Save'));
     // Set the paragraph style to bold.
-    $this->drupalPostForm('node/' . $node->id() . '/edit', ['paragraphs[0][behavior_plugins][style][style_wrapper][style]' => 'bold'], t('Save'));
+    $this->drupalPostForm('node/' . $node->id() . '/edit', ['paragraphs[0][behavior_plugins][style][style_wrapper][styles][italic_test_group]' => 'bold'], t('Save'));
     $this->assertRaw('paragraphs-behavior-style--bold');
+    // Assert that the selection is correctly displayed.
+    $this->drupalGet('node/' . $node->id() . '/edit');
+    $this->assertOptionSelected('edit-paragraphs-0-behavior-plugins-style-style-wrapper-styles-italic-test-group', 'bold');
 
     // Disable the bold style.
     $this->drupalGet('admin/reports/paragraphs_collection/styles');
@@ -341,4 +370,160 @@ class ParagraphsStylePluginTest extends ParagraphsExperimentalTestBase {
     $this->assertRaw('paragraphs-behavior-style--italic');
   }
 
+  /**
+   * Tests the multiple style selection plugin settings and functionality.
+   */
+  public function testMultipleGroups() {
+    // Install Paragraph Collection Test in order to have styles.
+    \Drupal::service('module_installer')
+      ->install(['paragraphs_collection_test']);
+
+    $this->addParagraphedContentType('paragraphed_test', 'paragraphs');
+    $this->loginAsAdmin([
+      'edit any paragraphed_test content',
+      'edit behavior plugin settings',
+    ]);
+    $this->drupalGet('admin/structure/paragraphs_type/add');
+
+    // Create Paragraph type with Style plugin enabled.
+    $paragraph_type = 'test_style_plugin';
+    $this->addParagraphsType($paragraph_type);
+    // Add a text field.
+    $this->fieldUIAddExistingField('admin/structure/paragraphs_type/' . $paragraph_type, 'paragraphs_text', $paragraph_type);
+
+    // Restrict the paragraphs type to the "Italic Test Group" style group.
+    $this->drupalGet('admin/structure/paragraphs_type/' . $paragraph_type);
+    $edit = [
+      'behavior_plugins[style][enabled]' => TRUE,
+      'behavior_plugins[style][settings][groups][]' => ['italic_test_group'],
+    ];
+    $this->drupalPostAjaxForm(NULL, $edit, 'behavior_plugins[style][settings][groups][]');
+    $edit = [
+      'behavior_plugins[style][enabled]' => TRUE,
+      'behavior_plugins[style][settings][groups][]' => ['italic_test_group'],
+      'behavior_plugins[style][settings][groups_defaults][italic_test_group][default]' => 'italic',
+    ];
+    $this->drupalPostForm(NULL, $edit, t('Save'));
+    // Create a paragraphed test node and check the style classes.
+    $this->drupalGet('node/add/paragraphed_test');
+    $this->drupalPostAjaxForm(NULL, [], 'paragraphs_test_style_plugin_add_more');
+    // Since Italic Group defines only two styles, assert that only they appear.
+    $styles = $this->xpath('//select[contains(@id, :id)]', [':id' => 'edit-paragraphs-0-behavior-plugins-style-style']);
+    $this->assertEqual(2, count($styles[0]->option));
+    $this->assertEqual('- Italic -', $styles[0]->option[0]);
+    $this->assertEqual('Bold', $styles[0]->option[1]);
+    $edit = [
+      'title[0][value]' => 'title_to_remember',
+      'paragraphs[0][subform][paragraphs_text][0][value]' => 'text to apply styles'
+    ];
+    $this->drupalPostForm(NULL, $edit, 'Save');
+    $this->assertRaw('paragraphs-behavior-style--italic');
+
+    // Configure two groups and set their defaults.
+    $this->drupalGet('admin/structure/paragraphs_type/' . $paragraph_type);
+    $edit = [
+      'behavior_plugins[style][settings][groups][]' => [
+        'italic_test_group',
+        'regular_test_group'
+      ],
+    ];
+    $this->drupalPostAjaxForm(NULL, $edit, 'behavior_plugins[style][settings][groups][]');
+    $edit = [
+      'behavior_plugins[style][settings][groups][]' => [
+        'italic_test_group',
+        'regular_test_group'
+      ],
+      'behavior_plugins[style][settings][groups_defaults][regular_test_group][default]' => 'regular',
+      'behavior_plugins[style][settings][groups_defaults][italic_test_group][default]' => 'italic',
+    ];
+    $this->drupalPostForm(NULL, $edit, t('Save'));
+    // Check the selects elements for each enabled group and check the classes.
+    $node = $this->getNodeByTitle('title_to_remember');
+    $this->drupalGet('node/' . $node->id() . '/edit');
+    $styles = $this->xpath('//select[contains(@name, :name)]', [':name' => 'paragraphs[0][behavior_plugins][style][style_wrapper][styles][regular_test_group]']);
+    $this->assertEqual(2, count($styles[0]->option));
+    $this->assertEqual('- Regular -', $styles[0]->option[0]);
+    $this->assertEqual('Bold', $styles[0]->option[1]);
+    $styles = $this->xpath('//select[contains(@name, :name)]', [':name' => 'paragraphs[0][behavior_plugins][style][style_wrapper][styles][italic_test_group]']);
+    $this->assertEqual(2, count($styles[0]->option));
+    $this->assertEqual('- Italic -', $styles[0]->option[0]);
+    $this->assertEqual('Bold', $styles[0]->option[1]);
+    $this->drupalGet('node/' . $node->id());
+    $this->assertRaw('paragraphs-behavior-style--italic');
+    $this->assertRaw('paragraphs-behavior-style--regular');
+
+    // Configure Regular as a default style.
+    $this->drupalGet('admin/structure/paragraphs_type/' . $paragraph_type);
+    $edit = [
+      'behavior_plugins[style][settings][groups][]' => ['regular_test_group'],
+    ];
+    $this->drupalPostAjaxForm(NULL, $edit, 'behavior_plugins[style][settings][groups][]');
+    $edit = [
+      'behavior_plugins[style][settings][groups][]' => ['regular_test_group'],
+      'behavior_plugins[style][settings][groups_defaults][regular_test_group][default]' => 'bold',
+    ];
+    $this->drupalPostForm(NULL, $edit, t('Save'));
+    // Check that there is only one select and only one style class.
+    $this->drupalGet('node/' . $node->id() . '/edit');
+    $styles = $this->xpath('//select[contains(@name, :name)]', [':name' => 'paragraphs[0][behavior_plugins][style][style_wrapper][styles][regular_test_group]']);
+    $this->assertEqual(2, count($styles[0]->option));
+    $this->assertEqual('- Bold -', $styles[0]->option[0]);
+    $this->assertEqual('Regular', $styles[0]->option[1]);
+    $styles = $this->xpath('//select[contains(@name, :name)]', [':name' => 'paragraphs[0][behavior_plugins][style][style_wrapper][styles][italic_test_group]']);
+    $this->assertEqual([], $styles);
+    $this->drupalGet('node/' . $node->id());
+    $this->assertNoRaw('paragraphs-behavior-style--italic');
+    $this->assertRaw('paragraphs-behavior-style--bold');
+
+    // Configure Regular as a default style.
+    $this->drupalGet('admin/structure/paragraphs_type/' . $paragraph_type);
+    $edit = [
+      'behavior_plugins[style][settings][groups][]' => [
+        'italic_test_group',
+        'regular_test_group',
+        'underline_test_group'
+      ],
+    ];
+    $this->drupalPostAjaxForm(NULL, $edit, 'behavior_plugins[style][settings][groups][]');
+    $edit = [
+      'behavior_plugins[style][settings][groups][]' => [
+        'italic_test_group',
+        'regular_test_group',
+        'underline_test_group'
+      ],
+      'behavior_plugins[style][settings][groups_defaults][italic_test_group][default]' => 'italic',
+      'behavior_plugins[style][settings][groups_defaults][regular_test_group][default]' => 'regular',
+      'behavior_plugins[style][settings][groups_defaults][underline_test_group][default]' => 'underline',
+    ];
+    $this->drupalPostForm(NULL, $edit, t('Save'));
+    // Check that there is only one select and only one style class.
+    $this->drupalGet('node/' . $node->id() . '/edit');
+    $styles = $this->xpath('//select[contains(@name, :name)]', [':name' => 'paragraphs[0][behavior_plugins][style][style_wrapper][styles][regular_test_group]']);
+    $this->assertEqual(2, count($styles[0]->option));
+    $this->assertEqual('- Regular -', $styles[0]->option[0]);
+    $this->assertEqual('Bold', $styles[0]->option[1]);
+    $styles = $this->xpath('//select[contains(@name, :name)]', [':name' => 'paragraphs[0][behavior_plugins][style][style_wrapper][styles][italic_test_group]']);
+    $this->assertEqual(2, count($styles[0]->option));
+    $this->assertEqual('- Italic -', $styles[0]->option[0]);
+    $this->assertEqual('Bold', $styles[0]->option[1]);
+    $styles = $this->xpath('//select[contains(@name, :name)]', [':name' => 'paragraphs[0][behavior_plugins][style][style_wrapper][styles][underline_test_group]']);
+    $this->assertEqual(2, count($styles[0]->option));
+    $this->assertEqual('- Underline -', $styles[0]->option[0]);
+    $this->assertEqual('Bold', $styles[0]->option[1]);
+    $this->drupalGet('node/' . $node->id());
+    $this->assertRaw('paragraphs-behavior-style--italic');
+    $this->assertRaw('paragraphs-behavior-style--regular');
+    $this->assertRaw('paragraphs-behavior-style--underline');
+
+    // Change a plugin.
+    $this->drupalGet('node/' . $node->id() . '/edit');
+    $edit = [
+      'paragraphs[0][behavior_plugins][style][style_wrapper][styles][regular_test_group]' => 'bold'
+    ];
+    $this->drupalPostForm(NULL, $edit, 'Save');
+    $this->assertRaw('paragraphs-behavior-style--italic');
+    $this->assertRaw('paragraphs-behavior-style--bold');
+    $this->assertRaw('paragraphs-behavior-style--underline');
+  }
+
 }
diff --git a/style_group_translation_patterns.yml b/style_group_translation_patterns.yml
new file mode 100644
index 0000000..1fd0434
--- /dev/null
+++ b/style_group_translation_patterns.yml
@@ -0,0 +1,4 @@
+translation_patterns:
+  - matches: '*.style_group.yml'
+    translatable_keys:
+      - label
