diff --git a/bean.module b/bean.module
index 4bff462..3cbec25 100644
--- a/bean.module
+++ b/bean.module
@@ -33,15 +33,17 @@ function bean_entity_info() {
   );
 
   foreach (bean_get_types() as $type) {
-    $return['bean']['bundles'][$type->type] = array(
-      'label' => $type->getLabel(),
-      'admin' => array(
-        'path' => 'admin/structure/block/types/manage/%bean_type',
-        'real path' => 'admin/structure/block/types/manage/' . $type->buildURL(),
-        'bundle argument' => 5,
-        'access arguments' => array('administer bean types'),
-      )
-    );
+    if (!empty($type)) {
+      $return['bean']['bundles'][$type->type] = array(
+        'label' => $type->getLabel(),
+        'admin' => array(
+          'path' => 'admin/structure/block/types/manage/%bean_type',
+          'real path' => 'admin/structure/block/types/manage/' . $type->buildURL(),
+          'bundle argument' => 5,
+          'access arguments' => array('administer bean types'),
+        )
+      );
+    }
   }
 
   return $return;
@@ -64,14 +66,16 @@ function bean_menu() {
   );
 
   foreach (bean_get_types() as $type) {
-    $items['block/add/' . $type->buildURL()] = array(
-      'title' => $type->getLabel(),
-      'title callback' => 'check_plain',
-      'page callback' => 'bean_add',
-      'page arguments' => array($type->type),
-      'access arguments' => array('create any ' . $type->type . ' bean'),
-      'file' => 'includes/bean.pages.inc',
-    );
+   if (!empty($type)) {
+      $items['block/add/' . $type->buildURL()] = array(
+        'title' => $type->getLabel(),
+        'title callback' => 'check_plain',
+        'page callback' => 'bean_add',
+        'page arguments' => array($type->type),
+        'access arguments' => array('create any ' . $type->type . ' bean'),
+        'file' => 'includes/bean.pages.inc',
+      );
+    }
   }
 
   $items['block/%bean'] = array(
diff --git a/bean_admin_ui/bean_admin_ui.admin.inc b/bean_admin_ui/bean_admin_ui.admin.inc
index fb028d6..7a98c13 100644
--- a/bean_admin_ui/bean_admin_ui.admin.inc
+++ b/bean_admin_ui/bean_admin_ui.admin.inc
@@ -17,11 +17,24 @@ function bean_admin_ui_admin_page() {
   foreach (bean_get_types() as $bean_type) {
     $row = array();
     $row[] = array('data' => $bean_type->getLabel());
-
+    if (method_exists($bean_type, 'getExportStatus')) {
+      $export_status = $bean_type->getExportStatus();
+    }
+    else {
+      $export_status = 'Normal';
+    }
+    $row[] = array('data' => $export_status);
     // Edit and delete buttons
     if ($bean_type->isEditable()) {
       $row[] = array('data' => l(t('Edit'), 'admin/structure/block/types/manage/' . $bean_type->buildURL() . '/edit'));
-      $row[] = array('data' => l(t('Delete'), 'admin/structure/block/types/manage/' . $bean_type->buildURL() . '/delete'));
+      switch ($export_status) {
+        case 'Normal':
+          $row[] = array('data' => l(t('Delete'), 'admin/structure/block/types/manage/' . $bean_type->buildURL() . '/delete'));
+          break;
+        case 'Overridden':
+          $row[] = array('data' => l(t('Revert'), 'admin/structure/block/types/manage/' . $bean_type->buildURL() . '/delete'));
+          break;
+      }
     }
 
     if ($field_ui) {
@@ -34,7 +47,7 @@ function bean_admin_ui_admin_page() {
     $rows[] = $row;
   }
 
-  $header = array(t('Name'), array('data' => t('Operations'), 'colspan' => $field_ui ? '6' : '4'));
+  $header = array(t('Name'), t('Status'), array('data' => t('Operations'), 'colspan' => $field_ui ? '6' : '4'));
 
   $build['bean_table'] = array(
     '#theme' => 'table',
@@ -49,19 +62,18 @@ function bean_admin_ui_admin_page() {
  * Generates the bean type editing form.
  */
 function bean_admin_ui_type_form($form, &$form_state, $bean_type = NULL) {
+  $form['new'] = array(
+    '#type' => 'value',
+    '#value' => TRUE,
+  );
   // If bean_type is null then load an empty one
   if (is_null($bean_type)) {
     $plugin_info = _bean_admin_default_plugin();
     $plugin_info['name'] = '';
 
     $bean_type = new bean_custom($plugin_info);
-
-    $form['new'] = array(
-      '#type' => 'value',
-      '#value' => TRUE,
-    );
   }
-  else {
+  elseif (!method_exists($bean_type, 'getExportStatus') || $bean_type->getExportStatus() == 'Normal') {
     $form['new'] = array(
       '#type' => 'value',
       '#value' => FALSE,
@@ -73,9 +85,6 @@ function bean_admin_ui_type_form($form, &$form_state, $bean_type = NULL) {
   if ($disabled) {
     drupal_set_message(t('This Block Type can not be edited'));
   }
-
-
-
   $form['bean_type'] = array(
     '#type' => 'value',
     '#value' => $bean_type
@@ -92,7 +101,7 @@ function bean_admin_ui_type_form($form, &$form_state, $bean_type = NULL) {
   );
 
   // Machine-readable type name.
-  $form['type'] = array(
+  $form['name'] = array(
     '#type' => 'machine_name',
     '#default_value' => isset($bean_type->type) ? $bean_type->type : '',
     '#maxlength' => 32,
@@ -131,10 +140,11 @@ function bean_admin_ui_type_form($form, &$form_state, $bean_type = NULL) {
  */
 function bean_admin_ui_type_form_submit(&$form, &$form_state) {
   $bean_type = $form_state['values']['bean_type'];
-  $bean_type->type = $form_state['values']['type'];
+  $bean_type->type = $form_state['values']['name'];
   $bean_type->setLabel($form_state['values']['label']);
   $bean_type->save($form_state['values']['new']);
   $form_state['redirect'] = 'admin/structure/block/types';
+  ctools_include('export');
 }
 
 /**
@@ -150,18 +160,22 @@ function bean_admin_ui_type_form_submit_delete(&$form, &$form_state) {
 function bean_admin_ui_type_delete_confirm($form, &$form_state, $type) {
   $form['type'] = array('#type' => 'value', '#value' => $type);
   $form['name'] = array('#type' => 'value', '#value' => $type->getLabel());
-
-  $message = t('Are you sure you want to delete the block type %type?', array('%type' => $type->getLabel()));
   $caption = '';
-
-  $num_beans = db_query("SELECT COUNT(*) FROM {bean} WHERE type = :type", array(':type' => $type->type))->fetchField();
-  if ($num_beans) {
-    $caption .= '<p>' . format_plural($num_beans, '%type is used by 1 block on your site. If you remove this block type, you will not be able to edit the %type blocks and it may not display correctly.', '%type is used by @count pieces of content on your site. If you remove %type, you will not be able to edit the %type content and it may not display correctly.', array('%type' => $type->getLabel())) . '</p>';
+  if (!method_exists($type, 'getExportStatus') || $type->getExportStatus() == 'Normal') {
+    $message = t('Are you sure you want to delete the block type %type?', array('%type' => $type->getLabel()));
+    $num_beans = db_query("SELECT COUNT(*) FROM {bean} WHERE type = :type", array(':type' => $type->type))->fetchField();
+    if ($num_beans) {
+      $caption .= '<p>' . format_plural($num_beans, '%type is used by 1 block on your site. If you remove this block type, you will not be able to edit the %type blocks and it may not display correctly.', '%type is used by @count pieces of content on your site. If you remove %type, you will not be able to edit the %type content and it may not display correctly.', array('%type' => $type->getLabel())) . '</p>';
+    }
+    $action = t('Delete');
+  }
+  else {
+    $message = t('Are you sure you want to revert the block type %type?', array('%type' => $type->getLabel()));
+    $action = t('Revert');
   }
-
   $caption .= '<p>' . t('This action cannot be undone.') . '</p>';
 
-  return confirm_form($form, $message, 'admin/structure/block/types', $caption, t('Delete'));
+  return confirm_form($form, $message, 'admin/structure/block/types', $caption, $action);
 }
 
 function bean_admin_ui_type_delete_confirm_submit($form, &$form_state) {
diff --git a/bean_admin_ui/bean_admin_ui.install b/bean_admin_ui/bean_admin_ui.install
index 0d9831a..5c76c27 100644
--- a/bean_admin_ui/bean_admin_ui.install
+++ b/bean_admin_ui/bean_admin_ui.install
@@ -11,8 +11,27 @@
 function bean_admin_ui_schema() {
   $schema['bean_type'] = array(
     'description' => 'Stores information about all defined bean types.',
+    'export' => array(
+      'key' => 'name',
+      'identifier' => 'bean_type',
+      'default hook' => 'bean_admin_ui_types',
+      'admin_title' => 'label',
+      'api' => array(
+        'owner' => 'bean_admin_ui',
+        'api' => 'bean',
+        'minimum_version' => 1,
+        'current_version' => 1,
+      ),
+    ),
     'fields' => array(
-      'type' => array(
+      'type_id' => array(
+        'description' => 'The Type ID of this block. Only used internally by CTools',
+        'type' => 'serial',
+        'unsigned' => TRUE,
+        'not null' => TRUE,
+        'no export' => TRUE,
+      ),
+      'name' => array(
         'description' => 'The machine-readable name of this bean type.',
         'type' => 'varchar',
         'length' => 32,
@@ -25,9 +44,61 @@ function bean_admin_ui_schema() {
         'not null' => TRUE,
         'default' => '',
       ),
+      'options' => array(
+        'description' => 'Block content configuration.',
+        'type' => 'text',
+        'size' => 'big',
+      ),
+    ),
+    'primary key' => array('type_id'),
+    'unique keys' => array(
+      'name' => array('name'),
     ),
-    'primary key' => array('type'),
   );
-
   return $schema;
-}
\ No newline at end of file
+}
+
+/**
+ * Add support for CTools exportables.
+ */
+function bean_admin_ui_update_7001() {
+  db_drop_primary_key('bean_type');
+  
+  // Add a type_id column for use by CTools.
+  $spec = array(
+    'description' => 'The Type ID of this block. Only used internally by CTools',
+    'type' => 'serial',
+    'unsigned' => TRUE,
+    'not null' => TRUE,
+    'no export' => TRUE,
+  );
+  $new_keys = array(
+    'primary key' => array('type_id'),
+  );
+  db_add_field('bean_type', 'type_id', $spec, $new_keys);
+  
+  // Add the options column.
+  $spec = array(
+    'description' => 'Block content configuration.',
+    'type' => 'text',
+    'size' => 'big',
+  );
+  db_add_field('bean_type', 'options', $spec);
+  
+  // Adjust the type column so tat it doesn't clash with CTools.
+  $spec = array(
+    'description' => 'The machine-readable name of this bean type.',
+    'type' => 'varchar',
+    'length' => 32,
+    'not null' => TRUE,
+  );
+  $new_keys = array(
+    'unique keys' => array(
+      'name' => array('name'),
+    ),
+  );
+  db_change_field('bean_type', 'type', 'name', $spec, $new_keys);
+
+  cache_clear_all();
+  return t('Added new fields required for CTools exportable support.');
+}
diff --git a/bean_admin_ui/bean_admin_ui.module b/bean_admin_ui/bean_admin_ui.module
index 51d4ea6..64af14c 100644
--- a/bean_admin_ui/bean_admin_ui.module
+++ b/bean_admin_ui/bean_admin_ui.module
@@ -85,12 +85,13 @@ function bean_admin_ui_bean_types() {
   $bean_types = bean_admin_ui_get_types();
 
   foreach ($bean_types as $bean_type) {
-    $plugins[$bean_type->type] = array(
+    $plugins[$bean_type->name] = array(
       'label' => $bean_type->label,
-      'type' => $bean_type->type,
+      'type' => $bean_type->name,
+      'export_status' => $bean_type->type,
     );
 
-    $plugins[$bean_type->type] += _bean_admin_default_plugin();
+    $plugins[$bean_type->name] += _bean_admin_default_plugin();
   }
 
   return $plugins;
@@ -105,7 +106,8 @@ function bean_admin_ui_get_types() {
   if (empty($bean_types)) {
     $cache = cache_get('bean_types');
     if (empty($cache->data)) {
-      $bean_types = db_query('SELECT * FROM {bean_type}')->fetchAllAssoc('type');
+      ctools_include('export');
+      $bean_types = ctools_export_load_object('bean_type');
       cache_set('bean_types', $bean_types);
     }
     else {
diff --git a/bean_admin_ui/plugins/custom.inc b/bean_admin_ui/plugins/custom.inc
index 8998153..5af4ebd 100644
--- a/bean_admin_ui/plugins/custom.inc
+++ b/bean_admin_ui/plugins/custom.inc
@@ -9,22 +9,21 @@
  * DO NOT USE THIS BEAN.  ONLY USED FOR THE UI PLUGINS
  */
 class bean_custom extends bean_plugin {
-
   /**
    * Delete the record from the database.
    */
   public function delete() {
-    db_delete('bean')
+    // Delete all beans belonging to this bean type if we are removing
+    // the actual bean.
+    if ($this->getExportStatus() == 'Normal') {
+      db_delete('bean')
       ->condition('type', $this->type)
       ->execute();
-
-    // Delete all fo the beans
+    } 
     db_delete('bean_type')
-      ->condition('type', $this->type)
-      ->execute();
-
+    ->condition('name', $this->type)
+    ->execute();
     field_attach_delete_bundle('bean', $this->type);
-
     drupal_flush_all_caches();
   }
 
@@ -33,16 +32,20 @@ class bean_custom extends bean_plugin {
    */
   public function save($new = FALSE) {
     $bean_type = array(
-      'type' => $this->type,
+      'name' => $this->type,
       'label' => $this->getLabel(),
     );
 
-    $primary_key = $new == FALSE ? 'type' : array();
+    $primary_key = $new == FALSE ? 'name' : array();
     drupal_write_record('bean_type', $bean_type, $primary_key);
     drupal_static_reset('bean_admin_ui_get_types');
 
     bean_reset();
   }
+  
+  public function getExportStatus() {
+    return $this->plugin_info['export_status'];
+  }
 
   /**
    * Set the label
diff --git a/includes/bean.core.inc b/includes/bean.core.inc
index fdcd385..b8ac7f5 100644
--- a/includes/bean.core.inc
+++ b/includes/bean.core.inc
@@ -23,7 +23,6 @@ class Bean extends Entity {
 
   public function __construct($values = array()) {
     parent::__construct($values, 'bean');
-
     // Load the plugin info
     // NOTE: When this is caalled as part of entity_load, $values seems to be
     // empty, which makes it impossible to load the plugin and field data.
