diff --git a/profiles/unl_profile/unl_profile.install b/profiles/unl_profile/unl_profile.install
index 50b2b5f89487c6bfc3ef0ea3588b5e04c0beb04a..7e1414d27040ec1cd90b34766f37a7b9a329d0e4 100644
--- a/profiles/unl_profile/unl_profile.install
+++ b/profiles/unl_profile/unl_profile.install
@@ -227,6 +227,7 @@ EOF;
     
         $new_prefix = $GLOBALS['databases']['default']['default']['prefix'];
         $shared_prefix = $parent_site_database_settings['default']['default']['prefix'];
+        $short_prefix = substr($new_prefix, 0, 0 - (strlen($shared_prefix) + 1));
         $new_prefixes = array(
           // Localized tables, prefixed with site name
           'default'       => $new_prefix,
@@ -303,6 +304,48 @@ EOF;
           unset($all_permissions[$permission]);
         }
         user_role_grant_permissions($site_admin_role->rid, array_keys($all_permissions));
+        
+        // If a site admin has been specified, add that user and add them to the Site Admin role.
+        $data = db_query(
+          "SELECT * " 
+          . "FROM {$shared_prefix}variable "
+          . "WHERE name IN ('unl_frontier_username', 'unl_frontier_password')"
+        );
+        $frontier_config = array();
+        foreach ($data as $row) {
+          $frontier_config[$row->name] = unserialize($row->value);
+        }
+        
+        $data = db_query(
+          "SELECT * "
+          . "FROM {$shared_prefix}unl_sites "
+          . "WHERE db_prefix = :prefix ",
+          array(':prefix' => $short_prefix)
+        );
+        foreach ($data as $row) {
+          if ($row->site_admin) {
+            $userData = array(
+              'name'     => $row->site_admin,
+              'status'   => 1,
+              'timezone' => variable_get('date_default_timezone', @date_default_timezone_get()),
+              'roles'    => array($site_admin_role->rid => $site_admin_role->name),
+            );
+            user_save(NULL, $userData);
+          }
+          
+          if ($row->migration_url) {
+            require_once DRUPAL_ROOT . '/sites/all/modules/unl/unl_migration.php';
+            $migration = new Unl_Migration_Tool(
+              $row->migration_url,
+              $row->migration_path,
+              $frontier_config['unl_frontier_username'],
+              $frontier_config['unl_frontier_password'],
+              FALSE
+            );
+            DrupalQueue::get('unl_migration', TRUE)
+              ->createItem(Unl_Migration_Tool::save_to_disk($migration));
+          }
+        }
     }
     
     
