diff --git a/core/modules/contact/config/schema/contact.schema.yml b/core/modules/contact/config/schema/contact.schema.yml
index 0ef4c2e..b656ad8 100644
--- a/core/modules/contact/config/schema/contact.schema.yml
+++ b/core/modules/contact/config/schema/contact.schema.yml
@@ -2,7 +2,7 @@
 
 contact.category.*:
   type: config_entity
-  label: 'Contact category'
+  label: 'Contact form'
   mapping:
     id:
       type: string
@@ -29,7 +29,7 @@ contact.settings:
   mapping:
     default_category:
       type: string
-      label: 'Default category identifier'
+      label: 'Default form identifier'
     flood:
       type: mapping
       label: 'Flood control'
diff --git a/core/modules/contact/contact.local_actions.yml b/core/modules/contact/contact.local_actions.yml
index c917e7f..551afee 100644
--- a/core/modules/contact/contact.local_actions.yml
+++ b/core/modules/contact/contact.local_actions.yml
@@ -1,6 +1,6 @@
 contact.category_add:
   route_name: contact.category_add
-  title: 'Add category'
+  title: 'Add form'
   weight: 1
   appears_on:
     - contact.category_list
diff --git a/core/modules/contact/contact.menu_links.yml b/core/modules/contact/contact.menu_links.yml
index 683be63..4345597 100644
--- a/core/modules/contact/contact.menu_links.yml
+++ b/core/modules/contact/contact.menu_links.yml
@@ -1,7 +1,7 @@
 contact.category_list:
-  title: 'Contact form categories'
+  title: 'Contact forms'
   parent: system.admin_structure
-  description: 'Create a system contact form and set up categories for the form to use.'
+  description: 'Create a system contact form and set up other forms to use.'
   route_name: contact.category_list
 contact.site_page:
   title: Contact
