diff --git a/profiles/wcm_base/CHANGELOG.txt b/profiles/wcm_base/CHANGELOG.txt
index ac437ddebfe9384031af2cb93f389f783ac2bd57..9bc5a609c6d88307ec479549c86806b08709fadc 100644
--- a/profiles/wcm_base/CHANGELOG.txt
+++ b/profiles/wcm_base/CHANGELOG.txt
@@ -1,3 +1,10 @@
+WCM Base 7.x-1.x, 2015-10-08
+----------------------------
+- WCM Base Profile: Added Better Exposed Filters module.
+- OCIO SimpleSAMLphp Auth: Fixed bug that allowed users to change their own auth type.
+- OCIO WYSIWYG, OCIO Field Bases: LinkIt now inserts link to file instead of entity page.
+- OCIO Omega Base: Improved styling of user pages and leadership and contact views.
+
 WCM Base 7.x-1.x, 2015-10-07
 ----------------------------
 - WCM Base Profile: Added Private and Private files download permission modules.
diff --git a/profiles/wcm_base/build-wcm_base-dev.make b/profiles/wcm_base/build-wcm_base-dev.make
index 272439c5c146eb881878b7c919c916794240433e..02d6b7a1ebddbd2c7890bfe9b1a3975cd37b9ade 100644
--- a/profiles/wcm_base/build-wcm_base-dev.make
+++ b/profiles/wcm_base/build-wcm_base-dev.make
@@ -10,7 +10,6 @@ includes[wcm_base] = wcm_base.make
 ;custom
 projects[ocio_accessibility][options][working-copy] = TRUE
 projects[ocio_admin_menu][options][working-copy] = TRUE
-projects[ocio_aggregator][options][working-copy] = TRUE
 projects[ocio_basic_page][options][working-copy] = TRUE
 projects[ocio_book][options][working-copy] = TRUE
 projects[ocio_buckeye_alert][options][working-copy] = TRUE
diff --git a/profiles/wcm_base/modules/contrib/better_exposed_filters/LICENSE.txt b/profiles/wcm_base/modules/contrib/better_exposed_filters/LICENSE.txt
new file mode 100644
index 0000000000000000000000000000000000000000..d159169d1050894d3ea3b98e1c965c4058208fe1
--- /dev/null
+++ b/profiles/wcm_base/modules/contrib/better_exposed_filters/LICENSE.txt
@@ -0,0 +1,339 @@
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+                            NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
diff --git a/profiles/wcm_base/modules/contrib/better_exposed_filters/PATCHES.txt b/profiles/wcm_base/modules/contrib/better_exposed_filters/PATCHES.txt
new file mode 100644
index 0000000000000000000000000000000000000000..c74d33744677f6fdd7e55d99c00d2d30b3a97934
--- /dev/null
+++ b/profiles/wcm_base/modules/contrib/better_exposed_filters/PATCHES.txt
@@ -0,0 +1,4 @@
+The following patches have been applied to this project:
+- http://drupal.org/files/issues/bef-placeholder_support-2560321-2.patch
+
+This file was automatically generated by Drush Make (http://drupal.org/project/drush).
\ No newline at end of file
diff --git a/profiles/wcm_base/modules/contrib/better_exposed_filters/README.txt b/profiles/wcm_base/modules/contrib/better_exposed_filters/README.txt
new file mode 100644
index 0000000000000000000000000000000000000000..0fd4c13f81fd998e11ee5a8a8c6734a8bd56e2a2
--- /dev/null
+++ b/profiles/wcm_base/modules/contrib/better_exposed_filters/README.txt
@@ -0,0 +1,41 @@
+
+-- SUMMARY --
+
+The Better Exposed Filters module replaces the Views' default single-
+or multi-select boxes with radio buttons or checkboxes, respectively.
+
+Views Filters are a powerful tool to limit the results of a given view.
+When you expose a filter, you allow the user to interact with the view
+making it easy to build a customized advanced search.  For example,
+exposing a taxonomy filter lets your site visitor search for articles
+with specific tags.  Better Exposed Filters gives you greater control
+over the rendering of exposed filters.
+
+For a full description of the module, visit the project page:
+  https://drupal.org/project/better_exposed_filters
+
+To submit bug reports and feature suggestions, or to track changes:
+  https://drupal.org/project/issues/better_exposed_filters
+
+For more information on Views filters, see the Advanced Help documentation
+that comes with Views or visit the online version:
+  https://api.drupal.org/api/views/7
+
+
+-- REQUIREMENTS --
+
+This module requires the Views module:
+  https://drupal.org/project/views
+
+
+-- DOCUMENTATION --
+
+See:
+  https://drupal.org/node/766974
+
+
+-- CONTACT --
+
+The maintainer for this project is Mike Keran, known on drupal.org as mikeker
+(https://drupal.org/user/192273). He can be contacted for work on this module or
+other custom projects.
diff --git a/profiles/wcm_base/modules/contrib/better_exposed_filters/better_exposed_filters.api.php b/profiles/wcm_base/modules/contrib/better_exposed_filters/better_exposed_filters.api.php
new file mode 100644
index 0000000000000000000000000000000000000000..c7296d7166def3fd213ced9399bec0dca099d2a8
--- /dev/null
+++ b/profiles/wcm_base/modules/contrib/better_exposed_filters/better_exposed_filters.api.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * @file
+ * Hooks provided by the Better Expoosed Filters module.
+ */
+
+/**
+ * Alters Better Exposed Filters settings before the exposed form widgets are
+ * built.
+ *
+ * @param $settings
+ *   The settings array.
+ * @param $context
+ *   The view and display to which the settings apply.
+ */
+function hook_better_exposed_filters_settings_alter(&$settings, $context) {
+  // Set the min/max value of a slider.
+  $settings['field_price_value']['slider_options']['bef_slider_min'] = 500;
+  $settings['field_price_value']['slider_options']['bef_slider_max'] = 5000;
+}
diff --git a/profiles/wcm_base/modules/contrib/better_exposed_filters/better_exposed_filters.css b/profiles/wcm_base/modules/contrib/better_exposed_filters/better_exposed_filters.css
new file mode 100644
index 0000000000000000000000000000000000000000..4d498038bcf5905207d6a98dc9a9d9101ba22740
--- /dev/null
+++ b/profiles/wcm_base/modules/contrib/better_exposed_filters/better_exposed_filters.css
@@ -0,0 +1,25 @@
+/**
+ * @file better_exposed_filters.css
+ * 
+ * Basic styling for features added by Better Exposed Filters
+ */
+
+
+/*
+ * Prevents collapsed filters from disappearing completely
+ */
+fieldset.bef-select-as-radios-fieldset.collapsed legend,
+fieldset.bef-select-as-checkboxes-fieldset.collapsed legend
+{
+  position: relative;
+}
+
+/*
+ * Styles for the jQuery UI slider widgets.
+ */
+.bef-slider.ui-slider-horizontal {
+  margin-top: 6px;
+}
+.bef-slider.ui-slider-vertical {
+  margin-top: 12px;
+}
diff --git a/profiles/wcm_base/modules/contrib/better_exposed_filters/better_exposed_filters.info b/profiles/wcm_base/modules/contrib/better_exposed_filters/better_exposed_filters.info
new file mode 100644
index 0000000000000000000000000000000000000000..629b59ef1135ddb55379d08266e8ca6aa283476e
--- /dev/null
+++ b/profiles/wcm_base/modules/contrib/better_exposed_filters/better_exposed_filters.info
@@ -0,0 +1,15 @@
+; $Id
+name = Better Exposed Filters
+description = Allow the use of checkboxes or radio buttons for exposed Views filters
+core = 7.x
+package = Views
+dependencies[] = views
+files[] = better_exposed_filters_exposed_form_plugin.inc
+files[] = tests/better_exposed_filters.test
+
+; Information added by Drupal.org packaging script on 2015-08-16
+version = "7.x-3.2+36-dev"
+core = "7.x"
+project = "better_exposed_filters"
+datestamp = "1439736843"
+
diff --git a/profiles/wcm_base/modules/contrib/better_exposed_filters/better_exposed_filters.install b/profiles/wcm_base/modules/contrib/better_exposed_filters/better_exposed_filters.install
new file mode 100644
index 0000000000000000000000000000000000000000..66222c64134af7fd9d02ef91d3b9de026ff6c857
--- /dev/null
+++ b/profiles/wcm_base/modules/contrib/better_exposed_filters/better_exposed_filters.install
@@ -0,0 +1,46 @@
+<?php
+/**
+ * @file
+ * Install/Uninstall code for the Better Exposed Filters module.
+ */
+
+/**
+ * Implements hook_disable.
+ */
+function better_exposed_filters_disable() {
+  // Check any views have their exposed form plugin set to BEF. If so, offer
+  // a warning about disabling the module.
+  $warnings = array();
+  foreach (views_get_all_views() as $view) {
+    foreach ($view->display as $display) {
+      if (!empty($display->display_options['exposed_form']['type']) && 'better_exposed_filters' == $display->display_options['exposed_form']['type']) {
+        $warnings[] = t('The %display_title display in the %view_name view. (<a href="@link" target="_blank">Update this display</a>)',
+          array(
+            '%display_title' => $display->display_title,
+            '%view_name' => $view->human_name,
+            '@link' => url('admin/structure/views/view/' . $view->name . '/edit/' . $display->id),
+          )
+        );
+      }
+    }
+  }
+
+  if (!empty($warnings)) {
+    $message = t('The following Views displays are using the Better Exposed Filters plugin, which is no longer enabled. It is recommended that you update these displays (links open in a new window) before removing the code associated with this module. Not doing so may cause unexpected results.');
+    $message .= '<ul><li>' . join('</li></li>', $warnings) . '</li></ul>';
+    drupal_set_message($message, 'warning');
+  }
+}
+
+/*
+ * Implementations of hook_update_N.
+ *
+ * Comments above each function appear in the update database message.
+ */
+/**
+ * Rebuild the theme registry to discover new theme_bef_checkbox() function.
+ */
+function better_exposed_filters_update_7000() {
+  drupal_theme_rebuild();
+  return t('Theme registry has been rebuilt.');
+}
diff --git a/profiles/wcm_base/modules/contrib/better_exposed_filters/better_exposed_filters.js b/profiles/wcm_base/modules/contrib/better_exposed_filters/better_exposed_filters.js
new file mode 100644
index 0000000000000000000000000000000000000000..45fd12a8ff95ba5a555cc7e2452f2f6193bbebdf
--- /dev/null
+++ b/profiles/wcm_base/modules/contrib/better_exposed_filters/better_exposed_filters.js
@@ -0,0 +1,440 @@
+/**
+ * @file better_exposed_filters.js
+ *
+ * Provides some client-side functionality for the Better Exposed Filters module
+ */
+(function ($) {
+  Drupal.behaviors.betterExposedFilters = {
+    attach: function(context) {
+      // Add highlight class to checked checkboxes for better theming
+      $('.bef-tree input[type=checkbox], .bef-checkboxes input[type=checkbox]')
+        // Highlight newly selected checkboxes
+        .change(function() {
+          _bef_highlight(this, context);
+        })
+        .filter(':checked').closest('.form-item', context).addClass('highlight')
+      ;
+    }
+  };
+
+  Drupal.behaviors.betterExposedFiltersSelectAllNone = {
+    attach: function(context) {
+
+      /*
+       * Add Select all/none links to specified checkboxes
+       */
+      var selected = $('.form-checkboxes.bef-select-all-none:not(.bef-processed)');
+      if (selected.length) {
+        var selAll = Drupal.t('Select All');
+        var selNone = Drupal.t('Select None');
+
+        // Set up a prototype link and event handlers
+        var link = $('<a class="bef-toggle" href="#">'+ selAll +'</a>')
+        link.click(function(event) {
+          // Don't actually follow the link...
+          event.preventDefault();
+          event.stopPropagation();
+
+          if (selAll == $(this).text()) {
+            // Select all the checkboxes
+            $(this)
+              .html(selNone)
+              .siblings('.bef-checkboxes, .bef-tree')
+                .find('.form-item input:checkbox').each(function() {
+                  $(this).attr('checked', true);
+                  _bef_highlight(this, context);
+                })
+              .end()
+
+              // attr() doesn't trigger a change event, so we do it ourselves. But just on
+              // one checkbox otherwise we have many spinning cursors
+              .find('input[type=checkbox]:first').change()
+            ;
+          }
+          else {
+            // Unselect all the checkboxes
+            $(this)
+              .html(selAll)
+              .siblings('.bef-checkboxes, .bef-tree')
+                .find('.form-item input:checkbox').each(function() {
+                  $(this).attr('checked', false);
+                  _bef_highlight(this, context);
+                })
+              .end()
+
+              // attr() doesn't trigger a change event, so we do it ourselves. But just on
+              // one checkbox otherwise we have many spinning cursors
+              .find('input[type=checkbox]:first').change()
+            ;
+          }
+        });
+
+        // Add link to the page for each set of checkboxes.
+        selected
+          .addClass('bef-processed')
+          .each(function(index) {
+            // Clone the link prototype and insert into the DOM
+            var newLink = link.clone(true);
+
+            newLink.insertBefore($('.bef-checkboxes, .bef-tree', this));
+
+            // If all checkboxes are already checked by default then switch to Select None
+            if ($('input:checkbox:checked', this).length == $('input:checkbox', this).length) {
+              newLink.click();
+            }
+          })
+        ;
+      }
+
+      // Check for and initialize datepickers
+      var befSettings = Drupal.settings.better_exposed_filters;
+      if (befSettings && befSettings.datepicker && befSettings.datepicker_options && $.fn.datepicker) {
+        var opt = [];
+        $.each(befSettings.datepicker_options, function(key, val) {
+          if (key && val) {
+            opt[key] = JSON.parse(val);
+          }
+        });
+        $('.bef-datepicker').datepicker(opt);
+      }
+
+    }                   // attach: function() {
+  };                    // Drupal.behaviors.better_exposed_filters = {
+
+  Drupal.behaviors.betterExposedFiltersAllNoneNested = {
+    attach:function (context, settings) {
+      $('.form-checkboxes.bef-select-all-none-nested li').has('ul').once('bef-all-none-nested', function () {
+        var $this = $(this);
+
+        // Prevent CTools autosubmit from firing until we've finished checking
+        // all the checkboxes.
+        var submitFunc = $this.parents('form').submit;
+        $this.parents('form').submit = null;
+
+        $this
+          // To respect term depth, check/uncheck child term checkboxes.
+          .find('input.form-checkboxes:first')
+          .click(function() {
+            $(this).parents('li:first').find('ul input.form-checkboxes').attr('checked', $(this).attr('checked'));
+
+            // Now we can trigger the autosubmit
+            $this.parents('form').submit = submitFunc;
+            $this.parents('form').trigger('submit');
+          })
+          .end()
+          // When a child term is checked or unchecked, set the parent term's
+          // status.
+          .find('ul input.form-checkboxes')
+          .click(function() {
+            var checked = $(this).attr('checked');
+            // Determine the number of unchecked sibling checkboxes.
+            var ct = $(this).parents('ul:first').find('input.form-checkboxes:not(:checked)').size();
+            // If the child term is unchecked, uncheck the parent.
+            // If all sibling terms are checked, check the parent.
+            if (!checked || !ct) {
+              $(this).parents('li:first').parents('li:first').find('input.form-checkboxes:first').attr('checked', checked);
+            }
+          });
+      });
+    }
+  }
+
+  Drupal.behaviors.better_exposed_filters_slider = {
+    attach: function(context, settings) {
+      var befSettings = settings.better_exposed_filters;
+      if (befSettings && befSettings.slider && befSettings.slider_options) {
+        $.each(befSettings.slider_options, function(i, sliderOptions) {
+          var containing_parent = "#" + sliderOptions.viewId + " #edit-" + sliderOptions.id + "-wrapper .views-widget";
+          var $filter = $(containing_parent);
+
+          // If the filter is placed in a secondary fieldset, we may not have
+          // the usual wrapper element.
+          if (!$filter.length) {
+            containing_parent = "#" + sliderOptions.viewId + " .bef-slider-wrapper";
+            $filter = $(containing_parent);
+          }
+
+          // Only make one slider per filter.
+          $filter.once('slider-filter', function() {
+            var $input = $(this).find('input[type=text]');
+
+            // This is a "between" or "not between" filter with two values.
+            if ($input.length == 2) {
+              var $min = $input.parent().find('input#edit-' + sliderOptions.id + '-min'),
+                  $max = $input.parent().find('input#edit-' + sliderOptions.id + '-max'),
+                  default_min,
+                  default_max;
+
+              if (!$min.length || !$max.length) {
+                return;
+              }
+
+              // Get the default values.
+              // We use slider min & max if there are no defaults.
+              default_min = parseFloat(($min.val() == '') ? sliderOptions.min : $min.val(), 10);
+              default_max = parseFloat(($max.val() == '') ? sliderOptions.max : $max.val(), 10);
+              // Set the element value in case we are using the slider min & max.
+              $min.val(default_min);
+              $max.val(default_max);
+
+              $min.parents(containing_parent).after(
+                $('<div class="bef-slider"></div>').slider({
+                  range: true,
+                  min: parseFloat(sliderOptions.min, 10),
+                  max: parseFloat(sliderOptions.max, 10),
+                  step: parseFloat(sliderOptions.step, 10),
+                  animate: sliderOptions.animate ? sliderOptions.animate : false,
+                  orientation: sliderOptions.orientation,
+                  values: [default_min, default_max],
+                  // Update the textfields as the sliders are moved
+                  slide: function (event, ui) {
+                    $min.val(ui.values[0]);
+                    $max.val(ui.values[1]);
+                  },
+                  // This fires when the value is set programmatically or the
+                  // stop event fires.
+                  // This takes care of the case that a user enters a value
+                  // into the text field that is not a valid step of the slider.
+                  // In that case the slider will go to the nearest step and
+                  // this change event will update the text area.
+                  change: function (event, ui) {
+                    $min.val(ui.values[0]);
+                    $max.val(ui.values[1]);
+                  },
+                  // Attach stop listeners.
+                  stop: function(event, ui) {
+                    // Click the auto submit button.
+                    $(this).parents('form').find('.ctools-auto-submit-click').click();
+                  }
+                })
+              );
+
+              // Update the slider when the fields are updated.
+              $min.blur(function() {
+                befUpdateSlider($(this), 0, sliderOptions);
+              });
+              $max.blur(function() {
+                befUpdateSlider($(this), 1, sliderOptions);
+              });
+            }
+            // This is single value filter.
+            else if ($input.length == 1) {
+              if ($input.attr('id') != 'edit-' + sliderOptions.id) {
+                return;
+              }
+
+              // Get the default value. We use slider min if there is no default.
+              var default_value = parseFloat(($input.val() == '') ? sliderOptions.min : $input.val(), 10);
+              // Set the element value in case we are using the slider min.
+              $input.val(default_value);
+
+              $input.parents(containing_parent).after(
+                $('<div class="bef-slider"></div>').slider({
+                  min: parseFloat(sliderOptions.min, 10),
+                  max: parseFloat(sliderOptions.max, 10),
+                  step: parseFloat(sliderOptions.step, 10),
+                  animate: sliderOptions.animate ? sliderOptions.animate : false,
+                  orientation: sliderOptions.orientation,
+                  value: default_value,
+                  // Update the textfields as the sliders are moved.
+                  slide: function (event, ui) {
+                    $input.val(ui.value);
+                  },
+                  // This fires when the value is set programmatically or the
+                  // stop event fires.
+                  // This takes care of the case that a user enters a value
+                  // into the text field that is not a valid step of the slider.
+                  // In that case the slider will go to the nearest step and
+                  // this change event will update the text area.
+                  change: function (event, ui) {
+                    $input.val(ui.value);
+                  },
+                  // Attach stop listeners.
+                  stop: function(event, ui) {
+                    // Click the auto submit button.
+                    $(this).parents('form').find('.ctools-auto-submit-click').click();
+                  }
+                })
+              );
+
+              // Update the slider when the field is updated.
+              $input.blur(function() {
+                befUpdateSlider($(this), null, sliderOptions);
+              });
+            }
+            else {
+              return;
+            }
+          })
+        });
+      }
+    }
+  };
+
+  // This is only needed to provide ajax functionality
+  Drupal.behaviors.better_exposed_filters_select_as_links = {
+    attach: function(context, settings) {
+
+      $('.bef-select-as-links', context).once(function() {
+        var $element = $(this);
+
+        // Check if ajax submission is enabled. If it's not enabled then we
+        // don't need to attach our custom submission handling, because the
+        // links are already properly built.
+
+        // First check if any ajax views are contained in the current page.
+        if (typeof settings.views == 'undefined' || typeof settings.views.ajaxViews == 'undefined') {
+          return;
+        }
+
+        // Now check that the view for which the current filter block is used,
+        // is part of the configured ajax views.
+        var $uses_ajax = false;
+        $.each(settings.views.ajaxViews, function(i, item) {
+          var $view_name = item.view_name.replace(/_/g, '-');
+          var $view_display_id = item.view_display_id.replace(/_/g, '-');
+          var $id = 'views-exposed-form-' + $view_name + '-' + $view_display_id;
+          var $form_id = $element.parents('form').attr('id');
+          if ($form_id == $id) {
+            $uses_ajax = true;
+            return;
+          }
+        });
+
+        // If no ajax is used for form submission, we quit here.
+        if (!$uses_ajax) {
+          return;
+        }
+
+        // Attach selection toggle and form submit on click to each link.
+        $(this).find('a').click(function(event) {
+          var $wrapper = $(this).parents('.bef-select-as-links');
+          var $options = $wrapper.find('select option');
+          // We have to prevent the page load triggered by the links.
+          event.preventDefault();
+          event.stopPropagation();
+          // Un select old select value.
+          $wrapper.find('select option').removeAttr('selected');
+
+          // Set the corresponding option inside the select element as selected.
+          var link_text = $(this).text();
+          $selected = $options.filter(function() {
+            return $(this).text() == link_text;
+          });
+          $selected.attr('selected', 'selected');
+          $wrapper.find('.bef-new-value').val($selected.val());
+          $wrapper.find('a').removeClass('active');
+          $(this).addClass('active');
+          // Submit the form.
+          $wrapper.parents('form').find('.views-submit-button *[type=submit]').click();
+        });
+      });
+    }
+  };
+
+  Drupal.behaviors.betterExposedFiltersRequiredFilter = {
+    attach: function(context, settings) {
+      // Required checkboxes should re-check all inputs if a user un-checks
+      // them all.
+      $('.bef-select-as-checkboxes', context).once('bef-required-filter').ajaxComplete(function (e, xhr, s) {
+        var $element = $(this);
+
+        if (typeof settings.views == 'undefined' || typeof settings.views.ajaxViews == 'undefined') {
+          return;
+        }
+
+        // Now check that the view for which the current filter block is used,
+        // is part of the configured ajax views.
+        var $view_name;
+        var $view_display_id;
+        var $uses_ajax = false;
+        $.each(settings.views.ajaxViews, function(i, item) {
+          $view_name = item.view_name;
+          $view_display_id = item.view_display_id;
+          var $id = 'views-exposed-form-' + $view_name.replace(/_/g, '-') + '-' + $view_display_id.replace(/_/g, '-');
+          var $form_id = $element.parents('form').attr('id');
+          if ($form_id == $id) {
+            $uses_ajax = true;
+            return false;
+          }
+        });
+
+        var $filter_name = $('input', this).attr('name').slice(0, -2);
+        if (Drupal.settings.better_exposed_filters.views[$view_name].displays[$view_display_id].filters[$filter_name].required && $('input:checked', this).length == 0) {
+          $('input', this).prop('checked', true);
+        }
+      });
+    }
+  }
+
+  /*
+   * Helper functions
+   */
+
+  /**
+   * Adds/Removes the highlight class from the form-item div as appropriate
+   */
+  function _bef_highlight(elem, context) {
+    $elem = $(elem, context);
+    $elem.attr('checked')
+      ? $elem.closest('.form-item', context).addClass('highlight')
+      : $elem.closest('.form-item', context).removeClass('highlight');
+  }
+
+  /**
+   * Update a slider when a related input element is changed.
+   *
+   * We don't need to check whether the new value is valid based on slider min,
+   * max, and step because the slider will do that automatically and then we
+   * update the textfield on the slider's change event.
+   *
+   * We still have to make sure that the min & max values of a range slider
+   * don't pass each other though, however once this jQuery UI bug is fixed we
+   * won't have to. - http://bugs.jqueryui.com/ticket/3762
+   *
+   * @param $el
+   *   A jQuery object of the updated element.
+   * @param valIndex
+   *   The index of the value for a range slider or null for a non-range slider.
+   * @param sliderOptions
+   *   The options for the current slider.
+   */
+  function befUpdateSlider($el, valIndex, sliderOptions) {
+    var val = parseFloat($el.val(), 10),
+        currentMin = $el.parents('div.views-widget').next('.bef-slider').slider('values', 0),
+        currentMax = $el.parents('div.views-widget').next('.bef-slider').slider('values', 1);
+    // If we have a range slider.
+    if (valIndex != null) {
+      // Make sure the min is not more than the current max value.
+      if (valIndex == 0 && val > currentMax) {
+        val = currentMax;
+      }
+      // Make sure the max is not more than the current max value.
+      if (valIndex == 1 && val < currentMin) {
+        val = currentMin;
+      }
+      // If the number is invalid, go back to the last value.
+      if (isNaN(val)) {
+        val = $el.parents('div.views-widget').next('.bef-slider').slider('values', valIndex);
+      }
+    }
+    else {
+      // If the number is invalid, go back to the last value.
+      if (isNaN(val)) {
+        val = $el.parents('div.views-widget').next('.bef-slider').slider('value');
+      }
+    }
+    // Make sure we are a number again.
+    val = parseFloat(val, 10);
+    // Set the slider to the new value.
+    // The slider's change event will then update the textfield again so that
+    // they both have the same value.
+    if (valIndex != null) {
+      $el.parents('div.views-widget').next('.bef-slider').slider('values', valIndex, val);
+    }
+    else {
+      $el.parents('div.views-widget').next('.bef-slider').slider('value', val);
+    }
+  }
+
+}) (jQuery);
diff --git a/profiles/wcm_base/modules/contrib/better_exposed_filters/better_exposed_filters.module b/profiles/wcm_base/modules/contrib/better_exposed_filters/better_exposed_filters.module
new file mode 100644
index 0000000000000000000000000000000000000000..a11beb57770444b1c34b198b948f6a81bb66857d
--- /dev/null
+++ b/profiles/wcm_base/modules/contrib/better_exposed_filters/better_exposed_filters.module
@@ -0,0 +1,206 @@
+<?php
+/**
+ * @file
+ * Allows the use of checkboxes, radio buttons or hidden fields for exposed
+ * Views filters.
+ */
+
+/**
+ * Implements hook_theme().
+ */
+function better_exposed_filters_theme($existing, $type, $theme, $path) {
+  return array(
+    'select_as_checkboxes' => array(
+      'function' => 'theme_select_as_checkboxes',
+      'render element' => 'element',
+      'file' => 'better_exposed_filters.theme',
+    ),
+    'select_as_checkboxes_fieldset' => array(
+      'function' => 'theme_select_as_checkboxes_fieldset',
+      'render element' => 'element',
+      'file' => 'better_exposed_filters.theme',
+    ),
+    'select_as_radios' => array(
+      'function' => 'theme_select_as_radios',
+      'render element' => 'element',
+      'file' => 'better_exposed_filters.theme',
+    ),
+    'select_as_radios_fieldset' => array(
+      'function' => 'theme_select_as_radios_fieldset',
+      'render element' => 'element',
+      'file' => 'better_exposed_filters.theme',
+    ),
+    'select_as_hidden' => array(
+      'function' => 'theme_select_as_hidden',
+      'render element' => 'element',
+      'file' => 'better_exposed_filters.theme',
+    ),
+    'select_as_tree' => array(
+      'function' => 'theme_select_as_tree',
+      'render element' => 'element',
+      'file' => 'better_exposed_filters.theme',
+    ),
+    'select_as_links' => array(
+      'function' => 'theme_select_as_links',
+      'render element' => 'element',
+      'file' => 'better_exposed_filters.theme',
+    ),
+    'secondary_exposed_elements' => array(
+      'function' => 'theme_secondary_exposed_elements',
+      'render element' => 'element',
+      'file' => 'better_exposed_filters.theme',
+    ),
+    'bef_checkbox' => array(
+      'function' => 'theme_bef_checkbox',
+      'render element' => 'element',
+      'file' => 'better_exposed_filters.theme',
+    ),
+  );
+}
+
+/*
+ * Views3 support
+ *
+ * Views3 adds the concept of exposed forms to the mix.  In addition, elements
+ * injected into a Views dialog is no longer saved along with the Views form
+ * information (see the unpack_options() and option_definition() methods of the
+ * views_object object).
+ */
+
+/**
+ * Implements hook_views_api().
+ */
+function better_exposed_filters_views_api() {
+  return array(
+    'api' => 3.0,
+  );
+}
+
+/**
+ * Unpacks sort_by and sort_order from the sort_bef_combine element.
+ */
+function bef_sort_combine_submit($form, &$form_state) {
+  // Same default as better_exposed_filters_exposed_form_plugin::options_form.
+  $combine_param = empty($form_state['#combine_param']) ? 'sort_bef_combine' : $form_state['#combine_param'];
+  if (empty($form_state['values'][$combine_param])) {
+    $form_state['values']['sort_by'] = $form_state['values']['sort_order'] = '';
+  }
+  else {
+    list($form_state['values']['sort_by'], $form_state['values']['sort_order']) = explode(' ', $form_state['values'][$combine_param]);
+  }
+
+  // And pass this along to Views.
+  views_exposed_form_submit($form, $form_state);
+}
+
+/**
+ * Form element validation handler for BEF jQuery slider required fields.
+ */
+function better_exposed_filters_element_validate_slider_required($element, &$form_state) {
+  $value = $element['#value'];
+  // If a jQuery slider format has been selected make sure the min & max value
+  // fields are not empty.
+  if ($value == '' && _better_exposed_filters_slider_selected($element, $form_state)) {
+    form_error($element, t('!name field is required.', array('!name' => $element['#title'])));
+  }
+}
+
+/**
+ * Form element validation handler for BEF jQuery slider animate setting.
+ */
+function better_exposed_filters_element_validate_slider_animate($element, &$form_state) {
+  $value = $element['#value'];
+  if ($value !== '' && _better_exposed_filters_slider_selected($element, $form_state) &&
+      ((!is_numeric($value) || intval($value) != $value || $value <= 0) &&
+       !in_array($value, array('slow', 'normal', 'fast')))) {
+    form_error($element, t('%name must be "slow", "normal", "fast" or the number of milliseconds to run the animation (e.g. 1000).', array('%name' => $element['#title'])));
+  }
+}
+
+/**
+ * Form element validation handler for BEF jQuery slider min and max settings.
+ *
+ * The max value must be greater than the min value.
+ */
+function better_exposed_filters_element_validate_slider_min_max($element, &$form_state) {
+  $value = $element['#value'];
+  $slider_min = $form_state['values']['exposed_form_options']['bef'][$element['#bef_filter_id']]['slider_options']['bef_slider_min'];
+  $slider_max = $form_state['values']['exposed_form_options']['bef'][$element['#bef_filter_id']]['slider_options']['bef_slider_max'];
+
+  if ($value !== '' && _better_exposed_filters_slider_selected($element, $form_state)) {
+    // Must not have more than 11 decimal places.
+    if (_better_exposed_filters_get_num_decimal_places($value) > 11) {
+      form_error($element, t('%name must not have more than 11 decimal places.', array('%name' => $element['#title'])));
+    }
+    // The slider min must be less than the slider max.
+    if (is_numeric($slider_min) && is_numeric($slider_max) && ($slider_max <= $slider_min)) {
+      form_error($element, t('The Range minimum value must be less than the Range maximum value.'));
+    }
+  }
+}
+
+/**
+ * Form element validation handler for BEF jQuery slider step setting.
+ *
+ * The full specified value range of the slider (range maximum - range minimum)
+ * should be evenly divisible by the step.
+ */
+function better_exposed_filters_element_validate_slider_step($element, &$form_state) {
+  $value = $element['#value'];
+
+  if ($value !== '' && _better_exposed_filters_slider_selected($element, $form_state)) {
+    $slider_min = $form_state['values']['exposed_form_options']['bef'][$element['#bef_filter_id']]['slider_options']['bef_slider_min'];
+    $slider_max = $form_state['values']['exposed_form_options']['bef'][$element['#bef_filter_id']]['slider_options']['bef_slider_max'];
+
+    // Must be positive.
+    if ($value < 0) {
+      form_error($element, t('%name must be a positive number.', array('%name' => $element['#title'])));
+    }
+    // Must not have more than 5 decimal places.
+    if (_better_exposed_filters_get_num_decimal_places($value) > 5) {
+      form_error($element, t('%name must not have more than 5 decimal places.', array('%name' => $element['#title'])));
+    }
+    // The slider range must be evenly divisible by the step.
+    // We check like this because of the issues PHP has with inaccurate floats,
+    // where 2 might actually be 1.9999999999.
+    // Because of this we can't reliably use fmod().
+    if (is_numeric($slider_min) && is_numeric($slider_max) && !ctype_digit((string) abs(($slider_max - $slider_min) / $value))) {
+      form_error($element, t('The range of the slider (Range maximum - Range minimum) should be evenly divisible by the step.'));
+    }
+  }
+}
+
+/**
+ * Return whether or not the slider has been selected for the given filter.
+ */
+function _better_exposed_filters_slider_selected($element, &$form_state) {
+  return (isset($element['#bef_filter_id']) &&
+          isset($form_state['values']['exposed_form_options']['bef'][$element['#bef_filter_id']]['bef_format']) &&
+          $form_state['values']['exposed_form_options']['bef'][$element['#bef_filter_id']]['bef_format'] == 'bef_slider');
+}
+
+/**
+ * Return the number of decimal places of the given number.
+ */
+function _better_exposed_filters_get_num_decimal_places($number) {
+  $str = (string) $number;
+  return strlen(substr(strrchr($str, '.'), 1));
+}
+
+/**
+ * Implements hook_preprocess_views_view().
+ */
+function better_exposed_filters_preprocess_views_view(&$variables) {
+  $filters = array();
+  foreach ($variables['view']->filter as $filter) {
+    if ($filter->options['exposed']) {
+      $identifier = $filter->options['is_grouped'] ? $filter->options['group_info']['identifier'] : $filter->options['expose']['identifier'];
+      $filters[$identifier] = array(
+        'required' => $filter->options['expose']['required'] ? TRUE : FALSE,
+      );
+    }
+  }
+
+  $bef_js['views'][$variables['view']->name]['displays'][$variables['view']->current_display]['filters'] = $filters;
+  drupal_add_js(array('better_exposed_filters' => $bef_js), 'setting');
+}
diff --git a/profiles/wcm_base/modules/contrib/better_exposed_filters/better_exposed_filters.theme b/profiles/wcm_base/modules/contrib/better_exposed_filters/better_exposed_filters.theme
new file mode 100644
index 0000000000000000000000000000000000000000..96ecd5feebeb2761e27536028445e256914b6623
--- /dev/null
+++ b/profiles/wcm_base/modules/contrib/better_exposed_filters/better_exposed_filters.theme
@@ -0,0 +1,762 @@
+<?php
+/**
+ * @file
+ * Provides theming functions to display exposed forms using different
+ * interfaces.
+ */
+
+/**
+ * Themes a select element as checkboxes enclosed in a collapsible fieldset.
+ *
+ * @param array $vars
+ *   An array of arrays, the 'element' item holds the properties of the element
+ *
+ * @return string
+ *   HTML representing the form element.
+ */
+function theme_select_as_checkboxes_fieldset($vars) {
+  // Merge incoming element with some default values. Prevents a lot of this.
+  // $foo = isset($bar) ? $bar : $bar_default;
+  $element = array_merge(
+    array(
+      '#bef_title' => '',
+      '#bef_description' => '',
+      '#bef_operator' => array(),
+    ),
+    $vars['element']
+  );
+
+  $fieldset = array(
+    '#title' => $element['#bef_title'],
+    '#description' => $element['#bef_description'],
+    '#attributes' => array(
+      'class' => array(
+        'bef-select-as-checkboxes-fieldset',
+        'collapsible',
+      ),
+    ),
+  );
+  if (empty($element['#value'])) {
+    // Using the FAPI #collapsible and #collapsed attribute doesn't work here
+    // TODO: not sure why...
+    $fieldset['#attributes']['class'][] = 'collapsed';
+  }
+
+  // We rendered the description as part of the fieldset element, don't render
+  // it again along with the checkboxes.
+  unset($element['#bef_description']);
+
+  $children = '';
+  if (!empty($element['#bef_operator'])) {
+    // Put an exposed operator inside the fieldset.
+    $children = drupal_render($element['#bef_operator']);
+  }
+
+  // Render the checkboxes.
+  $children .= theme('select_as_checkboxes', array('element' => $element));
+
+  $fieldset['#children'] = $children;
+  return theme('fieldset', array('element' => $fieldset));
+}
+
+/**
+ * Themes a select element as a set of checkboxes.
+ *
+ * @see http://api.drupal.org/api/function/theme_select/7
+ *
+ * @param array $vars
+ *   An array of arrays, the 'element' item holds the properties of the element.
+ *
+ * @return string
+ *   HTML representing the form element.
+ */
+function theme_select_as_checkboxes($vars) {
+  $element = $vars['element'];
+  if (!empty($element['#bef_nested'])) {
+    if (empty($element['#attributes']['class'])) {
+      $element['#attributes']['class'] = array();
+    }
+    $element['#attributes']['class'][] = 'form-checkboxes';
+    return theme('select_as_tree', array('element' => $element));
+  }
+
+  // The selected keys from #options.
+  $selected_options = empty($element['#value']) ? (empty($element['#default_value']) ? array() : $element['#default_value']) : $element['#value'];
+  if (!is_array($selected_options)) {
+    $selected_options = array($selected_options);
+  }
+
+  // Grab exposed filter description.  We'll put it under the label where it
+  // makes more sense.
+  $description = '';
+  if (!empty($element['#bef_description'])) {
+    $description = '<div class="description">' . $element['#bef_description'] . '</div>';
+  }
+
+  $output = '<div class="bef-checkboxes">';
+  foreach ($element['#options'] as $option => $elem) {
+    if ('All' === $option) {
+      // TODO: 'All' text is customizable in Views.
+      // No need for an 'All' option -- either unchecking or checking all the
+      // checkboxes is equivalent.
+      continue;
+    }
+
+    // Check for Taxonomy-based filters.
+    if (is_object($elem)) {
+      $slice = array_slice($elem->option, 0, 1, TRUE);
+      list($option, $elem) = each($slice);
+    }
+
+    // Check for optgroups.  Put subelements in the $element_set array and add
+    // a group heading. Otherwise, just add the element to the set.
+    $element_set = array();
+    $is_optgroup = FALSE;
+    if (is_array($elem)) {
+      $output .= '<div class="bef-group">';
+      $output .= '<div class="bef-group-heading">' . $option . '</div>';
+      $output .= '<div class="bef-group-items">';
+      $element_set = $elem;
+      $is_optgroup = TRUE;
+    }
+    else {
+      $element_set[$option] = $elem;
+    }
+
+    foreach ($element_set as $key => $value) {
+      $output .= theme('bef_checkbox', array('element' => $element, 'value' => $key, 'label' => $value, 'selected' => array_search($key, $selected_options) !== FALSE));
+    }
+
+    if ($is_optgroup) {
+      // Close group and item <div>s.
+      $output .= '</div></div>';
+    }
+
+  }
+  $output .= '</div>';
+
+  // Fake theme_checkboxes() which we can't call because it calls
+  // theme_form_element() for each option.
+  $attributes['class'] = array('form-checkboxes', 'bef-select-as-checkboxes');
+  if (!empty($element['#bef_select_all_none'])) {
+    $attributes['class'][] = 'bef-select-all-none';
+  }
+  if (!empty($element['#bef_select_all_none_nested'])) {
+    $attributes['class'][] = 'bef-select-all-none-nested';
+  }
+  if (!empty($element['#attributes']['class'])) {
+    $attributes['class'] = array_merge($element['#attributes']['class'], $attributes['class']);
+  }
+
+  return '<div' . drupal_attributes($attributes) . ">$description$output</div>";
+}
+
+/**
+ * Themes a select element as a series of hidden fields.
+ *
+ * @see http://api.drupal.org/api/function/theme_select/7
+ *
+ * @param array $vars
+ *   An array of arrays, the 'element' item holds the properties of the element.
+ *
+ * @return string
+ *   HTML representing the form element.
+ */
+function theme_select_as_hidden($vars) {
+  $element = $vars['element'];
+  $output = '';
+  $selected_options = empty($element['#value']) ? $element['#default_value'] : $element['#value'];
+  $properties = array(
+    'title' => isset($element['#title']) ? $element['#title'] : '',
+    'description' => isset($element['#bef_description']) ? $element['#bef_description'] : '',
+    'required' => FALSE,
+  );
+
+  foreach ($element['#options'] as $option => $elem) {
+    // Check for Taxonomy-based filters.
+    if (is_object($elem)) {
+      $slice = array_slice($elem->option, 0, 1, TRUE);
+      list($option, $elem) = each($slice);
+    }
+
+    // Check for optgroups.  Put subelements in the $element_set array and add a
+    // group heading. Otherwise, just add the element to the set.
+    $element_set = array();
+    if (is_array($elem)) {
+      $element_set = $elem;
+    }
+    else {
+      $element_set[$option] = $elem;
+    }
+
+    foreach ($element_set as $key => $value) {
+      // Only render fields for selected values -- no selected values renders
+      // zero fields.
+      if (array_search($key, $selected_options) !== FALSE) {
+        // Custom ID for each hidden field based on the <select> element's
+        // original ID.
+        $id = drupal_html_id($element['#id'] . '-' . $key);
+        $hidden = array(
+          'id' => $id,
+          'name' => check_plain($element['#name']) . '[]',
+          'value' => check_plain($key),
+        );
+        $output .= theme('form_element', array(
+          'element' => array_merge($properties, array(
+            '#id' => $id,
+            '#children' => theme_hidden(array('element' => $hidden)),
+          ))
+        ));
+      }
+    }
+  }
+  return $output;
+}
+
+/**
+ * Themes a select element as radio buttons enclosed in a collapsible fieldset.
+ *
+ * @param array $vars
+ *   An array of arrays, the 'element' item holds the properties of the element.
+ *
+ * @return string
+ *   HTML representing the form element.
+ */
+function theme_select_as_radios_fieldset($vars) {
+  // Merge incoming element with some default values. Prevents a lot of this.
+  // $foo = isset($bar) ? $bar : $bar_default;
+  $element = array_merge(
+    array(
+      '#bef_title' => '',
+      '#bef_description' => '',
+      '#bef_operator' => array(),
+    ),
+    $vars['element']
+  );
+
+  // The "all" option is the first in the list. If the selected radio button is
+  // the all option, then leave the fieldset collapsed.  Otherwise, render it
+  // opened.
+  $keys = array_keys($element['#options']);
+  $all = array_shift($keys);
+
+  $fieldset = array(
+    '#title' => $element['#bef_title'],
+    '#description' => $element['#bef_description'],
+    '#attributes' => array(
+      'class' => array(
+        'bef-select-as-checkboxes-fieldset',
+        'collapsible',
+      ),
+    ),
+  );
+  if (empty($element['#value'])) {
+    // Using the FAPI #collapsible and #collapsed attribute doesn't work here.
+    // TODO: not sure why...
+    $fieldset['#attributes']['class'][] = 'collapsed';
+  }
+
+  // We rendered the description as part of the fieldset element, don't render
+  // it again along with the checkboxes.
+  unset($element['#bef_description']);
+
+  $children = '';
+  if (!empty($element['#bef_operator'])) {
+    // Put an exposed operator inside the fieldset.
+    $children = drupal_render($element['#bef_operator']);
+  }
+
+  // Render the radio buttons.
+  $children .= theme('select_as_radios', $element);
+
+  $fieldset['#children'] = $children;
+  return theme('fieldset', array('element' => $fieldset));
+}
+
+/**
+ * Themes a select drop-down as a collection of radio buttons.
+ *
+ * @see http://api.drupal.org/api/function/theme_select/7
+ *
+ * @param array $vars
+ *   An array of arrays, the 'element' item holds the properties of the element.
+ *
+ * @return string
+ *   HTML representing the form element.
+ */
+function theme_select_as_radios($vars) {
+  $element = &$vars['element'];
+
+  if (!empty($element['#bef_nested'])) {
+    return theme('select_as_tree', $vars);
+  }
+
+  $output = '';
+  foreach (element_children($element) as $key) {
+    if (isset($element['#bef_term_descriptions'][$key])) {
+      $element[$key]['#description'] = $element['#bef_term_descriptions'][$key];
+    }
+    $element[$key]['#default_value'] = NULL;
+    $element[$key]['#children'] = theme('radio', array('element' => $element[$key]));
+    $output .= theme('form_element', array('element' => $element[$key]));
+  }
+
+  return $output;
+}
+
+/**
+ * Themes a taxonomy-based exposed filter as a nested unordered list.
+ *
+ * Note: this routine depends on the '-' char prefixed on the term names by
+ * Views to determine depth.
+ *
+ * @param array $vars
+ *   An array of arrays, the 'element' item holds the properties of the element.
+ *
+ * @return string
+ *   Nested, unordered list of filter options
+ */
+function theme_select_as_tree($vars) {
+  $element = $vars['element'];
+
+  // The selected keys from #options.
+  $selected_options = empty($element['#value']) ? $element['#default_value'] : $element['#value'];
+
+  // Build a bunch of nested unordered lists to represent the hierarchy based
+  // on the '-' prefix added by Views or optgroup structure.
+  $output = '<ul class="bef-tree">';
+  $curr_depth = 0;
+  foreach ($element['#options'] as $option_value => $option_label) {
+
+    // Check for Taxonomy-based filters.
+    if (is_object($option_label)) {
+      $slice = array_slice($option_label->option, 0, 1, TRUE);
+      list($option_value, $option_label) = each($slice);
+    }
+
+    // Check for optgroups -- which is basically a two-level deep tree.
+    if (is_array($option_label)) {
+      // TODO:
+    }
+    else {
+      // Build hierarchy based on prefixed '-' on the element label.
+      if (t('- Any -') == $option_label) {
+        $depth = 0;
+      }
+      else {
+        preg_match('/^(-*).*$/', $option_label, $matches);
+        $depth = strlen($matches[1]);
+        $option_label = ltrim($option_label, '-');
+      }
+
+      // Build either checkboxes or radio buttons, depending on Views' settings.
+      $html = '';
+      if (!empty($element['#multiple'])) {
+        if (isset($element['#bef_term_descriptions'][$option_value])) {
+          $element[$option_value]['#description'] = $element['#bef_term_descriptions'][$option_value];
+        }
+        $html = theme('bef_checkbox', array(
+          'element' => $element,
+          'value' => $option_value,
+          'label' => $option_label,
+          'selected' => (array_search($option_value, $selected_options) !== FALSE),
+        ));
+      }
+      else {
+        if (isset($element['#bef_term_descriptions'][$option_value])) {
+          $element[$option_value]['#description'] = $element['#bef_term_descriptions'][$option_value];
+        }
+        $element[$option_value]['#title'] = $option_label;
+        $element[$option_value]['#children'] = theme('radio', array('element' => $element[$option_value]));
+        $html .= theme('form_element', array('element' => $element[$option_value]));
+      }
+
+      if ($depth > $curr_depth) {
+        // We've moved down a level: create a new nested <ul>.
+        // TODO: Is there is a way to jump more than one level deeper at a time?
+        // I don't think so...
+        $output .= "<ul class='bef-tree-child bef-tree-depth-$depth'><li>$html";
+        $curr_depth = $depth;
+      }
+      elseif ($depth < $curr_depth) {
+        // We've moved up a level: finish previous <ul> and <li> tags, once for
+        // each level, since we can jump multiple levels up at a time.
+        while ($depth < $curr_depth) {
+          $output .= '</li></ul>';
+          $curr_depth--;
+        }
+        $output .= "</li><li>$html";
+      }
+      else {
+        if (-1 == $curr_depth) {
+          // No </li> needed -- this is the first element.
+          $output .= "<li>$html";
+          $curr_depth = 0;
+        }
+        else {
+          // Remain at same level as previous entry.
+          $output .= "</li><li>$html";
+        }
+      }
+    }
+  } // foreach ($element['#options'] as $option_value => $option_label)
+
+  if (!$curr_depth) {
+    // Close last <li> tag.
+    $output .= '</li>';
+  }
+  else {
+    // Finish closing <ul> and <li> tags.
+    while ($curr_depth) {
+      $curr_depth--;
+      $output .= '</li></ul></li>';
+    }
+  }
+
+  // Close the opening <ul class="bef-tree"> tag.
+  $output .= '</ul>';
+
+  // Add exposed filter description.
+  $description = '';
+  if (!empty($element['#bef_description'])) {
+    $description = '<div class="description">' . $element['#bef_description'] . '</div>';
+  }
+
+  // Add the select all/none option, if needed.
+  if (!empty($element['#bef_select_all_none'])) {
+    if (empty($element['#attributes']['class'])) {
+      $element['#attributes']['class'] = array();
+    }
+    $element['#attributes']['class'][] = 'bef-select-all-none';
+  }
+  // Add the select all/none nested option, if needed.
+  if (!empty($element['#bef_select_all_none_nested'])) {
+    if (empty($element['#attributes']['class'])) {
+      $element['#attributes']['class'] = array();
+    }
+    $element['#attributes']['class'][] = 'bef-select-all-none-nested';
+  }
+
+  // Name and multiple attributes are not valid for <div>'s.
+  if (isset($element['#attributes']['name'])) {
+    unset($element['#attributes']['name']);
+  }
+  if (isset($element['#attributes']['multiple'])) {
+    unset($element['#attributes']['multiple']);
+  }
+
+  return '<div' . drupal_attributes($element['#attributes']) . ">$description$output</div>";
+}
+
+/**
+ * Themes a select drop-down as a collection of links.
+ *
+ * @see http://api.drupal.org/api/function/theme_select/7
+ *
+ * @param array $vars
+ *   An array of arrays, the 'element' item holds the properties of the element.
+ *
+ * @return string
+ *   HTML representing the form element.
+ */
+function theme_select_as_links($vars) {
+  $element = $vars['element'];
+
+  $output = '';
+  $name = $element['#name'];
+
+  // Collect selected values so we can properly style the links later.
+  $selected_options = array();
+  if (empty($element['#value'])) {
+    if (!empty($element['#default_value'])) {
+      $selected_options[] = $element['#default_value'];
+    }
+  }
+  else {
+    $selected_options[] = $element['#value'];
+  }
+
+  // Add to the selected options specified by Views whatever options are in the
+  // URL query string, but only for this filter.
+  $urllist = parse_url(request_uri());
+  if (isset($urllist['query'])) {
+    $query = array();
+    parse_str(urldecode($urllist['query']), $query);
+    foreach ($query as $key => $value) {
+      if ($key != $name) {
+        continue;
+      }
+      if (is_array($value)) {
+        // This filter allows multiple selections, so put each one on the
+        // selected_options array.
+        foreach ($value as $option) {
+          $selected_options[] = $option;
+        }
+      }
+      else {
+        $selected_options[] = $value;
+      }
+    }
+  }
+
+  // Clean incoming values to prevent XSS attacks.
+  if (is_array($element['#value'])) {
+    foreach ($element['#value'] as $index => $item) {
+      unset($element['#value'][$index]);
+      $element['#value'][check_plain($index)] = check_plain($item);
+    }
+  }
+  elseif (is_string($element['#value'])) {
+    $element['#value'] = check_plain($element['#value']);
+  }
+
+  // Go through each filter option and build the appropriate link or plain text.
+  foreach ($element['#options'] as $option => $elem) {
+    if (!empty($element['#hidden_options'][$option])) {
+      continue;
+    }
+    // Check for Taxonomy-based filters.
+    if (is_object($elem)) {
+      $slice = array_slice($elem->option, 0, 1, TRUE);
+      list($option, $elem) = each($slice);
+    }
+
+    // Check for optgroups.  Put subelements in the $element_set array and add
+    // a group heading. Otherwise, just add the element to the set.
+    $element_set = array();
+    if (is_array($elem)) {
+      $element_set = $elem;
+    }
+    else {
+      $element_set[$option] = $elem;
+    }
+
+    $links = array();
+    $multiple = !empty($element['#multiple']);
+
+    // If we're in an exposed block, we'll get passed a path to use for the
+    // Views results page.
+    $path = '';
+    if (!empty($element['#bef_path'])) {
+      $path = $element['#bef_path'];
+    }
+
+    foreach ($element_set as $key => $value) {
+      $element_output = '';
+      // Custom ID for each link based on the <select>'s original ID.
+      $id = drupal_html_id($element['#id'] . '-' . $key);
+      $elem = array(
+        '#id' => $id,
+        '#markup' => '',
+        '#type' => 'bef-link',
+        '#name' => $id,
+      );
+
+      $link_options = array();
+      // Add "active" class to the currently active filter link.
+      if (in_array((string) $key, $selected_options)) {
+        $link_options['attributes'] = array('class' => 'active');
+      }
+      $url = bef_replace_query_string_arg($name, $key, $multiple, FALSE, $path);
+      $elem['#children'] = l($value, $url, $link_options);
+      $element_output = theme('form_element', array('element' => $elem));
+
+      if (!empty($element['#settings']['combine_param']) && $element['#name'] == $element['#settings']['combine_param'] && !empty($element['#settings']['toggle_links'])) {
+        $sort_pair = explode(' ', $key);
+        if (count($sort_pair) == 2) {
+          // Highlight the link if it is the selected sort_by (can be either
+          // asc or desc, it doesn't matter).
+         if (strpos($selected_options[0], $sort_pair[0]) === 0) {
+            $element_output = str_replace('form-item', 'form-item selected', $element_output);
+          }
+        }
+      }
+      $output .= $element_output;
+
+    }
+  }
+
+  $properties = array(
+    '#description' => isset($element['#bef_description']) ? $element['#bef_description'] : '',
+    '#children' => $output,
+  );
+
+  $output = '<div class="bef-select-as-links">';
+  $output .= theme('form_element', array('element' => $properties));
+
+  // Add attribute that hides the select form element.
+  $vars['element']['#attributes']['style'] = 'display: none;';
+  $output .= theme('select', array('element' => $vars['element']));
+  if (!empty($element['#value'])) {
+    if (is_array($element['#value'])) {
+      foreach ($element['#value'] as $value) {
+        $output .= '<input type="hidden" class="bef-new-value" name="' . $name . '[]" value="' . $value . '" />';
+      }
+    }
+    else {
+      $output .= '<input type="hidden" class="bef-new-value" name="' . $name . '" value="' . $element['#value'] . '" />';
+    }
+  }
+  $output .= '</div>';
+
+  return $output;
+}
+
+/**
+ * Themes some exposed form elements in a collapsible fieldset.
+ *
+ * @param array $vars
+ *   An array of arrays, the 'element' item holds the properties of the element.
+ *
+ * @return string
+ *   HTML to render the form element.
+ */
+function theme_secondary_exposed_elements($vars) {
+  $element = $vars['element'];
+
+  // Render child elements in the order they would appear as exposed filters.
+  // First collect the elements that have a specified position and order them
+  // based on that position. Then render those without a position.
+  $children = array();
+  $unordered = array();
+  foreach (element_children($element) as $id) {
+    if (isset($element[$id]['#bef_position'])) {
+      $children[$element[$id]['#bef_position']] = $element[$id];
+    }
+    else {
+      $unordered[] = $element[$id];
+    }
+  }
+  ksort($children, SORT_NUMERIC);
+  $children = array_merge($children, $unordered);
+
+  $output = '<div class="bef-secondary-options">';
+  foreach ($children as $child) {
+    $output .= drupal_render($child);
+  }
+  $output .= '</div>';
+
+  return $output;
+}
+
+/*
+ *
+ * Helper functions
+ *
+ */
+
+/**
+ * Build a BEF checkbox.
+ *
+ * @see http://api.drupal.org/api/function/theme_checkbox/7
+ *
+ * @param array $element
+ *   Original <select> element generated by Views.
+ * @param string $value
+ *   Return value of this checkbox option.
+ * @param string $label
+ *   Label of this checkbox option.
+ * @param bool $selected
+ *   Checked or not.
+ *
+ * @return [type]
+ *   HTML to render a checkbox.
+ */
+function theme_bef_checkbox($variables) {
+  $element = $variables['element'];
+  $value = check_plain($variables['value']);
+  $label = filter_xss_admin($variables['label']);
+  $selected = $variables['selected'];
+  $id = drupal_html_id($element['#id'] . '-' . $value);
+  // Custom ID for each checkbox based on the <select>'s original ID.
+  $properties = array(
+    '#required' => FALSE,
+    '#id' => $id,
+    '#type' => 'bef-checkbox',
+    '#name' => $id,
+    '#description' => isset($element['#bef_term_descriptions'][$value]) ? $element['#bef_term_descriptions'][$value] :
+      '',
+  );
+
+  // Prevent the select-all-none class from cascading to all checkboxes.
+  if (!empty($element['#attributes']['class'])
+      && FALSE !== ($key = array_search('bef-select-all-none', $element['#attributes']['class']))) {
+    unset($element['#attributes']['class'][$key]);
+  }
+
+  // Unset the name attribute as we are setting it manually.
+  unset($element['#attributes']['name']);
+
+  // Unset the multiple attribute as it doesn't apply for checkboxes.
+  unset ($element['#attributes']['multiple']);
+
+  $checkbox = '<input type="checkbox" '
+    // Brackets are key -- just like select.
+    . 'name="' . $element['#name'] . '[]" '
+    . 'id="' . $id . '" '
+    . 'value="' . $value . '" '
+    . ($selected ? 'checked="checked" ' : '')
+    . drupal_attributes($element['#attributes']) . ' />';
+  $properties['#children'] = "$checkbox <label class='option' for='$id'>$label</label>";
+  $output = theme('form_element', array('element' => $properties));
+  return $output;
+}
+
+/**
+ * Replaces/adds a given query string argument to the current URL.
+ *
+ * @param string $key
+ *   Query string key (argument).
+ * @param string $value
+ *   Query string value.
+ * @param bool $multiple
+ *   (optional) TRUE if this key/value pair allows multiple values.
+ * @param bool $remove
+ *   (optional) TRUE if this key/value should be a link to remove/unset the
+ *   filter.
+ * @param string $path
+ *   (optional) Use this specify the View results page when the exposed form
+ *   is displayed as a block and may be a different URL from the results.
+ *   Defaults to the current path if unspecified.
+ *
+ * @return string
+ *   URL.
+ */
+function bef_replace_query_string_arg($key, $value, $multiple = FALSE, $remove = FALSE, $path = '') {
+  if (!$path) {
+    $path = implode('/', arg());
+  }
+
+  // Prevents us from having to check for each index from parse_url that we may
+  // use.
+  $urllist = array('path' => '', 'fragment' => '', 'query' => '');
+  $urllist = array_merge($urllist, parse_url(request_uri()));
+  $fragment = urldecode($urllist['fragment']);
+  $query = array();
+  parse_str(urldecode($urllist['query']), $query);
+  if (isset($query[$key]) && is_array($query[$key])) {
+    // Multiple values allowed for this existing key.
+    if ($remove && ($key_remove = array_search($value, $query[$key])) !== FALSE) {
+      unset($query[$key][$key_remove]);
+    }
+    else {
+      $query[$key][] = $value;
+    }
+  }
+  else {
+    // Create a new key.
+    if ($multiple && !$remove) {
+      $query[$key] = array($value);
+    }
+    elseif (!$remove) {
+      $query[$key] = $value;
+    }
+  }
+  // Unset page arg so we don't land on an empty page off the end of the newly filtered listing
+  unset($query['page']);
+  return url($path, array(
+    'query' => $query,
+    'fragment' => $fragment,
+    'absolute' => TRUE,
+  ));
+}
diff --git a/profiles/wcm_base/modules/contrib/better_exposed_filters/better_exposed_filters.views.inc b/profiles/wcm_base/modules/contrib/better_exposed_filters/better_exposed_filters.views.inc
new file mode 100644
index 0000000000000000000000000000000000000000..d91d2f5bfb3a10608dfda993831b129d64ee64b1
--- /dev/null
+++ b/profiles/wcm_base/modules/contrib/better_exposed_filters/better_exposed_filters.views.inc
@@ -0,0 +1,31 @@
+<?php
+/**
+ * @file
+ * Adds Views3 support.
+ *
+ * Views3 adds the concept of exposed forms to the mix.  In addition, elements
+ * injected into a Views dialog is no longer saved along with the Views form
+ * information (see the unpack_options() and options_definition() methods of the
+ * views_object object).
+ */
+
+/**
+ * Implements hook_views_plugins().
+ */
+function better_exposed_filters_views_plugins() {
+  return array(
+    'exposed_form' => array(
+      'better_exposed_filters' => array(
+        'title' => t('Better Exposed Filters'),
+        'help' => t('Allow use of checkboxes/radio buttons for exposed filters'),
+        'handler' => 'better_exposed_filters_exposed_form_plugin',
+        'uses row plugin' => FALSE,
+        'uses fields' => TRUE,
+        'uses options' => TRUE,
+        'help topic' => 'exposed-form-basic',
+        'type' => 'normal',
+        'parent' => 'basic',
+      ),
+    ),
+  );
+}
diff --git a/profiles/wcm_base/modules/contrib/better_exposed_filters/better_exposed_filters_exposed_form_plugin.inc b/profiles/wcm_base/modules/contrib/better_exposed_filters/better_exposed_filters_exposed_form_plugin.inc
new file mode 100644
index 0000000000000000000000000000000000000000..02135cbf7a72dbe02c3724e1601f93f949a6eda8
--- /dev/null
+++ b/profiles/wcm_base/modules/contrib/better_exposed_filters/better_exposed_filters_exposed_form_plugin.inc
@@ -0,0 +1,2094 @@
+<?php
+/**
+ * @file
+ * Provides an Better Exposed Filters exposed form plugin for View 3.x.
+ */
+
+class better_exposed_filters_exposed_form_plugin extends views_plugin_exposed_form_basic {
+
+  function init(&$view, &$display, $options = array()) {
+    $this->view = &$view;
+    $this->display = &$display;
+
+    $this->localization_keys = $this->unpack_translatable_keys();
+
+    $this->unpack_options($this->options, $options);
+    //$this->unpack_options($this->options, $options, NULL, FALSE);
+  }
+
+  function summary_title() {
+    return t('BEF Settings');
+  }
+
+  function option_definition() {
+    $options = parent::option_definition();
+
+    // Add Better Exposed Filters options to those saved by Views.
+    $options['bef'] = array(
+      'default' => array(),
+      'translatable' => TRUE,
+      'unpack_translatable' => 'unpack_translatable_options',
+    );
+
+    return $options;
+  }
+
+  function options_form(&$form, &$form_state) {
+    parent::options_form($form, $form_state);
+
+    $bef_options = array();
+
+    // Get current settings and default values for new filters.
+    $existing = $this->_bef_get_settings();
+
+    /*
+     * Add general options for exposed form items.
+     */
+    $bef_options['general']['input_required'] = array(
+      '#type' => 'checkbox',
+      '#default_value' => $existing['general']['input_required'],
+      '#title' => t('Require input before results are shown'),
+      '#description' => t("Emulates the built in <em>Input Required</em> exposed filter handler")
+    );
+
+    $bef_options['general']['text_input_required'] = array(
+      '#type' => 'container',
+      // Indent dependent options.
+      '#prefix' => '<div class="dependent-options">',
+      '#suffix' => '</div>',
+      '#states' => array(
+        // Hide this field when the input_required checkbox is disabled.
+        'invisible' => array(
+          ':input[name="exposed_form_options[bef][general][input_required]"]' => array('checked' => FALSE),
+        ),
+      ),
+    );
+
+    $bef_options['general']['text_input_required']['text_input_required'] = array(
+      '#type' => 'text_format',
+      '#title' => t('Text on demand'),
+      '#description' => t('Text to display instead of results until the user selects and applies an exposed filter.'),
+      '#default_value' => $existing['general']['text_input_required']['text_input_required']['value'],
+      '#format' => $existing['general']['text_input_required']['text_input_required']['format'],
+      '#wysiwyg' => FALSE,
+    );
+
+    $bef_options['general']['allow_secondary'] = array(
+      '#type' => 'checkbox',
+      '#title' => t('Enable secondary exposed form options'),
+      '#default_value' => $existing['general']['allow_secondary'],
+      '#description' => t('Allows you to specify some exposed form elements as being secondary options and places those elements in a collapsible fieldset. Use this option to place some exposed filters in an "Advanced Search" area of the form, for example.'),
+    );
+    $bef_options['general']['secondary_label'] = array(
+      '#type' => 'textfield',
+      '#default_value' => $existing['general']['secondary_label'],
+      '#title' => t('Secondary options label'),
+      '#description' => t(
+        'The name of the fieldset to hold secondary options. This cannot be left blank or there will be no way to show/hide these options.'
+      ),
+      // Indent dependent options.
+      '#prefix' => '<div class="dependent-options">',
+      '#suffix' => '</div>',
+      '#states' => array(
+        'required' => array(
+          ':input[name="exposed_form_options[bef][general][allow_secondary]"]' => array('checked' => TRUE),
+        ),
+        'visible' => array(
+          ':input[name="exposed_form_options[bef][general][allow_secondary]"]' => array('checked' => TRUE),
+        ),
+      ),
+    );
+
+    /*
+     * Add options for exposed sorts.
+     */
+    $exposed = FALSE;
+    foreach ($this->display->handler->get_handlers('sort') as $label => $sort) {
+      if ($sort->options['exposed']) {
+        $exposed = TRUE;
+        break;
+      }
+    }
+    if ($exposed) {
+      $bef_options['sort']['bef_format'] = array(
+        '#type' => 'select',
+        '#title' => t('Display exposed sort options as'),
+        '#default_value' => $existing['sort']['bef_format'],
+        '#options' => array(
+          'default' => t('Default select list'),
+          'bef' => t('Radio Buttons'),
+          'bef_links' => t('Links'),
+          'bef_toggle_links' => t('Toggle Links'),
+        ),
+        '#description' => t('Select a format for the exposed sort options. Note: the "toggle links" option will only work correctly if "Combine sort order with sort by" is checked in the "Advanced Sort Options" section.'),
+      );
+      $bef_options['sort']['advanced'] = array(
+        '#type' => 'fieldset',
+        '#title' => t('Advanced sort options'),
+        '#collapsible' => TRUE,
+        '#collapsed' => TRUE,
+      );
+      $bef_options['sort']['advanced']['collapsible'] = array(
+        '#type' => 'checkbox',
+        '#title' => t('Make sort options collapsible'),
+        '#default_value' => $existing['sort']['advanced']['collapsible'],
+        '#description' => t(
+          'Puts the sort options in a collapsible fieldset'
+        ),
+      );
+      $bef_options['sort']['advanced']['collapsible_label'] = array(
+        '#type' => 'textfield',
+        '#title' => t('Collapsible fieldset title'),
+        '#default_value' => empty($existing['sort']['advanced']['collapsible_label']) ? t('Sort options') : $existing['sort']['advanced']['collapsible_label'],
+        '#description' => t('This cannot be left blank or there will be no way to show/hide sort options.'),
+        // Indent dependent options.
+        '#prefix' => '<div class="dependent-options">',
+        '#suffix' => '</div>',
+        '#states' => array(
+          'visible' => array(
+            'input[name="exposed_form_options[bef][sort][advanced][collapsible]"]' => array('checked' => TRUE)
+          ),
+        ),
+      );
+      $bef_options['sort']['advanced']['combine'] = array(
+        '#type' => 'checkbox',
+        '#title' => t('Combine sort order with sort by'),
+        '#default_value' => $existing['sort']['advanced']['combine'],
+        '#description' => t('Combines the sort by options and order (ascending or decending) into a single list.  Use this to display "Option1 Desc", "Option1 Asc", "Option2 Desc", "Option2 Asc" in a single form element. "Expose sort order" must be checked to enable this option.'),
+        '#states' => array(
+          'disabled' => array(
+            'input[name="exposed_form_options[expose_sort_order]"]' => array('checked' => FALSE)
+          ),
+        ),
+      );
+      $bef_options['sort']['advanced']['combine_param'] = array(
+        '#type' => 'textfield',
+        '#title' => t('Enter a query parameter to use for combined sorts'),
+        '#default_value' => $existing['sort']['advanced']['combine_param'],
+        '#description' => t('This will be the $_GET parameter used in query strings. Useful for preventing collisions between exposed filters when there are multiple instances of BEF on the page. Use only UTF-8 letters, numbers, and the dash (-), underscore (_), asterisk (*), and period(.) characters.'),
+        '#default_value' => empty($existing['sort']['advanced']['combine_param']) ? 'sort_bef_combine' : $existing['sort']['advanced']['combine_param'],
+        '#required' => TRUE,
+        // Indent dependent options -- closing </div> is in combine_rewrite.
+        '#prefix' => '<div class="dependent-options">',
+        '#states' => array(
+          'visible' => array(
+            'input[name="exposed_form_options[bef][sort][advanced][combine]"]' => array('checked' => TRUE),
+            'input[name="exposed_form_options[expose_sort_order]"]' => array('checked' => TRUE),
+          ),
+        ),
+      );
+      $bef_options['sort']['advanced']['combine_rewrite'] = array(
+        '#type' => 'textarea',
+        '#title' => t('Rewrite the text displayed'),
+        '#default_value' => $existing['sort']['advanced']['combine_rewrite'],
+        '#description' => t('Use this field to rewrite the text displayed for combined sort options and sort order. Use the format of current_value|replacement_value, one replacement per line. For example: <pre>
+Post date Asc|Oldest first
+Post date Desc|Newest first
+Title Asc|A -> Z
+Title Desc|Z -> A</pre> Leave the replacement value blank to remove an option altogether.'),
+        '#suffix' => '</div>',
+        '#states' => array(
+          'visible' => array(
+            'input[name="exposed_form_options[bef][sort][advanced][combine]"]' => array('checked' => TRUE),
+            'input[name="exposed_form_options[expose_sort_order]"]' => array('checked' => TRUE),
+          ),
+        ),
+      );
+
+      $bef_options['sort']['advanced']['reset'] = array(
+        '#type' => 'checkbox',
+        '#title' => t('Include a "Reset sort" option'),
+        '#default_value' => $existing['sort']['advanced']['reset'],
+        '#description' => t('Adds a "Reset sort" option which will use Views\' default sort order.'),
+      );
+      $bef_options['sort']['advanced']['reset_label'] = array(
+        '#type' => 'textfield',
+        '#title' => t('"Reset sort" label'),
+        '#default_value' => $existing['sort']['advanced']['reset_label'],
+        '#description' => t('This cannot be left blank if the above option is checked'),
+        // Indent dependent options.
+        '#prefix' => '<div class="dependent-options">',
+        '#suffix' => '</div>',
+        '#states' => array(
+          'required' => array(
+              'input[name="exposed_form_options[bef][sort][advanced][reset]"]' => array('checked' => TRUE),
+          ),
+          'visible' => array(
+            'input[name="exposed_form_options[bef][sort][advanced][reset]"]' => array('checked' => TRUE),
+          ),
+        ),
+      );
+
+      $bef_options['sort']['advanced']['is_secondary'] = array(
+        '#type' => 'checkbox',
+        '#title' => t('This is a secondary option'),
+        '#default_value' => $existing['sort']['advanced']['is_secondary'],
+        '#states' => array(
+          'visible' => array(
+            ':input[name="exposed_form_options[bef][general][allow_secondary]"]' => array('checked' => TRUE),
+          ),
+        ),
+        '#description' => t('Places this element in the secondary options portion of the exposed form.'),
+      );
+    }
+
+    /*
+     * Add options for exposed pager.
+     */
+    $pager_exposed = FALSE;
+    $current_display = $this->display->handler->view->display[$this->display->handler->view->current_display];
+    $default_display = $this->display->handler->view->display['default'];
+    if (!empty($current_display->handler->options['defaults']["pager"])) {
+      $pager_exposed = isset($default_display->handler->options['pager']) && !empty($default_display->handler->options['pager']['options']['expose']['items_per_page']);
+    }
+    else {
+      $pager_exposed = isset($current_display->handler->options['pager']) && !empty($current_display->handler->options['pager']['options']['expose']['items_per_page']);
+    }
+    if ($pager_exposed) {
+      $bef_options['pager']['bef_format'] = array(
+        '#type' => 'select',
+        '#title' => t('Display exposed pager options as'),
+        '#default_value' => $existing['pager']['bef_format'],
+        '#options' => array(
+          'default' => t('Default select list'),
+          'bef' => t('Radio Buttons'),
+          'bef_links' => t('Links'),
+        ),
+        '#description' => t('Select a format for the exposed pager options.'),
+      );
+      $bef_options['pager']['is_secondary'] = array(
+        '#type' => 'checkbox',
+        '#title' => t('This is a secondary option'),
+        '#default_value' => $existing['pager']['is_secondary'],
+        '#states' => array(
+          'visible' => array(
+            ':input[name="exposed_form_options[bef][general][allow_secondary]"]' => array('checked' => TRUE),
+          ),
+        ),
+        '#description' => t('Places this element in the secondary options portion of the exposed form.'),
+      );
+    }
+
+    // Only add the description text once -- it was getting a little long to be
+    // added to each filter.
+    $bef_filter_intro = FALSE;
+
+    // Go through each filter and add BEF options.
+    foreach ($this->display->handler->get_handlers('filter') as $label => $filter) {
+      if (!$filter->options['exposed']) {
+        continue;
+      }
+
+      // If we're adding BEF filter options, add an intro to explain what's
+      // going on.
+      if (!$bef_filter_intro) {
+        $link = l(t('BEF settings documentation'), 'http://drupal.org/node/1701012');
+        $bef_options['bef_intro'] = array(
+          '#markup' => '<h3>'
+          . t('Exposed Filter Settings')
+          . '</h3><p>'
+          . t('This section lets you select additional options for exposed filters. Some options are only available in certain situations. If you do not see the options you expect, please see the !link page for more details.',
+              array('!link' => $link))
+          . '</p>',
+        );
+        $bef_filter_intro = TRUE;
+      }
+
+      // These filter operators get our standard options: radio or checkboxes.
+      $bef_standard = FALSE;
+
+      // Allows a filter to be rendered as a hidden <input> element. Useful when
+      // building multi-step filter "wizards," for example.
+      $bef_hidden = FALSE;
+
+      // Renders the filter as a link.
+      // @TODO: expand to include toggle links for all bef_links filters, not
+      // just exposed sorts.
+      $bef_links = FALSE;
+
+      // These filters get a single on/off checkbox option for boolean
+      // operators.
+      $bef_single = FALSE;
+
+      // Used for taxonomy filters with hierarchy.
+      $bef_nested = FALSE;
+
+      // Allows the term description to be added to rendered output.
+      $bef_term_description = FALSE;
+
+      // Used for date-based filters.
+      $bef_datepicker = FALSE;
+
+      // Used for numeric, non-date filters.
+      $bef_slider = FALSE;
+
+      // Check various filter types and determine what options are available.
+      if ($filter instanceof views_handler_filter_string || $filter instanceof views_handler_filter_in_operator) {
+        if (in_array($filter->operator, array('in', 'or', 'and', 'not'))) {
+          $bef_standard = TRUE;
+          $bef_links = TRUE;
+          $bef_hidden = TRUE;
+        }
+        if (in_array($filter->operator, array('empty', 'not empty'))) {
+          $bef_standard = TRUE;
+          $bef_links = TRUE;
+          $bef_hidden = TRUE;
+          if (!$filter->options['expose']['multiple']) {
+            $bef_single = TRUE;
+          }
+        }
+      }
+
+      if ($filter instanceof views_handler_filter_boolean_operator) {
+        $bef_standard = TRUE;
+        $bef_links = TRUE;
+        $bef_hidden = TRUE;
+        if (!$filter->options['expose']['multiple']) {
+          $bef_single = TRUE;
+        }
+      }
+
+      // Grouped filters will have a limited number of filter options available
+      // so we can offer basic BEF options.
+      if ($filter->options['is_grouped']) {
+        $bef_standard = TRUE;
+        $bef_links = TRUE;
+        $bef_hidden = TRUE;
+      }
+
+      if ($filter instanceof views_handler_filter_term_node_tid) {
+        // Autocomplete and dropdown taxonomy filter are both instances of
+        // view_handler_filter_term_node_tid, but we can't show BEF options for
+        // the autocomplete widget.
+        if ('textfield' == $filter->options['type']) {
+          $bef_standard = FALSE;
+          $bef_links = FALSE;
+          $bef_hidden = FALSE;
+        }
+        elseif (!empty($filter->options['hierarchy'])) {
+          $bef_nested = TRUE;
+          $bef_term_description = TRUE;
+        }
+      }
+
+      if ($filter instanceof views_handler_filter_date || !empty($filter->date_handler)) {
+        $bef_datepicker = TRUE;
+        $bef_hidden = TRUE;
+      }
+
+      // The date filter handler extends the numeric filter handler so we have
+      // to exclude it specifically.
+      if ($filter instanceof views_handler_filter_numeric && !($filter instanceof views_handler_filter_date)) {
+        $bef_slider = TRUE;
+        $bef_hidden = TRUE;
+      }
+
+      // Search API extends the more general views_handler_filter rather than
+      // operator-specific classes such as views_handler_filter_in_operator.
+      // Handle those options here.
+      if ($filter instanceof SearchApiViewsHandlerFilterOptions) {
+        $bef_standard = TRUE;
+        $bef_links = TRUE;
+        $bef_hidden = TRUE;
+      }
+      elseif ($filter instanceof SearchApiViewsHandlerFilterDate) {
+        $bef_datepicker = TRUE;
+        if ($filter->options['is_grouped']) {
+          $bef_standard = TRUE;
+          $bef_links = TRUE;
+          $bef_hidden = TRUE;
+        }
+      }
+      // Search API numeric filters support
+      elseif ($filter instanceof SearchApiViewsHandlerFilter && !($filter instanceof SearchApiViewsHandlerFilterFulltext))  {
+        $bef_slider = TRUE;
+      }
+      elseif ($filter instanceof SearchApiViewsHandlerFilterBoolean) {
+        $bef_single = TRUE;
+      }
+
+      // All filters can use the default filter exposed by Views.
+      $display_options = array('default' => t('Default select list'));
+
+      if ($bef_standard) {
+        // Main BEF option: radios/checkboxes.
+        $display_options['bef'] = t('Checkboxes/Radio Buttons');
+      }
+
+      if ($bef_nested) {
+        $display_options['bef_ul'] = t('Nested Checkboxes/Radio Buttons');
+      }
+
+      if ($bef_single) {
+        $display_options['bef_single'] = t('Single on/off checkbox');
+      }
+
+      if ($bef_datepicker) {
+        $display_options['bef_datepicker'] = t('jQuery UI Datepicker');
+      }
+
+      if ($bef_slider) {
+        $display_options['bef_slider'] = t('jQuery UI slider');
+      }
+
+      if ($bef_links) {
+        $display_options['bef_links'] = t('Links');
+      }
+
+      if ($bef_hidden) {
+        $display_options['bef_hidden'] = t('Hidden');
+      }
+
+      $filter_key = $filter->options['is_grouped'] ? 'group_info' : 'expose';
+      $identifier = '"' . $filter->options[$filter_key]['identifier'] . '"';
+      if (!empty($filter->options[$filter_key]['label'])) {
+        $identifier .= t(' (Filter label: "@fl")', array('@fl' => $filter->options[$filter_key]['label']));
+      }
+      $bef_options[$label]['bef_format'] = array(
+        '#type' => 'select',
+        '#title' => t('Display @identifier exposed filter as', array('@identifier' => $identifier)),
+        '#default_value' => $existing[$label]['bef_format'],
+        '#options' => $display_options,
+      );
+
+      if ($bef_slider) {
+        // Fieldset for jQuery slider options.
+        $bef_options[$label]['slider_options'] = array(
+          '#type' => 'fieldset',
+          '#title' => t('Slider options for @identifier', array('@identifier' => $identifier)),
+          '#collapsible' => TRUE,
+          '#collapsed' => FALSE,
+          '#states' => array(
+            'visible' => array(
+              ':input[name="exposed_form_options[bef][' . $label . '][bef_format]"]' => array('value' => 'bef_slider'),
+            ),
+          ),
+        );
+
+        $bef_options[$label]['slider_options']['bef_slider_min'] = array(
+          '#type' => 'textfield',
+          '#title' => t('Range minimum'),
+          '#default_value' => $existing[$label]['slider_options']['bef_slider_min'],
+          '#bef_filter_id' => $label,
+          '#states' => array(
+            'required' => array(
+              ':input[name="exposed_form_options[bef][' . $label . '][bef_format]"]' => array('value' => 'bef_slider'),
+            ),
+          ),
+          '#description' => t('The minimum allowed value for the jQuery range slider. It can be positive, negative, or zero and have up to 11 decimal places.'),
+          '#element_validate' => array('element_validate_number', 'better_exposed_filters_element_validate_slider_required', 'better_exposed_filters_element_validate_slider_min_max'),
+        );
+        $bef_options[$label]['slider_options']['bef_slider_max'] = array(
+          '#type' => 'textfield',
+          '#title' => t('Range maximum'),
+          '#default_value' => $existing[$label]['slider_options']['bef_slider_max'],
+          '#bef_filter_id' => $label,
+          '#states' => array(
+            'required' => array(
+              ':input[name="exposed_form_options[bef][' . $label . '][bef_format]"]' => array('value' => 'bef_slider'),
+            ),
+          ),
+          '#description' => t('The maximum allowed value for the jQuery range slider. It can be positive, negative, or zero and have up to 11 decimal places.'),
+          '#element_validate' => array('element_validate_number', 'better_exposed_filters_element_validate_slider_required', 'better_exposed_filters_element_validate_slider_min_max'),
+        );
+        $bef_options[$label]['slider_options']['bef_slider_step'] = array(
+          '#type' => 'textfield',
+          '#title' => t('Step'),
+          '#default_value' => empty($existing[$label]['slider_options']['bef_slider_step']) ? 1 : $existing[$label]['slider_options']['bef_slider_step'],
+          '#bef_filter_id' => $label,
+          '#states' => array(
+            'required' => array(
+              ':input[name="exposed_form_options[bef][' . $label . '][bef_format]"]' => array('value' => 'bef_slider'),
+            ),
+          ),
+          '#description' => t('Determines the size or amount of each interval or step the slider takes between the min and max.') . '<br />' .
+                            t('The full specified value range of the slider (Range maximum - Range minimum) must be evenly divisible by the step.') . '<br />' .
+                            t('The step must be a positive number of up to 5 decimal places.'),
+          '#element_validate' => array('element_validate_number', 'better_exposed_filters_element_validate_slider_required', 'better_exposed_filters_element_validate_slider_step'),
+        );
+        $bef_options[$label]['slider_options']['bef_slider_animate'] = array(
+          '#type' => 'textfield',
+          '#title' => t('Animate'),
+          '#default_value' => $existing[$label]['slider_options']['bef_slider_animate'],
+          '#bef_filter_id' => $label,
+          '#description' => t('Whether to slide handle smoothly when user click outside handle on the bar. Allowed values are "slow", "normal", "fast" or the number of milliseconds to run the animation (e.g. 1000). If left blank, there will be no animation, the slider will just jump to the new value instantly.'),
+          '#element_validate' => array('better_exposed_filters_element_validate_slider_animate'),
+        );
+        $bef_options[$label]['slider_options']['bef_slider_orientation'] = array(
+          '#type' => 'select',
+          '#title' => t('Orientation'),
+          '#options' => array(
+            'horizontal' => t('Horizontal'),
+            'vertical' => t('Vertical'),
+          ),
+          '#default_value' => $existing[$label]['slider_options']['bef_slider_orientation'],
+          '#bef_filter_id' => $label,
+          '#states' => array(
+            'required' => array(
+              ':input[name="exposed_form_options[bef][' . $label . '][bef_format]"]' => array('value' => 'bef_slider'),
+            ),
+          ),
+          '#description' => t('The orientation of the jQuery range slider.'),
+        );
+      }
+
+      // Fieldset to keep the UI from getting out of hand.
+      $bef_options[$label]['more_options'] = array(
+        '#type' => 'fieldset',
+        '#title' => t('More options for @identifier', array('@identifier' => $identifier)),
+        '#collapsible' => TRUE,
+        '#collapsed' => TRUE,
+      );
+
+      // Select all checkbox.
+      if ($bef_standard) {
+        $bef_options[$label]['more_options']['bef_select_all_none'] = array(
+          '#type' => 'checkbox',
+          '#title' => t('Add select all/none links'),
+          '#default_value' => $existing[$label]['more_options']['bef_select_all_none'],
+          '#disabled' => !$filter->options['expose']['multiple'],
+          '#description' => t(
+            'Add a "Select All/None" link when rendering the exposed filter using
+              checkboxes. If this option is disabled, edit the filter and check the
+              "Allow multiple selections".'
+          ),
+        );
+
+        if ($bef_nested) {
+          $bef_options[$label]['more_options']['bef_select_all_none_nested'] = array(
+            '#type' => 'checkbox',
+            '#title' => t('Add nested all/none selection'),
+            '#default_value' => $existing[$label]['more_options']['bef_select_all_none_nested'],
+            '#disabled' => !$filter->options['expose']['multiple'] || !$filter->options['hierarchy'],
+            '#description' => t(
+              'When a parent checkbox is checked, check all its children. If this option
+                is disabled, edit the filter and check "Allow multiple selections" and
+                edit the filter settings and check "Show hierarchy in dropdown".'
+            ),
+          );
+        }
+
+        if ($bef_term_description) {
+          $bef_options[$label]['more_options']['bef_term_description'] = array(
+            '#type' => 'checkbox',
+            '#title' => t('Include the term description'),
+            '#default_value' => $existing[$label]['more_options']['bef_term_description'],
+            '#description' => t('For taxonomy term filters, includes the term description for each filter option.'),
+            '#states' => array(
+              'visible' => array(
+                ':input[name="exposed_form_options[bef][' . $label . '][bef_format]"]' => array(
+                  array('value' => 'bef'),
+                  array('value' => 'bef_ul'),
+                ),
+              ),
+            ),
+          );
+        }
+
+        // Put filter in collapsible fieldset option.
+        // TODO: expand to all exposed filters.
+        $bef_options[$label]['more_options']['bef_collapsible'] = array(
+          '#type' => 'checkbox',
+          '#title' => t('Make this filter collapsible'),
+          '#default_value' => $existing[$label]['more_options']['bef_collapsible'],
+          '#description' => t(
+            'Puts this filter in a collapsible fieldset'
+          ),
+        );
+      }
+
+      // Allow any filter to be moved into the secondary options fieldset.
+      $bef_options[$label]['more_options']['is_secondary'] = array(
+        '#type' => 'checkbox',
+        '#title' => t('This is a secondary option'),
+        '#default_value' => $existing[$label]['more_options']['is_secondary'],
+        '#states' => array(
+          'visible' => array(
+            ':input[name="exposed_form_options[bef][general][allow_secondary]"]' => array('checked' => TRUE),
+          ),
+        ),
+        '#description' => t('Places this element in the secondary options portion of the exposed form.'),
+      );
+
+      // Allow "Any" label to be overridden.
+      $bef_options[$label]['more_options']['any_label'] = array(
+        '#type' => 'textfield',
+        '#title' => t('Override "Any" option label'),
+        '#default_value' => $existing[$label]['more_options']['any_label'],
+        '#description' => t('Leave blank to use Views\' default value.'),
+      );
+
+      // Build a description option form element -- available to all exposed
+      // filters.
+      $bef_options[$label]['more_options']['bef_filter_description'] = array(
+        '#type' => 'textarea',
+        '#title' => t('Description'),
+        '#default_value' => $existing[$label]['more_options']['bef_filter_description'],
+        '#description' => t('Adds descriptive text to the exposed filter.  This is usually rendered in smaller print under the label or the options. You may use tokens as specified below and in the "Global replacements values" section at the bottom of this page.'),
+      );
+
+      // Allow use placeholder.
+      $bef_options[$label]['more_options']['placeholder'] = array(
+        '#type' => 'select',
+        '#title' => t('Placeholder'),
+        '#options' => array(
+          'disable' => t('Disable'),
+          'enable' => t('Enable'),
+          'custom' => t('Custom text of placeholder'),
+        ),
+        '#default_value' => $existing[$label]['more_options']['placeholder'],
+        '#description' => t('Adds placeholder text to the exposed filter.'),
+      );
+
+      $field_identifier = drupal_clean_css_identifier($filter->field);
+
+      // Build a placeholder text.
+      $bef_options[$label]['more_options']['placeholder_text'] = array(
+        '#type' => 'textfield',
+        '#title' => t('Text placeholder'),
+        '#default_value' => $existing[$label]['more_options']['placeholder_text'],
+        '#dependency' => array('edit-exposed-form-options-bef-' . $field_identifier . '-more-options-placeholder' => array('custom')),
+        '#description' => t('Use this field to rewrite the placeholder text.'),
+      );
+
+      // Add token support to the description field.
+      $bef_options[$label]['more_options']['tokens'] = array(
+        '#title' => t('Replacement patterns'),
+        '#type' => 'fieldset',
+        '#collapsible' => TRUE,
+        '#collapsed' => TRUE,
+      );
+
+      if (!module_exists('token')) {
+        $bef_options[$label]['more_options']['tokens']['no_tokens'] = array(
+          '#markup' => '<p>'
+          . t('Enable the !token module to use replacement values.', array('!token' => l(t('Token'), 'http://drupal.org/project/token')))
+          . '</p>',
+        );
+      }
+      else {
+        // Collect a list of token types that make sense for this filter.
+        $available = array('global_types');
+        if (!empty($filter->options['vocabulary'])) {
+          $available[] = 'vocabulary';
+        }
+        /* @TODO: Other token types? */
+
+        $filter_specific = array_diff($available, array('global_types'));
+        if (empty($filter_specific)) {
+          $bef_options[$label]['more_options']['tokens']['nothing_specific'] = array(
+            '#markup' => '<p>' . t('There are no filter-specific tokens for this filter. See the "Global replacement tokens" at the bottom of this dialog for additional token replacement options.') . '<p>',
+          );
+        }
+        else {
+          $bef_options[$label]['more_options']['tokens']['list'] = array(
+            //'#title' => t('Filter-specific tokens'),
+            '#theme' => 'token_tree',
+            '#token_types' => $filter_specific,
+            '#global_types' => FALSE,
+          );
+        }
+
+        $bef_options[$label]['more_options']['tokens']['available'] = array(
+          // Save us from parsing available tokens again.
+          '#type' => 'value',
+          '#value' => $available,
+        );
+      }
+
+      // Allow rewriting of filter options for any filter.
+      $bef_options[$label]['more_options']['rewrite'] = array(
+        '#title' => t('Rewrite filter options'),
+        '#type' => 'fieldset',
+        '#collapsible' => TRUE,
+        '#collapsed' => TRUE,
+      );
+      $bef_options[$label]['more_options']['rewrite']['filter_rewrite_values'] = array(
+        '#type' => 'textarea',
+        '#title' => t('Rewrite the text displayed'),
+        '#default_value' => $existing[$label]['more_options']['rewrite']['filter_rewrite_values'],
+        '#description' => t('
+          Use this field to rewrite the filter options displayed. Use the format
+          of current_value|replacement_value, one replacement per line. For
+          example: <pre>
+0|Zero
+1|One
+2|Two
+</pre> Leave the replacement value blank to remove an option altogether. If using hierarchical taxonomy filters, do not including leading hyphens in the current value.
+        '),
+      );
+
+      // Add an option to override defaults for the jQuery UI Datepicker.
+      if ($bef_datepicker) {
+        $bef_options[$label]['more_options']['datepicker_options'] = array(
+          '#type' => 'textarea',
+          '#title' => t('jQuery UI Datepicker option'),
+          '#default_value' => $existing[$label]['more_options']['datepicker_options'],
+          '#description' => t('Use this field to override the default options for the Datepicker widget. Options should be in the form of <code>option_name: option_value</code>, one setting per line. For example, to set the days of the week and date format to French: <pre>
+dayNamesMin: [ "Di", "Lu", "Ma", "Me", "Je", "Ve", "Sa" ]
+dateFormat: "dd-mm-yy"
+</pre>More information about datepicker options can be found on the <a href="!link">jQuery UI website</a>. This field is translatable so you can specify different options for different languages. See the <a href="!docs_link">BEF localization documentation</a> for more details.',
+            array(
+              '!link' => 'http://api.jqueryui.com/datepicker/',
+              '!docs_link' => 'https://www.drupal.org/node/2460797',
+            )
+          ),
+        );
+      }
+    }
+    /* Ends: foreach ($filters as $filter) { */
+
+    // Add global token replacements, if available.
+    if (module_exists('token')) {
+      $bef_options['global_replacement_tokens'] = array(
+        '#title' => t('Global replacement patterns'),
+        '#type' => 'fieldset',
+        '#collapsible' => TRUE,
+        '#collapsed' => TRUE,
+      );
+      $bef_options['global_replacement_tokens']['list'] = array(
+        '#theme' => 'token_tree',
+        '#token_types' => array('global_types'),
+      );
+    }
+
+    // Add BEF form elements to the exposed form options form.
+    $form['bef'] = $bef_options;
+  }
+
+  /**
+   * Tweak the exposed filter form to show Better Exposed Filter options.
+   *
+   * @param array $form
+   *   Exposed form array
+   * @param array $form_state
+   *   Current state of form variables
+   */
+  function exposed_form_alter(&$form, &$form_state) {
+    parent::exposed_form_alter($form, $form_state);
+
+    // If we have no visible elements, we don't show the Apply button.
+    $show_apply = FALSE;
+
+    // Collect BEF's Javascript settings, add to Drupal.settings at the end.
+    // Historical note: We used to only add BEF's Javascript when absolutely
+    // needed. Eventually, much of that functionality worked its way into the
+    // normal usage of BEF so that we now turn those Jvaascript behaviors on
+    // by default. (See https://drupal.org/node/1807114).
+    $bef_add_js = TRUE;
+    $bef_js = array(
+      'datepicker' => FALSE,
+      'slider' => FALSE,
+      'settings' => array(),
+    );
+
+    // Some widgets will require additional CSS.
+    $bef_add_css = FALSE;
+
+    // Grab BEF settings.
+    $settings = $this->_bef_get_settings();
+
+    // Allow modules/themes to alter BEF settings before they are passed to the
+    // exposed form widgets.
+    $context['view'] = $this->view;
+    $context['display'] = $this->display;
+    drupal_alter('better_exposed_filters_settings', $settings, $context);
+
+    // Some elements may be placed in a secondary fieldset (eg: "Advanced
+    // search options"). Place this after the exposed filters and before the
+    // rest of the items in the exposed form.
+    if ($allow_secondary = $settings['general']['allow_secondary']) {
+      // If one of the secondary widgets has exposed input, do not collapse
+      // the secondary fieldset.
+      $secondary_collapse = TRUE;
+      $exposed_input = $this->view->get_exposed_input();
+      foreach ($this->display->handler->get_handlers('filter') as $label => $filter) {
+        if (!$filter->options['exposed']) {
+          continue;
+        }
+        if (!empty($exposed_input[$filter->options['expose']['identifier']]) && $settings[$label]['more_options']['is_secondary']) {
+          $secondary_collapse = FALSE;
+          break;
+        }
+      }
+      $secondary = array(
+        '#type' => 'fieldset',
+        '#title' => $settings['general']['secondary_label'],
+        '#collapsible' => TRUE,
+        '#collapsed' => $secondary_collapse,
+        '#theme' => 'secondary_exposed_elements',
+      );
+    }
+
+    /*
+     * Handle exposed sort elements.
+     */
+    if (isset($settings['sort']) && !empty($form['sort_by']) && !empty($form['sort_order'])) {
+      $show_apply = TRUE;
+
+      // If selected, collect all sort-related form elements and put them
+      // in a collapsible fieldset.
+      $collapse = $settings['sort']['advanced']['collapsible']
+        && !empty($settings['sort']['advanced']['collapsible_label']);
+      $sort_elems = array();
+
+      // Check for combined sort_by and sort_order.
+      if ($settings['sort']['advanced']['combine']) {
+        $form_state['#combine_param'] = $settings['sort']['advanced']['combine_param'];
+        // Combine sort_by and sort_order into a single element.
+        $form[$settings['sort']['advanced']['combine_param']] = array(
+          '#type' => 'radios',
+          // Already sanitized by Views.
+          '#title' => $form['sort_by']['#title'],
+        );
+        $options = array();
+        // If using the bef_toggle_links format, determine which links should
+        // not be shown.
+        $hidden_options = array();
+
+        // Add reset sort option at the top of the list.
+        if ($settings['sort']['advanced']['reset']) {
+          $options[' '] = t($settings['sort']['advanced']['reset_label']);
+        }
+        else {
+          $form[$settings['sort']['advanced']['combine_param']]['#default_value'] = '';
+        }
+
+        $selected = '';
+        $used_sort_keys = array();
+        foreach ($form['sort_by']['#options'] as $by_key => $by_val) {
+          foreach ($form['sort_order']['#options'] as $order_key => $order_val) {
+            // Use a space to separate the two keys, we'll unpack them in our
+            // submit handler.
+            $options["$by_key $order_key"] = "$by_val $order_val";
+
+            if ($form['sort_order']['#default_value'] == $order_key && empty($selected)) {
+              // Respect default sort order set in Views. The default sort field
+              // will be the first one if there are multiple sort criteria.
+              $selected = "$by_key $order_key";
+            }
+           if ($settings['sort']['bef_format'] == 'bef_toggle_links') {
+             if (isset($used_sort_keys[$by_key])
+               || (!empty($form_state['input'][$settings['sort']['advanced']['combine_param']]) && $form_state['input'][$settings['sort']['advanced']['combine_param']] == "$by_key $order_key")
+               || (empty($form_state['input'][$settings['sort']['advanced']['combine_param']]) && $selected == "$by_key $order_key")
+             ) {
+                $hidden_options["$by_key $order_key"] = "$by_val $order_val";
+             }
+             else {
+                $used_sort_keys[$by_key] = $order_key;
+             }
+            }
+          }
+        }
+
+        // Rewrite the option values if any were specified.
+        if (!empty($settings['sort']['advanced']['combine_rewrite'])) {
+          $lines = explode("\n", trim($settings['sort']['advanced']['combine_rewrite']));
+          $rewrite = array();
+          foreach ($lines as $line) {
+            list($search, $replace) = explode('|', $line);
+            if (isset($search)) {
+              $rewrite[$search] = $replace;
+            }
+          }
+          foreach ($options as $index => $option) {
+            if (isset($rewrite[$option])) {
+              if ('' == $rewrite[$option]) {
+                unset($options[$index]);
+                if ($selected == $index) {
+                  // Avoid "Illegal choice" errors.
+                  $selected = NULL;
+                }
+              }
+              else {
+                $options[$index] = $rewrite[$option];
+              }
+            }
+          }
+        }
+
+        $form[$settings['sort']['advanced']['combine_param']] = array(
+          '#type' => 'radios',
+          '#options' => $options,
+          '#hidden_options' => $hidden_options,
+          '#settings' => array(
+            'toggle_links' => ($settings['sort']['bef_format'] == 'bef_toggle_links'),
+            'combine_param' => $settings['sort']['advanced']['combine_param'],
+           ),
+          '#default_value' => $selected,
+          // Already sanitized by Views.
+          '#title' => $form['sort_by']['#title'],
+        );
+
+        // Handle display-specific details.
+        switch ($settings['sort']['bef_format']) {
+          case 'bef':
+            $form[$settings['sort']['advanced']['combine_param']]['#prefix'] = '<div class="bef-sort-combined bef-select-as-radios">';
+            $form[$settings['sort']['advanced']['combine_param']]['#suffix'] = '</div>';
+            break;
+
+          case 'bef_links':
+          case 'bef_toggle_links':
+            $bef_add_js = TRUE;
+            $form[$settings['sort']['advanced']['combine_param']]['#theme'] = 'select_as_links';
+
+            // Exposed form displayed as blocks can appear on pages other than
+            // the view results appear on. This can cause problems with
+            // select_as_links options as they will use the wrong path. We
+            // provide a hint for theme functions to correct this.
+            if (!empty($this->display->display_options['exposed_block'])) {
+              $form[$settings['sort']['advanced']['combine_param']]['#bef_path'] = $this->view->get_path();
+            }
+            break;
+
+          case 'default':
+            $form[$settings['sort']['advanced']['combine_param']]['#type'] = 'select';
+            break;
+        }
+
+        // Add our submit routine to process.
+        $form['#submit'][] = 'bef_sort_combine_submit';
+
+        // Pretend we're another exposed form widget.
+        $form['#info']['sort-sort_bef_combine'] = array(
+          'value' => $settings['sort']['advanced']['combine_param'],
+        );
+
+        // Remove the existing sort_by and sort_order elements.
+        unset($form['sort_by']);
+        unset($form['sort_order']);
+
+        if ($collapse) {
+          $sort_elems[] = $settings['sort']['advanced']['combine_param'];
+        }
+      }
+      /* if ($settings['sort']['advanced']['combine']) { } */
+      else {
+        // Leave sort_by and sort_order as separate elements.
+        if ('bef' == $settings['sort']['bef_format']) {
+          $form['sort_by']['#type'] = 'radios';
+          if (empty($form['sort_by']['#process'])) {
+            $form['sort_by']['#process'] = array();
+          }
+          array_unshift($form['sort_by']['#process'], 'form_process_radios');
+          $form['sort_by']['#prefix'] = '<div class="bef-sortby bef-select-as-radios">';
+          $form['sort_by']['#suffix'] = '</div>';
+
+          $form['sort_order']['#type'] = 'radios';
+          if (empty($form['sort_order']['#process'])) {
+            $form['sort_order']['#process'] = array();
+          }
+          array_unshift($form['sort_order']['#process'], 'form_process_radios');
+          $form['sort_order']['#prefix'] = '<div class="bef-sortorder bef-select-as-radios">';
+          $form['sort_order']['#suffix'] = '</div>';
+        }
+        elseif ('bef_links' == $settings['sort']['bef_format']) {
+          $form['sort_by']['#theme'] = 'select_as_links';
+          $form['sort_order']['#theme'] = 'select_as_links';
+
+          // Exposed form displayed as blocks can appear on pages other than the
+          // view results appear on. This can cause problems with
+          // select_as_links options as they will use the wrong path. We provide
+          // a hint for theme functions to correct this.
+          if (!empty($this->display->display_options['exposed_block'])) {
+            $form['sort_by']['#bef_path'] = $form['sort_order']['#bef_path'] = $this->view->get_path();
+          }
+        }
+
+        if ($collapse) {
+          $sort_elems[] = 'sort_by';
+          $sort_elems[] = 'sort_order';
+        }
+
+        // Add reset sort option if selected.
+        if ($settings['sort']['advanced']['reset']) {
+          array_unshift($form['sort_by']['#options'], $settings['sort']['advanced']['reset_label']);
+        }
+      }
+      /* Ends: if ($settings['sort']['advanced']['combine']) { ... } else { */
+
+      if ($collapse) {
+        $form['bef_sort_options'] = array(
+          '#type' => 'fieldset',
+          '#collapsible' => TRUE,
+          '#collapsed' => TRUE,
+          '#title' => $settings['sort']['advanced']['collapsible_label'],
+        );
+        foreach ($sort_elems as $elem) {
+          $form['bef_sort_options'][$elem] = $form[$elem];
+          unset($form[$elem]);
+        }
+      }
+
+      // Check if this is a secondary form element.
+      if ($allow_secondary && $settings['sort']['advanced']['is_secondary']) {
+        foreach (array($settings['sort']['advanced']['combine_param'], 'sort_by', 'sort_order') as $elem) {
+          if (!empty($form[$elem])) {
+            $secondary[$elem] = $form[$elem];
+            unset($form[$elem]);
+          }
+        }
+      }
+    }
+    elseif (isset($settings['sort']) && !empty($form['sort_by'])) {
+      if ('bef_links' == $settings['sort']['bef_format']) {
+        $bef_add_js = TRUE;
+        $form['sort_by']['#theme'] = 'select_as_links';
+
+        // Exposed form displayed as blocks can appear on pages other than
+        // the view results appear on. This can cause problems with
+        // select_as_links options as they will use the wrong path. We
+        // provide a hint for theme functions to correct this.
+        if (!empty($this->display->display_options['exposed_block'])) {
+          $form['sort_by']['#bef_path'] = $this->display->display_options['path'];
+        }
+      }
+    }
+    /* Ends: if (isset($settings['sort'])) { */
+
+    /*
+     * Handle exposed pager elements.
+     */
+    if (isset($settings['pager'])) {
+      switch ($settings['pager']['bef_format']) {
+        case 'bef':
+          $show_apply = TRUE;
+          $form['items_per_page']['#type'] = 'radios';
+          if (empty($form['items_per_page']['#process'])) {
+            $form['items_per_page']['#process'] = array();
+          }
+          array_unshift($form['items_per_page']['#process'], 'form_process_radios');
+          $form['items_per_page']['#prefix'] = '<div class="bef-sortby bef-select-as-radios">';
+          $form['items_per_page']['#suffix'] = '</div>';
+          break;
+
+        case 'bef_links':
+          if (count($form['items_per_page']['#options']) > 1) {
+            $bef_add_js = TRUE;
+            $form['items_per_page']['#theme'] = 'select_as_links';
+            $form['items_per_page']['#items_per_page'] = max($form['items_per_page']['#default_value'], key($form['items_per_page']['#options']));
+
+            // Exposed form displayed as blocks can appear on pages other than
+            // the view results appear on. This can cause problems with
+            // select_as_links options as they will use the wrong path. We
+            // provide a hint for theme functions to correct this.
+            if (!empty($this->display->display_options['exposed_block'])) {
+              $form['items_per_page']['#bef_path'] = $this->view->get_path();
+            }
+          }
+          break;
+      }
+
+      // Check if this is a secondary form element.
+      if ($allow_secondary && $settings['pager']['is_secondary']) {
+        foreach (array('items_per_page', 'offset') as $elem) {
+          if (!empty($form[$elem])) {
+            $secondary[$elem] = $form[$elem];
+            unset($form[$elem]);
+          }
+        }
+      }
+    }
+
+    // Shorthand for all filters in this view.
+    $filters = $form_state['view']->display_handler->handlers['filter'];
+
+    // Go through each saved option looking for Better Exposed Filter settings.
+    foreach ($settings as $label => $options) {
+      // Sanity check: Ensure this filter is an exposed filter.
+      if (empty($filters[$label]) || !$filters[$label]->options['exposed']) {
+        continue;
+      }
+
+      // Form element is designated by the element ID which is user-
+      // configurable.
+      $filter_key = 'filter-' . ($filters[$label]->options['is_grouped'] ? $filters[$label]->options['group_info']['identifier'] : $label);
+      $filter_id = $form['#info'][$filter_key]['value'];
+
+      // Token replacement on BEF Description fields.
+      if (!empty($options['more_options']['bef_filter_description'])) {
+        // Collect replacement data.
+        $data = array();
+        $available = $options['more_options']['tokens']['available'];
+        if (in_array('vocabulary', $available)) {
+          $vocabs = taxonomy_get_vocabularies();
+          $data['vocabulary'] = $vocabs[$filters[$label]->options['vid']];
+        }
+        /* Others? */
+
+        // Replace tokens.
+        $options['more_options']['bef_filter_description'] = token_replace(
+          $options['more_options']['bef_filter_description'], $data
+        );
+        $form[$filter_id]['#bef_description'] = $options['more_options']['bef_filter_description'];
+      }
+
+      // Handle filter value rewrites.
+      if (!empty($options['more_options']['rewrite']['filter_rewrite_values'])) {
+        $lines = explode("\n", trim($options['more_options']['rewrite']['filter_rewrite_values']));
+        $rewrite = array();
+        foreach ($lines as $line) {
+          list($search, $replace) = explode('|', $line);
+          if (isset($search)) {
+            $rewrite[$search] = $replace;
+          }
+        }
+
+        foreach ($form[$filter_id]['#options'] as $index => $option) {
+          $is_object = FALSE;
+          if (is_object($option)) {
+            // Taxonomy filters use objects instead of text.
+            $is_object = TRUE;
+            $option = reset($option->option);
+
+            // Hierarchical filters prepend hyphens to indicate depth. We need
+            // to remove them for comparison, but keep them after replacement to
+            // ensure nested options display correctly.
+            $option = ltrim($option, '-');
+          }
+
+          if (isset($rewrite[$option])) {
+            if ('' == $rewrite[$option]) {
+              unset($form[$filter_id]['#options'][$index]);
+            }
+            else {
+              if ($is_object) {
+                // dsm($form[$filter_id]['#options'][$index]->option, "$filter_id at $index");
+                // Taxonomy term filters are stored as objects. Use str_replace
+                // to ensure that keep hyphens for hierarchical filters.
+                list($tid, $original) = each($form[$filter_id]['#options'][$index]->option);
+                $form[$filter_id]['#options'][$index]->option[$tid] = str_replace($option, $rewrite[$option], $original);
+              }
+              else {
+                $form[$filter_id]['#options'][$index] = $rewrite[$option];
+              }
+            }
+          }
+        }
+      }
+
+      // @TODO: Is this conditional needed anymore after the existing settings
+      // array default values were added?
+      if (!isset($options['bef_format'])) {
+        $options['bef_format'] = '';
+      }
+
+      // These BEF options require a set of given options to work (namely,
+      // $form[$filter_id]['#options'] needs to set). But it is possible to
+      // adjust settings elsewhere in the view that removes these options from
+      // the form (eg: changing a taxonomy term filter from dropdown to
+      // autocomplete). Check for that here and revert to Views' default filter
+      // in those cases.
+      $requires_options = array('bef', 'bef_ul', 'bef_links');
+      if (in_array($options['bef_format'], $requires_options) && !array_key_exists('#options', $form[$filter_id])) {
+        $options['bef_format'] = 'default';
+      }
+
+      switch ($options['bef_format']) {
+        case 'bef_datepicker':
+          $show_apply = TRUE;
+          $bef_add_js = TRUE;
+          $bef_js['datepicker'] = TRUE;
+          $bef_js['datepicker_options'] = array();
+
+          if ((
+            // Single Date API-based input element.
+            isset($form[$filter_id]['value']['#type'])
+              && 'date_text' == $form[$filter_id]['value']['#type']
+          )
+          // Double Date-API-based input elements such as "in-between".
+          || (isset($form[$filter_id]['min']) && isset($form[$filter_id]['max'])
+            && 'date_text' == $form[$filter_id]['min']['#type']
+            && 'date_text' == $form[$filter_id]['max']['#type']
+          )) {
+            /*
+             * Convert Date API formatting to jQuery formatDate formatting.
+             *
+             * @TODO: To be honest, I'm not sure this is needed.  Can you set a
+             * Date API field to accept anything other than Y-m-d? Well, better
+             * safe than sorry...
+             *
+             * @see http://us3.php.net/manual/en/function.date.php
+             * @see http://docs.jquery.com/UI/Datepicker/formatDate
+             *
+             * Array format: PHP date format => jQuery formatDate format
+             * (comments are for the PHP format, lines that are commented out do
+             * not have a jQuery formatDate equivalent, but maybe someday they
+             * will...)
+             */
+            $convert = array(
+              /* Day */
+
+              // Day of the month, 2 digits with leading zeros 01 to 31.
+              'd' => 'dd',
+              // A textual representation of a day, three letters  Mon through
+              // Sun.
+              'D' => 'D',
+              // Day of the month without leading zeros  1 to 31.
+              'j' => 'd',
+              // (lowercase 'L') A full textual representation of the day of the
+              // week Sunday through Saturday.
+              'l' => 'DD',
+              // ISO-8601 numeric representation of the day of the week (added
+              // in PHP 5.1.0) 1 (for Monday) through 7 (for Sunday).
+              // 'N' => ' ',
+              // English ordinal suffix for the day of the month, 2 characters
+              // st, nd, rd or th. Works well with j.
+              // 'S' => ' ',
+              // Numeric representation of the day of the week 0 (for Sunday)
+              // through 6 (for Saturday).
+              // 'w' => ' ',
+              // The day of the year (starting from 0) 0 through 365.
+              'z' => 'o',
+
+              /* Week */
+              // ISO-8601 week number of year, weeks starting on Monday (added
+              // in PHP 4.1.0) Example: 42 (the 42nd week in the year).
+              // 'W' => ' ',
+              //
+              /* Month */
+              // A full textual representation of a month, such as January or
+              // March  January through December.
+              'F' => 'MM',
+              // Numeric representation of a month, with leading zeros 01
+              // through 12.
+              'm' => 'mm',
+              // A short textual representation of a month, three letters  Jan
+              // through Dec.
+              'M' => 'M',
+              // Numeric representation of a month, without leading zeros  1
+              // through 12.
+              'n' => 'm',
+              // Number of days in the given month 28 through 31.
+              // 't' => ' ',
+              //
+              /* Year */
+              // Whether it's a leap year  1 if it is a leap year, 0 otherwise.
+              // 'L' => ' ',
+              // ISO-8601 year number. This has the same value as Y, except that
+              // if the ISO week number (W) belongs to the previous or next
+              // year, that year is used instead. (added in PHP 5.1.0).
+              // Examples: 1999 or 2003.
+              // 'o' => ' ',
+              // A full numeric representation of a year, 4 digits Examples:
+              // 1999 or 2003.
+              'Y' => 'yy',
+              // A two digit representation of a year  Examples: 99 or 03.
+              'y' => 'y',
+
+              /* Time */
+              // Lowercase Ante meridiem and Post meridiem am or pm.
+              // 'a' => ' ',
+              // Uppercase Ante meridiem and Post meridiem AM or PM.
+              // 'A' => ' ',
+              // Swatch Internet time  000 through 999.
+              // 'B' => ' ',
+              // 12-hour format of an hour without leading zeros 1 through 12.
+              // 'g' => ' ',
+              // 24-hour format of an hour without leading zeros 0 through 23.
+              // 'G' => ' ',
+              // 12-hour format of an hour with leading zeros  01 through 12.
+              // 'h' => ' ',
+              // 24-hour format of an hour with leading zeros  00 through 23.
+              // 'H' => ' ',
+              // Minutes with leading zeros  00 to 59.
+              // 'i' => ' ',
+              // Seconds, with leading zeros 00 through 59.
+              // 's' => ' ',
+              // Microseconds (added in PHP 5.2.2) Example: 654321.
+              // 'u' => ' ',
+            );
+
+            $format = '';
+            if (isset($form[$filter_id]['value'])) {
+              $format = $form[$filter_id]['value']['#date_format'];
+              $form[$filter_id]['value']['#attributes']['class'][] = 'bef-datepicker';
+
+              // This element renders via Drupal's FormAPI so we can use
+              // #description instead of passing the description along to BEF's
+              // theme functions.
+              if (!empty($form[$filter_id]['#bef_description'])) {
+                $form[$filter_id]['#description'] = $form[$filter_id]['#bef_description'];
+              }
+            }
+            else {
+              // Both min and max share the same format.
+              $format = $form[$filter_id]['min']['#date_format'];
+              $form[$filter_id]['min']['#attributes']['class'][] = 'bef-datepicker';
+              $form[$filter_id]['max']['#attributes']['class'][] = 'bef-datepicker';
+
+              // Description goes with the second field for in-between filters.
+              if (!empty($form[$filter_id]['#bef_description'])) {
+                $form[$filter_id]['max']['#description'] = $form[$filter_id]['#bef_description'];
+              }
+            }
+            $bef_js['datepicker_options']['dateFormat'] = json_encode(str_replace(array_keys($convert), array_values($convert), $format));
+          }
+          else {
+            $bef_js['datepicker_options']['dateFormat'] = '';
+            /*
+             * Standard Drupal date field.  Depending on the settings, the field
+             * can be at $form[$filter_id] (single field) or
+             * $form[$filter_id][subfield] for two-value date fields or filters
+             * with exposed operators.
+             */
+            $fields = array('min', 'max', 'value');
+            if (count(array_intersect($fields, array_keys($form[$filter_id])))) {
+              $final = '';
+              foreach ($fields as $field) {
+                if (isset($form[$filter_id][$field])) {
+                  $form[$filter_id][$field]['#attributes']['class'][] = 'bef-datepicker';
+                  $final = $field;
+                }
+              }
+              // Description goes with the second field for in-between filters.
+              if (!empty($form[$filter_id]['#bef_description'])) {
+                $form[$filter_id][$final]['#description'] = $form[$filter_id]['#bef_description'];
+              }
+            }
+            else {
+              $form[$filter_id]['#attributes']['class'][] = 'bef-datepicker';
+
+              // This element renders via Drupal's FormAPI so we can use
+              // #description instead of passing the description along to BEF's
+              // theme functions.
+              if (!empty($form[$filter_id]['#bef_description'])) {
+                $form[$filter_id]['#description'] = $form[$filter_id]['#bef_description'];
+              }
+            }
+          }
+
+          if (!empty($options['more_options']['datepicker_options'])) {
+            foreach (explode("\n", $options['more_options']['datepicker_options']) as $setting) {
+              list ($key, $val) = explode(':', trim($setting), 2);
+              // No need to json_encode() this value like we do other datepicker
+              // options as it should already be entered in JSON format in the
+              // UI. While having an admin enter JSON in a text field is not
+              // ideal, it is how the jQueryUI widget documentation shows it in
+              // their examples.
+              $bef_js['datepicker_options'][$key] = $val;
+            }
+          }
+          break;
+
+        case 'bef_slider':
+          $show_apply = TRUE;
+          $bef_add_js = TRUE;
+          $bef_add_css = TRUE;
+          $bef_js['slider'] = TRUE;
+
+          // Add js options for the slider for this filter.
+          $bef_js['slider_options'][$filter_id] = array(
+            'min' => $options['slider_options']['bef_slider_min'],
+            'max' => $options['slider_options']['bef_slider_max'],
+            'step' => $options['slider_options']['bef_slider_step'],
+            'animate' => $options['slider_options']['bef_slider_animate'],
+            'orientation' => $options['slider_options']['bef_slider_orientation'],
+            'id' => drupal_html_id($filter_id),
+            'viewId' => $form['#id'],
+          );
+
+          // We need a wrapping element that covers all elements in the
+          // slider -- not just the text fields, but descriptions as well. When
+          // placed in the secondary fieldset, we lose what we usually get from
+          // the FormAPI.
+          if ($options['more_options']['is_secondary']) {
+            $form[$filter_id]['#prefix'] = '<div class="bef-slider-wrapper">';
+            $form[$filter_id]['#suffix'] = '</div>';
+          }
+
+          // This element renders via Drupal's FormAPI so we can use
+          // #description instead of passing the description along to BEF's
+          // theme functions.
+          if (!empty($form[$filter_id]['#bef_description'])) {
+            $children = element_children($form[$filter_id]);
+            if (count($children) > 1) {
+              // Put the description on the last child or this element.
+              $form[$filter_id][end($children)]['#description'] = $form[$filter_id]['#bef_description'];
+            }
+            else {
+              $form[$filter_id]['#description'] = $form[$filter_id]['#bef_description'];
+            }
+          }
+          break;
+
+        case 'bef_links':
+          $show_apply = TRUE;
+          $bef_add_js = TRUE;
+          $form[$filter_id]['#theme'] = 'select_as_links';
+
+          // Exposed form displayed as blocks can appear on pages other than
+          // the view results appear on. This can cause problems with
+          // select_as_links options as they will use the wrong path. We provide
+          // a hint for theme functions to correct this.
+          if (!empty($this->display->display_options['exposed_block'])) {
+            $form[$filter_id]['#bef_path'] = $this->view->get_path();
+          }
+          break;
+
+        case 'bef_single':
+          $show_apply = TRUE;
+
+          // Use filter label as checkbox label.
+          $form[$filter_id]['#title'] = $filters[$label]->options['expose']['label'];
+          $form[$filter_id]['#description'] = $options['more_options']['bef_filter_description'];
+          $form[$filter_id]['#return_value'] = 1;
+          $form[$filter_id]['#type'] = 'checkbox';
+
+          // Handoff to the theme layer.
+          $form[$filter_id]['#theme'] = 'checkbox';
+          break;
+
+        case 'bef_ul':
+          $show_apply = TRUE;
+
+          $form[$filter_id]['#bef_nested'] = TRUE;
+          /* Intentionally falling through to case 'bef'. */
+
+        case 'bef':
+          $show_apply = TRUE;
+
+          if (empty($form[$filter_id]['#multiple'])) {
+            // Single-select -- display as radio buttons.
+            $form[$filter_id]['#type'] = 'radios';
+            if (empty($form[$filter_id]['#process'])) {
+              $form[$filter_id]['#process'] = array();
+            }
+            array_unshift($form[$filter_id]['#process'], 'form_process_radios');
+
+            // Add description
+            if (!empty($form[$filter_id]['#bef_description'])) {
+              $form[$filter_id]['#description'] = $form[$filter_id]['#bef_description'];
+            }
+
+            // Clean up objects from the options array (happens for taxonomy-
+            // based filters).
+            $opts = $form[$filter_id]['#options'];
+            $form[$filter_id]['#options'] = array();
+            foreach ($opts as $index => $opt) {
+              if (is_object($opt)) {
+                reset($opt->option);
+                list($key, $val) = each($opt->option);
+                $form[$filter_id]['#options'][$key] = $val;
+              }
+              else {
+                $form[$filter_id]['#options'][$index] = $opt;
+              }
+            }
+
+            if (isset($form[$filter_id]['#options']['All'])) {
+              // @TODO: The terms 'All' and 'Any' are customizable in Views.
+              if ($filters[$label]->options['expose']['multiple']) {
+                // Some third-party filter handlers still add the "Any" option
+                // even if this is not an optional filter.  Zap it here if they
+                // do.
+                unset($form[$filter_id]['#options']['All']);
+              }
+              else {
+                // Otherwise, make sure the "Any" text is clean.
+                $form[$filter_id]['#options']['All'] = check_plain($form[$filter_id]['#options']['All']);
+              }
+            }
+
+            // Render as radio buttons or radio buttons in a collapsible
+            // fieldset.
+            if (!empty($options['more_options']['bef_collapsible'])) {
+              // Pass the description and title along in a way such that it
+              // doesn't get rendered as part of the exposed form widget.  We'll
+              // render them as part of the fieldset.
+              if (isset($form['#info'][$filter_key]['label'])) {
+                $form[$filter_id]['#bef_title'] = $form['#info'][$filter_key]['label'];
+                unset($form['#info'][$filter_key]['label']);
+              }
+              if (!empty($options['more_options']['bef_filter_description'])) {
+                $form[$filter_id]['#bef_description'] = $options['more_options']['bef_filter_description'];
+                if (isset($form[$filter_id]['#description'])) {
+                  unset($form[$filter_id]['#description']);
+                }
+              }
+
+              // If the operator is exposed as well, put it inside the fieldset.
+              if ($filters[$label]->options['expose']['use_operator']) {
+                $operator_id = $filters[$label]->options['expose']['operator_id'];
+                $form[$filter_id]['#bef_operator'] = $form[$operator_id];
+                unset ($form[$operator_id]);
+              }
+
+              // Add collapse/expand Javascript and BEF CSS to prevent collapsed
+              // fieldset from disappearing.
+              if (empty($form[$filter_id]['#attached']['js'])) {
+                $form[$filter_id]['#attached']['js'] = array();
+              }
+              $form[$filter_id]['#attached']['js'][] = 'misc/form.js';
+              $form[$filter_id]['#attached']['js'][] = 'misc/collapse.js';
+
+              if (empty($form[$filter_id]['#attached']['css'])) {
+                $form[$filter_id]['#attached']['css'] = array();
+              }
+              $form[$filter_id]['#attached']['css'][] = drupal_get_path('module', 'better_exposed_filters') . '/better_exposed_filters.css';
+
+              // Take care of adding the fieldset in the theme layer.
+              $form[$filter_id]['#theme'] = 'select_as_radios_fieldset';
+            }
+            /* if (!empty($options['more_options']['bef_collapsible'])) { */
+            else {
+              // Render select element as radio buttons.
+              $form[$filter_id]['#attributes']['class'][] = 'bef-select-as-radios';
+              $form[$filter_id]['#theme'] = 'select_as_radios';
+            }
+          }
+          /* if (empty($form[$filter_id]['#multiple'])) { */
+          else {
+            // Render as checkboxes or checkboxes enclosed in a collapsible
+            // fieldset.
+            if (!empty($options['more_options']['bef_collapsible'])) {
+              // Pass the description and title along in a way such that it
+              // doesn't get rendered as part of the exposed form widget.  We'll
+              // render them as part of the fieldset.
+              if (isset($form['#info'][$filter_key]['label'])) {
+                $form[$filter_id]['#bef_title'] = $form['#info'][$filter_key]['label'];
+                unset($form['#info'][$filter_key]['label']);
+              }
+              if (!empty($options['more_options']['bef_filter_description'])) {
+                $form[$filter_id]['#bef_description'] = $options['more_options']['bef_filter_description'];
+                if (isset($form[$filter_id]['#description'])) {
+                  unset($form[$filter_id]['#description']);
+                }
+              }
+
+              // If the operator is exposed as well, put it inside the fieldset.
+              if ($filters[$label]->options['expose']['use_operator']) {
+                $operator_id = $filters[$label]->options['expose']['operator_id'];
+                $form[$filter_id]['#bef_operator'] = $form[$operator_id];
+                unset ($form[$operator_id]);
+              }
+
+              // Add collapse/expand Javascript and BEF CSS to prevent collapsed
+              // fieldset from disappearing.
+              if (empty($form[$filter_id]['#attached']['js'])) {
+                $form[$filter_id]['#attached']['js'] = array();
+              }
+              $form[$filter_id]['#attached']['js'][] = 'misc/form.js';
+              $form[$filter_id]['#attached']['js'][] = 'misc/collapse.js';
+
+              if (empty($form[$filter_id]['#attached']['css'])) {
+                $form[$filter_id]['#attached']['css'] = array();
+              }
+              $form[$filter_id]['#attached']['css'][] = drupal_get_path('module', 'better_exposed_filters') . '/better_exposed_filters.css';
+
+              // Take care of adding the fieldset in the theme layer.
+              $form[$filter_id]['#theme'] = 'select_as_checkboxes_fieldset';
+            }
+            else {
+              $form[$filter_id]['#theme'] = 'select_as_checkboxes';
+            }
+
+            if ($options['more_options']['bef_select_all_none'] || $options['more_options']['bef_select_all_none_nested']) {
+              $bef_add_js = TRUE;
+
+              if ($options['more_options']['bef_select_all_none']) {
+                $form[$filter_id]['#bef_select_all_none'] = TRUE;
+              }
+              if ($options['more_options']['bef_select_all_none_nested']) {
+                $form[$filter_id]['#bef_select_all_none_nested'] = TRUE;
+              }
+            }
+          }
+          /* Ends: if (empty($form[$filter_id]['#multiple'])) { ... } else { */
+
+          // Add term descriptions, if appropriate. Pass along to theme
+          // functions for rendering.
+          if ($options['more_options']['bef_term_description'] && $filters[$filter_id] instanceof views_handler_filter_term_node_tid) {
+            $tids = array();
+            foreach ($form[$filter_id]['#options'] as $tid => $option) {
+              if (is_object($option)) {
+                reset($option->option);
+                list ($tid, ) = each($option->option);
+              }
+              $tids[] = $tid;
+            }
+            $terms = taxonomy_term_load_multiple($tids);
+            foreach ($terms as $tid => $term) {
+              $form[$filter_id]['#bef_term_descriptions'][$tid] = $term->description;
+            }
+          }
+          break;
+
+        case 'bef_hidden':
+          // Hide the label.
+          $form['#info'][$filter_key]['label'] = '';
+          if (empty($form[$filter_id]['#multiple'])) {
+            $form[$filter_id]['#type'] = 'hidden';
+          }
+          else {
+            $form[$filter_id]['#theme'] = 'select_as_hidden';
+          }
+          break;
+
+        default:
+          // Handles functionality for exposed filters that are not rendered
+          // using BEF.
+          $show_apply = TRUE;
+
+          // Add a description to the exposed filter.
+          if (!empty($options['more_options']['bef_filter_description'])) {
+            $children = element_children($form[$filter_id]);
+            if (count($children) > 1) {
+              // A filter may have multiple children if it's a in-between
+              // filter. In this case, put the description on the last item.
+              $form[$filter_id][end($children)]['#description'] = t($options['more_options']['bef_filter_description']);
+            }
+            else {
+              $form[$filter_id]['#description'] = t($options['more_options']['bef_filter_description']);
+            }
+          }
+
+          // Add a placeholder to the exposed filter.
+          if ($options['more_options']['placeholder'] != 'disable') {
+            if ($options['more_options']['placeholder'] == 'custom') {
+              $placeholder_text = $options['more_options']['placeholder_text'];
+            }
+            else {
+              $placeholder_text = $form['#info'][$filter_key]['label'];
+            }
+
+            // Clear label.
+            $form['#info'][$filter_key]['label'] = '';
+
+            // Check type form.
+            if (isset($form[$filter_id]['value'])) {
+              $form[$filter_id]['value']['#attributes']['placeholder'] = $placeholder_text;
+            }
+            else {
+              $form[$filter_id]['#attributes']['placeholder'] = $placeholder_text;
+            }
+          }
+          break;
+      }
+      /* Ends switch ($options['bef_format']) */
+
+      // Override "Any" label, if applicable.
+      if (!empty($options['more_options']['any_label']) && !empty($form[$filter_id]['#options']['All'])) {
+        $form[$filter_id]['#options']['All'] = $options['more_options']['any_label'];
+      }
+
+      // Check if this is a secondary form element.
+      if ($allow_secondary && $settings[$label]['more_options']['is_secondary']) {
+        $identifier = $form['#info'][$filter_key]['value'];
+        if (!empty($form[$identifier])) {
+          // Move from the main form to the secondary options fieldset.
+          $children = element_children($form[$identifier]);
+          $secondary[$identifier] = $form[$identifier];
+          unset($form[$identifier]);
+
+          if (1 < count($children)) {
+            // Some elements can have multiple children, for example min/max
+            // fields on an in-between filter. In those cases Add the label
+            // to the first element.
+            $secondary[$identifier][$children[0]]['#title'] = $form['#info'][$filter_key]['label'];
+            unset($form['#info'][$filter_key]);
+          }
+          else {
+            $secondary[$identifier]['#title'] = $form['#info'][$filter_key]['label'];
+            unset($form['#info'][$filter_key]);
+          }
+
+          // Ensure secondary options respect ordering of filters. Pass this
+          // along to the theme function for rendering. Multiply existing
+          // position by 2 so that we have room to stick the exposed operator
+          // before the filter.
+          if (isset($filters[$identifier]->position)) {
+            $secondary[$identifier]['#bef_position'] = $filters[$identifier]->position * 2;
+          }
+
+          // Move exposed operators with exposed filters
+          if (!empty($filters[$label]->options['expose']['use_operator'])) {
+            $op_id = $filters[$label]->options['expose']['operator_id'];
+            $secondary[$op_id] = $form[$op_id];
+            unset($form[$op_id]);
+
+            // Make sure operators appear just before the filter they are
+            // associated with.
+            if (isset($filters[$identifier]->position)) {
+              $secondary[$op_id]['#bef_position'] = ($filters[$identifier]->position * 2) - 1;
+            }
+          }
+        }
+      }
+    }
+
+    // If our form has no visible filters, hide the submit button.
+    if (!$show_apply) {
+      if (isset($form['submit'])) {
+        $form['submit']['#attributes']['class'][] = 'element-hidden';
+      }
+      if (isset($form['reset'])) {
+        $form['reset']['#attributes']['class'][] = 'element-hidden';
+      }
+    }
+
+    // Add Javascript as needed.
+    if ($bef_add_js) {
+      // Add jQuery UI library code as needed.
+      if ($bef_js['datepicker']) {
+        drupal_add_library('system', 'ui.datepicker');
+      }
+      if ($bef_js['slider']) {
+        drupal_add_library('system', 'ui.slider');
+      }
+
+      drupal_add_js(array('better_exposed_filters' => $bef_js), 'setting');
+      drupal_add_js(drupal_get_path('module', 'better_exposed_filters') . '/better_exposed_filters.js');
+    }
+    if ($bef_add_css) {
+      drupal_add_css(drupal_get_path('module', 'better_exposed_filters') . '/better_exposed_filters.css');
+    }
+
+    // Check for secondary elements.
+    if ($allow_secondary && !empty($secondary)) {
+      // Add secondary elements after regular exposed filter elements.
+      $remaining = array_splice($form, count($form['#info']) + 1);
+      $form['secondary'] = $secondary;
+      $form = array_merge($form, $remaining);
+      $form['#info']['filter-secondary']['value'] = 'secondary';
+    }
+  }
+
+  /**
+   * Fills in missing settings with default values.
+   *
+   * Similar to array_merge_recursive, but later numeric keys overwrites earlier
+   * values.  Use this to set defaults for missing values in a multi-dimensional
+   * array.  Eg:
+   *
+   *  $existing = $this->_bef_set_defaults($defaults, $existing);
+   *
+   * @return array
+   *   The resulting settings array
+   */
+  function _bef_set_defaults() {
+    $count = func_num_args();
+    if (!$count) {
+      return;
+    }
+    elseif (1 == $count) {
+      return (func_get_arg(0));
+    }
+
+    // First array is the default values.
+    $params = func_get_args();
+    $return = array_shift($params);
+
+    // Merge the rest of the arrays onto the default array.
+    foreach ($params as $array) {
+      foreach ($array as $key => $value) {
+        // Numeric keyed values are added (unless already there).
+        if (is_numeric($key) && !in_array($value, $return)) {
+          if (is_array($value)) {
+            $return[] = $this->_bef_set_defaults($return[$key], $value);
+          }
+          else {
+            $return[] = $value;
+          }
+        }
+        // String keyed values are replaced.
+        else {
+          if (isset($return[$key]) && is_array($value) && is_array($return[$key])) {
+            $return[$key] = $this->_bef_set_defaults($return[$key], $value);
+          }
+          else {
+            $return[$key] = $value;
+          }
+        }
+      }
+    }
+    return $return;
+  }
+
+  /**
+   * Updates legacy settings to their current location.
+   *
+   * @param array $settings
+   *   Array of BEF settings.
+   */
+  function _bef_update_legacy_settings($settings) {
+    // There has got to be a better way... But for now, this works.
+    if (isset($settings['sort']['collapsible'])) {
+      $settings['sort']['advanced']['collapsible'] = $settings['sort']['collapsible'];
+      unset($settings['sort']['collapsible']);
+    }
+    if (isset($settings['sort']['collapsible_label'])) {
+      $settings['sort']['advanced']['collapsible_label'] = $settings['sort']['collapsible_label'];
+      unset($settings['sort']['collapsible_label']);
+    }
+    if (isset($settings['sort']['combine'])) {
+      $settings['sort']['advanced']['combine'] = $settings['sort']['combine'];
+      unset($settings['sort']['combine']);
+    }
+    if (isset($settings['sort']['reset'])) {
+      $settings['sort']['advanced']['reset'] = $settings['sort']['reset'];
+      unset($settings['sort']['reset']);
+    }
+    if (isset($settings['sort']['reset_label'])) {
+      $settings['sort']['advanced']['reset_label'] = $settings['sort']['reset_label'];
+      unset($settings['sort']['reset_label']);
+    }
+
+    // Input required was originally stored in Views' options, not in BEF's
+    // settings.
+    if (isset($this->options['input_required'])) {
+      $settings['general']['input_required'] = $this->options['input_required'];
+    }
+    if (isset($this->options['input_required']['text_input_required'])) {
+      $settings['general']['input_required']['text_input_required']['text_input_required'] = $this->options['text_input_required'];
+    }
+    if (isset($this->options['input_required']['text_input_required_format'])) {
+      $settings['general']['input_required']['text_input_required']['text_input_required_format'] = $this->options['text_input_required_format'];
+    }
+
+    return $settings;
+  }
+
+  /**
+   * Returns an array of default or current existing values for BEF settings.
+   *
+   * This helps us as we add new options and prevents a lot of
+   * @code
+   *    if (isset($settings['new_settings'])) { ... }
+   * @endcode
+   * as there will be a default value at all positions in the settings array.
+   * Also updates legacy settings to their new locations via
+   * _bef_update_legacy_settings().
+   *
+   * @return array
+   *   Multi-dimensional settings array.
+   */
+  function _bef_get_settings() {
+    // General, sort, pagers, etc.
+    $defaults = array(
+      'general' => array(
+        'input_required' => FALSE,
+        'text_input_required' => array(
+          'text_input_required' => array(
+            'value' => t('Select any filter and click on Apply to see results'),
+            'format' => filter_default_format(),
+          ),
+        ),
+        'allow_secondary' => FALSE,
+        'secondary_label' => t('Advanced options'),
+      ),
+      'sort' => array(
+        'bef_format' => 'default',
+        'advanced' => array(
+          'collapsible' => FALSE,
+          'collapsible_label' => '',
+          'combine' => FALSE,
+          'combine_param' => 'sort_bef_combine',
+          'combine_rewrite' => '',
+          'reset' => FALSE,
+          'reset_label' => '',
+          'is_secondary' => FALSE,
+        ),
+      ),
+      'pager' => array(
+        'bef_format' => 'default',
+        'is_secondary' => FALSE,
+      ),
+    );
+
+    // Update legacy settings in the exposed form settings form. This
+    // keep us from losing settings when an option is put into an
+    // 'advanced options' fieldset.
+    $current = $this->_bef_update_legacy_settings($this->options['bef']);
+
+    // Collect existing values or use defaults.
+    $settings = $this->_bef_set_defaults($defaults, $current);
+
+    // Filter default values.
+    $filter_defaults = array(
+      'bef_format' => 'default',
+      'more_options' => array(
+        'bef_select_all_none' => FALSE,
+        'bef_select_all_none_nested' => FALSE,
+        'bef_collapsible' => FALSE,
+        'is_secondary' => FALSE,
+        'bef_filter_description' => '',
+        'any_label' => '',
+        'bef_term_description' => FALSE,
+        'placeholder' => 'disable',
+        'placeholder_text' => '',
+        'tokens' => array(
+          'list' => array(),
+          'available' => array(),
+        ),
+        'rewrite' => array(
+          'filter_rewrite_values' => '',
+        ),
+        'datepicker_options' => '',
+      ),
+      'slider_options' => array(
+        'bef_slider_min' => 0,
+        'bef_slider_max' => 99999,
+        'bef_slider_step' => 1,
+        'bef_slider_animate' => '',
+        'bef_slider_orientation' => 'horizontal',
+      ),
+    );
+
+    // Go through each exposed filter and collect settings.
+    foreach ($this->display->handler->get_handlers('filter') as $label => $filter) {
+      if (!$filter->options['exposed']) {
+        continue;
+      }
+
+      // Get existing values or use defaults.
+      $filter_current = isset($this->options['bef'][$label]) ? $this->options['bef'][$label] : array();
+      $settings[$label] = $this->_bef_set_defaults($filter_defaults, $filter_current);
+    }
+    return $settings;
+  }
+
+  /**
+   * Utility function to determine if any filters have been applied.
+   * Borrowed from views_plugin_exposed_form_input_required
+   */
+  function exposed_filter_applied() {
+    static $cache = NULL;
+    if (!isset($cache)) {
+      $view = $this->view;
+      if (is_array($view->filter) && count($view->filter)) {
+        foreach ($view->filter as $filter_id => $filter) {
+          if ($filter->is_exposed()) {
+            $identifier = $filter->options['expose']['identifier'];
+            if (isset($view->exposed_input[$identifier])) {
+              if (!empty($view->exposed_input[$identifier])) {
+                $cache = TRUE;
+                return $cache;
+              }
+            }
+          }
+        }
+      }
+      $cache = FALSE;
+    }
+
+    return $cache;
+  }
+
+  /**
+   * Pre render callback to append the 'no values found' text if input required
+   * options is enabled.
+   */
+  function pre_render($values) {
+    $bef_settings = $this->_bef_get_settings();
+    if (!$this->exposed_filter_applied() && !empty($bef_settings['general']['input_required'])) {
+      $options = array(
+        'id' => 'area',
+        'table' => 'views',
+        'field' => 'area',
+        'label' => '',
+        'relationship' => 'none',
+        'group_type' => 'group',
+        'content' => $bef_settings['general']['text_input_required']['text_input_required']['value'],
+        'format' => $bef_settings['general']['text_input_required']['text_input_required']['format'],
+        'empty' => TRUE,
+      );
+      $handler = views_get_handler('views', 'area', 'area');
+      $handler->init($this->view, $options);
+      $this->display->handler->handlers['empty'] = array(
+        'area' => $handler,
+      );
+      $this->display->handler->set_option('empty', array('text' => $options));
+    }
+  }
+
+  /**
+   * Query callback, intervenes if no filters are applied and input is required.
+   */
+  function query() {
+    $bef_settings = $this->_bef_get_settings();
+    if (!$this->exposed_filter_applied() && !empty($bef_settings['general']['input_required'])) {
+      // We return with no query; this will force the empty text.
+      $this->view->built = TRUE;
+      $this->view->executed = TRUE;
+      $this->view->result = array();
+    }
+    else {
+      parent::query();
+    }
+  }
+
+  function unpack_translatable_options(&$translatable, $storage, $option, $definition, $parents) {
+    foreach ($this->unpack_translatable_keys() as $key) {
+      $value = drupal_array_get_nested_value($this->options, $key);
+      if (!empty($value)) {
+        $translatable[] = array(
+          'value' => $value,
+          'keys' => $key,
+          'format' => NULL,
+        );
+      }
+    }
+  }
+
+  function unpack_translatable_keys() {
+    // Default options.
+    $keys = array(
+      // @TODO: Do we need to give this a better key so it makes more sense in
+      // the localization UI?
+      'value' => array('bef', 'general', 'text_input_required', 'text_input_required', 'value'),
+
+      'general_secondary_label' => array('bef', 'general', 'secondary_label'),
+      'sort_collapsible_label' => array('bef', 'sort', 'advanced', 'collapsible_label'),
+      'sort_combine_rewrite' => array('bef', 'sort', 'advanced', 'combine_rewrite'),
+      'sort_reset_label' => array('bef', 'sort', 'advanced', 'reset_label'),
+    );
+
+    // Exposed filter options.
+    foreach ($this->display->handler->get_handlers('filter') as $label => $filter) {
+      if (!$filter->options['exposed']) {
+        continue;
+      }
+      $keys[$label . '_filter_description'] = array('bef', $label, 'more_options', 'bef_filter_description');
+      $keys[$label . '_any_label'] = array('bef', $label, 'more_options', 'any_label');
+      $keys[$label . '_rewrite_values'] = array('bef', $label, 'more_options', 'rewrite', 'filter_rewrite_values');
+      $keys[$label . '_datepicker_options'] = array('bef', $label, 'more_options', 'datepicker_options');
+    }
+
+    return $keys;
+  }
+
+  function unpack_options(&$storage, $options, $definition = NULL, $all = TRUE, $check = TRUE, $localization_keys = array()) {
+    parent::unpack_options($storage, $options, $definition, $all, $check, $localization_keys);
+
+    // Override the values.
+    foreach ($this->localization_keys as $key => $parents) {
+      $parent = end($parents);
+      $value = isset($options[$parent]) ? $options[$parent] : NULL;
+
+      // Don't localize strings during editing. When editing, we need to work with
+      // the original data, not the translated version.
+      if (empty($this->view->editing) && !empty($value)) {
+        if (!empty($this->view) && $this->view->is_translatable()) {
+          // Allow other modules to make changes to the string before it's
+          // sent for translation.
+          // The $keys array is built from the bef form array structure.
+          $format = NULL;
+          $translation_data = array(
+            'value' => $value,
+            'format' => $format,
+            'keys' => $parents,
+          );
+          $storage[$parent] = $this->view->localization_plugin->translate($translation_data);
+        }
+        // Otherwise, this is a code-based string, so we can use t().
+        else {
+          $storage[$parent] = t($value);
+        }
+      }
+      else if (!empty($value)) {
+        $storage[$parent] = $value;
+      }
+    }
+  }
+}
diff --git a/profiles/wcm_base/modules/contrib/better_exposed_filters/tests/bef_test_content/bef_test_content.features.field_base.inc b/profiles/wcm_base/modules/contrib/better_exposed_filters/tests/bef_test_content/bef_test_content.features.field_base.inc
new file mode 100644
index 0000000000000000000000000000000000000000..e73b0f52a577c8ac265fd19f931b70c7e6f44390
--- /dev/null
+++ b/profiles/wcm_base/modules/contrib/better_exposed_filters/tests/bef_test_content/bef_test_content.features.field_base.inc
@@ -0,0 +1,184 @@
+<?php
+/**
+ * @file
+ * bef_test_content.features.field_base.inc
+ */
+
+/**
+ * Implements hook_field_default_field_bases().
+ */
+function bef_test_content_field_default_field_bases() {
+  $field_bases = array();
+
+  // Exported field_base: 'field_bef_test_body'
+  $field_bases['field_bef_test_body'] = array(
+    'active' => 1,
+    'cardinality' => 1,
+    'deleted' => 0,
+    'entity_types' => array(),
+    'field_name' => 'field_bef_test_body',
+    'indexes' => array(
+      'format' => array(
+        0 => 'format',
+      ),
+    ),
+    'locked' => 0,
+    'module' => 'text',
+    'settings' => array(),
+    'translatable' => 0,
+    'type' => 'text_with_summary',
+  );
+
+  // Exported field_base: 'field_bef_test_date'
+  $field_bases['field_bef_test_date'] = array(
+    'active' => 1,
+    'cardinality' => 1,
+    'deleted' => 0,
+    'entity_types' => array(),
+    'field_name' => 'field_bef_test_date',
+    'indexes' => array(),
+    'locked' => 0,
+    'module' => 'date',
+    'settings' => array(
+      'cache_count' => 4,
+      'cache_enabled' => 0,
+      'granularity' => array(
+        'day' => 'day',
+        'hour' => 0,
+        'minute' => 0,
+        'month' => 'month',
+        'second' => 0,
+        'year' => 'year',
+      ),
+      'timezone_db' => '',
+      'todate' => '',
+      'tz_handling' => 'none',
+    ),
+    'translatable' => 0,
+    'type' => 'datetime',
+  );
+
+  // Exported field_base: 'field_bef_test_integer'
+  $field_bases['field_bef_test_integer'] = array(
+    'active' => 1,
+    'cardinality' => 1,
+    'deleted' => 0,
+    'entity_types' => array(),
+    'field_name' => 'field_bef_test_integer',
+    'indexes' => array(),
+    'locked' => 0,
+    'module' => 'number',
+    'settings' => array(),
+    'translatable' => 0,
+    'type' => 'number_integer',
+  );
+
+  // Exported field_base: 'field_bef_test_letters'
+  $field_bases['field_bef_test_letters'] = array(
+    'active' => 1,
+    'cardinality' => -1,
+    'deleted' => 0,
+    'entity_types' => array(),
+    'field_name' => 'field_bef_test_letters',
+    'indexes' => array(
+      'value' => array(
+        0 => 'value',
+      ),
+    ),
+    'locked' => 0,
+    'module' => 'list',
+    'settings' => array(
+      'allowed_values' => array(
+        'a' => 'Aardvark',
+        'b' => 'Bumble-Bee',
+        'c' => ' Caterpillar',
+        'd' => 'Devil, Tasmanian',
+        'e' => 'Elephant',
+        'f' => 'Frigatebird',
+        'g' => 'Giraffe',
+        'h' => 'Horse',
+      ),
+      'allowed_values_function' => '',
+    ),
+    'translatable' => 0,
+    'type' => 'list_text',
+  );
+
+  // Exported field_base: 'field_bef_test_location'
+  $field_bases['field_bef_test_location'] = array(
+    'active' => 1,
+    'cardinality' => 1,
+    'deleted' => 0,
+    'entity_types' => array(),
+    'field_name' => 'field_bef_test_location',
+    'indexes' => array(
+      'tid' => array(
+        0 => 'tid',
+      ),
+    ),
+    'locked' => 0,
+    'module' => 'taxonomy',
+    'settings' => array(
+      'allowed_values' => array(
+        0 => array(
+          'vocabulary' => 'location',
+          'parent' => 0,
+        ),
+      ),
+    ),
+    'translatable' => 0,
+    'type' => 'taxonomy_term_reference',
+  );
+
+  // Exported field_base: 'field_bef_test_numbers'
+  $field_bases['field_bef_test_numbers'] = array(
+    'active' => 1,
+    'cardinality' => 1,
+    'deleted' => 0,
+    'entity_types' => array(),
+    'field_name' => 'field_bef_test_numbers',
+    'indexes' => array(
+      'value' => array(
+        0 => 'value',
+      ),
+    ),
+    'locked' => 0,
+    'module' => 'list',
+    'settings' => array(
+      'allowed_values' => array(
+        1 => 'One',
+        2 => 'Two',
+        3 => 'Three',
+        4 => 'Four',
+        5 => 'Five',
+        6 => 'Six',
+        7 => 'Seven',
+        8 => 'Eight',
+        9 => 'Nine',
+        10 => 'Ten',
+      ),
+      'allowed_values_function' => '',
+    ),
+    'translatable' => 0,
+    'type' => 'list_integer',
+  );
+
+  // Exported field_base: 'field_bef_test_price'
+  $field_bases['field_bef_test_price'] = array(
+    'active' => 1,
+    'cardinality' => 1,
+    'deleted' => 0,
+    'entity_types' => array(),
+    'field_name' => 'field_bef_test_price',
+    'indexes' => array(),
+    'locked' => 0,
+    'module' => 'number',
+    'settings' => array(
+      'decimal_separator' => '.',
+    ),
+    'translatable' => 0,
+    'type' => 'number_float',
+  );
+
+  return $field_bases;
+}
diff --git a/profiles/wcm_base/modules/contrib/better_exposed_filters/tests/bef_test_content/bef_test_content.features.field_instance.inc b/profiles/wcm_base/modules/contrib/better_exposed_filters/tests/bef_test_content/bef_test_content.features.field_instance.inc
new file mode 100644
index 0000000000000000000000000000000000000000..72b897b95e5e9620e61238ce91579766b6d9a44c
--- /dev/null
+++ b/profiles/wcm_base/modules/contrib/better_exposed_filters/tests/bef_test_content/bef_test_content.features.field_instance.inc
@@ -0,0 +1,322 @@
+<?php
+/**
+ * @file
+ * bef_test_content.features.field_instance.inc
+ */
+
+/**
+ * Implements hook_field_default_field_instances().
+ */
+function bef_test_content_field_default_field_instances() {
+  $field_instances = array();
+
+  // Exported field_instance: 'node-bef_test-field_bef_test_body'
+  $field_instances['node-bef_test-field_bef_test_body'] = array(
+    'bundle' => 'bef_test',
+    'default_value' => NULL,
+    'deleted' => 0,
+    'description' => '',
+    'display' => array(
+      'default' => array(
+        'label' => 'above',
+        'module' => 'text',
+        'settings' => array(),
+        'type' => 'text_default',
+        'weight' => 12,
+      ),
+      'teaser' => array(
+        'label' => 'above',
+        'settings' => array(),
+        'type' => 'hidden',
+        'weight' => 0,
+      ),
+    ),
+    'entity_type' => 'node',
+    'field_name' => 'field_bef_test_body',
+    'label' => 'Body',
+    'required' => 0,
+    'settings' => array(
+      'display_summary' => 0,
+      'text_processing' => 1,
+      'user_register_form' => FALSE,
+    ),
+    'widget' => array(
+      'active' => 1,
+      'module' => 'text',
+      'settings' => array(
+        'rows' => 20,
+        'summary_rows' => 5,
+      ),
+      'type' => 'text_textarea_with_summary',
+      'weight' => 7,
+    ),
+  );
+
+  // Exported field_instance: 'node-bef_test-field_bef_test_date'
+  $field_instances['node-bef_test-field_bef_test_date'] = array(
+    'bundle' => 'bef_test',
+    'deleted' => 0,
+    'description' => '',
+    'display' => array(
+      'default' => array(
+        'label' => 'above',
+        'module' => 'date',
+        'settings' => array(
+          'format_type' => 'long',
+          'fromto' => 'both',
+          'multiple_from' => '',
+          'multiple_number' => '',
+          'multiple_to' => '',
+        ),
+        'type' => 'date_default',
+        'weight' => 11,
+      ),
+      'teaser' => array(
+        'label' => 'above',
+        'settings' => array(),
+        'type' => 'hidden',
+        'weight' => 0,
+      ),
+    ),
+    'entity_type' => 'node',
+    'field_name' => 'field_bef_test_date',
+    'label' => 'Date',
+    'required' => 0,
+    'settings' => array(
+      'default_value' => 'now',
+      'default_value2' => 'same',
+      'default_value_code' => '',
+      'default_value_code2' => '',
+      'user_register_form' => FALSE,
+    ),
+    'widget' => array(
+      'active' => 1,
+      'module' => 'date',
+      'settings' => array(
+        'increment' => 15,
+        'input_format' => 'm/d/Y - H:i:s',
+        'input_format_custom' => '',
+        'label_position' => 'above',
+        'text_parts' => array(),
+        'year_range' => '-3:+3',
+      ),
+      'type' => 'date_text',
+      'weight' => 6,
+    ),
+  );
+
+  // Exported field_instance: 'node-bef_test-field_bef_test_integer'
+  $field_instances['node-bef_test-field_bef_test_integer'] = array(
+    'bundle' => 'bef_test',
+    'default_value' => NULL,
+    'deleted' => 0,
+    'description' => '',
+    'display' => array(
+      'default' => array(
+        'label' => 'above',
+        'module' => 'number',
+        'settings' => array(
+          'decimal_separator' => '.',
+          'prefix_suffix' => TRUE,
+          'scale' => 0,
+          'thousand_separator' => ' ',
+        ),
+        'type' => 'number_integer',
+        'weight' => 10,
+      ),
+      'teaser' => array(
+        'label' => 'above',
+        'settings' => array(),
+        'type' => 'hidden',
+        'weight' => 0,
+      ),
+    ),
+    'entity_type' => 'node',
+    'field_name' => 'field_bef_test_integer',
+    'label' => 'Integer',
+    'required' => 0,
+    'settings' => array(
+      'max' => 5000,
+      'min' => 100,
+      'prefix' => '',
+      'suffix' => '',
+      'user_register_form' => FALSE,
+    ),
+    'widget' => array(
+      'active' => 0,
+      'module' => 'number',
+      'settings' => array(),
+      'type' => 'number',
+      'weight' => 4,
+    ),
+  );
+
+  // Exported field_instance: 'node-bef_test-field_bef_test_letters'
+  $field_instances['node-bef_test-field_bef_test_letters'] = array(
+    'bundle' => 'bef_test',
+    'default_value' => NULL,
+    'deleted' => 0,
+    'description' => '',
+    'display' => array(
+      'default' => array(
+        'label' => 'above',
+        'module' => 'list',
+        'settings' => array(),
+        'type' => 'list_default',
+        'weight' => 7,
+      ),
+      'teaser' => array(
+        'label' => 'above',
+        'settings' => array(),
+        'type' => 'hidden',
+        'weight' => 0,
+      ),
+    ),
+    'entity_type' => 'node',
+    'field_name' => 'field_bef_test_letters',
+    'label' => 'Letters',
+    'required' => 0,
+    'settings' => array(
+      'user_register_form' => FALSE,
+    ),
+    'widget' => array(
+      'active' => 1,
+      'module' => 'options',
+      'settings' => array(),
+      'type' => 'options_buttons',
+      'weight' => 1,
+    ),
+  );
+
+  // Exported field_instance: 'node-bef_test-field_bef_test_location'
+  $field_instances['node-bef_test-field_bef_test_location'] = array(
+    'bundle' => 'bef_test',
+    'default_value' => NULL,
+    'deleted' => 0,
+    'description' => '',
+    'display' => array(
+      'default' => array(
+        'label' => 'above',
+        'module' => 'taxonomy',
+        'settings' => array(),
+        'type' => 'taxonomy_term_reference_link',
+        'weight' => 9,
+      ),
+      'teaser' => array(
+        'label' => 'above',
+        'settings' => array(),
+        'type' => 'hidden',
+        'weight' => 0,
+      ),
+    ),
+    'entity_type' => 'node',
+    'field_name' => 'field_bef_test_location',
+    'label' => 'Location',
+    'required' => 0,
+    'settings' => array(
+      'user_register_form' => FALSE,
+    ),
+    'widget' => array(
+      'active' => 1,
+      'module' => 'options',
+      'settings' => array(),
+      'type' => 'options_buttons',
+      'weight' => 3,
+    ),
+  );
+
+  // Exported field_instance: 'node-bef_test-field_bef_test_numbers'
+  $field_instances['node-bef_test-field_bef_test_numbers'] = array(
+    'bundle' => 'bef_test',
+    'default_value' => NULL,
+    'deleted' => 0,
+    'description' => '',
+    'display' => array(
+      'default' => array(
+        'label' => 'above',
+        'module' => 'list',
+        'settings' => array(),
+        'type' => 'list_default',
+        'weight' => 8,
+      ),
+      'teaser' => array(
+        'label' => 'above',
+        'settings' => array(),
+        'type' => 'hidden',
+        'weight' => 0,
+      ),
+    ),
+    'entity_type' => 'node',
+    'field_name' => 'field_bef_test_numbers',
+    'label' => 'Numbers',
+    'required' => 0,
+    'settings' => array(
+      'user_register_form' => FALSE,
+    ),
+    'widget' => array(
+      'active' => 1,
+      'module' => 'options',
+      'settings' => array(),
+      'type' => 'options_select',
+      'weight' => 2,
+    ),
+  );
+
+  // Exported field_instance: 'node-bef_test-field_bef_test_price'
+  $field_instances['node-bef_test-field_bef_test_price'] = array(
+    'bundle' => 'bef_test',
+    'default_value' => NULL,
+    'deleted' => 0,
+    'description' => '',
+    'display' => array(
+      'default' => array(
+        'label' => 'above',
+        'module' => 'number',
+        'settings' => array(
+          'decimal_separator' => '.',
+          'prefix_suffix' => TRUE,
+          'scale' => 2,
+          'thousand_separator' => ' ',
+        ),
+        'type' => 'number_decimal',
+        'weight' => 13,
+      ),
+      'teaser' => array(
+        'label' => 'above',
+        'settings' => array(),
+        'type' => 'hidden',
+        'weight' => 0,
+      ),
+    ),
+    'entity_type' => 'node',
+    'field_name' => 'field_bef_test_price',
+    'label' => 'Price',
+    'required' => 0,
+    'settings' => array(
+      'max' => '',
+      'min' => '',
+      'prefix' => '$',
+      'suffix' => '',
+      'user_register_form' => FALSE,
+    ),
+    'widget' => array(
+      'active' => 0,
+      'module' => 'number',
+      'settings' => array(),
+      'type' => 'number',
+      'weight' => 5,
+    ),
+  );
+
+  // Translatables
+  // Included for use with string extractors like potx.
+  t('Body');
+  t('Date');
+  t('Integer');
+  t('Letters');
+  t('Location');
+  t('Numbers');
+  t('Price');
+
+  return $field_instances;
+}
diff --git a/profiles/wcm_base/modules/contrib/better_exposed_filters/tests/bef_test_content/bef_test_content.features.inc b/profiles/wcm_base/modules/contrib/better_exposed_filters/tests/bef_test_content/bef_test_content.features.inc
new file mode 100644
index 0000000000000000000000000000000000000000..ff5d2757382a42d9f86d19552640e8d7dcad6848
--- /dev/null
+++ b/profiles/wcm_base/modules/contrib/better_exposed_filters/tests/bef_test_content/bef_test_content.features.inc
@@ -0,0 +1,30 @@
+<?php
+/**
+ * @file
+ * bef_test_content.features.inc
+ */
+
+/**
+ * Implements hook_views_api().
+ */
+function bef_test_content_views_api($module = NULL, $api = NULL) {
+  return array("api" => "3.0");
+}
+
+/**
+ * Implements hook_node_info().
+ */
+function bef_test_content_node_info() {
+  $items = array(
+    'bef_test' => array(
+      'name' => t('bef_test'),
+      'base' => 'node_content',
+      'description' => '',
+      'has_title' => '1',
+      'title_label' => t('Title'),
+      'help' => '',
+    ),
+  );
+  drupal_alter('node_info', $items);
+  return $items;
+}
diff --git a/profiles/wcm_base/modules/contrib/better_exposed_filters/tests/bef_test_content/bef_test_content.features.taxonomy.inc b/profiles/wcm_base/modules/contrib/better_exposed_filters/tests/bef_test_content/bef_test_content.features.taxonomy.inc
new file mode 100644
index 0000000000000000000000000000000000000000..bd27d43014fc25ea3074943b4b8e495d2ec87096
--- /dev/null
+++ b/profiles/wcm_base/modules/contrib/better_exposed_filters/tests/bef_test_content/bef_test_content.features.taxonomy.inc
@@ -0,0 +1,36 @@
+<?php
+/**
+ * @file
+ * bef_test_content.features.taxonomy.inc
+ */
+
+/**
+ * Implements hook_taxonomy_default_vocabularies().
+ */
+function bef_test_content_taxonomy_default_vocabularies() {
+  return array(
+    'location' => array(
+      'name' => 'Location',
+      'machine_name' => 'location',
+      'description' => '',
+      'hierarchy' => 1,
+      'module' => 'taxonomy',
+      'weight' => 0,
+      'rdf_mapping' => array(
+        'rdftype' => array(
+          0 => 'skos:ConceptScheme',
+        ),
+        'name' => array(
+          'predicates' => array(
+            0 => 'dc:title',
+          ),
+        ),
+        'description' => array(
+          'predicates' => array(
+            0 => 'rdfs:comment',
+          ),
+        ),
+      ),
+    ),
+  );
+}
diff --git a/profiles/wcm_base/modules/contrib/better_exposed_filters/tests/bef_test_content/bef_test_content.info b/profiles/wcm_base/modules/contrib/better_exposed_filters/tests/bef_test_content/bef_test_content.info
new file mode 100644
index 0000000000000000000000000000000000000000..799503e35109c0dfe9fbb5d1ab3bc08730ae2c55
--- /dev/null
+++ b/profiles/wcm_base/modules/contrib/better_exposed_filters/tests/bef_test_content/bef_test_content.info
@@ -0,0 +1,49 @@
+name = BEF Test Content
+description = Content and Views for testing Better Exposed Filters.
+core = 7.x
+package = BEF Tests
+dependencies[] = better_exposed_filters
+dependencies[] = date
+dependencies[] = features
+dependencies[] = list
+dependencies[] = number
+dependencies[] = taxonomy
+dependencies[] = text
+dependencies[] = views
+dependencies[] = views_content
+features[ctools][] = views:views_default:3.0
+features[features_api][] = api:2
+features[field_base][] = field_bef_test_body
+features[field_base][] = field_bef_test_date
+features[field_base][] = field_bef_test_integer
+features[field_base][] = field_bef_test_letters
+features[field_base][] = field_bef_test_location
+features[field_base][] = field_bef_test_numbers
+features[field_base][] = field_bef_test_price
+features[field_instance][] = node-bef_test-field_bef_test_body
+features[field_instance][] = node-bef_test-field_bef_test_date
+features[field_instance][] = node-bef_test-field_bef_test_integer
+features[field_instance][] = node-bef_test-field_bef_test_letters
+features[field_instance][] = node-bef_test-field_bef_test_location
+features[field_instance][] = node-bef_test-field_bef_test_numbers
+features[field_instance][] = node-bef_test-field_bef_test_price
+features[node][] = bef_test
+features[taxonomy][] = location
+features[views_view][] = bef_test_view
+features_exclude[dependencies][ctools] = ctools
+features_exclude[dependencies][options] = options
+features_exclude[field][node-bef_test-body] = node-bef_test-body
+features_exclude[field][node-bef_test-field_letters] = node-bef_test-field_letters
+features_exclude[field][node-bef_test-field_numbers] = node-bef_test-field_numbers
+features_exclude[field][node-bef_test-field_location] = node-bef_test-field_location
+features_exclude[field][node-bef_test-field_integer] = node-bef_test-field_integer
+features_exclude[field][node-bef_test-field_price] = node-bef_test-field_price
+features_exclude[field][node-bef_test-field_date] = node-bef_test-field_date
+hidden = 1
+
+; Information added by Drupal.org packaging script on 2015-08-16
+version = "7.x-3.2+36-dev"
+core = "7.x"
+project = "better_exposed_filters"
+datestamp = "1439736843"
+
diff --git a/profiles/wcm_base/modules/contrib/better_exposed_filters/tests/bef_test_content/bef_test_content.module b/profiles/wcm_base/modules/contrib/better_exposed_filters/tests/bef_test_content/bef_test_content.module
new file mode 100644
index 0000000000000000000000000000000000000000..785a248223ca0d7d960ba1a94a8277d45b8df5e9
--- /dev/null
+++ b/profiles/wcm_base/modules/contrib/better_exposed_filters/tests/bef_test_content/bef_test_content.module
@@ -0,0 +1,7 @@
+<?php
+/**
+ * @file
+ * Code for the BEF Test Content feature.
+ */
+
+include_once 'bef_test_content.features.inc';
diff --git a/profiles/wcm_base/modules/contrib/better_exposed_filters/tests/bef_test_content/bef_test_content.views_default.inc b/profiles/wcm_base/modules/contrib/better_exposed_filters/tests/bef_test_content/bef_test_content.views_default.inc
new file mode 100644
index 0000000000000000000000000000000000000000..4e5e7736d6c3873ba237c09ad1041d5dc40c6073
--- /dev/null
+++ b/profiles/wcm_base/modules/contrib/better_exposed_filters/tests/bef_test_content/bef_test_content.views_default.inc
@@ -0,0 +1,269 @@
+<?php
+/**
+ * @file
+ * bef_test_content.views_default.inc
+ */
+
+/**
+ * Implements hook_views_default_views().
+ */
+function bef_test_content_views_default_views() {
+  $export = array();
+
+  $view = new view();
+  $view->name = 'bef_test_view';
+  $view->description = '';
+  $view->tag = 'default';
+  $view->base_table = 'node';
+  $view->human_name = 'BEF Test 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['title'] = 'BEF Test View';
+  $handler->display->display_options['use_more_always'] = FALSE;
+  $handler->display->display_options['access']['type'] = 'perm';
+  $handler->display->display_options['cache']['type'] = 'none';
+  $handler->display->display_options['query']['type'] = 'views_query';
+  $handler->display->display_options['exposed_form']['type'] = 'better_exposed_filters';
+  $handler->display->display_options['exposed_form']['options']['bef'] = array(
+    'general' => array(
+      'allow_secondary' => 0,
+      'secondary_label' => 'Advanced options',
+    ),
+    'sort' => array(
+      'bef_format' => 'bef_toggle_links',
+      'advanced' => array(
+        'collapsible' => 0,
+        'collapsible_label' => 'Sort options',
+        'combine' => 1,
+        'combine_rewrite' => '',
+        'reset' => 0,
+        'reset_label' => '',
+        'is_secondary' => 0,
+      ),
+    ),
+    'pager' => array(
+      'bef_format' => 'bef_links',
+      'is_secondary' => 0,
+    ),
+    'field_bef_test_letters_value' => array(
+      'bef_format' => 'default',
+      'more_options' => array(
+        'bef_select_all_none' => FALSE,
+        'bef_collapsible' => 0,
+        'is_secondary' => 0,
+        'any_label' => 'Any Letter',
+        'bef_filter_description' => '',
+        'tokens' => array(
+          'available' => array(
+            0 => 'global_types',
+          ),
+        ),
+        'rewrite' => array(
+          'filter_rewrite_values' => '',
+        ),
+      ),
+    ),
+    'field_bef_test_numbers_value' => array(
+      'bef_format' => 'default',
+      'more_options' => array(
+        'bef_select_all_none' => FALSE,
+        'bef_collapsible' => 0,
+        'is_secondary' => 0,
+        'any_label' => 'Any Number',
+        'bef_filter_description' => '',
+        'tokens' => array(
+          'available' => array(
+            0 => 'global_types',
+          ),
+        ),
+        'rewrite' => array(
+          'filter_rewrite_values' => '',
+        ),
+      ),
+    ),
+    'type' => array(
+      'bef_format' => 'default',
+      'more_options' => array(
+        'bef_select_all_none' => FALSE,
+        'bef_collapsible' => 0,
+        'is_secondary' => 0,
+        'any_label' => 'Any Type',
+        'bef_filter_description' => '',
+        'tokens' => array(
+          'available' => array(
+            0 => 'global_types',
+          ),
+        ),
+        'rewrite' => array(
+          'filter_rewrite_values' => '',
+        ),
+      ),
+    ),
+    'field_bef_test_location_tid' => array(
+      'bef_format' => 'default',
+      'more_options' => array(
+        'bef_select_all_none' => FALSE,
+        'bef_select_all_none_nested' => FALSE,
+        'bef_collapsible' => 0,
+        'is_secondary' => 0,
+        'any_label' => 'Anywhere',
+        'bef_filter_description' => '',
+        'tokens' => array(
+          'available' => array(
+            0 => 'global_types',
+          ),
+        ),
+        'rewrite' => array(
+          'filter_rewrite_values' => '',
+        ),
+      ),
+    ),
+  );
+  $handler->display->display_options['pager']['type'] = 'full';
+  $handler->display->display_options['pager']['options']['items_per_page'] = '10';
+  $handler->display->display_options['pager']['options']['offset'] = '0';
+  $handler->display->display_options['pager']['options']['id'] = '0';
+  $handler->display->display_options['pager']['options']['quantity'] = '9';
+  $handler->display->display_options['pager']['options']['expose']['items_per_page'] = TRUE;
+  $handler->display->display_options['pager']['options']['expose']['items_per_page_label'] = 'Yo! Show me';
+  $handler->display->display_options['pager']['options']['expose']['items_per_page_options_all'] = TRUE;
+  $handler->display->display_options['pager']['options']['expose']['items_per_page_options_all_label'] = 'All dem things!';
+  $handler->display->display_options['style_plugin'] = 'table';
+  $handler->display->display_options['style_options']['columns'] = array(
+    'title' => 'title',
+    'field_letters' => 'field_letters',
+    'field_numbers' => 'field_numbers',
+  );
+  $handler->display->display_options['style_options']['default'] = '-1';
+  $handler->display->display_options['style_options']['info'] = array(
+    'title' => array(
+      'sortable' => 0,
+      'default_sort_order' => 'asc',
+      'align' => '',
+      'separator' => '',
+      'empty_column' => 0,
+    ),
+    'field_letters' => array(
+      'align' => '',
+      'separator' => '',
+      'empty_column' => 0,
+    ),
+    'field_numbers' => array(
+      'sortable' => 0,
+      'default_sort_order' => 'asc',
+      'align' => '',
+      'separator' => '',
+      'empty_column' => 0,
+    ),
+  );
+  /* Field: Content: Title */
+  $handler->display->display_options['fields']['title']['id'] = 'title';
+  $handler->display->display_options['fields']['title']['table'] = 'node';
+  $handler->display->display_options['fields']['title']['field'] = 'title';
+  $handler->display->display_options['fields']['title']['label'] = '';
+  $handler->display->display_options['fields']['title']['alter']['word_boundary'] = FALSE;
+  $handler->display->display_options['fields']['title']['alter']['ellipsis'] = FALSE;
+  /* Field: Content: Post date */
+  $handler->display->display_options['fields']['created']['id'] = 'created';
+  $handler->display->display_options['fields']['created']['table'] = 'node';
+  $handler->display->display_options['fields']['created']['field'] = 'created';
+  $handler->display->display_options['fields']['created']['date_format'] = 'short';
+  /* Field: Content: Integer */
+  $handler->display->display_options['fields']['field_bef_test_integer']['id'] = 'field_bef_test_integer';
+  $handler->display->display_options['fields']['field_bef_test_integer']['table'] = 'field_data_field_bef_test_integer';
+  $handler->display->display_options['fields']['field_bef_test_integer']['field'] = 'field_bef_test_integer';
+  $handler->display->display_options['fields']['field_bef_test_integer']['settings'] = array(
+    'thousand_separator' => ' ',
+    'prefix_suffix' => 1,
+  );
+  /* Field: Content: Letters */
+  $handler->display->display_options['fields']['field_bef_test_letters']['id'] = 'field_bef_test_letters';
+  $handler->display->display_options['fields']['field_bef_test_letters']['table'] = 'field_data_field_bef_test_letters';
+  $handler->display->display_options['fields']['field_bef_test_letters']['field'] = 'field_bef_test_letters';
+  $handler->display->display_options['fields']['field_bef_test_letters']['delta_offset'] = '0';
+  /* Field: Content: Numbers */
+  $handler->display->display_options['fields']['field_bef_test_numbers']['id'] = 'field_bef_test_numbers';
+  $handler->display->display_options['fields']['field_bef_test_numbers']['table'] = 'field_data_field_bef_test_numbers';
+  $handler->display->display_options['fields']['field_bef_test_numbers']['field'] = 'field_bef_test_numbers';
+  /* Sort criterion: Content: Post date */
+  $handler->display->display_options['sorts']['created']['id'] = 'created';
+  $handler->display->display_options['sorts']['created']['table'] = 'node';
+  $handler->display->display_options['sorts']['created']['field'] = 'created';
+  $handler->display->display_options['sorts']['created']['order'] = 'DESC';
+  $handler->display->display_options['sorts']['created']['exposed'] = TRUE;
+  $handler->display->display_options['sorts']['created']['expose']['label'] = 'Post date';
+  /* Filter criterion: Content: Letters (field_bef_test_letters) */
+  $handler->display->display_options['filters']['field_bef_test_letters_value']['id'] = 'field_bef_test_letters_value';
+  $handler->display->display_options['filters']['field_bef_test_letters_value']['table'] = 'field_data_field_bef_test_letters';
+  $handler->display->display_options['filters']['field_bef_test_letters_value']['field'] = 'field_bef_test_letters_value';
+  $handler->display->display_options['filters']['field_bef_test_letters_value']['exposed'] = TRUE;
+  $handler->display->display_options['filters']['field_bef_test_letters_value']['expose']['operator_id'] = 'field_bef_test_letters_value_op';
+  $handler->display->display_options['filters']['field_bef_test_letters_value']['expose']['label'] = 'Letters';
+  $handler->display->display_options['filters']['field_bef_test_letters_value']['expose']['operator'] = 'field_bef_test_letters_value_op';
+  $handler->display->display_options['filters']['field_bef_test_letters_value']['expose']['identifier'] = 'field_bef_test_letters_value';
+  $handler->display->display_options['filters']['field_bef_test_letters_value']['expose']['remember_roles'] = array(
+    2 => '2',
+    1 => 0,
+    3 => 0,
+  );
+  /* Filter criterion: Content: Numbers (field_bef_test_numbers) */
+  $handler->display->display_options['filters']['field_bef_test_numbers_value']['id'] = 'field_bef_test_numbers_value';
+  $handler->display->display_options['filters']['field_bef_test_numbers_value']['table'] = 'field_data_field_bef_test_numbers';
+  $handler->display->display_options['filters']['field_bef_test_numbers_value']['field'] = 'field_bef_test_numbers_value';
+  $handler->display->display_options['filters']['field_bef_test_numbers_value']['exposed'] = TRUE;
+  $handler->display->display_options['filters']['field_bef_test_numbers_value']['expose']['operator_id'] = 'field_bef_test_numbers_value_op';
+  $handler->display->display_options['filters']['field_bef_test_numbers_value']['expose']['label'] = 'Numbers';
+  $handler->display->display_options['filters']['field_bef_test_numbers_value']['expose']['operator'] = 'field_bef_test_numbers_value_op';
+  $handler->display->display_options['filters']['field_bef_test_numbers_value']['expose']['identifier'] = 'field_bef_test_numbers_value';
+  $handler->display->display_options['filters']['field_bef_test_numbers_value']['expose']['remember_roles'] = array(
+    2 => '2',
+    1 => 0,
+    3 => 0,
+  );
+  /* Filter criterion: Content: Type */
+  $handler->display->display_options['filters']['type']['id'] = 'type';
+  $handler->display->display_options['filters']['type']['table'] = 'node';
+  $handler->display->display_options['filters']['type']['field'] = 'type';
+  $handler->display->display_options['filters']['type']['exposed'] = TRUE;
+  $handler->display->display_options['filters']['type']['expose']['operator_id'] = 'type_op';
+  $handler->display->display_options['filters']['type']['expose']['label'] = 'Type';
+  $handler->display->display_options['filters']['type']['expose']['operator'] = 'type_op';
+  $handler->display->display_options['filters']['type']['expose']['identifier'] = 'type';
+  $handler->display->display_options['filters']['type']['expose']['remember_roles'] = array(
+    2 => '2',
+    1 => 0,
+    3 => 0,
+  );
+  /* Filter criterion: Content: Location (field_bef_test_location) */
+  $handler->display->display_options['filters']['field_bef_test_location_tid']['id'] = 'field_bef_test_location_tid';
+  $handler->display->display_options['filters']['field_bef_test_location_tid']['table'] = 'field_data_field_bef_test_location';
+  $handler->display->display_options['filters']['field_bef_test_location_tid']['field'] = 'field_bef_test_location_tid';
+  $handler->display->display_options['filters']['field_bef_test_location_tid']['exposed'] = TRUE;
+  $handler->display->display_options['filters']['field_bef_test_location_tid']['expose']['operator_id'] = 'field_bef_test_location_tid_op';
+  $handler->display->display_options['filters']['field_bef_test_location_tid']['expose']['label'] = 'Location';
+  $handler->display->display_options['filters']['field_bef_test_location_tid']['expose']['operator'] = 'field_bef_test_location_tid_op';
+  $handler->display->display_options['filters']['field_bef_test_location_tid']['expose']['identifier'] = 'field_bef_test_location_tid';
+  $handler->display->display_options['filters']['field_bef_test_location_tid']['expose']['remember_roles'] = array(
+    2 => '2',
+    1 => 0,
+    3 => 0,
+  );
+  $handler->display->display_options['filters']['field_bef_test_location_tid']['type'] = 'select';
+  $handler->display->display_options['filters']['field_bef_test_location_tid']['vocabulary'] = 'location';
+  $handler->display->display_options['filters']['field_bef_test_location_tid']['hierarchy'] = 1;
+
+  /* Display: Page */
+  $handler = $view->new_display('page', 'Page', 'page');
+  $handler->display->display_options['path'] = 'test';
+
+  /* Display: Content pane */
+  $handler = $view->new_display('panel_pane', 'Content pane', 'panel_pane_1');
+  $handler->display->display_options['exposed_block'] = TRUE;
+  $export['bef_test_view'] = $view;
+
+  return $export;
+}
diff --git a/profiles/wcm_base/modules/contrib/better_exposed_filters/tests/better_exposed_filters.test b/profiles/wcm_base/modules/contrib/better_exposed_filters/tests/better_exposed_filters.test
new file mode 100644
index 0000000000000000000000000000000000000000..7bf33f3a1d0a6142dd1d9a9ac93bcd06685e187a
--- /dev/null
+++ b/profiles/wcm_base/modules/contrib/better_exposed_filters/tests/better_exposed_filters.test
@@ -0,0 +1,861 @@
+<?php
+require_once 'better_exposed_filters_TestBase.php';
+
+/**
+ * @file Simpletest tests for the Better Exposed Filters module.
+ */
+
+class BEF_TestOptions extends BEF_TestBase {
+
+  /**
+   * Describes these tests to the testing framework.
+   */
+  public static function getInfo() {
+    return array(
+      'name' => 'BEF Options tests',
+      'description' => 'Checks that BEF options appear when should.',
+      'group' => 'Better Exposed Filters',
+    );
+  }
+
+  /**
+   * Verify BEF options display for binary and unlimited option fields
+   */
+  public function test_befOptionsExist() {
+    // Add filters to the default display
+    $this->addFilter('node.title');
+    $this->addFilter('node.status');
+    $this->addFilter('node.type');
+    $this->drupalGet($this->getBefSettingsUrl());
+
+    $settings = array(
+      'status_1' => 'Published',
+      'type' => 'Type',
+      'title' => 'Title'
+    );
+
+    foreach ($settings as $id => $label) {
+      $translation = array(
+        '!id' => $id,
+        '!label' => $label,
+      );
+      $this->assertRaw(
+        htmlentities(t('Display "!id" (Filter label: "!label") exposed filter as', $translation)),
+        t('BEF options exist for exposed "!id" filter', $translation)
+      );
+      $this->assertRaw(
+        htmlentities(t('More options for "!id" (Filter label: "!label")', $translation)),
+        t('BEF "More options" fieldset exists for exposed "!id" filter', $translation)
+      );
+      $this->assertField(
+        'edit-exposed-form-options-bef-' . str_replace('_', '-', $id) . '-bef-format',
+        t('BEF options dropdown exists for "!id"', $translation)
+      );
+    }
+  }
+
+  /**
+   * Verify BEF options are saved and redisplayed properly
+   */
+  public function test_befOptionsSave() {
+    // Add filters to the default display
+    $this->addFilter('node.status');
+    $this->addFilter('node.type');
+    $this->saveView();
+
+    // Ensure basic BEF settings are preserved on save.
+    $settings = array(
+      'status_1' => 'Published',
+      'type' => 'Type',
+    );
+    foreach ($settings as $id => $label) {
+      $edit = array(
+        "exposed_form_options[bef][$id][bef_format]" => 'bef',
+        "exposed_form_options[bef][$id][more_options][bef_filter_description]" => $this->randomName(16),
+        "exposed_form_options[bef][$id][more_options][bef_collapsible]" => TRUE,
+      );
+      $this->setBefSettings($edit);
+      $this->saveView();
+      $this->drupalGet($this->getBefSettingsUrl());
+      foreach ($edit as $name => $expected) {
+        $this->assertFieldByName($name, $expected);
+      }
+    }
+
+    // Ensure View-based settings are preserved on save.
+    $edit = array(
+      'exposed_form_options[bef][general][input_required]' => 1,
+      'exposed_form_options[bef][general][allow_secondary]' => 1,
+    );
+    $this->setBefSettings($edit);
+    $this->saveView();
+    $this->drupalGet($this->getBefSettingsUrl());
+    foreach ($edit as $name => $expected) {
+      $this->assertFieldByName($name, $expected);
+    }
+
+    // This filter cannot use BEF settings. Ensure only generic settings are
+    // available for open text filters.
+    $this->addFilter('node.title');
+    $this->saveView();
+    $this->drupalGet($this->getBefSettingsUrl());
+    $this->assertNoFieldByName('exposed_form_options[bef][title][bef_format]', 'bef');
+    $edit = array(
+      "exposed_form_options[bef][$id][more_options][bef_filter_description]" => $this->randomName(16),
+      "exposed_form_options[bef][$id][more_options][bef_collapsible]" => TRUE,
+    );
+    $this->setBefSettings($edit);
+    $this->saveView();
+    $this->drupalGet($this->getBefSettingsUrl());
+    foreach ($edit as $name => $expected) {
+      $this->assertFieldByName($name, $expected);
+    }
+  }
+}
+
+class BEF_TestRadios extends BEF_TestBase {
+
+  /**
+   * Describes these tests to the testing framework.
+   */
+  public static function getInfo() {
+    return array(
+      'name' => 'BEF radio button tests',
+      'description' => 'Verifies rendering filters as radio buttons.',
+      'group' => 'Better Exposed Filters',
+    );
+  }
+
+  /**
+   * Verify BEF radio buttons are rendered correctly on a page view.
+   */
+  public function test_befPageDisplayRadios() {
+    // Create a page display to validate rendering.
+    $this->createDisplay('Page', array(
+      'path' => array('path' => 'bef_test_page'),
+    ));
+
+    // Verify radio button rendering with the node type filter.
+    $this->addFilter('node.type');
+    $this->setBefSettings(array(
+      'exposed_form_options[bef][type][bef_format]' => 'bef',
+    ));
+    $this->saveView();
+
+    $this->drupalGet('bef_test_page');
+    $this->assertText(t('Type'), 'Exposed "Type" filter title renders correctly.');
+
+    // Exposed filter options render as radio buttons.
+    $this->assertFieldByXpath('//input[@name="type" and @type="radio" and @id="edit-type-all"]');
+    $this->assertFieldByXpath('//input[@name="type" and @type="radio" and @id="edit-type-article"]');
+    $this->assertFieldByXpath('//input[@name="type" and @type="radio" and @id="edit-type-page"]');
+    $this->assertFieldByXpath('//input[@name="type" and @type="radio" and @id="edit-type-bef-test"]');
+
+    // Now try it in a with the collapsible option.
+    $this->setBefSettings(array(
+      'exposed_form_options[bef][type][more_options][bef_collapsible]' => TRUE,
+    ));
+    $this->saveView();
+    $this->drupalGet('bef_test_page');
+
+    // Exposed filter is shown as radio buttons enclosed within a fieldset.
+    $this->assertFieldByXpath('//fieldset//input[@name="type" and @type="radio" and @id="edit-type-all"]');
+    $this->assertFieldByXpath('//fieldset//input[@name="type" and @type="radio" and @id="edit-type-article"]');
+    $this->assertFieldByXpath('//fieldset//input[@name="type" and @type="radio" and @id="edit-type-page"]');
+    $this->assertFieldByXpath('//fieldset//input[@name="type" and @type="radio" and @id="edit-type-bef-test"]');
+
+    // Filter label is used as the fieldset legend
+    $this->assertFieldByXpath('//fieldset//legend[* = "Type"]');
+  }
+}
+
+class BEF_TestCheckboxes extends BEF_TestBase {
+
+  /**
+   * Describes these tests to the testing framework.
+   */
+  public static function getInfo() {
+    return array(
+      'name' => 'BEF checkbox tests',
+      'description' => 'Verifies rendering filter options as checkboxes.',
+      'group' => 'Better Exposed Filters',
+    );
+  }
+
+  /**
+   * Verify that checkboxes are rendered correctly on a page display
+   */
+  public function test_befPageDisplayCheckboxes() {
+    // Create a page display to validate rendering.
+    $this->createDisplay('Page', array(
+      'path' => array('path' => 'bef_test_page'),
+    ));
+
+    // Verify checkbox rendering with the node type filter.
+    $this->addFilter('node.type', array(
+      'options[expose][multiple]' => TRUE,
+    ));
+    $this->setBefSettings(array(
+      'exposed_form_options[bef][type][bef_format]' => 'bef',
+    ));
+    $this->saveView();
+
+    $this->drupalGet('bef_test_page');
+    $this->assertText(t('Type'), 'Exposed "Type" filter title renders correctly.');
+
+    // Exposed filter option render as checkboxes.
+    $this->assertFieldByXpath('//input[@name="type[]" and @type="checkbox" and @id="edit-type-article"]');
+    $this->assertFieldByXpath('//input[@name="type[]" and @type="checkbox" and @id="edit-type-page"]');
+    $this->assertFieldByXpath('//input[@name="type[]" and @type="checkbox" and @id="edit-type-bef-test"]');
+
+    // Verify classes added for select all/none functionality.
+    $this->assertNoFieldByXpath('//div[contains(@class, "bef-select-all-none")]');
+    $this->setBefSettings(array(
+      'exposed_form_options[bef][type][more_options][bef_select_all_none]' => TRUE,
+    ));
+    $this->saveView();
+    $this->drupalGet('bef_test_page');
+    $this->assertFieldByXpath('//div[contains(@class, "bef-select-all-none")]');
+
+    // Now try it in a with the collapsible option.
+    $this->setBefSettings(array(
+      'exposed_form_options[bef][type][more_options][bef_collapsible]' => TRUE,
+    ));
+    $this->saveView();
+    $this->drupalGet('bef_test_page');
+
+    // Exposed filter is shown as checkboxes enclosed within a fieldset.
+    $this->assertFieldByXpath('//fieldset//input[@name="type[]" and @type="checkbox" and @id="edit-type-article"]');
+    $this->assertFieldByXpath('//fieldset//input[@name="type[]" and @type="checkbox" and @id="edit-type-page"]');
+    $this->assertFieldByXpath('//fieldset//input[@name="type[]" and @type="checkbox" and @id="edit-type-bef-test"]');
+
+    // Filter label is used as the fieldset legend
+    $this->assertFieldByXpath('//fieldset//legend[* = "Type"]');
+
+    // Test the select all/none option in fieldsets.
+    $this->assertFieldByXpath('//fieldset//div[contains(@class, "bef-select-all-none")]');
+  }
+}
+
+class BEF_TestHidden extends BEF_TestBase {
+
+  /**
+   * Describes these tests to the testing framework.
+   */
+  public static function getInfo() {
+    return array(
+      'name' => 'BEF hidden tests',
+      'description' => 'Verifies rendering filter options as hidden elements.',
+      'group' => 'Better Exposed Filters',
+    );
+  }
+
+  /**
+   * Verify hidden exposed filters are rendered correctly on a page display
+   *
+   * @TODO: check the functionality of a multi-pass filter using hidden BEF
+   * settings.
+   */
+  public function test_befPageDisplayHidden() {
+    // Create a page display to validate rendering.
+    $this->createDisplay('Page', array(
+      'path' => array('path' => 'bef_test_page'),
+    ));
+
+    // Verify multi-selection hidden elements with node->type.
+    $this->addFilter('node.type', array(
+      'options[expose][multiple]' => TRUE,
+    ));
+
+    // Verify single-selection hidden elements with node->status.
+    $this->addFilter('node.status');
+
+    $this->setBefSettings(array(
+      'exposed_form_options[bef][type][bef_format]' => 'bef_hidden',
+      'exposed_form_options[bef][status_1][bef_format]' => 'bef_hidden',
+    ));
+    $this->saveView();
+
+    $this->drupalGet('bef_test_page');
+    $this->assertNoText(t('Type'), 'Exposed "Type" filter title does not show for hidden elements.');
+    $this->assertNoText(t('Published'), 'Exposed "Published" filter title does not show for hidden elements.');
+
+    // Exposed filter option render as checkboxes.
+    // @todo: Need to fix these.
+    // $this->assertFieldByXpath('//input[@name="type[]" and @type="hidden"]');
+    // $this->assertFieldByXpath('//input[@name="status_1" and @type="hidden"]');
+  }
+}
+
+class BEF_TestTaxonomyFilters extends BEF_TestBase {
+
+  /**
+   * Describes these tests to the testing framework.
+   */
+  public static function getInfo() {
+    return array(
+      'name' => 'BEF taxonomy filter tests',
+      'description' => 'Verifies rendering of taxonomy filters.',
+      'group' => 'Better Exposed Filters',
+    );
+  }
+
+  /**
+   * Verify taxonomy-based exposed filters display correctly as both radio
+   * buttons and checkboxes
+   */
+  public function test_befTaxonomyFilters() {
+    // Create a page display to validate rendering.
+    $this->createDisplay('Page', array(
+      'path' => array('path' => 'bef_test_page'),
+    ));
+
+    // Not sure why I can't get the Features-based functionality to work without
+    // pulling up the modules page, but it works...
+    $this->drupalGet('admin/modules');
+
+    // Add three terms with two children each to the vocab defined in
+    // bef_test_content.
+    $vocab = taxonomy_vocabulary_machine_name_load('location');
+    $parents = array();
+    foreach (array('parent1', 'parent2', 'parent3') as $name) {
+      $term = new stdClass();
+      $term->vid = $vocab->vid;
+      $term->name = $name;
+      taxonomy_term_save($term);
+      $parents[$term->tid] = $term->name;
+    }
+    foreach (array('child1', 'child2') as $name) {
+      foreach ($parents as $pid => $pname) {
+        $term = new stdClass();
+        $term->vid = $vocab->vid;
+        $term->name = "$pname $name";
+        $term->parent = $pid;
+        taxonomy_term_save($term);
+      }
+    }
+
+    // Add a heirarchical taxonomy filter from the BEF test feature.
+    $this->addFilter(
+      'field_data_field_bef_test_location.field_bef_test_location_tid',
+      array(),
+      array('options[type]' => 'select', 'options[hierarchy]' => TRUE)
+    );
+    $this->saveView();
+    $this->drupalGet($this->getBefSettingsUrl());
+
+    // Verify settings available to a heirarchical taxonomy filter.
+    $this->assertFieldByXpath('//select[@name="exposed_form_options[bef][field_bef_test_location_tid][bef_format]"]');
+    $this->assertFieldByXpath('//select[@name="exposed_form_options[bef][field_bef_test_location_tid][bef_format]"]/option[@value="default"]');
+    $this->assertFieldByXpath('//select[@name="exposed_form_options[bef][field_bef_test_location_tid][bef_format]"]/option[@value="bef"]');
+    $this->assertFieldByXpath('//select[@name="exposed_form_options[bef][field_bef_test_location_tid][bef_format]"]/option[@value="bef_ul"]');
+    $this->assertFieldByXpath('//select[@name="exposed_form_options[bef][field_bef_test_location_tid][bef_format]"]/option[@value="bef_links"]');
+    $this->assertFieldByXpath('//select[@name="exposed_form_options[bef][field_bef_test_location_tid][bef_format]"]/option[@value="bef_hidden"]');
+
+    $this->setBefSettings(array(
+      'exposed_form_options[bef][field_bef_test_location_tid][bef_format]' => 'bef_ul',
+    ));
+    $this->saveView();
+
+    // Verify taxonomy filter as radio buttons
+    $this->drupalGet('bef_test_page');
+    $this->assertText(t('Location (field_bef_test_location)'), 'Verify exposed filter label');
+    $this->assertFieldByXpath('//input[@name="field_bef_test_location_tid" and @type="radio"]', NULL, 'Verify exposed filter is shown as radio buttons');
+    $this->assertFieldByXpath('//ul[@class="bef-tree"]/li//label[@for="edit-field-bef-test-location-tid-all"]', NULL, 'Verify "- Any -" is in the top level of heirarchy.');
+    $this->assertFieldByXpath('//ul[@class="bef-tree"]/li//label[@for="edit-field-bef-test-location-tid-1"]', NULL, 'Verify "parent1" is in the top level of heirarchy.');
+    $this->assertFieldByXpath('//ul[@class="bef-tree"]/li/ul/li//label[@for="edit-field-bef-test-location-tid-4"]', NULL, 'Verify "parent1 child1" is in the second level of heirarchy.');
+  }
+}
+
+class BEF_TestSort extends BEF_TestBase {
+
+  /**
+   * Describes these tests to the testing framework.
+   */
+  public static function getInfo() {
+    return array(
+      'name' => 'BEF sort tests',
+      'description' => 'Verifies rendering exposed sort options.',
+      'group' => 'Better Exposed Filters',
+    );
+  }
+
+  /**
+   * Verify exposed sorts, including the combined sort/operator option and
+   * option rewriting, work with BEF.
+   */
+  public function test_befExposedSort() {
+    // Create a page display to validate rendering.
+    $this->createDisplay('Page', array(
+      'path' => array('path' => 'bef_test_page'),
+    ));
+
+    // Add an exposed sort
+    $this->addSort('node.title');
+
+    // Double-check that expose sort order is checked.
+    $this->setBefSettings(array(
+      'exposed_form_options[expose_sort_order]' => TRUE,
+    ));
+    $this->saveView();
+
+    // Verify basic options
+    $this->drupalGet($this->getBefSettingsUrl());
+    $this->assertFieldByXpath('//select[@name="exposed_form_options[bef][sort][bef_format]"]/option', 'Default select list');
+    $this->assertFieldByXpath('//select[@name="exposed_form_options[bef][sort][bef_format]"]/option', 'Radio Buttons');
+    $this->assertFieldByXpath('//select[@name="exposed_form_options[bef][sort][bef_format]"]/option', 'Links');
+    $this->assertFieldByXpath('//select[@name="exposed_form_options[bef][sort][bef_format]"]/option', 'Toggle Links');
+
+    // Verify combined sort order and sort by.
+    $this->setBefSettings(array(
+      'exposed_form_options[bef][sort][advanced][combine]' => TRUE,
+    ));
+    $this->saveView();
+    $this->drupalGet('bef_test_page');
+    $this->assertFieldByXpath('//select[@name="sort_bef_combine"]/option', 'title DESC');
+    $this->assertFieldByXpath('//select[@name="sort_bef_combine"]/option', 'title ASC');
+
+    // And rewrite the combined sort options.
+    $this->setBefSettings(array(
+      'exposed_form_options[bef][sort][advanced][combine]' => TRUE,
+      'exposed_form_options[bef][sort][advanced][combine_rewrite]' => "Title Desc|Going down\nTitle Asc|Going up",
+    ));
+    $this->saveView();
+    $this->drupalGet('bef_test_page');
+    $this->assertFieldByXpath('//select[@name="sort_bef_combine"]/option', 'Going up');
+    $this->assertFieldByXpath('//select[@name="sort_bef_combine"]/option', 'Going down');
+
+    // @todo: add tests for correct rendering of Links and Toggle links options.
+  }
+}
+
+class BEF_TestSliders extends BEF_TestBase {
+
+  /**
+   * Describes these tests to the testing framework.
+   */
+  public static function getInfo() {
+    return array(
+      'name' => 'BEF slider tests',
+      'description' => 'Verifies rendering filters jQueryUI sliders.',
+      'group' => 'Better Exposed Filters',
+    );
+  }
+
+  /**
+   * Verify the correct classes are placed on exposed form elements and
+   * correct JS files are loaded to display jQuery UI sliders.
+   */
+  public function test_befSliders() {
+    // Create a page display to validate rendering.
+    $this->createDisplay('Page', array(
+      'path' => array('path' => 'bef_test_page'),
+    ));
+
+    // Not sure why I can't get the Features-based functionality to work without
+    // pulling up the modules page, but it works...
+    $this->drupalGet('admin/modules');
+
+    // Verify slider rendering using the Numbers field from the BEF test content
+    // type.
+    $this->addFilter('field_data_field_bef_test_integer.field_bef_test_integer_value');
+    $this->addFilter('field_data_field_bef_test_price.field_bef_test_price_value', array(
+      'options[operator]' => 'between',
+    ));
+    $this->saveView();
+
+    // Verify the slider option appears for integer fields
+    $this->drupalGet($this->getBefSettingsUrl());
+    $this->assertFieldByXpath('//select[@name="exposed_form_options[bef][field_bef_test_integer_value][bef_format]"]/option', 'Default select list');
+    $this->assertFieldByXpath('//select[@name="exposed_form_options[bef][field_bef_test_integer_value][bef_format]"]/option', 'jQuery UI slider');
+    $this->assertFieldByXpath('//select[@name="exposed_form_options[bef][field_bef_test_price_value][bef_format]"]/option', 'Default select list');
+    $this->assertFieldByXpath('//select[@name="exposed_form_options[bef][field_bef_test_price_value][bef_format]"]/option', 'jQuery UI slider');
+
+    // Set both fields to use sliders using the default slider options. Integer
+    // should render as a single slider, Price should render as two because of
+    // the "between" operator. But we can't test the creation of the sliders as
+    // Simpletest ignores JavaScript, so we just verify the settings and
+    // necessary files are there.
+    $this->setBefSettings(array(
+      // Just use the default values for this one.
+      'exposed_form_options[bef][field_bef_test_integer_value][bef_format]' => 'bef_slider',
+      // More complicated option for this one.
+      'exposed_form_options[bef][field_bef_test_price_value][bef_format]' => 'bef_slider',
+      'exposed_form_options[bef][field_bef_test_price_value][slider_options][bef_slider_min]' => 100,
+      'exposed_form_options[bef][field_bef_test_price_value][slider_options][bef_slider_max]' => 5000,
+      'exposed_form_options[bef][field_bef_test_price_value][slider_options][bef_slider_step]' => 250,
+      'exposed_form_options[bef][field_bef_test_price_value][slider_options][bef_slider_animate]' => 'normal',
+      'exposed_form_options[bef][field_bef_test_price_value][slider_options][bef_slider_orientation]' => 'vertical',
+    ), t('The range of the slider (Range maximum - Range minimum) should be evenly divisible by the step.'));
+    $this->drupalPost(NULL, array('exposed_form_options[bef][field_bef_test_price_value][slider_options][bef_slider_step]' => 100), 'Apply');
+    $this->saveView();
+
+    $this->drupalGet('bef_test_page');
+    $settings = $this->drupalGetSettings();
+    $settings = $settings['better_exposed_filters'];
+    $this->assertTrue($settings['slider'], 'BEF slider setting is TRUE');
+
+    // Check slider options are passed from the settings page to JavaScript.
+    // Note that we skip the
+    $this->assertEqual($settings['slider_options']['field_bef_test_integer_value'], array(
+      'min' => '0',
+      'max' => '99999',
+      'step' => '1',
+      'animate' => '',
+      'orientation' => 'horizontal',
+      'id' => 'field-bef-test-integer-value',
+      'viewId' => 'views-exposed-form-' . $this->view['machine_name'] . '-page-1',
+    ));
+    $this->assertEqual($settings['slider_options']['field_bef_test_price_value'], array(
+      'min' => '100',
+      'max' => '5000',
+      'step' => '100',
+      'animate' => 'normal',
+      'orientation' => 'vertical',
+      'id' => 'field-bef-test-price-value',
+      'viewId' => 'views-exposed-form-' . $this->view['machine_name'] . '-page-1',
+    ));
+  }
+}
+
+class BEF_TestDatepicker extends BEF_TestBase {
+
+  /**
+   * Describes these tests to the testing framework.
+   */
+  public static function getInfo() {
+    return array(
+      'name' => 'BEF datepicker tests',
+      'description' => 'Verifies rendering filter options as a jQueryUI Datepicker.',
+      'group' => 'Better Exposed Filters',
+    );
+  }
+
+  /**
+   * Verifies Datepicker options using Drupal core date fields.
+   */
+  public function test_befDatepicker() {
+    // Create a page display to validate rendering.
+    $this->createDisplay('Page', array(
+      'path' => array('path' => 'bef_test_page'),
+    ));
+
+    // Verify Datepicker rendering using the Numbers field from the BEF test
+    // content type.
+    $this->addFilter('node.created');
+    $this->saveView();
+
+    // Verify the datepicker option appears for core date fields.
+    $this->drupalGet($this->getBefSettingsUrl());
+    $this->assertFieldByXpath('//select[@name="exposed_form_options[bef][created][bef_format]"]/option', 'Default select list');
+    $this->assertFieldByXpath('//select[@name="exposed_form_options[bef][created][bef_format]"]/option', 'jQuery UI Datepicker');
+    $this->setBefSettings(array(
+      'exposed_form_options[bef][created][bef_format]' => 'bef_datepicker',
+    ));
+    $this->saveView();
+
+    $this->drupalGet('bef_test_page');
+    $settings = $this->drupalGetSettings();
+    $settings = $settings['better_exposed_filters'];
+    $this->assertTrue($settings['datepicker'], 'BEF datepicker setting is TRUE');
+    $this->assertFieldByXpath('//div[@id="edit-created-wrapper"]//input[contains(@class,"bef-datepicker")]');
+  }
+
+  /**
+   * Verifies Datepicker options using a custom (Date module) date field.
+   */
+  public function test_befDatepickerCustom() {
+    // Create a page display to validate rendering.
+    $this->createDisplay('Page', array(
+      'path' => array('path' => 'bef_test_page'),
+    ));
+
+    // Not sure why I can't get the Features-based functionality to work without
+    // pulling up the modules page, but it works...
+    $this->drupalGet('admin/modules');
+
+    // Verify datepicker rendering using the Numbers field from the BEF test
+    // content type.
+    $this->addFilter('field_data_field_bef_test_date.field_bef_test_date_value', array(), array(
+      'options[form_type]' => 'date_text',
+    ));
+    $this->saveView();
+
+    // Verify the datepicker option appears for custom date fields.
+    $this->drupalGet($this->getBefSettingsUrl());
+    $this->assertFieldByXpath('//select[@name="exposed_form_options[bef][field_bef_test_date_value][bef_format]"]/option', 'Default select list');
+    $this->assertFieldByXpath('//select[@name="exposed_form_options[bef][field_bef_test_date_value][bef_format]"]/option', 'jQuery UI Datepicker');
+    $this->setBefSettings(array(
+      'exposed_form_options[bef][field_bef_test_date_value][bef_format]' => 'bef_datepicker',
+    ));
+    $this->saveView();
+
+    $this->drupalGet('bef_test_page');
+    $settings = $this->drupalGetSettings();
+    $settings = $settings['better_exposed_filters'];
+    $this->assertTrue($settings['datepicker'], 'BEF datepicker setting is TRUE');
+    $this->assertTrue(!empty($settings['datepicker_options']['dateFormat']), 'BEF datepicker setting is TRUE');
+    $this->assertFieldByXpath('//div[@id="edit-field-bef-test-date-value-value"]//input[contains(@class,"bef-datepicker")]');
+  }
+}
+
+class BEF_TestLinks extends BEF_TestBase {
+
+  /**
+   * Describes these tests to the testing framework.
+   */
+  public static function getInfo() {
+    return array(
+      'name' => 'BEF links tests',
+      'description' => 'Verifies rendering filter options as toggle links.',
+      'group' => 'Better Exposed Filters',
+    );
+  }
+
+  /**
+   * Verify filters rendered as links.
+   */
+  public function test_befFilterLinks() {
+    // Create a page display to validate rendering.
+    $this->createDisplay('Page', array(
+      'path' => array('path' => 'bef_test_page'),
+    ));
+
+    // Verify checkbox rendering with the node type filter.
+    $this->addFilter('node.type', array(
+      'options[expose][multiple]' => TRUE,
+    ));
+    $this->addFilter('node.status');
+    $this->setBefSettings(array(
+      'exposed_form_options[bef][type][bef_format]' => 'bef_links',
+      'exposed_form_options[bef][status_1][bef_format]' => 'bef_links',
+    ));
+    $this->saveView();
+    $this->drupalGet('bef_test_page');
+
+    // Verify the type filter, which is multi-select.
+    $this->assertFieldByXpath('//div[@id="edit-type-wrapper"]//div[@id="edit-type-article"]/a[contains(@href, "?type[0]=article")]', NULL, 'Correct link for "article" filter');
+    $this->assertFieldByXpath('//div[@id="edit-type-wrapper"]//div[@id="edit-type-page"]/a[contains(@href, "?type[0]=page")]', NULL, 'Correct link for "page" filter');
+    $this->assertFieldByXpath('//div[@id="edit-type-wrapper"]//div[@id="edit-type-bef-test"]/a[contains(@href, "?type[0]=bef_test")]', NULL, 'Correct link for "bef test" filter');
+
+    // Verify the status filter, which is single select.
+    $this->assertFieldByXpath('//div[@id="edit-status-1-wrapper"]//div[@id="edit-status-1-1"]/a[contains(@href, "?status_1=1")]', NULL, 'Correct link for "status: yes" filter');
+    $this->assertFieldByXpath('//div[@id="edit-status-1-wrapper"]//div[@id="edit-status-1-0"]/a[contains(@href, "?status_1=0")]', NULL, 'Correct link for "status: no" filter');
+
+    // Click the published/yes link and verify the filter links update.
+    $this->clickLink('Yes');
+
+    // Verify the type filter, which is multi-select.
+    $this->assertFieldByXpath('//div[@id="edit-type-wrapper"]//div[@id="edit-type-article"]/a[contains(@href, "?status_1=1&type[0]=article")]', NULL, 'Correct link for "article" filter');
+    $this->assertFieldByXpath('//div[@id="edit-type-wrapper"]//div[@id="edit-type-page"]/a[contains(@href, "?status_1=1&type[0]=page")]', NULL, 'Correct link for "page" filter');
+    $this->assertFieldByXpath('//div[@id="edit-type-wrapper"]//div[@id="edit-type-bef-test"]/a[contains(@href, "?status_1=1&type[0]=bef_test")]', NULL, 'Correct link for "bef test" filter');
+
+    // Verify the status filter, which is single select.
+    $this->assertFieldByXpath('//div[@id="edit-status-1-wrapper"]//div[@id="edit-status-1-1"]/a[contains(@href, "?status_1=1")]', NULL, 'Correct link for "status: yes" filter');
+    $this->assertFieldByXpath('//div[@id="edit-status-1-wrapper"]//div[@id="edit-status-1-0"]/a[contains(@href, "?status_1=0")]', NULL, 'Correct link for "status: no" filter');
+  }
+}
+
+class BEF_TestSecondaryFilters extends BEF_TestBase {
+
+  /**
+   * Describes these tests to the testing framework.
+   */
+  public static function getInfo() {
+    return array(
+      'name' => 'BEF secondary filter tests',
+      'description' => 'Verifies rendering filter options within the secondary filter fieldset.',
+      'group' => 'Better Exposed Filters',
+    );
+  }
+
+  /**
+   * Basic coverage for filters rendered in secondary options fieldsets. See
+   *
+   * @todo near the end of this test.
+   */
+  public function test_befSecondaryFilters() {
+    // Create a page display to validate rendering.
+    $this->createDisplay('Page', array(
+      'path' => array('path' => 'bef_test_page'),
+    ));
+
+    // Add the node.type filter as a multi-select filter.
+    $this->addFilter('node.type', array(
+      'options[expose][multiple]' => TRUE,
+    ));
+    $this->setBefSettings(array(
+      'exposed_form_options[bef][general][allow_secondary]' => 1,
+      'exposed_form_options[bef][general][secondary_label]' => 'Custom Label',
+      'exposed_form_options[bef][type][more_options][is_secondary]' => 1,
+    ));
+    $this->saveView();
+    $this->drupalGet('bef_test_page');
+
+    // Verify a collapsed fieldset exists with the correct label.
+    $this->assertFieldByXpath('//div[@id="edit-secondary-wrapper"]//fieldset[contains(@class, "collapsible") and contains(@class, "collapsed")]', NULL, 'Collapsible fieldset for secondary options starts collapsed/');
+    $this->assertFieldByXpath('//div[@id="edit-secondary-wrapper"]//fieldset/legend/span', 'Custom Label', 'Collapsible fieldset has the correct custom label');
+    $this->assertFieldByXpath('//div[@id="edit-secondary-wrapper"]//fieldset//select[@name="type[]"]', NULL, 'The node.type filter is within the secondary fieldset');
+
+    // Select an option and make sure the fielset is expanded when rendered.
+    $this->drupalGet('bef_test_page', array('query' => array('type' => 'page')));
+    $this->assertFieldByXpath('//div[@id="edit-secondary-wrapper"]//fieldset[contains(@class, "collapsible") and not(contains(@class, "collapsed"))]', NULL, 'Collapsible fieldset starts open');
+
+    // https://drupal.org/node/2189321
+    // Verify fieldset is collapsed/expanded when a custom filter ID is set.
+    // @TODO: Consider refactoring so we can leverage all existing tests to use
+    // custom filter ID's...
+    $this->editFilter('node.type', array(
+      'options[expose][identifier]' => 'custom_id',
+    ));
+    $this->saveView();
+    $this->drupalGet('bef_test_page');
+
+    // Verify a collapsed fieldset exists with the correct label.
+    $this->assertFieldByXpath('//div[@id="edit-secondary-wrapper"]//fieldset[contains(@class, "collapsible") and contains(@class, "collapsed")]', NULL, 'Collapsible fieldset for secondary options, starts collapsed.');
+    $this->assertFieldByXpath('//div[@id="edit-secondary-wrapper"]//fieldset//select[@name="custom_id[]"]', NULL, 'The node.type filter is within the secondary fieldset');
+
+    // Select an option and make sure the fieldset is expanded when rendered.
+    $this->drupalGet('bef_test_page', array('query' => array('custom_id' => 'page')));
+    $this->assertFieldByXpath('//div[@id="edit-secondary-wrapper"]//fieldset[contains(@class, "collapsible") and not(contains(@class, "collapsed"))]', NULL, 'Collapsible fieldset starts open');
+
+    // Add an in-between filter and verify it renders correctly.
+    $this->addFilter('field_data_field_bef_test_integer.field_bef_test_integer_value', array(
+      'options[operator]' => 'between',
+    ));
+    $this->setBefSettings(array(
+      'exposed_form_options[bef][general][allow_secondary]' => 1,
+      'exposed_form_options[bef][general][secondary_label]' => 'Custom Label',
+      'exposed_form_options[bef][field_bef_test_integer_value][more_options][is_secondary]' => 1,
+    ));
+    $this->saveView();
+    $this->drupalGet('bef_test_page');
+
+    // Verify labels for the min and max fields.
+    // Note: Both labels have a trailing space which is added by Views... I
+    // assume to provide some visual whitespace between the label and widget if
+    // they are arranged horizontally. I imagine that'll change at some point as
+    // it's a terrible way to add some padding to an element!
+    $this->assertFieldByXpath('//label[@for="edit-field-bef-test-integer-value-min"]', 'Integer (field_bef_test_integer) ', 'Label appears for in-between filters in secondary fieldsets.');
+    $this->assertFieldByXpath('//label[@for="edit-field-bef-test-integer-value-max"]', 'And ', 'In-between filter has correct label between min and max inputs');
+    $this->assertFieldByXpath('//label[@for="edit-custom-id"]', 'Type ', 'Single input filter has correct label');
+  }
+}
+
+class BEF_TestRewrite extends BEF_TestBase {
+
+  /**
+   * Describes these tests to the testing framework.
+   */
+  public static function getInfo() {
+    return array(
+      'name' => 'BEF rewrite tests',
+      'description' => 'Verifies rewriting filter and sort options.',
+      'group' => 'Better Exposed Filters',
+    );
+  }
+
+  /**
+   * Verify rewriting works for filter options
+   */
+  public function test_befFilterRewrite() {
+    // Create a page display to validate rendering.
+    $this->createDisplay('Page', array(
+      'path' => array('path' => 'bef_test_page'),
+    ));
+
+    // Add a node type filter set to allow multiple selections.
+    $this->addFilter('node.type', array(
+      'options[expose][multiple]' => TRUE,
+    ));
+
+    // Add a node status filter set to allow a single selection.
+    $this->addFilter('node.status');
+
+    // Add a few terms to the Tags vocab and a Tags filter to the view.
+    // Verify values that PHP equates to empty.
+    $term1 = new stdClass();
+    $term1->name = "0";
+    $term1->vid = 1;
+    taxonomy_term_save($term1);
+
+    // Verify values with accents.
+    $term2 = new stdClass();
+    $term2->name = "Tèstiñg Térm";
+    $term2->vid = 1;
+    taxonomy_term_save($term2);
+    $this->addFilter('field_data_field_tags.field_tags_tid', array(), array(
+      // Choose the dropdown option for term filter, without hierarchy shown.
+      'options[type]' => 'select',
+      'options[hierarchy]' => '0',
+    ));
+
+    // Add some exposed sort options.
+    $this->addSort('node.created');
+    $this->addSort('node.title');
+
+    // Set rewrite for single and multiple selection filters.
+    $this->setBefSettings(array(
+      'exposed_form_options[bef][status_1][more_options][rewrite][filter_rewrite_values]' =>
+        "Yes|Hell yeah!\nNo|Booo...",
+      'exposed_form_options[bef][type][more_options][rewrite][filter_rewrite_values]' =>
+        "bef_test|This is a test\nArticle|",
+      'exposed_form_options[bef][field_tags_tid][more_options][rewrite][filter_rewrite_values]' =>
+        $term1->name . "|The first one\n" . $term2->name . '|' . $term2->name . ' rewritten',
+      'exposed_form_options[bef][sort][advanced][combine]' => '1',
+      'exposed_form_options[bef][sort][advanced][combine_rewrite]' =>
+        "Post date Asc|Oldest first\nPost date Desc|Newest first\nTitle Asc|A -> Z\nTitle Desc|",
+    ));
+    $this->saveView();
+
+    $this->drupalGet('bef_test_page');
+    $this->assertFieldByXpath('//select[@id="edit-type"]/option', 'This is a test', 'Rerwrite of the filter option "bef_test" in "Type" filter');
+    $this->assertNoFieldByXpath('//select[@id="edit-type"]/option', 'Article', 'Rerwrite of the filter option "article" to null in "Type" filter.');
+    $this->assertFieldByXpath('//select[@id="edit-status-1"]/option', 'Hell yeah!', 'Rerwrite of the filter option "Yes" in "Published" filter.');
+    $this->assertFieldByXpath('//select[@id="edit-status-1"]/option', 'Booo...', 'Rerwrite of the filter option "No" in "Published" filter.');
+    $this->assertFieldByXpath('//select[@id="edit-field-tags-tid"]/option', 'The first one', 'Rerwrite of the filter value "0" in "Tags (field_tags)" filter.');
+    $this->assertFieldByXpath('//select[@id="edit-field-tags-tid"]/option', $term2->name . ' rewritten', 'Rerwrite of a filter option with accents in "Tags (field_tags)" filter.');
+    $this->assertFieldByXpath('//select[@id="edit-sort-bef-combine"]/option', 'Oldest first', 'Rerwrite of an exposed combined sort option.');
+    $this->assertFieldByXpath('//select[@id="edit-sort-bef-combine"]/option', 'Newest first', 'Rerwrite of an exposed combined sort option.');
+    $this->assertFieldByXpath('//select[@id="edit-sort-bef-combine"]/option', 'A -> Z', 'Rerwrite of an exposed combined sort option.');
+    $this->assertNoFieldByXpath('//select[@id="edit-sort-bef-combine"]/option', 'Title Desc', 'Removal of an exposed combined sort option through rewriting it to NULL.');
+  }
+}
+
+class BEF_TestMisc extends BEF_TestBase {
+
+  /**
+   * Describes these tests to the testing framework.
+   */
+  public static function getInfo() {
+    return array(
+      'name' => 'BEF miscellaneous tests',
+      'description' => 'Verifies misc BEF functional.',
+      'group' => 'Better Exposed Filters',
+    );
+  }
+
+  /**
+   * Verifies the "Require input..." option.
+   */
+  public function test_befRequireInput() {
+    // Create a page display to validate rendering.
+    $this->createDisplay('Page', array(
+      'path' => array('path' => 'bef_test_page'),
+    ));
+
+    // Add the node.type filter as a multi-select filter.
+    $this->addFilter('node.type', array(
+      'options[expose][multiple]' => TRUE,
+    ));
+    $this->setBefSettings(array(
+      'exposed_form_options[bef][general][input_required]' => 1,
+      'exposed_form_options[bef][general][allow_secondary]' => 1,
+    ));
+    $this->saveView();
+    $this->drupalGet('bef_test_page');
+
+    // Verify the "Text on demand" is shown.
+    $this->assertText(t('Select any filter and click on Apply to see results'), '"Empty" text should show on initial display.');
+  }
+}
diff --git a/profiles/wcm_base/modules/contrib/better_exposed_filters/tests/better_exposed_filters_TestBase.php b/profiles/wcm_base/modules/contrib/better_exposed_filters/tests/better_exposed_filters_TestBase.php
new file mode 100644
index 0000000000000000000000000000000000000000..e7082ed4438d564b55ec7c0bdc56146e29e48b64
--- /dev/null
+++ b/profiles/wcm_base/modules/contrib/better_exposed_filters/tests/better_exposed_filters_TestBase.php
@@ -0,0 +1,275 @@
+<?php
+
+/**
+ * @file Base class for testing the Better Exposed Filters module.
+ * @author mikeker
+ */
+
+/**
+ * Helper functions for Better Exposed Filters tests.
+ */
+class BEF_TestBase extends DrupalWebTestCase {
+  /**
+   * User with 'Administrator' role.
+   */
+  protected $admin_user;
+
+  /**
+   * Stores information about the view used in these tests.
+   */
+  protected $view = array();
+
+  public static function getInfo() {
+    return array(
+      'name' => 'BEF Basic functionality tests',
+      'description' => 'Basic tests for Better Exposed Filters.',
+      'group' => 'Better Exposed Filters',
+    );
+  }
+
+  public function setUp() {
+    // For benchmarking.
+    $this->start = time();
+
+    // Enable any modules required for the test.
+    parent::setUp(
+      'better_exposed_filters',
+      'date',
+      'date_views',
+      'list',
+      'number',
+      'taxonomy',
+      'text',
+      'views',
+      'views_ui'
+    );
+
+    // One of these days I'll figure out why Features is breaking all my tests.
+    module_enable(array('bef_test_content'));
+
+    // User with edit views perms
+    $this->admin_user = $this->drupalCreateUser();
+    $role = user_role_load_by_name('administrator');
+    $this->assertTrue(!empty($role->rid), 'Found the "administrator" role.');
+    user_save($this->admin_user, array('roles' => array($role->rid => $role->rid)));
+    $this->drupalLogin($this->admin_user);
+
+    // Build a basic view for use in tests.
+    $this->createView();
+
+    // $this->createDisplay('Page', array('path' => array('path' => 'bef_test_page')));
+
+    // Add field to default display
+    // $this->addField('node.title');
+
+    // Turn of Better Exposed Filters
+    $this->setBefExposedForm();
+  }
+
+  public function tearDown() {
+    debug('This test run took ' . (time() - $this->start) . ' seconds.');
+    unset($this->view);
+    parent::tearDown();
+  }
+
+  /*******************************************************************************
+   * Helper functions
+   ******************************************************************************/
+
+  /**
+   * Returns the URL for the BEF exposed form settings page.
+   */
+  protected function getBefSettingsUrl() {
+    return 'admin/structure/views/nojs/display/' . $this->view['machine_name'] . '/default/exposed_form_options';
+  }
+
+  protected function createView($name = '') {
+    if (!empty($this->view)) {
+      debug('WARNING: createView called after view has already been created.');
+      return;
+    }
+
+    if (empty($name)) {
+      $name = $this->randomName(8);
+    }
+    $this->view['name'] = $name;
+    $this->view['machine_name'] = strtolower($name);
+
+    $edit = array(
+      'human_name' => $this->view['name'],
+      'name' => $this->view['machine_name'],
+      // Default is to create a page display.
+      'page[create]' => FALSE,
+    );
+    $this->drupalPost('admin/structure/views/add', $edit, 'Save & exit');
+
+    // URL to edit this view.
+    $this->view['edit_url'] = 'admin/structure/views/view/' . $this->view['machine_name'] . '/edit';
+  }
+
+  /**
+   * Creates a display of $type.  Currently supports:
+   *    'Page'
+   *
+   * @todo: support more types...
+   */
+  protected function createDisplay($type = 'Page', $settings = NULL) {
+    if (!isset($this->view['displays'])) {
+      $this->view['displays'] = array();
+    }
+
+    // Add a display of $type to the view
+    $this->drupalPost($this->view['edit_url'], array(), "Add $type");
+
+    // Grab the name of the newly created display and store some info about it.
+    $url = $this->getUrl();
+    $display_name = substr($url, strrpos($url, '/') + 1);
+    $this->view['displays'][$display_name] = array(
+      'machine_name' => $display_name,
+      'edit_url' => 'admin/structure/views/view/' . $this->view['machine_name'] . '/edit/' . $display_name,
+      'settings_base_url' => 'admin/structure/views/nojs/display/' . $this->view['machine_name'] . '/' . $display_name,
+    );
+
+    // Settings should be in the form of 'path' => array_of_form_settings. Eg:
+    // to set the title for a new display as an override:
+    //  'title' => array(
+    //    'title' => 'This is an override title',
+    //    'override[dropdown]' => display_machine_name_goes_here,
+    //  )
+    //
+    // If you navigate to
+    //  admin/structure/views/nojs/display/<view_name>/<display_name>/title
+    // you will see the form in question.
+    foreach ($settings as $path => $values) {
+      $this->drupalPost($this->view['displays'][$display_name]['settings_base_url'] . "/$path", $values, 'Apply');
+    }
+    $this->saveView();
+  }
+
+  /**
+   * Adds a filter to a view display.
+   *
+   * $field: string in the form of node.status or
+   *   field_data_field_example.field_example_value
+   * $settings: (array) Settings on the "Configure filter criterion" dialog.
+   *   NOTE: called after the "Expose filter" button is pressed if $exposed
+   *   is TRUE so you can set things like "Allow multiple items" or grouped
+   *   filter options.
+   * $additional: (array) settings for any additional configuration forms such
+   *   as taxonomy term settings.
+   * $display: machine name of the display to add this filter to. NOTE:
+   *   Currently only allows filters on the master display, no overrides.
+   *   @todo: fix that, if needed.
+   * $exposed: (bool) (optional, default: TRUE) Is this an exposed filter?
+   *
+   * Note: This routine expects the caller to save the view, as needed.
+   */
+  protected function addFilter($field, $settings = array(), $additional = array(), $exposed = TRUE, $display = 'default') {
+    $edit = array(
+      "name[$field]" => TRUE,
+    );
+    $url = 'admin/structure/views/nojs/add-item/' . $this->view['machine_name'] . "/$display/filter";
+    $this->drupalPost($url, $edit, 'Add and configure filter criteria');
+
+    if (!empty($additional)) {
+      // Handle filter-specific options screen.
+      $this->drupalPost(NULL, $additional, 'Apply');
+    }
+
+    if ($exposed) {
+      $this->drupalPost(NULL, array(), 'Expose filter');
+    }
+    $this->drupalPost(NULL, $settings, 'Apply');
+  }
+
+  /**
+   * Edits an existing filter in the current view. See addFilter for param
+   * definitions.
+   */
+  protected function editFilter($field, $settings, $additional = array(), $display = 'default') {
+    if (FALSE !== ($pos = strpos($field, '.'))) {
+      $field = substr($field, $pos + 1);
+    }
+    $url = 'admin/structure/views/nojs/config-item/' . $this->view['machine_name'] . "/$display/filter/$field";
+    $this->drupalPost($url, $settings, 'Apply');
+
+    if (!empty($additional)) {
+      // Handle filter-specific options screen.
+      $this->drupalPost(NULL, $additional, 'Apply');
+    }
+  }
+
+  /**
+   * Adds a sort to a view display. See addFilter for parameter options.
+   *
+   * Note: This routine expects the caller to save the view, as needed.
+   */
+  protected function addSort($field, $settings = array(), $additional = array(), $exposed = TRUE, $display = 'default') {
+    $edit = array(
+      "name[$field]" => TRUE,
+    );
+    $url = 'admin/structure/views/nojs/add-item/' . $this->view['machine_name'] . "/$display/sort";
+    $this->drupalPost($url, $edit, 'Add and configure sort criteria');
+
+    if (!empty($additional)) {
+      // Handle filter-specific options screen.
+      $this->drupalPost(NULL, $additional, 'Apply');
+    }
+
+    if ($exposed) {
+      $this->drupalPost(NULL, array(), 'Expose sort');
+    }
+    $this->drupalPost(NULL, $settings, 'Apply');
+  }
+
+  /**
+   * Adds a field to a view display. See addFilter for parameter options.
+   *
+   * Note: This routine expects the caller to save the view, as needed.
+   */
+  protected function addField($field, $settings = array(), $display = 'default') {
+    $edit = array(
+      "name[$field]" => TRUE,
+    );
+    $url = 'admin/structure/views/nojs/add-item/' . $this->view['machine_name'] . "/$display/field";
+    $this->drupalPost($url, $edit, 'Add and configure fields');
+    $this->drupalPost(NULL, $settings, 'Apply');
+  }
+
+  /**
+   * Ensures that BEF is selected as the exposed form option
+   *
+   * Note: This routine expects the caller to save the view, as needed.
+   */
+  protected function setBefExposedForm($display = 'default') {
+    $edit = array(
+      "exposed_form[type]" => 'better_exposed_filters',
+    );
+    $url = 'admin/structure/views/nojs/display/' . $this->view['machine_name'] . "/$display/exposed_form";
+    $this->drupalPost($url, $edit, 'Apply');
+
+    // BEF settings is covered under setBefSettings() so we just accept the
+    // default values and move on.
+    $this->drupalPost(NULL, array(), 'Apply');
+  }
+
+  /**
+   * Sets various BEF exposed form settings. If $error is specified it also
+   * asserts that the error text apepars when trying to apply $settings.
+   *
+   * Note: This routine expects the caller to save the view, as needed.
+   */
+  protected function setBefSettings($settings, $error = '') {
+    $this->drupalPost($this->getBefSettingsUrl(), $settings, 'Apply');
+    if (!empty($error)) {
+      $this->assertText($error);
+    }
+  }
+
+  /**
+   * Saves the view
+   */
+  protected function saveView() {
+    $this->drupalPost($this->view['edit_url'], array(), 'Save');
+  }
+}
diff --git a/profiles/wcm_base/modules/custom/ocio_field_bases/ocio_field_bases.linkit_profiles.inc b/profiles/wcm_base/modules/custom/ocio_field_bases/ocio_field_bases.linkit_profiles.inc
index e8dd722092bd002482b5d36ec162912a82c42761..9d68b96cb0fd2a8912337ec845acc7e4420d486d 100644
--- a/profiles/wcm_base/modules/custom/ocio_field_bases/ocio_field_bases.linkit_profiles.inc
+++ b/profiles/wcm_base/modules/custom/ocio_field_bases/ocio_field_bases.linkit_profiles.inc
@@ -19,6 +19,10 @@ function ocio_field_bases_default_linkit_profiles() {
   $linkit_profile->profile_type = '2';
   $linkit_profile->data = array(
     'search_plugins' => array(
+      'entity:fieldable_panels_pane' => array(
+        'enabled' => 0,
+        'weight' => '-10',
+      ),
       'entity:node' => array(
         'enabled' => 1,
         'weight' => '-10',
@@ -40,10 +44,27 @@ function ocio_field_bases_default_linkit_profiles() {
         'weight' => '-10',
       ),
       'entity:user' => array(
-        'enabled' => 1,
+        'enabled' => 0,
         'weight' => '-10',
       ),
     ),
+    'entity:fieldable_panels_pane' => array(
+      'result_description' => '',
+      'bundles' => array(
+        'fieldable_panels_pane' => 0,
+        'tile_pane' => 0,
+        'tile_pane_plus_text_area' => 0,
+        'quick_links' => 0,
+        'basic_file' => 0,
+        'image' => 0,
+        'text' => 0,
+        'map' => 0,
+        'table' => 0,
+        'video' => 0,
+        'spotlight' => 0,
+      ),
+      'group_by_bundle' => 0,
+    ),
     'entity:node' => array(
       'result_description' => '',
       'bundles' => array(
@@ -76,7 +97,7 @@ function ocio_field_bases_default_linkit_profiles() {
       'group_by_bundle' => 0,
       'show_scheme' => 0,
       'group_by_scheme' => 0,
-      'url_type' => 'entity',
+      'url_type' => 'direct',
       'image_extra_info' => array(
         'thumbnail' => 'thumbnail',
         'dimensions' => 'dimensions',
@@ -86,6 +107,9 @@ function ocio_field_bases_default_linkit_profiles() {
       'result_description' => '',
       'bundles' => array(
         'ocio_tags' => 0,
+        'wcm_file_tags' => 0,
+        'wcm_user_contact_group' => 0,
+        'wcm_user_leadership_group' => 0,
         'panopoly_categories' => 0,
       ),
       'group_by_bundle' => 0,
@@ -124,7 +148,7 @@ function ocio_field_bases_default_linkit_profiles() {
       ),
     ),
     'autocomplete' => array(
-      'charLimit' => '3',
+      'charLimit' => '2',
       'wait' => '350',
       'remoteTimeout' => '10000',
     ),
diff --git a/profiles/wcm_base/modules/custom/ocio_media/ocio_media.module b/profiles/wcm_base/modules/custom/ocio_media/ocio_media.module
index 44e104cc388c6e348314a97c0af10dfe1db3eee0..0a6eb1f1e96203cbf1855877f18e88665d67769a 100644
--- a/profiles/wcm_base/modules/custom/ocio_media/ocio_media.module
+++ b/profiles/wcm_base/modules/custom/ocio_media/ocio_media.module
@@ -52,7 +52,16 @@ function ocio_media_form_alter(&$form, &$form_state, $form_id) {
       }
     }
   }
-  if ($form_id == 'media_wysiwyg_format_form' && isset($form['options']['fields']['field_file_description'])) {
-    $form['options']['fields']['field_file_description']['#access'] = FALSE;
+
+  if ($form_id == 'media_wysiwyg_format_form') {
+    $hide_fields = array(
+      'field_file_description',
+      'field_file_tags',
+    );
+    foreach ($hide_fields as $field) {
+      if (isset($form['options']['fields'][$field])) {
+        $form['options']['fields'][$field]['#access'] = FALSE;
+      }
+    }
   }
 }
diff --git a/profiles/wcm_base/modules/custom/ocio_permissions/ocio_permissions.features.user_permission.inc b/profiles/wcm_base/modules/custom/ocio_permissions/ocio_permissions.features.user_permission.inc
index 09a911e01dab1ee27d60f9579e9944d5e6d99c2d..f3482719cf3fc6471cebac73516019cc7da35eeb 100644
--- a/profiles/wcm_base/modules/custom/ocio_permissions/ocio_permissions.features.user_permission.inc
+++ b/profiles/wcm_base/modules/custom/ocio_permissions/ocio_permissions.features.user_permission.inc
@@ -3339,6 +3339,9 @@ function ocio_permissions_user_default_permissions() {
     'name' => 'use media wysiwyg',
     'roles' => array(
       'administrator' => 'administrator',
+      'editor' => 'editor',
+      'site builder' => 'site builder',
+      'site manager' => 'site manager',
     ),
     'module' => 'media_wysiwyg',
   );
diff --git a/profiles/wcm_base/modules/custom/ocio_simplesamlphp_auth/ocio_simplesamlphp_auth.admin.inc b/profiles/wcm_base/modules/custom/ocio_simplesamlphp_auth/ocio_simplesamlphp_auth.admin.inc
index b70f5f2f30bd121af602c69670c3b90eef26a6f8..65aa856286806d12ff73384344d1da514906275b 100644
--- a/profiles/wcm_base/modules/custom/ocio_simplesamlphp_auth/ocio_simplesamlphp_auth.admin.inc
+++ b/profiles/wcm_base/modules/custom/ocio_simplesamlphp_auth/ocio_simplesamlphp_auth.admin.inc
@@ -5,40 +5,40 @@
  */
 function ocio_simplesamlphp_auth_whitelist_form($form, &$form_state, $whitelist_item, $op = 'edit', $entity_type = NULL) {
 
-	if ($op == 'clone') {
-		// Only label is provided for cloned entities.
-		$whitelist_item->label .= ' (cloned)';
-		$whitelist_item->type = $entity_type . '_clone';
-	}
-	$form['whitelist_item'] = array(
-		'#title' => t('Add User to Whitelist'),
-		'#type' => 'fieldset',
-	);
-	$form['whitelist_item']['username'] = array(
-		'#title' => t('Username'),
-		'#type' => 'textfield',
-		'#default_value' => isset($whitelist_item->username) ? $whitelist_item->username : '',
-	);
-	$form['whitelist_item']['roleid'] = array(
-		'#title' => t('Role'),
-		'#type' => 'select',
-		'#options' => user_roles(),
-		'#default_value' => isset($whitelist_item->roleid) ? $whitelist_item->roleid : '',
-	);
-	$form['whitelist_item']['actions']['submit'] = array(
-		'#type' => 'submit',
-		'#value' => t('Save'),
-		'#weight' => 40,
-	);
-	return $form;
+  if ($op == 'clone') {
+    // Only label is provided for cloned entities.
+    $whitelist_item->label .= ' (cloned)';
+    $whitelist_item->type = $entity_type . '_clone';
+  }
+  $form['whitelist_item'] = array(
+    '#title' => t('Add User to Whitelist'),
+    '#type' => 'fieldset',
+  );
+  $form['whitelist_item']['username'] = array(
+    '#title' => t('Username'),
+    '#type' => 'textfield',
+    '#default_value' => isset($whitelist_item->username) ? $whitelist_item->username : '',
+  );
+  $form['whitelist_item']['roleid'] = array(
+    '#title' => t('Role'),
+    '#type' => 'select',
+    '#options' => user_roles(),
+    '#default_value' => isset($whitelist_item->roleid) ? $whitelist_item->roleid : '',
+  );
+  $form['whitelist_item']['actions']['submit'] = array(
+    '#type' => 'submit',
+    '#value' => t('Save'),
+    '#weight' => 40,
+  );
+  return $form;
 }
 
 /**
  * Form API submit callback for the whitelist form.
  */
 function ocio_simplesamlphp_auth_whitelist_form_submit(&$form, &$form_state) {
-	$whitelist_item = entity_ui_form_submit_build_entity($form, $form_state);
-	// Save and go back.
-	$whitelist_item->save();
-	$form_state['redirect'] = 'admin/config/people/simplesamlphp_auth/ocio_simplesamlphp_auth_whitelist';
+  $whitelist_item = entity_ui_form_submit_build_entity($form, $form_state);
+  // Save and go back.
+  $whitelist_item->save();
+  $form_state['redirect'] = 'admin/config/people/simplesamlphp_auth/ocio_simplesamlphp_auth_whitelist';
 }
diff --git a/profiles/wcm_base/modules/custom/ocio_simplesamlphp_auth/ocio_simplesamlphp_auth.install b/profiles/wcm_base/modules/custom/ocio_simplesamlphp_auth/ocio_simplesamlphp_auth.install
index 3324dc2155f81269582c47720147458a9bcafef7..b5d6b466b26a92d63bd3607ed1d041cf4599e3dc 100644
--- a/profiles/wcm_base/modules/custom/ocio_simplesamlphp_auth/ocio_simplesamlphp_auth.install
+++ b/profiles/wcm_base/modules/custom/ocio_simplesamlphp_auth/ocio_simplesamlphp_auth.install
@@ -8,60 +8,60 @@
  * Implements hook_install().
  */
 function ocio_simplesamlphp_auth_install() {
-	// set variables
-	variable_set('ocio_simplesamlphp_auth_default_role_id', 2);
-	variable_set('ocio_simplesamlphp_auth_whitelist_only', 0);
-	variable_set('ocio_simplesamlphp_auth_cron_key', _ocio_simplesamlphp_auth_check_cron_key());
-	variable_set('ocio_simplesamlphp_auth_cron_path', 'simplesaml/module.php/cron/cron.php');
-	variable_set('ocio_simplesamlphp_auth_metadata_path', '/metadata/');
-	variable_set('ocio_simplesamlphp_auth_metadata_files', 'shib13-idp-remote.php,saml20-idp-remote.php');
-	variable_set('ocio_simplesamlphp_auth_login_block_msg', 'While you have successfuly authenticated, you are not authorized to access this site. Please contact the administrators to obtain access to this site.');
+  // set variables
+  variable_set('ocio_simplesamlphp_auth_default_role_id', 2);
+  variable_set('ocio_simplesamlphp_auth_whitelist_only', 0);
+  variable_set('ocio_simplesamlphp_auth_cron_key', _ocio_simplesamlphp_auth_check_cron_key());
+  variable_set('ocio_simplesamlphp_auth_cron_path', 'simplesaml/module.php/cron/cron.php');
+  variable_set('ocio_simplesamlphp_auth_metadata_path', '/metadata/');
+  variable_set('ocio_simplesamlphp_auth_metadata_files', 'shib13-idp-remote.php,saml20-idp-remote.php');
+  variable_set('ocio_simplesamlphp_auth_login_block_msg', 'While you have successfuly authenticated, you are not authorized to access this site. Please contact the administrators to obtain access to this site.');
 
-	// set variables created by simplesamlphp_auth to our defaults
-	variable_set('simplesamlphp_auth_user_name', 'urn:oid:0.9.2342.19200300.100.1.3');
-	variable_set('simplesamlphp_auth_unique_id', 'urn:oid:0.9.2342.19200300.100.1.3');
-	variable_set('simplesamlphp_auth_mailattr', 'urn:oid:0.9.2342.19200300.100.1.3');
-	$pantheon_path = _ocio_simplesamlphp_auth_get_env_path();
-	variable_set('simplesamlphp_auth_installdir', $pantheon_path . '/code/private/simplesaml');
+  // set variables created by simplesamlphp_auth to our defaults
+  variable_set('simplesamlphp_auth_user_name', 'urn:oid:0.9.2342.19200300.100.1.3');
+  variable_set('simplesamlphp_auth_unique_id', 'urn:oid:0.9.2342.19200300.100.1.3');
+  variable_set('simplesamlphp_auth_mailattr', 'urn:oid:0.9.2342.19200300.100.1.3');
+  $pantheon_path = _ocio_simplesamlphp_auth_get_env_path();
+  variable_set('simplesamlphp_auth_installdir', $pantheon_path . '/code/private/simplesaml');
 }
 
 /**
  * Implements hook_uninstall().
  */
 function ocio_simplesamlphp_auth_uninstall() {
-	// delete variables
-	variable_del('ocio_simplesamlphp_auth_default_role_id');
-	variable_del('ocio_simplesamlphp_auth_whitelist_only');
-	variable_del('ocio_simplesamlphp_auth_cron_key');
-	variable_del('ocio_simplesamlphp_auth_cron_path');
-	variable_del('ocio_simplesamlphp_auth_metadata_path');
-	variable_del('ocio_simplesamlphp_auth_metadata_files');
+  // delete variables
+  variable_del('ocio_simplesamlphp_auth_default_role_id');
+  variable_del('ocio_simplesamlphp_auth_whitelist_only');
+  variable_del('ocio_simplesamlphp_auth_cron_key');
+  variable_del('ocio_simplesamlphp_auth_cron_path');
+  variable_del('ocio_simplesamlphp_auth_metadata_path');
+  variable_del('ocio_simplesamlphp_auth_metadata_files');
 }
 
 /**
  * Implements hook_schema().
  */
 function ocio_simplesamlphp_auth_schema() {
-	$schema['ocio_simplesamlphp_auth_whitelist'] = array(
-	  'description' => 'Whitelist for users allowed to log in.',
-	  'fields' => array(
-	    'wid' => array(
-	      'description' => 'PK for whitelisted users',
-	      'type' => 'serial',
-	      'not null' => TRUE,
-	    ),
-	    'username' => array(
-	      'description' => 'Username to whitelist.',
-	      'type' => 'varchar',
-	      'length' => '255',
-	      'not null' => TRUE,
-	    ),
-	    'roleid' => array(
-	      'description' => 'RoleID to assign to user when first logging in.',
-	      'type' => 'int',
-	      'not null' => TRUE,
-	    ),
-	     'status' => array(
+  $schema['ocio_simplesamlphp_auth_whitelist'] = array(
+    'description' => 'Whitelist for users allowed to log in.',
+    'fields' => array(
+      'wid' => array(
+        'description' => 'PK for whitelisted users',
+        'type' => 'serial',
+        'not null' => TRUE,
+      ),
+      'username' => array(
+        'description' => 'Username to whitelist.',
+        'type' => 'varchar',
+        'length' => '255',
+        'not null' => TRUE,
+      ),
+      'roleid' => array(
+        'description' => 'RoleID to assign to user when first logging in.',
+        'type' => 'int',
+        'not null' => TRUE,
+      ),
+       'status' => array(
         'type' => 'int',
         'not null' => TRUE,
         // Set the default to ENTITY_CUSTOM without using the constant as it is
@@ -70,19 +70,19 @@ function ocio_simplesamlphp_auth_schema() {
         'size' => 'tiny',
         'description' => 'The exportable status of the entity.',
       ),
-	    'module' => array(
-	    	'description' => 'The name of the module providing this entity type.',
-	    	'type' => 'varchar',
-	    	'length' => 255,
-	    	'not null' => FALSE,
-	    ),
-	  ),
-	  'primary key' => array('wid'),
-	  'unique keys' => array(
-	    'username_UNIQUE' => array('username')
-	  ),
-	);
-	return $schema;
+      'module' => array(
+        'description' => 'The name of the module providing this entity type.',
+        'type' => 'varchar',
+        'length' => 255,
+        'not null' => FALSE,
+      ),
+    ),
+    'primary key' => array('wid'),
+    'unique keys' => array(
+      'username_UNIQUE' => array('username')
+    ),
+  );
+  return $schema;
 }
 
 
diff --git a/profiles/wcm_base/modules/custom/ocio_simplesamlphp_auth/ocio_simplesamlphp_auth.module b/profiles/wcm_base/modules/custom/ocio_simplesamlphp_auth/ocio_simplesamlphp_auth.module
index 571d1f0f70896941f017d3319d346efcb8812233..2701ef970cdd0b333da68ab1adcb7c28c66f31d4 100644
--- a/profiles/wcm_base/modules/custom/ocio_simplesamlphp_auth/ocio_simplesamlphp_auth.module
+++ b/profiles/wcm_base/modules/custom/ocio_simplesamlphp_auth/ocio_simplesamlphp_auth.module
@@ -10,114 +10,114 @@ include_once 'ocio_simplesamlphp_auth.features.inc';
 * Implements hook_entity_info
 */
 function ocio_simplesamlphp_auth_entity_info() {
-	$return['ocio_simplesamlphp_auth_whitelist'] = array(
-		'label' => t('simpleSAML whitelist'),
-		'entity class' => 'Entity',
-		'controller class' => 'EntityAPIControllerExportable',
-		'base table' => 'ocio_simplesamlphp_auth_whitelist',
-		'fieldable' => FALSE,
-		'entity keys' => array(
-			'id' => 'wid',
-			'label' => 'username',
-		),
-		'access callback' => 'ocio_simplesamlphp_auth_whitelist_form_access',
-		'module' => 'ocio_simplesamlphp_auth',
-		'admin ui' => array(
-			'path' => 'admin/config/people/simplesamlphp_auth/ocio_simplesamlphp_auth_whitelist',
-			'file' => 'ocio_simplesamlphp_auth.admin.inc',
-		),
-		'exportable' => TRUE,
-	);
-	return $return;
+  $return['ocio_simplesamlphp_auth_whitelist'] = array(
+    'label' => t('simpleSAML whitelist'),
+    'entity class' => 'Entity',
+    'controller class' => 'EntityAPIControllerExportable',
+    'base table' => 'ocio_simplesamlphp_auth_whitelist',
+    'fieldable' => FALSE,
+    'entity keys' => array(
+      'id' => 'wid',
+      'label' => 'username',
+    ),
+    'access callback' => 'ocio_simplesamlphp_auth_whitelist_form_access',
+    'module' => 'ocio_simplesamlphp_auth',
+    'admin ui' => array(
+      'path' => 'admin/config/people/simplesamlphp_auth/ocio_simplesamlphp_auth_whitelist',
+      'file' => 'ocio_simplesamlphp_auth.admin.inc',
+    ),
+    'exportable' => TRUE,
+  );
+  return $return;
 }
 
 /**
  * Access callback for the entity API.
  */
 function ocio_simplesamlphp_auth_whitelist_form_access($op, $profile = NULL, $account = NULL) {
-	return user_access('administer simpleSAMLphp authentication', $account);
+  return user_access('administer simpleSAMLphp authentication', $account);
 }
 
 /**
 * custom page to display login blocked message
 */
 function ocio_simplesamlphp_auth_login_blocked_msg() {
-	$content['raw_markup'] = array(
-		'#type' => 'markup',
-		'#markup' => variable_get('ocio_simplesamlphp_auth_login_block_msg', 'Your log in has been blocked.'),
-	);
-	return $content;
+  $content['raw_markup'] = array(
+    '#type' => 'markup',
+    '#markup' => variable_get('ocio_simplesamlphp_auth_login_block_msg', 'Your log in has been blocked.'),
+  );
+  return $content;
 }
 
 /**
 * form for authmap fix utility
 */
 function ocio_simplesamlphp_auth_authmap_fix_form($form, &$form_state) {
-	$form['simplesamlphp_auth_authmapfix'] = array(
-		'#type' => 'fieldset',
-		'#title' => 'Fix Authmap',
-		'#collapsed' => FALSE,
-		'#collapsible' => FALSE,
-		'#weight' => 5,
-	);
-	$form['simplesamlphp_auth_authmapfix']['infoblob'] = array(
-		'#type' => 'item',
-		'#description' => 'This utitliy will search for registered users and set their authmap entry to authenticate using the simepleSAMLphp_auth module. This is useful for updating a site with existing users that previously authenticated through a local Drupal account.'
-	);
-	$form['simplesamlphp_auth_authmapfix']['authmapfix_search_string'] = array(
-		'#type' => 'textfield',
-		'#title' => 'Search String',
-		'#description' => 'Full or partical username to search for and update/insert authmap entry.',
-	);
-	$form['simplesamlphp_auth_authmapfix']['authmap_submit'] = array(
-		'#type' => 'submit',
-		'#value' => t('Fix Authmap'),
-	);
-	return $form;
+  $form['simplesamlphp_auth_authmapfix'] = array(
+    '#type' => 'fieldset',
+    '#title' => 'Fix Authmap',
+    '#collapsed' => FALSE,
+    '#collapsible' => FALSE,
+    '#weight' => 5,
+  );
+  $form['simplesamlphp_auth_authmapfix']['infoblob'] = array(
+    '#type' => 'item',
+    '#description' => 'This utitliy will search for registered users and set their authmap entry to authenticate using the simepleSAMLphp_auth module. This is useful for updating a site with existing users that previously authenticated through a local Drupal account.'
+  );
+  $form['simplesamlphp_auth_authmapfix']['authmapfix_search_string'] = array(
+    '#type' => 'textfield',
+    '#title' => 'Search String',
+    '#description' => 'Full or partical username to search for and update/insert authmap entry.',
+  );
+  $form['simplesamlphp_auth_authmapfix']['authmap_submit'] = array(
+    '#type' => 'submit',
+    '#value' => t('Fix Authmap'),
+  );
+  return $form;
 }
 
 /**
 * submit handler for authmap fix utility
 */
 function ocio_simplesamlphp_auth_authmap_fix_form_submit($form, &$form_state) {
-	if(isset($form_state['values']['authmapfix_search_string'])) {
-		_ocio_simplesamlphp_auth_fix_authmap($form_state['values']['authmapfix_search_string']);
-	}
-	return $form;
+  if(isset($form_state['values']['authmapfix_search_string'])) {
+    _ocio_simplesamlphp_auth_fix_authmap($form_state['values']['authmapfix_search_string']);
+  }
+  return $form;
 }
 
 /**
 * Implements hook_menu()
 */
 function ocio_simplesamlphp_auth_menu() {
-	$items = array();
-	$items['admin/config/people/simplesamlphp_auth/ocio_simplesamlphp_auth_authmap_fix'] = array(
-		'title' => 'Fix Authmap',
-		'type' => MENU_LOCAL_TASK,
-		'page callback' => 'drupal_get_form',
+  $items = array();
+  $items['admin/config/people/simplesamlphp_auth/ocio_simplesamlphp_auth_authmap_fix'] = array(
+    'title' => 'Fix Authmap',
+    'type' => MENU_LOCAL_TASK,
+    'page callback' => 'drupal_get_form',
     'page arguments' => array('ocio_simplesamlphp_auth_authmap_fix_form'),
-		'access arguments' => array('administer simpleSAMLphp authentication'),
-		'weight' => 5,
-	);
-	$items['saml_login_blocked'] = array(
-		'title' => 'Log in Blocked',
-		'page callback' => 'ocio_simplesamlphp_auth_login_blocked_msg',
-		'access arguments' => array('access content'),
-	);
-	return $items;
+    'access arguments' => array('administer simpleSAMLphp authentication'),
+    'weight' => 5,
+  );
+  $items['saml_login_blocked'] = array(
+    'title' => 'Log in Blocked',
+    'page callback' => 'ocio_simplesamlphp_auth_login_blocked_msg',
+    'access arguments' => array('access content'),
+  );
+  return $items;
 }
 
 /**
 * Implements hook_menu_alter()
 */
 function ocio_simplesamlphp_auth_menu_alter(&$items) {
-	// add tab placeholder
-	$items['admin/config/people/simplesamlphp_auth']['type'] = MENU_NORMAL_ITEM;
-	$items['admin/config/people/simplesamlphp_auth/general']['type'] = MENU_DEFAULT_LOCAL_TASK;
-	$items['admin/config/people/simplesamlphp_auth/general']['title'] = 'SimpleSAMLphp Auth Settings';
-	// whitelist entity form as tab
-	$items['admin/config/people/simplesamlphp_auth/ocio_simplesamlphp_auth_whitelist']['type'] = MENU_LOCAL_TASK;
-	$items['admin/config/people/simplesamlphp_auth/ocio_simplesamlphp_auth_whitelist']['title'] = 'Whitelist';
+  // add tab placeholder
+  $items['admin/config/people/simplesamlphp_auth']['type'] = MENU_NORMAL_ITEM;
+  $items['admin/config/people/simplesamlphp_auth/general']['type'] = MENU_DEFAULT_LOCAL_TASK;
+  $items['admin/config/people/simplesamlphp_auth/general']['title'] = 'SimpleSAMLphp Auth Settings';
+  // whitelist entity form as tab
+  $items['admin/config/people/simplesamlphp_auth/ocio_simplesamlphp_auth_whitelist']['type'] = MENU_LOCAL_TASK;
+  $items['admin/config/people/simplesamlphp_auth/ocio_simplesamlphp_auth_whitelist']['title'] = 'Whitelist';
 }
 
 /**
@@ -125,96 +125,96 @@ function ocio_simplesamlphp_auth_menu_alter(&$items) {
 * FORM_ID = simplesamlphp_auth_settings
 */
 function ocio_simplesamlphp_auth_form_simplesamlphp_auth_settings_alter(&$form, &$form_state) {
-	// hide the automatic role population section as it can cause problems with shibboleth auth
-	$form['simplesamlphp_auth_grp_user']['simplesamlphp_auth_rolepopulation']['#access'] = FALSE;
-	$form['simplesamlphp_auth_grp_user']['simplesamlphp_auth_roleevaleverytime']['#access'] = FALSE;
-	// add default role setting to User Provisioning section
-	$form['simplesamlphp_auth_grp_reg']['ocio_simplesamlphp_auth_default_role_id'] = array(
-		'#title' => 'Default Role',
-		'#description' => 'The default role to assign auto-provisioned users.',
-		'#type' => 'select',
-		'#options' => user_roles(),
-		'#default_value' => variable_get('ocio_simplesamlphp_auth_default_role_id', 2),
-		'#states' => array(
-			'invisible' => array(':input[name="simplesamlphp_auth_registerusers"]' => array('checked' => FALSE)),
-			'visible' => array(':input[name="simplesamlphp_auth_registerusers"]' => array('checked' => TRUE)),
-			'enabled' => array(':input[name="ocio_simplesamlphp_auth_whitelist_only"]' => array('checked' => FALSE)),
-			'disabled' => array(':input[name="ocio_simplesamlphp_auth_whitelist_only"]' => array('checked' => TRUE)),
-		),
-	);
-	// add whitelist restriction setting to User Provising section
-	$form['simplesamlphp_auth_grp_reg']['ocio_simplesamlphp_auth_whitelist_only'] = array(
-		'#type' => 'checkbox',
-		'#title' => 'Restrict to Whitelisted Users',
-		'#description' => 'Only allow users listed in the whitelist to be auto provisioned. This setting is also applied to users created manually. ',
-		'#default_value' => variable_get('ocio_simplesamlphp_auth_whitelist_only', 0),
-		'#states' => array(
-			'invisible' => array(':input[name="simplesamlphp_auth_registerusers"]' => array('checked' => FALSE)),
-			'visible' => array(':input[name="simplesamlphp_auth_registerusers"]' => array('checked' => TRUE)),
-		),
-	);
-	$form['simplesamlphp_auth_grp_reg']['ocio_simplesamlphp_auth_login_block_msg'] = array(
-		'#type' => 'textarea',
-		'#title' => 'Blocked Message',
-		'#description' => 'This message will be displayed to users who successfully authenticate but are not on the whitelist.',
-		'#default_value' => variable_get('ocio_simplesamlphp_auth_login_block_msg', 'Your login has been blocked.'),
-		'#states' => array(
-			'visible' => array(':input[name="ocio_simplesamlphp_auth_whitelist_only"]' => array('checked' => TRUE)),
-			'invisible' => array(':input[name="ocio_simplesamlphp_auth_whitelist_only"]' => array('checked' => FALSE)),
-		),
-	);
-	// create new section for metadata refresh settings
-	$form['metadata_refresh'] = array(
-		'#type' => 'fieldset',
-		'#title' => 'Metadata Refresh',
-		'#collapsible' => TRUE,
-		'#collapsed' => TRUE,
-	);
-
-	$form['metadata_refresh']['ocio_simplesamlphp_auth_cron_key'] = array(
-		'#type' => 'textfield',
-		'#title' => t('Cron Access Key'),
-		'#default_value' => variable_get('ocio_simplesamlphp_auth_cron_key', _ocio_simplesamlphp_auth_check_cron_key()),
-		'#size' => 50,
-		'#maxlength' => 100,
-		'#description' => t('Cron access key for simpleSAMLphp.'),
-		'#required' => TRUE,
-	);
-
-	$form['metadata_refresh']['ocio_simplesamlphp_auth_cron_path'] = array(
-		'#type' => 'textfield',
-		'#title' => t('Cron Path'),
-		'#default_value' => variable_get('ocio_simplesamlphp_auth_cron_path', 'simplesaml/module.php/cron/cron.php'),
-		'#size' => 50,
-		'#maxlength' => 100,
-		'#description' => t('Path to simpleSAMLphp cron.php.'),
-		'#required' => TRUE,
-	);
-	// -- check for pantheon environment; display path if found
-	$pantheon_environment = _ocio_simplesamlphp_auth_get_pantheon_env();
-	$path_note = '';
-	if ($pantheon_environment) {
-		$envPath = _ocio_simplesamlphp_auth_get_env_path();
-		$path_note = '</br>Pantheon environment detected (' . $pantheon_environment . '). ' . $envPath . 'will be prepended to your path.';
-	}
-	$form['metadata_refresh']['ocio_simplesamlphp_auth_metadata_path'] = array(
-		'#type' => 'textfield',
-		'#title' => t('IDP Metadata File Path'),
-		'#default_value' => variable_get('ocio_simplesamlphp_auth_metadata_path', '/metadata/'),
-		'#size' => 50,
-		'#maxlength' => 100,
-		'#description' => t('Path to IDP metadata files.' . $path_note),
-		'#required' => TRUE,
-	);
-	$form['metadata_refresh']['ocio_simplesamlphp_auth_metadata_files'] = array(
-		'#type' => 'textfield',
-		'#title' => t('IDP Metadata Files'),
-		'#default_value' => variable_get('ocio_simplesamlphp_auth_metadata_files', 'shib13-idp-remote.php,saml20-idp-remote.php'),
-		'#size' => 100,
-		'#maxlength' => 255,
-		'#description' => t('List each IDP metadata file to refresh. Separate each file with a comma.'),
-		'#required' => TRUE,
-	);
+  // hide the automatic role population section as it can cause problems with shibboleth auth
+  $form['simplesamlphp_auth_grp_user']['simplesamlphp_auth_rolepopulation']['#access'] = FALSE;
+  $form['simplesamlphp_auth_grp_user']['simplesamlphp_auth_roleevaleverytime']['#access'] = FALSE;
+  // add default role setting to User Provisioning section
+  $form['simplesamlphp_auth_grp_reg']['ocio_simplesamlphp_auth_default_role_id'] = array(
+    '#title' => 'Default Role',
+    '#description' => 'The default role to assign auto-provisioned users.',
+    '#type' => 'select',
+    '#options' => user_roles(),
+    '#default_value' => variable_get('ocio_simplesamlphp_auth_default_role_id', 2),
+    '#states' => array(
+      'invisible' => array(':input[name="simplesamlphp_auth_registerusers"]' => array('checked' => FALSE)),
+      'visible' => array(':input[name="simplesamlphp_auth_registerusers"]' => array('checked' => TRUE)),
+      'enabled' => array(':input[name="ocio_simplesamlphp_auth_whitelist_only"]' => array('checked' => FALSE)),
+      'disabled' => array(':input[name="ocio_simplesamlphp_auth_whitelist_only"]' => array('checked' => TRUE)),
+    ),
+  );
+  // add whitelist restriction setting to User Provising section
+  $form['simplesamlphp_auth_grp_reg']['ocio_simplesamlphp_auth_whitelist_only'] = array(
+    '#type' => 'checkbox',
+    '#title' => 'Restrict to Whitelisted Users',
+    '#description' => 'Only allow users listed in the whitelist to be auto provisioned. This setting is also applied to users created manually. ',
+    '#default_value' => variable_get('ocio_simplesamlphp_auth_whitelist_only', 0),
+    '#states' => array(
+      'invisible' => array(':input[name="simplesamlphp_auth_registerusers"]' => array('checked' => FALSE)),
+      'visible' => array(':input[name="simplesamlphp_auth_registerusers"]' => array('checked' => TRUE)),
+    ),
+  );
+  $form['simplesamlphp_auth_grp_reg']['ocio_simplesamlphp_auth_login_block_msg'] = array(
+    '#type' => 'textarea',
+    '#title' => 'Blocked Message',
+    '#description' => 'This message will be displayed to users who successfully authenticate but are not on the whitelist.',
+    '#default_value' => variable_get('ocio_simplesamlphp_auth_login_block_msg', 'Your login has been blocked.'),
+    '#states' => array(
+      'visible' => array(':input[name="ocio_simplesamlphp_auth_whitelist_only"]' => array('checked' => TRUE)),
+      'invisible' => array(':input[name="ocio_simplesamlphp_auth_whitelist_only"]' => array('checked' => FALSE)),
+    ),
+  );
+  // create new section for metadata refresh settings
+  $form['metadata_refresh'] = array(
+    '#type' => 'fieldset',
+    '#title' => 'Metadata Refresh',
+    '#collapsible' => TRUE,
+    '#collapsed' => TRUE,
+  );
+
+  $form['metadata_refresh']['ocio_simplesamlphp_auth_cron_key'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Cron Access Key'),
+    '#default_value' => variable_get('ocio_simplesamlphp_auth_cron_key', _ocio_simplesamlphp_auth_check_cron_key()),
+    '#size' => 50,
+    '#maxlength' => 100,
+    '#description' => t('Cron access key for simpleSAMLphp.'),
+    '#required' => TRUE,
+  );
+
+  $form['metadata_refresh']['ocio_simplesamlphp_auth_cron_path'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Cron Path'),
+    '#default_value' => variable_get('ocio_simplesamlphp_auth_cron_path', 'simplesaml/module.php/cron/cron.php'),
+    '#size' => 50,
+    '#maxlength' => 100,
+    '#description' => t('Path to simpleSAMLphp cron.php.'),
+    '#required' => TRUE,
+  );
+  // -- check for pantheon environment; display path if found
+  $pantheon_environment = _ocio_simplesamlphp_auth_get_pantheon_env();
+  $path_note = '';
+  if ($pantheon_environment) {
+    $envPath = _ocio_simplesamlphp_auth_get_env_path();
+    $path_note = '</br>Pantheon environment detected (' . $pantheon_environment . '). ' . $envPath . 'will be prepended to your path.';
+  }
+  $form['metadata_refresh']['ocio_simplesamlphp_auth_metadata_path'] = array(
+    '#type' => 'textfield',
+    '#title' => t('IDP Metadata File Path'),
+    '#default_value' => variable_get('ocio_simplesamlphp_auth_metadata_path', '/metadata/'),
+    '#size' => 50,
+    '#maxlength' => 100,
+    '#description' => t('Path to IDP metadata files.' . $path_note),
+    '#required' => TRUE,
+  );
+  $form['metadata_refresh']['ocio_simplesamlphp_auth_metadata_files'] = array(
+    '#type' => 'textfield',
+    '#title' => t('IDP Metadata Files'),
+    '#default_value' => variable_get('ocio_simplesamlphp_auth_metadata_files', 'shib13-idp-remote.php,saml20-idp-remote.php'),
+    '#size' => 100,
+    '#maxlength' => 255,
+    '#description' => t('List each IDP metadata file to refresh. Separate each file with a comma.'),
+    '#required' => TRUE,
+  );
 }
 
 /**
@@ -222,23 +222,23 @@ function ocio_simplesamlphp_auth_form_simplesamlphp_auth_settings_alter(&$form,
 * FORM_ID = user_register_form
 */
 function ocio_simplesamlphp_auth_form_user_register_form_alter(&$form, &$form_state) {
-	// weight mail and pass inputs so we can order new inputs
-	$form['account']['mail']['#weight'] = -9;
-	$form['account']['pass']['#weight'] = -8;
-
-	// add authentication method option to register form
-	$authOptions = array('drupal' => t('Drupal'), 'simplesamlphp' => 'SimpleSAML');
-	$form['account']['authenticationType']= array(
-		'#type' => 'radios',
-		'#title' => t('Authentication Method'),
-		'#description' => t('Select the method that this user will use to authenticate.'),
-		'#required' => TRUE,
-		'#options' => $authOptions,
-		'#default_value' => 'simplesamlphp',
-		'#weight' => -7,
-	);
-	// add whitelist check to registration validation
-	$form['#validate'][] = 'ocio_simplesamlphp_auth_registration_form_whitelist_validate';
+  // weight mail and pass inputs so we can order new inputs
+  $form['account']['mail']['#weight'] = -9;
+  $form['account']['pass']['#weight'] = -8;
+
+  // add authentication method option to register form
+  $authOptions = array('drupal' => t('Drupal'), 'simplesamlphp' => 'SimpleSAML');
+  $form['account']['authenticationType']= array(
+    '#type' => 'radios',
+    '#title' => t('Authentication Method'),
+    '#description' => t('Select the method that this user will use to authenticate.'),
+    '#required' => TRUE,
+    '#options' => $authOptions,
+    '#default_value' => 'simplesamlphp',
+    '#weight' => -7,
+  );
+  // add whitelist check to registration validation
+  $form['#validate'][] = 'ocio_simplesamlphp_auth_registration_form_whitelist_validate';
 }
 
 /**
@@ -246,32 +246,38 @@ function ocio_simplesamlphp_auth_form_user_register_form_alter(&$form, &$form_st
 * FORM_ID = user_profile_form
 */
 function ocio_simplesamlphp_auth_form_user_profile_form_alter(&$form, &$form_state) {
-	// check for authmap entry; set form default value for field
-	$hasAuthmap = _ocio_simplesamlphp_auth_has_authmap($form['account']['name']['#default_value']);
-	$authenticationType = $hasAuthmap ? 'simplesamlphp' : 'drupal';
-
-	// weight mail and pass inputs so we can order new inputs
-	$form['account']['mail']['#weight'] = -9;
-	$form['account']['pass']['#weight'] = -8;
-	$form['account']['pass']['#access'] = TRUE;
-
-	// add authentication method option to profile form
-	$authOptions = array('drupal' => t('Drupal'), 'simplesamlphp' => 'SimpleSAML');
-	$form['account']['authenticationType']= array(
-		'#type' => 'radios',
-		'#title' => t('Authentication Method'),
-		'#description' => t('Select the method that this user will use to authenticate.'),
-		'#required' => TRUE,
-		'#options' => $authOptions,
-		'#default_value' => $authenticationType,
-		'#weight' => -7,
-	);
-
-	// password states
-	$form['account']['pass']['#states'] = array(
-		'invisible' => array(':input[name="authenticationType"]' => array('value' => 'simpleSAMLphp')),
-		'visible' => array(':input[name="authenticationType"]' => array('value' => 'drupal')),
-	);
+  // check for authmap entry; set form default value for field
+  $hasAuthmap = _ocio_simplesamlphp_auth_has_authmap($form['account']['name']['#default_value']);
+  $authenticationType = $hasAuthmap ? 'simplesamlphp' : 'drupal';
+
+  // weight mail and pass inputs so we can order new inputs
+  $form['account']['mail']['#weight'] = -9;
+  $form['account']['pass']['#weight'] = -8;
+  $form['account']['pass']['#access'] = TRUE;
+
+  // disable username and email address for simplesaml users
+  if ($authenticationType == 'simplesamlphp') {
+    $form['account']['name']['#disabled'] = TRUE;
+    $form['account']['name']['#description'] = 'Username can not be changed for users authenticating via SimpleSAML.';
+    $form['account']['mail']['#disabled'] = TRUE;
+    $form['account']['mail']['#description'] = 'Email can not be changed for users authenticating via SimpleSAML.';
+    $form['account']['pass']['#access'] = FALSE;
+    $form['account']['current_pass']['#access'] = FALSE;
+  }
+
+  // add authentication method option to profile form
+  if (user_access('administer simpleSAMLphp authentication')) {
+    $authOptions = array('drupal' => t('Drupal'), 'simplesamlphp' => 'SimpleSAML');
+    $form['account']['authenticationType']= array(
+      '#type' => 'radios',
+      '#title' => t('Authentication Method'),
+      '#description' => t('Select the method that this user will use to authenticate.'),
+      '#required' => TRUE,
+      '#options' => $authOptions,
+      '#default_value' => $authenticationType,
+      '#weight' => -7,
+    );
+  }
 }
 
 /**
@@ -279,165 +285,165 @@ function ocio_simplesamlphp_auth_form_user_profile_form_alter(&$form, &$form_sta
 * FORM_ID = user_cancel_confirm_form
 */
 function ocio_simplesamlphp_auth_form_user_cancel_confirm_form_alter(&$form, &$form_state) {
-	// get whitelist entry
-	$whitelist_entry = _ocio_simplesamlphp_auth_get_whitelist_entry($form['_account']['#value']->name);
-	// has whitelist entry; add elements to form
-	if (isset($whitelist_entry->wid)) {
-		// weight the existing form elements so we can control order
-		$form['user_cancel_method']['#weight'] = -10;
-		$form['user_cancel_confirm']['#weight'] = -7;
-		$form['user_cancel_notify']['#weight'] = -7;
-		$form['whitelist_remove'] = array(
-			'#type' => 'checkbox',
-			'#title' => 'Remove from Whitelist',
-			'#description' => 'Delete this user from the simpleSAMLphp Auth whitelist.',
-			'#weight' => -8,
-			'#attributes' => array('checked' => 'checked'),
-		);
-		// hook_user_delete doesn't get passed confirm form values so add submit handler to this form to catch whitelist delete requests
-		$form['#submit'][] = 'ocio_simplesamlphp_auth_cancel_delete_user_submit';
-	}
+  // get whitelist entry
+  $whitelist_entry = _ocio_simplesamlphp_auth_get_whitelist_entry($form['_account']['#value']->name);
+  // has whitelist entry; add elements to form
+  if (isset($whitelist_entry->wid)) {
+    // weight the existing form elements so we can control order
+    $form['user_cancel_method']['#weight'] = -10;
+    $form['user_cancel_confirm']['#weight'] = -7;
+    $form['user_cancel_notify']['#weight'] = -7;
+    $form['whitelist_remove'] = array(
+      '#type' => 'checkbox',
+      '#title' => 'Remove from Whitelist',
+      '#description' => 'Delete this user from the simpleSAMLphp Auth whitelist.',
+      '#weight' => -8,
+      '#attributes' => array('checked' => 'checked'),
+    );
+    // hook_user_delete doesn't get passed confirm form values so add submit handler to this form to catch whitelist delete requests
+    $form['#submit'][] = 'ocio_simplesamlphp_auth_cancel_delete_user_submit';
+  }
 }
 
 /**
 * custom validation function for user forms
 */
 function ocio_simplesamlphp_auth_registration_form_whitelist_validate($form, &$form_state) {
-	// only enforce the whitelist for simpleSAMLphp authenticated users
-	if ($form_state['values']['authenticationType'] == 'simplesamlphp') {
-		// get whitelist restriction setting
-		$whitelist_only = variable_get('ocio_simplesamlphp_auth_whitelist_only', 0);
-		// enforce the whitelist
-		if ($whitelist_only) {
-			// get whitelist entry
-			$whitelist_entry = _ocio_simplesamlphp_auth_get_whitelist_entry($form_state['values']['name']);
-			// no whitelist entry; set error
-			if (!isset($whitelist_entry->wid)) {
-				form_set_error('name', 'User creation is set to whitelist only. User is not whitelisted and can not be created.');
-			}
-		}
-	}
+  // only enforce the whitelist for simpleSAMLphp authenticated users
+  if ($form_state['values']['authenticationType'] == 'simplesamlphp') {
+    // get whitelist restriction setting
+    $whitelist_only = variable_get('ocio_simplesamlphp_auth_whitelist_only', 0);
+    // enforce the whitelist
+    if ($whitelist_only) {
+      // get whitelist entry
+      $whitelist_entry = _ocio_simplesamlphp_auth_get_whitelist_entry($form_state['values']['name']);
+      // no whitelist entry; set error
+      if (!isset($whitelist_entry->wid)) {
+        form_set_error('name', 'User creation is set to whitelist only. User is not whitelisted and can not be created.');
+      }
+    }
+  }
 }
 
 /**
 * submit handler for the cancel user confirmation form
-* 	- hook_user_cancel doesn't get called for user_cancel_delete cancelation method, hook_user_delete is called
-* 	- hook_user_delete doesn't get form values passed to it
-*	- this catches the whitelist remove request from the confirm form for the user_cancel_delete cancelation method
+*   - hook_user_cancel doesn't get called for user_cancel_delete cancelation method, hook_user_delete is called
+*   - hook_user_delete doesn't get form values passed to it
+*  - this catches the whitelist remove request from the confirm form for the user_cancel_delete cancelation method
 */
 function ocio_simplesamlphp_auth_cancel_delete_user_submit($form, &$form_state) {
-	if (isset($form_state['values']['whitelist_remove']) && $form_state['values']['whitelist_remove'] == 1) {
-		// remove whitelist
-		$whitelist_entry = _ocio_simplesamlphp_auth_get_whitelist_entry($form['_account']['#value']->name);
-		entity_delete('ocio_simplesamlphp_auth_whitelist', $whitelist_entry->wid);
-	}
-	_ocio_simplesamlphp_auth_remove_authmap($account->name);
+  if (isset($form_state['values']['whitelist_remove']) && $form_state['values']['whitelist_remove'] == 1) {
+    // remove whitelist
+    $whitelist_entry = _ocio_simplesamlphp_auth_get_whitelist_entry($form['_account']['#value']->name);
+    entity_delete('ocio_simplesamlphp_auth_whitelist', $whitelist_entry->wid);
+  }
+  _ocio_simplesamlphp_auth_remove_authmap($account->name);
 }
 
 /**
 * Implements hook_user_login()
-* 	NOTE: the simplesamlphp_auth module will clear out all role assignments made during user creation if you are not using the
-* 	attribute->role mapping feature. It passes an empty array to the role assignment method _after_ the user has been created during
-* 	its init hook. To avoid having to modify that module, we check for whitelist assigned roles on login and assign them if they
-* 	are not already assigned.
+*   NOTE: the simplesamlphp_auth module will clear out all role assignments made during user creation if you are not using the
+*   attribute->role mapping feature. It passes an empty array to the role assignment method _after_ the user has been created during
+*   its init hook. To avoid having to modify that module, we check for whitelist assigned roles on login and assign them if they
+*   are not already assigned.
 */
 function ocio_simplesamlphp_auth_user_login(&$edit, $account) {
-	watchdog('ocio_simplesamlphp_auth', 'user login hook fired', array('account' => $account));
-	// check for whitelist entry for the user logging in
-	$whitelist_entry = _ocio_simplesamlphp_auth_get_whitelist_entry($account->name);
-	// user is whitelisted
-	if (isset($whitelist_entry->username)) {
-		// check if they have the role assigned by the whitelist
-		if (!is_array($account->roles) || !array_key_exists($whitelist_entry->roleid, $account->roles)) {
-			// assign whitelist role
-			user_multiple_role_edit(array($account->uid), 'add_role', $whitelist_entry->roleid);
-			watchdog('ocio_simplesamlphp_auth', 'Whitelisted user ' . $account->name . ' logged in. RoleID ' . $whitelist_entry->roleid . ' assigned.');
-		}
-	}
-	// user is not whitelisted
-	else {
-		// check for whitelist restriction
-		$whitelist_only = variable_get('ocio_simplesamlphp_auth_whitelist_only', 0);
-		// only whitelisted users are allowed
-		if ($whitelist_only) {
-			// only whitelisted users are allowed to login; delete user
-			user_delete($account->uid);
+  watchdog('ocio_simplesamlphp_auth', 'user login hook fired', array('account' => $account));
+  // check for whitelist entry for the user logging in
+  $whitelist_entry = _ocio_simplesamlphp_auth_get_whitelist_entry($account->name);
+  // user is whitelisted
+  if (isset($whitelist_entry->username)) {
+    // check if they have the role assigned by the whitelist
+    if (!is_array($account->roles) || !array_key_exists($whitelist_entry->roleid, $account->roles)) {
+      // assign whitelist role
+      user_multiple_role_edit(array($account->uid), 'add_role', $whitelist_entry->roleid);
+      watchdog('ocio_simplesamlphp_auth', 'Whitelisted user ' . $account->name . ' logged in. RoleID ' . $whitelist_entry->roleid . ' assigned.');
+    }
+  }
+  // user is not whitelisted
+  else {
+    // check for whitelist restriction
+    $whitelist_only = variable_get('ocio_simplesamlphp_auth_whitelist_only', 0);
+    // only whitelisted users are allowed
+    if ($whitelist_only) {
+      // only whitelisted users are allowed to login; delete user
+      user_delete($account->uid);
       // log them out and forward to feedback page
       global $_simplesamlphp_auth_as;
-			$_simplesamlphp_auth_as->logout(base_path() . 'saml_login_blocked');
-		}
-		// non-whitelist users are allowed
-		else {
-			// assign the default role
-			user_multiple_role_edit(array($account->uid), 'add_role', variable_get('ocio_simplesamlphp_auth_default_role_id', 2));
-			watchdog('ocio_simplesamlphp_auth', 'Non-whitelisted user' . $account->name . ' logged in. Default roleid' . variable_get('ocio_simplesamlphp_auth_default_role_id', 2) . ' assigned.');
-		}
-	}
+      $_simplesamlphp_auth_as->logout(base_path() . 'saml_login_blocked');
+    }
+    // non-whitelist users are allowed
+    else {
+      // assign the default role
+      user_multiple_role_edit(array($account->uid), 'add_role', variable_get('ocio_simplesamlphp_auth_default_role_id', 2));
+      watchdog('ocio_simplesamlphp_auth', 'Non-whitelisted user' . $account->name . ' logged in. Default roleid' . variable_get('ocio_simplesamlphp_auth_default_role_id', 2) . ' assigned.');
+    }
+  }
 }
 
 /**
 * Impliments hook_user_update()
 */
 function ocio_simplesamlphp_auth_user_update(&$edit, $account, $category) {
-	// check for the user form values for manually inserted users
-	if (isset($edit['authenticationType'])) {
-		// remove authmap if drupal is selected
-		if ($edit['authenticationType'] == 'drupal') {
-	 		_ocio_simplesamlphp_auth_remove_authmap($account->name);
-	 		watchdog('ocio_simplesamlphp_auth', 'User ' . $account->name . ' set to Drupal authentication.');
-	 	}
-	 	// set authmap if simplesaml is selected
-	 	elseif ($edit['authenticationType'] == 'simplesamlphp') {
-	 		user_set_authmaps($account, array('authname_simplesamlphp_auth' => $account->name));
-	 		watchdog('ocio_simplesamlphp_auth', 'User ' . $account->name . ' set to simplesamlphp_auth authentication.');
-	 	}
-	}
+  // check for the user form values for manually inserted users
+  if (isset($edit['authenticationType'])) {
+    // remove authmap if drupal is selected
+    if ($edit['authenticationType'] == 'drupal') {
+       _ocio_simplesamlphp_auth_remove_authmap($account->name);
+       watchdog('ocio_simplesamlphp_auth', 'User ' . $account->name . ' set to Drupal authentication.');
+     }
+     // set authmap if simplesaml is selected
+     elseif ($edit['authenticationType'] == 'simplesamlphp') {
+       user_set_authmaps($account, array('authname_simplesamlphp_auth' => $account->name));
+       watchdog('ocio_simplesamlphp_auth', 'User ' . $account->name . ' set to simplesamlphp_auth authentication.');
+     }
+  }
 }
 
 /**
  * Implements hook_cron().
  */
 function ocio_simplesamlphp_auth_cron() {
-	// assemble filePath from environment and module settings
-	$metadataPath = variable_get('ocio_simplesamlphp_auth_metadata_path', '/metadata/');
-	$envPath = _ocio_simplesamlphp_auth_get_env_path();
-	// slash checks/fixes
-	if (substr($metadataPath, 0, 1) != '/') {
-		$metadataPath = '/' . $metadataPath;
-	}
-	if (substr($metadataPath, strlen($metadataPath), -1) != '/') {
-		$metadataPath = $metadataPath . '/';
-	}
-	$filePath = $envPath . $metadataPath;
-	// get files to refresh as array
-	$filesToRefresh = explode(',', variable_get('ocio_simplesamlphp_auth_metadata_files', 'shib13-idp-remote.php,saml20-idp-remote.php'));
-	// init request options array
-	$request_options = array();
-	// loop files to refresh
-	foreach ($filesToRefresh as $fileName) {
-		$refreshFile = $filePath . trim($fileName);
-		// check for existing metadata file
-		if (file_exists($refreshFile)) {
-			// if the file is older than an hour (60*60 = 3600 seconds)
-			if (filemtime($refreshFile) < (time()-(60*60))) {
-				// in pantheon dev and test environments, we may need to pass the HTTP Auth credentials.
-				if (in_array(_ocio_simplesamlphp_auth_get_pantheon_env(), array('dev','test'))) {
-					// read the username and password from a file.
-					if (file_exists($envPath . '/httpauth.txt')) {
-						$file_contents = file_get_contents($envPath . '/httpauth.txt');
-						$http_auth_credentials = trim($file_contents);
-						// add the authorization information to the headers.
-						$request_options['headers']['Authorization'] = 'Basic ' . base64_encode($http_auth_credentials);
-					}
-				}
-				// metadata exists but is expired; refresh
-				_ocio_simplesamlphp_auth_refresh_metadata($request_options);
-			}
-		} else {
-			// metadata doesn't exist; create it
-			_ocio_simplesamlphp_auth_refresh_metadata($request_options);
-		}
-	}
+  // assemble filePath from environment and module settings
+  $metadataPath = variable_get('ocio_simplesamlphp_auth_metadata_path', '/metadata/');
+  $envPath = _ocio_simplesamlphp_auth_get_env_path();
+  // slash checks/fixes
+  if (substr($metadataPath, 0, 1) != '/') {
+    $metadataPath = '/' . $metadataPath;
+  }
+  if (substr($metadataPath, strlen($metadataPath), -1) != '/') {
+    $metadataPath = $metadataPath . '/';
+  }
+  $filePath = $envPath . $metadataPath;
+  // get files to refresh as array
+  $filesToRefresh = explode(',', variable_get('ocio_simplesamlphp_auth_metadata_files', 'shib13-idp-remote.php,saml20-idp-remote.php'));
+  // init request options array
+  $request_options = array();
+  // loop files to refresh
+  foreach ($filesToRefresh as $fileName) {
+    $refreshFile = $filePath . trim($fileName);
+    // check for existing metadata file
+    if (file_exists($refreshFile)) {
+      // if the file is older than an hour (60*60 = 3600 seconds)
+      if (filemtime($refreshFile) < (time()-(60*60))) {
+        // in pantheon dev and test environments, we may need to pass the HTTP Auth credentials.
+        if (in_array(_ocio_simplesamlphp_auth_get_pantheon_env(), array('dev','test'))) {
+          // read the username and password from a file.
+          if (file_exists($envPath . '/httpauth.txt')) {
+            $file_contents = file_get_contents($envPath . '/httpauth.txt');
+            $http_auth_credentials = trim($file_contents);
+            // add the authorization information to the headers.
+            $request_options['headers']['Authorization'] = 'Basic ' . base64_encode($http_auth_credentials);
+          }
+        }
+        // metadata exists but is expired; refresh
+        _ocio_simplesamlphp_auth_refresh_metadata($request_options);
+      }
+    } else {
+      // metadata doesn't exist; create it
+      _ocio_simplesamlphp_auth_refresh_metadata($request_options);
+    }
+  }
 }
 
 
@@ -449,40 +455,40 @@ function ocio_simplesamlphp_auth_cron() {
 /**
 * helper function to update previously existing authmap entries to use the simpleSAMLphp module for authentication
 * @param $authnameStringToMatch
-* 	authname search string; matches will have their authmap entry updated to simplesamlphp_auth
+*   authname search string; matches will have their authmap entry updated to simplesamlphp_auth
 */
 function _ocio_simplesamlphp_auth_fix_authmap($authnameStringToMatch) {
-	// get the uids and username that already have an authmap entry
-	$authmapUsers = db_select('authmap', 'a')
-		->fields('a', array('uid'))
-		->condition('module', 'simplesamlphp_auth', '=')
-		->execute()
-		->fetchCol('uid');
-	// find users matching the search string; exclude uid 1 and existing authmap uids
-	$usersToInsert = db_select('users', 'u')
-		->fields('u', array('uid', 'name'))
-		->condition('u.uid', 1, '!=')
-		->condition('u.name', '%' . $authnameStringToMatch . '%' , 'LIKE');
-		if (count($authmapUsers)) {
-			$usersToInsert->condition('u.uid', $authmapUsers, 'NOT IN');
-		}
-	$result = $usersToInsert->execute();
-	$insert_count = $result->rowCount();
-	// insert any missing authmap entries
-	foreach ($result as $u) {
-		_ocio_simplesamlphp_auth_set_authmap($u->name);
-	}
-	// log
-	watchdog('ocio_simplesamlphp_auth', 'Authmap fix ran. ' . $insert_count . ' entries created.');
-	// set message
-	$msg = t("Authmap Fix inserted " . $insert_count . "  entrie(s).");
+  // get the uids and username that already have an authmap entry
+  $authmapUsers = db_select('authmap', 'a')
+    ->fields('a', array('uid'))
+    ->condition('module', 'simplesamlphp_auth', '=')
+    ->execute()
+    ->fetchCol('uid');
+  // find users matching the search string; exclude uid 1 and existing authmap uids
+  $usersToInsert = db_select('users', 'u')
+    ->fields('u', array('uid', 'name'))
+    ->condition('u.uid', 1, '!=')
+    ->condition('u.name', '%' . $authnameStringToMatch . '%' , 'LIKE');
+    if (count($authmapUsers)) {
+      $usersToInsert->condition('u.uid', $authmapUsers, 'NOT IN');
+    }
+  $result = $usersToInsert->execute();
+  $insert_count = $result->rowCount();
+  // insert any missing authmap entries
+  foreach ($result as $u) {
+    _ocio_simplesamlphp_auth_set_authmap($u->name);
+  }
+  // log
+  watchdog('ocio_simplesamlphp_auth', 'Authmap fix ran. ' . $insert_count . ' entries created.');
+  // set message
+  $msg = t("Authmap Fix inserted " . $insert_count . "  entrie(s).");
   drupal_set_message(check_plain($msg));
 }
 
 /**
 * helper function to determine if a user is in the authmap
 * @param $username
-*		the user to search for in the authmap
+*    the user to search for in the authmap
 */
 function _ocio_simplesamlphp_auth_has_authmap($username) {
   // query authmap table
@@ -490,7 +496,7 @@ function _ocio_simplesamlphp_auth_has_authmap($username) {
           ->fields('a', array('authname'))
           ->condition('authname', $username, '=')
           ->condition('module', 'simplesamlphp_auth', '=');
-  $result	= $query->execute()->fetchCol('authname');
+  $result  = $query->execute()->fetchCol('authname');
   // return boolean
   return count($result) ? TRUE : FALSE;
 }
@@ -498,79 +504,79 @@ function _ocio_simplesamlphp_auth_has_authmap($username) {
 /**
 * helper function to add/update a user to the authmap
 * @param $username
-*		the username to add/update from the authmap
+*    the username to add/update from the authmap
 */
 function _ocio_simplesamlphp_auth_set_authmap($username) {
-	// check if they already have an authmap entry
-	$hasAuthmap = _ocio_simplesamlphp_auth_has_authmap($username);
-	if (!$hasAuthmap) {
-		$updateUser = user_load_by_name($username);
-		// insert authmap entry
-		$insertQuery = db_insert('authmap')
-			->fields(array(
-				'uid' => $updateUser->uid,
-				'authname' => $updateUser->name,
-				'module' => 'simplesamlphp_auth',
-			))
-			->execute();
-		// clear drupal password
-		$updateQuery = db_update('users')
-			->fields(array('pass' => ''))
-			->condition('uid', $updateUser->uid, '=')
-			->execute();
-	}
+  // check if they already have an authmap entry
+  $hasAuthmap = _ocio_simplesamlphp_auth_has_authmap($username);
+  if (!$hasAuthmap) {
+    $updateUser = user_load_by_name($username);
+    // insert authmap entry
+    $insertQuery = db_insert('authmap')
+      ->fields(array(
+        'uid' => $updateUser->uid,
+        'authname' => $updateUser->name,
+        'module' => 'simplesamlphp_auth',
+      ))
+      ->execute();
+    // clear drupal password
+    $updateQuery = db_update('users')
+      ->fields(array('pass' => ''))
+      ->condition('uid', $updateUser->uid, '=')
+      ->execute();
+  }
 }
 
 /**
 * helper function to remove a user from the authmap
 * @param $username
-*		the username to remove from the authmap
+*    the username to remove from the authmap
 */
 function _ocio_simplesamlphp_auth_remove_authmap($username) {
-	$query = db_delete('authmap')
-		->condition('authname', $username, '=')
-		->condition('module', 'simplesamlphp_auth', '=');
-	return $query->execute();
+  $query = db_delete('authmap')
+    ->condition('authname', $username, '=')
+    ->condition('module', 'simplesamlphp_auth', '=');
+  return $query->execute();
 }
 
 /**
 * helper function to retrieve a single whitelist entry for the passed username
 * @param $username
-*		the username to search for in the whitelist
+*    the username to search for in the whitelist
 */
 function _ocio_simplesamlphp_auth_get_whitelist_entry($username) {
-	$query = new EntityFieldQuery();
-	$query->entityCondition('entity_type', 'ocio_simplesamlphp_auth_whitelist')
-		->propertyCondition('username', $username, '=')
-		->addMetaData('account', user_load(1)); // execute as admin user
-	$result = $query->execute();
-	$e = FALSE;
-	if(isset($result['ocio_simplesamlphp_auth_whitelist'])) {
-		$id_list = array_keys($result['ocio_simplesamlphp_auth_whitelist']);
-		$e = entity_load_single('ocio_simplesamlphp_auth_whitelist', $id_list[0]);
-	}
-	return $e;
+  $query = new EntityFieldQuery();
+  $query->entityCondition('entity_type', 'ocio_simplesamlphp_auth_whitelist')
+    ->propertyCondition('username', $username, '=')
+    ->addMetaData('account', user_load(1)); // execute as admin user
+  $result = $query->execute();
+  $e = FALSE;
+  if(isset($result['ocio_simplesamlphp_auth_whitelist'])) {
+    $id_list = array_keys($result['ocio_simplesamlphp_auth_whitelist']);
+    $e = entity_load_single('ocio_simplesamlphp_auth_whitelist', $id_list[0]);
+  }
+  return $e;
 }
 
 /**
 * helper function that actually executes the refresh of the metadata; called from the cron hook
 * @param $httpOptions
-*		additional options to pass during the http request for metadata refresh
+*    additional options to pass during the http request for metadata refresh
 */
 function _ocio_simplesamlphp_auth_refresh_metadata($httpOptions = array()){
-	// get settings
-	$cron_key = variable_get('ocio_simplesamlphp_auth_cron_key', '');
-	$cron_path = variable_get('ocio_simplesamlphp_auth_cron_path', 'simplesaml/module.php/cron/cron.php');
-	// format request
-	$urlOptions = array(
-		'query' => array(
-			'key' => $cron_key,
-			'tag' => 'hourly',
-		),
-		'absolute' => TRUE,
-		'https' => TRUE,
-	);
-	drupal_http_request(url($cron_path, $urlOptions), $httpOptions);
+  // get settings
+  $cron_key = variable_get('ocio_simplesamlphp_auth_cron_key', '');
+  $cron_path = variable_get('ocio_simplesamlphp_auth_cron_path', 'simplesaml/module.php/cron/cron.php');
+  // format request
+  $urlOptions = array(
+    'query' => array(
+      'key' => $cron_key,
+      'tag' => 'hourly',
+    ),
+    'absolute' => TRUE,
+    'https' => TRUE,
+  );
+  drupal_http_request(url($cron_path, $urlOptions), $httpOptions);
 }
 
 /**
@@ -578,7 +584,7 @@ function _ocio_simplesamlphp_auth_refresh_metadata($httpOptions = array()){
 * returns dev, test, or live if a pantheon environment exists; otherwise returns false
 */
 function _ocio_simplesamlphp_auth_get_pantheon_env() {
-	return (isset($_ENV['PANTHEON_ENVIRONMENT'])) ? $_ENV['PANTHEON_ENVIRONMENT'] : FALSE;
+  return (isset($_ENV['PANTHEON_ENVIRONMENT'])) ? $_ENV['PANTHEON_ENVIRONMENT'] : FALSE;
 }
 
 /**
@@ -586,15 +592,15 @@ function _ocio_simplesamlphp_auth_get_pantheon_env() {
 * currently only handles pantheon environments but additional environment checks can be added here
 */
 function _ocio_simplesamlphp_auth_get_env_path() {
-	$envPath = '';
-	// pantheon check
-	$pantheon_environment = _ocio_simplesamlphp_auth_get_pantheon_env();
-	// assemble pantheon path
-	if ($pantheon_environment) {
-		$pressflow_settings = json_decode($_SERVER['PRESSFLOW_SETTINGS'], TRUE);
-		$envPath = '/srv/bindings/' . $pressflow_settings['conf']['pantheon_binding'];
-	}
-	return $envPath;
+  $envPath = '';
+  // pantheon check
+  $pantheon_environment = _ocio_simplesamlphp_auth_get_pantheon_env();
+  // assemble pantheon path
+  if ($pantheon_environment) {
+    $pressflow_settings = json_decode($_SERVER['PRESSFLOW_SETTINGS'], TRUE);
+    $envPath = '/srv/bindings/' . $pressflow_settings['conf']['pantheon_binding'];
+  }
+  return $envPath;
 }
 
 /**
@@ -602,23 +608,23 @@ function _ocio_simplesamlphp_auth_get_env_path() {
 * generates new key if one is not found on the server.
 */
 function _ocio_simplesamlphp_auth_check_cron_key() {
-	$file = '/private/simplesaml/config/config.php';
-	$path = DRUPAL_ROOT . $file;
-	$cron_key = '';
+  $file = '/private/simplesaml/config/config.php';
+  $path = DRUPAL_ROOT . $file;
+  $cron_key = '';
 
-	if (file_exists($path)) {
-		$line = preg_grep('/cronkey/', file($path));
-		if (preg_match("/(?!'cronkey'\s*=>\s*')\w+(?=',)/", array_pop($line), $matches)) {
-			$cron_key = $matches[0];
-		}
-	}
+  if (file_exists($path)) {
+    $line = preg_grep('/cronkey/', file($path));
+    if (preg_match("/(?!'cronkey'\s*=>\s*')\w+(?=',)/", array_pop($line), $matches)) {
+      $cron_key = $matches[0];
+    }
+  }
 
-	if (empty($cron_key) || strlen($cron_key) != 54 || !base64_decode($cron_key)) {
-		$cron_key = variable_get('ocio_simplesamlphp_auth_cron_key', user_password(54));
-		drupal_set_message(t('Missing or invalid cron key detected. Add or update the value inside the $config array in %file using the key below<br><br>@cron_key ', array('@cron_key' => $cron_key, '%file' => $file)), 'warning');
-	}
+  if (empty($cron_key) || strlen($cron_key) != 54 || !base64_decode($cron_key)) {
+    $cron_key = variable_get('ocio_simplesamlphp_auth_cron_key', user_password(54));
+    drupal_set_message(t('Missing or invalid cron key detected. Add or update the value inside the $config array in %file using the key below<br><br>@cron_key ', array('@cron_key' => $cron_key, '%file' => $file)), 'warning');
+  }
 
-	variable_set('ocio_simplesamlphp_auth_cron_key', $cron_key);
+  variable_set('ocio_simplesamlphp_auth_cron_key', $cron_key);
 
-	return $cron_key;
+  return $cron_key;
 }
diff --git a/profiles/wcm_base/modules/custom/ocio_wysiwyg/ocio_wysiwyg.linkit_profiles.inc b/profiles/wcm_base/modules/custom/ocio_wysiwyg/ocio_wysiwyg.linkit_profiles.inc
index 74d2df8cf55441ae006ebdea7ac262a21b91c917..43cde70dca9bb631ccfe9d1e4e49b59e6f48a26c 100644
--- a/profiles/wcm_base/modules/custom/ocio_wysiwyg/ocio_wysiwyg.linkit_profiles.inc
+++ b/profiles/wcm_base/modules/custom/ocio_wysiwyg/ocio_wysiwyg.linkit_profiles.inc
@@ -25,6 +25,10 @@ function ocio_wysiwyg_default_linkit_profiles() {
       'ds_code' => 'ds_code',
     ),
     'search_plugins' => array(
+      'entity:fieldable_panels_pane' => array(
+        'enabled' => 0,
+        'weight' => '-10',
+      ),
       'entity:node' => array(
         'enabled' => 1,
         'weight' => '-10',
@@ -50,15 +54,34 @@ function ocio_wysiwyg_default_linkit_profiles() {
         'weight' => '-10',
       ),
     ),
+    'entity:fieldable_panels_pane' => array(
+      'result_description' => '',
+      'bundles' => array(
+        'fieldable_panels_pane' => 0,
+        'tile_pane' => 0,
+        'tile_pane_plus_text_area' => 0,
+        'quick_links' => 0,
+        'basic_file' => 0,
+        'image' => 0,
+        'text' => 0,
+        'map' => 0,
+        'table' => 0,
+        'video' => 0,
+        'spotlight' => 0,
+      ),
+      'group_by_bundle' => 0,
+    ),
     'entity:node' => array(
       'result_description' => '',
       'bundles' => array(
         'basic_page' => 0,
-        'web_form' => 0,
+        'book_page' => 0,
+        'calendar_entry' => 0,
         'faq' => 0,
         'featured_slide' => 0,
+        'ocio_landing_page' => 0,
         'article' => 0,
-        'webform' => 0,
+        'web_form' => 0,
       ),
       'group_by_bundle' => 0,
       'include_unpublished' => 0,
@@ -80,7 +103,7 @@ function ocio_wysiwyg_default_linkit_profiles() {
       'group_by_bundle' => 0,
       'show_scheme' => 0,
       'group_by_scheme' => 0,
-      'url_type' => 'entity',
+      'url_type' => 'direct',
       'image_extra_info' => array(
         'thumbnail' => 'thumbnail',
         'dimensions' => 'dimensions',
@@ -90,6 +113,9 @@ function ocio_wysiwyg_default_linkit_profiles() {
       'result_description' => '',
       'bundles' => array(
         'ocio_tags' => 0,
+        'wcm_file_tags' => 0,
+        'wcm_user_contact_group' => 0,
+        'wcm_user_leadership_group' => 0,
         'panopoly_categories' => 0,
       ),
       'group_by_bundle' => 0,
@@ -127,7 +153,7 @@ function ocio_wysiwyg_default_linkit_profiles() {
       ),
     ),
     'autocomplete' => array(
-      'charLimit' => '3',
+      'charLimit' => '2',
       'wait' => '350',
       'remoteTimeout' => '10000',
     ),
diff --git a/profiles/wcm_base/modules/custom/wcm_user_contact/wcm_user_contact.context.inc b/profiles/wcm_base/modules/custom/wcm_user_contact/wcm_user_contact.context.inc
deleted file mode 100644
index c196a921055c13e3bd51520c355355d61ae062ae..0000000000000000000000000000000000000000
--- a/profiles/wcm_base/modules/custom/wcm_user_contact/wcm_user_contact.context.inc
+++ /dev/null
@@ -1,54 +0,0 @@
-<?php
-/**
- * @file
- * wcm_user_contact.context.inc
- */
-
-/**
- * Implements hook_context_default_contexts().
- */
-function wcm_user_contact_context_default_contexts() {
-  $export = array();
-
-  $context = new stdClass();
-  $context->disabled = FALSE; /* Edit this to true to make a default context disabled initially */
-  $context->api_version = 3;
-  $context->name = 'user-contact-page';
-  $context->description = '';
-  $context->tag = 'WCM User Contact';
-  $context->conditions = array(
-    'node' => array(
-      'values' => array(
-        'basic_page' => 'basic_page',
-      ),
-      'options' => array(
-        'node_form' => '1',
-      ),
-    ),
-    'path' => array(
-      'values' => array(
-        'contact' => 'contact',
-      ),
-    ),
-  );
-  $context->reactions = array(
-    'block' => array(
-      'blocks' => array(
-        'views-user_contact-block_1' => array(
-          'module' => 'views',
-          'delta' => 'user_contact-block_1',
-          'region' => 'content',
-          'weight' => '-10',
-        ),
-      ),
-    ),
-  );
-  $context->condition_mode = 1;
-
-  // Translatables
-  // Included for use with string extractors like potx.
-  t('WCM User Contact');
-  $export['user-contact-page'] = $context;
-
-  return $export;
-}
diff --git a/profiles/wcm_base/modules/custom/wcm_user_contact/wcm_user_contact.features.field_instance.inc b/profiles/wcm_base/modules/custom/wcm_user_contact/wcm_user_contact.features.field_instance.inc
index 3f2aae1a967d1cff5c78d5fcb13a51c66745b362..822735cc438aaedf3a51da99bd9aacd0197b9ee6 100644
--- a/profiles/wcm_base/modules/custom/wcm_user_contact/wcm_user_contact.features.field_instance.inc
+++ b/profiles/wcm_base/modules/custom/wcm_user_contact/wcm_user_contact.features.field_instance.inc
@@ -26,13 +26,13 @@ function wcm_user_contact_field_default_field_instances() {
         'module' => 'list',
         'settings' => array(),
         'type' => 'list_default',
-        'weight' => 7,
+        'weight' => 8,
       ),
       'full' => array(
         'label' => 'above',
         'settings' => array(),
         'type' => 'hidden',
-        'weight' => 0,
+        'weight' => 9,
       ),
       'leadership_listing' => array(
         'label' => 'above',
diff --git a/profiles/wcm_base/modules/custom/wcm_user_contact/wcm_user_contact.info b/profiles/wcm_base/modules/custom/wcm_user_contact/wcm_user_contact.info
index 481e3671eadbc56ec3b53cac37287daad3f7aec7..e7352a7d880d47bcaa2d678fef3bcd5f86df5942 100644
--- a/profiles/wcm_base/modules/custom/wcm_user_contact/wcm_user_contact.info
+++ b/profiles/wcm_base/modules/custom/wcm_user_contact/wcm_user_contact.info
@@ -4,13 +4,11 @@ core = 7.x
 package = WCM Features
 version = 7.x-1.0
 project = wcm_user_contact
-dependencies[] = context
 dependencies[] = features
 dependencies[] = list
 dependencies[] = ocio_basic_page
 dependencies[] = views
 dependencies[] = views_content
-features[context][] = user-contact-page
 features[ctools][] = context:context:3
 features[ctools][] = strongarm:strongarm:1
 features[ctools][] = views:views_default:3.0
diff --git a/profiles/wcm_base/modules/custom/wcm_user_contact/wcm_user_contact.views_default.inc b/profiles/wcm_base/modules/custom/wcm_user_contact/wcm_user_contact.views_default.inc
index 8a6bc217749231d530a95bc16ada66b7a282ce1e..1d6d01ca8b05ce76914a4c559fcbd8cd04d74a9c 100644
--- a/profiles/wcm_base/modules/custom/wcm_user_contact/wcm_user_contact.views_default.inc
+++ b/profiles/wcm_base/modules/custom/wcm_user_contact/wcm_user_contact.views_default.inc
@@ -81,7 +81,6 @@ function wcm_user_contact_views_default_views() {
   $handler->display->display_options['fields']['field_street_address']['field'] = 'field_street_address';
   $handler->display->display_options['fields']['field_street_address']['label'] = '';
   $handler->display->display_options['fields']['field_street_address']['element_label_colon'] = FALSE;
-  $handler->display->display_options['fields']['field_street_address']['type'] = 'simple_gmap';
   $handler->display->display_options['fields']['field_street_address']['settings'] = array(
     'include_map' => 0,
     'include_static_map' => 0,
@@ -253,6 +252,82 @@ function wcm_user_contact_views_default_views() {
 
   /* Display: Content pane */
   $handler = $view->new_display('panel_pane', 'Content pane', 'panel_pane_1');
+  $handler->display->display_options['defaults']['title'] = FALSE;
+  $handler->display->display_options['defaults']['fields'] = FALSE;
+  /* Field: User: User Photo */
+  $handler->display->display_options['fields']['field_user_photo']['id'] = 'field_user_photo';
+  $handler->display->display_options['fields']['field_user_photo']['table'] = 'field_data_field_user_photo';
+  $handler->display->display_options['fields']['field_user_photo']['field'] = 'field_user_photo';
+  $handler->display->display_options['fields']['field_user_photo']['label'] = '';
+  $handler->display->display_options['fields']['field_user_photo']['element_label_colon'] = FALSE;
+  $handler->display->display_options['fields']['field_user_photo']['click_sort_column'] = 'fid';
+  $handler->display->display_options['fields']['field_user_photo']['settings'] = array(
+    'image_style' => 'user_picture',
+    'image_link' => 'content',
+  );
+  /* Field: Realname: Real name */
+  $handler->display->display_options['fields']['realname']['id'] = 'realname';
+  $handler->display->display_options['fields']['realname']['table'] = 'realname';
+  $handler->display->display_options['fields']['realname']['field'] = 'realname';
+  $handler->display->display_options['fields']['realname']['label'] = '';
+  $handler->display->display_options['fields']['realname']['element_type'] = 'h2';
+  $handler->display->display_options['fields']['realname']['element_label_colon'] = FALSE;
+  /* Field: User: Title */
+  $handler->display->display_options['fields']['field_job_title']['id'] = 'field_job_title';
+  $handler->display->display_options['fields']['field_job_title']['table'] = 'field_data_field_job_title';
+  $handler->display->display_options['fields']['field_job_title']['field'] = 'field_job_title';
+  $handler->display->display_options['fields']['field_job_title']['label'] = '';
+  $handler->display->display_options['fields']['field_job_title']['element_label_colon'] = FALSE;
+  /* Field: User: E-mail */
+  $handler->display->display_options['fields']['mail']['id'] = 'mail';
+  $handler->display->display_options['fields']['mail']['table'] = 'users';
+  $handler->display->display_options['fields']['mail']['field'] = 'mail';
+  $handler->display->display_options['fields']['mail']['label'] = '';
+  $handler->display->display_options['fields']['mail']['element_label_colon'] = FALSE;
+  /* Field: User: Phone */
+  $handler->display->display_options['fields']['field_phone']['id'] = 'field_phone';
+  $handler->display->display_options['fields']['field_phone']['table'] = 'field_data_field_phone';
+  $handler->display->display_options['fields']['field_phone']['field'] = 'field_phone';
+  $handler->display->display_options['fields']['field_phone']['label'] = '';
+  $handler->display->display_options['fields']['field_phone']['element_label_colon'] = FALSE;
+  $handler->display->display_options['fields']['field_phone']['type'] = 'telephone_link';
+  $handler->display->display_options['fields']['field_phone']['settings'] = array(
+    'title' => '',
+  );
+  /* Field: User: Room and Building */
+  $handler->display->display_options['fields']['field_room_and_building']['id'] = 'field_room_and_building';
+  $handler->display->display_options['fields']['field_room_and_building']['table'] = 'field_data_field_room_and_building';
+  $handler->display->display_options['fields']['field_room_and_building']['field'] = 'field_room_and_building';
+  $handler->display->display_options['fields']['field_room_and_building']['label'] = '';
+  $handler->display->display_options['fields']['field_room_and_building']['element_label_colon'] = FALSE;
+  /* Field: User: Street Address */
+  $handler->display->display_options['fields']['field_street_address']['id'] = 'field_street_address';
+  $handler->display->display_options['fields']['field_street_address']['table'] = 'field_data_field_street_address';
+  $handler->display->display_options['fields']['field_street_address']['field'] = 'field_street_address';
+  $handler->display->display_options['fields']['field_street_address']['label'] = '';
+  $handler->display->display_options['fields']['field_street_address']['element_label_colon'] = FALSE;
+  $handler->display->display_options['fields']['field_street_address']['settings'] = array(
+    'include_map' => 0,
+    'include_static_map' => 0,
+    'iframe_width' => '200',
+    'iframe_height' => '200',
+    'include_link' => 1,
+    'link_text' => 'use_address',
+    'zoom_level' => '14',
+    'information_bubble' => 1,
+    'include_text' => 0,
+    'map_type' => 'm',
+    'langcode' => 'en',
+  );
+  /* Field: User: Contact Group */
+  $handler->display->display_options['fields']['field_contact_group']['id'] = 'field_contact_group';
+  $handler->display->display_options['fields']['field_contact_group']['table'] = 'field_data_field_contact_group';
+  $handler->display->display_options['fields']['field_contact_group']['field'] = 'field_contact_group';
+  $handler->display->display_options['fields']['field_contact_group']['label'] = '';
+  $handler->display->display_options['fields']['field_contact_group']['exclude'] = TRUE;
+  $handler->display->display_options['fields']['field_contact_group']['element_type'] = 'h2';
+  $handler->display->display_options['fields']['field_contact_group']['element_label_colon'] = FALSE;
+  $handler->display->display_options['fields']['field_contact_group']['type'] = 'taxonomy_term_reference_plain';
   $export['user_contact'] = $view;
 
   return $export;
diff --git a/profiles/wcm_base/modules/custom/wcm_user_leadership/wcm_user_leadership.context.inc b/profiles/wcm_base/modules/custom/wcm_user_leadership/wcm_user_leadership.context.inc
deleted file mode 100644
index 9fde4e45dbbc0e438e5c858476f48905a5edd7e2..0000000000000000000000000000000000000000
--- a/profiles/wcm_base/modules/custom/wcm_user_leadership/wcm_user_leadership.context.inc
+++ /dev/null
@@ -1,54 +0,0 @@
-<?php
-/**
- * @file
- * wcm_user_leadership.context.inc
- */
-
-/**
- * Implements hook_context_default_contexts().
- */
-function wcm_user_leadership_context_default_contexts() {
-  $export = array();
-
-  $context = new stdClass();
-  $context->disabled = FALSE; /* Edit this to true to make a default context disabled initially */
-  $context->api_version = 3;
-  $context->name = 'user-leadership-page';
-  $context->description = '';
-  $context->tag = 'WCM User Leadership';
-  $context->conditions = array(
-    'node' => array(
-      'values' => array(
-        'basic_page' => 'basic_page',
-      ),
-      'options' => array(
-        'node_form' => '0',
-      ),
-    ),
-    'path' => array(
-      'values' => array(
-        'leadership' => 'leadership',
-      ),
-    ),
-  );
-  $context->reactions = array(
-    'block' => array(
-      'blocks' => array(
-        'views-leadership_listing-block_1' => array(
-          'module' => 'views',
-          'delta' => 'leadership_listing-block_1',
-          'region' => 'content',
-          'weight' => '-10',
-        ),
-      ),
-    ),
-  );
-  $context->condition_mode = 1;
-
-  // Translatables
-  // Included for use with string extractors like potx.
-  t('WCM User Leadership');
-  $export['user-leadership-page'] = $context;
-
-  return $export;
-}
diff --git a/profiles/wcm_base/modules/custom/wcm_user_leadership/wcm_user_leadership.ds.inc b/profiles/wcm_base/modules/custom/wcm_user_leadership/wcm_user_leadership.ds.inc
deleted file mode 100644
index 5ed7e32a8161cb464d28eea2e0162bdee8915c4c..0000000000000000000000000000000000000000
--- a/profiles/wcm_base/modules/custom/wcm_user_leadership/wcm_user_leadership.ds.inc
+++ /dev/null
@@ -1,104 +0,0 @@
-<?php
-/**
- * @file
- * wcm_user_leadership.ds.inc
- */
-
-/**
- * Implements hook_ds_field_settings_info().
- */
-function wcm_user_leadership_ds_field_settings_info() {
-  $export = array();
-
-  $ds_fieldsetting = new stdClass();
-  $ds_fieldsetting->api_version = 1;
-  $ds_fieldsetting->id = 'user|user|leadership_listing';
-  $ds_fieldsetting->entity_type = 'user';
-  $ds_fieldsetting->bundle = 'user';
-  $ds_fieldsetting->view_mode = 'leadership_listing';
-  $ds_fieldsetting->settings = array(
-    'email' => array(
-      'weight' => '2',
-      'label' => 'hidden',
-      'format' => 'default',
-      'formatter_settings' => array(
-        'show_title' => 0,
-        'title_wrapper' => '',
-        'ctools' => '',
-        'load_terms' => 0,
-        'ft' => array(),
-      ),
-    ),
-  );
-  $export['user|user|leadership_listing'] = $ds_fieldsetting;
-
-  return $export;
-}
-
-/**
- * Implements hook_ds_layout_settings_info().
- */
-function wcm_user_leadership_ds_layout_settings_info() {
-  $export = array();
-
-  $ds_layout = new stdClass();
-  $ds_layout->api_version = 1;
-  $ds_layout->id = 'user|user|leadership_listing';
-  $ds_layout->entity_type = 'user';
-  $ds_layout->bundle = 'user';
-  $ds_layout->view_mode = 'leadership_listing';
-  $ds_layout->layout = 'ds_1col';
-  $ds_layout->settings = array(
-    'regions' => array(
-      'ds_content' => array(
-        0 => 'field_user_photo',
-        1 => 'field_job_title',
-        2 => 'email',
-        3 => 'field_street_address',
-        4 => 'field_room_and_building',
-        5 => 'field_phone',
-        6 => 'field_bio',
-      ),
-    ),
-    'fields' => array(
-      'field_user_photo' => 'ds_content',
-      'field_job_title' => 'ds_content',
-      'email' => 'ds_content',
-      'field_street_address' => 'ds_content',
-      'field_room_and_building' => 'ds_content',
-      'field_phone' => 'ds_content',
-      'field_bio' => 'ds_content',
-    ),
-    'classes' => array(),
-    'wrappers' => array(
-      'ds_content' => 'div',
-      'ds_hidden' => 'div',
-    ),
-    'layout_wrapper' => 'div',
-    'layout_attributes' => '',
-    'layout_attributes_merge' => 1,
-    'layout_link_attribute' => '',
-    'layout_link_custom' => '',
-  );
-  $export['user|user|leadership_listing'] = $ds_layout;
-
-  return $export;
-}
-
-/**
- * Implements hook_ds_view_modes_info().
- */
-function wcm_user_leadership_ds_view_modes_info() {
-  $export = array();
-
-  $ds_view_mode = new stdClass();
-  $ds_view_mode->api_version = 1;
-  $ds_view_mode->view_mode = 'leadership_listing';
-  $ds_view_mode->label = 'Leadership Listing';
-  $ds_view_mode->entities = array(
-    'user' => 'user',
-  );
-  $export['leadership_listing'] = $ds_view_mode;
-
-  return $export;
-}
diff --git a/profiles/wcm_base/modules/custom/wcm_user_leadership/wcm_user_leadership.features.field_instance.inc b/profiles/wcm_base/modules/custom/wcm_user_leadership/wcm_user_leadership.features.field_instance.inc
index 70e54bb90851e155161851027fb8d1f70b5a3989..062ff36a003e607fc4118ef3c15378f484c7b580 100644
--- a/profiles/wcm_base/modules/custom/wcm_user_leadership/wcm_user_leadership.features.field_instance.inc
+++ b/profiles/wcm_base/modules/custom/wcm_user_leadership/wcm_user_leadership.features.field_instance.inc
@@ -26,7 +26,7 @@ function wcm_user_leadership_field_default_field_instances() {
         'module' => 'list',
         'settings' => array(),
         'type' => 'list_default',
-        'weight' => 8,
+        'weight' => 10,
       ),
       'featured' => array(
         'label' => 'above',
@@ -38,7 +38,7 @@ function wcm_user_leadership_field_default_field_instances() {
         'label' => 'hidden',
         'settings' => array(),
         'type' => 'hidden',
-        'weight' => 7,
+        'weight' => 11,
       ),
       'leadership_listing' => array(
         'label' => 'hidden',
diff --git a/profiles/wcm_base/modules/custom/wcm_user_leadership/wcm_user_leadership.info b/profiles/wcm_base/modules/custom/wcm_user_leadership/wcm_user_leadership.info
index 1dce271bb2fdb8a4510a3d87b26a492cdcb996fe..71dc90f69900b0601728664aff7198135bfab3ba 100644
--- a/profiles/wcm_base/modules/custom/wcm_user_leadership/wcm_user_leadership.info
+++ b/profiles/wcm_base/modules/custom/wcm_user_leadership/wcm_user_leadership.info
@@ -4,8 +4,6 @@ core = 7.x
 package = WCM Features
 version = 7.x-1.0
 project = wcm_user_leadership
-dependencies[] = context
-dependencies[] = ds
 dependencies[] = features
 dependencies[] = list
 dependencies[] = number
@@ -13,14 +11,8 @@ dependencies[] = ocio_basic_page
 dependencies[] = options
 dependencies[] = views
 dependencies[] = views_content
-features[context][] = user-leadership-page
-features[ctools][] = context:context:3
-features[ctools][] = ds:ds:1
 features[ctools][] = strongarm:strongarm:1
 features[ctools][] = views:views_default:3.0
-features[ds_field_settings][] = user|user|leadership_listing
-features[ds_layout_settings][] = user|user|leadership_listing
-features[ds_view_modes][] = leadership_listing
 features[features_api][] = api:2
 features[field_base][] = field_display_in_leadership_list
 features[field_instance][] = user-user-field_display_in_leadership_list
diff --git a/profiles/wcm_base/modules/custom/wcm_user_profile/wcm_user_profile.ds.inc b/profiles/wcm_base/modules/custom/wcm_user_profile/wcm_user_profile.ds.inc
index 3fffd9631dafbd83582b4aa724456a2549e8daeb..f9a6367e18781dfade461461c54ed38359d4bc62 100644
--- a/profiles/wcm_base/modules/custom/wcm_user_profile/wcm_user_profile.ds.inc
+++ b/profiles/wcm_base/modules/custom/wcm_user_profile/wcm_user_profile.ds.inc
@@ -18,7 +18,7 @@ function wcm_user_profile_ds_field_settings_info() {
   $ds_fieldsetting->view_mode = 'full';
   $ds_fieldsetting->settings = array(
     'email' => array(
-      'weight' => '2',
+      'weight' => '3',
       'label' => 'hidden',
       'format' => 'default',
     ),
diff --git a/profiles/wcm_base/modules/custom/wcm_user_profile/wcm_user_profile.features.field_instance.inc b/profiles/wcm_base/modules/custom/wcm_user_profile/wcm_user_profile.features.field_instance.inc
index a51c12bdb25b36fc52d800c684eabde405b8f8a9..b14e637eea2aeacbcc505f9a9ab41afdfe467a9a 100644
--- a/profiles/wcm_base/modules/custom/wcm_user_profile/wcm_user_profile.features.field_instance.inc
+++ b/profiles/wcm_base/modules/custom/wcm_user_profile/wcm_user_profile.features.field_instance.inc
@@ -19,10 +19,9 @@ function wcm_user_profile_field_default_field_instances() {
     'display' => array(
       'default' => array(
         'label' => 'hidden',
-        'module' => 'ocio_field_bases',
         'settings' => array(),
-        'type' => 'ocio_field_bases_accordion',
-        'weight' => 2,
+        'type' => 'hidden',
+        'weight' => 4,
       ),
       'directory' => array(
         'label' => 'above',
@@ -41,7 +40,7 @@ function wcm_user_profile_field_default_field_instances() {
         'module' => 'text',
         'settings' => array(),
         'type' => 'text_default',
-        'weight' => 6,
+        'weight' => 2,
       ),
       'leadership_listing' => array(
         'label' => 'hidden',
@@ -92,10 +91,9 @@ function wcm_user_profile_field_default_field_instances() {
     'display' => array(
       'default' => array(
         'label' => 'hidden',
-        'module' => 'ocio_field_bases',
         'settings' => array(),
-        'type' => 'ocio_field_bases_accordion',
-        'weight' => 9,
+        'type' => 'hidden',
+        'weight' => 1,
       ),
       'directory' => array(
         'label' => 'hidden',
@@ -158,10 +156,9 @@ function wcm_user_profile_field_default_field_instances() {
     'display' => array(
       'default' => array(
         'label' => 'hidden',
-        'module' => 'text',
         'settings' => array(),
-        'type' => 'text_default',
-        'weight' => 1,
+        'type' => 'hidden',
+        'weight' => 2,
       ),
       'directory' => array(
         'label' => 'hidden',
@@ -232,10 +229,9 @@ function wcm_user_profile_field_default_field_instances() {
     'display' => array(
       'default' => array(
         'label' => 'hidden',
-        'module' => 'ocio_field_bases',
         'settings' => array(),
-        'type' => 'ocio_field_bases_accordion',
-        'weight' => 10,
+        'type' => 'hidden',
+        'weight' => 6,
       ),
       'directory' => array(
         'label' => 'hidden',
@@ -298,10 +294,9 @@ function wcm_user_profile_field_default_field_instances() {
     'display' => array(
       'default' => array(
         'label' => 'hidden',
-        'module' => 'ocio_field_bases',
         'settings' => array(),
-        'type' => 'ocio_field_bases_accordion',
-        'weight' => 3,
+        'type' => 'hidden',
+        'weight' => 5,
       ),
       'directory' => array(
         'label' => 'hidden',
@@ -318,11 +313,8 @@ function wcm_user_profile_field_default_field_instances() {
       ),
       'full' => array(
         'label' => 'hidden',
-        'module' => 'telephone',
-        'settings' => array(
-          'title' => '',
-        ),
-        'type' => 'telephone_link',
+        'settings' => array(),
+        'type' => 'hidden',
         'weight' => 5,
       ),
       'leadership_listing' => array(
@@ -375,10 +367,9 @@ function wcm_user_profile_field_default_field_instances() {
     'display' => array(
       'default' => array(
         'label' => 'hidden',
-        'module' => 'ocio_field_bases',
         'settings' => array(),
-        'type' => 'ocio_field_bases_accordion',
-        'weight' => 5,
+        'type' => 'hidden',
+        'weight' => 11,
       ),
       'directory' => array(
         'label' => 'hidden',
@@ -395,10 +386,9 @@ function wcm_user_profile_field_default_field_instances() {
       ),
       'full' => array(
         'label' => 'hidden',
-        'module' => 'text',
         'settings' => array(),
-        'type' => 'text_default',
-        'weight' => 4,
+        'type' => 'hidden',
+        'weight' => 7,
       ),
       'leadership_listing' => array(
         'label' => 'hidden',
@@ -448,10 +438,9 @@ function wcm_user_profile_field_default_field_instances() {
     'display' => array(
       'default' => array(
         'label' => 'hidden',
-        'module' => 'ocio_field_bases',
         'settings' => array(),
-        'type' => 'ocio_field_bases_accordion',
-        'weight' => 6,
+        'type' => 'hidden',
+        'weight' => 3,
       ),
       'directory' => array(
         'label' => 'hidden',
@@ -468,10 +457,9 @@ function wcm_user_profile_field_default_field_instances() {
       ),
       'full' => array(
         'label' => 'hidden',
-        'module' => 'text',
         'settings' => array(),
-        'type' => 'text_default',
-        'weight' => 3,
+        'type' => 'hidden',
+        'weight' => 6,
       ),
       'leadership_listing' => array(
         'label' => 'hidden',
diff --git a/profiles/wcm_base/modules/custom/wcm_user_profile/wcm_user_profile.strongarm.inc b/profiles/wcm_base/modules/custom/wcm_user_profile/wcm_user_profile.strongarm.inc
index b7fd9016d7ce56e15cd025b31356fe0a4a2e739a..78057619fbbe2d6fbe7b7d27f7def47fb3a7902f 100644
--- a/profiles/wcm_base/modules/custom/wcm_user_profile/wcm_user_profile.strongarm.inc
+++ b/profiles/wcm_base/modules/custom/wcm_user_profile/wcm_user_profile.strongarm.inc
@@ -26,7 +26,7 @@ function wcm_user_profile_strongarm() {
         'custom_settings' => FALSE,
       ),
       'leadership_listing' => array(
-        'custom_settings' => TRUE,
+        'custom_settings' => FALSE,
       ),
     ),
     'extra_fields' => array(
@@ -47,15 +47,15 @@ function wcm_user_profile_strongarm() {
       'display' => array(
         'summary' => array(
           'default' => array(
-            'weight' => '4',
-            'visible' => TRUE,
+            'weight' => '12',
+            'visible' => FALSE,
           ),
           'featured' => array(
             'weight' => '5',
             'visible' => TRUE,
           ),
           'full' => array(
-            'weight' => '10',
+            'weight' => '12',
             'visible' => FALSE,
           ),
           'leadership_listing' => array(
diff --git a/profiles/wcm_base/themes/ocio_omega_base/css/ocio-omega-base.no-query.css b/profiles/wcm_base/themes/ocio_omega_base/css/ocio-omega-base.no-query.css
index d2bd7a04cf7c4d2dd59526b8871a4d4f362b659a..bd1b7e1989a4e8ff5e3362af8222f032e7699d26 100644
--- a/profiles/wcm_base/themes/ocio_omega_base/css/ocio-omega-base.no-query.css
+++ b/profiles/wcm_base/themes/ocio_omega_base/css/ocio-omega-base.no-query.css
@@ -1943,74 +1943,6 @@ p.search-result__snippet {
   padding: 0;
 }
 
-.views-field-field-user-photo img {
-  border: 1px solid #8c8c8c;
-}
-
-.page-user .field--name-field-bio {
-  margin-top: 2em;
-}
-
-.view-id-leadership_listing {
-  padding-top: 2em;
-}
-.view-id-leadership_listing .views-row {
-  *zoom: 1;
-  margin-bottom: 3em;
-  width: 47%;
-  float: left;
-  margin-right: 6%;
-}
-.view-id-leadership_listing .views-row:after {
-  content: "";
-  display: table;
-  clear: both;
-}
-.view-id-leadership_listing .views-row:nth-child(2n) {
-  margin-right: 0;
-}
-.view-id-leadership_listing .views-row,
-.view-id-leadership_listing .views-row:nth-child(2n) {
-  width: 31.5%;
-  margin-right: 2.75%;
-}
-.view-id-leadership_listing .views-row:nth-child(3n) {
-  margin-right: 0;
-}
-.view-id-leadership_listing .views-row,
-.view-id-leadership_listing .views-row:nth-child(2n),
-.view-id-leadership_listing .views-row:nth-child(3n) {
-  width: 23.125%;
-  margin-right: 2.5%;
-}
-.view-id-leadership_listing .views-row:nth-child(4n) {
-  margin-right: 0;
-}
-.view-id-leadership_listing .views-field-realname h2 {
-  font-size: 21px;
-  font-size: 2.1rem;
-  margin-top: 0.6em;
-  margin-bottom: 0.2em;
-}
-.view-id-leadership_listing .views-field-realname h2 a:hover {
-  color: #028da9;
-}
-.view-id-leadership_listing .views-field-field-job-title,
-.view-id-leadership_listing .views-field-mail {
-  font-size: 13px;
-  font-size: 1.3rem;
-  line-height: 150%;
-  font-weight: 400;
-}
-.view-id-leadership_listing .views-field-field-job-title a,
-.view-id-leadership_listing .views-field-mail a {
-  color: #2d2d2d;
-}
-.view-id-leadership_listing .views-field-field-job-title a:hover,
-.view-id-leadership_listing .views-field-mail a:hover {
-  color: #b00;
-}
-
 .node-type-webform .webform-component-fieldset {
   margin: 40px 0 20px 0;
   padding: 20px 1.5em;
@@ -3404,3 +3336,161 @@ a#skip:active:hover, a#skip:focus:hover {
   margin-top: 0.6em;
   font-weight: 400;
 }
+
+.user-profile .field--name-field-job-title {
+  font-size: 20px;
+  font-size: 2rem;
+  padding-top: 0.4em;
+  padding-bottom: 0.6em;
+}
+.user-profile .field--name-field-user-photo {
+  float: right;
+  margin: -1.4em 0 1em 1.4em;
+}
+
+.field--name-field-user-photo img,
+.views-field-field-user-photo img {
+  border: 1px solid #8c8c8c;
+}
+
+.view-id-leadership_listing .views-group,
+.view-id-user_contact .views-group {
+  clear: both;
+}
+.view-id-leadership_listing .views-group .views-group-header,
+.view-id-user_contact .views-group .views-group-header {
+  margin-bottom: 0.6em;
+}
+.view-id-leadership_listing .views-group .views-row,
+.view-id-user_contact .views-group .views-row {
+  *zoom: 1;
+  float: left;
+  margin-bottom: 3em;
+}
+.view-id-leadership_listing .views-group .views-row:after,
+.view-id-user_contact .views-group .views-row:after {
+  content: "";
+  display: table;
+  clear: both;
+}
+.view-id-leadership_listing .views-group .views-row .views-field-field-user-photo img,
+.view-id-user_contact .views-group .views-row .views-field-field-user-photo img {
+  width: 100%;
+  height: auto;
+}
+.view-id-leadership_listing .views-group .views-row .views-field-realname h2,
+.view-id-user_contact .views-group .views-row .views-field-realname h2 {
+  font-size: 21px;
+  font-size: 2.1rem;
+  margin-top: 0.6em;
+  margin-bottom: 0.2em;
+}
+.view-id-leadership_listing .views-group .views-row .views-field-realname h2 a:hover,
+.view-id-user_contact .views-group .views-row .views-field-realname h2 a:hover {
+  color: #028da9;
+}
+.view-id-leadership_listing .views-group .views-row .views-field-field-job-title,
+.view-id-leadership_listing .views-group .views-row .views-field-mail,
+.view-id-leadership_listing .views-group .views-row .views-field-field-room-and-building,
+.view-id-leadership_listing .views-group .views-row .views-field-field-street-address,
+.view-id-leadership_listing .views-group .views-row .views-field-field-phone,
+.view-id-user_contact .views-group .views-row .views-field-field-job-title,
+.view-id-user_contact .views-group .views-row .views-field-mail,
+.view-id-user_contact .views-group .views-row .views-field-field-room-and-building,
+.view-id-user_contact .views-group .views-row .views-field-field-street-address,
+.view-id-user_contact .views-group .views-row .views-field-field-phone {
+  font-size: 13px;
+  font-size: 1.3rem;
+  line-height: 150%;
+  font-weight: 400;
+}
+.view-id-leadership_listing .views-group .views-row .views-field-field-job-title a,
+.view-id-leadership_listing .views-group .views-row .views-field-mail a,
+.view-id-leadership_listing .views-group .views-row .views-field-field-room-and-building a,
+.view-id-leadership_listing .views-group .views-row .views-field-field-street-address a,
+.view-id-leadership_listing .views-group .views-row .views-field-field-phone a,
+.view-id-user_contact .views-group .views-row .views-field-field-job-title a,
+.view-id-user_contact .views-group .views-row .views-field-mail a,
+.view-id-user_contact .views-group .views-row .views-field-field-room-and-building a,
+.view-id-user_contact .views-group .views-row .views-field-field-street-address a,
+.view-id-user_contact .views-group .views-row .views-field-field-phone a {
+  color: #2d2d2d;
+}
+.view-id-leadership_listing .views-group .views-row .views-field-field-job-title a:hover,
+.view-id-leadership_listing .views-group .views-row .views-field-mail a:hover,
+.view-id-leadership_listing .views-group .views-row .views-field-field-room-and-building a:hover,
+.view-id-leadership_listing .views-group .views-row .views-field-field-street-address a:hover,
+.view-id-leadership_listing .views-group .views-row .views-field-field-phone a:hover,
+.view-id-user_contact .views-group .views-row .views-field-field-job-title a:hover,
+.view-id-user_contact .views-group .views-row .views-field-mail a:hover,
+.view-id-user_contact .views-group .views-row .views-field-field-room-and-building a:hover,
+.view-id-user_contact .views-group .views-row .views-field-field-street-address a:hover,
+.view-id-user_contact .views-group .views-row .views-field-field-phone a:hover {
+  color: #b00;
+}
+.view-id-leadership_listing .views-group .views-row,
+.view-id-user_contact .views-group .views-row {
+  width: 46%;
+  margin-right: 8%;
+}
+.view-id-leadership_listing .views-group .views-row:nth-child(2n+1),
+.view-id-user_contact .views-group .views-row:nth-child(2n+1) {
+  margin-right: 0;
+}
+.view-id-leadership_listing .views-group .views-row,
+.view-id-leadership_listing .views-group .views-row:nth-child(2n+1),
+.view-id-user_contact .views-group .views-row,
+.view-id-user_contact .views-group .views-row:nth-child(2n+1) {
+  width: 28%;
+  margin-right: 8%;
+}
+.view-id-leadership_listing .views-group .views-row:nth-child(3n+1),
+.view-id-user_contact .views-group .views-row:nth-child(3n+1) {
+  margin-right: 0;
+}
+.view-id-leadership_listing .views-group .views-row,
+.view-id-leadership_listing .views-group .views-row:nth-child(2n+1),
+.view-id-leadership_listing .views-group .views-row:nth-child(3n+1),
+.view-id-user_contact .views-group .views-row,
+.view-id-user_contact .views-group .views-row:nth-child(2n+1),
+.view-id-user_contact .views-group .views-row:nth-child(3n+1) {
+  width: 20.5%;
+  margin-right: 6%;
+}
+.view-id-leadership_listing .views-group .views-row:nth-child(4n+1),
+.view-id-user_contact .views-group .views-row:nth-child(4n+1) {
+  margin-right: 0;
+}
+.view-id-leadership_listing .views-group .views-row,
+.view-id-leadership_listing .views-group .views-row:nth-child(2n+1),
+.view-id-leadership_listing .views-group .views-row:nth-child(3n+1),
+.view-id-leadership_listing .views-group .views-row:nth-child(4n+1),
+.view-id-user_contact .views-group .views-row,
+.view-id-user_contact .views-group .views-row:nth-child(2n+1),
+.view-id-user_contact .views-group .views-row:nth-child(3n+1),
+.view-id-user_contact .views-group .views-row:nth-child(4n+1) {
+  width: 16%;
+  margin-right: 5%;
+}
+.view-id-leadership_listing .views-group .views-row:nth-child(5n+1),
+.view-id-user_contact .views-group .views-row:nth-child(5n+1) {
+  margin-right: 0;
+}
+
+.view-id-user_contact .views-group .views-row {
+  /*
+  			,
+  			.views-field-field-room-and-building,
+  			.views-field-field-street-address,
+  			.views-field-field-phone 
+  */
+}
+.view-id-user_contact .views-group .views-row .views-field-field-job-title {
+  font-size: 15px;
+  font-size: 1.5rem;
+  margin-bottom: 0.4em;
+}
+.view-id-user_contact .views-group .views-row .views-field-mail {
+  font-size: 14px;
+  font-size: 1.4rem;
+}
diff --git a/profiles/wcm_base/themes/ocio_omega_base/css/ocio-omega-base.styles.css b/profiles/wcm_base/themes/ocio_omega_base/css/ocio-omega-base.styles.css
index 14c96472a4ff12870e0918cb5b8031d158ef5642..7bcf1b4b5b4405d34472d7c8a57d0a3626000b92 100644
--- a/profiles/wcm_base/themes/ocio_omega_base/css/ocio-omega-base.styles.css
+++ b/profiles/wcm_base/themes/ocio_omega_base/css/ocio-omega-base.styles.css
@@ -1959,78 +1959,6 @@ p.search-result__snippet {
   padding: 0;
 }
 
-.views-field-field-user-photo img {
-  border: 1px solid #8c8c8c;
-}
-
-.page-user .field--name-field-bio {
-  margin-top: 2em;
-}
-
-.view-id-leadership_listing {
-  padding-top: 2em;
-}
-.view-id-leadership_listing .views-row {
-  *zoom: 1;
-  margin-bottom: 3em;
-  width: 47%;
-  float: left;
-  margin-right: 6%;
-}
-.view-id-leadership_listing .views-row:after {
-  content: "";
-  display: table;
-  clear: both;
-}
-.view-id-leadership_listing .views-row:nth-child(2n) {
-  margin-right: 0;
-}
-@media (min-width: 47.5em) {
-  .view-id-leadership_listing .views-row,
-  .view-id-leadership_listing .views-row:nth-child(2n) {
-    width: 31.5%;
-    margin-right: 2.75%;
-  }
-  .view-id-leadership_listing .views-row:nth-child(3n) {
-    margin-right: 0;
-  }
-}
-@media (min-width: 75em) {
-  .view-id-leadership_listing .views-row,
-  .view-id-leadership_listing .views-row:nth-child(2n),
-  .view-id-leadership_listing .views-row:nth-child(3n) {
-    width: 23.125%;
-    margin-right: 2.5%;
-  }
-  .view-id-leadership_listing .views-row:nth-child(4n) {
-    margin-right: 0;
-  }
-}
-.view-id-leadership_listing .views-field-realname h2 {
-  font-size: 21px;
-  font-size: 2.1rem;
-  margin-top: 0.6em;
-  margin-bottom: 0.2em;
-}
-.view-id-leadership_listing .views-field-realname h2 a:hover {
-  color: #028da9;
-}
-.view-id-leadership_listing .views-field-field-job-title,
-.view-id-leadership_listing .views-field-mail {
-  font-size: 13px;
-  font-size: 1.3rem;
-  line-height: 150%;
-  font-weight: 400;
-}
-.view-id-leadership_listing .views-field-field-job-title a,
-.view-id-leadership_listing .views-field-mail a {
-  color: #2d2d2d;
-}
-.view-id-leadership_listing .views-field-field-job-title a:hover,
-.view-id-leadership_listing .views-field-mail a:hover {
-  color: #b00;
-}
-
 .node-type-webform .webform-component-fieldset {
   margin: 40px 0 20px 0;
   padding: 20px 1.5em;
@@ -3459,3 +3387,167 @@ a#skip:active:hover, a#skip:focus:hover {
   margin-top: 0.6em;
   font-weight: 400;
 }
+
+.user-profile .field--name-field-job-title {
+  font-size: 20px;
+  font-size: 2rem;
+  padding-top: 0.4em;
+  padding-bottom: 0.6em;
+}
+.user-profile .field--name-field-user-photo {
+  float: right;
+  margin: -1.4em 0 1em 1.4em;
+}
+
+.field--name-field-user-photo img,
+.views-field-field-user-photo img {
+  border: 1px solid #8c8c8c;
+}
+
+.view-id-leadership_listing .views-group,
+.view-id-user_contact .views-group {
+  clear: both;
+}
+.view-id-leadership_listing .views-group .views-group-header,
+.view-id-user_contact .views-group .views-group-header {
+  margin-bottom: 0.6em;
+}
+.view-id-leadership_listing .views-group .views-row,
+.view-id-user_contact .views-group .views-row {
+  *zoom: 1;
+  float: left;
+  margin-bottom: 3em;
+}
+.view-id-leadership_listing .views-group .views-row:after,
+.view-id-user_contact .views-group .views-row:after {
+  content: "";
+  display: table;
+  clear: both;
+}
+.view-id-leadership_listing .views-group .views-row .views-field-field-user-photo img,
+.view-id-user_contact .views-group .views-row .views-field-field-user-photo img {
+  width: 100%;
+  height: auto;
+}
+.view-id-leadership_listing .views-group .views-row .views-field-realname h2,
+.view-id-user_contact .views-group .views-row .views-field-realname h2 {
+  font-size: 21px;
+  font-size: 2.1rem;
+  margin-top: 0.6em;
+  margin-bottom: 0.2em;
+}
+.view-id-leadership_listing .views-group .views-row .views-field-realname h2 a:hover,
+.view-id-user_contact .views-group .views-row .views-field-realname h2 a:hover {
+  color: #028da9;
+}
+.view-id-leadership_listing .views-group .views-row .views-field-field-job-title,
+.view-id-leadership_listing .views-group .views-row .views-field-mail,
+.view-id-leadership_listing .views-group .views-row .views-field-field-room-and-building,
+.view-id-leadership_listing .views-group .views-row .views-field-field-street-address,
+.view-id-leadership_listing .views-group .views-row .views-field-field-phone,
+.view-id-user_contact .views-group .views-row .views-field-field-job-title,
+.view-id-user_contact .views-group .views-row .views-field-mail,
+.view-id-user_contact .views-group .views-row .views-field-field-room-and-building,
+.view-id-user_contact .views-group .views-row .views-field-field-street-address,
+.view-id-user_contact .views-group .views-row .views-field-field-phone {
+  font-size: 13px;
+  font-size: 1.3rem;
+  line-height: 150%;
+  font-weight: 400;
+}
+.view-id-leadership_listing .views-group .views-row .views-field-field-job-title a,
+.view-id-leadership_listing .views-group .views-row .views-field-mail a,
+.view-id-leadership_listing .views-group .views-row .views-field-field-room-and-building a,
+.view-id-leadership_listing .views-group .views-row .views-field-field-street-address a,
+.view-id-leadership_listing .views-group .views-row .views-field-field-phone a,
+.view-id-user_contact .views-group .views-row .views-field-field-job-title a,
+.view-id-user_contact .views-group .views-row .views-field-mail a,
+.view-id-user_contact .views-group .views-row .views-field-field-room-and-building a,
+.view-id-user_contact .views-group .views-row .views-field-field-street-address a,
+.view-id-user_contact .views-group .views-row .views-field-field-phone a {
+  color: #2d2d2d;
+}
+.view-id-leadership_listing .views-group .views-row .views-field-field-job-title a:hover,
+.view-id-leadership_listing .views-group .views-row .views-field-mail a:hover,
+.view-id-leadership_listing .views-group .views-row .views-field-field-room-and-building a:hover,
+.view-id-leadership_listing .views-group .views-row .views-field-field-street-address a:hover,
+.view-id-leadership_listing .views-group .views-row .views-field-field-phone a:hover,
+.view-id-user_contact .views-group .views-row .views-field-field-job-title a:hover,
+.view-id-user_contact .views-group .views-row .views-field-mail a:hover,
+.view-id-user_contact .views-group .views-row .views-field-field-room-and-building a:hover,
+.view-id-user_contact .views-group .views-row .views-field-field-street-address a:hover,
+.view-id-user_contact .views-group .views-row .views-field-field-phone a:hover {
+  color: #b00;
+}
+.view-id-leadership_listing .views-group .views-row,
+.view-id-user_contact .views-group .views-row {
+  width: 46%;
+  margin-right: 8%;
+}
+.view-id-leadership_listing .views-group .views-row:nth-child(2n+1),
+.view-id-user_contact .views-group .views-row:nth-child(2n+1) {
+  margin-right: 0;
+}
+@media (min-width: 25.875em) {
+  .view-id-leadership_listing .views-group .views-row,
+  .view-id-leadership_listing .views-group .views-row:nth-child(2n+1),
+  .view-id-user_contact .views-group .views-row,
+  .view-id-user_contact .views-group .views-row:nth-child(2n+1) {
+    width: 28%;
+    margin-right: 8%;
+  }
+  .view-id-leadership_listing .views-group .views-row:nth-child(3n+1),
+  .view-id-user_contact .views-group .views-row:nth-child(3n+1) {
+    margin-right: 0;
+  }
+}
+@media (min-width: 47.5em) {
+  .view-id-leadership_listing .views-group .views-row,
+  .view-id-leadership_listing .views-group .views-row:nth-child(2n+1),
+  .view-id-leadership_listing .views-group .views-row:nth-child(3n+1),
+  .view-id-user_contact .views-group .views-row,
+  .view-id-user_contact .views-group .views-row:nth-child(2n+1),
+  .view-id-user_contact .views-group .views-row:nth-child(3n+1) {
+    width: 20.5%;
+    margin-right: 6%;
+  }
+  .view-id-leadership_listing .views-group .views-row:nth-child(4n+1),
+  .view-id-user_contact .views-group .views-row:nth-child(4n+1) {
+    margin-right: 0;
+  }
+}
+@media (min-width: 60em) {
+  .view-id-leadership_listing .views-group .views-row,
+  .view-id-leadership_listing .views-group .views-row:nth-child(2n+1),
+  .view-id-leadership_listing .views-group .views-row:nth-child(3n+1),
+  .view-id-leadership_listing .views-group .views-row:nth-child(4n+1),
+  .view-id-user_contact .views-group .views-row,
+  .view-id-user_contact .views-group .views-row:nth-child(2n+1),
+  .view-id-user_contact .views-group .views-row:nth-child(3n+1),
+  .view-id-user_contact .views-group .views-row:nth-child(4n+1) {
+    width: 16%;
+    margin-right: 5%;
+  }
+  .view-id-leadership_listing .views-group .views-row:nth-child(5n+1),
+  .view-id-user_contact .views-group .views-row:nth-child(5n+1) {
+    margin-right: 0;
+  }
+}
+
+.view-id-user_contact .views-group .views-row {
+  /*
+  			,
+  			.views-field-field-room-and-building,
+  			.views-field-field-street-address,
+  			.views-field-field-phone 
+  */
+}
+.view-id-user_contact .views-group .views-row .views-field-field-job-title {
+  font-size: 15px;
+  font-size: 1.5rem;
+  margin-bottom: 0.4em;
+}
+.view-id-user_contact .views-group .views-row .views-field-mail {
+  font-size: 14px;
+  font-size: 1.4rem;
+}
diff --git a/profiles/wcm_base/themes/ocio_omega_base/sass/components/_users.scss b/profiles/wcm_base/themes/ocio_omega_base/sass/components/_users.scss
deleted file mode 100644
index 4466d3fed315248b95bff2daeee6068d2aa2e07f..0000000000000000000000000000000000000000
--- a/profiles/wcm_base/themes/ocio_omega_base/sass/components/_users.scss
+++ /dev/null
@@ -1,86 +0,0 @@
-//user profile pages
-.user-profile {
-  .group-left {}
-}
-
-//photos
-
-.views-field-field-user-photo {
-  img {
-    border: 1px solid lighten($md-gray, 15%);
-  }
-}
-
-.page-user .field--name-field-bio {
-  margin-top: 2em;
-}
-
-//leadership and directory listings
-.view-id-leadership_listing {
-  padding-top: 2em;
-
-  // 2 columns
-  .views-row {
-    @include pie-clearfix;
-    margin-bottom: 3em;
-    width: 47%;
-    float: left;
-    margin-right: 6%;
-  }
-
-  .views-row:nth-child(2n) {
-    margin-right: 0;
-  }
-
-  // 3 columns
-  @include breakpoint($tab, true) {
-    .views-row,
-    .views-row:nth-child(2n) {
-      width: 31.5%;
-      margin-right: 2.75%;
-    }
-
-    .views-row:nth-child(3n) {
-      margin-right: 0;
-    }
-  }
-
-  // 4 columns
-  @include breakpoint($wide, true) {
-    .views-row,
-    .views-row:nth-child(2n),
-    .views-row:nth-child(3n) {
-      width: 23.125%;
-      margin-right: 2.5%;
-    }
-
-    .views-row:nth-child(4n) {
-      margin-right: 0;
-    }
-  }
-
-  .views-field-realname h2 {
-    @include font-size(2.1);
-    margin-top: 0.6em;
-    margin-bottom: 0.2em;
-
-    a:hover {
-      color: $blue;
-    }
-  }
-
-  .views-field-field-job-title,
-  .views-field-mail {
-    @include font-size(1.3);
-    line-height: 150%;
-    font-weight: 400;
-
-    a {
-      color: $dk-gray;
-
-      &:hover {
-        color: $red;
-      }
-    }
-  }
-}
diff --git a/profiles/wcm_base/themes/ocio_omega_base/sass/components/views/_users.scss b/profiles/wcm_base/themes/ocio_omega_base/sass/components/views/_users.scss
new file mode 100644
index 0000000000000000000000000000000000000000..45582fc898be57670e1c6595e8d5bc783e9cd6ee
--- /dev/null
+++ b/profiles/wcm_base/themes/ocio_omega_base/sass/components/views/_users.scss
@@ -0,0 +1,154 @@
+//user profile pages
+.user-profile {
+	
+	.field--name-field-job-title {
+		@include font-size(2.0);
+		padding-top: 0.4em;
+		padding-bottom: 0.6em;
+	}
+	.field--name-field-user-photo {
+		float: right;
+		margin: -1.4em 0 1em 1.4em;
+	}
+
+}
+
+//photos
+.field--name-field-user-photo,
+.views-field-field-user-photo {
+  img {
+    border: 1px solid lighten($md-gray, 15%);
+  }
+}
+
+//leadership and directory listings
+.view-id-leadership_listing,
+.view-id-user_contact {
+
+	.views-group {
+		clear: both;
+		
+		.views-group-header {
+			margin-bottom: 0.6em;
+		}
+		
+		.views-row {
+			@include pie-clearfix;
+			float: left;
+			margin-bottom: 3em;
+			
+			.views-field-field-user-photo {
+				img {
+					width: 100%;
+					height: auto;
+				}
+			}
+			
+			.views-field-realname h2 {
+				@include font-size(2.1);
+				margin-top: 0.6em;
+				margin-bottom: 0.2em;
+
+				a:hover {
+					color: $blue;
+    		}
+  		}
+  		
+	  	.views-field-field-job-title,
+			.views-field-mail,
+			.views-field-field-room-and-building,
+			.views-field-field-street-address,
+			.views-field-field-phone {
+	    	@include font-size(1.3);
+				line-height: 150%;
+				font-weight: 400;
+	
+				a {
+	      	color: $dk-gray;
+	
+		      &:hover {
+	        	color: $red;
+		      }
+	    	}
+	  	}		
+  	} //end views-row
+
+		// grid manipulation by breakpoint //
+	  // 2 columns
+	  .views-row {
+	    width: 46%;
+	    margin-right: 8%;
+	  }
+	
+	  .views-row:nth-child(2n+1) {
+	    margin-right: 0;
+	  }
+	
+	  // 3 columns at $big-phone
+	  @include breakpoint($big-phone, true) {
+	    .views-row,
+	    .views-row:nth-child(2n+1) {
+	      width: 28%;
+	      margin-right: 8%;
+	    }
+	    .views-row:nth-child(3n+1) {
+	      margin-right: 0;
+	    }
+	  }
+	
+	  // 4 columns at $tab
+	  @include breakpoint($tab, true) {
+	    .views-row,
+	    .views-row:nth-child(2n+1),
+	    .views-row:nth-child(3n+1) {
+	      width: 20.5%;
+	      margin-right: 6%;
+	    }
+	    .views-row:nth-child(4n+1) {
+	      margin-right: 0;
+	    }
+	  }
+	  
+	  // 5 columns at $desk
+	  @include breakpoint($desk, true) {
+	    .views-row,
+	    .views-row:nth-child(2n+1),
+	    .views-row:nth-child(3n+1),
+	    .views-row:nth-child(4n+1) {
+	      width: 16%;
+	      margin-right: 5%;
+	    }
+	    .views-row:nth-child(5n+1) {
+	      margin-right: 0;
+	    }
+	  }
+	} //end views-group
+} // end view-id-leadership_listing
+
+
+//modifications for the contact view only
+
+
+.view-id-user_contact {
+	.views-group {
+		.views-row {
+			.views-field-field-job-title {
+				@include font-size(1.5);
+				margin-bottom: 0.4em;
+			}
+			.views-field-mail {
+				@include font-size(1.4);
+			}
+			
+/*
+			,
+			.views-field-field-room-and-building,
+			.views-field-field-street-address,
+			.views-field-field-phone 
+*/
+			
+			
+		}
+	}
+}
+
diff --git a/profiles/wcm_base/themes/ocio_omega_base/sass/variables/_grid.scss b/profiles/wcm_base/themes/ocio_omega_base/sass/variables/_grid.scss
index 423c7859ee65c1ca0cd697470ecda9b17d233d11..38662db5359a7e2abcfec1187a76f3efa316a843 100644
--- a/profiles/wcm_base/themes/ocio_omega_base/sass/variables/_grid.scss
+++ b/profiles/wcm_base/themes/ocio_omega_base/sass/variables/_grid.scss
@@ -3,6 +3,7 @@ $vert-spacing-unit: 20px;
 $horz-spacing-unit: 1.5em;
 
 $small: max-width 47.5em; // 760px
+$big-phone: 25.875em; //414px
 $tab: 47.5em; //760px
 $desk: 60em; //960px
 $wide: 75em; //1200px
diff --git a/profiles/wcm_base/themes/ocio_omega_base/templates/views/views-view-unformatted.tpl.php b/profiles/wcm_base/themes/ocio_omega_base/templates/views/views-view-unformatted.tpl.php
new file mode 100644
index 0000000000000000000000000000000000000000..575da113ef036b8e277d4b1b87cc2e03d8fd972d
--- /dev/null
+++ b/profiles/wcm_base/themes/ocio_omega_base/templates/views/views-view-unformatted.tpl.php
@@ -0,0 +1,17 @@
+<?php
+
+/**
+ * @file
+ * Template to display a list of rows.
+ */
+?>
+<div class="views-group">
+<?php if (!empty($title)): ?>
+  <h3 class="views-group-header"><?php print $title; ?></h3>
+<?php endif; ?>
+<?php foreach ($rows as $delta => $row): ?>
+  <div<?php print $row_attributes[$delta]; ?>>
+    <?php print $row; ?>
+  </div>
+<?php endforeach; ?>
+</div> <!--/views-group-->
diff --git a/profiles/wcm_base/wcm_base.info b/profiles/wcm_base/wcm_base.info
index 7024555a67bd11f47b5d00bfd8fa3b77410cdefa..1b051aaf25d82505634ee23cf2a53f41112c4958 100644
--- a/profiles/wcm_base/wcm_base.info
+++ b/profiles/wcm_base/wcm_base.info
@@ -39,6 +39,7 @@ dependencies[] = pantheon_api
 
 
 ; Contrib
+dependencies[] = better_exposed_filters
 dependencies[] = calendar
 dependencies[] = context
 dependencies[] = context_omega
diff --git a/profiles/wcm_base/wcm_base.make b/profiles/wcm_base/wcm_base.make
index 1077c887f98014b4603dd0cb0df9682aea99bece..a4e4e0c82cf68a84c80381c7b3e647377aac3463 100644
--- a/profiles/wcm_base/wcm_base.make
+++ b/profiles/wcm_base/wcm_base.make
@@ -4,6 +4,10 @@ core = 7.x
 ; **********************************************
 ; ***************** CONTRIB ********************
 
+projects[better_exposed_filters][version] = 3.x-dev
+projects[better_exposed_filters][subdir] = contrib
+projects[better_exposed_filters][patch][2560321] = http://drupal.org/files/issues/bef-placeholder_support-2560321-2.patch
+
 projects[calendar][version] = 3.5
 projects[calendar][subdir] = contrib