diff --git filefield_paths.info filefield_paths.info
index 19e9cd3..1efa14c 100644
--- filefield_paths.info
+++ filefield_paths.info
@@ -2,5 +2,6 @@
 name = FileField Paths
 description = Adds improved Token based file sorting and renaming functionalities.
 dependencies[] = token
+dependencies[] = ctools
 package = FileField Paths
 core = 6.x
diff --git filefield_paths.install filefield_paths.install
index 89bef05..6445582 100644
--- filefield_paths.install
+++ filefield_paths.install
@@ -10,13 +10,41 @@
  */
 function filefield_paths_schema() {
   $schema['filefield_paths'] = array(
+    'export' => array(
+      'key' => 'name',
+      'identifier' => 'filefield_paths',
+      'default hook' => 'filefield_paths_defaults',  // Function hook name.
+      'status' => 'filefield_paths_status',
+      'api' => array(
+        'owner' => 'filefield_paths',
+        'api' => 'filefield_paths',  // Base name for api include files.
+        'minimum_version' => 1,
+        'current_version' => 1,
+      ),
+    ),
     'fields' => array(
+      'record_id' => array(
+        'type' => 'serial',
+        'unsigned' => TRUE,
+        'not null' => TRUE,
+        'description' => 'Primary ID field for the table. Not used for anything except internal lookups.',
+        'no export' => TRUE, // Do not export database-only keys.
+      ),
+      'name' => array(
+        'description' => 'The machine name for this record. Typically this is a node type name and field name delimited with a hyphen, e.g. TYPE-FIELD.',
+        'type' => 'varchar',
+        'length' => 255,
+        'not null' => TRUE,
+        'default' => '',
+      ),
       'type' => array('type' => 'varchar', 'length' => 32, 'not null' => TRUE, 'default' => ''),
       'field' => array('type' => 'varchar', 'length' => 32, 'not null' => TRUE, 'default' => ''),
       'filename' => array('type' => 'text', 'size' => 'medium', 'not null' => TRUE, 'serialize' => TRUE),
       'filepath' => array('type' => 'text', 'size' => 'medium', 'not null' => TRUE, 'serialize' => TRUE),
     ),
+    'primary key' => array('record_id'),
     'unique keys' => array(
+      'name' => array('name'),
       'type_field' => array('type', 'field'),
     ),
   );
@@ -195,3 +223,50 @@ function filefield_paths_update_6103() {
 
   return array();
 }
+
+/**
+ * Change to using a single key field for identifying filefield_paths. This aids 
+ * in adding support for exportability.
+ */
+function filefield_paths_update_6104() {
+  $ret = array();
+
+  // Add our new serial primary key column.
+  $field = array(
+    'type' => 'serial',
+    'unsigned' => TRUE,
+    'not null' => TRUE,
+    'description' => 'Primary ID field for the table. Not used for anything except internal lookups.',
+  );
+
+  $new_keys = array('primary key' => array('record_id'));
+
+  db_add_field($ret, 'filefield_paths', 'record_id', $field, $new_keys);
+
+  // Add our new name column.
+  $field = array(
+    'description' => 'The machine name for this record. Typically this is a node type name and field name delimited with a hyphen, e.g. TYPE-FIELD.',
+    'type' => 'varchar',
+    'length' => 255,
+    'not null' => TRUE,
+    'default' => '',
+  );
+
+  $new_keys = array('unique keys' => array('name' => array('name')));
+
+  db_add_field($ret, 'filefield_paths', 'name', $field, $new_keys);
+
+  // Update existing rows with a machine name.
+  global $db_type;
+
+  if ($db_type == 'mysql' || $db_type == 'mysqli') {
+    $sql = "UPDATE {filefield_paths} SET name = CONCAT(type, '". FILEFIELD_PATHS_DELIMETER ."', field)";
+  }
+  else {
+    $sql = "UPDATE {filefield_paths} SET name = type||'". FILEFIELD_PATHS_DELIMETER ."'||field";
+  }
+
+  $ret[] = update_sql($sql);
+
+  return $ret;
+}
\ No newline at end of file
diff --git filefield_paths.module filefield_paths.module
index 91182bd..1946d96 100644
--- filefield_paths.module
+++ filefield_paths.module
@@ -5,6 +5,10 @@
  * Contains core functions for the FileField Paths module.
  */
 
+define('FILEFIELD_PATHS_DELIMETER', '-');
+
+module_load_include('inc', 'filefield_paths', 'filefield_paths.crud');
+
 /**
  * Implements hook_filefield_paths_field_settings().
  */
@@ -96,23 +100,22 @@ function filefield_paths_form_alter(&$form, $form_state, $form_id) {
 
   // If supporting module enabled, show FileField Paths settings form.
   if (count($ffp) > 0) {
-    $fields = module_invoke_all('filefield_paths_field_settings');
-    foreach ($ffp as $field_name => $field_data) {
+    $form['#ffp_fields'] = module_invoke_all('filefield_paths_field_settings');
 
-      $result = db_fetch_object(
-        db_query("SELECT * FROM {filefield_paths} WHERE type = '%s' AND field = '%s'", $field_data['type'], $field_name)
-      );
-      if (!empty($result)) {
-        foreach ($fields as &$field) {
-          $field['settings'] = unserialize($result->$field['sql']);
-        }
-        unset($field);
-      }
+    foreach ($ffp as $field_name => $field_data) {
+      $record = filefield_paths_load_record($field_data['type'], $field_name);
 
       $count = 0;
-      foreach ($fields as $name => $field) {
+      foreach ($form['#ffp_fields'] as $name => $field) {
         $count++;
 
+        if ($record) {
+          $column = $field['sql'];
+          $field['settings'] = $record->$column;
+          // Update the $form array as well.
+          $form['#ffp_fields'][$name] = $field;
+        }
+
         if (isset($field['form']) && is_array($field['form'])) {
           $keys = array_keys($field['form']);
           for ($i = 1; $i < count($field['form']); $i++) {
@@ -235,6 +238,7 @@ function filefield_paths_form_alter(&$form, $form_state, $form_id) {
  * Implements hook_form_submit().
  */
 function filefield_paths_form_submit($form, &$form_state) {
+  $values = $form_state['values'];
   $ffp = array();
 
   // Invoke hook_filefield_paths_form_submit().
@@ -245,64 +249,45 @@ function filefield_paths_form_submit($form, &$form_state) {
 
   if (count($ffp) > 0) {
     $retroactive_update = FALSE;
-    $fields = module_invoke_all('filefield_paths_field_settings');
+    $fields = $form['#ffp_fields'];
     foreach ($ffp as $field_name => $field_data) {
-      $cols = $vals = $data = array();
+      $record = filefield_paths_load_record($field_data['type'], $field_name);
+
+      if (empty($record)) {
+        $record = new stdClass();
+        $record->type = $field_data['type'];
+        $record->field = $field_name;
+      }
 
+      // Now add the other columns to the record.
       foreach ($fields as $name => &$field) {
         $field['settings'] = array(
-          'value' => $form_state['values']['ffp_' . $field_name][$name],
-          'tolower' => $form_state['values']['ffp_' . $field_name][$name . '_cleanup'][$name . '_tolower'],
-          'pathauto' => $form_state['values']['ffp_' . $field_name][$name . '_cleanup'][$name . '_pathauto'],
-          'transliterate' => $form_state['values']['ffp_' . $field_name][$name . '_cleanup'][$name . '_transliterate']
+          'value' => $values['ffp_' . $field_name][$name],
+          'tolower' => $values['ffp_' . $field_name][$name . '_cleanup'][$name . '_tolower'],
+          'pathauto' => $values['ffp_' . $field_name][$name . '_cleanup'][$name . '_pathauto'],
+          'transliterate' => $values['ffp_' . $field_name][$name . '_cleanup'][$name . '_transliterate']
         );
 
         // Store additional settings from addon modules.
         if (isset($field['data'])) {
           foreach ($field['data'] as $key => $value) {
-            $field['settings'][$key] = $form_state['values']['ffp_' . $field_name][$value];
+            $field['settings'][$key] = $values['ffp_' . $field_name][$value];
           }
         }
 
-        $cols[] = $field['sql'];
-        $vals[] = "'%s'";
-        $data[] = serialize($field['settings']);
-      }
-
-      $result = db_fetch_object(
-        db_query(
-          "SELECT * FROM {filefield_paths} WHERE type = '%s' AND field = '%s'",
-          $field_data['type'], $field_name
-        )
-      );
-
-      // Update existing entry.
-      if (!empty($result)) {
-        foreach ($cols as &$col) {
-          $col .= " = '%s'";
-        }
-
-        db_query(
-          "UPDATE {filefield_paths} SET " . implode(', ', $cols) . " WHERE type = '%s' AND field = '%s'",
-          array_merge($data, array($field_data['type'], $field_name))
-        );
+        $column = $field['sql'];
+        $record->$column = $field['settings'];
       }
 
-      // Create new entry.
-      else {
-        db_query(
-          "INSERT INTO {filefield_paths} (type, field, " . implode(', ', $cols) . ") VALUES ('%s', '%s', " . implode(', ', $vals) . ")",
-          array_merge(array($field_data['type'], $field_name), $data)
-        );
-      }
+      filefield_paths_save_record($record);
 
-      if ($form_state['values']['ffp_' . $field_name]['retroactive_update']) {
+      if ($values['ffp_' . $field_name]['retroactive_update']) {
         $retroactive_update = TRUE;
         $module = isset($form['#field']) ? $form['#field']['module'] : $field_name;
         filefield_paths_batch_update($module, $field_name, arg(3));
       }
 
-      variable_set("ffp_{$field_data['type']}_{$field_name}", $form_state['values']['ffp_' . $field_name]['active_updating']);
+      variable_set("ffp_{$field_data['type']}_{$field_name}", $values['ffp_' . $field_name]['active_updating']);
     }
 
     if ($retroactive_update) {
@@ -831,3 +816,28 @@ function _filefield_paths_check_directory(&$directory, $mode = 0, $form_item = N
 
   return TRUE;
 }
+
+/**
+ * Helper function to create a machine name from node type name and field name.
+ *
+ * @param $type_name
+ *   String node type name.
+ * @param $field_name
+ *   String field name.
+ * @return
+ *   The node type and field name delimited by FILEFIELD_PATHS_DELIMITER.
+ */
+function _filefield_paths_record_name($type_name, $field_name) {
+  return $type_name . FILEFIELD_PATHS_DELIMITER . $field_name;
+}
+
+/**
+ * Implementation of hook_features_pipe_COMPONENT_alter().
+ */
+function filefield_paths_features_pipe_content_alter(&$pipe, $data, $export, $module_name) {
+  foreach ($data as $name) {
+    if ($record = filefield_paths_load_record_by_name($name)) {
+      $pipe['filefield_paths'][] = $name;
+    }
+  }
+}
\ No newline at end of file
diff --git translations/filefield_paths.sv.po translations/filefield_paths.sv.po
deleted file mode 100644
index 895df1e..0000000
--- translations/filefield_paths.sv.po
+++ /dev/null
@@ -1,216 +0,0 @@
-# $Id$
-#
-# Swedish translation of Drupal (filefield_paths)
-# Generated from files:
-#  filefield_paths.module,v 1.19.2.38 2010/01/11 06:07:16 deciphered
-#  filefield_paths.info,v 1.3.2.2 2010/01/11 06:07:16 deciphered
-#  audio.inc,v 1.1.2.4 2010/01/11 06:07:16 deciphered
-#  comment_upload.inc,v 1.1.2.7 2010/01/11 06:07:16 deciphered
-#  image.inc,v 1.1.2.8 2010/01/11 06:07:16 deciphered
-#  upload.inc,v 1.1.2.6 2010/01/11 06:07:16 deciphered
-#  filefield.inc,v 1.1.2.9 2010/01/11 06:07:16 deciphered
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: FileField Paths 6.x\n"
-"POT-Creation-Date: 2010-03-30 03:36+0200\n"
-"PO-Revision-Date: 2010-03-30 04:10+0100\n"
-"Last-Translator: Magnus Gunnarsson <magnus.gunnarsson76@gmail.com>\n"
-"Language-Team: drupalsverige.se\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n!=1);\n"
-"X-Poedit-Language: Swedish\n"
-"X-Poedit-Country: SWEDEN\n"
-"X-Poedit-SourceCharset: utf-8\n"
-
-#: filefield_paths.module:32
-msgid "File name"
-msgstr "Filnamn"
-
-#: filefield_paths.module:59
-msgid "Token"
-msgstr "Symbol"
-
-#: filefield_paths.module:59
-msgid "Replacement value"
-msgstr "Ersättningsvärde"
-
-#: filefield_paths.module:62
-msgid "tokens"
-msgstr "symboler"
-
-#: filefield_paths.module:142
-msgid "!title cleanup settings"
-msgstr "Inställningar för upprensning av !title "
-
-#: filefield_paths.module:154
-msgid "Cleanup using Pathauto"
-msgstr "Upprensning genom Pathauto"
-
-#: filefield_paths.module:159
-msgid "Cleanup !title using !url"
-msgstr "Rensa upp !title genom !url"
-
-#: filefield_paths.module:159
-msgid "Pathauto settings"
-msgstr "Inställningar för Pathauto"
-
-#: filefield_paths.module:169
-msgid "Convert to lower case"
-msgstr "Konvertera till gemener"
-
-#: filefield_paths.module:174
-msgid "Convert !title to lower case"
-msgstr "Konvertera !title till små bokstäver"
-
-#: filefield_paths.module:180
-msgid "Transliterate"
-msgstr "Omskriv"
-
-#: filefield_paths.module:185
-msgid "Transliterate !title"
-msgstr "Skriv om !title"
-
-#: filefield_paths.module:195
-msgid "!title replacement patterns"
-msgstr "Ersättningsmönster för !title"
-
-#: filefield_paths.module:209
-msgid "Retroactive update"
-msgstr "Retroaktiv uppdatering"
-
-#: filefield_paths.module:210
-msgid "Move and rename previously uploaded files"
-msgstr "Flytta och byt namn på tidigare uppladdade filer"
-
-#: filefield_paths.module:211;222
-msgid "Warning"
-msgstr "Varning"
-
-#: filefield_paths.module:212;223
-msgid "This feature should only be used on developmental servers or with extreme caution"
-msgstr "Denna funktion bör enbart användas på utvecklingsservrar eller med stor tillförsikt"
-
-#: filefield_paths.module:219
-msgid "Active updating"
-msgstr "Aktiv uppdatering"
-
-#: filefield_paths.module:221
-msgid "Actively move and rename previously uploaded files as required"
-msgstr "Aktivt flytta och byta namn på tidigare uppladdade filer som krävs"
-
-#: filefield_paths.module:335
-msgid "Updating FileField Paths"
-msgstr "Uppdaterar FileField Paths"
-
-#: filefield_paths.module:622
-msgid "File name without extension"
-msgstr "Filnamn utan ändelse"
-
-#: filefield_paths.module:623
-msgid "File extension"
-msgstr "Filändelse"
-
-#: filefield_paths.module:625
-msgid "File name without extension - original"
-msgstr "Filnamn utan ändelse - ursprunglig"
-
-#: filefield_paths.module:626
-msgid "File extension - original"
-msgstr "Filändelse - ursprunglig"
-
-#: filefield_paths.module:629
-msgid "Image derivative (thumbnail, preview, etc)"
-msgstr "Härledda bilder (tumnaglar, förhandsgranskningar och så vidare)"
-
-#: filefield_paths.module:801
-msgid "The directory %directory is a file!"
-msgstr "Katalogen %directory är en fil!"
-
-#: filefield_paths.module:808;807
-msgid "The directory %directory does not exist."
-msgstr "Katalogen %directory finns inte."
-
-#: filefield_paths.module:815
-msgid "The directory %directory is not writable"
-msgstr "Katalogen %directory är skrivskyddad."
-
-#: filefield_paths.module:827
-msgid "Security warning: Couldn't write .htaccess file. Please create a .htaccess file in your %directory directory which contains the following lines:<br /><code>!htaccess</code>"
-msgstr "Säkerhetsvarning: Kunde inte skriva filen .htaccess. Skapa denna fil i din katalog %directory som innehåller dessa rader:<br /><code>!htaccess</code>"
-
-#: filefield_paths.module:755;761
-msgid "filefield_paths"
-msgstr "filefield_paths"
-
-#: filefield_paths.module:755
-msgid "FileField Paths failed to create directory (%d)."
-msgstr "FileField Paths misslyckades med att skapa katalog (%d)."
-
-#: filefield_paths.module:761
-msgid "FileField Paths failed to move file (%o) to (%n)."
-msgstr "FileField Paths misslyckades med att flytta fil (%o) till (%n)."
-
-#: filefield_paths.module:800;807;814
-msgid "file system"
-msgstr "filsystem"
-
-#: filefield_paths.module:800
-msgid "check_directory: The path  %directory is a file."
-msgstr "check_directory: Sökvägen %directory är en fil."
-
-#: filefield_paths.module:814
-msgid "The directory %directory is not writable, because it does not have the correct permissions set."
-msgstr "Katalogen %directory är skrivskyddad på grund av att den inte har korrekta rättigheter inställda."
-
-#: filefield_paths.module:828
-msgid "security"
-msgstr "säkerhet"
-
-#: filefield_paths.module:828
-msgid "Security warning: Couldn't write .htaccess file.  Please create a .htaccess file in your %directory directory which contains the following lines:<br /><code>!htaccess</code>"
-msgstr "Säkerhetsvarning: Kunde inte skriva filen .htaccess. Skapa denna fil i din katalog %directory som innehåller dessa rader:<br /><code>!htaccess</code>"
-
-#: filefield_paths.info:0;0
-msgid "FileField Paths"
-msgstr "Sökvägar för filfält"
-
-#: filefield_paths.info:0
-msgid "Adds improved Token based file sorting and renaming functionalities."
-msgstr "Lägger till förbättrade symbolbaserade funktioner för att sortera filer och byta namn på dem."
-
-#: modules/audio.inc:22
-msgid "Audio Path settings"
-msgstr "Inställningar för sökvägar till ljud"
-
-#: modules/audio.inc:29
-#: modules/comment_upload.inc:30
-#: modules/image.inc:29
-#: modules/upload.inc:30
-msgid "File path"
-msgstr "Filsökväg"
-
-#: modules/audio.inc:30
-#: modules/comment_upload.inc:31
-#: modules/upload.inc:31
-msgid "Optional subdirectory within the \"%dir\" directory where files will be stored. Do not include trailing slash."
-msgstr "Alternativ underkatalog inuti katalogen \"%dir\" där filer kommer att lagras. Inkludera inte avslutande snedstreck."
-
-#: modules/comment_upload.inc:22
-msgid "Comment Upload Path settings"
-msgstr "Inställningar för kommentarers sökvägar för uppladdning"
-
-#: modules/filefield.inc:23
-msgid "FileField Path settings"
-msgstr "Inställningar för sökvägar till filfält"
-
-#: modules/image.inc:22
-msgid "Image Path settings"
-msgstr "Inställningar för sökvägar till bilder"
-
-#: modules/upload.inc:22
-msgid "Upload Path settings"
-msgstr "Inställningar för sökvägar till uppladdning"
-
