diff --git a/plugins/export_ui/semantic_fields_ctools_export_ui.inc b/plugins/export_ui/semantic_fields_ctools_export_ui.inc
new file mode 100644
index 0000000..cebe827
--- /dev/null
+++ b/plugins/export_ui/semantic_fields_ctools_export_ui.inc
@@ -0,0 +1,349 @@
+<?php
+/**
+ * @file
+ *  Export UI functions
+ */
+
+/**
+ * Define this Export UI plugin.
+ */
+$plugin = array(
+  'schema' => 'semantic_fields_preset',
+  'access' => 'administer semantic fields ',
+  'menu' => array(
+    'menu item' => 'semantic_fields',
+    'menu title' => 'Semantic fields',
+    'menu description' => 'Administer Semantic fields presets.',
+  ),
+  'load callback' => 'semantic_fields_preset_load',
+  'title singular' => t('preset'),
+  'title plural' => t('presets'),
+  'title singular proper' => t('Semantic fields preset'),
+  'title plural proper' => t('Semantic fields presets'),
+  'form' => array(
+    'settings' => 'semantic_fields_ctools_export_ui_form',
+    'submit' => 'semantic_fields_ctools_export_ui_form_submit',
+  ),
+);
+
+
+/**
+* Define the preset add/edit form.
+*/
+function semantic_fields_ctools_export_ui_form(&$form, &$form_state) {
+  $preset = $form_state['item'];
+
+  if(isset($preset->id)) {
+     $form['id'] = array(
+    '#type' => 'hidden',
+    '#value' => $preset->id,
+  ); 
+  }
+
+  $form['description'] = array(
+    '#type' => 'textarea',
+    '#title' => t('Description'),
+    '#description' => t('A description of this field format.'),
+    '#default_value' => isset($preset->description) ? $preset->description : '',
+    '#required' => FALSE,
+  );
+  $form['semantic_field_settings'] = array(
+    '#type' => 'fieldset',
+    '#title' => t('Semantic field settings'),
+    '#collapsible' => FALSE,
+    '#collapsed' => FALSE,
+    '#tree' => TRUE,
+  );
+  $form['semantic_field_settings']['field_container_fieldset'] = array(
+    '#type' => 'fieldset',
+    '#title' => t('Field container'),
+    '#collapsible' => TRUE,
+    '#collapsed' => TRUE,
+    '#parents' => array('semantic_field_settings'),
+  );
+  $form['semantic_field_settings']['field_container_fieldset']['field_element'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Surround the entire field with'),
+    '#description' => t('Insert the desired <abbr title="Hyper Text Markup Language">HTML</abbr> element that will be the container for the entire field. Leave blank for no surrounding element.'),
+    '#default_value' => isset($preset->data['field_element']) ? $preset->data['field_element'] : 'div',
+    '#required' => FALSE,
+    '#size' => 20,
+  );
+  $form['semantic_field_settings']['field_container_fieldset']['field_class'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Choose field element class(es)'),
+    '#description' => t('The field element automatically gets field, field type and specific field classes (ie. <em>field field-type-text field-field-my-field-name</em>).'),
+    '#default_value' => isset($preset->data['field_class']) ? $preset->data['field_class'] : '',
+    '#required' => FALSE,
+  );
+  $form['semantic_field_settings']['field_container_fieldset']['field_prefix'] = array(
+    '#type' => 'textfield',
+    '#title' => t('And a prefix of'),
+    '#default_value' => isset($preset->data['field_prefix']) ? $preset->data['field_prefix'] : '',
+    '#description' => t('Insert the desired character(s) to output before the field.'),
+    '#required' => FALSE,
+    '#size' => 20,
+  );
+  $form['semantic_field_settings']['field_container_fieldset']['field_suffix'] = array(
+    '#type' => 'textfield',
+    '#title' => t('And a suffix of'),
+    '#default_value' => isset($preset->data['field_suffix']) ? $preset->data['field_suffix'] : '',
+    '#description' => t('Insert the desired character(s) to output after the field.'),
+    '#required' => FALSE,
+  );
+  $form['semantic_field_settings']['label_fieldset'] = array(
+    '#type' => 'fieldset',
+    '#title' => t('Field label'),
+    '#description' => t('<strong>Please note that the placement or appearance of the label is still determined by the field display settings.</strong>'),
+    '#collapsible' => TRUE,
+    '#collapsed' => TRUE,
+    '#attributes' => array('class' => array('semantic-fields-labels')),
+  );
+  $form['semantic_field_settings']['label_fieldset']['above'] = array(
+    '#type' => 'fieldset',
+    '#title' => t('Labels above field value(s)'),
+    '#description' => t('How to render the label when located above the field value(s).'),
+    '#collapsible' => FALSE,
+    '#collapsed' => FALSE,
+    '#attributes' => array('class' => array('semantic-fields-labels-above')),
+    '#parents' => array('semantic_field_settings'),
+  );
+  $form['semantic_field_settings']['label_fieldset']['above']['label_element_above'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Surround the label with'),
+    '#description' => t('Insert the desired <abbr title="Hyper Text Markup Language">HTML</abbr> element that will surround the label.'),
+    '#default_value' => isset($preset->data['label_element_above']) ? $preset->data['label_element_above'] : 'h3',
+    '#required' => TRUE,
+    '#size' => 20,
+  );
+  $form['semantic_field_settings']['label_fieldset']['above']['label_class_above'] = array(
+    '#type' => 'textfield',
+    '#title' => t('And a class of'),
+    '#description' => t('The label automatically gets a class of <em>field-label</em>.'),
+    '#default_value' => isset($preset->data['label_class_above']) ? $preset->data['label_class_above'] : '',
+    '#required' => FALSE,
+    '#size' => 20,
+  );
+  $form['semantic_field_settings']['label_fieldset']['above']['label_suffix_above'] = array(
+    '#type' => 'textfield',
+    '#title' => t('And a suffix of'),
+    '#description' => t('Insert the desired suffix character, eg. a colon'),
+    '#default_value' => isset($preset->data['label_suffix_above']) ? $preset->data['label_suffix_above'] : '',
+    '#required' => FALSE,
+    '#size' => 20,
+  );
+  $form['semantic_field_settings']['label_fieldset']['inline'] = array(
+    '#type' => 'fieldset',
+    '#title' => t('Inline labels'),
+    '#description' => t('How to render the label when located inline with the field value(s).'),
+    '#collapsible' => FALSE,
+    '#collapsed' => FALSE,
+    '#attributes' => array('class' => array('semantic-fields-labels-inline')),
+    '#parents' => array('semantic_field_settings'),
+  );
+  $form['semantic_field_settings']['label_fieldset']['inline']['label_element_inline'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Surround the label with'),
+    '#description' => t('Insert the desired <abbr title="Hyper Text Markup Language">HTML</abbr> element that will surround the label.'),
+    '#default_value' => isset($preset->data['label_element_inline']) ? $preset->data['label_element_inline'] : 'span',
+    '#required' => TRUE,
+    '#size' => 20,
+  );
+  $form['semantic_field_settings']['label_fieldset']['inline']['label_class_inline'] = array(
+    '#type' => 'textfield',
+    '#title' => t('And a class of'),
+    '#description' => t('The label automatically gets a class of <em>field-label-inline</em>.'),
+    '#default_value' => isset($preset->data['label_class_inline']) ? $preset->data['label_class_inline'] : '',
+    '#required' => FALSE,
+    '#size' => 20,
+  );
+  $form['semantic_field_settings']['label_fieldset']['inline']['label_suffix_inline'] = array(
+    '#type' => 'textfield',
+    '#title' => t('And a suffix of'),
+    '#description' => t('Insert the desired suffix character, eg. a colon'),
+    '#default_value' => isset($preset->data['label_suffix_inline']) ? $preset->data['label_suffix_inline'] : ':',
+    '#required' => FALSE,
+    '#size' => 20,
+  );
+  $form['semantic_field_settings']['items_fieldset'] = array(
+    '#type' => 'fieldset',
+    '#title' => t('Field value(s)'),
+    '#collapsible' => TRUE,
+    '#collapsed' => TRUE,
+    '#attributes' => array('class' => array('semantic-fields-multiple-values')),
+  );
+  $form['semantic_field_settings']['items_fieldset']['multivalue'] = array(
+    '#type' => 'fieldset',
+    '#title' => t('Multiple value field'),
+    '#collapsible' => FALSE,
+    '#collapsed' => FALSE,
+    '#attributes' => array('class' => array('field-values', 'semantic-fields-multiple-values-all')),
+  );
+  $form['semantic_field_settings']['items_fieldset']['multivalue']['items_element'] = array(
+    '#type' => 'fieldset',
+    '#collapsible' => FALSE,
+    '#collapsed' => FALSE,
+    '#attributes' => array('class' => array('semantic-fields-multiple-values-fields')),
+    '#parents' => array('semantic_field_settings'),
+  );
+  $form['semantic_field_settings']['items_fieldset']['multivalue']['items_element']['multiple_items_element'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Surround all field values with'),
+    '#description' => t('Insert the desired <abbr title="Hyper Text Markup Language">HTML</abbr> element that will be the container for all field values. Leave blank for no surrounding element.'),
+    '#default_value' => isset($preset->data['multiple_items_element']) ? $preset->data['multiple_items_element'] : 'div',
+    '#required' => FALSE,
+    '#size' => 20,
+  );
+  $form['semantic_field_settings']['items_fieldset']['multivalue']['items_element']['multiple_items_class'] = array(
+    '#type' => 'textfield',
+    '#title' => t('And a class of'),
+    '#description' => t('The surrounding fields element automatically gets the <em>field-items</em> class.'),
+    '#default_value' => isset($preset->data['multiple_items_class']) ? $preset->data['multiple_items_class'] : '',
+    '#required' => FALSE,
+  );
+  $form['semantic_field_settings']['items_fieldset']['multivalue']['item_element'] = array(
+    '#type' => 'fieldset',
+    '#collapsible' => FALSE,
+    '#collapsed' => FALSE,
+    '#attributes' => array('class' => array('semantic-fields-multiple-values-field')),
+    '#parents' => array('semantic_field_settings'),
+  );
+  $form['semantic_field_settings']['items_fieldset']['multivalue']['item_element']['multiple_item_element'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Surround each field value with'),
+    '#description' => t('Insert the desired <abbr title="Hyper Text Markup Language">HTML</abbr> element that will be the container for each field value. Leave blank for no surrounding element.'),
+    '#default_value' => isset($preset->data['multiple_item_element']) ? $preset->data['multiple_item_element'] : 'div',
+    '#required' => FALSE,
+    '#size' => 20,
+  );
+  $form['semantic_field_settings']['items_fieldset']['multivalue']['item_element']['multiple_item_class'] = array(
+    '#type' => 'textfield',
+    '#title' => t('And a class of'),
+    '#description' => t('Each field instance automatically gets the <em>field-item</em> class. Insert a # where you want enumeration (ie field-item-#).'),
+    '#default_value' => isset($preset->data['multiple_item_class']) ? $preset->data['multiple_item_class'] : '',
+    '#required' => FALSE,
+  );
+  $form['semantic_field_settings']['items_fieldset']['multivalue']['item_element']['multiple_item_separator'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Separate each field value with'),
+    '#description' => t('Insert the desired character(s) to use as a separator between each field value. For example, this could be used to display the field values as a comma separated list.'),
+    '#default_value' => isset($preset->data['multiple_item_separator']) ? $preset->data['multiple_item_separator'] : '',
+    '#required' => FALSE,
+    '#size' => 20,
+  );
+  $form['semantic_field_settings']['items_fieldset']['singlevalue'] = array(
+    '#type' => 'fieldset',
+    '#title' => t('Single value field'),
+    '#collapsible' => FALSE,
+    '#collapsed' => FALSE,
+    '#attributes' => array('class' => array('semantic-fields-single-values-settings')),
+    '#parents' => array('semantic_field_settings'),
+  );
+  $form['semantic_field_settings']['items_fieldset']['singlevalue']['use_singlevalue_settings'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Use the following settings when the field contains only one value'),
+    '#description' => t('Leave this unchecked to use multiple value field settings when the field contains only one value.'),
+    '#return_value' => 1,
+    '#default_value' => isset($preset->data['use_singlevalue_settings']) ? $preset->data['use_singlevalue_settings'] : 0,
+    '#required' => FALSE,
+    '#size' => 20,
+  );
+  $form['semantic_field_settings']['items_fieldset']['singlevalue']['singlevalues'] = array(
+    '#type' => 'fieldset',
+    '#collapsible' => FALSE,
+    '#collapsed' => FALSE,
+    '#attributes' => array('class' => array('semantic-fields-single-values-item')),
+    '#parents' => array('semantic_field_settings'),
+  );
+  $form['semantic_field_settings']['items_fieldset']['singlevalue']['singlevalues']['single_item_element'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Surround field value with'),
+    '#description' => t('Insert the desired <abbr title="Hyper Text Markup Language">HTML</abbr> element that will be the container for a single field value. Leave blank for no surrounding element.'),
+    '#default_value' => isset($preset->data['single_item_element']) ? $preset->data['single_item_element'] : 'div',
+    '#required' => FALSE,
+    '#size' => 20,
+  );
+  $form['semantic_field_settings']['items_fieldset']['singlevalue']['singlevalues']['single_item_class'] = array(
+    '#type' => 'textfield',
+    '#title' => t('And a class of'),
+    '#default_value' => isset($preset->data['single_item_class']) ? $preset->data['single_item_class'] : '',
+    '#description' => t('The field instance will automatically get a <em>field-item</em> class.'),
+    '#required' => FALSE,
+  );
+  $form['semantic_field_settings']['items_fieldset']['nth_fieldset'] = array(
+    '#type' => 'fieldset',
+    '#title' => t('First and last classes'),
+    '#description' => t('If the <em>FIRST/LAST every n<sup>th</sup></em> option is empty or zero, the <em>FIRST class attribute</em> and <em>LAST class attribute</em> are added once to only the first and last field values. If this option is greater than or equal to 1, these classe are added to every n<sup>th</sup> row, which may be useful for grid layouts where the initial and final unit\'s lateral margins must be 0.'),
+    '#collapsible' => FALSE,
+    '#collapsed' => FALSE,
+    '#attributes' => array('class' => array('semantic-fields-nth-settings')),
+    '#parents' => array('semantic_field_settings'),
+  );
+  $form['semantic_field_settings']['items_fieldset']['nth_fieldset']['last_every_nth'] = array(
+    '#type' => 'textfield',
+    '#title' => t('FIRST/LAST every n<sup>th</sup>'),
+    '#default_value' => isset($preset->data['last_every_nth']) && is_numeric($preset->data['last_every_nth']) ? $preset->data['last_every_nth'] : '0',
+    '#required' => FALSE,
+    '#size' => 20,
+  );
+  $form['semantic_field_settings']['items_fieldset']['nth_fieldset']['first_class'] = array(
+    '#type' => 'textfield',
+    '#title' => t('FIRST class attribute'),
+    '#default_value' => isset($preset->data['first_class']) ? $preset->data['first_class'] : 'first',
+    '#required' => FALSE,
+    '#size' => 20,
+  );
+  $form['semantic_field_settings']['items_fieldset']['nth_fieldset']['last_class'] = array(
+    '#type' => 'textfield',
+    '#title' => t('LAST class attribute'),
+    '#default_value' => isset($preset->data['last_class']) ? $preset->data['last_class'] : 'last',
+    '#required' => FALSE,
+    '#size' => 20,
+  );
+  $form['semantic_field_settings']['items_fieldset']['striping_fieldset'] = array(
+    '#type' => 'fieldset',
+    '#title' => t('Striping'),
+    '#collapsible' => FALSE,
+    '#collapsed' => FALSE,
+    '#attributes' => array('class' => array('semantic-fields-striping-settings')),
+    '#parents' => array('semantic_field_settings'),
+  );
+  $form['semantic_field_settings']['items_fieldset']['striping_fieldset']['striping_classes'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Striping class attributes'),
+    '#description' => t('One striping class attribute is applied to each row. Separate multiple attributes with a space.'),
+    '#default_value' => isset($preset->data['striping_classes']) ? $preset->data['striping_classes'] : 'odd even',
+    '#required' => FALSE,
+  );
+  $form['semantic_field_settings']['tokens_fieldset'] = array(
+    '#type' => 'fieldset',
+    '#title' => t('Tokens'),
+    '#collapsible' => TRUE,
+    '#collapsed' => TRUE,
+    '#attributes' => array('class' => array('semantic-fields-tokens-fieldset')),
+    '#parents' => array('semantic_field_settings'),
+  );
+  if (module_exists('token') == TRUE) {
+    $form['semantic_field_settings']['tokens_fieldset']['info'] = array(
+      '#markup' => t('You could use tokens, like
+        <em>[node:title]</em> and <em>[node:url]</em>' .
+           theme('token_tree', array(
+          'token_types' => 'all', 
+          'click_insert' => FALSE, 
+          'show_restricted' => TRUE))),
+    );
+  }
+  else {
+    $form['semantic_field_settings']['tokens_fieldset']['info'] = array(
+      '#markup' => '<p>If you enable the token module you could use tokens in </p>',
+    );
+  }
+  return $form;
+}
+
+/**
+* Submit handler for the preset edit form.
+*/
+function semantic_fields_ctools_export_ui_form_submit($form, &$form_state) {
+  $form_state['values']['data'] = $form_state['values']['semantic_field_settings'];
+}
diff --git a/semantic_fields.admin.inc b/semantic_fields.admin.inc
deleted file mode 100644
index ca948ba..0000000
--- a/semantic_fields.admin.inc
+++ /dev/null
@@ -1,431 +0,0 @@
-<?php
-function semantic_fields_preset_list() {
-  $output  = '';
-
-  $header = array(
-    t('Name'),
-    t('Description'),
-    array('data' => t('Operations'), 'colspan' => 2),
-  );
-  $rows = array();
-
-  $presets = semantic_fields_get_presets();
-  foreach($presets as $preset) {
-    $rows[] = array(
-      check_plain($preset['human_name']),
-      check_plain($preset['description']),
-      l(t('edit'), 'admin/config/content/semantic-field-formats/' . $preset['name'] . '/edit'),
-      l(t('delete'), 'admin/config/content/semantic-field-formats/' . $preset['name'] . '/delete'),
-    );
-  }
-
-  if (count($rows) > 0) {
-    $output .= theme('table', array('header' => $header, 'rows' => $rows));
-  }
-  else {
-    $output .= t('No custom field formats have been added yet.');
-  }
-
-  return $output;
-}
-
-function semantic_fields_preset_form($form, &$form_state, $name = '') {
-  if (!empty($name)) {
-    drupal_set_title(t('Update field format'));
-    $preset = semantic_fields_preset_load($name);
-    $settings = $preset['data'];
-    $op = 'update';
-  }
-  else {
-    drupal_set_title(t('Add field format'));
-    $settings = array();
-    $op = 'insert';
-  }
-
-  $form['#attached']['css'] = array(drupal_get_path('module', 'semantic_fields') . '/theme/semantic_fields.css');
-
-  $form['basic_settings'] = array(
-    '#type' => 'fieldset',
-    '#title' => t('Basic settings'),
-    '#collapsible' => FALSE,
-    '#collapsed' => FALSE,
-    '#tree' => TRUE,
-  );
-  $form['basic_settings']['op'] = array(
-    '#type' => 'value',
-    '#value' => $op,
-  );
-  if ($op == 'insert') {
-    $form['basic_settings']['name'] = array(
-      '#type' => 'textfield',
-      '#title' => t('Machine name'),
-      '#description' => t('A unique name to identify this field format in the database (a-z, 0-9, _).'),
-      '#required' => TRUE,
-    );
-  }
-  else {
-    $form['basic_settings']['name'] = array(
-      '#type' => 'value',
-      '#value' => $preset['name'],
-    );
-  }
-  $form['basic_settings']['human_name'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Name'),
-    '#description' => t('A human-readable name to identify this field format.'),
-    '#default_value' => isset($preset['human_name']) ? $preset['human_name'] : '',
-    '#required' => TRUE,
-  );
-
-  $form['basic_settings']['description'] = array(
-    '#type' => 'textarea',
-    '#title' => t('Description'),
-    '#description' => t('A description of this field format.'),
-    '#default_value' => isset($preset['description']) ? $preset['description'] : '',
-    '#required' => FALSE,
-  );
-
-  $form['semantic_field_settings'] = array(
-    '#type' => 'fieldset',
-    '#title' => t('Semantic field settings'),
-    '#collapsible' => FALSE,
-    '#collapsed' => FALSE,
-    '#tree' => TRUE,
-  );
-  $form['semantic_field_settings']['field_container_fieldset'] = array(
-    '#type' => 'fieldset',
-    '#title' => t('Field container'),
-    '#collapsible' => TRUE,
-    '#collapsed' => FALSE,
-    '#parents' => array('semantic_field_settings'),
-  );
-  $form['semantic_field_settings']['field_container_fieldset']['field_element'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Surround the entire field with'),
-    '#description' => t('Insert the desired <abbr title="Hyper Text Markup Language">HTML</abbr> element that will be the container for the entire field. Leave blank for no surrounding element.'),
-    '#default_value' => isset($settings['field_element']) ? $settings['field_element'] : 'div',
-    '#required' => FALSE,
-    '#size' => 20,
-  );
-  $form['semantic_field_settings']['field_container_fieldset']['field_class'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Choose field element class(es)'),
-    '#description' => t('The field element automatically gets field, field type and specific field classes (ie. <em>field field-type-text field-field-my-field-name</em>).'),
-    '#default_value' => isset($settings['field_class']) ? $settings['field_class'] : '',
-    '#required' => FALSE,
-  );
-  $form['semantic_field_settings']['field_container_fieldset']['field_prefix'] = array(
-    '#type' => 'textfield',
-    '#title' => t('And a prefix of'),
-    '#default_value' => isset($settings['field_prefix']) ? $settings['field_prefix'] : '',
-    '#description' => t('Insert the desired character(s) to output before the field.'),
-    '#required' => FALSE,
-    '#size' => 20,
-  );
-  $form['semantic_field_settings']['field_container_fieldset']['field_suffix'] = array(
-    '#type' => 'textfield',
-    '#title' => t('And a suffix of'),
-    '#default_value' => isset($settings['field_suffix']) ? $settings['field_suffix'] : '',
-    '#description' => t('Insert the desired character(s) to output after the field.'),
-    '#required' => FALSE,
-  );
-  $form['semantic_field_settings']['label_fieldset'] = array(
-    '#type' => 'fieldset',
-    '#title' => t('Field label'),
-    '#description' => t('<strong>Please note that the placement or appearance of the label is still determined by the field display settings.</strong>'),
-    '#collapsible' => TRUE,
-    '#collapsed' => FALSE,
-    '#attributes' => array('class' => array('semantic-fields-labels')),
-  );
-  $form['semantic_field_settings']['label_fieldset']['above'] = array(
-    '#type' => 'fieldset',
-    '#title' => t('Labels above field value(s)'),
-    '#description' => t('How to render the label when located above the field value(s).'),
-    '#collapsible' => FALSE,
-    '#collapsed' => FALSE,
-    '#attributes' => array('class' => array('semantic-fields-labels-above')),
-    '#parents' => array('semantic_field_settings'),
-  );
-  $form['semantic_field_settings']['label_fieldset']['above']['label_element_above'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Surround the label with'),
-    '#description' => t('Insert the desired <abbr title="Hyper Text Markup Language">HTML</abbr> element that will surround the label.'),
-    '#default_value' => isset($settings['label_element_above']) ? $settings['label_element_above'] : 'h3',
-    '#required' => TRUE,
-    '#size' => 20,
-  );
-  $form['semantic_field_settings']['label_fieldset']['above']['label_class_above'] = array(
-    '#type' => 'textfield',
-    '#title' => t('And a class of'),
-    '#description' => t('The label automatically gets a class of <em>field-label</em>.'),
-    '#default_value' => isset($settings['label_class_above']) ? $settings['label_class_above'] : '',
-    '#required' => FALSE,
-    '#size' => 20,
-  );
-  $form['semantic_field_settings']['label_fieldset']['above']['label_suffix_above'] = array(
-    '#type' => 'textfield',
-    '#title' => t('And a suffix of'),
-    '#description' => t('Insert the desired suffix character, eg. a colon'),
-    '#default_value' => isset($settings['label_suffix_above']) ? $settings['label_suffix_above'] : '',
-    '#required' => FALSE,
-    '#size' => 20,
-  );
-  $form['semantic_field_settings']['label_fieldset']['inline'] = array(
-    '#type' => 'fieldset',
-    '#title' => t('Inline labels'),
-    '#description' => t('How to render the label when located inline with the field value(s).'),
-    '#collapsible' => FALSE,
-    '#collapsed' => FALSE,
-    '#attributes' => array('class' => array('semantic-fields-labels-inline')),
-    '#parents' => array('semantic_field_settings'),
-  );
-  $form['semantic_field_settings']['label_fieldset']['inline']['label_element_inline'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Surround the label with'),
-    '#description' => t('Insert the desired <abbr title="Hyper Text Markup Language">HTML</abbr> element that will surround the label.'),
-    '#default_value' => isset($settings['label_element_inline']) ? $settings['label_element_inline'] : 'span',
-    '#required' => TRUE,
-    '#size' => 20,
-  );
-  $form['semantic_field_settings']['label_fieldset']['inline']['label_class_inline'] = array(
-    '#type' => 'textfield',
-    '#title' => t('And a class of'),
-    '#description' => t('The label automatically gets a class of <em>field-label-inline</em>.'),
-    '#default_value' => isset($settings['label_class_inline']) ? $settings['label_class_inline'] : '',
-    '#required' => FALSE,
-    '#size' => 20,
-  );
-  $form['semantic_field_settings']['label_fieldset']['inline']['label_suffix_inline'] = array(
-    '#type' => 'textfield',
-    '#title' => t('And a suffix of'),
-    '#description' => t('Insert the desired suffix character, eg. a colon'),
-    '#default_value' => isset($settings['label_suffix_inline']) ? $settings['label_suffix_inline'] : ':',
-    '#required' => FALSE,
-    '#size' => 20,
-  );
-  $form['semantic_field_settings']['items_fieldset'] = array(
-    '#type' => 'fieldset',
-    '#title' => t('Field value(s)'),
-    '#collapsible' => TRUE,
-    '#collapsed' => FALSE,
-    '#attributes' => array('class' => array('semantic-fields-multiple-values')),
-  );
-  $form['semantic_field_settings']['items_fieldset']['multivalue'] = array(
-    '#type' => 'fieldset',
-    '#title' => t('Multiple value field'),
-    '#collapsible' => FALSE,
-    '#collapsed' => FALSE,
-    '#attributes' => array('class' => array('field-values', 'semantic-fields-multiple-values-all')),
-  );
-  $form['semantic_field_settings']['items_fieldset']['multivalue']['items_element'] = array(
-    '#type' => 'fieldset',
-    '#collapsible' => FALSE,
-    '#collapsed' => FALSE,
-    '#attributes' => array('class' => array('semantic-fields-multiple-values-fields')),
-    '#parents' => array('semantic_field_settings'),
-  );
-  $form['semantic_field_settings']['items_fieldset']['multivalue']['items_element']['multiple_items_element'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Surround all field values with'),
-    '#description' => t('Insert the desired <abbr title="Hyper Text Markup Language">HTML</abbr> element that will be the container for all field values. Leave blank for no surrounding element.'),
-    '#default_value' => isset($settings['multiple_items_element']) ? $settings['multiple_items_element'] : 'div',
-    '#required' => FALSE,
-    '#size' => 20,
-  );
-  $form['semantic_field_settings']['items_fieldset']['multivalue']['items_element']['multiple_items_class'] = array(
-    '#type' => 'textfield',
-    '#title' => t('And a class of'),
-    '#description' => t('The surrounding fields element automatically gets the <em>field-items</em> class.'),
-    '#default_value' => isset($settings['multiple_items_class']) ? $settings['multiple_items_class'] : '',
-    '#required' => FALSE,
-  );
-  $form['semantic_field_settings']['items_fieldset']['multivalue']['item_element'] = array(
-    '#type' => 'fieldset',
-    '#collapsible' => FALSE,
-    '#collapsed' => FALSE,
-    '#attributes' => array('class' => array('semantic-fields-multiple-values-field')),
-    '#parents' => array('semantic_field_settings'),
-  );
-  $form['semantic_field_settings']['items_fieldset']['multivalue']['item_element']['multiple_item_element'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Surround each field value with'),
-    '#description' => t('Insert the desired <abbr title="Hyper Text Markup Language">HTML</abbr> element that will be the container for each field value. Leave blank for no surrounding element.'),
-    '#default_value' => isset($settings['multiple_item_element']) ? $settings['multiple_item_element'] : 'div',
-    '#required' => FALSE,
-    '#size' => 20,
-  );
-  $form['semantic_field_settings']['items_fieldset']['multivalue']['item_element']['multiple_item_class'] = array(
-    '#type' => 'textfield',
-    '#title' => t('And a class of'),
-    '#description' => t('Each field instance automatically gets the <em>field-item</em> class. Insert a # where you want enumeration (ie field-item-#).'),
-    '#default_value' => isset($settings['multiple_item_class']) ? $settings['multiple_item_class'] : '',
-    '#required' => FALSE,
-  );
-  $form['semantic_field_settings']['items_fieldset']['multivalue']['item_element']['multiple_item_separator'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Separate each field value with'),
-    '#description' => t('Insert the desired character(s) to use as a separator between each field value. For example, this could be used to display the field values as a comma separated list.'),
-    '#default_value' => isset($settings['multiple_item_separator']) ? $settings['multiple_item_separator'] : '',
-    '#required' => FALSE,
-    '#size' => 20,
-  );
-  $form['semantic_field_settings']['items_fieldset']['singlevalue'] = array(
-    '#type' => 'fieldset',
-    '#title' => t('Single value field'),
-    '#collapsible' => FALSE,
-    '#collapsed' => FALSE,
-    '#attributes' => array('class' => array('semantic-fields-single-values-settings')),
-    '#parents' => array('semantic_field_settings'),
-  );
-  $form['semantic_field_settings']['items_fieldset']['singlevalue']['use_singlevalue_settings'] = array(
-    '#type' => 'checkbox',
-    '#title' => t('Use the following settings when the field contains only one value'),
-    '#description' => t('Leave this unchecked to use multiple value field settings when the field contains only one value.'),
-    '#return_value' => 1,
-    '#default_value' => isset($settings['use_singlevalue_settings']) ? $settings['use_singlevalue_settings'] : 0,
-    '#required' => FALSE,
-    '#size' => 20,
-  );
-  $form['semantic_field_settings']['items_fieldset']['singlevalue']['singlevalues'] = array(
-    '#type' => 'fieldset',
-    '#collapsible' => FALSE,
-    '#collapsed' => FALSE,
-    '#attributes' => array('class' => array('semantic-fields-single-values-item')),
-    '#parents' => array('semantic_field_settings'),
-  );
-  $form['semantic_field_settings']['items_fieldset']['singlevalue']['singlevalues']['single_item_element'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Surround field value with'),
-    '#description' => t('Insert the desired <abbr title="Hyper Text Markup Language">HTML</abbr> element that will be the container for a single field value. Leave blank for no surrounding element.'),
-    '#default_value' => isset($settings['single_item_element']) ? $settings['single_item_element'] : 'div',
-    '#required' => FALSE,
-    '#size' => 20,
-  );
-  $form['semantic_field_settings']['items_fieldset']['singlevalue']['singlevalues']['single_item_class'] = array(
-    '#type' => 'textfield',
-    '#title' => t('And a class of'),
-    '#default_value' => isset($settings['single_item_class']) ? $settings['single_item_class'] : '',
-    '#description' => t('The field instance will automatically get a <em>field-item</em> class.'),
-    '#required' => FALSE,
-  );
-  $form['semantic_field_settings']['items_fieldset']['nth_fieldset'] = array(
-    '#type' => 'fieldset',
-    '#title' => t('First and last classes'),
-    '#description' => t('If the <em>FIRST/LAST every n<sup>th</sup></em> option is empty or zero, the <em>FIRST class attribute</em> and <em>LAST class attribute</em> are added once to only the first and last field values. If this option is greater than or equal to 1, these classe are added to every n<sup>th</sup> row, which may be useful for grid layouts where the initial and final unit\'s lateral margins must be 0.'),
-    '#collapsible' => FALSE,
-    '#collapsed' => FALSE,
-    '#attributes' => array('class' => array('semantic-fields-nth-settings')),
-    '#parents' => array('semantic_field_settings'),
-  );
-  $form['semantic_field_settings']['items_fieldset']['nth_fieldset']['last_every_nth'] = array(
-    '#type' => 'textfield',
-    '#title' => t('FIRST/LAST every n<sup>th</sup>'),
-    '#default_value' => isset($settings['last_every_nth']) && is_numeric($settings['last_every_nth']) ? $settings['last_every_nth'] : '0',
-    '#required' => FALSE,
-    '#size' => 20,
-  );
-  $form['semantic_field_settings']['items_fieldset']['nth_fieldset']['first_class'] = array(
-    '#type' => 'textfield',
-    '#title' => t('FIRST class attribute'),
-    '#default_value' => isset($settings['first_class']) ? $settings['first_class'] : 'first',
-    '#required' => FALSE,
-    '#size' => 20,
-  );
-  $form['semantic_field_settings']['items_fieldset']['nth_fieldset']['last_class'] = array(
-    '#type' => 'textfield',
-    '#title' => t('LAST class attribute'),
-    '#default_value' => isset($settings['last_class']) ? $settings['last_class'] : 'last',
-    '#required' => FALSE,
-    '#size' => 20,
-  );
-  $form['semantic_field_settings']['items_fieldset']['striping_fieldset'] = array(
-    '#type' => 'fieldset',
-    '#title' => t('Striping'),
-    '#collapsible' => FALSE,
-    '#collapsed' => FALSE,
-    '#attributes' => array('class' => array('semantic-fields-striping-settings')),
-    '#parents' => array('semantic_field_settings'),
-  );
-  $form['semantic_field_settings']['items_fieldset']['striping_fieldset']['striping_classes'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Striping class attributes'),
-    '#description' => t('One striping class attribute is applied to each row. Separate multiple attributes with a space.'),
-    '#default_value' => isset($settings['striping_classes']) ? $settings['striping_classes'] : 'odd even',
-    '#required' => FALSE,
-  );
-  $form['submit'] = array(
-    '#type' => 'submit',
-    '#value' => t('Save settings'),
-  );
-
-  return $form;
-}
-
-function semantic_fields_preset_form_validate($form, &$form_state) {
-  $op = $form_state['values']['basic_settings']['op'];
-  $name = $form_state['values']['basic_settings']['name'];
-  
-  // Invalid field name.
-  if (!preg_match('!^[a-z0-9_]+$!', $name)) {
-    form_set_error('basic_settings][name', t('The machine name %name is invalid. The name must include only lowercase unaccentuated letters, numbers, and underscores.', array('%name' => $name)));
-  }
-  if (strlen($name) > 32) {
-    form_set_error('basic_settings][name', t("The machine name %name is too long. The name is limited to 32 characters.", array('%name' => $name)));
-  }
-
-  if ($op == 'insert') {
-    // Machine name already exists.
-    $preset = semantic_fields_preset_load($name);
-    if ($preset) {
-      form_set_error('basic_settings][name', t("The machine name %name already exists.", array('%name' => $name)));
-    }
-  }
-}
-
-function semantic_fields_preset_form_submit($form, &$form_state) {
-  $op = $form_state['values']['basic_settings']['op'];
-
-  $preset = array(
-    'name' => $form_state['values']['basic_settings']['name'],
-    'human_name' => $form_state['values']['basic_settings']['human_name'],
-    'description' => $form_state['values']['basic_settings']['description'],
-    'data' => $form_state['values']['semantic_field_settings'],
-  );
-
-  if ($op == 'update') {
-    $preset_source = semantic_fields_preset_load($form_state['values']['basic_settings']['name']);
-    $preset = array_merge($preset_source, $preset);
-    drupal_write_record('semantic_fields_preset', $preset, 'id');
-  }
-  else {
-    drupal_write_record('semantic_fields_preset', $preset);
-    // When a new preset is created, the menu needs to be rebuilt.
-    variable_set('menu_rebuild_needed', TRUE);
-  }
-
-  drupal_set_message(t('Saved %label configuration.', array('%label' => $preset['human_name'])));
-
-  $form_state['redirect'] = 'admin/config/content/semantic-field-formats/list';
-}
-
-function semantic_fields_preset_delete_form($form, &$form_state, $name) {
-  // TODO: check if preset is being used on any fields.
-  
-  $form['name'] = array(
-    '#type' => 'value',
-    '#value' => $name,
-  );
-
-  return confirm_form($form, t('Are you sure you want to delete the field format %name?', array('%name' => $name)), 'admin/config/content/semantic-field-formats');
-}
-
-function semantic_fields_preset_delete_form_submit($form, &$form_state) {
-  db_delete('semantic_fields_preset')
-      ->condition('name', $form_state['values']['name'])
-      ->execute();
-  drupal_set_message(t('The field preset has been deleted.'));
-
-  // TODO: Update fields that were using the deleted preset to now use the default field format.
-
-  $form_state['redirect'] = 'admin/config/content/semantic-field-formats';
-}
\ No newline at end of file
diff --git a/semantic_fields.info b/semantic_fields.info
index dbe1606..6850dc5 100644
--- a/semantic_fields.info
+++ b/semantic_fields.info
@@ -1,7 +1,6 @@
 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..bc49419 100644
