diff --git a/config/install/yamlform.settings.yml b/config/install/yamlform.settings.yml
index 69b9ac8..9e5f795 100644
--- a/config/install/yamlform.settings.yml
+++ b/config/install/yamlform.settings.yml
@@ -55,7 +55,7 @@ mail:
   default_body_text: |
     Submitted on [yamlform-submission:created]
     Submitted by: [yamlform-submission:user]
-    
+
     Submitted values are:
     [yamlform-submission:values]
   default_body_html: |
@@ -153,5 +153,6 @@ test:
 ui:
   details_save: true
   dialog_disabled: false
+  video_display: dialog
 langcode: en
 third_party_settings: {  }
diff --git a/config/schema/yamlform.schema.yml b/config/schema/yamlform.schema.yml
index e9766a5..c6577e0 100644
--- a/config/schema/yamlform.schema.yml
+++ b/config/schema/yamlform.schema.yml
@@ -161,6 +161,9 @@ yamlform.settings:
       type: mapping
       label: 'User interface settings'
       mapping:
+        video_display:
+          type: string
+          label: 'Video display'
         dialog_disabled:
           type: boolean
           label: 'Disable dialogs'
diff --git a/css/yamlform.help.css b/css/yamlform.help.css
index cd43eb2..6144488 100755
--- a/css/yamlform.help.css
+++ b/css/yamlform.help.css
@@ -3,6 +3,15 @@
  * YAML form help styling
  */
 
