diff --git a/commons_follow.info b/commons_follow.info
index b543983..5327ae4 100644
--- a/commons_follow.info
+++ b/commons_follow.info
@@ -9,5 +9,9 @@ features[features_api][] = api:1
 features[field_base][] = field_target_comments
 features[field_base][] = field_target_nodes
 features[field_base][] = field_target_users
+
+; Views handlers
 files[] = includes/views/commons_follow.views.inc
 files[] = includes/views/handlers/commons_follow_handler_filter_follow.inc
+files[] = includes/views/handlers/commons_follow_plugin_argument_default_node.inc
+files[] = includes/views/handlers/commons_follow_user_follow_filter.inc
diff --git a/commons_follow.module b/commons_follow.module
index 444f3bf..8843def 100644
--- a/commons_follow.module
+++ b/commons_follow.module
@@ -1,6 +1,74 @@
 <?php
 
 /**
+ * Get all node IDs relevant to what the user ordered.
+ *
+ * @param $account
+ *   The user being checked. Defaults to the current user.
+ * @param $options
+ *   Array. Includes options to alter the query. Options available are used
+ *   within the hook implementations.
+ *
+ * @return
+ *   Array of node IDs.
+ */
+function commons_follow_get_nids($account = NULL, $options = array()) {
+  if (empty($account)) {
+    global $user;
+    $account = clone $user;
+  }
+
+  $nids = array();
+  // We don't use module_invoke_all() is we want to retain the array keys,
+  // which are the user IDs.
+  foreach (module_implements('commons_follow_get_nids') as $module) {
+    $function = $module . '_commons_follow_get_nids';
+    $result = $function($account, $options);
+    foreach ($result as $nid) {
+      $nids[$nid] = $nid;
+    }
+  }
+
+}
+  return $nids;
+
+
+/**
+ * Get subscriptions flag IDs.
+ *
+ * @param $content_type
+ *   Optional. The type of content for which to load the flags. Usually 'node'.
+ * @param $content_subtype
+ *   Optional. The node type for which to load the flags.
+ * @param $account
+ *   Optional. The user accont to filter available flags. If not set, all
+ *   flags for will this node will be returned.
+ * @param $reset
+ *   Optional. Reset the internal query cache.
+ *
+ * @return $flags
+ *   An array of the structure [fid] = flag_object.
+ *
+ * @see flag_get_flags()
+ */
+function common_follow_get_subscription_flags_ids($content_type = NULL, $content_subtype = NULL, $account = NULL, $reset = FALSE) {
+  if (!module_exists('message_subscribe')) {
+    // Requires message_subscribe module.
+    return;
+  }
+  $flags = message_subscribe_flag_get_flags($content_type, $content_subtype, $account, $reset);
+
+  $flag_ids = array();
+  foreach ($flags as $flag) {
+    $flag_ids[] = $flag->fid;
+  }
+
+  return $flag_ids;
+}
+
+///////////////////
+
+/**
  * Implementation of hook_views_api().
  */
 function commons_follow_views_api() {
@@ -78,8 +146,8 @@ function commons_follow_get_followed_message_ids($account = NULL) {
   foreach ($followed_content as $key => $content) {
     $function = $key . '_commons_follow_get_message_ids';
     if (function_exists($function)) {
-      $function($followed_mids, $followed_content);  
-    }    
+      $function($followed_mids, $followed_content);
+    }
   }
   return $followed_mids;
 }
diff --git a/commons_follow_node/commons_follow_node.module b/commons_follow_node/commons_follow_node.module
index f0967fe..32b28ce 100644
--- a/commons_follow_node/commons_follow_node.module
+++ b/commons_follow_node/commons_follow_node.module
@@ -6,6 +6,50 @@
 
 include_once 'commons_follow_node.features.inc';
 
+
+
+/**
+ * Implements hook_commons_follow_get_nids().
+ */
+function commons_follow_node_commons_follow_get_nids($account, $options) {
+  // Get all flaggings from flags that belong to Message-subscribe, that
+  // reference the node entity-type.
+
+  // Get subscribe flag IDs.
+  $flag_ids = common_follow_get_subscription_flags_ids('node');
+
+  if (empty($flag_ids)) {
+    return array();
+  }
+
+  $query = db_select('flag_content', 'f');
+
+  if (!empty($options['range'])) {
+    $query->range(0, $options['range']);
+  }
+
+  $result = $query
+    ->addTag('node_access')
+    ->condition('fid', $flag_ids, 'IN')
+    ->condition('uid', $account->uid, '=')
+    ->condition('content_type', 'node', '=')
+    ->fields('f',array('content_id'))
+    ->execute()
+    ->fetchAll();
+
+  $nids = array();
+  foreach($result as $row) {
+    $nids[] = (integer) $row->content_id;
+  }
+
+  return $nids;
+}
+
+
+///////////////
+
+
+
 /**
 * Implements hook_commons_follow_get_message_ids().
 */
