diff --git a/config/install/disqus.settings.yml b/config/install/disqus.settings.yml
index 25563e1..e5a465a 100644
--- a/config/install/disqus.settings.yml
+++ b/config/install/disqus.settings.yml
@@ -14,3 +14,7 @@ advanced:
     disqus_sso: false
     disqus_use_site_logo: false
     disqus_logo: ''
+  lazy_loading:
+    status: 0
+    method: 'scroll'
+    class: disqus-lazy-load
diff --git a/disqus.js b/disqus.js
index 213f6da..bbc4075 100644
--- a/disqus.js
+++ b/disqus.js
@@ -18,6 +18,28 @@ var disqus_config;
 "use strict";
 
 /**
+ * JS load helper functions.
+ */
+Drupal.disqus = {
+  loadCommentScript: function (shortname) {
+    // Make the AJAX call to get the Disqus comments.
+    this.loadScript(shortname, 'embed.js')
+  },
+  loadCountScript: function (shortname) {
+    // Make the AJAX call to get the number of comments.
+    this.loadScript(shortname, 'count.js');
+  },
+  loadScript: function (shortname, scriptName) {
+    $.ajax({
+      type: 'GET',
+      url: '//' + shortname + '.disqus.com/' + scriptName,
+      dataType: 'script',
+      cache: false
+    });
+  }
+};
+
+/**
  * Drupal Disqus behavior.
  */
 Drupal.behaviors.disqus = {
@@ -56,7 +78,7 @@ Drupal.behaviors.disqus = {
                 for (var j = 0; j < callback.length; j++) {
                   fn = fn[callback[j]];
                 }
-                if(typeof fn === 'function') {
+                if (typeof fn === 'function') {
                   this.callbacks[key].push(fn);
                 }
               }
@@ -64,25 +86,36 @@ Drupal.behaviors.disqus = {
           }
         };
 
-        // Make the AJAX call to get the Disqus comments.
-        jQuery.ajax({
-          type: 'GET',
-          url: '//' + disqus_shortname + '.disqus.com/embed.js',
-          dataType: 'script',
-          cache: false
-        });
+        if (settings.disqus.lazyLoadMethod || '') {
+          switch (settings.disqus.lazyLoadMethod) {
+            case 'click':
+              $('.' + (settings.disqus.lazyLoadClass || ''))
+                .css('cursor', 'pointer')
+                .bind('click', function (event) {
+                  $(event.currentTarget).remove();
+                  Drupal.disqus.loadCommentScript(disqus_shortname);
+                });
+              break;
+
+            case 'scroll':
+              $(window).scroll(function scrollHandler(event) {
+                if ($(window).scrollTop() + $(window).height() > $('#disqus_thread').offset().top) {
+                  Drupal.disqus.loadCommentScript(disqus_shortname);
+                  $(window).unbind('scroll', scrollHandler);
+                }
+              });
+              break;
+          }
+        }
+        else {
+          Drupal.disqus.loadCommentScript(disqus_shortname);
+        }
+
       }
 
       // Load the comment numbers JavaScript.
       if (settings.disqusComments || false) {
-        disqus_shortname = settings.disqusComments;
-        // Make the AJAX call to get the number of comments.
-        jQuery.ajax({
-          type: 'GET',
-          url: '//' + disqus_shortname + '.disqus.com/count.js',
-          dataType: 'script',
-          cache: false
-        });
+        Drupal.disqus.loadCountScript(settings.disqusComments);
       }
     });
   }
