diff --git a/includes/nodequeue.admin.inc b/includes/nodequeue.admin.inc
index 9ae8ec7..afaef15 100644
--- a/includes/nodequeue.admin.inc
+++ b/includes/nodequeue.admin.inc
@@ -306,6 +306,7 @@ function nodequeue_view_queues() {
     if (user_access('administer nodequeue')) {
       $operations[] = l(t('Edit'), "admin/structure/nodequeue/$queue->name/edit");
       $operations[] = l(t('Delete'), "admin/structure/nodequeue/$queue->name/delete");
+      $operations[] = l(t('Export'), "admin/structure/nodequeue/$queue->name/export");
     }
 
     $rows[] = array(
@@ -1114,3 +1115,87 @@ function _nodequeue_autocomplete($sqid, $string) {
   $nodes = nodequeue_api_autocomplete($queue, $subqueue, $string);
   return $nodes;
 }
+
+function nodequeue_export_queue_load_obj($queue) {
+  $queue->roles = db_select('nodequeue_roles', 'nr')
+    ->fields('nr', array('rid'))
+    ->condition('nr.name', $queue->name)
+    ->execute()
+    ->fetchAll(PDO::FETCH_COLUMN);
+
+  $queue->types = db_select('nodequeue_types', 'nt')
+    ->fields('nt', array('type'))
+    ->condition('nt.name', $queue->name)
+    ->execute()
+    ->fetchAll(PDO::FETCH_COLUMN);
+
+  $queue->add_subqueue = db_select('nodequeue_subqueue', 'ns')
+    ->fields('ns', array('reference', 'title'))
+    ->condition('ns.name', $queue->name)
+    ->execute()
+    ->fetchAllKeyed();
+
+  return $queue;
+}
+
+/**
+ * Export a myobj.
+ */
+function nodequeue_export_get_code($queue, $indent = '') {
+  ctools_include('export');
+  $queue = nodequeue_export_queue_load_obj($queue);
+  $output = ctools_export_object('nodequeue_queue', $queue, $indent);
+  $schema = ctools_export_get_schema('nodequeue_queue');
+  $identifier = $schema['export']['identifier'];
+  $output .= $indent . '$' . $identifier . '->roles = ' . ctools_var_export($queue->roles, $indent) . ";\n";
+  $output .= $indent . '$' . $identifier . '->types = ' . ctools_var_export($queue->types, $indent) . ";\n";
+  $output .= $indent . '$' . $identifier . '->add_subqueue = ' .ctools_var_export($queue->add_subqueue, $indent). ";\n";
+  return $output;
+}
+
+function nodequeue_export_queue_form($form, &$form_state, $queue) {
+  drupal_set_title(check_plain($queue->title));
+  $code = nodequeue_export_get_code($queue);
+  $lines = substr_count($code, "\n") + 1;
+  $form['export'] = array(
+    '#title' => t('Export data'),
+    '#type' => 'textarea',
+    '#value' => $code,
+    '#rows' => $lines,
+    '#description' => t('Copy the export text and paste it into another site using the import function.'),
+  );
+  return $form;
+}
+
+function nodequeue_import_form($form, &$form_state) {
+  $form['import'] = array(
+    '#title' => t('Import data'),
+    '#type' => 'textarea',
+    '#value' => "",
+    '#rows' => 20,
+    '#description' => t('Paste the code from queue export function.'),
+  );
+  $form['submit'] = array(
+    '#type' => 'submit',
+    '#value' => t('Submit'),
+  );
+  return $form;
+}
+
+function nodequeue_import_form_submit($form, &$form_state) {
+  ctools_include('export');
+  $import = $form_state['input']['import'];
+  $queue = ctools_export_crud_import('nodequeue_queue', $import);
+
+  if (is_object($queue)) {
+    // Change boolean values to integer, to avoid SQL errors.
+    foreach (array('show_in_ui', 'show_in_tab', 'show_in_links', 'reverse', 'i18n') as $field) {
+      $queue->$field = (int) $queue->$field;
+    }
+    nodequeue_save($queue);
+    $form_state['redirect'] = 'admin/structure/nodequeue';
+  }
+  else {
+    form_set_error('import', $queue);
+  }
+}
diff --git a/nodequeue.info b/nodequeue.info
index 16da04c..c27f273 100644
--- a/nodequeue.info
+++ b/nodequeue.info
@@ -4,6 +4,9 @@ package = Nodequeue
 core = 7.x
 configure = admin/structure/nodequeue/settings
 
+; Dependencies
+dependencies[] = ctools
+
 ; Includes
 files[] = includes/views/nodequeue.views.inc
 files[] = includes/nodequeue.actions.inc
diff --git a/nodequeue.install b/nodequeue.install
index 1c22186..173339c 100644
--- a/nodequeue.install
+++ b/nodequeue.install
@@ -11,6 +11,16 @@
 function nodequeue_schema() {
   $schema['nodequeue_queue'] = array(
     'description' => 'Base table for queues, storing global information for each queue',
+    'export' => array(
+      'key' => 'name',
+      'identifier' => 'nodequeue',
+      'api' => array(
+        'owner' => 'nodequeue',
+        'api' => 'nodequeue',
+        'minimum_version' => 3,
+        'current_version' => 3,
+      ),
+    ),
     'fields' => array(
       'name' => array(
         'description' => 'The machine name for the queue.',
diff --git a/nodequeue.module b/nodequeue.module
index 4f7c020..20d0ec7 100644
--- a/nodequeue.module
+++ b/nodequeue.module
@@ -84,6 +84,14 @@ function nodequeue_menu() {
     'file' => 'includes/nodequeue.admin.inc',
     'type' => MENU_LOCAL_TASK
   );
+  $items['admin/structure/nodequeue/import'] = array(
+    'title' => 'Import',
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('nodequeue_import_form'),
+    'access arguments' => $admin_access,
+    'file' => 'includes/nodequeue.admin.inc',
+    'type' => MENU_LOCAL_ACTION
+  );
   $items['nodequeue/autocomplete'] = array(
     'title' => 'Autocomplete',
     'page callback' => 'nodequeue_autocomplete',
@@ -163,6 +171,14 @@ function nodequeue_menu() {
     'weight' => 5,
     'type' => MENU_CALLBACK
   );
+  $items['admin/structure/nodequeue/%nodequeue/export'] = array(
+    'title' => 'Export',
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('nodequeue_export_queue_form', 3),
+    'access arguments' => $admin_access,
+    'file' => 'includes/nodequeue.admin.inc',
+    'type' => MENU_LOCAL_TASK
+  );
   $items['nodequeue/%nodequeue/add-node/%subqueue/%node'] = array(
     'page callback' => 'nodequeue_admin_add_node',
     'page arguments' => array(1, 3, 4),
