Index: src/wp-includes/plugin.php
===================================================================
--- src/wp-includes/plugin.php	(revision 31910)
+++ src/wp-includes/plugin.php	(working copy)
@@ -784,6 +784,9 @@
  * should always check for the 'WP_UNINSTALL_PLUGIN' constant, before
  * executing.
  *
+ * The registration updates wp_options and so should only be called within an 
+ * activation hook. 
+ * 
  * @since 2.7.0
  *
  * @param string   $file     Plugin file.
@@ -801,10 +804,12 @@
 	 * cases. Emphasis should be put on using the 'uninstall.php' way of
 	 * uninstalling the plugin.
 	 */
-	$uninstallable_plugins = (array) get_option('uninstall_plugins');
-	$uninstallable_plugins[plugin_basename($file)] = $callback;
-
-	update_option('uninstall_plugins', $uninstallable_plugins);
+	$uninstallable_plugins = (array) get_option( 'uninstall_plugins' );
+	$key = plugin_basename( $file ); 
+	if ( empty( $uninstallable_plugins[ $key ] ) || $uninstallable_plugins[ $key ] != $callback ) { 
+		$uninstallable_plugins[ $key ] = $callback; 
+		update_option( 'uninstall_plugins', $uninstallable_plugins ); 
+	} 
 }
 
 /**
