diff --git a/composer.json b/composer.json
index 0f8ba0f8d0ad681134ab6c9efac8d9b1cd30058e..8d8dcd5c47f2accd84ced3129f3fbcb95418223e 100644
--- a/composer.json
+++ b/composer.json
@@ -99,7 +99,7 @@
         "drupal/entity_reference_revisions": "1.3",
         "drupal/externalauth": "1.0",
         "drupal/features": "3.8",
-        "drupal/field_group": "1.0-rc6",
+        "drupal/field_group": "1.0",
         "drupal/field_permissions": "1.0-beta1",
         "drupal/file_browser": "1.1",
         "drupal/focal_point": "1.0-beta6",
diff --git a/composer.lock b/composer.lock
index fb3a413bab737598c98224684ed0c520baf21fff..c1d2e5493f1e8db66359e5fcaf8b8b735c4d8601 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
         "This file is @generated automatically"
     ],
-    "content-hash": "d5a4707da1701314441aa4c244af663c",
+    "content-hash": "8452601cd705e8fd249c372b56b62636",
     "packages": [
         {
             "name": "alchemy/zippy",
@@ -3648,17 +3648,17 @@
         },
         {
             "name": "drupal/field_group",
-            "version": "1.0.0-rc6",
+            "version": "1.0.0",
             "source": {
                 "type": "git",
                 "url": "https://git.drupal.org/project/field_group",
-                "reference": "8.x-1.0-rc6"
+                "reference": "8.x-1.0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://ftp.drupal.org/files/projects/field_group-8.x-1.0-rc6.zip",
-                "reference": "8.x-1.0-rc6",
-                "shasum": "1ce3c6387e745a04a1099956a5bf39bb50096d44"
+                "url": "https://ftp.drupal.org/files/projects/field_group-8.x-1.0.zip",
+                "reference": "8.x-1.0",
+                "shasum": "e8aa3fae5c3c5dec84644bb577996938d638a611"
             },
             "require": {
                 "drupal/core": "*"
@@ -3669,11 +3669,11 @@
                     "dev-1.x": "1.x-dev"
                 },
                 "drupal": {
-                    "version": "8.x-1.0-rc6",
+                    "version": "8.x-1.0",
                     "datestamp": "1510352885",
                     "security-coverage": {
-                        "status": "not-covered",
-                        "message": "RC releases are not covered by Drupal security advisories."
+                        "status": "covered",
+                        "message": "Covered by Drupal's security advisory policy"
                     }
                 }
             },
diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json
index 84383c0426aef3ed1f3cf6ec0ca6f4b44d8ee0c3..97310e09017675b59b876b6878dc56a7c5513539 100644
--- a/vendor/composer/installed.json
+++ b/vendor/composer/installed.json
@@ -3757,18 +3757,18 @@
     },
     {
         "name": "drupal/field_group",
-        "version": "1.0.0-rc6",
-        "version_normalized": "1.0.0.0-RC6",
+        "version": "1.0.0",
+        "version_normalized": "1.0.0.0",
         "source": {
             "type": "git",
             "url": "https://git.drupal.org/project/field_group",
-            "reference": "8.x-1.0-rc6"
+            "reference": "8.x-1.0"
         },
         "dist": {
             "type": "zip",
-            "url": "https://ftp.drupal.org/files/projects/field_group-8.x-1.0-rc6.zip",
-            "reference": "8.x-1.0-rc6",
-            "shasum": "1ce3c6387e745a04a1099956a5bf39bb50096d44"
+            "url": "https://ftp.drupal.org/files/projects/field_group-8.x-1.0.zip",
+            "reference": "8.x-1.0",
+            "shasum": "e8aa3fae5c3c5dec84644bb577996938d638a611"
         },
         "require": {
             "drupal/core": "*"
@@ -3779,11 +3779,11 @@
                 "dev-1.x": "1.x-dev"
             },
             "drupal": {
-                "version": "8.x-1.0-rc6",
+                "version": "8.x-1.0",
                 "datestamp": "1510352885",
                 "security-coverage": {
-                    "status": "not-covered",
-                    "message": "RC releases are not covered by Drupal security advisories."
+                    "status": "covered",
+                    "message": "Covered by Drupal's security advisory policy"
                 }
             }
         },
diff --git a/web/modules/field_group/contrib/field_group_migrate/field_group_migrate.info.yml b/web/modules/field_group/contrib/field_group_migrate/field_group_migrate.info.yml
index b9c0a03c5fe582f16a54ae6fb75af837ecde6b9e..53f8c6e63f067949f09b67a223b49741bed68da5 100644
--- a/web/modules/field_group/contrib/field_group_migrate/field_group_migrate.info.yml
+++ b/web/modules/field_group/contrib/field_group_migrate/field_group_migrate.info.yml
@@ -7,8 +7,8 @@ package: Migrate
 dependencies:
   - field_group:field_group
 
-# Information added by Drupal.org packaging script on 2016-11-28
-version: '8.x-1.0-rc6'
+# Information added by Drupal.org packaging script on 2017-11-10
+version: '8.x-1.0'
 core: '8.x'
 project: 'field_group'
-datestamp: 1480365490
+datestamp: 1510352889
diff --git a/web/modules/field_group/contrib/field_group_migrate/tests/src/Kernel/Migrate/d7/MigrateFieldGroupTest.php b/web/modules/field_group/contrib/field_group_migrate/tests/src/Kernel/Migrate/d7/MigrateFieldGroupTest.php
index 9a9cbfc132e29b71ea3999d87c4f0fa9da3ed823..ba8e92a54ad79153e3de5daf3f7994e419212b9a 100644
--- a/web/modules/field_group/contrib/field_group_migrate/tests/src/Kernel/Migrate/d7/MigrateFieldGroupTest.php
+++ b/web/modules/field_group/contrib/field_group_migrate/tests/src/Kernel/Migrate/d7/MigrateFieldGroupTest.php
@@ -2,7 +2,6 @@
 
 namespace Drupal\Tests\field_group_migrate\Kernel\Migrate\d7;
 