+.block-help {
+  margin-bottom: 1em;
+}
+
+.button.button-yamlform-help-video:before {
+  content: '► ';
+  font-size: .8em;
+}
+
 .yamlform-help-video-youtube {
   margin: 1.5em 0;
   max-width: 1024px;
diff --git a/includes/yamlform.help.inc b/includes/yamlform.help.inc
index f588f04..0145444 100644
--- a/includes/yamlform.help.inc
+++ b/includes/yamlform.help.inc
@@ -12,8 +12,9 @@ use Drupal\Core\Url;
  * Implements hook_help().
  */
 function yamlform_help($route_name, RouteMatchInterface $route_match) {
+  $build = [];
+  
   if ($route_name == 'help.page.yamlform') {
-    $build = [];
     $build['about'] = [
       'title' => [
         '#markup' => t('About'),
@@ -37,80 +38,73 @@ function yamlform_help($route_name, RouteMatchInterface $route_match) {
     ];
 
     $help = _yamlform_help();
-    foreach ($help as $name => $info) {
+    foreach ($help as $id => $info) {
       // Title.
-      $build['uses']['content'][$name]['title'] = [
-        '#markup' => $info['title'],
+      $build['uses']['content'][$id]['title'] = [
         '#prefix' => '<dt>',
         '#suffix' => '</dt>',
       ];
-      // Content.
-      $build['uses']['content'][$name]['content'] = [
-        '#prefix' => '<dd>',
-        '#suffix' => '</dd>',
-      ];
-      if (is_array($info['content'])) {
-        $build['uses']['content'][$name]['content'] += $info['content'];
+      if (isset($info['url'])) {
+        $build['uses']['content'][$id]['title']['link'] = [
+          '#type' => 'link',
+          '#url' => $info['url'],
+          '#title' => $info['title'],
+        ];
       }
       else {
-        $build['uses']['content'][$name]['content']['#markup'] = $info['content'];
+        $build['uses']['content'][$id]['title']['#markup'] = $info['title'];
       }
-      // Video.
-      if (isset($info['youtube_id'])) {
-        $build['uses']['content'][$name]['content']['video'] = [
+      // Content.
+      $build['uses']['content'][$id]['content'] = [
+        '#prefix' => '<dd>',
+        '#suffix' => '</dd>',
+        'content' => [
           '#theme' => 'yamlform_help',
-          '#title' => $info['title'],
-          '#youtube_id' => $info['youtube_id'],
-          // Make sure details is always closed on the main help page.
-          '#element_id' => FALSE,
-          '#open' => FALSE,
-        ];
-      }
-    }
-    $build['#attached']['library'][] = 'yamlform/yamlform.help';
-    return $build;
-  }
-
-  // Get path from route match.
-  $path = preg_replace('/^' . preg_quote(base_path(), '/') . '/', '/', Url::fromRouteMatch($route_match)->setAbsolute(FALSE)->toString());
+          '#info' => $info,
+        ],
+      ];
 
-  if (strpos($route_name, 'yamlform') === FALSE && strpos($path, '/yamlform') === FALSE) {
-    return NULL;
+    }
   }
+  else {
+    // Get path from route match.
+    $path = preg_replace('/^' . preg_quote(base_path(), '/') . '/', '/', Url::fromRouteMatch($route_match)->setAbsolute(FALSE)->toString());
 
-  /** @var \Drupal\Core\Path\PathMatcherInterface $path_matcher */
-  $path_matcher = \Drupal::service('path.matcher');
+    if (strpos($route_name, 'yamlform') === FALSE && strpos($path, '/yamlform') === FALSE) {
+      return NULL;
+    }
 
-  $help = _yamlform_help();
-  $build = [];
-  foreach ($help as $name => $info) {
-    // Set default values.
-    $info += [
-      'routes' => [],
-      'paths' => [],
-      'open' => FALSE,
-      'youtube_id' => NULL,
-    ];
+    /** @var \Drupal\Core\Path\PathMatcherInterface $path_matcher */
+    $path_matcher = \Drupal::service('path.matcher');
 
-    $is_route_match = in_array($route_name, $info['routes']);
-    $is_path_match = ($info['paths'] && $path_matcher->matchPath($path, implode("\n", $info['paths'])));
-    if ($is_route_match || $is_path_match) {
-      $build[$name] = [
-        '#theme' => 'yamlform_help',
-        '#title' => $info['title'],
-        '#content' => $info['content'],
-        '#open' => $info['open'],
-        '#youtube_id' => $info['youtube_id'],
+    $help = _yamlform_help();
+    $build = [];
+    foreach ($help as $id => $info) {
+      // Set default values.
+      $info += [
+        'routes' => [],
+        'paths' => [],
       ];
-      if (isset($info['warning'])) {
-        drupal_set_message($info['warning'], 'warning');
-        $build['#cache']['max-age'] = 0;
+
+      $is_route_match = in_array($route_name, $info['routes']);
+      $is_path_match = ($info['paths'] && $path_matcher->matchPath($path, implode("\n", $info['paths'])));
+      if ($is_route_match || $is_path_match) {
+        $build[$id] = [
+          '#theme' => 'yamlform_help',
+          '#info' => $info,
+        ];
+        if (isset($info['warning'])) {
+          drupal_set_message($info['warning'], 'warning');
+          $build['#cache']['max-age'] = 0;
+        }
       }
     }
   }
 
   if ($build) {
-    $build['#attached']['library'][] = 'yamlform/yamlform.help';
+    $renderer = \Drupal::service('renderer');
+    $config = \Drupal::config('yamlform.settings');
+    $renderer->addCacheableDependency($build, $config);
     return $build;
   }
   else {
@@ -145,7 +139,8 @@ function _yamlform_help() {
       'entity.yamlform.collection',
     ],
     'title' => t('Managing forms'),
-    'content' => t('The <a href=":href">Forms</a> page lists all available forms, which can be filtered by title, description, and/or elements.', [':href' => Url::fromRoute('entity.yamlform.collection')->toString()]),
+    'url' => Url::fromRoute('entity.yamlform.collection'),
+    'content' => t('The Forms page lists all available forms, which can be filtered by title, description, and/or elements.'),
     'youtube_id' => 'QyVytonGeH8',
   ];
 
@@ -157,7 +152,8 @@ function _yamlform_help() {
         'entity.yamlform.templates',
       ],
       'title' => t('Using templates'),
-      'content' => t('The <a href=":href">Templates</a> page lists reusable templates that can be duplicated and customized to create new forms.', [':href' => Url::fromRoute('entity.yamlform.templates')->toString()]),
+      'url' => Url::fromRoute('entity.yamlform.templates'),
+      'content' => t('The Templatespage lists reusable templates that can be duplicated and customized to create new forms.'),
       'youtube_id' => 'tvMCqC-H0bI',
     ];
   }
@@ -169,7 +165,8 @@ function _yamlform_help() {
       'entity.yamlform_submission.collection',
     ],
     'title' => t('Managing results'),
-    'content' => t('The <a href=":href">Results</a> page lists all incoming submissions for all forms.', [':href' => Url::fromRoute('entity.yamlform_submission.collection')->toString()]),
+    'url' => Url::fromRoute('entity.yamlform_submission.collection'),
+    'content' => t('The Results page lists all incoming submissions for all forms.'),
     'youtube_id' => 'EME1HoYTmVA',
   ];
 
@@ -180,7 +177,8 @@ function _yamlform_help() {
       'yamlform.settings',
     ],
     'title' => t('Defining default settings'),
-    'content' => t('The <a href=":href">Settings</a> page allows administrators to manage global form and UI configuration settings, including updating default labels & descriptions, settings default format, and defining test dataset.', [':href' => Url::fromRoute('yamlform.settings')->toString()]),
+    'url' => Url::fromRoute('yamlform.settings'),
+    'content' => t('The Settings page allows administrators to manage global form and UI configuration settings, including updating default labels & descriptions, settings default format, and defining test dataset.'),
     'youtube_id' => 'UWxlfu7PEQg',
   ];
 
@@ -191,7 +189,8 @@ function _yamlform_help() {
       'entity.yamlform_options.collection',
     ],
     'title' => t('Defining options'),
-    'content' => t('The <a href=":href">Options</a> page lists predefined options which are used to build select menus, radio buttons, checkboxes and likerts.'),
+    'url' => Url::fromRoute('entity.yamlform_options.collection'),
+    'content' => t('The Options page lists predefined options which are used to build select menus, radio buttons, checkboxes and likerts.'),
     'youtube_id' => 'vrL_TR8aQJo',
   ];
 
@@ -202,7 +201,8 @@ function _yamlform_help() {
       'yamlform.element_plugins',
     ],
     'title' => t('Form element plugins'),
-    'content' => t('The <a href=":href">Elements</a> page  lists all available YAML form element plugins.', [':href' => Url::fromRoute('yamlform.element_plugins')->toString()]) . ' ' .
+    'url' => Url::fromRoute('yamlform.element_plugins'),
+    'content' => t('The Elements page  lists all available YAML form element plugins.') . ' ' .
     t('YAML form element plugins are used to enhance existing render/form elements. YAML form element plugins provide default properties, data normalization, custom validation, element configuration form, and customizable display formats.'),
     'youtube_id' => 'WSNGzJwnpeQ',
   ];
@@ -214,7 +214,8 @@ function _yamlform_help() {
       'yamlform.handler_plugins',
     ],
     'title' => t('Form handler plugins'),
-    'content' => t('The <a href=":href">Handler</a> page  lists all available YAML form handler plugins.', [':href' => Url::fromRoute('yamlform.handler_plugins')->toString()]) . ' ' .
+    'url' => Url::fromRoute('yamlform.handler_plugins'),
+    'content' => t('The Handler page  lists all available YAML form handler plugins.') . ' ' .
     t('Handlers are used to route submitted data to external applications and send notifications & confirmations.'),
     'youtube_id' => 'v5b4sOsUtn4',
   ];
@@ -226,7 +227,8 @@ function _yamlform_help() {
       'yamlform.admin_settings.third_party',
     ],
     'title' => t('Configuring global third party settings'),
-    'content' => t('The <a href=":href">Third party settings</a> page allows contrib and custom modules to define global settings that are applied to all forms and submissions.', [':href' => Url::fromRoute('yamlform.admin_settings.third_party')->toString()]),
+    'url' => Url::fromRoute('yamlform.admin_settings.third_party'),
+    'content' => t('The Third party settings page allows contrib and custom modules to define global settings that are applied to all forms and submissions.'),
     'youtube_id' => 'kuguydtCWf0',
   ];
 
@@ -412,6 +414,10 @@ function _yamlform_help() {
     'youtube_id' => 'CkRQMS6eJII',
   ];
 
+  foreach ($help as $id => &$info) {
+    $info['id'] = $id;
+  }
+
   return $help;
 }
 
diff --git a/js/yamlform.help.js b/js/yamlform.help.js
deleted file mode 100755
index 2ca7a9f..0000000
--- a/js/yamlform.help.js
+++ /dev/null
@@ -1,37 +0,0 @@
-/**
- * @file
- * Javascript behaviors for YAML form help.
- */
-
-(function ($, Drupal) {
-
-  'use strict';
-
-  /**
-   * Autoplay help video when details element is opened.
-   */
-  Drupal.behaviors.yamlFormHelpDetailsVideo = {
-    attach: function (context) {
-      $('details.yamlform-help-details > summary', context).once('yamlform-help-details').click(function() {
-        var $details = $(this).parent();
-
-        // Track is details has 'open' attribute, which means that it is
-        // being closed.
-        var isClosing = ($details.attr('open') == 'open');
-
-        $details.find('.yamlform-help-video-youtube iframe').each(function() {
-          var src = $(this).attr('src');
-          if (isClosing) {
-            $(this).attr('src', src.replace('?autoplay=1', ''));
-          }
-          else {
-            $(this).attr('src', src + '?autoplay=1');
-          }
-        })
-
-      });
-    }
-  };
-
-
-})(jQuery, Drupal);
diff --git a/src/Controller/YamlFormHelpController.php b/src/Controller/YamlFormHelpController.php
new file mode 100644
index 0000000..92c5e49
--- /dev/null
+++ b/src/Controller/YamlFormHelpController.php
@@ -0,0 +1,64 @@
+<?php
+
+namespace Drupal\yamlform\Controller;
+
+use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
+
+/**
+ * Provides route responses for YAML form help.
+ */
+class YamlFormHelpController {
+
+  /**
+   * Returns dedicated help page with a video.
+   *
+   * @param \Symfony\Component\HttpFoundation\Request $request
+   *   The current request.
+   * @param string $id
+   *   The id of the dedicated help section.
+   *
+   * @return array
+   *   A renderable array containing a dedicated help page with a video.
+   */
+  public function index(Request $request, $id) {
+    $id = str_replace('-', '_', $id);
+    $help = _yamlform_help();
+    if (!isset($help[$id])) {
+      throw new NotFoundHttpException();
+    }
+
+    $build = [];
+    if (is_array($help[$id]['content'])) {
+      $build['content'] = $help[$id]['content'];
+    }
+    else {
+      $build['content'] = [
+        '#markup' => $help[$id]['content'],
+      ];
+    }
+    if ($help[$id]['youtube_id']) {
+      $build['video'] = [
+        '#theme' => 'yamlform_help_video_youtube',
+        '#youtube_id' => $help[$id]['youtube_id'],
+      ];
+    }
+    return $build;
+  }
+
+  /**
+   * Route title callback.
+   *
+   * @param string $id
+   *   The id of the dedicated help section.
+   *
+   * @return string
+   *   The dedicated help section's title.
+   */
+  public function title(Request $request, $id) {
+    $id = str_replace('-', '_', $id);
+    $help = _yamlform_help();
+    return (isset($help[$id])) ? $help[$id]['title'] : t('Watch video');
+  }
+
+}
diff --git a/src/Form/YamlFormAdminSettingsForm.php b/src/Form/YamlFormAdminSettingsForm.php
index b0343e7..6bb3d6c 100755
--- a/src/Form/YamlFormAdminSettingsForm.php
+++ b/src/Form/YamlFormAdminSettingsForm.php
@@ -470,6 +470,17 @@ class YamlFormAdminSettingsForm extends ConfigFormBase {
       '#open' => FALSE,
       '#tree' => TRUE,
     ];
+    $form['ui']['video_display'] = [
+      '#type' => 'select',
+      '#title' => $this->t('Video display'),
+      '#description' => $this->t('Controls how videos are displayed in inline help and within the YAML Form help section.'),
+      '#options' => [
+        'dialog' => $this->t('Dialog'),
+        'link' => $this->t('External link'),
+        'hidden' => $this->t('Hidden'),
+      ],
+      '#default_value' => $config->get('ui.video_display'),
+    ];
     $form['ui']['details_save'] = [
       '#type' => 'checkbox',
       '#title' => $this->t('Save details open/close state'),
diff --git a/templates/yamlform-help-video-youtube.html.twig b/templates/yamlform-help-video-youtube.html.twig
index 2ca8d56..0a32740 100644
--- a/templates/yamlform-help-video-youtube.html.twig
+++ b/templates/yamlform-help-video-youtube.html.twig
@@ -9,8 +9,9 @@
  * @ingroup themeable
  */
 #}
+{{ attach_library('yamlform/yamlform.help') }}
 <div class="yamlform-help-video-youtube">
   <div class="yamlform-help-video-youtube--container">
-    <iframe width="560" height="315" src="https://www.youtube.com/embed/{{ youtube_id }}" frameborder="0" allowfullscreen></iframe>
+    <iframe width="560" height="315" src="https://www.youtube.com/embed/{{ youtube_id }}?rel=0&autoplay=1" frameborder="0" allowfullscreen></iframe>
   </div>
 </div>
diff --git a/templates/yamlform-help.html.twig b/templates/yamlform-help.html.twig
index bdedf00..45f1d26 100644
--- a/templates/yamlform-help.html.twig
+++ b/templates/yamlform-help.html.twig
@@ -14,4 +14,5 @@
  * @ingroup themeable
  */
 #}
+{{ attach_library('yamlform/yamlform.help') }}
 {{ help }}
diff --git a/yamlform.install b/yamlform.install
index f80288b..6780a55 100644
--- a/yamlform.install
+++ b/yamlform.install
@@ -899,8 +899,18 @@ function yamlform_update_8038() {
 }
 
 /**
- * Issue #2783575: Add autofocus form setting
+ * Issue #2783575: Add autofocus form setting.
  */
 function yamlform_update_8039() {
   _yamlform_update_settings();
 }
+
+/**
+ * Issue #2783361: Replace embedded videos by links to thems
+ */
+function yamlform_update_8040() {
+  // Update 'yamlform.settings' configuration.
+  $settings_config = \Drupal::configFactory()->getEditable('yamlform.settings');
+  $settings_config->set('ui.video_display', 'dialog');
+  $settings_config->save();
+}
diff --git a/yamlform.libraries.yml b/yamlform.libraries.yml
index 8a16de9..e74b12e 100755
--- a/yamlform.libraries.yml
+++ b/yamlform.libraries.yml
@@ -26,12 +26,6 @@ yamlform.help:
   css:
     theme:
       css/yamlform.help.css: {}
-  js:
-    js/yamlform.help.js:  {}
-  dependencies:
-    - core/drupal
-    - core/jquery
-    - core/jquery.once
 
 # Form.
 
diff --git a/yamlform.module b/yamlform.module
index b6e4945..984ceff 100755
--- a/yamlform.module
+++ b/yamlform.module
@@ -325,7 +325,7 @@ function yamlform_page_attachments(&$page) {
 function yamlform_theme() {
   $info = [
     'yamlform_help' => [
-      'variables' => ['title' => NULL, 'content' => NULL, 'youtube_id' => NULL, 'open' => TRUE, 'element_id' => 'help-details'],
+      'variables' => ['info' => []],
     ],
     'yamlform_help_video_youtube' => [
       'variables' => ['youtube_id' => NULL],
diff --git a/yamlform.routing.yml b/yamlform.routing.yml
index 92fd581..ee8cd27 100755
--- a/yamlform.routing.yml
+++ b/yamlform.routing.yml
@@ -6,6 +6,14 @@ yamlform.settings:
   requirements:
     _permission: 'administer yamlform'
 
+yamlform.help:
+  path: '/admin/help/yamlform/{id}'
+  defaults:
+    _controller: '\Drupal\yamlform\Controller\YamlFormHelpController::index'
+    _title_callback: '\Drupal\yamlform\Controller\YamlFormHelpController::title'
+  requirements:
+    _access: 'TRUE'
+
 yamlform.admin_settings.third_party:
   path: '/admin/structure/yamlform/settings/third-party'
   defaults:
diff --git a/yamlform.theme.inc b/yamlform.theme.inc
index cff3864..5ae3a24 100644
--- a/yamlform.theme.inc
+++ b/yamlform.theme.inc
@@ -8,12 +8,12 @@
 use Drupal\Core\Link;
 use Drupal\Core\Url;
 use Drupal\Component\Serialization\Yaml;
-use Drupal\Component\Utility\Unicode;
 use Drupal\Component\Utility\Xss;
+use Drupal\yamlform\Element\YamlFormCodeMirror;
 use Drupal\yamlform\Utility\YamlFormTidy;
 use Drupal\yamlform\Utility\YamlFormDateHelper;
+use Drupal\yamlform\Utility\YamlFormDialogHelper;
 use Drupal\yamlform\Utility\YamlFormElementHelper;
-use Drupal\yamlform\Element\YamlFormCodeMirror;
 
 /**
  * Prepares variables for yamlform help.
@@ -26,37 +26,49 @@ use Drupal\yamlform\Element\YamlFormCodeMirror;
  *   - content: Help content.
  */
 function template_preprocess_yamlform_help(&$variables) {
-  $t_args = ['@title' => Unicode::strtolower($variables['title'])];
-  if ($variables['youtube_id']) {
-    $title = t('Watch a video about @title', $t_args);
-  }
-  else {
-    $title = t('Learn more about @title', $t_args);
-  }
+  $info = $variables['info'];
 
-  $help = [
-    '#type' => 'details',
-    '#title' => $title,
-    '#attributes' => [
-      'class' => ['yamlform-help-details'],
-      'data-yamlform-element-id' => $variables['element_id'],
-    ],
-    '#open' => FALSE,
-  ];
-
-  if (is_array($variables['content'])) {
-    $help['content'] = $variables['content'];
+  $variables += $info;
+
+  $help = [];
+  if (is_array($info['content'])) {
+    $help['content'] = $info['content'];
   }
   else {
     $help['content'] = [
-      '#markup' => $variables['content'],
+      '#markup' => $info['content'],
     ];
   }
-  if ($variables['youtube_id']) {
-    $help['video'] = [
-      '#theme' => 'yamlform_help_video_youtube',
-      '#youtube_id' => $variables['youtube_id'],
-    ];
+
+  if ($info['youtube_id']) {
+    $video_display = \Drupal::config('yamlform.settings')->get('ui.video_display');
+    $classes = ['button', 'button-action', 'button--small', 'button-yamlform-help-video'];
+    switch ($video_display) {
+      case 'dialog';
+        $help['link'] = [
+          '#type' => 'link',
+          '#title' => 'Watch video',
+          '#url' => Url::fromRoute('yamlform.help', ['id' => str_replace('_', '-', $info['id'])]),
+          '#attributes' => YamlFormDialogHelper::getModalDialogAttributes(1000, $classes),
+          '#prefix' => ' ',
+        ];
+        break;
+
+      case 'link':
+        $help['link'] = [
+          '#type' => 'link',
+          '#title' => 'Watch video',
+          '#url' => Url::fromUri('https://youtu.be/' . $info['youtube_id']),
+          '#attributes' => ['class' => $classes],
+          '#prefix' => ' ',
+        ];
+
+        break;
+
+      case 'hidden':
+      default:
+        break;
+    }
   }
 
   $variables['help'] = $help;
