diff --git a/default_content_deploy.links.menu.yml b/default_content_deploy.links.menu.yml
index 0ed4066..3b3b078 100644
--- a/default_content_deploy.links.menu.yml
+++ b/default_content_deploy.links.menu.yml
@@ -1,5 +1,17 @@
+default_content_deploy.settings:
+  title: 'Default Content Deploy'
+  description: 'Various settings for Default Content Deploy.'
+  parent: system.admin_config_development
+  route_name: default_content_deploy.settings
+
 default_content_deploy.import:
-  title: 'Default Content Deploy - Import'
+  title: 'Import'
   description: 'Perform content import (drush dcdi) via UI.'
   route_name: default_content_deploy.import
-  parent: system.admin_config_development
+  parent: default_content_deploy.settings
+
+default_content_deploy.content_directory:
+  title: 'Content Directory'
+  description: 'Set content directory for Default Content Deploy.'
+  route_name: default_content_deploy.content_directory
+  parent: default_content_deploy.settings
diff --git a/default_content_deploy.routing.yml b/default_content_deploy.routing.yml
index 1b8ac45..8872a17 100644
--- a/default_content_deploy.routing.yml
+++ b/default_content_deploy.routing.yml
@@ -1,5 +1,15 @@
+default_content_deploy.settings:
+  path: '/admin/config/development/dcd'
+  defaults:
+    _title: Default Content Deploy
+    _controller: '\Drupal\system\Controller\SystemController::systemAdminMenuBlockPage'
+  requirements:
+    _is_administrator: 'true'
+  options:
+    _admin_route: TRUE
+
 default_content_deploy.import:
-  path: '/admin/config/development/dcd-import'
+  path: '/admin/config/development/dcd/import'
   defaults:
     _form: 'Drupal\default_content_deploy\Form\ImportForm'
     _title: 'Default Content Deploy - Import'
@@ -7,3 +17,13 @@ default_content_deploy.import:
     _permission: 'import content'
   options:
     _admin_route: TRUE
+
+default_content_deploy.content_directory:
+  path: '/admin/config/development/dcd/content-directory'
+  defaults:
+    _form: 'Drupal\default_content_deploy\Form\ContentDirectoryForm'
+    _title: 'Default Content Deploy - Content Directory'
+  requirements:
+    _permission: 'administer site configuration'
+  options:
+    _admin_route: TRUE
diff --git a/src/DefaultContentDeployBase.php b/src/DefaultContentDeployBase.php
index 05a0ca0..a726921 100644
--- a/src/DefaultContentDeployBase.php
+++ b/src/DefaultContentDeployBase.php
@@ -91,34 +91,15 @@ class DefaultContentDeployBase {
    *   $settings['default_content_deploy_content_directory'] = '../content';
    */
   public function getContentFolder() {
-    global $config;
-    // Using $settings["default_content_deploy_content_directory"]
-    // is recommended.
-    if ($contentDir = $this->settings->get('default_content_deploy_content_directory')) {
-      return $contentDir;
-    };
-
-    // Using $config_directories['content_directory'] is deprecated,
-    // because it causes unnecessary questions during drush cim or cex commands.
-    // But it was (by mistake) implemented in 8.x-1.0-alpha1 and 8.x-1.0-alpha2,
-    // so we have to maintain backward compatibility.
-    // Using $config['content_directory'] is newer, but also deprecated.
-    // @todo Remove both $configs backward compatibility before beta version.
-
-    if (isset($config) && isset($config['content_directory'])) {
-      $contentDir = $config['content_directory'];
-      $this->logger->warning(t('Using $config["content_directory"] is deprecated. Use $settings["default_content_deploy_content_directory"] in your settings.php.'));
+    $config = $this->configFactory->get('wsf_default_content_deploy.content_directory');
+
+    if ($config && $contentDir = $config->get('content_directory')) {
       return $contentDir;
     }
-    try {
-      $contentDir = config_get_config_directory('content_directory');
-      $this->logger->warning(t('Use $config_directories["content_directory"] is deprecated. Use $settings["default_content_deploy_content_directory"] in your settings.php.'));
+    elseif ($contentDir = $this->settings->get('default_content_deploy_content_directory')) {
       return $contentDir;
     }
-    catch (\Exception $exception) {
-      // The $config_directories['content_directory'] not found.
-      // It is OK. $config_directories is deprecated.
-    }
+
     // No content directory found in the settings.
     // Get part of hashed Drupal salt due to security reason
     // and construct content directory name in public://.
diff --git a/src/Form/ContentDirectoryForm.php b/src/Form/ContentDirectoryForm.php
new file mode 100644
index 0000000..fead89c
--- /dev/null
+++ b/src/Form/ContentDirectoryForm.php
@@ -0,0 +1,63 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\default_content_deploy\Form\ContentDirectoryForm.
+ */
+
+namespace Drupal\default_content_deploy\Form;
+
+use Drupal\Core\Form\ConfigFormBase;
+use Drupal\Core\Form\FormStateInterface;
+
+/**
+ * Sets content directory.
+ */
+class ContentDirectoryForm extends ConfigFormBase {
+
+  /** @var string Config settings */
+  const SETTINGS = 'default_content_deploy.content_directory';
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getFormId() {
+    return 'dcd_content_directory_form';
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function getEditableConfigNames() {
+    return [
+      static::SETTINGS,
+    ];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function buildForm(array $form, FormStateInterface $form_state) {
+    $config = $this->config(static::SETTINGS);
+
+    $form['content_directory'] = [
+      '#type' => 'textfield',
+      '#title' => $this->t('Content Directory'),
+      '#default_value' => $config->get('content_directory'),
+    ];
+
+    return parent::buildForm($form, $form_state);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function submitForm(array &$form, FormStateInterface $form_state) {
+    $this->configFactory->getEditable(static::SETTINGS)
+      ->set('content_directory', $form_state->getValue('content_directory'))
+      ->save();
+
+    parent::submitForm($form, $form_state);
+  }
+
+}