diff --git a/sites/all/modules/unl/unl.install b/sites/all/modules/unl/unl.install
index ca5a547999ba26bdfe8d56031756f441018d6cf0..b337818dc0cb01f6d2fd788c52ae69c85d1aa6bf 100644
--- a/sites/all/modules/unl/unl.install
+++ b/sites/all/modules/unl/unl.install
@@ -37,7 +37,26 @@ function unl_schema() {
         'length'   => 255,
         'not null' => TRUE,
         'default'  => '',
-      )
+      ),
+      'site_admin' => array(
+        'type'     => 'varchar',
+        'length'   => 255,
+        'not null' => TRUE,
+        'default'  => '',
+      ),
+      'migration_url' => array(
+        'type'     => 'varchar',
+        'length'   => 255,
+        'not null' => TRUE,
+        'default'  => '',
+      ),
+      'migration_path' => array(
+        'type'     => 'varchar',
+        'length'   => 255,
+        'not null' => TRUE,
+        'default'  => '',
+      ),
+  
     ),
     'primary key' => array('site_id'),
     'unique keys' => array(
@@ -188,3 +207,27 @@ function unl_update_7103() {
   
   db_create_table('unl_sites_aliases', $table);
 }
+
+function unl_update_7104() {
+  db_add_field('unl_sites', 'site_admin', array(
+    'type'     => 'varchar',
+    'length'   => 255,
+    'not null' => TRUE,
+    'default'  => '',
+  ));
+}
+
+function unl_update_7105() {
+  db_add_field('unl_sites', 'migration_url', array(
+    'type'     => 'varchar',
+    'length'   => 255,
+    'not null' => TRUE,
+    'default'  => '',
+  ));
+  db_add_field('unl_sites', 'migration_path', array(
+    'type'     => 'varchar',
+    'length'   => 255,
+    'not null' => TRUE,
+    'default'  => '',
+  ));
+}
diff --git a/sites/all/modules/unl/unl.module b/sites/all/modules/unl/unl.module
index 78c2518e27dd9c785741e83d3df6bdb632ace77c..d3755df5585a69766c28837de1ebfde746645dbb 100644
--- a/sites/all/modules/unl/unl.module
+++ b/sites/all/modules/unl/unl.module
@@ -143,6 +143,16 @@ function unl_menu() {
       'type'             => MENU_LOCAL_TASK,
       'file'             => 'unl_site_creation.php',
     );
+    
+    $items['admin/sites/unl/wdn_registry'] = array(
+      'title'            => 'WDN Registry',
+      'description'      => 'Settings for the connection to the WDN Registry.',
+      'access arguments' => array('unl site creation'),
+      'page callback'    => 'drupal_get_form',
+      'page arguments'   => array('unl_wdn_registry'),
+      'type'             => MENU_LOCAL_TASK,
+      'file'             => 'unl_site_creation.php',
+    );
   }
   
   return $items;
@@ -359,3 +369,93 @@ function unl_user_access($permissions, $account = NULL) {
   
   return TRUE;
 }