-use Drupal\Core\Entity\Display\EntityDisplayInterface;
 use Drupal\Tests\migrate_drupal\Kernel\d7\MigrateDrupal7TestBase;
 
 /**
@@ -12,7 +11,10 @@
  */
 class MigrateFieldGroupTest extends MigrateDrupal7TestBase {
 
-  static $modules = [
+  /**
+   * {@inheritdoc}
+   */
+  public static $modules = [
     'field_group',
     'field_group_migrate',
     'comment',
@@ -23,6 +25,8 @@ class MigrateFieldGroupTest extends MigrateDrupal7TestBase {
     'taxonomy',
     'telephone',
     'text',
+    'taxonomy',
+    'menu_ui',
   ];
 
   /**
@@ -37,6 +41,7 @@ protected function setUp() {
     $this->executeMigrations([
       'd7_node_type',
       'd7_comment_type',
+      'd7_taxonomy_vocabulary',
       'd7_view_modes',
       'd7_field',
       'd7_field_instance',
@@ -68,13 +73,14 @@ protected function setUp() {
    *   The expected parent name.
    */
   protected function assertEntity($id, $type, $group_name, $expected_label, $expected_weight = 0, $expected_format_settings = [], $expected_format_type = 'tabs', $expected_children = [], $expected_parent_name = '') {
-    /** @var EntityDisplayInterface $entity */
+    /** @var \Drupal\Core\Entity\Display\EntityDisplayInterface $entity */
     $entity = \Drupal::entityTypeManager()
       ->getStorage($type)
       ->load($id);
     $field_group_settings = $entity->getThirdPartySettings('field_group');
     $this->assertNotEmpty($field_group_settings);
     $this->assertArrayHasKey($group_name, $field_group_settings);
+
     $field_group = $field_group_settings[$group_name];
     $this->assertEquals($expected_label, $field_group['label']);
     $this->assertEquals($expected_format_settings, $field_group['format_settings']);
@@ -94,7 +100,7 @@ public function testFieldGroup() {
     $this->assertEntity('node.article.teaser', 'entity_view_display', 'group_article', 'htab group', 2, ['classes' => 'htab-group'], 'tab', ['field_image']);
 
     // Check an entity_view_display without a field group.
-    /** @var EntityDisplayInterface $entity */
+    /** @var \Drupal\Core\Entity\Display\EntityDisplayInterface $entity */
     $entity = \Drupal::entityTypeManager()
       ->getStorage('entity_view_display')
       ->load('node.page.teaser');
diff --git a/web/modules/field_group/contrib/field_group_migrate/tests/src/Unit/Migrate/d7/FieldGroupTest.php b/web/modules/field_group/contrib/field_group_migrate/tests/src/Unit/Migrate/d7/FieldGroupTest.php
index 34449fbdf20065024761e6096e88b6df69aa9b55..1150015080b62a101be0168c7b117885f4d07ca6 100644
--- a/web/modules/field_group/contrib/field_group_migrate/tests/src/Unit/Migrate/d7/FieldGroupTest.php
+++ b/web/modules/field_group/contrib/field_group_migrate/tests/src/Unit/Migrate/d7/FieldGroupTest.php
@@ -91,4 +91,12 @@ protected function setUp() {
     parent::setUp();
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function providerSource() {
+    // @TODO FIX.
+    return [];
+  }
+
 }
diff --git a/web/modules/field_group/field_group.info.yml b/web/modules/field_group/field_group.info.yml
index e747db2d7c1367e6214acb73378c5cc0f71939a4..5654d7f35f14003a3626acea8d9ebf83352a04ca 100644
--- a/web/modules/field_group/field_group.info.yml
+++ b/web/modules/field_group/field_group.info.yml
@@ -6,8 +6,8 @@ package : Fields
 dependencies:
   - drupal:field
 
-# Information added by Drupal.org packaging script on 2016-11-28
-version: '8.x-1.0-rc6'
+# Information added by Drupal.org packaging script on 2017-11-10
+version: '8.x-1.0'
 core: '8.x'
 project: 'field_group'
-datestamp: 1480365490
+datestamp: 1510352889
diff --git a/web/modules/field_group/field_group.module b/web/modules/field_group/field_group.module
index fdf4c6d6394e955653a8e88f72876c336a80dc7a..e85c489e252ccf2500cd4371e1e1ce2a6255e0c5 100644
--- a/web/modules/field_group/field_group.module
+++ b/web/modules/field_group/field_group.module
@@ -7,7 +7,6 @@
 
 use Drupal\Core\Entity\ContentEntityFormInterface;
 use Drupal\Core\Entity\Display\EntityDisplayInterface;
-use Drupal\Core\Entity\Display\EntityFormDisplayInterface;
 use Drupal\Core\Entity\Entity\EntityFormDisplay;
 use Drupal\Core\Entity\Entity\EntityViewDisplay;
 use Drupal\Core\Entity\EntityInterface;
@@ -154,13 +153,16 @@ function field_group_field_info_max_weight($entity_type, $bundle, $context, $con
  */
 function field_group_form_alter(array &$form, FormStateInterface $form_state) {
 
-  if ($form_state->getFormObject() instanceof ContentEntityFormInterface && !$form_state->getFormObject() instanceof ConfirmFormInterface) {
+  $form_object = $form_state->getFormObject();
+  if ($form_object instanceof ContentEntityFormInterface && !$form_object instanceof ConfirmFormInterface) {
 
     /**
      * @var EntityFormDisplayInterface $form_display
      */
-    if ($form_display = $form_state->getStorage()['form_display']) {
-      $entity = $form_state->getFormObject()->getEntity();
+    $storage = $form_state->getStorage();
+    if (!empty($storage['form_display'])) {
+      $form_display = $storage['form_display'];
+      $entity = $form_object->getEntity();
 
       $context = array(
         'entity_type' => $entity->getEntityTypeId(),
@@ -189,7 +191,7 @@ function field_group_inline_entity_form_entity_form_alter(&$entity_form, FormSta
     'bundle' => $entity_form['#entity']->bundle(),
     'entity' => $entity_form['#entity'],
     'display_context' => 'form',
-    'mode' => 'default',
+    'mode' => isset($entity_form['#form_mode']) ? $entity_form['#form_mode'] : 'default',
   ];
 
   field_group_attach_groups($entity_form, $context);
@@ -348,7 +350,7 @@ function field_group_attach_groups(&$element, $context) {
  * @see field_group_theme_registry_alter
  * @see field_group_fields_nest()
  * @param $vars preprocess vars or form element
- * @param $context The display context (form or view)
+ * @param $context The display context (entity type, form or view)
  * @return $element Array with re-arranged fields in groups.
  */
 function field_group_build_entity_groups(&$vars, $context = 'view') {
@@ -365,7 +367,6 @@ function field_group_build_entity_groups(&$vars, $context = 'view') {
       $element = &$vars['content'];
     }
     else {
-
       if ($context === 'eck_entity') {
         $element = &$vars['entity'];
       }
@@ -383,7 +384,7 @@ function field_group_build_entity_groups(&$vars, $context = 'view') {
   }
 
   // Nest the fields in the corresponding field groups.
-  field_group_fields_nest($element, $nest_vars);
+  field_group_fields_nest($element, $nest_vars, $context);
 
   // Allow others to alter the pre_rendered build.
   Drupal::moduleHandler()->alter('field_group_build_pre_render', $element);
@@ -401,11 +402,9 @@ function field_group_build_entity_groups(&$vars, $context = 'view') {
   // Put groups inside content if we are rendering an entity_view.
   foreach ($element['#fieldgroups'] as $group) {
     if (!empty($element[$group->group_name])) {
-      if (isset($vars['content'])) {
-        $vars['content'][$group->group_name] = $element[$group->group_name];
-      }
-      elseif (isset($vars['user_profile'])) {
-        $vars['user_profile'][$group->group_name] = $element[$group->group_name];
+      $key = field_group_get_content_element_key($context);
+      if (isset($vars[$key])) {
+        $vars[$key][$group->group_name] = $element[$group->group_name];
       }
     }
   }
@@ -423,8 +422,10 @@ function field_group_build_entity_groups(&$vars, $context = 'view') {
  *   The current element to analyse for grouping.
  * @param Array $vars
  *   Rendering vars from the entity being viewed.
+ * @param Array $context
+ *   The display context (entity type, form or view).
  */
-function field_group_fields_nest(&$element, &$vars = NULL) {
+function field_group_fields_nest(&$element, &$vars = NULL, $context = NULL) {
 
   // Create all groups and keep a flat list of references to these groups.
   $group_references = array();
@@ -454,14 +455,11 @@ function field_group_fields_nest(&$element, &$vars = NULL) {
 
     // Entity being viewed
     if ($vars) {
-      // If not a group, check vars['content'] for empty field.
-      if (!isset($element['#fieldgroups'][$child_name]) && isset($vars['content'][$child_name])) {
-        $group_references[$parent_name][$child_name] = $vars['content'][$child_name];
-        unset($vars['content'][$child_name]);
-      }
-      elseif (!isset($element['#fieldgroups'][$child_name]) && isset($vars['user_profile'][$child_name])) {
-        $group_references[$parent_name][$child_name] = $vars['user_profile'][$child_name];
-        unset($vars['user_profile'][$child_name]);
+      // If not a group, check the content variable for empty field.
+      $key = field_group_get_content_element_key($context);
+      if (!isset($element['#fieldgroups'][$child_name]) && isset($vars[$key][$child_name])) {
+        $group_references[$parent_name][$child_name] = $vars[$key][$child_name];
+        unset($vars[$key][$child_name]);
       }
       // If this is a group, we have to use a reference to keep the reference
       // list intact (but if it is a field we don't mind).
@@ -531,16 +529,46 @@ function field_group_pre_render(& $element, $group, & $rendering_object) {
 
 }
 
+/**
+ * Provides the content element key for a display context.
+ *
+ * This allows entity modules to specify their content element for field group
+ * support, or other modules to add entity module support.
+ *
+ * @param $context
+ *   The display context (entity type, form or view).
+ */
+function field_group_get_content_element_key($context = 'default') {
+  $keys = &drupal_static('field_group_content_elements');
+  if (!isset($keys)) {
+    $keys['default'] = 'content';
+    // Allow other modules to alter the array.
+    Drupal::moduleHandler()->alter('field_group_content_element_keys', $keys);
+  }
+
+  // Check if we have a specific content element key for this entity type.
+  $key = $keys['default'];
+  if (isset($keys[$context])) {
+    $key = $keys[$context];
+  }
+  return $key;
+}
+
+
 /**
  * Saves a group definition.
- * This function is called by ctools export when calls are made
- * through ctools_export_crud_save().
  *
- * @param $group
+ * This function is called by ctools export when calls are made through
+ * ctools_export_crud_save(). It's also used as an api method to add groups to a
+ * display.
+ *
+ * @param \stdClass $group
  *   A group definition.
- * @param $display
+ * @param \Drupal\Core\Entity\Display\EntityDisplayInterface $display
  *   The display to update if known.
- * @return EntityDisplayInterface || NULL
+ *
+ * @return \Drupal\Core\Entity\Display\EntityDisplayInterface|NULL
+ *   The updated entity display.
  */
 function field_group_group_save($group, $display = NULL) {
   if ($display === NULL) {
@@ -554,7 +582,6 @@ function field_group_group_save($group, $display = NULL) {
 
   // If no display was found. It doesn't exist yet, create it.
   if (!isset($display)) {
-
     if ($group->context == 'form') {
       $display = EntityFormDisplay::create(array(
         'targetEntityType' => $group->entity_type,
@@ -572,9 +599,6 @@ function field_group_group_save($group, $display = NULL) {
 
   }
 
-  /**
-   * @var $display \Drupal\Core\Entity\Display\EntityDisplayInterface
-   */
   if (isset($display)) {
     $data = (array) $group;
     unset($data['group_name'], $data['entity_type'], $data['bundle'], $data['mode'], $data['form'], $data['context']);
@@ -638,7 +662,7 @@ function field_group_info_groups($entity_type, $bundle, $context, $mode) {
     $data = $display->getThirdPartySettings('field_group');
   }
   $groups = array();
-  if (isset($data)) {
+  if (isset($data) && is_array($data)) {
     foreach ($data as $group_name => $definition) {
       $definition += array(
         'group_name' => $group_name,
diff --git a/web/modules/field_group/formatters/html_element/html-element.js b/web/modules/field_group/formatters/html_element/html-element.js
index 070606744db87e5dd917307087f9db3b6dc1356e..d1f1922a92874794f44f0f07c44bad8f185f460a 100644
--- a/web/modules/field_group/formatters/html_element/html-element.js
+++ b/web/modules/field_group/formatters/html_element/html-element.js
@@ -31,7 +31,6 @@
 
       // Turn the legend into a clickable link, but retain span.field-group-format-toggler
       // for CSS positioning.
-
       var $toggler = $('.field-group-toggler:first', $wrapper);
       var $link = $('<a class="field-group-title" href="#"></a>');
       $link.prepend($toggler.contents());
diff --git a/web/modules/field_group/includes/helpers.inc b/web/modules/field_group/includes/helpers.inc
index 7d3b1b7c715657e4ac47bb03da27928cf5b1b4ce..a6735f094d99d292df70acb218fd976d6766ae83 100644
--- a/web/modules/field_group/includes/helpers.inc
+++ b/web/modules/field_group/includes/helpers.inc
@@ -46,7 +46,7 @@ function field_group_validate_css_class($element, FormStateInterface $form_state
   $form_state_values = $form_state->getValues();
   $plugin_name = $form_state->get('plugin_settings_edit');
   if (!empty($form_state_values['fields'][$plugin_name]['settings_edit_form']['settings']['classes']) && !preg_match('!^[A-Za-z0-9-_ ]+$!', $form_state_values['fields'][$plugin_name]['settings_edit_form']['settings']['classes'])) {
-    Drupal::formBuilder()->setError($element, $form_state, t('The css class must include only letters, numbers, underscores and dashes.'));
+    $form_state->setError($element, $form_state, t('The css class must include only letters, numbers, underscores and dashes.'));
   }
 }
 
diff --git a/web/modules/field_group/src/Element/HtmlElement.php b/web/modules/field_group/src/Element/HtmlElement.php
index 43f34ab5d1a99715841586665fa4d4f760edf44e..e58d6e1150b32df523e185ba4dde00cbddc234cd 100644
--- a/web/modules/field_group/src/Element/HtmlElement.php
+++ b/web/modules/field_group/src/Element/HtmlElement.php
@@ -44,8 +44,10 @@ public static function processHtmlElement(&$element, FormStateInterface $form_st
     if (!empty($element['#effect']) && $element['#effect'] !== 'none') {
 
       $element['#attached']['library'][] = 'field_group/formatter.html_element';
+      $element['#attached']['library'][] = 'field_group/core';
 
       // Add the required classes for the js.
+      $element['#attributes']['class'][] = 'field-group-html-element';
       $element['#attributes']['class'][] = 'fieldgroup-collapsible';
       $element['#attributes']['class'][] = 'effect-' . $element['#effect'];
       if (!empty($element['#speed'])) {
diff --git a/web/modules/field_group/src/Plugin/field_group/FieldGroupFormatter/Fieldset.php b/web/modules/field_group/src/Plugin/field_group/FieldGroupFormatter/Fieldset.php
index f31e9c8df90b7c8f53adca56f58d07cc495aeffe..ecbf217dacc81815d00933fac0a7a6a8c7479c64 100644
--- a/web/modules/field_group/src/Plugin/field_group/FieldGroupFormatter/Fieldset.php
+++ b/web/modules/field_group/src/Plugin/field_group/FieldGroupFormatter/Fieldset.php
@@ -36,6 +36,12 @@ public function preRender(&$element, $rendering_object) {
       $element += array(
         '#description' => $this->getSetting('description'),
       );
+
+      // When a fieldset has a description, an id is required.
+      if (!$this->getSetting('id')) {
+        $element['#id'] = Html::getId($this->group->group_name);
+      }
+
     }
 
     if ($this->getSetting('id')) {
diff --git a/web/modules/field_group/src/Plugin/field_group/FieldGroupFormatter/HtmlElement.php b/web/modules/field_group/src/Plugin/field_group/FieldGroupFormatter/HtmlElement.php
index bd87df1cd027d3179cb61199deac7bde9164e469..41f2d7e4e37f1aae5bc659c6051b4584ed8ae457 100644
--- a/web/modules/field_group/src/Plugin/field_group/FieldGroupFormatter/HtmlElement.php
+++ b/web/modules/field_group/src/Plugin/field_group/FieldGroupFormatter/HtmlElement.php
@@ -75,6 +75,7 @@ public function preRender(&$element, $rendering_object) {
     \Drupal\field_group\Element\HtmlElement::processHtmlElement($element, $form_state);
 
     if ($this->getSetting('required_fields')) {
+      $element['#attributes']['class'][] = 'field-group-html-element';
       $element['#attached']['library'][] = 'field_group/formatter.html_element';
       $element['#attached']['library'][] = 'field_group/core';
     }
diff --git a/web/modules/field_group/src/Tests/ManageDisplayTest.php b/web/modules/field_group/src/Tests/ManageDisplayTest.php
deleted file mode 100644
index 8e6155cde6c79962674e20e5a223abc935c37bbe..0000000000000000000000000000000000000000
--- a/web/modules/field_group/src/Tests/ManageDisplayTest.php
+++ /dev/null
@@ -1,148 +0,0 @@
-<?php
-
-namespace Drupal\field_group\Tests;
-
-use Drupal\Component\Utility\Unicode;
-use Drupal\Core\Entity\Entity\EntityFormDisplay;
-use Drupal\simpletest\WebTestBase;
-
-/**
- * Tests for managing display of entities.
- *
- * @group field_group
- */
-class ManageDisplayTest extends WebTestBase {
-
-  use FieldGroupTestTrait;
-
-  /**
-   * Modules to enable.
-   *
-   * @var array
-   */
-  public static $modules = array('node', 'field_ui', 'field_group');
-
-  function setUp() {
-
-    parent::setUp();
-
-    // Create test user.
-    $admin_user = $this->drupalCreateUser(array('access content', 'administer content types', 'administer node fields', 'administer node form display', 'administer node display', 'bypass node access'));
-    $this->drupalLogin($admin_user);
-
-    // Create content type, with underscores.
-    $type_name =  Unicode::strtolower($this->randomMachineName(8)) . '_test';
-    $type = $this->drupalCreateContentType(array('name' => $type_name, 'type' => $type_name));
-    $this->type = $type->id();
-
-  }
-
-  /**
-   * Test the creation a group on the article content type.
-   */
-  function testCreateGroup() {
-
-    // Create random group name.
-    $this->group_label = $this->randomString(8);
-    $this->group_name_input = Unicode::strtolower($this->randomMachineName());
-    $this->group_name = 'group_' . $this->group_name_input;
-    $this->group_formatter = 'details';
-
-    // Setup new group.
-    $group = array(
-      'group_formatter' => $this->group_formatter,
-      'label' => $this->group_label,
-    );
-
-    $this->drupalPostForm('admin/structure/types/manage/' . $this->type . '/form-display/add-group', $group, t('Save and continue'));
-    $this->assertText('Machine-readable name field is required.');
-
-    // Setup new group.
-    $group = array(
-      'group_formatter' => $this->group_formatter,
-      'label' => $this->group_label,
-      'group_name' => $this->group_name_input,
-    );
-
-    // Add new group on the 'Manage form display' page.
-    $this->drupalPostForm('admin/structure/types/manage/' . $this->type . '/form-display/add-group', $group, t('Save and continue'));
-    $this->drupalPostForm(NULL, [], t('Create group'));
-
-    $this->assertRaw(t('New group %label successfully created.', array('%label' => $this->group_label)), t('Group message displayed on screen.'));
-
-    // Test if group is in the $groups array.
-    $this->group = field_group_load_field_group($this->group_name, 'node', $this->type, 'form', 'default');
-    $this->assertNotNull($this->group, t('Group was loaded'));
-
-    // Add new group on the 'Manage display' page.
-    $this->drupalPostForm('admin/structure/types/manage/' . $this->type . '/display/add-group', $group, t('Save and continue'));
-    $this->drupalPostForm(NULL, [], t('Create group'));
-
-    $this->assertRaw(t('New group %label successfully created.', array('%label' => $this->group_label)), t('Group message displayed on screen.'));
-
-    // Test if group is in the $groups array.
-    $loaded_group = field_group_load_field_group($this->group_name, 'node', $this->type, 'view', 'default');
-    $this->assertNotNull($loaded_group, t('Group was loaded'));
-  }
-
-  /**
-   * Delete a group.
-   */
-  function testDeleteGroup() {
-
-    $data = array(
-      'format_type' => 'fieldset',
-      'label' => 'testing',
-    );
-
-    $group = $this->createGroup('node', $this->type, 'form', 'default', $data);
-
-    $this->drupalPostForm('admin/structure/types/manage/' . $this->type . '/form-display/' . $group->group_name . '/delete', array(), t('Delete'));
-    $this->assertRaw(t('The group %label has been deleted from the %type content type.', array('%label' => $group->label, '%type' => $this->type)), t('Group removal message displayed on screen.'));
-
-    $display = EntityFormDisplay::load($group->entity_type . '.' . $group->bundle . '.' . $group->mode);
-    $data = $display->getThirdPartySettings('field_group');
-
-    // Test that group is not in the $groups array.
-    \Drupal::entityTypeManager()->getStorage('entity_form_display')->resetCache();
-    $loaded_group = field_group_load_field_group($group->group_name, 'node', $this->type, 'form', 'default');
-    $this->assertNull($loaded_group, t('Group not found after deleting'));
-
-    $data = array(
-      'format_type' => 'fieldset',
-      'label' => 'testing',
-    );
-
-    $group = $this->createGroup('node', $this->type, 'view', 'default', $data);
-
-    $this->drupalPostForm('admin/structure/types/manage/' . $this->type . '/display/' . $group->group_name . '/delete', array(), t('Delete'));
-    $this->assertRaw(t('The group %label has been deleted from the %type content type.', array('%label' => $group->label, '%type' => $this->type)), t('Group removal message displayed on screen.'));
-
-    // Test that group is not in the $groups array.
-    \Drupal::entityTypeManager()->getStorage('entity_view_display')->resetCache();
-    $loaded_group = field_group_load_field_group($group->group_name, 'node', $this->type, 'view', 'default');
-    $this->assertNull($loaded_group, t('Group not found after deleting'));
-  }
-
-  /**
-   * Nest a field underneath a group.
-   */
-  function testNestField() {
-
-    $data = array(
-      'format_type' => 'fieldset',
-    );
-
-    $group = $this->createGroup('node', $this->type, 'form', 'default', $data);
-
-    $edit = array(
-      'fields[body][parent]' => $group->group_name,
-    );
-    $this->drupalPostForm('admin/structure/types/manage/' . $this->type . '/form-display', $edit, t('Save'));
-    $this->assertRaw(t('Your settings have been saved.'), t('Settings saved'));
-
-    $group = field_group_load_field_group($group->group_name, 'node', $this->type, 'form', 'default');
-    $this->assertTrue(in_array('body', $group->children), t('Body is a child of %group', array('%group' => $group->group_name)));
-  }
-
-}
diff --git a/web/modules/field_group/tests/modules/field_group_test/field_group_test.info.yml b/web/modules/field_group/tests/modules/field_group_test/field_group_test.info.yml
index 598fab34ed86f8148b4e349aa18f473b0d88f43c..4113863e66716255e9603dcae02378f929d05a4b 100644
--- a/web/modules/field_group/tests/modules/field_group_test/field_group_test.info.yml
+++ b/web/modules/field_group/tests/modules/field_group_test/field_group_test.info.yml
@@ -4,8 +4,8 @@ description: 'Test module for Field Group'
 package: 'Fields'
 type: module
 hidden: TRUE
-# Information added by Drupal.org packaging script on 2016-11-28
-version: '8.x-1.0-rc6'
+# Information added by Drupal.org packaging script on 2017-11-10
+version: '8.x-1.0'
 core: '8.x'
 project: 'field_group'
-datestamp: 1480365490
+datestamp: 1510352889
diff --git a/web/modules/field_group/src/Tests/EntityDisplayTest.php b/web/modules/field_group/tests/src/Functional/EntityDisplayTest.php
similarity index 79%
rename from web/modules/field_group/src/Tests/EntityDisplayTest.php
rename to web/modules/field_group/tests/src/Functional/EntityDisplayTest.php
index 0bd204ff0efe7ccd0d672ef5aad0beaed8de0efb..5fc5da9ef12a6b8d672560507cbf305f0ed3df99 100644
--- a/web/modules/field_group/src/Tests/EntityDisplayTest.php
+++ b/web/modules/field_group/tests/src/Functional/EntityDisplayTest.php
@@ -1,48 +1,76 @@
 <?php
 
-namespace Drupal\field_group\Tests;
+namespace Drupal\Tests\field_group\Functional;
 
 use Drupal\field\Entity\FieldConfig;
 use Drupal\field\Entity\FieldStorageConfig;
-use Drupal\simpletest\WebTestBase;
+use Drupal\Tests\BrowserTestBase;
 
 /**
  * Tests for displaying entities.
  *
  * @group field_group
  */
-class EntityDisplayTest extends WebTestBase {
+class EntityDisplayTest extends BrowserTestBase {
 
   use FieldGroupTestTrait;
 
   /**
-   * Modules to enable.
+   * {@inheritdoc}
+   */
+  public static $modules = [
+    'node',
+    'field_test',
+    'field_ui',
+    'field_group',
+    'field_group_test',
+  ];
+
+  /**
+   * The node type id.
    *
-   * @var array
+   * @var string
    */
-  public static $modules = array('node', 'field_test', 'field_ui', 'field_group', 'field_group_test');
+  protected $type;
 
-  function setUp() {
+  /**
+   * A node to use for testing.
+   *
+   * @var \Drupal\node\NodeInterface
+   */
+  protected $node;
 
+  /**
+   * {@inheritdoc}
+   */
+  public function setUp() {
     parent::setUp();
 
     // Create test user.
-    $admin_user = $this->drupalCreateUser(array('access content', 'administer content types', 'administer node fields', 'administer node form display', 'administer node display', 'bypass node access'));
+    $admin_user = $this->drupalCreateUser([
+      'access content',
+      'administer content types',
+      'administer node fields',
+      'administer node form display',
+      'administer node display',
+      'bypass node access'
+    ]);
     $this->drupalLogin($admin_user);
 
     // Create content type, with underscores.
     $type_name = strtolower($this->randomMachineName(8)) . '_test';
     $type = $this->drupalCreateContentType(array('name' => $type_name, 'type' => $type_name));
     $this->type = $type->id();
-    $display = entity_get_display('node', $type_name, 'default');
+    /** @var \Drupal\Core\Entity\Display\EntityViewDisplayInterface $display */
+    $display = \Drupal::entityTypeManager()
+      ->getStorage('entity_view_display')
+      ->load('node' . '.' . $type_name . '.' . 'default');
 
     // Create a node.
     $node_values = array('type' => $type_name);
 
     // Create test fields.
-    $test_fields = array('field_test', 'field_test_2', 'field_no_access');
-    foreach ($test_fields as $field_name) {
-
+    foreach (['field_test', 'field_test_2', 'field_no_access'] as $field_name) {
       $field_storage = FieldStorageConfig::create([
         'field_name' => $field_name,
         'entity_type' => 'node',
@@ -74,15 +102,12 @@ function setUp() {
     // Save display + create node.
     $display->save();
     $this->node = $this->drupalCreateNode($node_values);
-
   }
 
   /**
-   * Test if an fieldgroup that only contains fields
-   * that has no access is not shown.
+   * Test field access for field groups.
    */
-  function testFieldAccess() {
-
+  public function testFieldAccess() {
     $data = array(
       'label' => 'Wrapper',
       'children' => array(
@@ -105,8 +130,7 @@ function testFieldAccess() {
   /**
    * Test the html element formatter.
    */
-  function testHtmlElement() {
-
+  public function testHtmlElement() {
     $data = array(
       'weight' => '1',
       'children' => array(
@@ -128,11 +152,11 @@ function testHtmlElement() {
     $this->drupalGet('node/' . $this->node->id());
 
     // Test group ids and classes.
-    $this->assertFieldByXPath("//div[contains(@id, 'wrapper-id')]", NULL, t('Wrapper id set on wrapper div'));
-    $this->assertFieldByXPath("//div[contains(@class, 'test-class')]", NULL, t('Test class set on wrapper div') . 'class="' . $group->group_name . ' test-class');
+    $this->assertFieldByXPath("//div[contains(@id, 'wrapper-id')]", NULL, 'Wrapper id set on wrapper div');
+    $this->assertFieldByXPath("//div[contains(@class, 'test-class')]", NULL, 'Test class set on wrapper div, class="' . $group->group_name . ' test-class');
 
     // Test group label.
-    $this->assertNoRaw('<h3><span>' . $data['label'] . '</span></h3>', t('Label is not shown'));
+    $this->assertNoRaw('<h3><span>' . $data['label'] . '</span></h3>');
 
     // Set show label to true.
     $group->format_settings['show_label'] = TRUE;
@@ -140,7 +164,7 @@ function testHtmlElement() {
     field_group_group_save($group);
 
     $this->drupalGet('node/' . $this->node->id());
-    $this->assertRaw('<h3>' . $data['label'] . '</h3>', t('Label is shown'));
+    $this->assertRaw('<h3>' . $data['label'] . '</h3>');
 
     // Change to collapsible with blink effect.
     $group->format_settings['effect'] = 'blink';
@@ -148,15 +172,14 @@ function testHtmlElement() {
     field_group_group_save($group);
 
     $this->drupalGet('node/' . $this->node->id());
-    $this->assertFieldByXPath("//div[contains(@class, 'speed-fast')]", NULL, t('Speed class is set'));
-    $this->assertFieldByXPath("//div[contains(@class, 'effect-blink')]", NULL, t('Effect class is set'));
+    $this->assertFieldByXPath("//div[contains(@class, 'speed-fast')]", NULL, 'Speed class is set');
+    $this->assertFieldByXPath("//div[contains(@class, 'effect-blink')]", NULL, 'Effect class is set');
   }
 
   /**
    * Test the fieldset formatter.
    */
-  function testFieldset() {
-
+  public function testFieldset() {
     $data = array(
       'weight' => '1',
       'children' => array(
@@ -171,21 +194,19 @@ function testFieldset() {
         'description' => 'test description',
       ),
     );
-    $group = $this->createGroup('node', $this->type, 'view', 'default', $data);
+    $this->createGroup('node', $this->type, 'view', 'default', $data);
 
     $this->drupalGet('node/' . $this->node->id());
 
     // Test group ids and classes.
-    $this->assertFieldByXPath("//fieldset[contains(@id, 'fieldset-id')]", NULL, t('Correct id set on the fieldset'));
-    $this->assertFieldByXPath("//fieldset[contains(@class, 'test-class')]", NULL, t('Test class set on the fieldset'));
-
+    $this->assertFieldByXPath("//fieldset[contains(@id, 'fieldset-id')]", NULL, 'Correct id set on the fieldset');
+    $this->assertFieldByXPath("//fieldset[contains(@class, 'test-class')]", NULL, 'Test class set on the fieldset');
   }
 
   /**
    * Test the tabs formatter.
    */
-  function testTabs() {
-
+  public function testTabs() {
     $data = array(
       'label' => 'Tab 1',
       'weight' => '1',
@@ -237,9 +258,9 @@ function testTabs() {
     $this->drupalGet('node/' . $this->node->id());
 
     // Test properties.
-    $this->assertFieldByXPath("//div[contains(@class, 'test-class-wrapper')]", NULL, t('Test class set on tabs wrapper'));
-    $this->assertFieldByXPath("//details[contains(@class, 'test-class-2')]", NULL, t('Test class set on second tab'));
-    $this->assertRaw('<div class="details-description">description of second tab</div>', t('Description of tab is shown'));
+    $this->assertFieldByXPath("//div[contains(@class, 'test-class-wrapper')]", NULL, 'Test class set on tabs wrapper');
+    $this->assertFieldByXPath("//details[contains(@class, 'test-class-2')]", NULL, 'Test class set on second tab');
+    $this->assertRaw('<div class="details-description">description of second tab</div>');
 
     // Test if correctly nested.
     $this->assertFieldByXPath("//div[contains(@class, 'test-class-wrapper')]//details[contains(@class, 'test-class')]", NULL, 'First tab is displayed as child of the wrapper.');
@@ -256,14 +277,12 @@ function testTabs() {
 
     // Test if it's a horizontal tab.
     $this->assertFieldByXPath('//div[@data-horizontal-tabs-panes=""]', NULL, 'Tabs are shown horizontal.');
-
   }
 
   /**
    * Test the accordion formatter.
    */
-  function testAccordion() {
-
+  public function testAccordion() {
     $data = array(
       'label' => 'Accordion item 1',
       'weight' => '1',
@@ -278,7 +297,6 @@ function testAccordion() {
       ),
     );
     $first_item = $this->createGroup('node', $this->type, 'view', 'default', $data);
-    $first_item_id = 'node_article_full_' . $first_item->group_name;
 
     $data = array(
       'label' => 'Accordion item 2',
@@ -294,7 +312,6 @@ function testAccordion() {
       ),
     );
     $second_item = $this->createGroup('node', $this->type, 'view', 'default', $data);
-    $second_item_id = 'node_article_full_' . $second_item->group_name;
 
     $data = array(
       'label' => 'Accordion',
@@ -310,16 +327,16 @@ function testAccordion() {
         'effect' => 'bounceslide'
       ),
     );
-    $accordion = $this->createGroup('node', $this->type, 'view', 'default', $data);
+    $this->createGroup('node', $this->type, 'view', 'default', $data);
 
     $this->drupalGet('node/' . $this->node->id());
 
     // Test properties.
-    $this->assertFieldByXPath("//div[contains(@class, 'test-class-wrapper')]", NULL, t('Test class set on tabs wrapper'));
-    $this->assertFieldByXPath("//div[contains(@class, 'effect-bounceslide')]", NULL, t('Correct effect is set on the accordion'));
-    $this->assertFieldByXPath("//div[contains(@class, 'test-class')]", NULL, t('Accordion item with test-class is shown'));
-    $this->assertFieldByXPath("//div[contains(@class, 'test-class-2')]", NULL, t('Accordion item with test-class-2 is shown'));
-    $this->assertFieldByXPath("//h3[contains(@class, 'field-group-accordion-active')]", NULL, t('Accordion item 2 was set active'));
+    $this->assertFieldByXPath("//div[contains(@class, 'test-class-wrapper')]", NULL, 'Test class set on tabs wrapper');
+    $this->assertFieldByXPath("//div[contains(@class, 'effect-bounceslide')]", NULL, 'Correct effect is set on the accordion');
+    $this->assertFieldByXPath("//div[contains(@class, 'test-class')]", NULL, 'Accordion item with test-class is shown');
+    $this->assertFieldByXPath("//div[contains(@class, 'test-class-2')]", NULL, 'Accordion item with test-class-2 is shown');
+    $this->assertFieldByXPath("//h3[contains(@class, 'field-group-accordion-active')]", NULL, 'Accordion item 2 was set active');
 
     // Test if correctly nested
     $this->assertFieldByXPath("//div[contains(@class, 'test-class-wrapper')]//div[contains(@class, 'test-class')]", NULL, 'First item is displayed as child of the wrapper.');
diff --git a/web/modules/field_group/src/Tests/FieldGroupTestTrait.php b/web/modules/field_group/tests/src/Functional/FieldGroupTestTrait.php
similarity index 70%
rename from web/modules/field_group/src/Tests/FieldGroupTestTrait.php
rename to web/modules/field_group/tests/src/Functional/FieldGroupTestTrait.php
index 7feb156618ecfb7a9302a78adcdf99463edfdd34..c622a10be2e40f41c87a43ecb011b2d3bc9cbc52 100644
--- a/web/modules/field_group/src/Tests/FieldGroupTestTrait.php
+++ b/web/modules/field_group/tests/src/Functional/FieldGroupTestTrait.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Drupal\field_group\Tests;
+namespace Drupal\Tests\field_group\Functional;
 
 use Drupal\Component\Utility\Unicode;
 
@@ -11,10 +11,22 @@ trait FieldGroupTestTrait {
 
   /**
    * Create a new group.
+   *
+   * @param string $entity_type
+   *   The entity type as string.
+   * @param string $bundle
+   *   The bundle of the enity type
+   * @param string $context
+   *   The context for the group.
+   * @param string $mode
+   *   The view/form mode.
    * @param array $data
    *   Data for the field group.
+   *
+   * @return \stdClass
+   *   An object that represents the field group.
    */
-  function createGroup($entity_type, $bundle, $context, $mode, array $data) {
+  protected function createGroup($entity_type, $bundle, $context, $mode, array $data) {
 
     if (!isset($data['format_settings'])) {
       $data['format_settings'] = array();
@@ -36,6 +48,7 @@ function createGroup($entity_type, $bundle, $context, $mode, array $data) {
       'label' => isset($data['label']) ? $data['label'] : $this->randomString(8),
       'format_type' => $data['format_type'],
       'format_settings' => $data['format_settings'],
+      'region' => 'content',
     );
 
     field_group_group_save($field_group);
diff --git a/web/modules/field_group/src/Tests/FieldGroupWithoutFieldUiTest.php b/web/modules/field_group/tests/src/Functional/FieldGroupWithoutFieldUiTest.php
similarity index 56%
rename from web/modules/field_group/src/Tests/FieldGroupWithoutFieldUiTest.php
rename to web/modules/field_group/tests/src/Functional/FieldGroupWithoutFieldUiTest.php
index f9bd3b1fff3309c38ca5ee8c8179c46b37585be9..2beae972bf2c58bf2f3b1bf87e9befaf7e3b15c0 100644
--- a/web/modules/field_group/src/Tests/FieldGroupWithoutFieldUiTest.php
+++ b/web/modules/field_group/tests/src/Functional/FieldGroupWithoutFieldUiTest.php
@@ -1,19 +1,25 @@
 <?php
 
-namespace Drupal\field_group\Tests;
+namespace Drupal\Tests\field_group\Functional;
 
 use Drupal\Core\Url;
-use Drupal\simpletest\WebTestBase;
+use Drupal\Tests\BrowserTestBase;
 
 /**
  * Test field_group without field_ui.
  *
  * @group field_group
  */
-class FieldGroupWithoutFieldUiTest extends WebTestBase {
+class FieldGroupWithoutFieldUiTest extends BrowserTestBase {
 
-  protected static $modules = ['field_group', 'block'];
+  /**
+   * {@inheritdoc}
+   */
+  public static $modules = ['field_group', 'block'];
 
+  /**
+   * Test that local actions show up without field ui enabled.
+   */
   public function testLocalActions() {
     // Local actions of field_group should not depend on field_ui
     // @see https://www.drupal.org/node/2719569
diff --git a/web/modules/field_group/tests/src/Functional/ManageDisplayTest.php b/web/modules/field_group/tests/src/Functional/ManageDisplayTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..e89ee4600f0889641a59ece38bdc8e6f7e819fb5
--- /dev/null
+++ b/web/modules/field_group/tests/src/Functional/ManageDisplayTest.php
@@ -0,0 +1,158 @@
+<?php
+
+namespace Drupal\Tests\field_group\Functional;
+
+use Drupal\Component\Utility\Unicode;
+use Drupal\Tests\BrowserTestBase;
+
+/**
+ * Tests for managing display of entities.
+ *
+ * @group field_group
+ */
+class ManageDisplayTest extends BrowserTestBase {
+
+  use FieldGroupTestTrait;
+
+  /**
+   * {@inheritdoc}
+   */
+  public static $modules = array('node', 'field_ui', 'field_group');
+
+  /**
+   * Content type id.
+   *
+   * @var string
+   */
+  protected $type;
+
+  protected $strictConfigSchema = FALSE;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setUp() {
+    parent::setUp();
+
+    // Create test user.
+    $admin_user = $this->drupalCreateUser([
+      'access content',
+      'administer content types',
+      'administer node fields',
+      'administer node form display',
+      'administer node display',
+      'bypass node access',
+    ]);
+    $this->drupalLogin($admin_user);
+
+    // Create content type, with underscores.
+    $type_name = 'll4ma_test';
+    $type = $this->drupalCreateContentType(['name' => $type_name, 'type' => $type_name]);
+    $this->type = $type->id();
+
+  }
+
+  /**
+   * Test the creation a group on the article content type.
+   */
+  public function testCreateGroup() {
+    // Create random group name.
+    $group_label = $this->randomString(8);
+    $group_name_input = Unicode::strtolower($this->randomMachineName());
+    $group_name = 'group_' . $group_name_input;
+    $group_formatter = 'details';
+
+    // Setup new group.
+    $group = array(
+      'group_formatter' => $group_formatter,
+      'label' => $group_label,
+    );
+
+    $add_form_display = 'admin/structure/types/manage/' . $this->type . '/form-display/add-group';
+    $this->drupalPostForm($add_form_display, $group, 'Save and continue');
+    $this->assertSession()->pageTextContains('Machine-readable name field is required.');
+
+    // Add required field to form.
+    $group['group_name'] = $group_name_input;
+
+    // Add new group on the 'Manage form display' page.
+    $this->drupalPostForm($add_form_display, $group, 'Save and continue');
+    $this->drupalPostForm(NULL, [], 'Create group');
+
+    $this->assertSession()->responseContains(t('New group %label successfully created.', array('%label' => $group_label)));
+
+    // Test if group is in the $groups array.
+    $this->group = field_group_load_field_group($group_name, 'node', $this->type, 'form', 'default');
+    $this->assertNotNull($group, 'Group was loaded');
+
+    // Add new group on the 'Manage display' page.
+    $this->drupalPostForm('admin/structure/types/manage/' . $this->type . '/display/add-group', $group, 'Save and continue');
+    $this->drupalPostForm(NULL, [], 'Create group');
+
+    $this->assertSession()->responseContains(t('New group %label successfully created.', array('%label' => $group_label)));
+
+    // Test if group is in the $groups array.
+    $loaded_group = field_group_load_field_group($group_name, 'node', $this->type, 'view', 'default');
+    $this->assertNotNull($loaded_group, 'Group was loaded');
+  }
+
+  /**
+   * Delete a group.
+   */
+  public function testDeleteGroup() {
+    $data = array(
+      'format_type' => 'fieldset',
+      'label' => 'testing',
+    );
+
+    $group = $this->createGroup('node', $this->type, 'form', 'default', $data);
+
+    $this->drupalPostForm('admin/structure/types/manage/' . $this->type . '/form-display/' . $group->group_name . '/delete', array(), 'Delete');
+    $this->assertSession()->responseContains(t('The group %label has been deleted from the %type content type.', array('%label' => $group->label, '%type' => $this->type)));
+
+    // Test that group is not in the $groups array.
+    \Drupal::entityTypeManager()
+      ->getStorage('entity_form_display')
+      ->resetCache();
+    $loaded_group = field_group_load_field_group($group->group_name, 'node', $this->type, 'form', 'default');
+    $this->assertNull($loaded_group, 'Group not found after deleting');
+
+    $data = array(
+      'format_type' => 'fieldset',
+      'label' => 'testing',
+    );
+
+    $group = $this->createGroup('node', $this->type, 'view', 'default', $data);
+
+    $this->drupalPostForm('admin/structure/types/manage/' . $this->type . '/display/' . $group->group_name . '/delete', array(), t('Delete'));
+    $this->assertRaw(t('The group %label has been deleted from the %type content type.', array('%label' => $group->label, '%type' => $this->type)));
+
+    // Test that group is not in the $groups array.
+    \Drupal::entityTypeManager()
+      ->getStorage('entity_view_display')
+      ->resetCache();
+    $loaded_group = field_group_load_field_group($group->group_name, 'node', $this->type, 'view', 'default');
+    $this->assertNull($loaded_group, 'Group not found after deleting');
+  }
+
+  /**
+   * Nest a field underneath a group.
+   */
+  public function testNestField() {
+    $data = array(
+      'format_type' => 'fieldset',
+    );
+
+    $group = $this->createGroup('node', $this->type, 'form', 'default', $data);
+
+    $edit = array(
+      'fields[body][parent]' => $group->group_name,
+    );
+    $this->drupalPostForm('admin/structure/types/manage/' . $this->type . '/form-display', $edit, 'Save');
+    $this->assertRaw('Your settings have been saved.');
+
+    $group = field_group_load_field_group($group->group_name, 'node', $this->type, 'form', 'default');
+    $this->assertTrue(in_array('body', $group->children), t('Body is a child of %group', array('%group' => $group->group_name)));
+  }
+
+}
diff --git a/web/modules/field_group/tests/src/FunctionalJavascript/FieldGroupUiTest.php b/web/modules/field_group/tests/src/FunctionalJavascript/FieldGroupUiTest.php
index 13d7e620eef5d91295e5d3b041f5637bc783a359..75d74ea834348921f1d0ff43eaf1ed14fec12e73 100644
--- a/web/modules/field_group/tests/src/FunctionalJavascript/FieldGroupUiTest.php
+++ b/web/modules/field_group/tests/src/FunctionalJavascript/FieldGroupUiTest.php
@@ -3,11 +3,10 @@
 namespace Drupal\Tests\field_group\FunctionalJavascript;
 
 use Drupal\Component\Utility\Unicode;
-use Drupal\Core\Entity\Display\EntityFormDisplayInterface;
 use Drupal\Core\Entity\Entity\EntityFormDisplay;
-use Drupal\field_group\Tests\FieldGroupTestTrait;
 use Drupal\FunctionalJavascriptTests\JavascriptTestBase;
 use Drupal\node\Entity\NodeType;
+use Drupal\Tests\field_group\Functional\FieldGroupTestTrait;
 
 /**
  * Test field_group user interface.
@@ -34,7 +33,14 @@ public function setUp() {
     parent::setUp();
 
     // Create test user.
-    $admin_user = $this->drupalCreateUser(array('access content', 'administer content types', 'administer node fields', 'administer node form display', 'administer node display', 'bypass node access'));
+    $admin_user = $this->drupalCreateUser([
+      'access content',
+      'administer content types',
+      'administer node fields',
+      'administer node form display',
+      'administer node display',
+      'bypass node access',
+    ]);
     $this->drupalLogin($admin_user);
 
     // Create content type, with underscores.
@@ -47,6 +53,9 @@ public function setUp() {
     $this->nodeType = $type->id();
   }
 
+  /**
+   * Test creation and editing trough the UI.
+   */
   public function testCreateAndEdit() {
     foreach (['test_1', 'test_2'] as $name) {
       $group = array(
@@ -56,8 +65,8 @@ public function testCreateAndEdit() {
       );
 
       // Add new group on the 'Manage form display' page.
-      $this->drupalPostForm('admin/structure/types/manage/' . $this->nodeType . '/form-display/add-group', $group, t('Save and continue'));
-      $this->drupalPostForm(NULL, [], t('Create group'));
+      $this->drupalPostForm('admin/structure/types/manage/' . $this->nodeType . '/form-display/add-group', $group, 'Save and continue');
+      $this->drupalPostForm(NULL, [], 'Create group');
     }
 
     // Update title in group 1
@@ -84,7 +93,7 @@ public function testCreateAndEdit() {
 
     $page->pressButton('Save');
 
-    /** @var EntityFormDisplayInterface $display */
+    /** @var \Drupal\Core\Entity\Display\EntityFormDisplayInterface $display */
     $display = EntityFormDisplay::load("node.{$this->nodeType}.default");
     $this->assertSame('Test 1 - Update', $display->getThirdPartySetting('field_group', 'group_test_1')['label']);
     $this->assertSame('Test 1 - Update', $display->getThirdPartySetting('field_group', 'group_test_1')['format_settings']['label']);