diff --git a/dfp.admin.inc b/dfp.admin.inc
index 34ca6e7..bf028af 100644
--- a/dfp.admin.inc
+++ b/dfp.admin.inc
@@ -71,6 +71,17 @@ function dfp_admin_settings($form, $form_state) {
     '#default_value' => variable_get('dfp_async_rendering', 1),
     '#description' => t('This can speed up page rendering time by loading page content without waiting for ads to load.'),
   );
+  $form['global_tag_settings']['dfp_async_load'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Asynchronous loading mode'),
+    '#default_value' => variable_get('dfp_async_load', 0),
+    '#description' => t('Recommended to prevent JavaScript from blocking the parser. "Async" method is only available if <a href="!advaggurl">advagg module</a> is enabled.', array('!advaggurl' => 'https://www.drupal.org/project/advagg')),
+    '#states' => array(
+      'visible' => array(
+        'input[name="dfp_async_rendering"]' => array('checked' => TRUE),
+      ),
+    ),
+  );
   $form['global_tag_settings']['dfp_disable_init_load'] = array(
     '#type' => 'checkbox',
     '#title' => t('Disable initial ad load'),
diff --git a/dfp.module b/dfp.module
index b603d41..4b0e026 100755
--- a/dfp.module
+++ b/dfp.module
@@ -655,6 +655,13 @@ function _dfp_get_ad_category($term, $clean_string = FALSE) {
 }
 
 /**
+ * Helper function to make async loading detection easier.
+ */
+function _dfp_js_async_load() {
+  return variable_get('dfp_async_rendering', 1) && variable_get('dfp_async_load', 0) && module_exists('advagg');
+}
+
+/**
  * Helper function to include javascript variables, etc in the header above all
  * slot definitions.
  */
@@ -681,6 +688,7 @@ function _dfp_js_global_settings() {
   //        However, there is a good chance this might break <= IE8.
   $options['type'] = 'external';
   $options['weight']++;
+  $options['async'] = _dfp_js_async_load();
   drupal_add_js(($GLOBALS['is_https'] ? "https://" : "http://") . DFP_GOOGLE_TAG_SERVICES_URL, $options);
 
   // Add global settings with a heavy weight so that they appear after all the
@@ -717,9 +725,9 @@ function _dfp_js_global_settings() {
     }
   }
 
-  $js .= '});' . "\n";
   $js .= variable_get('dfp_injected_js2', '') . "\n";
   $js .= 'googletag.enableServices();';
+  $js .= '});' . "\n";
 
   $options = array(
     'type' => 'inline',
@@ -744,6 +752,9 @@ function _dfp_js_slot_definition($tag) {
 
   // Add the js needed to define this adSlot to <head>.
   $js = '';
+  if (_dfp_js_async_load()) {
+    $js = 'googletag.cmd.push(function() {' . "\n";
+  }
   // Start by defining breakpoints for this ad.
   if (!empty($tag->breakpoints)) {
     $breakpoints = $tag->breakpoints;
@@ -791,6 +802,9 @@ function _dfp_js_slot_definition($tag) {
     $js .= '  .defineSizeMapping(mapping)' . "\n";
   }
   $js = rtrim($js, "\n") . ';';
+  if (_dfp_js_async_load()) {
+    $js .= '});' . "\n";
+  }
 
   $options = array(
     'type' => 'inline',
