Index: feedapi_mapper.admin.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/feedapi_mapper/Attic/feedapi_mapper.admin.inc,v
retrieving revision 1.1.2.7
diff -u -p -r1.1.2.7 feedapi_mapper.admin.inc
--- feedapi_mapper.admin.inc	17 Aug 2009 10:02:38 -0000	1.1.2.7
+++ feedapi_mapper.admin.inc	17 Aug 2009 11:48:40 -0000
@@ -31,11 +31,11 @@ function theme_feedapi_mapper_form($form
   $type_url_str = str_replace('_', '-', $form['#node']->type);
   if (isset($form['#node']->nid)) {
     $delete_path = 'node/' . $form['#node']->nid .'/map/delete/';
-    $toggle_unique_path = 'node/' . $form['#node']->nid .'/map/unique/';
+    $toggle_unique_path = 'feedapi-mapper/' . $form['#node']->nid .'/unique/';
   }
   else {
     $delete_path = 'admin/content/node-type/'. $type_url_str .'/map/delete/';
-    $toggle_unique_path = 'admin/content/node-type/'. $type_url_str .'/map/unique/';
+    $toggle_unique_path = 'feedapi-mapper/'. $type_url_str .'/unique/';
   }
   if (isset($form['#mapping']['mapping'])) {
     $feed_settings = feedapi_get_settings($form['#node']->type, $form['#node']->vid);
@@ -156,19 +156,23 @@ function feedapi_mapper_toggle_unique($p
     drupal_set_message(t('Invalid request'), 'error');
     drupal_goto('');
   }
-  if (is_string($param)) {
+  if (!is_numeric($param)) {
     $node = new stdClass();
     $node->type = str_replace('-', '_', $param);
     $path = 'admin/content/node-type/'. $param .'/map';
   }
+  elseif (!_feedapi_mapper_is_overridden($param)) {
+    $node = node_load($param);
+    $path = "node/{$param}/map";
+    $param = $node->type;
+  }
   else {
-    $node = $param;
+    $node = node_load($param);
     $path = "node/{$node->nid}/map";
     $param = $node->nid;
   }
   $mapping = feedapi_mapper_override_mapping($node);
-  feedapi_mapper_delete_mapping($param, $key);
-  feedapi_mapper_add_mapping($param, $key, $mapping['mapping'][$key], !$mapping['unique'][$key]);
+  feedapi_mapper_save_unique($param, $key, !$mapping['unique'][$key]);
   drupal_goto($path);
 }
 
Index: feedapi_mapper.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/feedapi_mapper/feedapi_mapper.module,v
retrieving revision 1.2.2.20
diff -u -p -r1.2.2.20 feedapi_mapper.module
--- feedapi_mapper.module	17 Aug 2009 10:02:38 -0000	1.2.2.20
+++ feedapi_mapper.module	17 Aug 2009 11:48:40 -0000
@@ -18,6 +18,13 @@ function feedapi_mapper_help($path, $arg
  */
 function feedapi_mapper_menu() {
   $items = array();
+  $items['feedapi-mapper/%/unique/%/%'] = array(
+    'page callback' => 'feedapi_mapper_toggle_unique',
+    'page arguments' => array(1, 3, 4),
+    'access callback' => 'feedapi_mapper_access_mapper',
+    'access arguments' => array(1),
+    'file' => 'feedapi_mapper.admin.inc',
+  );
   $items['node/%node/map'] = array(
     'title' => 'Map',
     'page callback' => 'feedapi_mapper_page',
@@ -55,13 +62,6 @@ function feedapi_mapper_menu() {
     'access arguments' => array(1),
     'file' => 'feedapi_mapper.admin.inc',
   );
-  $items['node/%node/map/unique/%/%'] = array(
-    'page callback' => 'feedapi_mapper_toggle_unique',
-    'page arguments' => array(1, 4, 5),
-    'access callback' => 'feedapi_mapper_access_mapper',
-    'access arguments' => array(1),
-    'file' => 'feedapi_mapper.admin.inc',
-  );
   $items['node/%node/map/default'] = array(
     'title' => 'Default',
     'page callback' => 'drupal_get_form',
@@ -130,14 +130,6 @@ function feedapi_mapper_menu() {
       'access arguments' => array(3),
       'file' => 'feedapi_mapper.admin.inc',
     );
-    $items['admin/content/node-type/'. $type_url_str .'/map/unique/%/%'] = array(
-      'page callback' => 'feedapi_mapper_unique_toggle',
-      'page arguments' => array(3, 6, 7),
-      'load arguments' => array(3),
-      'access callback' => 'feedapi_mapper_access_mapper',
-      'access arguments' => array(3),
-      'file' => 'feedapi_mapper.admin.inc',
-    );
   }
   return $items;
 }
@@ -170,6 +162,9 @@ function feedapi_mapper_theme() {
  */
 function feedapi_mapper_access_mapper($node) {
   if (user_access('administer feedapi')) {
+    if (is_numeric($node)) {
+      $node = node_load($node);
+    }
     if (is_string($node)) {
       // String comes from directly from path, substitute - with _.
       $node_type = str_replace('-', '_', $node);
@@ -294,7 +289,25 @@ function feedapi_mapper_get_uniques($fee
   return $uniques;
 }
 
-
+/**
+ * Sets the unique bit of the given $key at $param
+ *
+ * @param $param
+ *   Either a node id or a node type.
+ * @param $source
+ *   A serialized string mapping to the source feed element.
+ * @param $unique
+ *   TRUE or FALSE
+ *
+ */
+function feedapi_mapper_save_unique($param, $source, $unique) {
+  $node = new stdClass();
+  $field = is_numeric($param) ? 'nid' : 'type';
+  $node->{$field} = $param;
+  $mapping = feedapi_mapper_override_mapping($node);
+  $mapping['unique_elements'][$source] = $unique;
+  feedapi_mapper_save_mapping($param, $mapping);
+}
 
 /**
  * Returns feed item element on given path.
