diff --git a/plus1.module b/plus1.module
index d9ee5a9..dce29de 100644
--- a/plus1.module
+++ b/plus1.module
@@ -134,6 +134,10 @@ function plus1_vote($entity_type, $entity_id, $tag = 'plus1_node_vote') {
     return drupal_access_denied();
   }
   $voted = plus1_get_votes($entity_type, $entity_id, $user->uid, $tag);
+  
+  $vote_source = $user->uid ? $user->uid : ip_address();
+  drupal_alter('plus1_source', $vote_source);
+  
   // If the voter has not already voted.
   if (!$voted) {
     $votes[] = array(
@@ -142,7 +146,7 @@ function plus1_vote($entity_type, $entity_id, $tag = 'plus1_node_vote') {
       'value_type' => 'points',
       'value' => 1,
       'tag' => $tag ? $tag : 'plus1_' . $entity_type . '_vote',
-      'vote_source' => $user->uid ? $user->uid : ip_address(),
+      'vote_source' => $vote_source,
     );
     votingapi_set_votes($votes);
     $criteria = array(
@@ -186,6 +190,10 @@ function plus1_undo_vote($entity_type, $entity_id, $tag = 'plus1_node_vote') {
     else {
       $criteria['uid'] = $user->uid;
     }
+    
+    //Allow vote source to be altered by other modules
+    drupal_alter('plus1_source', $criteria['vote_source']);
+    
     if (isset($tag) && $tag != "") {
       $criteria['tag'] = $tag;
     }
@@ -240,6 +248,10 @@ function plus1_get_votes($entity_type, $entity_id, $uid, $tag = 'plus1_node_vote
   if (isset($tag) && $tag != "") {
     $criteria['tag'] = $tag;
   }
+  
+  //Allow vote source to be altered by other modules
+  drupal_alter('plus1_source', $criteria['vote_source']);
+  
   $results = votingapi_select_votes($criteria);
   return count($results);
 }
