diff --git salesforce_api/salesforce_api.admin.inc salesforce_api/salesforce_api.admin.inc
index 3355eb0..5728661 100644
--- salesforce_api/salesforce_api.admin.inc
+++ salesforce_api/salesforce_api.admin.inc
@@ -461,9 +461,7 @@ function salesforce_api_fieldmap_create($values) {
  * Displays the form for cloning a fieldmap
  *
  */
-function salesforce_api_fieldmap_clone_form(&$form_state, $fieldmap) {
-  // Load the fieldmap from the database.
-  $map = salesforce_api_fieldmap_load($fieldmap);
+function salesforce_api_fieldmap_clone_form(&$form_state, $map) {
   // Return to the admin page if the fieldmap did not exist.
   if (empty($map)) {
     drupal_set_message(t('That fieldmap does not exist.'), 'error');
@@ -474,7 +472,7 @@ function salesforce_api_fieldmap_clone_form(&$form_state, $fieldmap) {
   // Add the fieldmap to the form array.
   $form['fieldmap_index'] = array(
     '#type' => 'value',
-    '#value' => $fieldmap,
+    '#value' => $map->name,
   );
 
   // Build the description text for this fieldmap.
@@ -502,10 +500,8 @@ function salesforce_api_fieldmap_clone_form_submit($form, &$form_state) {
 /**
  * Displays the confirm form for deleting a fieldmap.
  */
-function salesforce_api_fieldmap_delete_form(&$form_state, $fieldmap) {
+function salesforce_api_fieldmap_delete_form(&$form_state, $map) {
   $args = arg();
-  // Load the fieldmap from the database.
-  $map = salesforce_api_fieldmap_load($fieldmap);
 
   // Return to the admin page if the fieldmap did not exist.
   if (empty($map)) {
@@ -518,7 +514,7 @@ function salesforce_api_fieldmap_delete_form(&$form_state, $fieldmap) {
   // Add the fieldmap to the form array.
   $form['fieldmap_index'] = array(
     '#type' => 'value',
-    '#value' => $fieldmap,
+    '#value' => $map->name,
   );
 
   // Build the description text for this fieldmap.
@@ -548,16 +544,13 @@ function salesforce_api_fieldmap_delete_form_submit($form, &$form_state) {
 /**
  * Displays the edit form for adding field associations to a fieldmap.
  */
-function salesforce_api_fieldmap_edit_form(&$form_state, $fieldmap) {
+function salesforce_api_fieldmap_edit_form(&$form_state, $map) {
 
   // Include the CSS and JS for the form.
   $path = drupal_get_path("module", "salesforce_api");
   drupal_add_css($path .'/misc/salesforce_api.admin.css');
   drupal_add_js($path ."/misc/salesforce_api.admin.js");
 
-  // Load the fieldmap from the database.
-  $map = salesforce_api_fieldmap_load($fieldmap, TRUE);
-
   // Return to the admin page if the fieldmap did not exist.
   if (empty($map)) {
     drupal_set_message(t('That fieldmap does not exist.'), 'error');
@@ -574,7 +567,7 @@ function salesforce_api_fieldmap_edit_form(&$form_state, $fieldmap) {
   // Add the index to the form array.
   $form['fieldmap_index'] = array(
     '#type' => 'value',
-    '#value' => $fieldmap,
+    '#value' => $map->name,
   );
 
   // Add a description of the source fieldmap to the form array.
@@ -860,11 +853,8 @@ function salesforce_api_fieldmap_edit_form_submit($form, &$form_state) {
  * @param string $field - the name of the field to be removed
  * @param bool $redirect (optional) - default true. Whether to redirect to the fieldmap edit form
  */
-function salesforce_api_fieldmap_remove_field($fieldmap, $field, $redirect = TRUE) {
-  if (is_string($fieldmap)) {
-    $fieldmap = salesforce_api_fieldmap_load($fieldmap);
-  }
-  $object_definition = salesforce_api_fieldmap_objects_load('salesforce', $fieldmap->salesforce);
+function salesforce_api_fieldmap_remove_field($map, $field, $redirect = TRUE) {
+  $object_definition = salesforce_api_fieldmap_objects_load('salesforce', $map->salesforce);
   $success = TRUE;
 
   if (empty($object_definition['fields'][$field])) {
@@ -877,12 +867,12 @@ function salesforce_api_fieldmap_remove_field($fieldmap, $field, $redirect = TRU
     $success = FALSE;
   }
   else {
-    unset($fieldmap->fields[$field]);
-    salesforce_api_fieldmap_save($fieldmap);
+    unset($map->fields[$field]);
+    salesforce_api_fieldmap_save($map);
     $success = TRUE;
   }
   if ($redirect) {
-    drupal_goto(SALESFORCE_PATH_FIELDMAPS . '/' . $fieldmap->name . '/edit');
+    drupal_goto(SALESFORCE_PATH_FIELDMAPS . '/' . $map->name . '/edit');
     exit;
   }
   return $success;
diff --git salesforce_api/salesforce_api.module salesforce_api/salesforce_api.module
index d56d9a7..8c3bac0 100644
--- salesforce_api/salesforce_api.module
+++ salesforce_api/salesforce_api.module
@@ -146,7 +146,17 @@ function salesforce_api_menu() {
     'weight' => 5,
     'file' => 'salesforce_api.admin.inc',
   );
-  $items[SALESFORCE_PATH_FIELDMAPS .'/%/edit'] = array(
+  $items[SALESFORCE_PATH_FIELDMAPS .'/%salesforce_api_fieldmap'] = array(
+    'title' => 'Edit',
+    'description' => 'Edit an existing fieldmap.',
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('salesforce_api_fieldmap_edit_form', $map_id_arg),
+    'access callback' => '_salesforce_fieldmap_access',
+    'access arguments' => array('administer salesforce', 'edit', $map_id_arg),
+    'file' => 'salesforce_api.admin.inc',
+    'weight' => 10,
+  );
+  $items[SALESFORCE_PATH_FIELDMAPS .'/%salesforce_api_fieldmap/edit'] = array(
     'title' => 'Edit',
     'description' => 'Edit an existing fieldmap.',
     'page callback' => 'drupal_get_form',
@@ -157,7 +167,7 @@ function salesforce_api_menu() {
     'file' => 'salesforce_api.admin.inc',
     'weight' => 10,
   );
-  $items[SALESFORCE_PATH_FIELDMAPS .'/%/remove/%'] = array(
+  $items[SALESFORCE_PATH_FIELDMAPS .'/%salesforce_api_fieldmap/remove/%'] = array(
     'title' => 'Edit',
     'description' => 'Edit an existing fieldmap.',
     'page callback' => 'salesforce_api_fieldmap_remove_field',
@@ -167,7 +177,7 @@ function salesforce_api_menu() {
     'type' => MENU_CALLBACK,
     'file' => 'salesforce_api.admin.inc',
   );
-  $items[SALESFORCE_PATH_FIELDMAPS .'/%/clone'] = array(
+  $items[SALESFORCE_PATH_FIELDMAPS .'/%salesforce_api_fieldmap/clone'] = array(
     'title' => 'Clone',
     'description' => 'Clone an existing fieldmap.',
     'page callback' => 'drupal_get_form',
@@ -178,7 +188,7 @@ function salesforce_api_menu() {
     'file' => 'salesforce_api.admin.inc',
     'weight' => 15,
   );
-  $items[SALESFORCE_PATH_FIELDMAPS .'/%/delete'] = array(
+  $items[SALESFORCE_PATH_FIELDMAPS .'/%salesforce_api_fieldmap/delete'] = array(
     'title' => 'Delete',
     'description' => 'Delete an existing fieldmap.',
     'page callback' => 'drupal_get_form',
@@ -189,11 +199,13 @@ function salesforce_api_menu() {
     'file' => 'salesforce_api.admin.inc',
     'weight' => 20,
   );
-  $items[SALESFORCE_PATH_FIELDMAPS .'/%/revert'] =
-    $items[SALESFORCE_PATH_FIELDMAPS .'/%/delete'];
-  $items[SALESFORCE_PATH_FIELDMAPS .'/%/revert']['title'] = 'Revert';
-  unset($items[SALESFORCE_PATH_FIELDMAPS .'/%/revert']['type'],
-        $items[SALESFORCE_PATH_FIELDMAPS .'/%/revert']['weight']);
+  $items[SALESFORCE_PATH_FIELDMAPS .'/%salesforce_api_fieldmap/revert'] =
+    $items[SALESFORCE_PATH_FIELDMAPS .'/%salesforce_api_fieldmap/delete'];
+  $items[SALESFORCE_PATH_FIELDMAPS .'/%salesforce_api_fieldmap/revert']['title'] = 'Revert';
+  $items[SALESFORCE_PATH_FIELDMAPS .'/%salesforce_api_fieldmap/revert']['access callback'] =
+    '_salesforce_fieldmap_delete_revert_access';
+  $items[SALESFORCE_PATH_FIELDMAPS .'/%salesforce_api_fieldmap/revert']['access arguments'] =
+    array('administer salesforce', 'revert', $map_id_arg);
 
 
   $items[SALESFORCE_PATH_OBJECT] = array(
@@ -224,7 +236,7 @@ function salesforce_api_menu() {
   );
 
   if (module_exists('ctools')) {
-    $items[SALESFORCE_PATH_FIELDMAPS .'/%/export'] = array(
+    $items[SALESFORCE_PATH_FIELDMAPS .'/%salesforce_api_fieldmap/export'] = array(
       'title' => 'Export',
       'description' => 'Export a fieldmap.',
       'page callback' => 'salesforce_api_export_salesforce_field_map',
@@ -261,19 +273,30 @@ function salesforce_api_perm() {
  * Access callback
  *
  */
-function _salesforce_fieldmap_access($perm, $op = 'edit', $id = NULL) {
-  if (empty($id)) {
+function _salesforce_fieldmap_access($perm, $op = 'edit', $map = NULL) {
+  if (empty($map) || !is_object($map)) {
     return FALSE;
   }
-  else {
-    $maps = salesforce_api_salesforce_field_map_load_all();
-    foreach ($maps as $map) {
-      if ($id == $map->name) {
-        return user_access($perm);
-      }
-    }
+  return user_access($perm);
+}
+
+/**
+ * Access callback for delete / revert operations. Only code-based, overridden
+ * maps can be reverted and only database-only maps can be deleted.
+ */
+function _salesforce_fieldmap_delete_revert_access($perm, $op = 'delete', $map = NULL) {
+  if (empty($map) || !is_object($map)) {
+    return FALSE;
+  }
+
+  switch ($map->type) {
+    case 'Normal':
+      return $op == 'delete' && user_access($perm);
+    case 'Default':
+      return FALSE;
+    case 'Overridden':
+      return $op == 'revert' && user_access($perm);
   }
-  return FALSE;
 }
 
 /**
@@ -615,6 +638,9 @@ function salesforce_api_fieldmap_save(&$map) {
  *   An array containing the fieldmap data.
  */
 function salesforce_api_fieldmap_load($fieldmap) {
+  if (empty($fieldmap)) {
+    return;
+  }
   return salesforce_api_salesforce_field_map_load($fieldmap);
 }
 
@@ -1791,8 +1817,7 @@ function salesforce_api_salesforce_field_map_save(&$map) {
   salesforce_api_fieldmap_save($map);
 }
 
-function salesforce_api_export_salesforce_field_map($fieldmap) {
-  $map = salesforce_api_salesforce_field_map_load($fieldmap);
+function salesforce_api_export_salesforce_field_map($map) {
   drupal_set_title(t('Export Fieldmap'));
   $code = salesforce_api_salesforce_field_map_export($map);
   return drupal_get_form('ctools_export_form', $code, 'Export Fieldmap');
diff --git sf_prematch/sf_prematch.admin.inc sf_prematch/sf_prematch.admin.inc
index 640f1f3..c0def55 100644
--- sf_prematch/sf_prematch.admin.inc
+++ sf_prematch/sf_prematch.admin.inc
@@ -52,10 +52,7 @@ function sf_prematch_list() {
 }
 
 // Displays the form to add prematching to a fieldmap.
-function sf_prematch_edit_form(&$form_state, $fieldmap) {
-  // Load the fieldmap from the database.
-  $map = salesforce_api_fieldmap_load($fieldmap);
-
+function sf_prematch_edit_form(&$form_state, $map) {
   // Return to the admin page if the fieldmap did not exist.
   if (empty($map)) {
     drupal_set_message(t('That fieldmap does not exist.'), 'error');
@@ -69,14 +66,14 @@ function sf_prematch_edit_form(&$form_state, $fieldmap) {
   }
 
   // Load the prematch from the database.
-  $prematch = sf_prematch_match_by_load($fieldmap);
+  $prematch = sf_prematch_match_by_load($map->name);
 
   $form = array();
 
   // Add the index to the form array.
   $form['name'] = array(
     '#type' => 'value',
-    '#value' => $fieldmap,
+    '#value' => $map->name,
   );
 
   // Set flag for use in deciding where to redirect to on form submit.
@@ -164,10 +161,8 @@ function sf_prematch_edit_form_submit($form, &$form_state) {
   $form_state['redirect'] = SALESFORCE_PATH_FIELDMAPS;
 }
 
-function sf_prematch_delete_form(&$form_state, $fieldmap) {
-  // Load the fieldmap and prematch from the database.
-  $map = salesforce_api_fieldmap_load($fieldmap);
-  $match_by = sf_prematch_match_by_load($fieldmap);
+function sf_prematch_delete_form(&$form_state, $map) {
+  $match_by = sf_prematch_match_by_load($map->name);
 
   // Return to the admin page if the fieldmap did not exist.
   if (empty($match_by)) {
@@ -180,7 +175,7 @@ function sf_prematch_delete_form(&$form_state, $fieldmap) {
   // Add the fieldmap to the form array.
   $form['name'] = array(
     '#type' => 'value',
-    '#value' => $fieldmap,
+    '#value' => $map->name,
   );
 
   // Build the description text for this prematch.
diff --git sf_prematch/sf_prematch.module sf_prematch/sf_prematch.module
index 1a19ce0..a0a08fa 100644
--- sf_prematch/sf_prematch.module
+++ sf_prematch/sf_prematch.module
@@ -25,7 +25,7 @@ function sf_prematch_menu() {
     'weight' => 15,
     'file' => 'sf_prematch.admin.inc',
   );
-  $items[SALESFORCE_PATH_FIELDMAPS . '/%/prematching'] = array(
+  $items[SALESFORCE_PATH_FIELDMAPS . '/%salesforce_api_fieldmap/prematching'] = array(
     'title' => 'Prematching',
     'description' => 'Edit an existing fieldmap prematch.',
     'page callback' => 'drupal_get_form',
@@ -36,7 +36,7 @@ function sf_prematch_menu() {
     'weight' => 16,
     'file' => 'sf_prematch.admin.inc',
   );
-  $items[SALESFORCE_PATH_FIELDMAPS . '/%/prematching/delete'] = array(
+  $items[SALESFORCE_PATH_FIELDMAPS . '/%salesforce_api_fieldmap/prematching/delete'] = array(
     'title' => 'Delete prematching from a fieldmap',
     'description' => 'Delete an existing fieldmap prematch.',
     'page callback' => 'drupal_get_form',
