diff --git a/dart.admin.inc b/dart.admin.inc
index 508795a..7d6d2e3 100644
--- a/dart.admin.inc
+++ b/dart.admin.inc
@@ -15,6 +15,14 @@ function dart_admin_settings() {
   $form['#validate'][] = 'dart_admin_settings_validate';
   
   // Default tag settings.
+  $form['dart_global_network_id'] = array(
+    '#type'           => 'textfield',
+    '#title'          => t('Network ID'),
+    '#default_value'  => variable_get('dart_global_network_id', ''),
+    '#required'       => FALSE,
+    '#description'    => t('The Network ID to use on all tags. This is required for networks that upgraded from DART to DoubleClick. If you were not provided a network ID from DoubleClick leave this blank.'),
+    '#maxlength'      => 32,
+  );
   $form['default_tag_settings'] = array(
     '#theme'        => 'dart_global_defaults_form',
     '#description'  => 'Enter the global values that DART tags should use for prefix, site & zone. For example, groups.drupal.org might use gdo.group/general; drupal.org might use drupal.default (notice there is no zone); '
@@ -43,13 +51,11 @@ function dart_admin_settings() {
     '#description'    => t('The value to use when no "zone" is specified on a given page.'),
     '#maxlength'      => 32,
   );
-  $form['default_tag_settings']['dart_global_network_id'] = array(
-    '#type'           => 'textfield',
-    '#title'          => t('Network ID'),
-    '#default_value'  => variable_get('dart_global_network_id', ''),
-    '#required'       => FALSE,
-    '#description'    => t('The Network ID to use on all tags. This is required for networks that upgraded from DART to DoubleClick. If you were not provided a network ID from DoubleClick leave this blank.'),
-    '#maxlength'      => 32,
+  $form['dart_load_last'] = array(
+    '#type'           => 'checkbox',
+    '#title'          => t('Load ads last'),
+    '#default_value'  => variable_get('dart_load_last', '0'),
+    '#description'    => t('Wait until the entire page has loaded before loading ads. This will allow your pages to load faster but may cause empty spaces to appear on your pages before the ads load.'),
   );
 
   // Global display options.
diff --git a/dart.info b/dart.info
index bc07a1b..8507694 100644
--- a/dart.info
+++ b/dart.info
@@ -3,4 +3,5 @@ name = DART
 description = Integrates DART ads onto a site.
 core = 6.x
 package = Advertising
-dependencies[] = ctools
\ No newline at end of file
+dependencies[] = ctools
+dependencies[] = libraries
diff --git a/dart.install b/dart.install
index f3ec8f8..5058d16 100644
--- a/dart.install
+++ b/dart.install
@@ -92,6 +92,37 @@ function dart_schema() {
 }
 
 /**
+ * Implementation of hook_requirements().
+ */
+function dart_requirements() {
+  $t = get_t();
+
+  if ($path = libraries_get_path('writecapture')) {
+    $exists = file_exists($path . '/jquery.writeCapture.js');
+  }
+
+  // In order to allow DART tags to be loaded ajaxically, we are using the
+  // writeCaptire jquery plugin.
+  if (!$exists) {
+    $requirements['dart'] = array(
+      'title' => $t('WriteCapture jquery plugin'),
+      'value' => $t('Missing'),
+      'description' => $t('This DART module requires !wc_link to be included using the !lib_link. Please download !wc_link and copy <code>plugin/writeCapture.js</code> file to <code>/sites/all/libraries/writecapture/jquery.writeCapture.js</code>', array('!wc_link' => l($t('WriteCapture jQuery plugin'), 'https://github.com/iamnoah/writeCapture'), '!lib_link' => l($t('Libraries module'), 'http://drupal.org/project/libraries'))),
+      'severity' => REQUIREMENT_ERROR,
+    );
+  }
+  else {
+    $requirements['dart'] = array(
+      'title' => $t('WriteCapture jquery plugin'),
+      'value' => $t('Exists'),
+      'severity' => REQUIREMENT_OK,
+    );
+  }
+
+  return $requirements;
+}
+
+/**
  * Implementation of hook_update_N().
  */
 function dart_update_6200() {
@@ -159,6 +190,8 @@ function dart_update_6200() {
   return $ret;
 }
 
+
+
 /**
  * Helper function to rename variables in the variables table.
  *
diff --git a/dart.js b/dart.js
index 71b82fa..bf88b21 100644
--- a/dart.js
+++ b/dart.js
@@ -12,6 +12,18 @@ Drupal.DART.settings = {
 };
 
 /**
+ * If there are tags in the loadLastTags, then load them where they belong.
+ */
+Drupal.behaviors.DART = function() {
+  if (typeof(Drupal.DART.settings.loadLastTags) == 'object') {
+    for (var machinename in Drupal.DART.settings.loadLastTags) {
+      scripttag = Drupal.DART.tag(Drupal.DART.settings.loadLastTags[machinename]);
+      $('#block-dart-dart-tag-' + machinename +':visible').writeCapture().append(scripttag);
+    }
+  }
+}
+
+/**
  * Using document.write, add a DART tag to the page
  */
 Drupal.DART.tag = function(tag) {
diff --git a/dart.module b/dart.module
index 67e03db..0a4b502 100644
--- a/dart.module
+++ b/dart.module
@@ -314,11 +314,19 @@ function dart_preprocess_page(&$variables) {
   
   // Add page key|value pairs to the drupal.settings.dart javascript variable.
   $key_vals = _dart_get_page_key_vals();
-
   foreach ($key_vals as $key => $val) {
     $inline_js .= 'var ' . $key . ' = ' . $val . ';' . "\n";
   }
 
+  // Add settings for loading ads last.
+  if (variable_get('dart_load_last', '0')) {
+    if ($path = libraries_get_path('writecapture')) {
+      drupal_add_js($path . '/jquery.writeCapture.js');
+    }
+    $inline_js .= 'Drupal.DART.settings.writeTags = false;' . "\n";
+    $inline_js .= 'Drupal.DART.settings.loadLastTags = {};' . "\n";
+  }
+
   // Include the inline js & dart.js file.
   drupal_add_js(trim($inline_js, "\n"), 'inline');
   drupal_add_js(drupal_get_path('module', 'dart') . '/dart.js');
@@ -493,6 +501,7 @@ function template_preprocess_dart_tag(&$variables) {
 
   $variables['attributes']  = array('class' => 'dart-tag');
   $variables['json_tag']    = drupal_to_js($tag);
+  $variables['load_last']   = variable_get('dart_load_last', '0');
 
   if (isset($tag->mode) && $tag->mode == 'test') {
     $variables['show_script_tag']   = TRUE;
diff --git a/theme/dart_tag.tpl.php b/theme/dart_tag.tpl.php
index c5d4e68..96962d7 100644
--- a/theme/dart_tag.tpl.php
+++ b/theme/dart_tag.tpl.php
@@ -8,24 +8,31 @@
  * - $tag: The full tag object or NULL. If it's NULL, all other
  *         vars listed below will be NULL as well
  * - $json_tag: a js version of $tag.
- * - $attributes: any attributes that should be displayed on teh outer-most div.
+ * - $attributes: any attributes that should be displayed on the outer-most div.
  * - $show_script_tag: boolean.
  * - $show_noscript_tag: boolean.
  * - $noscript_tag: the <noscript> tag for this DART tag, or empty string.
  * - $static_tag: use this for DART tags that appear in emails.
+ * - $load_last: boolean.
  *
  * @see template_preprocess_dart_tag()
  */
 ?>
 
 <div <?php print drupal_attributes($attributes); ?>>
-  <?php 
+  <?php
     if ($tag->slug) {
       ?><span class="slug"><?php print $tag->slug; ?></span><?php
     }
+
     if ($show_script_tag) {
-      ?><script type="text/javascript">Drupal.DART.tag('<?php print $json_tag; ?>');</script><?php 
-      print $noscript_tag;
+      if ($load_last) {
+        ?><script type="text/javascript">Drupal.DART.settings.loadLastTags['<?php print $tag->machinename; ?>'] = '<?php print $json_tag; ?>';</script><?php
+      }
+      else {
+        ?><script type="text/javascript">Drupal.DART.tag('<?php print $json_tag; ?>');</script><?php
+        print $noscript_tag;
+      }
     }
     else {
       print $static_tag;