diff --git a/disqus.module b/disqus.module
index 36f3e95..7a8412b 100644
--- a/disqus.module
+++ b/disqus.module
@@ -226,11 +226,17 @@ function disqus_theme() {
     'disqus_noscript' => array(
       'variables' => array('disqus' => NULL),
     ),
+    'disqus_lazy_load' => array(
+      'variables' => array('children' => NULL),
+    ),
   );
 }
 
 /**
  * Prepares the noscript tag which is used when JavaScript is not available.
+ *
+ * @return string
+ *   Rendered HTML.
  */
 function theme_disqus_noscript() {
   $return = array(
@@ -240,6 +246,24 @@ function theme_disqus_noscript() {
 }
 
 /**
+ * Prepares the comment load prompt when lazy loading is enabled.
+ *
+ * @param $variables
+ *   An array containing a "children" element, which may contain rendered content.
+ *
+ * @return string
+ *   Rendered HTML.
+ */
+function theme_disqus_lazy_load($variables) {
+  if (\Drupal::config('disqus.settings')->get('advanced.lazy_loading.status') && \Drupal::config('disqus.settings')->get('advanced.lazy_loading.method') == 'click') {
+    return '<p class="disqus-lazy-load">' . t('View the discussion thread.') . '</p>' . $variables['children'];
+  }
+  else {
+    return $variables['children'];
+  }
+}
+
+/**
  * Creates an instance of the Disqus PHP API.
  *
  * @return
diff --git a/src/DisqusCommentManager.php b/src/DisqusCommentManager.php
index 62d0d34..d5a0701 100644
--- a/src/DisqusCommentManager.php
+++ b/src/DisqusCommentManager.php
@@ -10,12 +10,23 @@ namespace Drupal\disqus;
 use Drupal\Core\Entity\EntityManagerInterface;
 use Drupal\Core\Session\AccountInterface;
 use Drupal\Core\Extension\ModuleHandlerInterface;
+use Drupal\Component\Utility\String;
 
 /**
  * Disqus comment manager contains common functions to manage disqus_comment fields.
  */
 class DisqusCommentManager implements DisqusCommentManagerInterface {
-  
+
+  /**
+   * Lazy load the Disqus script when the Disqus comment block becomes visible.
+   */
+  const DISQUS_LAZY_LOAD_ON_SCROLL = 'scroll';
+
+  /**
+   * Lazy load the Disqus script when an element is clicked.
+   */
+  const DISQUS_LAZY_LOAD_ON_CLICK = 'click';
+
   /**
    * The current user.
    *
@@ -29,7 +40,7 @@ class DisqusCommentManager implements DisqusCommentManagerInterface {
    * @var \Drupal\Core\Entity\EntityManagerInterface
    */
   protected $entityManager;
-  
+
 
   /**
    * The module handler service.
@@ -40,7 +51,7 @@ class DisqusCommentManager implements DisqusCommentManagerInterface {
 
   /**
    * Constructs the DisqusCommentManager object.
-   * 
+   *
    * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager
    *   The entity manager service.
    * @param \Drupal\Core\Session\AccountInterface $current_user
@@ -62,11 +73,11 @@ class DisqusCommentManager implements DisqusCommentManagerInterface {
     if (!$entity_type->isSubclassOf('\Drupal\Core\Entity\ContentEntityInterface')) {
       return array();
     }
-    
+
     $map = $this->getAllFields();
     return isset($map[$entity_type_id]) ? $map[$entity_type_id] : array();
   }
-  
+
   /**
    * {@inheritdoc}
    */
@@ -78,8 +89,8 @@ class DisqusCommentManager implements DisqusCommentManagerInterface {
       foreach ($data as $field_name => $field_info) {
         if ($field_info['type'] == 'disqus_comment') {
           $disqus_comment_fields[$entity_type][$field_name] = $field_info;
-        } 
-      } 
+        }
+      }
     }
     return $disqus_comment_fields;
   }
@@ -166,4 +177,25 @@ class DisqusCommentManager implements DisqusCommentManagerInterface {
     return $data;
   }
 
+  /**
+   * Assembles data about lazy loading.
+   *
+   * @return array
+   */
+  function lazy_load_settings() {
+    $data = array();
+
+    switch (\Drupal::config('disqus.settings')->get('advanced.lazy_loading.method')) {
+      case DisqusCommentManager::DISQUS_LAZY_LOAD_ON_SCROLL:
+       $data['lazyLoadMethod'] = 'scroll';
+        break;
+      case DisqusCommentManager::DISQUS_LAZY_LOAD_ON_CLICK:
+        $data['lazyLoadClass'] = String::checkPlain(\Drupal::config('disqus.settings')->get('advanced.lazy_loading.class'));
+        $data['lazyLoadMethod'] = 'click';
+        break;
+    }
+
+    return $data;
+  }
+
 }