+
+function unl_cron()
+{
+  if (PHP_SAPI == 'cli') {
+    return;
+  }
+ 
+  $queue = DrupalQueue::get('unl_migration');
+  if ($queue->numberOfItems() > 0) {
+    require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'unl_migration.php';
+    $item = $queue->claimItem(120);
+    $queue->deleteItem($item);
+    unl_migration_queue_step($item->data);
+  }
+  
+  if (conf_path() == 'sites/default') {
+    
+    $wdn_registry_info = array(
+      'database' => variable_get('unl_wdn_registry_database'),
+      'username' => variable_get('unl_wdn_registry_username'),
+      'password' => variable_get('unl_wdn_registry_password'),
+      'host'     => variable_get('unl_wdn_registry_host'),
+      'driver'   => 'mysql',
+    );
+    
+    if (!$wdn_registry_info['database']) {
+      return;
+    }
+    
+    Database::addConnectionInfo('wdn_registry', 'default', $wdn_registry_info);
+    db_set_active('wdn_registry');
+    
+    try {
+      $data = db_select('site_request', 'r')
+        ->fields('r')
+        ->where('`url` IS NULL')
+        ->execute()
+        ->fetchAll();
+    }
+    catch (Exception $e) {
+      db_set_active();
+      return;
+    }
+    
+    $sites_to_create = array();
+    foreach ($data as $site) {
+      $path = $site->department . '/' . $site->site_name;
+      $path = strtolower($path);
+      $path = strtr($path, array(' ' => ''));
+      
+      $db_prefix = $site->site_name;
+      $db_prefix = strtolower($db_prefix);
+      $db_prefix = strtr($db_prefix, array(' ' => ''));
+      
+      $path = 'incubator/' . $path;
+      
+      $sites_to_create[] = array(
+        'site_path'      => $path,
+        'uri'            => url($path),
+        'clean_url'      => TRUE,
+        'db_prefix'      => $db_prefix,
+        'site_admin'     => $site->site_admin,
+        'migration_url'  => $site->migration_url,
+        'migration_path' => $site->migration_path,
+      );
+      
+      if (variable_get('unl_wdn_registry_production')) {
+        db_update('site_request')
+          ->fields(array('url' => url($path)))
+          ->condition('id', $site->id)
+          ->execute();
+      }
+    }
+    
+    db_set_active();
+    
+    foreach ($sites_to_create as $site_to_create) {
+      try {
+        db_insert('unl_sites')->fields($site_to_create)->execute();
+      }
+      catch (PDOException $e) {
+        // Ignore duplicate records.
+        if ($e->getCode() != 23000) {
+          throw $e;
+        }
+      }
+    }
+    
+  }
+}
diff --git a/sites/all/modules/unl/unl_migration.php b/sites/all/modules/unl/unl_migration.php
index ad7af15f2529c188772f5f342c1c423a2e0e46ae..d2050d39179a24ebafba37a6282027dab989aae6 100644
--- a/sites/all/modules/unl/unl_migration.php
+++ b/sites/all/modules/unl/unl_migration.php
@@ -59,21 +59,27 @@ function unl_migration($form, &$form_state)
 
 function unl_migration_submit($form, &$form_state) {
   
-  $operations = array();
+  $migration = new Unl_Migration_Tool(
+    $form_state['values']['site_url'],
+    $form_state['values']['frontier_path'],
+    $form_state['values']['frontier_user'],
+    $form_state['values']['frontier_pass'],
+    $form_state['values']['ignore_duplicates']
+  );
   
   $operations = array(
     array(
       'unl_migration_step',
       array(
-        $form_state['values']['site_url'],
-        $form_state['values']['frontier_path'],
-        $form_state['values']['frontier_user'],
-        $form_state['values']['frontier_pass'],
-        $form_state['values']['ignore_duplicates'],
+        $migration,
       )
     )
   );
   
+  DrupalQueue::get('unl_migration', TRUE)
+    ->createItem(Unl_Migration_Tool::save_to_disk($migration));
+  return;
+  
   $batch = array(
   	'operations' => $operations,
   	'file' => substr(__FILE__, strlen(DRUPAL_ROOT) + 1),
@@ -81,23 +87,13 @@ function unl_migration_submit($form, &$form_state) {
   batch_set($batch);
 }
 
-function unl_migration_step($site_url, $frontier_path, $frontier_user, $frontier_pass, $ignore_duplicates, &$context)
+function unl_migration_step($migration, &$context)
 {
   $finished = 0;
   if (isset($context['sandbox']['file']) && file_exists($context['sandbox']['file'])) {
-    $migration = unserialize(file_get_contents($context['sandbox']['file']));
-    unlink($form_state['storage']['file']);
+    $migration = Unl_Migration_Tool::load_from_disk($context['sandbox']['file']);
     $finished = $context['sandbox']['finished'];
   }
-  else {
-    $migration = new Unl_Migration_Tool(
-      $site_url,
-      $frontier_path,
-      $frontier_user,
-      $frontier_pass,
-      $ignore_duplicates
-    );
-  }
   
   if ($migration->migrate()) {
     $context['finished'] = 1;
@@ -110,9 +106,16 @@ function unl_migration_step($site_url, $frontier_path, $frontier_user, $frontier
   }
   $context['finished'] = $finished;
   $context['sandbox']['finished'] = $finished;
-  $migration_storage_file = drupal_tempnam(file_directory_temp(), 'unl_migration_');
-  $context['sandbox']['file'] = $migration_storage_file;
-  file_put_contents($migration_storage_file, serialize($migration));
+  $context['sandbox']['file'] = Unl_Migration_Tool::save_to_disk($migration);
+}
+
+function unl_migration_queue_step($migration_storage_file) {
+  $migration = Unl_Migration_Tool::load_from_disk($migration_storage_file);
+  if ($migration->migrate(30)) {
+    return;
+  }
+  DrupalQueue::get('unl_migration', TRUE)
+    ->createItem(Unl_Migration_Tool::save_to_disk($migration));
 }
 
 
@@ -751,7 +754,7 @@ class Unl_Migration_Tool
             'und' => array(
                 array(
                     'value' => $content,
-                    'format' => filter_default_format()
+                    'format' => array_shift(array_keys(filter_formats()))
                 )
             )
         );
@@ -1016,5 +1019,21 @@ class Unl_Migration_Tool
     
     return FALSE;
   }
+  
+  static public function save_to_disk(Unl_Migration_Tool $instance)
+  {
+    $migration_storage_file = drupal_tempnam(file_directory_temp(), 'unl_migration_');
+    file_put_contents($migration_storage_file, serialize($instance));
+    if (PHP_SAPI == 'cli') {
+      chmod($migration_storage_file, 0666);
+    }
+    return $migration_storage_file;
+  }
+  
+  static public function load_from_disk($migration_storage_file) {
+    $instance = unserialize(file_get_contents($migration_storage_file));
+    unlink($migration_storage_file);
+    return $instance;
+  }
 }
 
