diff --git a/disqus.php b/disqus.php
deleted file mode 100644
index d8f12d1..0000000
--- a/disqus.php
+++ /dev/null
@@ -1,386 +0,0 @@
-<?php
-
-/**
- * @file
- * Provides the Disqus PHP API.
- */
-
-/**
- * The Disqus PHP API.
- *
- * @package    Disqus
- * @author     Rob Loach (http://www.robloach.net)
- * @version    1.1.0
- * @access     public
- * @license    GPL (http://www.opensource.org/licenses/gpl-2.0.php)
- *
- * @example
- * @code
- *   // The user API key obtained from http://disqus.com/api/get_my_key/ .
- *   $user_api_key = 'Your Key Here!';
- *
- *   // Make sure to catch any errors generated by Disqus.
- *   try {
- *     $disqus = new Disqus($user_api_key);
- *
- *     // Get the forum list.
- *     $forums = $disqus->get_forum_list();
- *
- *     foreach ($forums as $forum) {
- *       echo $forum->name;
- *     }
- *   } catch(DisqusException $exception) {
- *     // Display the error.
- *     echo $exception->getMessage();
- *   }
- * @endcode
- */
-class Disqus {
-  public $user_api_key = NULL;
-  public $forum_api_key = NULL;
-  public $api_url = 'http://disqus.com/api/';
-  public $api_version = '1.1';
-
-  /**
-   * Creates a new interface to the Disqus API.
-   *
-   * @param $user_api_key
-   *   (optional) The User API key to use.
-   * @param $forum_api_key
-   *   (optional) The Forum API key to use.
-   * @param $api_url
-   *   (optional) The prefix URL to use when calling the Disqus API.
-   */
-  function __construct($user_api_key = NULL, $forum_api_key = NULL, $api_url = 'http://disqus.com/api/') {
-    $this->user_api_key = $user_api_key;
-    $this->forum_api_key = $forum_api_key;
-    $this->$api_url = $api_url;
-  }
-
-  /**
-   * Validate API key and get username.
-   */
-  function get_user_name() {
-    return $this->call('get_user_name', array(), TRUE);
-  }
-
-  /**
-   * Get a forum API key for a specific forum.
-   *
-   * @param $forum_id
-   *   the unique id of the forum
-   * @return
-   *   A string which is the Forum Key for the given forum.
-   */
-  function get_forum_api_key($forum_id) {
-    return $this->call('get_forum_api_key', array('forum_id' => $forum_id));
-  }
-
-  /**
-   * Returns an array of hashes representing all forums the user owns.
-   *
-   * @return
-   *   An array of hashes representing all forums the user owns.
-   */
-  function get_forum_list() {
-    return $this->call('get_forum_list');
-  }
-
-  /**
-   * Get a list of comments on a website.
-   *
-   * Both filter and exclude are multivalue arguments with coma as a divider.
-   * That makes is possible to use combined requests. For example, if you want
-   * to get all deleted spam messages, your filter argument should contain
-   * 'spam,killed' string.
-   *
-   * @param $forum_id
-   *   The forum ID.
-   * @param $options
-   *   - limit: Number of entries that should be included in the response. Default is 25.
-   *   - start: Starting point for the query. Default is 0.
-   *   - filter: Type of entries that should be returned.
-   *   - exclude: Type of entries that should be excluded from the response.
-   * @return
-   *   Returns posts from a forum specified by id.
-   */
-  function get_forum_posts($forum_id, array $options = array()) {
-    $options['forum_id'] = $forum_id;
-    return $this->call('get_forum_posts', $options);
-  }
-
-  /**
-   * Count a number of comments in articles.
-   *
-   * @param $thread_ids
-   *   an array of thread IDs belonging to the given forum.
-   * @return
-   *   A hash having thread_ids as keys and 2-element arrays as values.
-   */
-  function get_num_posts(array $thread_ids = array()) {
-    $thread_ids = implode(',', $thread_ids);
-    return $this->call('get_num_posts', array('thread_ids' => $thread_ids));
-  }
-
-  /**
-   * Get a list of threads on a website.
-   *
-   * @param $forum_id
-   *   the unique id of the forum.
-   * @param $limit
-   *   Number of entries that should be included in the response.
-   * @param $start
-   *   Starting point for the query.
-   * @return
-   *   An array of hashes representing all threads belonging to the given forum.
-   */
-  function get_thread_list($forum_id, $limit = 25, $start = 0) {
-    return $this->call('get_thread_list', array('forum_id' => $forum_id, 'limit' => $limit, 'start' => 0));
-  }
-
-  /**
-   * Get a list of threads with new comments.
-   *
-   * @param $forum_id
-   *   The Forum ID.
-   * @param $since
-   *   Start date for new posts. Format: 2009-03-30T15:41, Timezone: UTC.
-   */
-  function get_updated_threads($forum_id, $since) {
-    return $this->call('get_updated_threads', array('forum_id' => $forum_id, 'since' => $since));
-  }
-
-  /**
-   * Get a list of comments in a thread.
-   *
-   * Both filter and exclude are multivalue arguments with coma as a divider.
-   * That makes is possible to use combined requests. For example, if you want
-   * to get all deleted spam messages, your filter argument should contain
-   * 'spam,killed' string. Note that values are joined by AND statement so
-   * 'spam,new' will return all messages that are new and marked as spam. It
-   * will not return messages that are new and not spam or that are spam but
-   * not new (i.e. has already been moderated).
-   *
-   * @param $thread_id
-   *   The ID of a thread belonging to the given forum
-   * @param $limit
-   *   - limit: Number of entries that should be included in the response. Default is 25.
-   *   - start: Starting point for the query. Default is 0.
-   *   - filter: Type of entries that should be returned (new, spam or killed).
-   *   - exclude: Type of entries that should be excluded from the response (new, spam or killed).
-   * @return
-   *   An array of hashes representing representing all posts belonging to the
-   *   given forum.
-   */
-  function get_thread_posts($thread_id, array $options = array()) {
-    $options['thread_id'] = $thread_id;
-    return $this->call('get_thread_posts', $options);
-  }
-
-  /**
-   * Get or create thread by identifier.
-   *
-   * This method tries to find a thread by its identifier and title. If there is
-   * no such thread, the method creates it. In either case, the output value is
-   * a thread object.
-   *
-   * @param $identifier
-   *   Unique value (per forum) for a thread that is used to keep be able to get
-   *   data even if permalink is changed.
-   * @param $title
-   *   The title of the thread to possibly be created.
-   * @return
-   *   Returns a hash with two keys:
-   *   - thread: a hash representing the thread corresponding to the identifier.
-   *   - created: indicates whether the thread was created as a result of this
-   *     method call. If created, it will have the specified title.
-   */
-  function thread_by_identifier($identifier, $title) {
-    return $this->call('thread_by_identifier', array('title' => $title, 'identifier' => $identifier), TRUE);
-  }
-
-  /**
-   * Get thread by URL.
-   *
-   * Finds a thread by its URL. Output value is a thread object.
-   *
-   * @param $url
-   *   the URL to check for an associated thread
-   * @param $partner_api_key
-   *   (optional) The Partner API key.
-   * @return
-   *   A thread object, otherwise NULL.
-   */
-  function get_thread_by_url($url, $partner_api_key = NULL) {
-    return $this->call('get_thread_by_url', array('url' => $url));
-  }
-
-  /**
-   * Updates thread.
-   *
-   * Updates thread, specified by id and forum API key, with values described in
-   * the optional arguments.
-   *
-   * @param $thread_id
-   *   the ID of a thread belonging to the given forum
-   * @param $options
-   *   - title: the title of the thread
-   *   - slug: the per-forum-unique string used for identifying this thread in
-   *           disqus.com URL’s relating to this thread. Composed of
-   *           underscore-separated alphanumeric strings.
-   *   - url: the URL this thread is on, if known.
-   *   - allow_comments: whether this thread is open to new comments
-   * @return
-   *   Returns an empty success message.
-   */
-  function update_thread($thread_id, array $options = array()) {
-    $options['thread_id'] = $thread_id;
-    return $this->call('update_thread', $options, TRUE);
-  }
-
-  /**
-   * Creates a new post.
-   *
-   * Creates a comment to the thread specified by id.
-   *
-   * @param $thread_id
-   *   the thread to post to
-   * @param $message
-   *   the content of the post
-   * @param $author_name
-   *   the post creator’s name
-   * @param $author_email
-   *   the post creator’s email address
-   * @param $options
-   *   - partner_api_key
-   *   - created_at: Format: 2009-03-30T15:41, Timezone: UTC
-   *   - ip_address: the author’s IP address
-   *   - author_url: the author's homepage
-   *   - parent_post: the id of the parent post
-   *   - state: Comment's state, must be one of the following: approved,
-   *            unapproved, spam, killed
-   */
-  function create_post($thread_id, $message, $author_name, $author_email, array $options = array()) {
-    $options['thread_id'] = $thread_id;
-    $options['message'] = $message;
-    $options['author_name'] = $author_name;
-    $options['author_email'] = $author_email;
-    return $this->call('create_post', $options, TRUE);
-  }
-
-  /**
-   * Delete a comment or mark it as spam (or not spam).
-   *
-   * @param $post_id
-   *   The Post ID.
-   * @param $action
-   *   Name of action to be performed. Value can be 'spam', 'approve' or 'kill'.
-   *
-   * @return
-   *   Returns modified version.
-   */
-  function moderate_post($post_id, $action) {
-    return $this->call('create_post', array('post_id' => $post_id, 'action' => $action), TRUE);
-  }
-
-  /**
-   * Makes a call to a Disqus API method.
-   *
-   * @return 
-   *   The Disqus object.
-   * @param $method
-   *   The Disqus API method to call.
-   * @param object $arguments
-   *   An associative array of arguments to be passed.
-   * @param $post
-   *   TRUE or FALSE, depending on whether we're making a POST call.
-   */
-  function call($function, $arguments = array(), $post = FALSE) {
-    // Construct the arguments.
-    $args = '';
-    if (!isset($arguments['user_api_key'])) {
-      $arguments['user_api_key'] = $this->user_api_key;
-    }
-    if (!isset($arguments['forum_api_key'])) {
-      $arguments['forum_api_key'] = $this->forum_api_key;
-    }
-    if (!isset($arguments['api_version'])) {
-      $arguments['api_version'] = $this->api_version;
-    }
-    foreach ($arguments as $argument => $value) {
-      if (!empty($value)) {
-        $args .= $argument .'='. urlencode($value) .'&';
-      }
-    }
-
-    // Call the Disqus API.
-    $ch = curl_init();
-    if ($post) {
-      curl_setopt($ch, CURLOPT_URL, $this->api_url . $function .'/');
-      curl_setopt($ch, CURLOPT_POSTFIELDS, $args);
-      curl_setopt($ch, CURLOPT_POST, 1);
-    }
-    else {
-      curl_setopt($ch, CURLOPT_URL, $this->api_url . $function .'/?'. $args);
-    }
-    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
-    curl_setopt($ch, CURLOPT_TIMEOUT, 5);
-    $data = curl_exec($ch);
-    $info = curl_getinfo($ch);
-    curl_close($ch);
-    
-    // Check the results for errors (200 is a successful HTTP call).
-    if ($info['http_code'] == 200) {
-      $disqus = json_decode($data);
-      if ($disqus->succeeded) {
-        // There weren't any errors, so return the results.
-        return isset($disqus->message) ? $disqus->message : NULL;
-      }
-      else {
-        throw new DisqusException(isset($disqus->message) ? $disqus->message : NULL, 0, $info, $disqus);
-      }
-    }
-    else {
-      throw new DisqusException('There was an error querying the Disqus API.', $info['http_code'], $info);
-    }
-  }
-}
-
-/**
- * Any unsucessful result that's created by Disqus API will generate a DisqusException.
- */
-class DisqusException extends Exception {
-  /**
-   * The information returned from the cURL call.
-   */
-  public $info = NULL;
-
-  /**
-   * The information returned from the Disqus call.
-   */
-  public $disqus = NULL;
-
-  /**
-   * Creates a DisqusException.
-   * @param $message
-   *   The message for the exception.
-   * @param $code
-   *   (optional) The error code.
-   * @param $info
-   *   (optional) The result from the cURL call.
-   */
-  public function __construct($message, $code = 0, $info = NULL, $disqus = NULL) {
-    $this->info = $info;
-    $this->disqus = $disqus;
-    parent::__construct($message, $code);
-  }
-
-  /**
-   * Converts the exception to a string.
-   */
-  public function __toString() {
-    $code = isset($this->disqus->code) ? $this->disqus->code : (isset($info['http_code']) ? $info['http_code'] : 0);
-    $message = $this->getMessage();
-    return __CLASS__ .": [$code]: $message\n";
-  }
-}
diff --git a/disqus_migrate.admin.inc b/disqus_migrate.admin.inc
index 2436e03..e87d869 100644
--- a/disqus_migrate.admin.inc
+++ b/disqus_migrate.admin.inc
@@ -83,23 +83,20 @@ function disqus_migrate_admin_settings_import_submit($form, &$form_state) {
  */
 function disqus_migrate_admin_settings_export() {
   $form = array();
-  $user_api_key = variable_get('disqus_userapikey', '');
 
-  if (empty($user_api_key)) {
-    drupal_set_message(t('A user key must be specified in the general settings to export comments.'), 'error');
-    drupal_goto('admin/settings/disqus');
-  }
-  else {
-    $form['disqus_moderated'] = array(
-      '#type' => 'checkbox',
-      '#title' => t('Include unapproved comments in export.'),
-    );
-    $form['submit'] = array(
-      '#type' => 'submit',
-      '#value' => t('Export'),
-    ); 
-  }
-  
+  $form['disqus_unpublished_nodes'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Include comments of non-published nodes in export.'),
+  );
+  $form['disqus_unapproved_comments'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Include unapproved comments in export.'),
+  );
+  $form['submit'] = array(
+    '#type' => 'submit',
+    '#value' => t('Export'),
+  ); 
+
   return $form;
 }
 
@@ -107,112 +104,136 @@ function disqus_migrate_admin_settings_export() {
  * Form submit handler for the export tool.
  */
 function disqus_migrate_admin_settings_export_submit($form, &$form_state) {
-  // Include the disqus API.
-  $user_api_key = variable_get('disqus_userapikey', '');
-  $disqus = disqus($user_api_key);
 
-  $node_types = variable_get('disqus_nodetypes', array());
-  foreach ($node_types as $type) {
-    if ($type) $types[] = "'$type'";
-  }
-  $types = implode(', ', $types);
-
-  // Retrieve the forum ID.
-  $domain = variable_get('disqus_domain', '');
-  $forum_id = NULL;
-  try {
-    $forum_list = $disqus->get_forum_list();
-    foreach ($forum_list as $key => $object) {
-      if ($object->shortname == $domain) {
-        $forum_id = $object->id;
+  // Select all the nodes with comments
+  $thread_data = array();
+  $node_results = db_query("SELECT DISTINCT nid FROM {comments}");
+  while ($nid = db_result($node_results)) {
+
+    // get some bits of info from the node. This is *much* more efficient than doing a node_load
+    $node_data_query = db_query("SELECT title, created, status FROM {node} WHERE nid = %d", $nid);
+    $node_data = db_fetch_object($node_data_query);
+    
+    // If this node is unpublished, should we include it and its comments in the export?
+    if ($form_state['values']['disqus_unpublished_nodes'] == 0 && $node_data->status == 0) {
+      continue;    
+    }
+    
+    // Load up the thread data array for this node
+    $thread_data[$nid] = array(
+      'title' => $node_data->title,
+      'link' => url("node/" . $nid, array('absolute' => TRUE, 'alias' => TRUE)),
+      'identifier' => 'node/' . $nid,
+      'post_date_gmt' => date("Y-m-d H:i:s", $node_data->created),
+    );
+    
+    // Find all comments attached to this node
+    $comments_results = db_query("
+      SELECT * FROM {comments}
+      WHERE nid = %d AND status IN (%s)"
+    , $nid, ($form_state['values']['disqus_unapproved_comments'] ? '0,1' : '0'));
+    while ($comment = db_fetch_object($comments_results)) {
+    
+      // Randomize emails for anonymous comments - otherwise all the anonymous comments would appear to come
+      // from the same account
+      $random = rand(1000,100000);
+      if ($comment->mail) {
+        $comment_mail = $comment->mail;
+      } else {
+        $comment_mail = "anon" . $random . "@anonymous.com";
+      }
+      
+      // Use name "Anonymous" for anonymous users
+      if ($comment->name) {
+        $comment_name = $comment->name;
+      } else {
+        $comment_name = "Anonymous";
       }
+    
+      // Load up the comment data for this comment
+      $thread_data[$nid]['comments'][$comment->cid] = array(
+        'id' => $comment->cid,
+        'author' => $comment_name,
+        'author_email' => $comment_mail,
+        'author_url' => $comment->homepage,
+        'author_IP' => $comment->hostname,
+        'date_gmt' => date("Y-m-d H:i:s", $comment->timestamp),
+        'content' => $comment->comment,
+        'approved' => ($comment->status == 1) ? 0 : 1,
+        'parent' => $comment->pid,
+      );
     }
-  }
-  catch (DisqusException $exception) {
-    drupal_set_message(t('There was an error retrieving the available forums from Disqus. Please check your user API key and try again.'), 'error');
-    drupal_goto('admin/settings/disqus');
-  }
 
-  // Get the forum API key.
-  $forum_api_key = NULL;
-  try {
-    $forum_api_key = $disqus->get_forum_api_key($forum_id);
   }
-  catch (DisqusException $exception) {
-    drupal_set_message(t('There was an error retrieving the forum API key from Disqus. Please check your user API key, the shortname domain name and then try again.'), 'error');
-    return;
-  }
-  $disqus = disqus($user_api_key, $forum_api_key);
-
-  // Find all comments not already copied to disqus.
-  $results = db_query("
-    SELECT c.*, u.mail as user_mail, n.title as node_title FROM {comments} c
-    INNER JOIN {users} u ON u.uid = c.uid
-    INNER JOIN {node} n ON n.nid = c.nid
-    LEFT JOIN {disqus_migrate_export} d ON d.cid = c.cid AND d.fid = %d
-    WHERE d.did IS NULL AND c.status IN (%s)
-    " . (!empty($types) ? "AND n.type IN ($types)" : '') . "
-    ORDER BY n.created DESC", $forum_id, ($form_state['values']['disqus_moderated'] ? '0,1' : '0'));
-
-  $count = 0;
-  while ($comment = db_fetch_object($results)) {      
-    $url = url("node/{$comment->nid}", array('absolute' => TRUE, 'alias' => TRUE));
-
-    // Check if a thread exists for this node on disqus.
-    $thread = $disqus->get_thread_by_url($url);
-    if (!$nid_thread[$comment->nid]) {
-      $thread = $disqus->get_thread_by_url($url);
-      if (!$thread) {
-        $thread = $disqus->thread_by_identifier("node-{$comment->nid}", $comment->node_title)->thread;      
-        $disqus->update_thread($thread->id, array('url' => $url));
-        $thread = $disqus->get_thread_by_url($url);
-        $nid_thread[$comment->nid] = $thread;
-      }
-    }
-    else {
-      $thread = $nid_thread[$comment->nid];
-    }
+  
+  // Pass the data to a function that generates the XML
+  $output = _disqus_migrate_wxr_generate($thread_data);
+  
+  // Output the XML file
+  header("Content-disposition: attachment; filename=drupalcomments.xml");
+  header("Content-Type: text/xml; charset=utf-8");
+  
+  print $output;
+}
 
-    // If thread still isn't found, skip this comment (for now).
-    if (!$thread) {
+/**
+ * Helper function to generate XML from the passed in thread data
+ */
+function _disqus_migrate_wxr_generate($thread_data) {
+
+  $output = '';
+
+  // Print header
+  $output .= '<?xml version="1.0" encoding="UTF-8"?>';
+  $output .= '<rss version="2.0"';
+  $output .= '  xmlns:content="http://purl.org/rss/1.0/modules/content/"';
+  $output .= '  xmlns:dsq="http://www.disqus.com/"';
+  $output .= '  xmlns:dc="http://purl.org/dc/elements/1.1/"';
+  $output .= '  xmlns:wp="http://wordpress.org/export/1.0/"';
+  $output .= '>';
+  $output .= '  <channel>';
+  
+  foreach ($thread_data as $thread) {
+    // Skip thread if there were no comments attached to it. This would only happen if
+    // an export is created and there are no published comments on a node (also depends
+    // on what user selects in checkbox)
+    if (empty($thread['comments'])) {
       continue;
     }
-
-    // Check if this comment has a parent post.
-    $parent_post = NULL;
-    if ($comment->pid) {
-      $parent_post = db_result(db_query("SELECT did FROM {disqus_migrate_export} WHERE cid = %d AND fid = %d", $comment->pid, $forum_id));
-    }
-
-    // Create the comment in the thread on disqus.
-    $mail = ($comment->mail !== '' ? $comment->mail : $comment->user_mail);
-    $name = ($comment->name !== '' ? $comment->name : substr($mail, 0, strpos($mail, '@')));
-
-    // Disqus requires both mail and name. Give them an anonymous mail/name if not provided.
-    if (empty($mail)) {
-      $mail = t('anon@anonymous.com');
-    }
-    if (empty($name)) {
-      $name = t('Anonymous');
-    }
-
-    $post = $disqus->create_post($thread->id, $comment->comment, $name, $mail, array(
-      'created_at' => format_date($comment->timestamp, 'custom', 'Y-m-d\TH:i', 0),
-      'ip_address' => $comment->ip_address ? $comment->ip_address : '127.0.0.1',
-      'parent_post' => $parent_post,
-      'state' => $comment->status ? 'unapproved' : 'approved',
-    ));
-
-    // Save the export information to the drupal database.
-    if ($post->id) {
-      db_query("INSERT INTO {disqus_migrate_export} (did, cid, fid) VALUES (%d, %d, %d)", $post->id, $comment->cid, $forum_id);
-      $count++;
+  
+    $output .= '<item>';
+    $output .= '<title>' . $thread['title'] . '</title>';
+    $output .= '<link>' . $thread['link'] . '</link>';
+    $output .= '<content:encoded></content:encoded>';
+    $output .= '<dsq:identifier>' . $thread['identifier'] . '</dsq:identifier>';
+    $output .= '<wp:post_date_gmt>' . $thread['post_date_gmt'] . '</wp:post_date_gmt>';
+    $output .= '<wp:comment_status>open</wp:comment_status>';
+    
+    foreach ($thread['comments'] as $comment) {
+    
+      $output .= '<wp:comment>';
+      
+      $output .= '<wp:comment_id>' . $comment['id'] . '</wp:comment_id>';
+      $output .= '<wp:comment_author>' . $comment['author'] . '</wp:comment_author>';
+      $output .= '<wp:comment_author_email>' . $comment['author_email'] . '</wp:comment_author_email>';
+      $output .= '<wp:comment_author_url>' . $comment['author_url'] . '</wp:comment_author_url>';
+      $output .= '<wp:comment_author_IP>' . $comment['author_IP'] . '</wp:comment_author_IP>';
+      $output .= '<wp:comment_date_gmt>' . $comment['date_gmt'] . '</wp:comment_date_gmt>';
+      $output .= '<wp:comment_content><![CDATA[' . $comment['content'] . ']]></wp:comment_content>';
+      $output .= '<wp:comment_approved>' . $comment['approved'] . '</wp:comment_approved>';
+      $output .= '<wp:comment_parent>' . $comment['parent'] . '</wp:comment_parent>';
+      
+      $output .= '</wp:comment>';
     }
+    
+    $output .= '</item>';
   }
+  
+  // Footer
+  $output .= '  </channel>';
+  $output .= '</rss>';
+  
+  return $output;
 
-  // Display a confirmation to the user.
-  drupal_set_message(t('!num been exported. You can <a href="@moderate">moderate the comments on Disqus</a>.', array(
-    '@moderate' => 'http://' . variable_get('disqus_domain', '') . '.disqus.com',
-    '!num' => format_plural($count, "@count comment has", "@count comments have"),
-  )));
 }
+
diff --git a/disqus_migrate.install b/disqus_migrate.install
index 7b08a2e..b9d4026 100644
--- a/disqus_migrate.install
+++ b/disqus_migrate.install
@@ -6,19 +6,19 @@
  */
 
 /**
- * Implementation of hook_install().
+ * Installs the disqus export schema.
  */
-function disqus_migrate_install() {
-  // Create the table.
+function disqus_migrate_update_6100() {
   drupal_install_schema('disqus_migrate');
+  return array();
 }
 
 /**
- * Implementation of hook_uninstall().
+ * Drops the schema
  */
-function disqus_migrate_uninstall() {
-  // Remove the table.
-  drupal_uninstall_schema('disqus_migrate');
+function disqus_migrate_update_6101() {
+  $ret[] = update_sql("DROP TABLE {disqus_migrate_export}");
+  return $ret;
 }
 
 /**
@@ -52,12 +52,4 @@ function disqus_migrate_schema() {
     'primary key' => array('did'),
   );
   return $schema;
-}
-
-/**
- * Installs the disqus export schema.
- */
-function disqus_migrate_update_6100() {
-  drupal_install_schema('disqus_migrate');
-  return array();
-}
+}
\ No newline at end of file
diff --git a/disqus_migrate.module b/disqus_migrate.module
index e1a6e20..fc4f521 100644
--- a/disqus_migrate.module
+++ b/disqus_migrate.module
@@ -5,7 +5,12 @@ function disqus_migrate_help($path, $arg) {
   case 'admin/settings/disqus/import':
     return '<p>'. t('The tool below allows you to import comments from <a href="@disqus">Disqus</a> to the  Drupal comment system.', array('@disqus' => 'http://disqus.com')) .'</p>';
   case 'admin/settings/disqus/export':
-    return '<p>'. t('Clicking <em>"Export"</em> below will send the comments from the Drupal comment system to <a href="@disqus">Disqus</a>. Comments will only be exported once per forum, so you can click on "Export" as many times as you want and you will not get duplicates. Make sure to lengthen your PHP timeout time if you have many comments to export.', array('@disqus' => 'http://disqus.com')) .'</p>';
+    return '<p>'. t(
+      'Clicking <em>"Export"</em> below will export your Drupal comments to an XML file formatted specifically for <a href="@disqus">Disqus</a>. '
+    . 'Save this file and upload it to the importer tool in the Disqus administration. '
+    . '<b>Note:</b> This is meant to be a one time export. No attempt it made to track previously exported comments. '
+    . 'Reuploading an XML file may create duplicate comments if they already exist in Disqus.'
+    , array('@disqus' => 'http://disqus.com')).'</p>';
   }
 }
 