--- a/semantic_fields.install
+++ b/semantic_fields.install
@@ -1,29 +1,40 @@
 <?php
 /**
- * Implementation of hook_install() 
+ * Implements hook_schema().
  */
-function semantic_fields_install() {
-
-}
-
-/**
- * Implementation of hook_uninstall() 
- */
-function semantic_fields_uninstall() {
-
+function semantic_fields_schema() {
+  // This should always point to our 'current' schema. This makes it relatively easy
+  // to keep a record of schema as we make changes to it.
+  return semantic_fields_schema_1();
 }
 
 /**
- * Implementation of hook_schema().
+ * Defines our schema
  */
-function semantic_fields_schema() {
+function semantic_fields_schema_1() {
   $schema = array();
 
   $schema['semantic_fields_preset'] = array(
+    'description' => t('Table storing preset definitions.'),
+    'export' => array(
+      'key' => 'name',
+      'key name' => 'Name',
+      'primary key' => 'id',
+      'identifier' => 'preset',
+      'default hook' => 'default_semantic_fields_preset',
+      'load callback' => 'semantic_fields_preset_load',
+      'api' => array(
+        'owner' => 'semantic_fields',
+        'api' => 'semantic_fields',
+        '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',
@@ -31,11 +42,10 @@ function semantic_fields_schema() {
         'not null' => TRUE,
         'default' => '',
       ),
-      'human_name' => array(
+      'admin_title' => array(
         'type' => 'varchar',
-        'length' => 255,
-        'not null' => TRUE,
-        'default' => '',
+        'length' => '255',
+        'description' => 'The administrative title.',
       ),
       'description' => array(
         'type' => 'text',
@@ -56,4 +66,13 @@ function semantic_fields_schema() {
   );
 
   return $schema;
-}
\ No newline at end of file
+}
+
+/**
+ * Change name of field name in database, if it exists
+ */
+function semantic_fields_update_7001() {
+  if (!db_field_exists('semantic_fields_preset', 'admin_title')) {
+    db_change_field('semantic_fields_preset', 'human_name', 'admin_title', array('type' => 'varchar', 'length' => 255, 'not null' => TRUE,));
+  }
+}
diff --git a/semantic_fields.module b/semantic_fields.module
index 9b63ab3..43ef886 100644
--- a/semantic_fields.module
+++ b/semantic_fields.module
@@ -1,57 +1,11 @@
 <?php
 /**
- * Implementation of hook_menu()
+ * @file
+ * The functionality of the module 
  */
-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()
+ * Implements hook_permission().
  */
 function semantic_fields_permission() {
   return array(
@@ -63,7 +17,7 @@ function semantic_fields_permission() {
 }
 
 /**
- * Implementation of hook_form_alter().
+ * Implements hook_form_alter().
  */
 function semantic_fields_form_alter(&$form, &$form_state, $form_id) {  
   if ($form_id == "field_ui_display_overview_form") {
@@ -90,12 +44,14 @@ function semantic_fields_form_alter(&$form, &$form_state, $form_id) {
   }
 }
 
+/**
+ * Acts on submit.
+ */
 function semantic_fields_field_ui_display_overview_form_submit(&$form, &$form_state) {
   $form_values = $form_state['values'];
   $entity_type = $form['#entity_type'];
   $bundle = $form['#bundle'];
   $view_mode = $form['#view_mode'];
-
   foreach ($form['#fields'] as $field_name) {
     // Retrieve the stored instance settings to merge with the incoming values.
     $instance = field_read_instance($entity_type, $field_name, $bundle);
@@ -105,7 +61,7 @@ function semantic_fields_field_ui_display_overview_form_submit(&$form, &$form_st
 }
 
 /**
- * Implementation of hook_field_formatter_info().
+ * Implements hook_field_formatter_info().
  */
 function semantic_fields_field_formatter_info_alter(&$info) {
   foreach (array_keys($info) as $name) {
@@ -113,55 +69,57 @@ function semantic_fields_field_formatter_info_alter(&$info) {
   }
 }
 
+/**
+ * Load all the presets, from file or database
+ */
 function semantic_fields_get_presets() {
-  $results = db_select('semantic_fields_preset', 'p', array('fetch' => PDO::FETCH_ASSOC))
-    ->fields('p')
-    ->orderBy('human_name')
-    ->execute();
-
+  ctools_include('export');
+  $results = ctools_export_load_object('semantic_fields_preset','all', array());
   $presets = array();
-  while ($preset = $results->fetchAssoc()) {
-    $preset['data'] = unserialize($preset['data']);
+  foreach ($results as $result) {
+    $preset['name'] = $result->name;
+    $preset['admin_title'] = $result->admin_title; 
+    $preset['description'] = $result->description;
+    $preset['data'] = $result->data;
     $presets[] = $preset;
   }
-
-  return $presets;
+ return $presets;
 }
 
+/**
+ * Load specific/s preset
+ */
 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();
 }
 
+/**
+ * Get options
+ */
 function semantic_fields_get_preset_options() {
   $presets = semantic_fields_get_presets();
-
   $options = array();
   foreach($presets as $preset) {
-    $options[$preset['name']] = $preset['human_name'];
+    $options[$preset['name']] = $preset['admin_title'];
   }
-  
   return $options;
 }
 
+/**
+ * Implements hook_theme_registry_alter().
+ */
 function semantic_fields_theme_registry_alter(&$theme_registry) {
   $theme_registry['field']['theme path'] = drupal_get_path('module', 'semantic_fields');
   $theme_registry['field']['function'] = 'theme_semantic_field';
 }
 
+/**
+ * Implements hook_preprocess_HOOK().
+ */
 function semantic_fields_preprocess_field(&$variables) {
   $element = $variables['element'];
   $field = field_info_field($element['#field_name']);
@@ -211,10 +169,10 @@ function semantic_fields_preprocess_field(&$variables) {
     );
   }
   else {
-    $settings = $preset['data'];
+    $settings = $preset->data;
   }
 
-  // Provide Semantic Fields field template suggestions.
+  // Provide Semantic fields field template suggestions.
   $variables['theme_hook_suggestions'][] = 'semantic_field';
   $variables['theme_hook_suggestions'][] = 'semantic_field__' . $element['#field_type'];
   $variables['theme_hook_suggestions'][] = 'semantic_field__' . $element['#field_name'];
@@ -322,6 +280,9 @@ function semantic_fields_preprocess_field(&$variables) {
   }
 }
 
+/**
+ * Implements hook_process_HOOK().
+ */
 function semantic_fields_process_field(&$variables) {
   // Label
   $variables['label_classes'] = (isset($variables['label_classes_array']) && !empty($variables['label_classes_array'])) ? implode(' ', $variables['label_classes_array']) : '';
@@ -350,9 +311,23 @@ function semantic_fields_theme($existing, $type, $theme, $path) {
   );
 }
 
+/**
+ * Theme the fields
+ */
 function theme_semantic_field(&$variables) {
   $output = '';
-
+  // Token support for nodes
+  if (module_exists('token') == TRUE) {
+    global $user;
+    
+    if (arg(0) == 'node') {
+      $nid = arg(1);
+    }
+    if (isset($nid)) {
+      $node = node_load($nid);
+      $data = array('node' => $node, 'user' => $user);
+    }
+  }  
   // Render the label, if it's not hidden.
   if (!$variables['label_hidden']) {
     if (!empty($variables['label_element'])) {
@@ -363,7 +338,6 @@ function theme_semantic_field(&$variables) {
       $output .= '</' . $variables['label_element'] . '>';
     }
   }
-
   // Render the items.
   if (!empty($variables['content_element'])) {
     $output .= '<' . $variables['content_element'] . ' class="' . $variables['content_classes'] . '"' . $variables['content_attributes'] . '>';
@@ -375,8 +349,7 @@ function theme_semantic_field(&$variables) {
     $output .= drupal_render($item);
     if ($variables['item_element']) {
       $output .= '</' . $variables['item_element'] . '>';
-    }
-    
+    } 
     if (!empty($variables['item_separator']) && $delta < (count($variables['items']) - 1)) {
       $output .= $variables['item_separator'];
     }
@@ -384,12 +357,10 @@ function theme_semantic_field(&$variables) {
   if (!empty($variables['content_element'])) {
     $output .= '</' . $variables['content_element'] . '>';
   }
-  
   // Render the top-level DIV.
   if (!empty($variables['field_element'])) {
     $output = '<' . $variables['field_element'] . ' class="' . $variables['classes'] . '"' . $variables['attributes'] . '>' . $output . '</' . $variables['field_element'] . '>';
   }
-  
   // Add a prefix and suffix to the field, if specified
   if (!empty($variables['field_prefix'])) {
     $output = $variables['field_prefix'] . $output;
@@ -397,6 +368,30 @@ function theme_semantic_field(&$variables) {
   if (!empty($variables['field_suffix'])) {
     $output .= $variables['field_suffix'];
   }
+  if (isset($nid)) {
+    return token_replace($output, $data);
+  }
+  else {
+    return $output; 
+  }
+}
 
-  return $output;
-}
\ No newline at end of file
+/**
+* Implements hook_ctools_plugin_api().
+*/
+function semantic_fields_ctools_plugin_api($owner, $api) {
+  if ($owner == 'semantic_fields' && $api == 'semantic_fields') {
+    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';
+    }
+  }
+  
\ No newline at end of file
diff --git a/semantic_fields_default_presets/semantic_fields_default_presets.info b/semantic_fields_default_presets/semantic_fields_default_presets.info
new file mode 100644
index 0000000..fd5c9f1
--- /dev/null
+++ b/semantic_fields_default_presets/semantic_fields_default_presets.info
@@ -0,0 +1,6 @@
+name = Semantic Fields default presets
+description = "Provides default presets for Semantic Fields"
+package = Fields
+dependencies[] = field
+dependencies[] = ctools
+core = 7.x
diff --git a/semantic_fields_default_presets/semantic_fields_default_presets.module b/semantic_fields_default_presets/semantic_fields_default_presets.module
new file mode 100644
index 0000000..15cdce8
--- /dev/null
+++ b/semantic_fields_default_presets/semantic_fields_default_presets.module
@@ -0,0 +1,119 @@
+<?php
+/**
+* Implements hook_ctools_plugin_api().
+*/
+function semantic_fields_default_presets_ctools_plugin_api($owner, $api) {
+  if ($owner == 'semantic_fields' && $api == 'semantic_fields') {
+    return array('version' => 1);
+  }
+}
+
+/**
+ * Implements hook_default_mymodule_preset().
+ *
+ * Provide a couple of default presets.
+ */
+function semantic_fields_default_presets_default_semantic_fields_preset() {
+  $export = array();
+  
+  $preset = new stdClass();
+  $preset->disabled = FALSE; /* Edit this to true to make a default preset disabled initially */
+  $preset->api_version = 1;
+  $preset->name = 'ordered_list';
+  $preset->admin_title = 'Ordered list';
+  $preset->description = 'Display the content as an ordered list';
+  $preset->data = array(
+    'field_element' => 'ol',
+    'field_class' => '',
+    'field_prefix' => '',
+    'field_suffix' => '',
+    'label_element_above' => 'span',
+    'label_class_above' => '',
+    'label_suffix_above' => '',
+    'label_element_inline' => 'span',
+    'label_class_inline' => '',
+    'label_suffix_inline' => ':',
+    'multiple_items_element' => '',
+    'multiple_items_class' => '',
+    'multiple_item_element' => 'li',
+    'multiple_item_class' => '',
+    'multiple_item_separator' => '',
+    'use_singlevalue_settings' => 0,
+    'single_item_element' => 'li',
+    'single_item_class' => '',
+    'last_every_nth' => '0',
+    'first_class' => 'first',
+    'last_class' => 'last',
+    'striping_classes' => 'odd even',
+  );
+  $export['ordered_list'] = $preset;
+  
+  $preset = new stdClass();
+  $preset->disabled = FALSE; /* Edit this to true to make a default preset disabled initially */
+  $preset->api_version = 1;
+  $preset->name = 'unordered_list';
+  $preset->admin_title = 'Unordered list';
+  $preset->description = 'Display the content as an unordered list';
+  $preset->data = array(
+    'field_element' => 'ul',
+    'field_class' => '',
+    'field_prefix' => '',
+    'field_suffix' => '',
+    'label_element_above' => 'span',
+    'label_class_above' => '',
+    'label_suffix_above' => '',
+    'label_element_inline' => 'span',
+    'label_class_inline' => '',
+    'label_suffix_inline' => ':',
+    'multiple_items_element' => '',
+    'multiple_items_class' => '',
+    'multiple_item_element' => 'li',
+    'multiple_item_class' => '',
+    'multiple_item_separator' => '',
+    'use_singlevalue_settings' => 0,
+    'single_item_element' => 'li',
+    'single_item_class' => '',
+    'last_every_nth' => '0',
+    'first_class' => 'first',
+    'last_class' => 'last',
+    'striping_classes' => 'odd even',
+  );
+  $export['unordered_list'] = $preset;
+  
+  $preset = new stdClass();
+  $preset->disabled = FALSE; /* Edit this to true to make a default preset disabled initially */
+  $preset->api_version = 1;
+  $preset->name = 'clear';
+  $preset->admin_title = 'Clear';
+  $preset->description = 'Clears out as much as possible of the the extra HTML Drupal adds.';
+  $preset->data = array(
+    'field_element' => 'div',
+    'field_class' => '',
+    'field_prefix' => '',
+    'field_suffix' => '',
+    'label_element_above' => 'span',
+    'label_class_above' => '',
+    'label_suffix_above' => '',
+    'label_element_inline' => 'span',
+    'label_class_inline' => '',
+    'label_suffix_inline' => '',
+    'multiple_items_element' => '',
+    'multiple_items_class' => '',
+    'multiple_item_element' => '',
+    'multiple_item_class' => '',
+    'multiple_item_separator' => '',
+    'use_singlevalue_settings' => 0,
+    'single_item_element' => '',
+    'single_item_class' => '',
+    'last_every_nth' => '0',
+    'first_class' => '',
+    'last_class' => '',
+    'striping_classes' => 'odd even',
+  );
+  $export['clear'] = $preset;
+  
+
+  
+  
+  return $export;
+}