diff --git a/sites/all/modules/unl/unl_site_creation.php b/sites/all/modules/unl/unl_site_creation.php
index 96c28fab6910bcd38e941b4787bc17fa5d48e887..3519ab41df4f4fa2e567d8cb94b0610cca776639 100644
--- a/sites/all/modules/unl/unl_site_creation.php
+++ b/sites/all/modules/unl/unl_site_creation.php
@@ -390,6 +390,85 @@ function unl_alias_list_submit($form, &$form_state) {
 }
 
 
+function unl_wdn_registry($form, &$form_state) {
+  
+  $form['root'] = array(
+    '#type'  => 'fieldset',
+    '#title' => 'WDN Registry Database',
+  );
+  
+  $form['root']['production'] = array(
+    '#type' => 'checkbox',
+    '#title' => 'This is production.',
+    '#description' => 'If this box checked, sites imported will be marked as imported.',
+    '#default_value' => variable_get('unl_wdn_registry_production'),
+  );
+  
+  $form['root']['host'] = array(
+    '#type' => 'textfield',
+    '#title' => 'Host',
+    '#description' => 'Hostname of the WDN Registry database.',
+    '#default_value' => variable_get('unl_wdn_registry_host'),
+    '#required' => TRUE,
+  );
+  
+  $form['root']['username'] = array(
+    '#type' => 'textfield',
+    '#title' => 'Username',
+    '#description' => 'Username for the WDN Registry database.',
+    '#default_value' => variable_get('unl_wdn_registry_username'),
+    '#required' => TRUE,
+  );
+  
+  $form['root']['password'] = array(
+    '#type' => 'password',
+    '#title' => 'Password',
+    '#description' => 'Password for the WDN Registry database.',
+    '#required' => TRUE,
+  );
+  
+  $form['root']['database'] = array(
+    '#type' => 'textfield',
+    '#title' => 'Database',
+    '#description' => 'Database for the WDN Registry database.',
+    '#default_value' => variable_get('unl_wdn_registry_database'),
+    '#required' => TRUE,
+  );
+  
+  $form['root']['frontier_username'] = array(
+    '#type' => 'textfield',
+    '#title' => 'Frontier Username',
+    '#description' => 'Username to connect to frontier FTP.',
+    '#default_value' => variable_get('unl_frontier_username'),
+    '#required' => TRUE,
+  );
+  
+  $form['root']['frontier_password'] = array(
+    '#type' => 'password',
+    '#title' => 'Frontier Password',
+    '#description' => 'Password to connect to frontier FTP.',
+    '#required' => TRUE,
+  );
+  
+  $form['root']['submit'] = array(
+    '#type'  => 'submit',
+    '#value' => 'Update',
+  );
+  
+  return $form;
+}
+
+function unl_wdn_registry_submit($form, &$form_state) {
+  variable_set('unl_wdn_registry_production', $form_state['values']['production']);
+  variable_set('unl_wdn_registry_host', $form_state['values']['host']);
+  variable_set('unl_wdn_registry_username', $form_state['values']['username']);
+  variable_set('unl_wdn_registry_password', $form_state['values']['password']);
+  variable_set('unl_wdn_registry_database', $form_state['values']['database']);
+  variable_set('unl_frontier_username', $form_state['values']['frontier_username']);
+  variable_set('unl_frontier_password', $form_state['values']['frontier_password']);
+}
+
+
 function _unl_get_install_status_text($id) {
   switch ($id) {
     case 0: