diff --git a/semantic_fields.info b/semantic_fields.info
index dbe1606..95152db 100644
--- a/semantic_fields.info
+++ b/semantic_fields.info
@@ -1,7 +1,7 @@
 name = Semantic Fields
 description = "Provides semantic HTML output settings for each field type."
-configure = admin/config/content/semantic-field-formats
 package = Fields
 dependencies[] = field
 dependencies[] = field_ui
-core = 7.x
\ No newline at end of file
+dependencies[] = ctools
+core = 7.x
diff --git a/semantic_fields.install b/semantic_fields.install
index 6de0ca6..5eae171 100644
--- a/semantic_fields.install
+++ b/semantic_fields.install
@@ -20,10 +20,26 @@ function semantic_fields_schema() {
   $schema = array();
 
   $schema['semantic_fields_preset'] = array(
+    'description' => t('Table storing preset definitions.'),
+    'export' => array(
+      'key' => 'name',
+      'key name' => 'Semantic fields',
+      'primary key' => 'id',
+      'identifier' => 'preset',
+      'default hook' => 'default_semantic_fields_preset',
+      'load callback' => 'semantic_fields_preset_load',
+      'api' => array(
+        'owner' => 'semantic_fields',
+        'api' => 'default_semantic_fields_presets',
+        'minimum_version' => 1,
+        'current_version' => 1,
+      ),
+    ),
     'fields' => array(
       'id' => array(
         'type' => 'serial',
         'not null' => TRUE,
+        'no export' => TRUE, // Do not export database-only keys.
       ),
       'name' => array(
         'type' => 'varchar',
@@ -56,4 +72,4 @@ function semantic_fields_schema() {
   );
 
   return $schema;
-}
\ No newline at end of file
+}
diff --git a/semantic_fields.module b/semantic_fields.module
index 9b63ab3..7e25a40 100644
--- a/semantic_fields.module
+++ b/semantic_fields.module
@@ -1,56 +1,5 @@
 <?php
 /**
- * Implementation of hook_menu()
- */
-function semantic_fields_menu() {
-  $items = array();
-
-  $items['admin/config/content/semantic-field-formats'] = array(
-    'title' => 'Field formats',
-    'description' => 'Configure customized, semantic rich formats for use when displaying fields.',
-    'page callback' => 'semantic_fields_preset_list',
-    'access arguments' => array('administer semantic fields'),
-    'type' => MENU_NORMAL_ITEM,
-    'file' => 'semantic_fields.admin.inc',
-  );
-  $items['admin/config/content/semantic-field-formats/list'] = array(
-    'title' => 'List',
-    'page callback' => 'semantic_fields_preset_list',
-    'type' => MENU_DEFAULT_LOCAL_TASK,
-    'file' => 'semantic_fields.admin.inc',
-    'weight' => '-1'
-  );
-  $items['admin/config/content/semantic-field-formats/add'] = array(
-    'title' => 'Add field format',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('semantic_fields_preset_form'),
-    'access arguments' => array('administer semantic fields'),
-    'type' => MENU_LOCAL_ACTION,
-    'file' => 'semantic_fields.admin.inc',
-  );
-  foreach (semantic_fields_get_presets() as $preset) {
-    $items['admin/config/content/semantic-field-formats/' . $preset['name'] . '/edit'] = array(
-      'title' => 'Edit field format',
-      'page callback' => 'drupal_get_form',
-      'page arguments' => array('semantic_fields_preset_form', 4),
-      'access arguments' => array('administer semantic fields'),
-      'type' => MENU_CALLBACK,
-      'file' => 'semantic_fields.admin.inc',
-    );
-    $items['admin/config/content/semantic-field-formats/' . $preset['name'] . '/delete'] = array(
-      'title' => 'Delete field format',
-      'page callback' => 'drupal_get_form',
-      'page arguments' => array('semantic_fields_preset_delete_form', 4),
-      'access arguments' => array('administer semantic fields'),
-      'type' => MENU_CALLBACK,
-      'file' => 'semantic_fields.admin.inc',
-    );
-  }
-
-  return $items;
-}
-
-/**
  * Implementation of hook_permission()
  */
 function semantic_fields_permission() {
@@ -129,21 +78,11 @@ function semantic_fields_get_presets() {
 }
 
 function semantic_fields_preset_load($name) {
-  $presets = &drupal_static(__FUNCTION__, array());
-
-  if (!isset($presets[$name])) {
-    $preset = db_select('semantic_fields_preset', 'p')
-      ->fields('p')
-      ->condition('name', $name)
-      ->execute()
-      ->fetchAssoc();
-    if ($preset) {
-      $preset['data'] = unserialize($preset['data']);
-      $presets[$name] = $preset;
-    }
+  ctools_include('export');
+  $result = ctools_export_load_object('semantic_fields_preset','names', array($name));
+  if (isset($result[$name])) {
+    return $result[$name];
   }
-
-  return (isset($presets[$name]) && !empty($presets[$name])) ? $presets[$name] : array();
 }
 
 function semantic_fields_get_preset_options() {
@@ -211,7 +150,7 @@ function semantic_fields_preprocess_field(&$variables) {
     );
   }
   else {
-    $settings = $preset['data'];
+    $settings = $preset->data;
   }
 
   // Provide Semantic Fields field template suggestions.
@@ -399,4 +338,23 @@ function theme_semantic_field(&$variables) {
   }
 
   return $output;
-}
\ No newline at end of file
+}
+
+/**
+* Implementats hook_ctools_plugin_api().
+*/
+function semantic_fields_ctools_plugin_api($owner, $api) {
+  if ($owner == 'semantic_fields' && $api == 'default_semantic_fields_presets') {
+    return array('version' => 1);
+  }
+}
+
+/**
+* Implements hook_ctools_plugin_directory().
+*/
+function semantic_fields_ctools_plugin_directory($module, $type) {
+  // Load the export_ui plugin.
+  if ($type =='export_ui') {
+    return 'plugins/export_ui';
+  }
+}