diff --git a/core/modules/contact/contact.module b/core/modules/contact/contact.module
index e8485c1..3b72ae6 100644
--- a/core/modules/contact/contact.module
+++ b/core/modules/contact/contact.module
@@ -21,7 +21,7 @@ function contact_help($route_name, RouteMatchInterface $route_match) {
       $output .= '<dt>' . t('User contact forms') . '</dt>';
       $output .= '<dd>' . t('Site users can be contacted with a user contact form that keeps their email address private. Users may enable or disable their personal contact forms by editing their <em>My account</em> page. If enabled, a <em>Contact</em> tab leads to a personal contact form displayed on their user profile. Site administrators are still able to use the contact form, even if has been disabled. The <em>Contact</em> tab is not shown when you view your own profile.') . '</dd>';
       $output .= '<dt>' . t('Site-wide contact forms') . '</dt>';
-      $output .= '<dd>' . t('The <a href="@contact">Contact page</a> provides a simple form for users with the <em>Use the site-wide contact form</em> permission to send comments, feedback, or other requests. You can create categories for directing the contact form messages to a set of defined recipients. Common categories for a business site, for example, might include "Website feedback" (messages are forwarded to website administrators) and "Product information" (messages are forwarded to members of the sales department). Email addresses defined within a category are not displayed publicly.', array('@contact' => url('contact'))) . '</p>';
+      $output .= '<dd>' . t('The <a href="@contact">Contact page</a> provides a simple form for users with the <em>Use the site-wide contact form</em> permission to send comments, feedback, or other requests. You can create forms for directing the contact messages to a set of defined recipients. Common forms for a business site, for example, might include "Website feedback" (messages are forwarded to website administrators) and "Product information" (messages are forwarded to members of the sales department). Email addresses defined within a form are not displayed publicly.', array('@contact' => url('contact'))) . '</p>';
       $output .= '<dt>' . t('Navigation') . '</dt>';
       $output .= '<dd>' . t('When the site-wide contact form is enabled, a link in the <em>Footer</em> menu is created, which you can modify on the <a href="@menu">Menus administration page</a>.', array('@menu' => url('admin/structure/menu'))) . '</dd>';
       $output .= '<dt>' . t('Customization') . '</dt>';
@@ -30,7 +30,7 @@ function contact_help($route_name, RouteMatchInterface $route_match) {
       return $output;
 
     case 'contact.category_list':
-      $output = '<p>' . t('Add one or more categories on this page to set up your site-wide <a href="@form">contact form</a>.', array('@form' => url('contact'))) . '</p>';
+      $output = '<p>' . t('Add one or more forms on this page to set up your site-wide <a href="@form">contact form</a>.', array('@form' => url('contact'))) . '</p>';
       $output .= '<p>' . t('A <em>Contact</em> menu item is added to the <em>Footer</em> menu, which you can modify on the <a href="@menu-settings">Menus administration page</a>.', array('@menu-settings' => url('admin/structure/menu'))) . '</p>';
       $output .= '<p>' . t('If you would like additional text to appear on the site-wide contact page, use a block. You can create and edit blocks on the <a href="@blocks">Blocks administration page</a>.', array('@blocks' => url('admin/structure/block'))) . '</p>';
       return $output;
diff --git a/core/modules/contact/contact.routing.yml b/core/modules/contact/contact.routing.yml
index 45d800d..5d78d08 100644
--- a/core/modules/contact/contact.routing.yml
+++ b/core/modules/contact/contact.routing.yml
@@ -10,7 +10,7 @@ contact.category_list:
   path: '/admin/structure/contact'
   defaults:
     _entity_list: 'contact_category'
-    _title: 'Contact form categories'
+    _title: 'Contact forms'
   requirements:
     _permission: 'administer contact forms'
 
@@ -18,7 +18,7 @@ contact.category_add:
   path: '/admin/structure/contact/add'
   defaults:
     _entity_form: 'contact_category.add'
-    _title: 'Add category'
+    _title: 'Add form'
   requirements:
     _permission: 'administer contact forms'
 
@@ -26,7 +26,7 @@ contact.category_edit:
   path: '/admin/structure/contact/manage/{contact_category}'
   defaults:
     _entity_form: 'contact_category.edit'
-    _title: 'Edit contact category'
+    _title: 'Edit contact form'
   requirements:
     _entity_access: 'contact_category.update'
 
@@ -42,7 +42,7 @@ contact.site_page:
 contact.site_page_category:
   path: '/contact/{contact_category}'
   defaults:
-    _title: 'Contact category form'
+    _title: 'Contact form'
     _content: '\Drupal\contact\Controller\ContactController::contactSitePage'
   requirements:
     _entity_access: 'contact_category.view'
diff --git a/core/modules/contact/src/CategoryAccessController.php b/core/modules/contact/src/CategoryAccessController.php
index f798d79..28e1544 100644
--- a/core/modules/contact/src/CategoryAccessController.php
+++ b/core/modules/contact/src/CategoryAccessController.php
@@ -23,11 +23,11 @@ class CategoryAccessController extends EntityAccessController {
    */
   public function checkAccess(EntityInterface $entity, $operation, $langcode, AccountInterface $account) {
     if ($operation == 'view') {
-      // Do not allow access personal category via site-wide route.
+      // Do not allow access personal form via site-wide route.
       return $account->hasPermission('access site-wide contact form') && $entity->id() !== 'personal';
     }
     elseif ($operation == 'delete' || $operation == 'update') {
-      // Do not allow the 'personal' category to be deleted, as it's used for
+      // Do not allow the 'personal' form to be deleted, as it's used for
       // the personal contact form.
       return $account->hasPermission('administer contact forms') && $entity->id() !== 'personal';
     }
diff --git a/core/modules/contact/src/CategoryForm.php b/core/modules/contact/src/CategoryForm.php
index 2147698..fce5980 100644
--- a/core/modules/contact/src/CategoryForm.php
+++ b/core/modules/contact/src/CategoryForm.php
@@ -58,11 +58,11 @@ public function form(array $form, array &$form_state) {
       '#type' => 'weight',
       '#title' => t('Weight'),
       '#default_value' => $category->weight,
-      '#description' => t('When listing categories, those with lighter (smaller) weights get listed before categories with heavier (larger) weights. Categories with equal weights are sorted alphabetically.'),
+      '#description' => t('When listing forms, those with lighter (smaller) weights get listed before forms with heavier (larger) weights. Forms with equal weights are sorted alphabetically.'),
     );
     $form['selected'] = array(
       '#type' => 'checkbox',
-      '#title' => t('Make this the default category.'),
+      '#title' => t('Make this the default form.'),
       '#default_value' => $default_category === $category->id(),
     );
     $form['actions'] = array('#type' => 'actions');
diff --git a/core/modules/contact/src/CategoryInterface.php b/core/modules/contact/src/CategoryInterface.php
index 0f3dd5b..65b1d03 100644
--- a/core/modules/contact/src/CategoryInterface.php
+++ b/core/modules/contact/src/CategoryInterface.php
@@ -10,7 +10,7 @@
 use Drupal\Core\Config\Entity\ConfigEntityInterface;
 
 /**
- * Provides an interface defining a contact category entity.
+ * Provides an interface defining a contact form entity.
  */
 interface CategoryInterface extends ConfigEntityInterface {
 
diff --git a/core/modules/contact/src/CategoryListBuilder.php b/core/modules/contact/src/CategoryListBuilder.php
index 37169ff..2cfabc3 100644
--- a/core/modules/contact/src/CategoryListBuilder.php
+++ b/core/modules/contact/src/CategoryListBuilder.php
@@ -12,7 +12,7 @@
 use Drupal\Core\Entity\EntityInterface;
 
 /**
- * Defines a class to build a listing of contact category entities.
+ * Defines a class to build a listing of contact form entities.
  *
  * @see \Drupal\contact\Entity\Category
  */
@@ -22,7 +22,7 @@ class CategoryListBuilder extends ConfigEntityListBuilder {
    * {@inheritdoc}
    */
   public function buildHeader() {
-    $header['category'] = t('Category');
+    $header['category'] = t('Form');
     $header['recipients'] = t('Recipients');
     $header['selected'] = t('Selected');
     return $header + parent::buildHeader();
@@ -33,7 +33,7 @@ public function buildHeader() {
    */
   public function buildRow(EntityInterface $entity) {
     $row['category'] = $this->getLabel($entity);
-    // Special case the personal category.
+    // Special case the personal form.
     if ($entity->id() == 'personal') {
       $row['recipients'] = t('Selected user');
       $row['selected'] = t('No');
diff --git a/core/modules/contact/src/Controller/ContactController.php b/core/modules/contact/src/Controller/ContactController.php
index df720bc..97fcda5 100644
--- a/core/modules/contact/src/Controller/ContactController.php
+++ b/core/modules/contact/src/Controller/ContactController.php
@@ -51,14 +51,14 @@ public static function create(ContainerInterface $container) {
    * Presents the site-wide contact form.
    *
    * @param \Drupal\contact\CategoryInterface $contact_category
-   *   The contact category to use.
+   *   The contact form to use.
    *
    * @return array
    *   The form as render array as expected by drupal_render().
    *
    * @throws \Symfony\Component\HttpKernel\Exception\NotFoundHttpException
    *   Exception is thrown when user tries to access non existing default
-   *   contact category form.
+   *   contact form form.
    */
   public function contactSitePage(CategoryInterface $contact_category = NULL) {
     // Check if flood control has been activated for sending emails.
@@ -66,15 +66,15 @@ public function contactSitePage(CategoryInterface $contact_category = NULL) {
       $this->contactFloodControl();
     }
 
-    // Use the default category if no category has been passed.
+    // Use the default form if no form has been passed.
     if (empty($contact_category)) {
       $contact_category = $this->entityManager()
         ->getStorage('contact_category')
         ->load($this->config('contact.settings')->get('default_category'));
-      // If there are no categories, do not display the form.
+      // If there are no forms, do not display the form.
       if (empty($contact_category)) {
         if ($this->currentUser()->hasPermission('administer contact forms')) {
-          drupal_set_message($this->t('The contact form has not been configured. <a href="@add">Add one or more categories</a> to the form.', array(
+          drupal_set_message($this->t('The contact form has not been configured. <a href="@add">Add one or more form</a> .', array(
             '@add' => $this->url('contact.category_add'))), 'error');
           return array();
         }
diff --git a/core/modules/contact/src/Entity/Category.php b/core/modules/contact/src/Entity/Category.php
index cc0e6d8..82219dd 100644
--- a/core/modules/contact/src/Entity/Category.php
+++ b/core/modules/contact/src/Entity/Category.php
@@ -13,11 +13,11 @@
 use Drupal\contact\CategoryInterface;
 
 /**
- * Defines the contact category entity.
+ * Defines the contact form entity.
  *
  * @ConfigEntityType(
  *   id = "contact_category",
- *   label = @Translation("Contact category"),
+ *   label = @Translation("Contact form"),
  *   controllers = {
  *     "access" = "Drupal\contact\CategoryAccessController",
  *     "list_builder" = "Drupal\contact\CategoryListBuilder",
@@ -43,14 +43,14 @@
 class Category extends ConfigEntityBundleBase implements CategoryInterface {
 
   /**
-   * The category ID.
+   * The form ID.
    *
    * @var string
    */
   public $id;
 
   /**
-   * The category label.
+   * The form label.
    *
    * @var string
    */
@@ -71,7 +71,7 @@ class Category extends ConfigEntityBundleBase implements CategoryInterface {
   public $reply = '';
 
   /**
-   * Weight of this category (used for sorting).
+   * Weight of this form (used for sorting).
    *
    * @var int
    */
diff --git a/core/modules/contact/src/Entity/Message.php b/core/modules/contact/src/Entity/Message.php
index d3c8c38..4d67a48 100644
--- a/core/modules/contact/src/Entity/Message.php
+++ b/core/modules/contact/src/Entity/Message.php
@@ -149,8 +149,8 @@ public function getPersonalRecipient() {
    */
   public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
     $fields['category'] = FieldDefinition::create('entity_reference')
-      ->setLabel(t('Category ID'))
-      ->setDescription(t('The ID of the associated category.'))
+      ->setLabel(t('Form ID'))
+      ->setDescription(t('The ID of the associated form.'))
       ->setSetting('target_type', 'contact_category')
       ->setRequired(TRUE);
 
diff --git a/core/modules/contact/src/Form/CategoryDeleteForm.php b/core/modules/contact/src/Form/CategoryDeleteForm.php
index 799513a..be0bed7 100644
--- a/core/modules/contact/src/Form/CategoryDeleteForm.php
+++ b/core/modules/contact/src/Form/CategoryDeleteForm.php
@@ -11,7 +11,7 @@
 use Drupal\Core\Url;
 
 /**
- * Builds the form to delete a contact category.
+ * Builds the form to delete a contact form.
  */
 class CategoryDeleteForm extends EntityConfirmFormBase {
 
@@ -41,8 +41,8 @@ public function getConfirmText() {
    */
   public function submit(array $form, array &$form_state) {
     $this->entity->delete();
-    drupal_set_message(t('Category %label has been deleted.', array('%label' => $this->entity->label())));
-    watchdog('contact', 'Category %label has been deleted.', array('%label' => $this->entity->label()), WATCHDOG_NOTICE);
+    drupal_set_message(t('Form %label has been deleted.', array('%label' => $this->entity->label())));
+    watchdog('contact', 'Form %label has been deleted.', array('%label' => $this->entity->label()), WATCHDOG_NOTICE);
     $form_state['redirect_route'] = $this->getCancelRoute();
   }
 
diff --git a/core/modules/contact/src/MessageInterface.php b/core/modules/contact/src/MessageInterface.php
index b73bd2d..d05ac32 100644
--- a/core/modules/contact/src/MessageInterface.php
+++ b/core/modules/contact/src/MessageInterface.php
@@ -15,10 +15,10 @@
 interface MessageInterface extends ContentEntityInterface {
 
   /**
-   * Returns the category this contact message belongs to.
+   * Returns the form this contact message belongs to.
    *
    * @return \Drupal\contact\CategoryInterface
-   *   The contact category entity.
+   *   The contact form entity.
    */
   public function getCategory();
 
diff --git a/core/modules/contact/src/Tests/ContactSitewideTest.php b/core/modules/contact/src/Tests/ContactSitewideTest.php
index 2be4208..eecce26 100644
--- a/core/modules/contact/src/Tests/ContactSitewideTest.php
+++ b/core/modules/contact/src/Tests/ContactSitewideTest.php
@@ -52,9 +52,9 @@ function testSiteWideContact() {
     $this->assertText(t('The configuration options have been saved.'));
 
     $this->drupalGet('admin/structure/contact');
-    // Default category exists.
+    // Default form exists.
     $this->assertLinkByHref('admin/structure/contact/manage/feedback/delete');
-    // User category could not be changed or deleted.
+    // User form could not be changed or deleted.
     // Cannot use ::assertNoLinkByHref as it does partial url matching and with
     // field_ui enabled admin/structure/contact/manage/personal/fields exists.
     // @todo: See https://drupal.org/node/2031223 for the above
@@ -69,13 +69,13 @@ function testSiteWideContact() {
     $this->drupalGet('admin/structure/contact/manage/personal');
     $this->assertResponse(403);
 
-    // Delete old categories to ensure that new categories are used.
+    // Delete old fiorms to ensure that new forms are used.
     $this->deleteCategories();
     $this->drupalGet('admin/structure/contact');
-    $this->assertText('Personal', 'Personal category was not deleted');
+    $this->assertText('Personal', 'Personal form was not deleted');
     $this->assertNoLinkByHref('admin/structure/contact/manage/feedback');
 
-    // Ensure that the contact form won't be shown without categories.
+    // Ensure that the contact form won't be shown without forms.
     user_role_grant_permissions(DRUPAL_ANONYMOUS_RID, array('access site-wide contact form'));
     $this->drupalLogout();
     $this->drupalGet('contact');
@@ -85,11 +85,11 @@ function testSiteWideContact() {
     $this->drupalGet('contact');
     $this->assertResponse(200);
     $this->assertText(t('The contact form has not been configured.'));
-    // Test access personal category via site-wide contact page.
+    // Test access personal form via site-wide contact page.
     $this->drupalGet('contact/personal');
     $this->assertResponse(403);
 
-    // Add categories.
+    // Add forms.
     // Test invalid recipients.
     $invalid_recipients = array('invalid', 'invalid@', 'invalid@site.', '@site.', '@site.com');
     foreach ($invalid_recipients as $invalid_recipient) {
@@ -97,7 +97,7 @@ function testSiteWideContact() {
       $this->assertRaw(t('%recipient is an invalid email address.', array('%recipient' => $invalid_recipient)));
     }
 
-    // Test validation of empty category and recipients fields.
+    // Test validation of empty form and recipients fields.
     $this->addCategory('', '', '', '', TRUE);
     $this->assertText(t('Label field is required.'));
     $this->assertText(t('Machine-readable name field is required.'));
@@ -110,53 +110,53 @@ function testSiteWideContact() {
     $this->addCategory($id = drupal_strtolower($this->randomName($max_length_exceeded)), $label = $this->randomName($max_length_exceeded), implode(',', array($recipients[0])), '', TRUE);
     $this->assertText(format_string('Machine-readable name cannot be longer than !max characters but is currently !exceeded characters long.', array('!max' => $max_length, '!exceeded' => $max_length_exceeded)));
     $this->addCategory($id = drupal_strtolower($this->randomName($max_length)), $label = $this->randomName($max_length), implode(',', array($recipients[0])), '', TRUE);
-    $this->assertRaw(t('Category %label has been added.', array('%label' => $label)));
+    $this->assertRaw(t('Form %label has been added.', array('%label' => $label)));
 
-    // Create first valid category.
+    // Create first valid form.
     $this->addCategory($id = drupal_strtolower($this->randomName(16)), $label = $this->randomName(16), implode(',', array($recipients[0])), '', TRUE);
-    $this->assertRaw(t('Category %label has been added.', array('%label' => $label)));
+    $this->assertRaw(t('Form %label has been added.', array('%label' => $label)));
 
-    // Check that the category was created in site default language.
+    // Check that the form was created in site default language.
     $langcode = \Drupal::config('contact.category.' . $id)->get('langcode');
     $default_langcode = \Drupal::languageManager()->getDefaultLanguage()->id;
     $this->assertEqual($langcode, $default_langcode);
 
-    // Make sure the newly created category is included in the list of categories.
-    $this->assertNoUniqueText($label, 'New category included in categories list.');
+    // Make sure the newly created form is included in the list of forms.
+    $this->assertNoUniqueText($label, 'New form included in forms list.');
 
-    // Test update contact form category.
+    // Test update contact form.
     $this->updateCategory($id, $label = $this->randomName(16), $recipients_str = implode(',', array($recipients[0], $recipients[1])), $reply = $this->randomName(30), FALSE);
     $config = \Drupal::config('contact.category.' . $id)->get();
     $this->assertEqual($config['label'], $label);
     $this->assertEqual($config['recipients'], array($recipients[0], $recipients[1]));
     $this->assertEqual($config['reply'], $reply);
     $this->assertNotEqual($id, \Drupal::config('contact.settings')->get('default_category'));
-    $this->assertRaw(t('Category %label has been updated.', array('%label' => $label)));
-    // Ensure the label is displayed on the contact page for this category.
+    $this->assertRaw(t('Form %label has been updated.', array('%label' => $label)));
+    // Ensure the label is displayed on the contact page for this form.
     $this->drupalGet('contact/' . $id);
     $this->assertText($label);
 
-    // Reset the category back to be the default category.
+    // Reset the form back to be the default form.
     \Drupal::config('contact.settings')->set('default_category', $id)->save();
 
-    // Ensure that the contact form is shown without a category selection input.
+    // Ensure that the contact form is shown without a form selection input.
     user_role_grant_permissions(DRUPAL_ANONYMOUS_RID, array('access site-wide contact form'));
     $this->drupalLogout();
     $this->drupalGet('contact');
     $this->assertText(t('Your email address'));
-    $this->assertNoText(t('Category'));
+    $this->assertNoText(t('Form'));
     $this->drupalLogin($admin_user);
 
-    // Add more categories.
+    // Add more forms.
     $this->addCategory(drupal_strtolower($this->randomName(16)), $label = $this->randomName(16), implode(',', array($recipients[0], $recipients[1])), '', FALSE);
-    $this->assertRaw(t('Category %label has been added.', array('%label' => $label)));
+    $this->assertRaw(t('Form %label has been added.', array('%label' => $label)));
 
     $this->addCategory($name = drupal_strtolower($this->randomName(16)), $label = $this->randomName(16), implode(',', array($recipients[0], $recipients[1], $recipients[2])), '', FALSE);
-    $this->assertRaw(t('Category %label has been added.', array('%label' => $label)));
+    $this->assertRaw(t('Form %label has been added.', array('%label' => $label)));
 
-    // Try adding a category that already exists.
+    // Try adding a form that already exists.
     $this->addCategory($name, $label, '', '', FALSE);
-    $this->assertNoRaw(t('Category %label has been saved.', array('%label' => $label)));
+    $this->assertNoRaw(t('Form %label has been saved.', array('%label' => $label)));
     $this->assertRaw(t('The machine-readable name is already in use. It must be unique.'));
 
     // Clear flood table in preparation for flood test and allow other checks to complete.
@@ -231,7 +231,7 @@ function testSiteWideContact() {
     // Test field UI and field integration.
     $this->drupalGet('admin/structure/contact');
 
-    // Find out in which row the category we want to add a field to is.
+    // Find out in which row the form we want to add a field to is.
     $i = 0;
     foreach($this->xpath('//table/tbody/tr') as $row) {
       if (((string)$row->td[0]) == $label) {
@@ -280,7 +280,7 @@ function testAutoReply() {
     $admin_user = $this->drupalCreateUser(array('access site-wide contact form', 'administer contact forms', 'administer permissions', 'administer users'));
     $this->drupalLogin($admin_user);
 
-    // Set up three categories, 2 with an auto-reply and one without.
+    // Set up three forms, 2 with an auto-reply and one without.
     $foo_autoreply = $this->randomName(40);
     $bar_autoreply = $this->randomName(40);
     $this->addCategory('foo', 'foo', 'foo@example.com', $foo_autoreply, FALSE);
@@ -291,7 +291,7 @@ function testAutoReply() {
     $this->drupalLogout();
     user_role_grant_permissions(DRUPAL_ANONYMOUS_RID, array('access site-wide contact form'));
 
-    // Test the auto-reply for category 'foo'.
+    // Test the auto-reply for form 'foo'.
     $email = $this->randomName(32) . '@example.com';
     $subject = $this->randomName(64);
     $this->submitContact($this->randomName(16), $email, $subject, 'foo', $this->randomString(128));
@@ -301,11 +301,11 @@ function testAutoReply() {
     $this->assertEqual(count($captured_emails), 1);
     $this->assertEqual(trim($captured_emails[0]['body']), trim(drupal_html_to_text($foo_autoreply)));
 
-    // Test the auto-reply for category 'bar'.
+    // Test the auto-reply for form 'bar'.
     $email = $this->randomName(32) . '@example.com';
     $this->submitContact($this->randomName(16), $email, $this->randomString(64), 'bar', $this->randomString(128));
 
-    // Auto-reply for category 'bar' should result in one auto-reply email to the sender.
+    // Auto-reply for form 'bar' should result in one auto-reply email to the sender.
     $captured_emails = $this->drupalGetMails(array('id' => 'contact_page_autoreply', 'to' => $email));
     $this->assertEqual(count($captured_emails), 1);
     $this->assertEqual(trim($captured_emails[0]['body']), trim(drupal_html_to_text($bar_autoreply)));
@@ -318,19 +318,19 @@ function testAutoReply() {
   }
 
   /**
-   * Adds a category.
+   * Adds a form.
    *
    * @param string $id
-   *   The category machine name.
+   *   The form machine name.
    * @param string $label
-   *   The category label.
+   *   The form label.
    * @param string $recipients
    *   The list of recipient email addresses.
    * @param string $reply
    *   The auto-reply text that is sent to a user upon completing the contact
    *   form.
    * @param boolean $selected
-   *   A Boolean indicating whether the category should be selected by default.
+   *   A Boolean indicating whether the form should be selected by default.
    */
   function addCategory($id, $label, $recipients, $reply, $selected) {
     $edit = array();
@@ -343,19 +343,19 @@ function addCategory($id, $label, $recipients, $reply, $selected) {
   }
 
   /**
-   * Updates a category.
+   * Updates a form.
    *
    * @param string $id
-   *   The category machine name.
+   *   The form machine name.
    * @param string $label
-   *   The category label.
+   *   The form label.
    * @param string $recipients
    *   The list of recipient email addresses.
    * @param string $reply
    *   The auto-reply text that is sent to a user upon completing the contact
    *   form.
    * @param boolean $selected
-   *   A Boolean indicating whether the category should be selected by default.
+   *   A Boolean indicating whether the form should be selected by default.
    */
   function updateCategory($id, $label, $recipients, $reply, $selected) {
     $edit = array();
@@ -395,20 +395,20 @@ function submitContact($name, $mail, $subject, $id, $message) {
   }
 
   /**
-   * Deletes all categories.
+   * Deletes all forms.
    */
   function deleteCategories() {
     $categories = entity_load_multiple('contact_category');
     foreach ($categories as $id => $category) {
       if ($id == 'personal') {
-        // Personal category could not be deleted.
+        // Personal form could not be deleted.
         $this->drupalGet("admin/structure/contact/manage/$id/delete");
         $this->assertResponse(403);
       }
       else {
         $this->drupalPostForm("admin/structure/contact/manage/$id/delete", array(), t('Delete'));
-        $this->assertRaw(t('Category %label has been deleted.', array('%label' => $category->label())));
-        $this->assertFalse(entity_load('contact_category', $id), format_string('Category %category not found', array('%category' => $category->label())));
+        $this->assertRaw(t('Form %label has been deleted.', array('%label' => $category->label())));
+        $this->assertFalse(entity_load('contact_category', $id), format_string('Form %category not found', array('%category' => $category->label())));
       }
     }
   }
diff --git a/core/modules/contact/src/Tests/Views/ContactFieldsTest.php b/core/modules/contact/src/Tests/Views/ContactFieldsTest.php
index e6e70ad..94958b8 100644
--- a/core/modules/contact/src/Tests/Views/ContactFieldsTest.php
+++ b/core/modules/contact/src/Tests/Views/ContactFieldsTest.php
@@ -43,7 +43,7 @@ protected function setUp() {
 
     entity_create('contact_category', array(
       'id' => 'contact_message',
-      'label' => 'Test contact category',
+      'label' => 'Test contact form',
     ))->save();
 
     entity_create('field_instance_config', array(
diff --git a/core/modules/contact/tests/drupal-7.contact.database.php b/core/modules/contact/tests/drupal-7.contact.database.php
index ed8e5ba..cef89c2 100644
--- a/core/modules/contact/tests/drupal-7.contact.database.php
+++ b/core/modules/contact/tests/drupal-7.contact.database.php
@@ -9,13 +9,13 @@
  * the database structure expected in tests altogether.
  */
 
-// Update the default category to that it is not selected.
+// Update the default form to that it is not selected.
 db_update('contact')
   ->fields(array('selected' => '0'))
   ->condition('cid', '1')
   ->execute();
 
-// Add a custom contact category.
+// Add a custom contact form.
 db_insert('contact')->fields(array(
   'category',
   'recipients',
diff --git a/sites/default/settings.php b/sites/default/settings.php
new file mode 100755
index 0000000..65f10e1
--- /dev/null
+++ b/sites/default/settings.php
@@ -0,0 +1,648 @@
+<?php
+
+/**
+ * @file
+ * Drupal site-specific configuration file.
+ *
+ * IMPORTANT NOTE:
+ * This file may have been set to read-only by the Drupal installation program.
+ * If you make changes to this file, be sure to protect it again after making
+ * your modifications. Failure to remove write permissions to this file is a
+ * security risk.
+ *
+ * In order to use the selection rules below the multisite aliasing file named
+ * sites/sites.php must be present. Its optional settings will be loaded, and
+ * the aliases in the array $sites will override the default directory rules
+ * below. See sites/example.sites.php for more information about aliases.
+ *
+ * The configuration directory will be discovered by stripping the website's
+ * hostname from left to right and pathname from right to left. The first
+ * configuration file found will be used and any others will be ignored. If no
+ * other configuration file is found then the default configuration file at
+ * 'sites/default' will be used.
+ *
+ * For example, for a fictitious site installed at
+ * http://www.drupal.org:8080/mysite/test/, the 'settings.php' file is searched
+ * for in the following directories:
+ *
+ * - sites/8080.www.drupal.org.mysite.test
+ * - sites/www.drupal.org.mysite.test
+ * - sites/drupal.org.mysite.test
+ * - sites/org.mysite.test
+ *
+ * - sites/8080.www.drupal.org.mysite
+ * - sites/www.drupal.org.mysite
+ * - sites/drupal.org.mysite
+ * - sites/org.mysite
+ *
+ * - sites/8080.www.drupal.org
+ * - sites/www.drupal.org
+ * - sites/drupal.org
+ * - sites/org
+ *
+ * - sites/default
+ *
+ * Note that if you are installing on a non-standard port number, prefix the
+ * hostname with that number. For example,
+ * http://www.drupal.org:8080/mysite/test/ could be loaded from
+ * sites/8080.www.drupal.org.mysite.test/.
+ *
+ * @see example.sites.php
+ * @see conf_path()
+ *
+ * In addition to customizing application settings through variables in
+ * settings.php, you can create a services.yml file in the same directory to
+ * register custom, site-specific service definitions and/or swap out default
+ * implementations with custom ones.
+ */
+
+/**
+ * Database settings:
+ *
+ * The $databases array specifies the database connection or
+ * connections that Drupal may use.  Drupal is able to connect
+ * to multiple databases, including multiple types of databases,
+ * during the same request.
+ *
+ * Each database connection is specified as an array of settings,
+ * similar to the following:
+ * @code
+ * array(
+ *   'driver' => 'mysql',
+ *   'database' => 'databasename',
+ *   'username' => 'username',
+ *   'password' => 'password',
+ *   'host' => 'localhost',
+ *   'port' => 3306,
+ *   'prefix' => 'myprefix_',
+ *   'collation' => 'utf8_general_ci',
+ * );
+ * @endcode
+ *
+ * The "driver" property indicates what Drupal database driver the
+ * connection should use.  This is usually the same as the name of the
+ * database type, such as mysql or sqlite, but not always.  The other
+ * properties will vary depending on the driver.  For SQLite, you must
+ * specify a database file name in a directory that is writable by the
+ * webserver.  For most other drivers, you must specify a
+ * username, password, host, and database name.
+ *
+ * Transaction support is enabled by default for all drivers that support it,
+ * including MySQL. To explicitly disable it, set the 'transactions' key to
+ * FALSE.
+ * Note that some configurations of MySQL, such as the MyISAM engine, don't
+ * support it and will proceed silently even if enabled. If you experience
+ * transaction related crashes with such configuration, set the 'transactions'
+ * key to FALSE.
+ *
+ * For each database, you may optionally specify multiple "target" databases.
+ * A target database allows Drupal to try to send certain queries to a
+ * different database if it can but fall back to the default connection if not.
+ * That is useful for primary/replica replication, as Drupal may try to connect
+ * to a replica server when appropriate and if one is not available will simply
+ * fall back to the single primary server (The terms primary/replica are
+ * traditionally referred to as master/slave in database server documentation).
+ *
+ * The general format for the $databases array is as follows:
+ * @code
+ * $databases['default']['default'] = $info_array;
+ * $databases['default']['replica'][] = $info_array;
+ * $databases['default']['replica'][] = $info_array;
+ * $databases['extra']['default'] = $info_array;
+ * @endcode
+ *
+ * In the above example, $info_array is an array of settings described above.
+ * The first line sets a "default" database that has one primary database
+ * (the second level default).  The second and third lines create an array
+ * of potential replica databases.  Drupal will select one at random for a given
+ * request as needed.  The fourth line creates a new database with a name of
+ * "extra".
+ *
+ * For a single database configuration, the following is sufficient:
+ * @code
+ * $databases['default']['default'] = array(
+ *   'driver' => 'mysql',
+ *   'database' => 'databasename',
+ *   'username' => 'username',
+ *   'password' => 'password',
+ *   'host' => 'localhost',
+ *   'prefix' => 'main_',
+ *   'collation' => 'utf8_general_ci',
+ * );
+ * @endcode
+ *
+ * You can optionally set prefixes for some or all database table names
+ * by using the 'prefix' setting. If a prefix is specified, the table
+ * name will be prepended with its value. Be sure to use valid database
+ * characters only, usually alphanumeric and underscore. If no prefixes
+ * are desired, leave it as an empty string ''.
+ *
+ * To have all database names prefixed, set 'prefix' as a string:
+ * @code
+ *   'prefix' => 'main_',
+ * @endcode
+ * To provide prefixes for specific tables, set 'prefix' as an array.
+ * The array's keys are the table names and the values are the prefixes.
+ * The 'default' element is mandatory and holds the prefix for any tables
+ * not specified elsewhere in the array. Example:
+ * @code
+ *   'prefix' => array(
+ *     'default'   => 'main_',
+ *     'users'     => 'shared_',
+ *     'sessions'  => 'shared_',
+ *     'role'      => 'shared_',
+ *     'authmap'   => 'shared_',
+ *   ),
+ * @endcode
+ * You can also use a reference to a schema/database as a prefix. This may be
+ * useful if your Drupal installation exists in a schema that is not the default
+ * or you want to access several databases from the same code base at the same
+ * time.
+ * Example:
+ * @code
+ *   'prefix' => array(
+ *     'default'   => 'main.',
+ *     'users'     => 'shared.',
+ *     'sessions'  => 'shared.',
+ *     'role'      => 'shared.',
+ *     'authmap'   => 'shared.',
+ *   );
+ * @endcode
+ * NOTE: MySQL and SQLite's definition of a schema is a database.
+ *
+ * Advanced users can add or override initial commands to execute when
+ * connecting to the database server, as well as PDO connection settings. For
+ * example, to enable MySQL SELECT queries to exceed the max_join_size system
+ * variable, and to reduce the database connection timeout to 5 seconds:
+ *
+ * @code
+ * $databases['default']['default'] = array(
+ *   'init_commands' => array(
+ *     'big_selects' => 'SET SQL_BIG_SELECTS=1',
+ *   ),
+ *   'pdo' => array(
+ *     PDO::ATTR_TIMEOUT => 5,
+ *   ),
+ * );
+ * @endcode
+ *
+ * WARNING: These defaults are designed for database portability. Changing them
+ * may cause unexpected behavior, including potential data loss.
+ *
+ * @see DatabaseConnection_mysql::__construct
+ * @see DatabaseConnection_pgsql::__construct
+ * @see DatabaseConnection_sqlite::__construct
+ *
+ * Database configuration format:
+ * @code
+ *   $databases['default']['default'] = array(
+ *     'driver' => 'mysql',
+ *     'database' => 'databasename',
+ *     'username' => 'username',
+ *     'password' => 'password',
+ *     'host' => 'localhost',
+ *     'prefix' => '',
+ *   );
+ *   $databases['default']['default'] = array(
+ *     'driver' => 'pgsql',
+ *     'database' => 'databasename',
+ *     'username' => 'username',
+ *     'password' => 'password',
+ *     'host' => 'localhost',
+ *     'prefix' => '',
+ *   );
+ *   $databases['default']['default'] = array(
+ *     'driver' => 'sqlite',
+ *     'database' => '/path/to/databasefilename',
+ *   );
+ * @endcode
+ */
+$databases = array();
+
+/**
+ * Location of the site configuration files.
+ *
+ * The $config_directories array specifies the location of file system
+ * directories used for configuration data. On install, "active" and "staging"
+ * directories are created for configuration. The staging directory is used for
+ * configuration imports; the active directory is not used by default, since the
+ * default storage for active configuration is the database rather than the file
+ * system (this can be changed; see "Active configuration settings" below).
+ *
+ * The default location for the active and staging directories is inside a
+ * randomly-named directory in the public files path; this setting allows you to
+ * override these locations. If you use files for the active configuration, you
+ * can enhance security by putting the active configuration outside your
+ * document root.
+ *
+ * Example:
+ * @code
+ *   $config_directories = array(
+ *     CONFIG_ACTIVE_DIRECTORY => '/some/directory/outside/webroot',
+ *     CONFIG_STAGING_DIRECTORY => '/another/directory/outside/webroot',
+ *   );
+ * @endcode
+ */
+$config_directories = array();
+
+/**
+ * Settings:
+ *
+ * $settings contains environment-specific configuration, such as the files
+ * directory and reverse proxy address, and temporary configuration, such as
+ * turning on Twig debugging and security overrides.
+ *
+ * @see \Drupal\Core\Site\Settings::get()
+ */
+
+/**
+ * Salt for one-time login links, cancel links, form tokens, etc.
+ *
+ * This variable will be set to a random value by the installer. All one-time
+ * login links will be invalidated if the value is changed. Note that if your
+ * site is deployed on a cluster of web servers, you must ensure that this
+ * variable has the same value on each server.
+ *
+ * For enhanced security, you may set this variable to the contents of a file
+ * outside your document root; you should also ensure that this file is not
+ * stored with backups of your database.
+ *
+ * Example:
+ * @code
+ *   $settings['hash_salt'] = file_get_contents('/home/example/salt.txt');
+ * @endcode
+ */
+$settings['hash_salt'] = 'FutLvgR_k7IAhpywD4GQlEhIvMF4kHTJmBfa4xmC2r9zv5julgRcJYq32KOIWgqKDKU8lIRlGA';
+
+/**
+ * Access control for update.php script.
+ *
+ * If you are updating your Drupal installation using the update.php script but
+ * are not logged in using either an account with the "Administer software
+ * updates" permission or the site maintenance account (the account that was
+ * created during installation), you will need to modify the access check
+ * statement below. Change the FALSE to a TRUE to disable the access check.
+ * After finishing the upgrade, be sure to open this file again and change the
+ * TRUE back to a FALSE!
+ */
+$settings['update_free_access'] = FALSE;
+
+/**
+ * External access proxy settings:
+ *
+ * If your site must access the Internet via a web proxy then you can enter
+ * the proxy settings here. Currently only basic authentication is supported
+ * by using the username and password variables. The proxy_user_agent variable
+ * can be set to NULL for proxies that require no User-Agent header or to a
+ * non-empty string for proxies that limit requests to a specific agent. The
+ * proxy_exceptions variable is an array of host names to be accessed directly,
+ * not via proxy.
+ */
+# $settings['proxy_server'] = '';
+# $settings['proxy_port'] = 8080;
+# $settings['proxy_username'] = '';
+# $settings['proxy_password'] = '';
+# $settings['proxy_user_agent'] = '';
+# $settings['proxy_exceptions'] = array('127.0.0.1', 'localhost');
+
+/**
+ * Reverse Proxy Configuration:
+ *
+ * Reverse proxy servers are often used to enhance the performance
+ * of heavily visited sites and may also provide other site caching,
+ * security, or encryption benefits. In an environment where Drupal
+ * is behind a reverse proxy, the real IP address of the client should
+ * be determined such that the correct client IP address is available
+ * to Drupal's logging, statistics, and access management systems. In
+ * the most simple scenario, the proxy server will add an
+ * X-Forwarded-For header to the request that contains the client IP
+ * address. However, HTTP headers are vulnerable to spoofing, where a
+ * malicious client could bypass restrictions by setting the
+ * X-Forwarded-For header directly. Therefore, Drupal's proxy
+ * configuration requires the IP addresses of all remote proxies to be
+ * specified in $settings['reverse_proxy_addresses'] to work correctly.
+ *
+ * Enable this setting to get Drupal to determine the client IP from
+ * the X-Forwarded-For header (or $settings['reverse_proxy_header'] if set).
+ * If you are unsure about this setting, do not have a reverse proxy,
+ * or Drupal operates in a shared hosting environment, this setting
+ * should remain commented out.
+ *
+ * In order for this setting to be used you must specify every possible
+ * reverse proxy IP address in $settings['reverse_proxy_addresses'].
+ * If a complete list of reverse proxies is not available in your
+ * environment (for example, if you use a CDN) you may set the
+ * $_SERVER['REMOTE_ADDR'] variable directly in settings.php.
+ * Be aware, however, that it is likely that this would allow IP
+ * address spoofing unless more advanced precautions are taken.
+ */
+# $settings['reverse_proxy'] = TRUE;
+
+/**
+ * Specify every reverse proxy IP address in your environment.
+ * This setting is required if $settings['reverse_proxy'] is TRUE.
+ */
+# $settings['reverse_proxy_addresses'] = array('a.b.c.d', ...);
+
+/**
+ * Set this value if your proxy server sends the client IP in a header
+ * other than X-Forwarded-For.
+ */
+# $settings['reverse_proxy_header'] = 'HTTP_X_CLUSTER_CLIENT_IP';
+
+/**
+ * Page caching:
+ *
+ * By default, Drupal sends a "Vary: Cookie" HTTP header for anonymous page
+ * views. This tells a HTTP proxy that it may return a page from its local
+ * cache without contacting the web server, if the user sends the same Cookie
+ * header as the user who originally requested the cached page. Without "Vary:
+ * Cookie", authenticated users would also be served the anonymous page from
+ * the cache. If the site has mostly anonymous users except a few known
+ * editors/administrators, the Vary header can be omitted. This allows for
+ * better caching in HTTP proxies (including reverse proxies), i.e. even if
+ * clients send different cookies, they still get content served from the cache.
+ * However, authenticated users should access the site directly (i.e. not use an
+ * HTTP proxy, and bypass the reverse proxy if one is used) in order to avoid
+ * getting cached pages from the proxy.
+ */
+# $settings['omit_vary_cookie'] = TRUE;
+
+/**
+ * Class Loader.
+ *
+ * By default, Drupal uses Composer's ClassLoader, which is best for
+ * development, as it does not break when code is moved on the file
+ * system. It is possible, however, to wrap the class loader with a
+ * cached class loader solution for better performance, which is
+ * recommended for production sites.
+ *
+ * Examples:
+ *   $settings['class_loader'] = 'apc';
+ *   $settings['class_loader'] = 'default';
+ */
+# $settings['class_loader'] = 'apc';
+
+/**
+ * Authorized file system operations:
+ *
+ * The Update Manager module included with Drupal provides a mechanism for
+ * site administrators to securely install missing updates for the site
+ * directly through the web user interface. On securely-configured servers,
+ * the Update manager will require the administrator to provide SSH or FTP
+ * credentials before allowing the installation to proceed; this allows the
+ * site to update the new files as the user who owns all the Drupal files,
+ * instead of as the user the webserver is running as. On servers where the
+ * webserver user is itself the owner of the Drupal files, the administrator
+ * will not be prompted for SSH or FTP credentials (note that these server
+ * setups are common on shared hosting, but are inherently insecure).
+ *
+ * Some sites might wish to disable the above functionality, and only update
+ * the code directly via SSH or FTP themselves. This setting completely
+ * disables all functionality related to these authorized file operations.
+ *
+ * @see http://drupal.org/node/244924
+ *
+ * Remove the leading hash signs to disable.
+ */
+# $settings['allow_authorize_operations'] = FALSE;
+
+/**
+ * Mixed-mode sessions:
+ *
+ * Set to TRUE to create both secure and insecure sessions when using HTTPS.
+ * Defaults to FALSE.
+ */
+# $settings['mixed_mode_sessions'] = TRUE;
+
+/**
+ * Default mode for for directories and files written by Drupal.
+ *
+ * Value should be in PHP Octal Notation, with leading zero.
+ */
+# $settings['file_chmod_directory'] = 0775;
+# $settings['file_chmod_file'] = 0664;
+
+/**
+ * Public file path:
+ *
+ * A local file system path where public files will be stored. This directory
+ * must exist and be writable by Drupal. This directory must be relative to
+ * the Drupal installation directory and be accessible over the web.
+ */
+# $settings['file_public_path'] = 'sites/default/files';
+
+/**
+ * Session write interval:
+ *
+ * Set the minimum interval between each session write to database.
+ * For performance reasons it defaults to 180.
+ */
+# $settings['session_write_interval'] = 180;
+
+/**
+ * String overrides:
+ *
+ * To override specific strings on your site with or without enabling the Locale
+ * module, add an entry to this list. This functionality allows you to change
+ * a small number of your site's default English language interface strings.
+ *
+ * Remove the leading hash signs to enable.
+ *
+ * The "en" part of the variable name, is dynamic and can be any langcode of
+ * any added language. (eg locale_custom_strings_de for german).
+ */
+# $settings['locale_custom_strings_en'][''] = array(
+#   'forum'      => 'Discussion board',
+#   '@count min' => '@count minutes',
+# );
+
+/**
+ * A custom theme for the offline page:
+ *
+ * This applies when the site is explicitly set to maintenance mode through the
+ * administration page or when the database is inactive due to an error.
+ * The template file should also be copied into the theme. It is located inside
+ * 'core/modules/system/templates/maintenance-page.html.twig'.
+ *
+ * Note: This setting does not apply to installation and update pages.
+ */
+# $settings['maintenance_theme'] = 'bartik';
+
+/**
+ * Base URL (optional).
+ *
+ * If Drupal is generating incorrect URLs on your site, which could
+ * be in HTML headers (links to CSS and JS files) or visible links on pages
+ * (such as in menus), uncomment the Base URL statement below (remove the
+ * leading hash sign) and fill in the absolute URL to your Drupal installation.
+ *
+ * You might also want to force users to use a given domain.
+ * See the .htaccess file for more information.
+ *
+ * Examples:
+ *   $base_url = 'http://www.example.com';
+ *   $base_url = 'http://www.example.com:8888';
+ *   $base_url = 'http://www.example.com/drupal';
+ *   $base_url = 'https://www.example.com:8888/drupal';
+ *
+ * It is not allowed to have a trailing slash; Drupal will add it
+ * for you.
+ */
+# $base_url = 'http://www.example.com';  // NO trailing slash!
+
+/**
+ * PHP settings:
+ *
+ * To see what PHP settings are possible, including whether they can be set at
+ * runtime (by using ini_set()), read the PHP documentation:
+ * http://php.net/manual/ini.list.php
+ * See \Drupal\Core\DrupalKernel::bootEnvironment() for required runtime
+ * settings and the .htaccess file for non-runtime settings.
+ * Settings defined there should not be duplicated here so as to avoid conflict
+ * issues.
+ */
+
+/**
+ * Some distributions of Linux (most notably Debian) ship their PHP
+ * installations with garbage collection (gc) disabled. Since Drupal depends on
+ * PHP's garbage collection for clearing sessions, ensure that garbage
+ * collection occurs by using the most common settings.
+ */
+ini_set('session.gc_probability', 1);
+ini_set('session.gc_divisor', 100);
+
+/**
+ * Set session lifetime (in seconds), i.e. the time from the user's last visit
+ * to the active session may be deleted by the session garbage collector. When
+ * a session is deleted, authenticated users are logged out, and the contents
+ * of the user's $_SESSION variable is discarded.
+ */
+ini_set('session.gc_maxlifetime', 200000);
+
+/**
+ * Set session cookie lifetime (in seconds), i.e. the time from the session is
+ * created to the cookie expires, i.e. when the browser is expected to discard
+ * the cookie. The value 0 means "until the browser is closed".
+ */
+ini_set('session.cookie_lifetime', 2000000);
+
+/**
+ * If you encounter a situation where users post a large amount of text, and
+ * the result is stripped out upon viewing but can still be edited, Drupal's
+ * output filter may not have sufficient memory to process it.  If you
+ * experience this issue, you may wish to uncomment the following two lines
+ * and increase the limits of these variables.  For more information, see
+ * http://php.net/manual/pcre.configuration.php.
+ */
+# ini_set('pcre.backtrack_limit', 200000);
+# ini_set('pcre.recursion_limit', 200000);
+
+/**
+ * Drupal automatically generates a unique session cookie name for each site
+ * based on its full domain name. If you have multiple domains pointing at the
+ * same Drupal site, you can either redirect them all to a single domain (see
+ * comment in .htaccess), or uncomment the line below and specify their shared
+ * base domain. Doing so assures that users remain logged in as they cross
+ * between your various domains. Make sure to always start the $cookie_domain
+ * with a leading dot, as per RFC 2109.
+ */
+# $cookie_domain = '.example.com';
+
+/**
+ * Active configuration settings.
+ *
+ * By default, the active configuration is stored in the database in the
+ * {config} table. To use a different storage mechanism for the active
+ * configuration, do the following prior to installing:
+ * - Override the 'bootstrap_config_storage' setting here. It must be set to a
+ *   callable that returns an object that implements
+ *   \Drupal\Core\Config\StorageInterface.
+ * - Override the service definition 'config.storage.active'. Put this
+ *   override in a services.yml file in the same directory as settings.php
+ *   (definitions in this file will override service definition defaults).
+ */
+# $settings['bootstrap_config_storage'] = array('Drupal\Core\Config\BootstrapConfigStorageFactory', 'getFileStorage');
+
+/**
+ * Configuration overrides.
+ *
+ * To globally override specific configuration values for this site,
+ * set them here. You usually don't need to use this feature. This is
+ * useful in a configuration file for a vhost or directory, rather than
+ * the default settings.php.
+ *
+ * Note that any values you provide in these variable overrides will not be
+ * modifiable from the Drupal administration interface.
+ */
+# $config['system.site']['name'] = 'My Drupal site';
+# $config['system.theme']['default'] = 'stark';
+# $config['user.settings']['anonymous'] = 'Visitor';
+
+/**
+ * CSS/JS aggregated file gzip compression:
+ *
+ * By default, when CSS or JS aggregation and clean URLs are enabled Drupal will
+ * store a gzip compressed (.gz) copy of the aggregated files. If this file is
+ * available then rewrite rules in the default .htaccess file will serve these
+ * files to browsers that accept gzip encoded content. This allows pages to load
+ * faster for these users and has minimal impact on server load. If you are
+ * using a webserver other than Apache httpd, or a caching reverse proxy that is
+ * configured to cache and compress these files itself you may want to uncomment
+ * one or both of the below lines, which will prevent gzip files being stored.
+ */
+# $config['system.performance']['css']['gzip'] = FALSE;
+# $config['system.performance']['js']['gzip'] = FALSE;
+
+/**
+ * Fast 404 pages:
+ *
+ * Drupal can generate fully themed 404 pages. However, some of these responses
+ * are for images or other resource files that are not displayed to the user.
+ * This can waste bandwidth, and also generate server load.
+ *
+ * The options below return a simple, fast 404 page for URLs matching a
+ * specific pattern:
+ * - $conf['system.performance]['fast_404']['exclude_paths']: A regular
+ *   expression to match paths to exclude, such as images generated by image
+ *   styles, or dynamically-resized images. If you need to add more paths, you
+ *   can add '|path' to the expression.
+ * - $conf['system.performance]['fast_404']['paths']: A regular expression to
+ *   match paths that should return a simple 404 page, rather than the fully
+ *   themed 404 page. If you don't have any aliases ending in htm or html you
+ *   can add '|s?html?' to the expression.
+ * - $conf['system.performance]['fast_404']['html']: The html to return for
+ *   simple 404 pages.
+ *
+ * Remove the leading hash signs if you would like to alter this functionality.
+ */
+# $config['system.performance']['fast_404']['exclude_paths'] = '/\/(?:styles)\//';
+# $config['system.performance']['fast_404']['paths'] = '/\.(?:txt|png|gif|jpe?g|css|js|ico|swf|flv|cgi|bat|pl|dll|exe|asp)$/i';
+# $config['system.performance']['fast_404']['html'] = '<!DOCTYPE html><html><head><title>404 Not Found</title></head><body><h1>Not Found</h1><p>The requested URL "@path" was not found on this server.</p></body></html>';
+
+/**
+ * Load local development override configuration, if available.
+ *
+ * Use settings.local.php to override variables on secondary (staging,
+ * development, etc) installations of this site. Typically used to disable
+ * caching, JavaScript/CSS compression, re-routing of outgoing emails, and
+ * other things that should not happen on development and testing sites.
+ *
+ * Keep this code block at the end of this file to take full effect.
+ */
+# if (file_exists(__DIR__ . '/settings.local.php')) {
+#   include __DIR__ . '/settings.local.php';
+# }
+$databases['default']['default'] = array (
+  'database' => 'd8ftw',
+  'username' => 'drupaluser',
+  'password' => '',
+  'prefix' => '',
+  'host' => '127.0.0.1',
+  'port' => '33067',
+  'namespace' => 'Drupal\\Core\\Database\\Driver\\mysql',
+  'driver' => 'mysql',
+);
+$settings['install_profile'] = 'standard';
+$config_directories['active'] = 'sites/default/files/config_rrGOqd0JzDci-g4llAI5or3lPb0B0UTD_Q41yPcURMNWVkWqTzKakYYz9PFLGKY-7-BexlSgOw/active';
+$config_directories['staging'] = 'sites/default/files/config_rrGOqd0JzDci-g4llAI5or3lPb0B0UTD_Q41yPcURMNWVkWqTzKakYYz9PFLGKY-7-BexlSgOw/staging';