diff --git a/src/Element/Disqus.php b/src/Element/Disqus.php
index 248b164..b05a4fa 100644
--- a/src/Element/Disqus.php
+++ b/src/Element/Disqus.php
@@ -22,7 +22,7 @@ class Disqus extends RenderElement {
   public function getInfo() {
     return array(
       '#disqus' => array(),
-      '#theme_wrappers' => array('disqus_noscript', 'container'),
+      '#theme_wrappers' => array('disqus_noscript', 'disqus_lazy_load', 'container'),
       '#attributes' => array('id' => 'disqus_thread'),
     );
   }
@@ -60,6 +60,11 @@ class Disqus extends RenderElement {
       $disqus += \Drupal::service('disqus.manager')->disqus_sso_disqus_settings();
     }
 
+    // Lazy loading configuration.
+    if (\Drupal::config('disqus.settings')->get('advanced.lazy_loading.status')) {
+      $disqus += \Drupal::service('disqus.manager')->lazy_load_settings();
+    }
+
     /**
      * Pass callbacks on if needed. Callbacks array is two dimensional array
      * with callback type as key on first level and array of JS callbacks on the
diff --git a/src/Form/DisqusSettingsForm.php b/src/Form/DisqusSettingsForm.php
index e375691..0ca1940 100644
--- a/src/Form/DisqusSettingsForm.php
+++ b/src/Form/DisqusSettingsForm.php
@@ -8,6 +8,7 @@
 namespace Drupal\disqus\Form;
 
 use Drupal\Core\Form\ConfigFormBase;
+use Drupal\disqus\DisqusCommentManager;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 use Drupal\Core\Config\ConfigFactoryInterface;
 use Drupal\Core\Extension\ModuleHandler;
@@ -223,6 +224,46 @@ class DisqusSettingsForm extends ConfigFormBase {
         ),
       ),
     );
+    $form['advanced']['lazy_loading'] = array(
+      '#weight' => 6,
+      '#type' => 'fieldset',
+      '#title' => t('Lazy Loading'),
+      '#collapsible' => FALSE,
+      '#collapsed' => FALSE,
+    );
+    $form['advanced']['lazy_loading']['disqus_lazy_load'] = array(
+      '#type' => 'checkbox',
+      '#title' => t('Use Lazy Loading'),
+      '#description' => t('Prevent the Disqus script from loading until triggered by user activity.'),
+      '#default_value' => $disqus_config->get('advanced.lazy_loading.status'),
+    );
+    $form['advanced']['lazy_loading']['disqus_lazy_load_method'] = array(
+      '#type' => 'select',
+      '#title' => t('Lazy Loading Trigger'),
+      '#description' => t('The type of user activity used to determine when the Disqus script is loaded.'),
+      '#default_value' => $disqus_config->get('advanced.lazy_loading.method'),
+      '#options' => array(
+        DisqusCommentManager::DISQUS_LAZY_LOAD_ON_SCROLL => t('When the Disqus block scrolls into view'),
+        DisqusCommentManager::DISQUS_LAZY_LOAD_ON_CLICK => t('When the user clicks on an HTML element'),
+      ),
+      '#states' => array(
+        'visible' => array(
+          'input[name="disqus_lazy_load"]' => array('checked' => TRUE),
+        ),
+      ),
+    );
+    $form['advanced']['lazy_loading']['disqus_lazy_load_class'] = array(
+      '#type' => 'textfield',
+      '#title' => t('Triggering Class'),
+      '#description' => t('The HTML class of the elements that trigger the lazy loading.'),
+      '#default_value' => $disqus_config->get('advanced.lazy_loading.class'),
+      '#states' => array(
+        'visible' => array(
+          'select[name="disqus_lazy_load_method"]' => array('value' => DisqusCommentManager::DISQUS_LAZY_LOAD_ON_CLICK),
+        ),
+      ),
+    );
+
     return parent::buildForm($form, $form_state);
   }
 
@@ -241,6 +282,9 @@ class DisqusSettingsForm extends ConfigFormBase {
       ->set('advanced.disqus_secretkey', $form_state->getValue('disqus_secretkey'))
       ->set('advanced.sso.disqus_sso', $form_state->getValue('disqus_sso'))
       ->set('advanced.sso.disqus_use_site_logo', $form_state->getValue('disqus_use_site_logo'))
+      ->set('advanced.lazy_loading.status', $form_state->getValue('disqus_lazy_load'))
+      ->set('advanced.lazy_loading.method', $form_state->getValue('disqus_lazy_load_method'))
+      ->set('advanced.lazy_loading.class', $form_state->getValue('disqus_lazy_load_class'))
       ->save();
 
     if($form_state->hasValue('disqus_api_update')) {
