Index: favorite_nodes.module
===================================================================
--- favorite_nodes.module	(revision 20)
+++ favorite_nodes.module	(working copy)
@@ -12,6 +12,7 @@
 define('FAVORITE_NODES_PROFILE_LIMIT',   'favorite_nodes_profile_limit');
 define('FAVORITE_NODES_PAGE_TYPE',       'favorite_nodes_page_type');
 define('FAVORITE_NODES_MENUS',           'favorite_nodes_menu');
+define('FAVORITE_NODES_ADD_OWN_NODES',   'favorite_nodes_add_own_nodes');
 
 /**
  * Implementation of hook_help().
@@ -262,11 +263,10 @@
  * Implementation of hook_links().
  */
 function favorite_nodes_link($type, $node = null, $teaser = false) {
-  global $user;
   $links = array();
   if ($type == 'node' && !$teaser) {
     if (variable_get(FAVORITE_NODES_NODE_TYPE . $node->type, 0)) {
-      if (user_access(FAVORITE_NODES_PERM_ADD)) {
+      if (_favorite_nodes_can_add($node)) {
         if (!_favorite_nodes_check($node->nid)) {
           $links[] = array('title' => t('add to favorites'), 'href' => 'favorite_nodes/add/'. $node->nid);
         }
@@ -283,6 +283,21 @@
 }
 
 /**
+ * Test if a node can be favorited
+ */
+function _favorite_nodes_can_add($node) {
+  global $user;
+
+  if (!user_access(FAVORITE_NODES_PERM_ADD))
+    return false;
+  
+  if ($user->uid != $node->uid)
+    return true;
+  
+  return (bool)variable_get(FAVORITE_NODES_ADD_OWN_NODES, 1);
+}
+
+/**
  * Settings page for this module.
  */
 function favorite_nodes_settings() {
@@ -340,6 +355,14 @@
     );
   }
 
+  $form[FAVORITE_NODES_ADD_OWN_NODES] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Users may favorite their own nodes'),
+    '#return_value' => 1,
+    '#default_value' => variable_get(FAVORITE_NODES_ADD_OWN_NODES, 1),
+    '#description' => t('May users add their own nodes as favorite ones?'),
+  );
+
   return system_settings_form($form);
 }
 