@@ -41,4 +85,4 @@ function commons_follow_node_commons_follow_get_following_uids(&$following_uids,
   foreach ($result as $this_result) {
     $following_uids[$this_result->uid] = $this_result->uid;
   }
-}
\ No newline at end of file
+}
diff --git a/commons_follow_term/commons_follow_term.module b/commons_follow_term/commons_follow_term.module
index 38ded16..67a4047 100644
--- a/commons_follow_term/commons_follow_term.module
+++ b/commons_follow_term/commons_follow_term.module
@@ -6,12 +6,73 @@
 
 include_once 'commons_follow_term.features.inc';
 
+
+
+/**
+ * Implements hook_commons_follow_get_nids().
+ */
+function commons_follow_term_commons_follow_get_nids($account, $options) {
+  // Get all flaggings from flags that belong to Message-subscribe, that
+  // reference the taxonomy-term entity-type.
+  $flag_ids = common_follow_get_subscription_flags_ids('taxonomy_term');
+
+  if (empty($flag_ids)) {
+    return array();
+  }
+
+  // Get user's flagged terms.
+  $query = db_select('flag_content', 'f');
+  $result = $query
+    ->condition('fid', $flag_ids, 'IN')
+    ->condition('uid', $account->uid, '=')
+    ->condition('content_type', 'taxonomy_term', '=')
+    ->fields('f',array('content_id'))
+    ->execute()
+    ->fetchAll();
+
+  if (empty($result)) {
+    // No term flags.
+    return array();
+  }
+
+  $tids = array();
+  foreach($result as $row) {
+    $tids[] = (integer) $row->content_id;
+  }
+
+  // Get IDs of nodes tagged by the specified terms.
+  $query = db_select('taxonomy_index', 't');
+
+  if (!empty($options['range'])) {
+    $query->range(0, $options['range']);
+  }
+
+  $result = $query
+    ->addTag('node_access')
+    ->condition('tid', $tids, 'IN')
+    ->fields('t',array('nid'))
+    ->groupBy('nid')
+    ->execute()
+    ->fetchAll();
+
+  // Return the node IDs.
+  $nids = array();
+  foreach($result as $row) {
+    $nids[] = (integer) $row->nid;
+  }
+
+  return $nids;
+}
+
+
+//////////
+
 /**
 * Implements hook_node_view_alter().
 */
 function commons_follow_term_node_view_alter(&$build) {
-  // TODO: 
-  // If the user is already subscribed to terms covering this node, 
+  // TODO:
+  // If the user is already subscribed to terms covering this node,
   // deny her the ability to subscribe to the individual node.
 }
 
diff --git a/commons_follow_user/commons_follow_user.module b/commons_follow_user/commons_follow_user.module
index 59b2d79..e9d8e76 100644
--- a/commons_follow_user/commons_follow_user.module
+++ b/commons_follow_user/commons_follow_user.module
@@ -6,6 +6,66 @@
 
 include_once 'commons_follow_user.features.inc';
 
+
+
+/**
+ * Implements hook_commons_follow_get_nids().
+ */
+function commons_follow_user_commons_follow_get_nids($account, $options) {
+  // Get all flaggings from flags that belong to Message-subscribe, that
+  // reference the node entity-type.
+
+  // Get subscribe flag IDs.
+  $flag_ids = common_follow_get_subscription_flags_ids('user');
+
+  if (empty($flag_ids)) {
+    return array();
+  }
+
+  // Get flagged user IDs.
+  $query = db_select('flag_content', 'f');
+  $result = $query
+    ->condition('fid', $flag_ids, 'IN')
+    ->condition('uid', $account->uid, '=')
+    ->condition('content_type', 'user', '=')
+    ->fields('f',array('content_id'))
+    ->execute()
+    ->fetchAll();
+
+  if (empty($result)) {
+    // No user flags.
+    return array();
+  }
+
+  $uids = array();
+  foreach($result as $row) {
+    $uids[] = (integer) $row->content_id;
+  }
+
+  // Get the user's node IDs.
+  $query = new EntityFieldQuery();
+
+  if (!empty($options['range'])) {
+    $query->range(0, $options['range']);
+  }
+
+  $result = $query
+    ->entityCondition('entity_type', 'node')
+    ->propertyCondition('uid', $uids, 'IN')
+    ->execute();
+
+  $nids = array();
+  foreach ($result['node'] as $nid => $row) {
+    $nids[] = $nid;
+  }
+
+  return $nids;
+}
+
+
+///////////////
+
+
 /**
 * Implements hook_system_info_alter().
 */
@@ -67,9 +127,9 @@ function commons_follow_user_commons_follow_get_message_ids(&$followed_mids, $fo
   }
   // Generate a list of message IDs where message.uid OR any of the referenced
   // target users are ones that the current user is following.
-  $result = db_query("SELECT m.mid AS mid 
-    FROM {message} m 
-    LEFT JOIN {field_data_field_target_users} tu ON m.mid=tu.entity_id 
+  $result = db_query("SELECT m.mid AS mid
+    FROM {message} m
+    LEFT JOIN {field_data_field_target_users} tu ON m.mid=tu.entity_id
     WHERE tu.field_target_users_target_id IN(:uids)
     OR m.uid IN (:uids)",
     array(':uids' => array_values($followed_content['commons_follow_user'])));
@@ -92,9 +152,9 @@ function commons_follow_user_commons_follow_get_following_uids(&$following_uids,
       $target_uids[] = $field['target_id'];
     }
   }
-  
+
   $result = db_query("SELECT fc.uid FROM {flag_content} fc WHERE fc.content_type = 'user' AND fc.content_id IN(:target_uids) AND fc.fid IN (:commons_follow_flag_ids)", array(':target_uids' => array_keys($target_uids), ':commons_follow_flag_ids' => array_keys(commons_follow_get_flag_ids())));
   foreach ($result as $this_result) {
     $following_uids[$this_result->uid] = $this_result->uid;
   }
-}
\ No newline at end of file
+}
diff --git a/includes/views/commons_follow.views.inc b/includes/views/commons_follow.views.inc
index 672d7f0..698e0da 100644
--- a/includes/views/commons_follow.views.inc
+++ b/includes/views/commons_follow.views.inc
@@ -12,4 +12,39 @@ function commons_follow_views_data_alter(&$data) {
       'real field' => 'mid',
     ),
   );
-}
\ No newline at end of file
+}
+
+
+
+/**
+ * Implements hook_views_plugins().
+ */
+function commons_follow_views_plugins() {
+  // This handler requires message_subscribe module.
+  return array(
+    'argument default' => array(
+      'commons_follow_node' => array(
+        'title' => t('The node IDs the user is subscribed to'),
+        'handler' => 'commons_follow_plugin_argument_default_node',
+      ),
+    ),
+  );
+}
+
+/**
+ * Implements hook_views_data().
+ */
+function commons_follow_views_data() {
+  $data['node']['cf_user_follow'] = array(
+    'title' => t('User Follow'), // The item it appears as on the UI,
+    'help' => t('Whether the user is following this content.'), // The help that appears on the UI,
+     // Information for displaying a title as a field
+    'filter' => array(
+      'handler' => 'commons_follow_user_follow_filter',
+      'label' => t('Following'),
+      'type' => 'yes-no',
+    ),
+  );
+
+  return $data;
+}
diff --git a/includes/views/handlers/commons_follow_plugin_argument_default_node.inc b/includes/views/handlers/commons_follow_plugin_argument_default_node.inc
new file mode 100644
index 0000000..9f0735a
--- /dev/null
+++ b/includes/views/handlers/commons_follow_plugin_argument_default_node.inc
@@ -0,0 +1,37 @@
+<?php
+
+/**
+ * @file
+ * Holds the class defining the Views plugin that returns the node IDS that a
+ * user has subscribed to.
+ */
+
+class commons_follow_plugin_argument_default_node extends views_plugin_argument_default {
+
+  /**
+   * List the options relevant for this plugin.
+   */
+  function option_definition() {
+    $options = parent::option_definition();
+
+    return $options;
+  }
+
+  /**
+   * Provide the default form for setting options.
+   */
+  function options_form(&$form, &$form_state) {
+
+  }
+
+  /**
+   * Get the default argument.
+   */
+  function get_argument() {
+    if (!$nids = commons_follow_get_nids()) {
+      return FALSE;
+    }
+
+    return implode(',', $nids);
+  }
+}
diff --git a/includes/views/handlers/commons_follow_user_follow_filter.inc b/includes/views/handlers/commons_follow_user_follow_filter.inc
new file mode 100644
index 0000000..933b30a
--- /dev/null
+++ b/includes/views/handlers/commons_follow_user_follow_filter.inc
@@ -0,0 +1,23 @@
+<?php
+
+/**
+ * @file
+ * Definition of views_handler_filter_boolean_operator_string.
+ */
+
+/**
+ * Views filter that toggles between flagged and unflagged content.
+ */
+class commons_follow_user_follow_filter extends views_handler_filter_boolean_operator {
+
+  function query() {
+    foreach ($this->view->argument as $argument_name => $argument) {
+
+      if ($argument->options['default_argument_type'] == 'commons_follow_node') {
+        // The argument that toggles 'following' or 'not following' display.
+        $this->view->argument[$argument_name]->options['not'] = !$this->value;
+        break;
+      }
+    }
+  }
+}
