diff --git a/modules/commons_search_solr/modules/commons_search_solr_user/commons_search_solr_user.exposed_form.js b/modules/commons_search_solr/modules/commons_search_solr_user/commons_search_solr_user.exposed_form.js
index e69de29..2b61d26 100644
--- a/modules/commons_search_solr/modules/commons_search_solr_user/commons_search_solr_user.exposed_form.js
+++ b/modules/commons_search_solr/modules/commons_search_solr_user/commons_search_solr_user.exposed_form.js
@@ -0,0 +1,7 @@
+(function ($) {
+  Drupal.behaviors.commons_search_solr_user_checkbox = {
+    attach: function (context, settings) {
+      $('input[name="flagged"]').attr('checked', true);
+    }
+  };
+})(jQuery);
diff --git a/modules/commons_search_solr/modules/commons_search_solr_user/commons_search_solr_user.features.inc b/modules/commons_search_solr/modules/commons_search_solr_user/commons_search_solr_user.features.inc
index e69de29..9e26edb 100644
--- a/modules/commons_search_solr/modules/commons_search_solr_user/commons_search_solr_user.features.inc
+++ b/modules/commons_search_solr/modules/commons_search_solr_user/commons_search_solr_user.features.inc
@@ -0,0 +1,26 @@
+<?php
+/**
+ * @file
+ * commons_search_solr_user.features.inc
+ */
+
+/**
+ * Implements hook_ctools_plugin_api().
+ */
+function commons_search_solr_user_ctools_plugin_api() {
+  list($module, $api) = func_get_args();
+  if ($module == "apachesolr_search" && $api == "apachesolr_search_defaults") {
+    return array("version" => "3");
+  }
+  list($module, $api) = func_get_args();
+  if ($module == "strongarm" && $api == "strongarm") {
+    return array("version" => "1");
+  }
+}
+
+/**
+ * Implements hook_views_api().
+ */
+function commons_search_solr_user_views_api() {
+  return array("api" => "3.0");
+}
diff --git a/modules/commons_search_solr/modules/commons_search_solr_user/commons_search_solr_user.features.menu_links.inc b/modules/commons_search_solr/modules/commons_search_solr_user/commons_search_solr_user.features.menu_links.inc
index e69de29..4100523 100644
--- a/modules/commons_search_solr/modules/commons_search_solr_user/commons_search_solr_user.features.menu_links.inc
+++ b/modules/commons_search_solr/modules/commons_search_solr_user/commons_search_solr_user.features.menu_links.inc
@@ -0,0 +1,43 @@
+<?php
+/**
+ * @file
+ * commons_search_solr_user.features.menu_links.inc
+ */
+
+/**
+ * Implements hook_menu_default_menu_links().
+ */
+function commons_search_solr_user_menu_default_menu_links() {
+  $menu_links = array();
+
+  $events_weight = db_select('menu_links', 'ml')
+    ->fields('ml', array('weight'))
+    ->condition('menu_name', 'main-menu')
+    ->condition('link_path', 'events')
+    ->execute()
+    ->fetchCol();
+  if (!empty($events_weight)) {
+    $events_weight = (int) $events_weight[0] + 1;
+  }
+
+  // Exported menu link: main-menu:people
+  $menu_links['main-menu:people'] = array(
+    'menu_name' => 'main-menu',
+    'link_path' => 'people',
+    'router_path' => 'people',
+    'link_title' => 'People',
+    'options' => array(),
+    'module' => 'system',
+    'options' => array(),
+    'hidden' => '0',
+    'external' => '0',
+    'has_children' => '0',
+    'expanded' => '0',
+    'weight' => "$events_weight",
+  );
+  // Translatables
+  // Included for use with string extractors like potx.
+  t('People');
+
+  return $menu_links;
+}
diff --git a/modules/commons_search_solr/modules/commons_search_solr_user/commons_search_solr_user.info b/modules/commons_search_solr/modules/commons_search_solr_user/commons_search_solr_user.info
index e69de29..cad6732 100644
--- a/modules/commons_search_solr/modules/commons_search_solr_user/commons_search_solr_user.info
+++ b/modules/commons_search_solr/modules/commons_search_solr_user/commons_search_solr_user.info
@@ -0,0 +1,17 @@
+name = Commons Search Solr User
+description = Provides user entity indexing capabilities to Apache Solr, and search functionality
+core = 7.x
+package = Commons - Search
+project = commons_search_solr_user
+dependencies[] = commons_search_solr
+dependencies[] = apachesolr_user
+dependencies[] = ctools
+dependencies[] = features
+dependencies[] = menu
+dependencies[] = views
+dependencies[] = views_load_more
+
+features[ctools][] = views:views_default:3.0
+features[features_api][] = api:1
+features[menu_links][] = main-menu:people
+features[views_view][] = commons_search_user_list
diff --git a/modules/commons_search_solr/modules/commons_search_solr_user/commons_search_solr_user.install b/modules/commons_search_solr/modules/commons_search_solr_user/commons_search_solr_user.install
index e69de29..bc88f4c 100644
--- a/modules/commons_search_solr/modules/commons_search_solr_user/commons_search_solr_user.install
+++ b/modules/commons_search_solr/modules/commons_search_solr_user/commons_search_solr_user.install
@@ -0,0 +1,92 @@
+<?php
+/**
+ * @file
+ * Commons Search Solr User install script.
+ */
+
+/**
+ * Implements hook_install().
+ */
+function commons_search_solr_user_install() {
+  db_update('system')
+    ->fields(array(
+      'weight' => 150,
+    ))
+    ->condition('name', 'commons_search_solr_user')
+    ->execute();
+}
+
+/**
+ * Implements hook_enable().
+ */
+function commons_search_solr_user_enable() {
+  // We disable core user search in place of Solr user search.
+  $search_active_modules = variable_get('search_active_modules', array('apachesolr' => 'apachesolr'));
+  unset($search_active_modules['user']);
+  variable_set('search_active_modules', $search_active_modules);
+  // We need to tell Solr to index users.
+  db_merge('apachesolr_index_bundles')
+    ->key(array(
+      'env_id' => apachesolr_default_environment(),
+      'entity_type' => 'user',
+      'bundle' => 'user',
+    ))
+    ->fields(array(
+      'env_id' => apachesolr_default_environment(),
+      'entity_type' => 'user',
+      'bundle' => 'user',
+    ))
+    ->execute();
+  // Make sure the user search page was created so we can modify it.
+  drupal_static_reset('apachesolr_search_load_all_search_pages');
+  // We need to modify the provided Solr search page for users to fit our needs.
+  $user_search_page = apachesolr_search_page_load('user_search');
+  if (empty($user_search_page)) {
+    // Couldn't find the user results page, so we create one.
+    $user_search_page = array(
+      'page_id' => 'user_search',
+      'label' => 'User Search',
+      'description' => 'User Search',
+      'search_path' => 'people',
+      'env_id' => 'solr',
+      'page_title' => t('People'),
+      'settings' => array(
+        'fq' => array('entity_type:user'),
+        'apachesolr_search_custom_enable' => TRUE,
+        'apachesolr_search_search_type' => 'custom',
+        'apachesolr_search_per_page' => 12,
+        'apachesolr_search_browse' => 'results',
+        'apachesolr_search_spellcheck' => FALSE,
+        'apachesolr_search_search_box' => FALSE,
+      ),
+    );
+  }
+  if ($user_search_page !== FALSE) {
+    $user_search_page['search_path'] = 'people';
+    $user_search_page['page_title'] = t('People');
+    $user_search_page['settings']['apachesolr_search_per_page'] = 12;
+    $user_search_page['settings']['apachesolr_search_search_box'] = FALSE;
+    $user_search_page['settings']['apachesolr_search_browse'] = 'results';
+    $user_search_page['settings']['apachesolr_search_spellcheck'] = FALSE;
+    apachesolr_search_page_save($user_search_page);
+  }
+  cache_clear_all('*', 'cache_menu', TRUE);
+  cache_clear_all('*', 'cache_apachesolr', TRUE);
+  variable_set('menu_rebuild_needed', TRUE);
+  menu_rebuild();
+  $revert = array(
+    'commons_search_solr_user' => array('menu_links'),
+  );
+  features_revert($revert);
+}
+
+/**
+ * Implements hook_disable().
+ */
+function commons_search_solr_user_disable() {
+  // We re-enable core user search upon disabling this module.
+  $search_active_modules = variable_get('search_active_modules', array('apachesolr' => 'apachesolr'));
+  $search_active_modules['user'] = 'user';
+  $search_active_modules = array_unique($search_active_modules);
+  variable_set('search_active_modules', $search_active_modules);
+}
diff --git a/modules/commons_search_solr/modules/commons_search_solr_user/commons_search_solr_user.module b/modules/commons_search_solr/modules/commons_search_solr_user/commons_search_solr_user.module
index e69de29..4677834 100644
--- a/modules/commons_search_solr/modules/commons_search_solr_user/commons_search_solr_user.module
+++ b/modules/commons_search_solr/modules/commons_search_solr_user/commons_search_solr_user.module
@@ -0,0 +1,188 @@
+<?php
+/**
+ * @file
+ * Code for the Commons Search Solr User feature.
+ */
+
+include_once 'commons_search_solr_user.features.inc';
+
+/**
+ * Implements hook_theme().
+ */
+function commons_search_solr_user_theme($existing, $type, $theme, $path) {
+  return array(
+    'commons_search_solr_user_grid' => array(
+      'variables' => array(
+        'size' => 4,
+        'results' => array(),
+        'flagged' => FALSE,
+      ),
+    ),
+  );
+}
+
+/**
+ * Implements hook_preprocess_hook().
+ */
+function commons_search_solr_user_process_search_results(&$variables) {
+  if ($variables['search_page']['page_id'] == 'user_search') {
+    // We set the title to be blank so it doesn't disply 'Search results'.
+    $variables['title'] = ' ';
+    $users = $variables['results'];
+    $user_ids = array();
+    foreach ($users as $user) {
+      if ($user['fields']['entity_type'] == 'user') {
+        $user_ids[] = $user['fields']['entity_id'];
+      }
+    }
+    $flagged = TRUE;
+    if (empty($_GET['flagged'])) {
+      $flagged = FALSE;
+    }
+    $variables['search_results'] = theme('commons_search_solr_user_grid', array('results' => $user_ids, 'flagged' => $flagged));
+  }
+}
+
+/**
+ * Implements hook_apachesolr_search_page_alter().
+ */
+function commons_search_solr_user_apachesolr_search_page_alter(&$build, $search_page) {
+  if ($search_page['page_id'] == 'user_search'
+    && isset($build['search_results']['#markup'])) {
+    // If the #markup item is set, it usually means we have no Solr results.
+    // So lets just fetch all users that are active, and display those.
+    $users = new EntityFieldQuery();
+    $results = $users->entityCondition('entity_type', 'user')
+      ->propertyCondition('status', 1)
+      ->execute();
+    $user_ids = array_keys($results['user']);
+    $flagged = TRUE;
+    if (empty($_GET['flagged'])) {
+      $flagged = FALSE;
+    }
+    $build['search_results']['#markup'] = theme('commons_search_solr_user_grid', array('results' => $user_ids, 'flagged' => $flagged));
+  }
+}
+
+/**
+ * Implements hook_entity_info_alter().
+ */
+function commons_search_solr_user_entity_info_alter(&$entity_info) {
+  // Create a search results display mode for user entities.
+  $entity_info['user']['view modes']['search_results'] = array(
+    'label' => t('Search results'),
+    'custom settings' => TRUE,
+  );
+}
+
+/**
+ * Implements hook_form_FORM_ID_alter().
+ */
+function commons_search_solr_user_form_alter(&$form, &$form_state, $form_id) {
+  if ($form_id == 'search_block_form') {
+    unset($form['custom_search_types']['#options']['c-user']);
+    $form['custom_search_types']['#options']['s-user'] = t('Users');
+    $submits = (array) $form['#submit'];
+    $form['#submit'] = array('commons_search_solr_user_search_submit') + $submits;
+  }
+}
+
+function commons_search_solr_user_form_apachesolr_search_custom_page_search_form_alter(&$form, &$form_state) {
+  if ($form['#search_page']['page_id'] == 'user_search') {
+    $form['#attributes']['class'][] = 'user-search-form';
+    $form['basic']['flagged'] = array(
+      '#type' => 'checkbox',
+      '#title' => t('Following'),
+      '#default_value' => (empty($_GET['flagged']) ? FALSE : TRUE),
+    );
+    $form['basic']['retain-filters']['#type'] = 'hidden';
+    $form['basic']['retain-filters']['#value'] = 0;
+    $form['basic']['keys']['#title'] = t('Limit to');
+    $form['basic']['submit']['#value'] = t('Apply');
+    $form['basic']['submit']['#weight'] = 10;
+    $form['#submit'][] = 'commons_search_solr_user_user_search_submit';
+  }
+}
+
+function commons_search_solr_user_user_search_submit($form, &$form_state) {
+  $form_state['redirect']['1']['query']['flagged'] = $form_state['values']['flagged'];
+}
+
+/**
+ * Submit handler that handles only the redirection to our Solr user directory.
+ */
+function commons_search_solr_user_search_submit($form, &$form_state) {
+  if ($form_state['values']['custom_search_types'] == 's-user') {
+    $user_search_page = apachesolr_search_page_load('user_search');
+    $keys = '/' . check_plain($form_state['values']['search_block_form']);
+    $form_state['redirect'] = $user_search_page['search_path'] . $keys;
+    drupal_goto($form_state['redirect']);
+  }
+}
+
+/**
+ * Implements hook_module_implements_alter().
+ */
+function commons_search_solr_user_module_implements_alter(&$modules, $hook) {
+  switch ($hook) {
+    case 'form_alter':
+      // Move this module to be last for form alterations.
+      $module = $modules['commons_search_solr_user'];
+      unset($modules['commons_search_solr_user']);
+      $modules['commons_search_solr_user'] = $module;
+      break;
+  }
+}
+
+/**
+ * Theme callback to output results in a grid.
+ */
+function theme_commons_search_solr_user_grid($variables) {
+  $size = (isset($variables['size']) ? $variables['size'] : 4);
+  $results = $variables['results'];
+  $i = 0;
+  $row_i = 0;
+  $rows = array();
+  $flagged = $variables['flagged'];
+  $out_results = array();
+  foreach ($results as $result) {
+    if (!is_integer($result)) {
+      continue;
+    }
+    $view = views_get_view('commons_search_user_view');
+    $view->display['default']->display_options['relationships']['flag_content_rel']['required'] = $flagged;
+    $view->set_arguments(array($result));
+    $view->execute();
+    // If the view has no results, we won't display it at all.
+    if (!empty($view->result)) {
+      $out_results[] = $view->preview();
+    }
+  }
+  // Loop through all the results to be displayed, and add them to our grid.
+  foreach ($out_results as $result) {
+    $rows[$row_i][$i] = $result;
+    $i++;
+    if ($i == $size) {
+      $i = 0;
+      $row_i++;
+    }
+  }
+  // Fill in any blank cells on the last row for styling fixes.
+  if (count($rows[$row_i]) < $size) {
+    $left = $size - count($rows[$row_i]);
+    for ($j = 0; $j < $left; $j++) {
+      $rows[$row_i][] = '';
+    }
+  }
+  return theme('table', array('rows' => $rows));
+}
+
+function commons_search_solr_user_views_post_execute(&$view) {
+  if ($view->name == 'commons_search_user_view' && !empty($view->result)) {
+    $flag = flag_get_flag('commons_follow_user');
+    if ($flag->access($view->args[0])) {
+      $action = ($flag->is_flagged($view->args[0]) ? 'unflag' : 'flag');
+      $view->attachment_after = $flag->theme($action, $view->args[0]);
+    }
+  }
+}
diff --git a/modules/commons_search_solr/modules/commons_search_solr_user/commons_search_solr_user.views_default.inc b/modules/commons_search_solr/modules/commons_search_solr_user/commons_search_solr_user.views_default.inc
index e69de29..4ef45c5 100644
--- a/modules/commons_search_solr/modules/commons_search_solr_user/commons_search_solr_user.views_default.inc
+++ b/modules/commons_search_solr/modules/commons_search_solr_user/commons_search_solr_user.views_default.inc
@@ -0,0 +1,89 @@
+<?php
+/**
+ * @file
+ * commons_search_solr_user.views_default.inc
+ */
+
+/**
+ * Implements hook_views_default_views().
+ */
+
+function commons_search_solr_user_views_default_views() {
+  $views = array();
+
+  $view = new view();
+  $view->name = 'commons_search_user_view';
+  $view->description = '';
+  $view->tag = 'default';
+  $view->base_table = 'users';
+  $view->human_name = 'Commons Search - User View';
+  $view->core = 7;
+  $view->api_version = '3.0';
+  $view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */
+
+  /* Display: Master */
+  $handler = $view->new_display('default', 'Master', 'default');
+  $handler->display->display_options['use_more_always'] = FALSE;
+  $handler->display->display_options['access']['type'] = 'perm';
+  $handler->display->display_options['access']['perm'] = 'access user profiles';
+  $handler->display->display_options['cache']['type'] = 'none';
+  $handler->display->display_options['query']['type'] = 'views_query';
+  $handler->display->display_options['exposed_form']['type'] = 'basic';
+  $handler->display->display_options['pager']['type'] = 'some';
+  $handler->display->display_options['pager']['options']['items_per_page'] = '1';
+  $handler->display->display_options['pager']['options']['offset'] = '0';
+  $handler->display->display_options['style_plugin'] = 'default';
+  $handler->display->display_options['row_plugin'] = 'fields';
+  $handler->display->display_options['row_options']['inline'] = array(
+    'picture' => 'picture',
+    'name' => 'name',
+  );
+  /* Relationship: Flags: commons_follow_user */
+  $handler->display->display_options['relationships']['flag_content_rel']['id'] = 'flag_content_rel';
+  $handler->display->display_options['relationships']['flag_content_rel']['table'] = 'users';
+  $handler->display->display_options['relationships']['flag_content_rel']['field'] = 'flag_content_rel';
+  $handler->display->display_options['relationships']['flag_content_rel']['required'] = 0;
+  $handler->display->display_options['relationships']['flag_content_rel']['flag'] = 'commons_follow_user';
+  /* Field: User: Picture */
+  $handler->display->display_options['fields']['picture']['id'] = 'picture';
+  $handler->display->display_options['fields']['picture']['table'] = 'users';
+  $handler->display->display_options['fields']['picture']['field'] = 'picture';
+  $handler->display->display_options['fields']['picture']['label'] = '';
+  $handler->display->display_options['fields']['picture']['element_label_colon'] = FALSE;
+  $handler->display->display_options['fields']['picture']['image_style'] = '50x50';
+  /* Field: User: Name */
+  $handler->display->display_options['fields']['name']['id'] = 'name';
+  $handler->display->display_options['fields']['name']['table'] = 'users';
+  $handler->display->display_options['fields']['name']['field'] = 'name';
+  $handler->display->display_options['fields']['name']['label'] = '';
+  $handler->display->display_options['fields']['name']['alter']['word_boundary'] = FALSE;
+  $handler->display->display_options['fields']['name']['alter']['ellipsis'] = FALSE;
+  /* Field: Global: View */
+  $handler->display->display_options['fields']['view']['id'] = 'view';
+  $handler->display->display_options['fields']['view']['table'] = 'views';
+  $handler->display->display_options['fields']['view']['field'] = 'view';
+  $handler->display->display_options['fields']['view']['label'] = 'Recently contributed to';
+  $handler->display->display_options['fields']['view']['element_label_colon'] = FALSE;
+  $handler->display->display_options['fields']['view']['view'] = 'commons_groups_user_groups';
+  $handler->display->display_options['fields']['view']['display'] = 'panel_pane_1';
+  $handler->display->display_options['fields']['view']['arguments'] = '!1';
+  /* Contextual filter: User: Uid */
+  $handler->display->display_options['arguments']['uid']['id'] = 'uid';
+  $handler->display->display_options['arguments']['uid']['table'] = 'users';
+  $handler->display->display_options['arguments']['uid']['field'] = 'uid';
+  $handler->display->display_options['arguments']['uid']['default_action'] = 'not found';
+  $handler->display->display_options['arguments']['uid']['default_argument_type'] = 'fixed';
+  $handler->display->display_options['arguments']['uid']['summary']['number_of_records'] = '0';
+  $handler->display->display_options['arguments']['uid']['summary']['format'] = 'default_summary';
+  $handler->display->display_options['arguments']['uid']['summary_options']['items_per_page'] = '25';
+  /* Filter criterion: User: Active */
+  $handler->display->display_options['filters']['status']['id'] = 'status';
+  $handler->display->display_options['filters']['status']['table'] = 'users';
+  $handler->display->display_options['filters']['status']['field'] = 'status';
+  $handler->display->display_options['filters']['status']['value'] = '1';
+  $handler->display->display_options['filters']['status']['group'] = 1;
+  $handler->display->display_options['filters']['status']['expose']['operator'] = FALSE;
+  $views['commons_search_user_view'] = $view;
+
+  return $views;
+}
