From 774a31982b001625dabcc5da677e21c5a34d3e3b Mon Sep 17 00:00:00 2001
From: Chris Gross <gross.364@osu.edu>
Date: Wed, 1 Mar 2017 13:15:08 -0500
Subject: [PATCH] weekly build

---
 profiles/wcm_base/CHANGELOG.txt               |   13 +
 profiles/wcm_base/README.md                   |  170 +-
 .../contrib/{pathauto => apps}/PATCHES.txt    |    2 +-
 .../modules/contrib/apps/apps.manifest.inc    |   14 +-
 .../contrib/media/includes/media.fields.inc   |    2 +-
 .../wcm_base/modules/contrib/media/media.info |    6 +-
 .../modules/contrib/media/media.install       |    7 +-
 .../modules/contrib/media/media.module        |    7 +-
 .../media_bulk_upload/media_bulk_upload.info  |    6 +-
 .../media_internet/media_internet.info        |    6 +-
 .../tests/media_internet_test.info            |    6 +-
 .../media_migrate_file_types.info             |    6 +-
 .../media_wysiwyg/js/media_wysiwyg.filter.js  |   58 +-
 .../modules/media_wysiwyg/media_wysiwyg.info  |    6 +-
 .../media_wysiwyg/media_wysiwyg.install       |   39 +-
 .../media_wysiwyg_view_mode.info              |    6 +-
 .../media/modules/mediafield/mediafield.info  |    6 +-
 .../modules/contrib/media/tests/media.test    |    2 +-
 .../media/tests/media_module_test.info        |    6 +-
 .../wcm_base/modules/contrib/pathauto/API.txt |  149 --
 .../modules/contrib/pathauto/README.txt       |   77 +-
 .../contrib/pathauto/pathauto.admin.inc       |   14 +-
 .../modules/contrib/pathauto/pathauto.api.php |  160 +-
 .../modules/contrib/pathauto/pathauto.inc     |  158 +-
 .../modules/contrib/pathauto/pathauto.info    |    7 +-
 .../modules/contrib/pathauto/pathauto.install |   44 +-
 .../modules/contrib/pathauto/pathauto.js      |    6 +-
 .../contrib/pathauto/pathauto.migrate.inc     |   56 +
 .../modules/contrib/pathauto/pathauto.module  |  436 ++++-
 .../contrib/pathauto/pathauto.pathauto.inc    |  165 --
 .../modules/contrib/pathauto/pathauto.test    |  326 ++--
 .../contrib/pathauto/pathauto.tokens.inc      |    2 +-
 .../modules/contrib/search_api/PATCHES.txt    |    4 +
 .../contrib/search_api/search_api.module      |    2 +-
 .../modules/contrib/views/PATCHES.txt         |    2 +-
 .../contrib/views/includes/handlers.inc       |    2 +-
 .../wcm_base/modules/contrib/views/js/base.js |    5 +
 .../views_handler_argument_term_node_tid.inc  |    1 +
 .../taxonomy/views_handler_field_taxonomy.inc |    5 +
 ...plugin_argument_validate_taxonomy_term.inc |    3 +
 .../views/plugins/views_plugin_cache.inc      |   10 +-
 .../views/plugins/views_plugin_cache_time.inc |    4 +-
 .../plugins/views_plugin_display_page.inc     |    4 +
 .../plugins/views_plugin_exposed_form.inc     |    9 +-
 .../plugins/views_plugin_style_jump_menu.inc  |    2 +-
 .../contrib/views/tests/views_test.info       |    6 +-
 .../wcm_base/modules/contrib/views/views.info |    6 +-
 .../modules/contrib/views/views_ui.info       |    6 +-
 .../actions/archive.action.inc                |   25 +-
 .../actions/change_owner.action.inc           |   65 +
 .../actions/delete.action.inc                 |   35 +
 .../actions/modify.action.inc                 |  104 +-
 .../actions/user_cancel.action.inc            |   34 +-
 .../actions_permissions.info                  |    6 +-
 .../css/views_bulk_operations.css             |   14 +-
 .../js/views_bulk_operations.js               |   54 +-
 .../views/views_bulk_operations.views.inc     |    3 +-
 ...lk_operations_handler_field_operations.inc |   56 +-
 .../views_bulk_operations.drush.inc           |    2 +-
 .../views_bulk_operations.info                |    8 +-
 .../views_bulk_operations.module              |   46 +-
 .../views_bulk_operations.rules.inc           |   20 +-
 .../contrib/wysiwyg/editors/ckeditor.inc      |    2 +-
 .../contrib/wysiwyg/editors/tinymce.inc       |   23 +-
 .../contrib/wysiwyg/tests/wysiwyg_test.info   |    6 +-
 .../modules/contrib/wysiwyg/wysiwyg.admin.inc |    6 +-
 .../contrib/wysiwyg/wysiwyg.features.inc      |   25 +-
 .../modules/contrib/wysiwyg/wysiwyg.info      |    6 +-
 .../modules/contrib/wysiwyg/wysiwyg.js        |   13 +-
 .../ocio_landing_page.module                  |    4 +
 .../wcm_panels_settings.info                  |   11 +-
 .../wcm_panels_settings.strongarm.inc         |   12 +
 ...m_permissions.features.user_permission.inc |   70 +
 .../wcm_permissions/wcm_permissions.info      |   10 +
 .../wcm_user_config/wcm_user_config.info      |    1 -
 .../wcm_user_config.strongarm.inc             |   24 -
 ..._workbench.features.features_overrides.inc |  125 --
 .../wcm_workbench/wcm_workbench.features.inc  |  131 --
 .../custom/wcm_workbench/wcm_workbench.info   |   49 +-
 .../custom/wcm_workbench/wcm_workbench.module |    6 +-
 .../wcm_workbench.views_default.inc           |  473 +++++
 .../panopoly/panopoly_admin/CHANGELOG.txt     |    8 +
 .../panopoly_admin/panopoly_admin.info        |    6 +-
 .../panopoly/panopoly_core/CHANGELOG.txt      |   14 +
 .../css/panopoly-jquery-ui-theme.css          |    3 +-
 .../panopoly/panopoly_core/panopoly_core.info |    7 +-
 .../panopoly/panopoly_core/panopoly_core.make |   15 +-
 .../panopoly/panopoly_magic/CHANGELOG.txt     |    9 +
 .../panopoly/panopoly_magic/panopoly-magic.js |   28 +
 .../panopoly_magic/panopoly_magic.info        |    6 +-
 .../panopoly_magic/panopoly_magic.module      |   52 +
 .../panopoly/panopoly_pages/CHANGELOG.txt     |    8 +
 .../panopoly_pages/panopoly_pages.info        |    9 +-
 .../panopoly/panopoly_search/CHANGELOG.txt    |    8 +
 .../panopoly_search/panopoly_search.info      |    6 +-
 .../panopoly_search/panopoly_search.make      |    1 +
 .../modules/panopoly/panopoly_test/.gitignore |    1 +
 .../panopoly/panopoly_test/CHANGELOG.txt      |   13 +
 .../{tests => behat}/behat.common.yml         |    0
 .../{tests => behat}/behat.template.yml       |    0
 .../{tests => behat}/composer.json            |    4 +-
 .../features/advanced_widgets.feature         |    0
 .../features/basic_ipe.feature                |    0
 .../features/bootstrap/FeatureContext.php     |    0
 .../features/contentitem_widget.feature       |    0
 .../features/contentlist_widget.feature       |    0
 .../features/contentpage.feature              |    0
 .../{tests => behat}/features/demo.feature    |    0
 .../features/file_widget.feature              |    0
 .../behat/features/fpp_linkit.feature         |   21 +
 .../{tests => behat}/features/help.feature    |    0
 .../features/hidden_view_mode_options.feature |    0
 .../features/image_widget.feature             |    2 +-
 .../features/landingpage.feature              |    0
 .../{tests => behat}/features/linkit.feature  |    0
 .../features/links_widget.feature             |    0
 .../{tests => behat}/features/login.feature   |    0
 .../features/managed_file.feature             |    0
 .../features/maps_widget.feature              |    0
 .../panopoly_core_dependencies.feature        |    0
 .../add_content_preview.feature               |    0
 .../panopoly_magic/display_type.feature       |    0
 .../features/panopoly_magic/fape.feature      |    0
 .../panopoly_magic/form_improvements.feature  |    0
 .../panopoly_magic/livepreview.feature        |    0
 .../panopoly_magic/seldom_used_panes.feature  |    0
 .../panopoly_magic/view_modes.feature         |    0
 .../features/pathauto_administrator.feature   |    0
 .../features/pathauto_editor.feature          |    0
 .../{tests => behat}/features/search.feature  |    0
 .../features/spotlight_widget.feature         |    7 +
 .../features/submenu_widget.feature           |    0
 .../features/table_widget.feature             |    0
 .../features/text_widget.feature              |    0
 .../features/video_widget.feature             |    0
 .../{tests => behat}/features/wysiwyg.feature |    0
 .../features/wysiwyg_media.feature            |    0
 .../steps/panopoly_test.behat.inc             |   98 +-
 .../steps/panopoly_test_fpp.behat.inc         |    0
 .../steps/panopoly_test_media.behat.inc       |    0
 .../steps/panopoly_test_panels.behat.inc      |    0
 .../steps/panopoly_test_wysiwyg.behat.inc     |    0
 .../{tests => behat}/test-lg.png              |  Bin
 .../{tests => behat}/test-sm.png              |  Bin
 .../panopoly_test/{tests => behat}/test.txt   |    0
 .../panopoly/panopoly_test/panopoly_test.info |    6 +-
 .../panopoly_test/tests/composer.lock         | 1593 -----------------
 .../panopoly/panopoly_theme/CHANGELOG.txt     |    8 +
 .../panopoly_theme/panopoly_theme.info        |    6 +-
 .../panopoly/panopoly_widgets/CHANGELOG.txt   |   12 +
 .../panopoly-widgets-spotlight.css            |   20 +-
 .../panopoly_widgets.features.field_base.inc  |   29 +-
 ...nopoly_widgets.features.field_instance.inc |   32 +-
 .../panopoly_widgets/panopoly_widgets.info    |    6 +-
 .../panopoly_widgets/panopoly_widgets.install |    7 +
 .../panopoly_widgets/panopoly_widgets.make    |   10 +-
 .../panopoly_widgets/panopoly_widgets.module  |   19 +
 .../panopoly_widgets.spotlight.inc            |    5 +
 profiles/wcm_base/themes/wcm_omega/readme.md  |   11 +
 profiles/wcm_base/wcm_base.make               |   24 +-
 160 files changed, 2622 insertions(+), 3000 deletions(-)
 rename profiles/wcm_base/modules/contrib/{pathauto => apps}/PATCHES.txt (63%)
 delete mode 100644 profiles/wcm_base/modules/contrib/pathauto/API.txt
 create mode 100644 profiles/wcm_base/modules/contrib/pathauto/pathauto.migrate.inc
 create mode 100644 profiles/wcm_base/modules/contrib/search_api/PATCHES.txt
 create mode 100644 profiles/wcm_base/modules/contrib/views_bulk_operations/actions/change_owner.action.inc
 delete mode 100644 profiles/wcm_base/modules/custom/wcm_user_config/wcm_user_config.strongarm.inc
 rename profiles/wcm_base/modules/panopoly/panopoly_test/{tests => behat}/behat.common.yml (100%)
 rename profiles/wcm_base/modules/panopoly/panopoly_test/{tests => behat}/behat.template.yml (100%)
 rename profiles/wcm_base/modules/panopoly/panopoly_test/{tests => behat}/composer.json (57%)
 rename profiles/wcm_base/modules/panopoly/panopoly_test/{tests => behat}/features/advanced_widgets.feature (100%)
 rename profiles/wcm_base/modules/panopoly/panopoly_test/{tests => behat}/features/basic_ipe.feature (100%)
 rename profiles/wcm_base/modules/panopoly/panopoly_test/{tests => behat}/features/bootstrap/FeatureContext.php (100%)
 rename profiles/wcm_base/modules/panopoly/panopoly_test/{tests => behat}/features/contentitem_widget.feature (100%)
 rename profiles/wcm_base/modules/panopoly/panopoly_test/{tests => behat}/features/contentlist_widget.feature (100%)
 rename profiles/wcm_base/modules/panopoly/panopoly_test/{tests => behat}/features/contentpage.feature (100%)
 rename profiles/wcm_base/modules/panopoly/panopoly_test/{tests => behat}/features/demo.feature (100%)
 rename profiles/wcm_base/modules/panopoly/panopoly_test/{tests => behat}/features/file_widget.feature (100%)
 create mode 100644 profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/fpp_linkit.feature
 rename profiles/wcm_base/modules/panopoly/panopoly_test/{tests => behat}/features/help.feature (100%)
 rename profiles/wcm_base/modules/panopoly/panopoly_test/{tests => behat}/features/hidden_view_mode_options.feature (100%)
 rename profiles/wcm_base/modules/panopoly/panopoly_test/{tests => behat}/features/image_widget.feature (97%)
 rename profiles/wcm_base/modules/panopoly/panopoly_test/{tests => behat}/features/landingpage.feature (100%)
 rename profiles/wcm_base/modules/panopoly/panopoly_test/{tests => behat}/features/linkit.feature (100%)
 rename profiles/wcm_base/modules/panopoly/panopoly_test/{tests => behat}/features/links_widget.feature (100%)
 rename profiles/wcm_base/modules/panopoly/panopoly_test/{tests => behat}/features/login.feature (100%)
 rename profiles/wcm_base/modules/panopoly/panopoly_test/{tests => behat}/features/managed_file.feature (100%)
 rename profiles/wcm_base/modules/panopoly/panopoly_test/{tests => behat}/features/maps_widget.feature (100%)
 rename profiles/wcm_base/modules/panopoly/panopoly_test/{tests => behat}/features/panopoly_core_dependencies.feature (100%)
 rename profiles/wcm_base/modules/panopoly/panopoly_test/{tests => behat}/features/panopoly_magic/add_content_preview.feature (100%)
 rename profiles/wcm_base/modules/panopoly/panopoly_test/{tests => behat}/features/panopoly_magic/display_type.feature (100%)
 rename profiles/wcm_base/modules/panopoly/panopoly_test/{tests => behat}/features/panopoly_magic/fape.feature (100%)
 rename profiles/wcm_base/modules/panopoly/panopoly_test/{tests => behat}/features/panopoly_magic/form_improvements.feature (100%)
 rename profiles/wcm_base/modules/panopoly/panopoly_test/{tests => behat}/features/panopoly_magic/livepreview.feature (100%)
 rename profiles/wcm_base/modules/panopoly/panopoly_test/{tests => behat}/features/panopoly_magic/seldom_used_panes.feature (100%)
 rename profiles/wcm_base/modules/panopoly/panopoly_test/{tests => behat}/features/panopoly_magic/view_modes.feature (100%)
 rename profiles/wcm_base/modules/panopoly/panopoly_test/{tests => behat}/features/pathauto_administrator.feature (100%)
 rename profiles/wcm_base/modules/panopoly/panopoly_test/{tests => behat}/features/pathauto_editor.feature (100%)
 rename profiles/wcm_base/modules/panopoly/panopoly_test/{tests => behat}/features/search.feature (100%)
 rename profiles/wcm_base/modules/panopoly/panopoly_test/{tests => behat}/features/spotlight_widget.feature (85%)
 rename profiles/wcm_base/modules/panopoly/panopoly_test/{tests => behat}/features/submenu_widget.feature (100%)
 rename profiles/wcm_base/modules/panopoly/panopoly_test/{tests => behat}/features/table_widget.feature (100%)
 rename profiles/wcm_base/modules/panopoly/panopoly_test/{tests => behat}/features/text_widget.feature (100%)
 rename profiles/wcm_base/modules/panopoly/panopoly_test/{tests => behat}/features/video_widget.feature (100%)
 rename profiles/wcm_base/modules/panopoly/panopoly_test/{tests => behat}/features/wysiwyg.feature (100%)
 rename profiles/wcm_base/modules/panopoly/panopoly_test/{tests => behat}/features/wysiwyg_media.feature (100%)
 rename profiles/wcm_base/modules/panopoly/panopoly_test/{tests => behat}/steps/panopoly_test.behat.inc (89%)
 rename profiles/wcm_base/modules/panopoly/panopoly_test/{tests => behat}/steps/panopoly_test_fpp.behat.inc (100%)
 rename profiles/wcm_base/modules/panopoly/panopoly_test/{tests => behat}/steps/panopoly_test_media.behat.inc (100%)
 rename profiles/wcm_base/modules/panopoly/panopoly_test/{tests => behat}/steps/panopoly_test_panels.behat.inc (100%)
 rename profiles/wcm_base/modules/panopoly/panopoly_test/{tests => behat}/steps/panopoly_test_wysiwyg.behat.inc (100%)
 rename profiles/wcm_base/modules/panopoly/panopoly_test/{tests => behat}/test-lg.png (100%)
 rename profiles/wcm_base/modules/panopoly/panopoly_test/{tests => behat}/test-sm.png (100%)
 rename profiles/wcm_base/modules/panopoly/panopoly_test/{tests => behat}/test.txt (100%)
 delete mode 100644 profiles/wcm_base/modules/panopoly/panopoly_test/tests/composer.lock
 create mode 100644 profiles/wcm_base/themes/wcm_omega/readme.md

diff --git a/profiles/wcm_base/CHANGELOG.txt b/profiles/wcm_base/CHANGELOG.txt
index 41dfc2e0..39790086 100644
--- a/profiles/wcm_base/CHANGELOG.txt
+++ b/profiles/wcm_base/CHANGELOG.txt
@@ -1,3 +1,16 @@
+WCM Base 7.x-1.x, 2017-03-02
+----------------------------
+- WCM Base:
+  - Improved development and deployment documentation in README.md.
+  - Updated contrib modules media, views_bulk_operations, views.
+  - Updated Panopoly to 1.43.
+- WCM Workbench Settings:
+  - Fixed access to content comparison messages.
+  - Replaced overridden Needs Review and Drafts views with custom view.
+  - Updated Needs Review view to link to draft instead of published revision.
+- WCM Permissions: Added permissions for Featured Slideshow taxonomy.
+- OCIO Landing Page: Removed new panels IPE CSS button from non-admins.
+
 WCM Base 7.x-1.x, 2017-02-17
 ----------------------------
 - WCM Base: Updated contrib modules media, redis, smtp, token.
diff --git a/profiles/wcm_base/README.md b/profiles/wcm_base/README.md
index 9fca0f75..c3cf6050 100644
--- a/profiles/wcm_base/README.md
+++ b/profiles/wcm_base/README.md
@@ -1,53 +1,54 @@
 
 # WCM Base Installation Profile
 
-## Files
+The WCM Base installation profile is used to create builds of the WCM Drupal Distribution with drush make. Below are instructions for developing and deploying the distribution.
 
-### CHANGELOG.txt
+## Important Files
+
+### [CHANGELOG.txt](CHANGELOG.txt)
 Changelog for the distribution and installation profile. All changes made to the profile itself or custom modules and themes, should be entered here, in a human-readable format consistent with that of previous entries. These changes should be reviewed and timestamped before a new build is made.
 
-### wcm_base.info
+### [wcm_base.info](wcm_base.info)
 Metadata for the installation profile containing dependencies, which are the core, contrib and custom modules, themes and libraries (hereafter referred to as ‘projects’), which are to be enabled upon installation. Only needs modification when projects are added or removed.
 
-### wcm_base.make
-Drush makefile for contrib and custom drupal projects, as well as patches to said projects, to be downloaded when a build is run via drush make. When a contrib project needs to be updated, this is where the version number should be changed. Any time a contrib project is updated, it is possible that existing patches will become incompatible with the updated version and the next build will fail. If this happens, visit the drupal.org issue URL for each patch applied the project and determine if the patch has been accepted and subqequently included in the new version being downloaded. This can be done by checking the date and status of the issue and/or by downloading the patch and attempting to apply it to the updated project manually. If the patch has not been accepted and still does not apply, look for and attempt to test a newer version of the patch on the drupal.org issue, or attempt to re-roll the patch yourself (instructions can be found at drupal.org/patch). If all else fails, abandon updating the project or seek help from a colleague. Updating contrib projects is rarely urgent, the exception
+### [wcm_base.make](wcm_base.make)
+Drush makefile for contrib and custom drupal projects, as well as patches to said projects, to be downloaded when a build is run via drush make. When a contrib project needs to be updated, this is where the version number should be changed. Any time a contrib project is updated, it is possible that existing patches will become incompatible with the updated version and the next build will fail. If this happens, visit the drupal.org issue URL for each patch applied the project and determine if the patch has been accepted and subqequently included in the new version being downloaded. This can be done by checking the date and status of the issue and/or by downloading the patch and attempting to apply it to the updated project manually. If the patch has not been accepted and still does not apply, look for and attempt to test a newer version of the patch on the drupal.org issue, or attempt to re-roll the patch yourself (instructions can be found at [drupal.org/patch](http://drupal.org/patch)). If all else fails, abandon updating the project or seek help from a colleague. Updating contrib projects is rarely urgent, the exception being when security updates are released.
 
-### build-wcm_base.make
-Drush makefile for the distribution, containing only the installation profile, to be called when making a production build of the distribution. When using this makefile, the installation profile, and all projects will be downloaded to profiles/wcm_base. Rarely needs modification. Resulting code should be pushed to the wcm_base UCR repository for deployment. This and the dev makefile below are the only files to be called directly by drush make.
+### [build-wcm_base.make](build-wcm_base.make)
+Drush makefile for the distribution, containing only the installation profile, to be called when making a production build of the distribution. When using this makefile, the installation profile, and all projects will be downloaded to profiles/wcm_base. Rarely needs modification. Resulting code should be pushed to the [WCM Base Distribution UCR repository](https://code.osu.edu/ocio_odee_web/wcm-base-distro) for deployment. This and the dev makefile below are the only files to be called directly by drush make.
 
-### build-wcm_base-dev.make
+### [build-wcm_base-dev.make](build-wcm_base-dev.make) 
 Drush makefile for a local development version of the distribution, to be called instead of the above makefile to build a Drupal environment more suitable for developing custom modules and themes for the distribution, as well as making and testing updates to the installation profile itself. When using this makefile, all projects will be downloaded to sites/all and all custom projects will exist as individual git repositories. When a new custom project is added to the distribution, it should be added to this file to ensure that the project will be downloaded as a git repository.
 
-### drupal-org-core.make
+### [drupal-org-core.make](drupal-org-core.make)
 Drush makefile for drupal core, automatically called by the prod and dev build makefiles. Pulls from Pantheon’s Drupal 7 repository with no version number, meaning the latest version of Drupal core will always be downloaded. Contains core patches and pantheon.yml patch file.
 
-### wcm_base.install
+### [wcm_base.install](wcm_base.install)
 Install file containing basic functions and drupal commands to be run during installation, such as choosing a default theme, setting core variables, and reverting features. All custom functions must be called by wcm_base_install().
 
-### wcm_base.profile
+### [wcm_base.profile](wcm_base.profile)
 Contains additional installation tasks and configuration, including those that may require visibility to or interaction with the installer. Neither this file, nor wcm_base.install, are frequently modified.
     
 
-For more information about Drupal distributions and installation profiles, see drupal.org/docs/7/creating-distributions.
-
-
+For more information about Drupal distributions and installation profiles, see [drupal.org/docs/7/creating-distributions](http://drupal.org/docs/7/creating-distributions).
 
+## Development
 
-## Cloning the WCM Base profile
+### Cloning the WCM Base profile
 
-To get started, clone the WCM Base profile in your local web root:
+To get started, clone the WCM Base profile in your local web root.
 
-`git clone git@code.osu.edu:ocio_odee_web/wcm_base.git`
+```
+git clone git@code.osu.edu:ocio_odee_web/wcm_base.git
+```
 
-## Building the codebase
+### Building the codebase
 
-After you've downloaded the most recent version of the profile, build the development site from your web root using the dev makefile:
+After you've downloaded the most recent version of the profile, build the development site from your web root using the dev makefile.
 
-`drush make --no-gitinfofile wcm_base/build-wcm_base-dev.make DRUPAL_ROOT`
-
-If you are building for proudction, simply use the standard makefile:
-
-`drush make --no-gitinfofile wcm_base/build-wcm_base.make DRUPAL_ROOT`
+```
+drush make --no-gitinfofile wcm_base/build-wcm_base-dev.make DRUPAL_ROOT
+```
 
 Replace `DRUPAL_ROOT` with the name you would like to give to the directory in which your local drupal site will reside. This will not appear in any repositories, so you may use any name you would like. If you do not specify a location, the distribution will be built in the current directory, which you do not want.
 
@@ -55,61 +56,136 @@ The `--no-gitinfofile` flag prevents drush from making changes or adding metadat
 
 The build might take couple of minutes, as all of Drupal core must be downloaded, as well as contrib and custom modules and themes.
 
-## Updating the codebase
+### Updating the codebase
 
 In order to retrieve updates made to the WCM Base profile, including modules, themes and Drupal core, you will need to update the profile via git.
 
-Since the WMC Base profile was downloaded again within the Drupal site after first running `drush make`, you can simply update it there instead of going back to the one in your web root. This must be done from the `profiles/wcm_base` directory:
+Since the WMC Base profile was downloaded again within the Drupal site after first running `drush make`, you can simply update it there instead of going back to the one in your web root. This must be done from the `profiles/wcm_base` directory.
 
-`git pull --rebase`
+```
+git pull --rebase
+```
 
-After the profile has been updated, run the following from your Drupal root:
+After the profile has been updated, run the following from your Drupal root to updated your development codebase, and perform any new database updates.
 
-`drush make --no-gitinfofile profiles/wcm_base/build-wcm_base-dev.make .`
+```
+drush make --no-gitinfofile profiles/wcm_base/build-wcm_base-dev.make .
+drush updb
+```
 
 This will rebuild the site using the parameters defined in the make file. Note that this command must be executed from the Drupal root. While you can generally build from any location and then add a parameter specifying the location where you'd like the files to go, drush will only let you rebuild an existing site from the site root. In this case, we are using the `.` character to target the current directory. This command can be executed without setting a target, but drush will then force you to confirm that you would like to build in the current directory. This confirmation can be skipped by appending the `-y` flag, but unless you want to be asked to confirm the build every time, simply targeting the current directory will circumvent this.
 
-If you are updating a production codebase, you can use the drush remake plugin, which will rebuild the codebase from any location within your Drupal site with a simplified command:
+If you are updating a production codebase, you can use the drush remake plugin, which will rebuild the codebase from any location within your Drupal site with a simplified command.
 
-`drush remake`
+```
+drush remake
+```
 
-To install this plugin, simple run the following command:
+To install this plugin, simple run the following command.
 
-`drush dl drush_remake`
+```
+drush dl drush_remake
+```
 
 This plugin is not recommended for the development environment, as it appears to download everything into profiles instead of sites/all.
 
 **IMPORTANT:** Changes to any files within the Drupal root will be overwritten, so make sure you've committed and pushed changes to custom modules and themes to their corresponding UCR repositories before rebuilding. Existing modules and other files in your local environment will not be deleted however, so if you are testing modules that you have not added to the make file, they will still be there after you rebuild. If you have any local branches, they will be lost, so either push your branch to UCR, merge your changes into an existing branch and push, or simply make a copy of your repository and then move it back into the site after you rebuild. If you're not confident overwriting everything, you can always start a new build in a completely different directory than the one where your existing site lives, but this will require lots of copying and pasting and is very tedious.
 
-The rebuild would normally take a while, as once again, everything needs to be re-downloaded. Fortunately, this is not necessary if you just want to refresh modules and themes. If Drupal core has not been updated in the make file, this is just a waste of time, so in most cases, you can just add the `--no-core` flag:
+The rebuild would normally take a while, as once again, everything needs to be re-downloaded. Fortunately, this is not necessary if you just want to refresh modules and themes. If Drupal core has not been updated in the make file, this is just a waste of time, so in most cases, you can just add the `--no-core` flag.
 
-`drush make --no-core --no-gitinfofile profiles/wcm_base/build-wcm_base-dev.make .`
+```
+drush make --no-core --no-gitinfofile profiles/wcm_base/build-wcm_base-dev.make .
+```
 
 This is significantly faster and usually all that is necessary to get your whole site up to date.
 
-## Installing the profile
+### Installing the profile
 
 If you are installing the WCM Distribution for the first time, then you need to create a new database, configure settings.php, and run the Drupal installer. This can be accomplished by passing your database credentials, the name of the new database you'd like to create, and the name of the site to `drush site-install`, or more simply, `drush si`.
 
-`drush si wcm_base --db-url='mysql://[db_user]:[db_pass]@localhost/[db_name]' --site-name=Example -y`
+```
+drush si wcm_base --db-url='mysql://[db_user]:[db_pass]@localhost/[db_name]' --site-name=Example -y
+```
 
 If you don't like the idea of your credentials being visible and appearing in your shell history, this can also be done by creating a new database manually and running the command without any extra parameters. This will require you to create and configure a settings.php file, either manually or through the installation web interface.
 
-`drush si wcm_base -y`
+```
+drush si wcm_base -y
+```
 
 Once the settings file has been created and configured for the first time, the shorter command above can also be used at any time to reinstall WCM Base, which will wipe out the site's database and recreate it from scratch.
 
 
-## Building the distribution
+## Production
+
+### Building the distribution
+
+When updating the distribution repository, you must rebuild the codebase. Before doing this for the first time, you must clone the distrubution repo.
+
+```
+git clone git@code.osu.edu:ocio_odee_web/wcm-base-distro.git
+```
+
+You should already have a copy of the install profile in your web root, per the first step in the [Development](#cloning-the-wcm-base-profile) section. While you might choose to build from the profile repo that exists in your development site root, using a separate instance prevents conflicts and ensures code integrity. If both the profile and distribution repos exist in your web root directory, you can use the steps below to make a new build.
+
+First, navigate to the profile repo, and do a pull and make sure it is up to date using the `pull` git command. The `reset` command is necessary if local changes have been made which prevent a pull from being successful, though this should rarely, if ever, be the case. There are other git commands, such as `stash`, and `fetch`, which serve similar functions as `reset` and `pull`, but the latter are cleaner, simpler and just as effective.
+
+```
+cd wcm_base
+git reset --hard HEAD
+git pull
+```
+
+Next, navigate to the distribution repo, and run the same commands. Then, remove all files in the directory. Note that the `rm` command is highly destructive, as it removes all files within the working directory, so make sure you are in the right location before executing it, though you will be asked to confirm the deletion as a safeguard.
+
+```
+cd ../wcm-base-distro
+git reset --hard HEAD
+git pull
+rm -rf *
+```
+
+Now, run drush make.
+
+```
+drush make ../wcm_base/build-wcm_base.make --no-gitinfofile .
+```
+
+Drush make will now run, downloading all custom and contrib drupal projects in the install profile, as well as those specified in makefiles within those projects. Note that if a project is defined in both the install profile and a custom or contrib module, the definition in the install profile will be used. 
+
+If any project fails to download, or if a defined patch fails to apply, an error will appear in the drush make output and the build will fail. Unfortunately, such an error will not stop the build process, so you will need to inspect the output for errors manually. Otherwise, you may think that a build has successfully completed, when it has actually failed.
+
+These commands may be strung together for easier execution. Note that the path to the install profile within the first `cd` command has been modified so that the combo command can be run from within the distribution directory.
+
+```
+cd ../wcm_base && git reset --hard HEAD && git pull && cd ../wcm-base-distro && git reset --hard HEAD && git pull && rm -rf * && drush make ../wcm_base/build-wcm_base.make --no-gitinfofile .
+```
+
+See [Loose ends and bonus tips](#loose-ends-and-bonus-tips) for tips on how to save this and other commands as shell aliases, which allows them to be reused without having type them out every time.
+
+If the build completes successfully, stage all files in the directory, commit the changes (with a comment) and then push the repo to UCR.
+
+```
+git add . 
+git commit -m 'weekly build'
+git push
+```
+
+### Deploying builds to Pantheon
+
+New builds of the distribution are deployed to Pantheon using the [Terminus](https://github.com/pantheon-systems/terminus) command line tool. Terminus is very powerful, but also rather complicated, so a shell script has been written to make deployments simpler. This script is called Aergia, and instructions for its installation and usage can be found on its [UCR page](https://code.osu.edu/ocio_odee_web/aergia).
 
-When updating the distribution repository, rebuild the codebase (but not with working copies):
+The command which is generally used to deploy builds to the production environments of all WCM sites is:
 
-`drush make wcm_base/build-wcm_base.make DRUPAL_ROOT`
+```
+aergia deploy all -d DRUSH_COMMAND
+```
 
+Aergia automatically executes database updates and clears drupal caches, so the Drush flag and argument are usually only necessary if features are being reverted in bulk, but it can be used to run any drush commands. Aergia also includes other commands to assist with testing and deployment, which can be found in that project's README file.
 
 ## Loose ends and bonus tips
 
-This might seem complicated, but it's really not so bad. It's unlikely that you will need to rebuild on a daily basis, as most changes that matter to you as a developer can be retrieved from the git repos. A full rebuild is only necessary when Drupal core is updated, which is not very often. If you're worried about whether changes to your repos will be easily communicated to other team members, remember that any time someone else wants to push to a repo you're working on, they will probably have to pull first, meaning your changes will get to them soon enough. As long as all your changes have been committed, rebuilding should never cause any problems, and will be necessary when contrib modules are updated or when modules and themes are added to the distribution.
+This might seem complicated, but it's really not so bad. It's unlikely that you will need to rebuild your dev environment on a daily basis if you are working on individual modules, as most changes that matter to you as a developer can also be retrieved directly from the project git repos. A full dev rebuild is necessary to bring your development site up to date, which is most important when updates are made to Drupal core, or if many custom or contrib projects are added or updated. If you're worried about whether changes to your repos will be easily communicated to other team members, remember that any time someone else wants to push to a repo you're working on, they will probably have to pull first, meaning your changes will get to them soon enough. As long as all your changes have been committed, rebuilding should rarely cause any problems.
 
 Here are some additional tips to help you along:
 
@@ -119,18 +195,18 @@ Here are some additional tips to help you along:
 
 - You may also may not know the the shell you use from the command line can help you out with keeping track of what's going on with git. [Oh My Zsh](http://ohmyz.sh) is an excellent replacement for the default Bash shell, and includes lots of options and customizations, such as showing you what branch you're on without having to type anything at all, as well as customizing the look and feel of your prompt, and additional enhancements for command line usage and navigation.
 
-## Why a make file instead of a mega git repository?
+### Why a make file instead of a mega git repository?
 
 Development of this distribution could be done by this method above, whereby building a make file downloads core and contrib and pulls down entire working git repos for modules and themes, or by using a repo of the pre-built site, with the smaller repos nested inside of it. There are pros and cons to each approach.
 
-### Build speed
+#### Build speed
 
-Rebuilding from the make file is slower than a git pull because every file is downloaded whole instead of just a diff of each changed file. However, the benefit is minimal since Drupal does not need to be updated frequently, and most of the work will be done on custom themes and modules, which will have their own repos, regardless of the method used to build the site. It's true that it is easier to do a quick pull to see if any changes have been made, as opposed to having to rebuild,
+Rebuilding from the make file is slower than a git pull because every file is downloaded whole instead of just a diff of each changed file. However, the benefit is minimal since Drupal does not need to be updated frequently, and most of the work will be done on custom themes and modules, which will have their own repos, regardless of the method used to build the site. It's true that it is easier to do a quick pull to see if any changes have been made, as opposed to having to rebuild.
 
-### Ease of common development
+#### Ease of common development
 
 With nested repos, changes to modules and themes, which are frequent during early development need to be committed to individual repos and to the larger distribution repo. The introduces the potential human error involving adding and committing the right files to the right repo and adds frequent, unnecessary repetition. With the make file approach, developers need only focus on their version-controlled projects, which are updated automatically upon rebuilding, but can also be pulled manually. New modules and themes can simply be created or downloaded locally and then added to the make file for later distribution. Once they have been added to the make file, committing them to a parent repository becomes unnecessary, as contrib and core modules are never modified.
 
-### Hands-off updates
+#### Hands-off updates
 
 Contrib modules, and even Drupal core itself must be updated manually, and then committed to a parent repo. With a make file, the newest version is pulled by default when rebuilding making regular maintenance easier. Specific versions can optionally be added, as well. As a bonus, this will prevent developers from hacking core and contrib due to the fact that any changes they make will be overwritten on the next rebuild.
diff --git a/profiles/wcm_base/modules/contrib/pathauto/PATCHES.txt b/profiles/wcm_base/modules/contrib/apps/PATCHES.txt
similarity index 63%
rename from profiles/wcm_base/modules/contrib/pathauto/PATCHES.txt
rename to profiles/wcm_base/modules/contrib/apps/PATCHES.txt
index 267648ff..1896d065 100644
--- a/profiles/wcm_base/modules/contrib/pathauto/PATCHES.txt
+++ b/profiles/wcm_base/modules/contrib/apps/PATCHES.txt
@@ -1,4 +1,4 @@
 The following patches have been applied to this project:
-- http://drupal.org/files/issues/pathauto-persist-936222-195-pathauto-state.patch
+- https://www.drupal.org/files/issues/apps-manifest-2753413-3.patch
 
 This file was automatically generated by Drush Make (http://drupal.org/project/drush).
diff --git a/profiles/wcm_base/modules/contrib/apps/apps.manifest.inc b/profiles/wcm_base/modules/contrib/apps/apps.manifest.inc
index de3040f2..8972a33a 100755
--- a/profiles/wcm_base/modules/contrib/apps/apps.manifest.inc
+++ b/profiles/wcm_base/modules/contrib/apps/apps.manifest.inc
@@ -525,8 +525,18 @@ function apps_add_app_info(&$apps) {
   $set_cache = FALSE;
   foreach ($apps as $id => $app) {
     if (!isset($info[$app['machine_name']])) {
-       $info[$app['machine_name']] = ($i = module_invoke($app['machine_name'], 'apps_app_info')) ? $i : array();
-       $set_cache = TRUE;
+      $info[$app['machine_name']] = array();
+      // Check if app is local.
+      $module_cache = system_rebuild_module_data();
+      if (isset($module_cache[$app['machine_name']])) {
+        if (!module_exists($app['machine_name'])) {
+          // Module is in the codebase but not installed.
+          module_load_include('module', $app['machine_name']);
+          module_load_include('app.inc', $app['machine_name']);
+        }
+        $info[$app['machine_name']] = ($i = module_invoke($app['machine_name'], 'apps_app_info')) ? $i : array();
+      }
+      $set_cache = TRUE;
     }
     $apps[$id] += $info[$app['machine_name']];
     // Add defaults
diff --git a/profiles/wcm_base/modules/contrib/media/includes/media.fields.inc b/profiles/wcm_base/modules/contrib/media/includes/media.fields.inc
index 9153cc9b..e3ed2d1a 100644
--- a/profiles/wcm_base/modules/contrib/media/includes/media.fields.inc
+++ b/profiles/wcm_base/modules/contrib/media/includes/media.fields.inc
@@ -134,7 +134,7 @@ function media_field_widget_form(&$form, &$form_state, $field, $instance, $langc
   elseif (module_exists('translation') && $element['#entity_type'] == 'node' && translation_supported_type($element['#entity']->type)) {
     $element['#media_parent_entity_form_langcode'] = $element['#entity']->language;
     $element['#media_parent_entity_source_langcode'] = $element['#entity']->language;
-  } elseif ($element['#entity_type'] == 'field_collection_item' && property_exists($form['#entity'], 'language')) {
+  } elseif ($element['#entity_type'] == 'field_collection_item' && !empty($form['#entity']) && property_exists($form['#entity'], 'language')) {
     $element['#media_parent_entity_form_langcode'] = $form['#entity']->language;
   }
 
diff --git a/profiles/wcm_base/modules/contrib/media/media.info b/profiles/wcm_base/modules/contrib/media/media.info
index 20313e71..a9b88042 100644
--- a/profiles/wcm_base/modules/contrib/media/media.info
+++ b/profiles/wcm_base/modules/contrib/media/media.info
@@ -24,9 +24,9 @@ configure = admin/config/media/browser
 ; We have to add a fake version so Git checkouts do not fail Media dependencies
 version = 7.x-2.x-dev
 
-; Information added by Drupal.org packaging script on 2017-02-03
-version = "7.x-2.0-rc5"
+; Information added by Drupal.org packaging script on 2017-02-28
+version = "7.x-2.0-rc11"
 core = "7.x"
 project = "media"
-datestamp = "1486142925"
+datestamp = "1488279796"
 
diff --git a/profiles/wcm_base/modules/contrib/media/media.install b/profiles/wcm_base/modules/contrib/media/media.install
index 50fe58db..b6efdd44 100644
--- a/profiles/wcm_base/modules/contrib/media/media.install
+++ b/profiles/wcm_base/modules/contrib/media/media.install
@@ -869,7 +869,12 @@ function media_update_7208() {
       // Merge existing type with new ones.
       if ($new_type = file_type_load($type->name)) {
         $new_type->mimetypes = array_merge($type->mimetypes, $new_type->mimetypes);
-        $new_type->streams = array_merge($type->streams, $new_type->streams);
+        if (!empty($new_type->streams)) {
+          $new_type->streams = array_merge($type->streams, $new_type->streams);
+        }
+        else{
+          $new_type->streams = $type->streams;
+        }
       }
       else {
         $new_type = $type;
diff --git a/profiles/wcm_base/modules/contrib/media/media.module b/profiles/wcm_base/modules/contrib/media/media.module
index 6bffdff4..9c9cb0d3 100644
--- a/profiles/wcm_base/modules/contrib/media/media.module
+++ b/profiles/wcm_base/modules/contrib/media/media.module
@@ -828,11 +828,16 @@ function media_element_process($element, &$form_state, $form) {
   // Media browser attach code.
   $element['#attached']['js'][] = drupal_get_path('module', 'media') . '/js/media.js';
 
+  // IDs of form elements are 'unstable' in Drupal because of drupal_html_id
+  // add a class for our Javascript instead.
+  $element_js_class = drupal_html_class('js-media-element-' . $element['#id']);
+  $element['upload']['#attributes']['class'][] = $element_js_class;
+
   // Add the media options to the page as JavaScript settings.
   $element['browse_button']['#attached']['js'] = array(
     array(
       'type' => 'setting',
-      'data' => array('media' => array('elements' => array('#' . $element['#id'] => $element['#media_options'])))
+      'data' => array('media' => array('elements' => array('.' . $element_js_class => $element['#media_options'])))
     )
   );
 
diff --git a/profiles/wcm_base/modules/contrib/media/modules/media_bulk_upload/media_bulk_upload.info b/profiles/wcm_base/modules/contrib/media/modules/media_bulk_upload/media_bulk_upload.info
index 3193df42..6eff3991 100644
--- a/profiles/wcm_base/modules/contrib/media/modules/media_bulk_upload/media_bulk_upload.info
+++ b/profiles/wcm_base/modules/contrib/media/modules/media_bulk_upload/media_bulk_upload.info
@@ -15,9 +15,9 @@ test_dependencies[] = plupload
 files[] = includes/MediaBrowserBulkUpload.inc
 files[] = tests/media_bulk_upload.test
 
-; Information added by Drupal.org packaging script on 2017-02-03
-version = "7.x-2.0-rc5"
+; Information added by Drupal.org packaging script on 2017-02-28
+version = "7.x-2.0-rc11"
 core = "7.x"
 project = "media"
-datestamp = "1486142925"
+datestamp = "1488279796"
 
diff --git a/profiles/wcm_base/modules/contrib/media/modules/media_internet/media_internet.info b/profiles/wcm_base/modules/contrib/media/modules/media_internet/media_internet.info
index 5b786fc6..0a1cecb4 100644
--- a/profiles/wcm_base/modules/contrib/media/modules/media_internet/media_internet.info
+++ b/profiles/wcm_base/modules/contrib/media/modules/media_internet/media_internet.info
@@ -12,9 +12,9 @@ files[] = includes/MediaInternetNoHandlerException.inc
 files[] = includes/MediaInternetValidationException.inc
 files[] = tests/media_internet.test
 
-; Information added by Drupal.org packaging script on 2017-02-03
-version = "7.x-2.0-rc5"
+; Information added by Drupal.org packaging script on 2017-02-28
+version = "7.x-2.0-rc11"
 core = "7.x"
 project = "media"
-datestamp = "1486142925"
+datestamp = "1488279796"
 
diff --git a/profiles/wcm_base/modules/contrib/media/modules/media_internet/tests/media_internet_test.info b/profiles/wcm_base/modules/contrib/media/modules/media_internet/tests/media_internet_test.info
index b92ba7c0..b3545605 100644
--- a/profiles/wcm_base/modules/contrib/media/modules/media_internet/tests/media_internet_test.info
+++ b/profiles/wcm_base/modules/contrib/media/modules/media_internet/tests/media_internet_test.info
@@ -7,9 +7,9 @@ hidden = TRUE
 files[] = includes/MediaInternetTestStreamWrapper.inc
 files[] = includes/MediaInternetTestHandler.inc
 
-; Information added by Drupal.org packaging script on 2017-02-03
-version = "7.x-2.0-rc5"
+; Information added by Drupal.org packaging script on 2017-02-28
+version = "7.x-2.0-rc11"
 core = "7.x"
 project = "media"
-datestamp = "1486142925"
+datestamp = "1488279796"
 
diff --git a/profiles/wcm_base/modules/contrib/media/modules/media_migrate_file_types/media_migrate_file_types.info b/profiles/wcm_base/modules/contrib/media/modules/media_migrate_file_types/media_migrate_file_types.info
index 06564010..54ed2949 100644
--- a/profiles/wcm_base/modules/contrib/media/modules/media_migrate_file_types/media_migrate_file_types.info
+++ b/profiles/wcm_base/modules/contrib/media/modules/media_migrate_file_types/media_migrate_file_types.info
@@ -8,9 +8,9 @@ dependencies[] = media
 
 configure = admin/structure/file-types/upgrade
 
-; Information added by Drupal.org packaging script on 2017-02-03
-version = "7.x-2.0-rc5"
+; Information added by Drupal.org packaging script on 2017-02-28
+version = "7.x-2.0-rc11"
 core = "7.x"
 project = "media"
-datestamp = "1486142925"
+datestamp = "1488279796"
 
diff --git a/profiles/wcm_base/modules/contrib/media/modules/media_wysiwyg/js/media_wysiwyg.filter.js b/profiles/wcm_base/modules/contrib/media/modules/media_wysiwyg/js/media_wysiwyg.filter.js
index cf7a5dbd..02e8cd2d 100644
--- a/profiles/wcm_base/modules/contrib/media/modules/media_wysiwyg/js/media_wysiwyg.filter.js
+++ b/profiles/wcm_base/modules/contrib/media/modules/media_wysiwyg/js/media_wysiwyg.filter.js
@@ -181,8 +181,8 @@
         $(mediaElements).each(function (i) {
           // Attempt to derive a JSON macro representation of the media placeholder.
           // Note: Drupal 7 ships with JQuery 1.4.4, which allows $(this).attr('outerHTML') to retrieve the eement's HTML,
-          // but many sites use JQuery update to increate this to 1.6+, which insists on $(this).prop('outerHTML). 
-          // Until the minimum jQuery is >= 1.6, we need to do this the old-school way. 
+          // but many sites use JQuery update to increate this to 1.6+, which insists on $(this).prop('outerHTML).
+          // Until the minimum jQuery is >= 1.6, we need to do this the old-school way.
           // See http://stackoverflow.com/questions/2419749/get-selected-elements-outer-html
           var markup = $(this).get(0).outerHTML;
           if (markup === undefined) {
@@ -291,6 +291,8 @@
       }
       element.addClass(classes.join(' '));
 
+      // Attempt to override the link_title if the user has chosen to do this.
+      info.link_text = this.overrideLinkTitle(info);
       // Apply link_text if present.
       if (info.link_text) {
         $('a', element).html(info.link_text);
@@ -309,6 +311,7 @@
       var file_info = Drupal.media.filter.extract_file_info(element);
       if (file_info) {
         if (typeof file_info.link_text == 'string') {
+          file_info.link_text = this.overrideLinkTitle(file_info);
           // Make sure the link_text-html-tags are properly escaped.
           file_info.link_text = file_info.link_text.replace(/</g, '&lt;').replace(/>/g, '&gt;');
         }
@@ -430,29 +433,60 @@
       return Drupal.settings.tagmap;
     },
 
+    /**
+     * Return the overridden link title based on the file_entity title field
+     * set.
+     * @param file the file object.
+     * @returns the overridden link_title or the existing link text if no
+     * overridden.
+     */
+    overrideLinkTitle: function(file) {
+      var file_title_field = Drupal.settings.media.img_title_field.replace('field_', '');
+      var file_title_field_machine_name = '';
+      if (typeof(file.fields) != 'undefined') {
+        jQuery.each(file.fields, function(field, fieldValue) {
+          if (field.indexOf(file_title_field) != -1) {
+            file_title_field_machine_name = field;
+          }
+        });
+
+        if (typeof(file.fields[file_title_field_machine_name]) != 'undefined' && file.fields[file_title_field_machine_name] != '') {
+          return file.fields[file_title_field_machine_name];
+        }
+        else {
+          return file.link_text;
+        }
+      }
+      else {
+        return file.link_text;
+      }
+    },
+
     /**
      * Generates a unique "delta" for each embedding of a particular file.
      */
     fileEmbedDelta: function(fid, element) {
       // Ensure we have an object to track our deltas.
       Drupal.settings.mediaDeltas = Drupal.settings.mediaDeltas || {};
+      Drupal.settings.maxMediaDelta = Drupal.settings.maxMediaDelta || 0;
 
       // Check to see if the element already has one.
       if (element && element.data('delta')) {
         var existingDelta = element.data('delta');
-        // If so, make sure that it is being tracked in mediaDeltas.
-        if (!Drupal.settings.mediaDeltas[fid]) {
-          Drupal.settings.mediaDeltas[fid] = existingDelta;
+        // If so, make sure that it is being tracked in mediaDeltas. If we're
+        // going to create new deltas later on, make sure they do not overwrite
+        // other mediaDeltas.
+        if (!Drupal.settings.mediaDeltas[existingDelta]) {
+          Drupal.settings.mediaDeltas[existingDelta] = fid;
+          Drupal.settings.maxMediaDelta = Math.max(Drupal.settings.maxMediaDelta, existingDelta);
         }
         return existingDelta;
       }
-      // Otherwise, generate a new one. Arbitrarily start with 1.
-      var delta = 1;
-      if (Drupal.settings.mediaDeltas[fid]) {
-        delta = Drupal.settings.mediaDeltas[fid] + 1;
-      }
-      Drupal.settings.mediaDeltas[fid] = delta;
-      return delta;
+      // Otherwise, generate a new one.
+      var newDelta = Drupal.settings.maxMediaDelta + 1;
+      Drupal.settings.mediaDeltas[newDelta] = fid;
+      Drupal.settings.maxMediaDelta = newDelta;
+      return newDelta;
     }
   }
 
diff --git a/profiles/wcm_base/modules/contrib/media/modules/media_wysiwyg/media_wysiwyg.info b/profiles/wcm_base/modules/contrib/media/modules/media_wysiwyg/media_wysiwyg.info
index 93a33610..a2ed8b2e 100644
--- a/profiles/wcm_base/modules/contrib/media/modules/media_wysiwyg/media_wysiwyg.info
+++ b/profiles/wcm_base/modules/contrib/media/modules/media_wysiwyg/media_wysiwyg.info
@@ -15,9 +15,9 @@ files[] = tests/media_wysiwyg.macro.test
 
 configure = admin/config/media/browser
 
-; Information added by Drupal.org packaging script on 2017-02-03
-version = "7.x-2.0-rc5"
+; Information added by Drupal.org packaging script on 2017-02-28
+version = "7.x-2.0-rc11"
 core = "7.x"
 project = "media"
-datestamp = "1486142925"
+datestamp = "1488279796"
 
diff --git a/profiles/wcm_base/modules/contrib/media/modules/media_wysiwyg/media_wysiwyg.install b/profiles/wcm_base/modules/contrib/media/modules/media_wysiwyg/media_wysiwyg.install
index 35fa9eae..304d57f1 100644
--- a/profiles/wcm_base/modules/contrib/media/modules/media_wysiwyg/media_wysiwyg.install
+++ b/profiles/wcm_base/modules/contrib/media/modules/media_wysiwyg/media_wysiwyg.install
@@ -5,7 +5,7 @@
  * Install, update and uninstall functions for the Media WYSIWYG module.
  */
 
- /**
+/**
  * Implements hook_schema().
  */
 function media_wysiwyg_schema() {
@@ -125,6 +125,7 @@ function media_wysiwyg_update_7203() {
 
   return $output;
 }
+
 /**
  * Whitelists certain fields for WYSIWYG overriding.
  */
@@ -170,30 +171,36 @@ function media_wysiwyg_update_7205() {
 
   // Create the new configuration tables.
   if (!db_table_exists('media_restrict_wysiwyg')) {
-    db_create_table('media_restrict_wysiwyg',  $schema['media_restrict_wysiwyg']);
+    db_create_table('media_restrict_wysiwyg', $schema['media_restrict_wysiwyg']);
     db_create_table('media_view_mode_wysiwyg', $schema['media_view_mode_wysiwyg']);
   }
 
   // Migrate the configuration from the old variables into the new DB tables.
   $types = file_type_load_all(TRUE);
   foreach ($types as $type) {
-    $wysiwyg_restricted_view_modes = variable_get("media_wysiwyg_view_mode_{$type->type}_wysiwyg_restricted_view_modes", array());
-    foreach ($wysiwyg_restricted_view_modes as $wysiwyg_restricted_view_mode) {
-      db_insert('media_restrict_wysiwyg')
+    $enabled = variable_get("media_wysiwyg_view_mode_" . $type->type . "_file__wysiwyg_restricted_view_modes_status", FALSE);
+    if ($enabled) {
+      $wysiwyg_restricted_view_modes = variable_get("media_wysiwyg_view_mode_" . $type->type . "_file_wysiwyg_restricted_view_modes", array());
+      foreach ($wysiwyg_restricted_view_modes as $wysiwyg_restricted_view_mode) {
+        db_insert('media_restrict_wysiwyg')
+          ->fields(array(
+            'type' => $type->type,
+            'display' => $wysiwyg_restricted_view_mode,
+          ))
+          ->execute();
+      }
+    }
+
+    $enabled = variable_get("media_wysiwyg_view_mode_" . $type->type . "_wysiwyg_view_mode_status");
+    if ($enabled) {
+      $file_wysiwyg_view_mode = variable_get("media_wysiwyg_view_mode_" . $type->type . "_file_wysiwyg_view_mode", 'wysiwyg');
+      db_insert('media_view_mode_wysiwyg')
         ->fields(array(
           'type' => $type->type,
-          'display' => $wysiwyg_restricted_view_mode,
+          'view_mode' => $file_wysiwyg_view_mode,
         ))
         ->execute();
     }
-
-    $file_wysiwyg_view_mode = variable_get("media_wysiwyg_view_mode_{$type->type}_file_wysiwyg_view_mode", 'wysiwyg');
-    db_insert('media_view_mode_wysiwyg')
-      ->fields(array(
-        'type' => $type->type,
-        'view_mode' => $file_wysiwyg_view_mode,
-      ))
-      ->execute();
   }
 
   // Remove old configuration variables.
@@ -233,7 +240,5 @@ function media_wysiwyg_update_7205() {
  */
 function media_wysiwyg_update_7206() {
   $message = t('If you would like to be able to align your embedded media (left, right, or center), go to /admin/config/media/browser and check "Provide alignment option when embedding media", and save the settings.');
-  drupal_set_message($message,'warning',TRUE);
+  drupal_set_message($message, 'warning', TRUE);
 }
-
-
diff --git a/profiles/wcm_base/modules/contrib/media/modules/media_wysiwyg_view_mode/media_wysiwyg_view_mode.info b/profiles/wcm_base/modules/contrib/media/modules/media_wysiwyg_view_mode/media_wysiwyg_view_mode.info
index ed33cdfd..deac9118 100644
--- a/profiles/wcm_base/modules/contrib/media/modules/media_wysiwyg_view_mode/media_wysiwyg_view_mode.info
+++ b/profiles/wcm_base/modules/contrib/media/modules/media_wysiwyg_view_mode/media_wysiwyg_view_mode.info
@@ -3,9 +3,9 @@ description = DEPRECATED, this folder is only here so that the module can be uni
 package = Media
 core = 7.x
 
-; Information added by Drupal.org packaging script on 2017-02-03
-version = "7.x-2.0-rc5"
+; Information added by Drupal.org packaging script on 2017-02-28
+version = "7.x-2.0-rc11"
 core = "7.x"
 project = "media"
-datestamp = "1486142925"
+datestamp = "1488279796"
 
diff --git a/profiles/wcm_base/modules/contrib/media/modules/mediafield/mediafield.info b/profiles/wcm_base/modules/contrib/media/modules/mediafield/mediafield.info
index 77ff9030..9d566988 100644
--- a/profiles/wcm_base/modules/contrib/media/modules/mediafield/mediafield.info
+++ b/profiles/wcm_base/modules/contrib/media/modules/mediafield/mediafield.info
@@ -4,9 +4,9 @@ package = Media
 core = 7.x
 dependencies[] = media
 
-; Information added by Drupal.org packaging script on 2017-02-03
-version = "7.x-2.0-rc5"
+; Information added by Drupal.org packaging script on 2017-02-28
+version = "7.x-2.0-rc11"
 core = "7.x"
 project = "media"
-datestamp = "1486142925"
+datestamp = "1488279796"
 
diff --git a/profiles/wcm_base/modules/contrib/media/tests/media.test b/profiles/wcm_base/modules/contrib/media/tests/media.test
index a7f98c9a..5aeea242 100644
--- a/profiles/wcm_base/modules/contrib/media/tests/media.test
+++ b/profiles/wcm_base/modules/contrib/media/tests/media.test
@@ -915,7 +915,7 @@ class MediaElementSettingsTestCase extends MediaFileFieldTestCase {
     $multiselect = ($field['cardinality'] > 1 || $field['cardinality'] == FIELD_CARDINALITY_UNLIMITED);
     $field_widget = array(
         'elements' => array(
-          '#edit-' . $field_name . '-' . LANGUAGE_NONE . '-0-upload' => array(
+          '.js-media-element-edit-' . $field_name . '-' . LANGUAGE_NONE . '-0-upload' => array(
             'global' => array(
               'types' => array(
                 'image' => 'image',
diff --git a/profiles/wcm_base/modules/contrib/media/tests/media_module_test.info b/profiles/wcm_base/modules/contrib/media/tests/media_module_test.info
index 8c4b4a55..68af95d1 100644
--- a/profiles/wcm_base/modules/contrib/media/tests/media_module_test.info
+++ b/profiles/wcm_base/modules/contrib/media/tests/media_module_test.info
@@ -6,9 +6,9 @@ hidden = TRUE
 
 files[] = includes/MediaModuleTest.inc
 
-; Information added by Drupal.org packaging script on 2017-02-03
-version = "7.x-2.0-rc5"
+; Information added by Drupal.org packaging script on 2017-02-28
+version = "7.x-2.0-rc11"
 core = "7.x"
 project = "media"
-datestamp = "1486142925"
+datestamp = "1488279796"
 
diff --git a/profiles/wcm_base/modules/contrib/pathauto/API.txt b/profiles/wcm_base/modules/contrib/pathauto/API.txt
deleted file mode 100644
index e585cd48..00000000
--- a/profiles/wcm_base/modules/contrib/pathauto/API.txt
+++ /dev/null
@@ -1,149 +0,0 @@
-This document explains how to provide "Pathauto integration" in a
-module. You need this if you would like to provide additional tokens
-or if your module has paths and you wish to have them automatically
-aliased.  The simplest integration is just to provide tokens so we
-cover that first.  More advanced integration requires an
-implementation of hook_pathauto to provide a settings form.
-
-It may be helpful to review some examples of integration from the
-pathauto_node.inc, pathauto_taxonomy.inc, and pathauto_user.inc files.
-
-
-==================
-1 - Providing additional tokens
-==================
-
-If all you want is to enable tokens for your module you will simply
-need to implement two functions:
-
-  hook_token_values
-  hook_token_list
-
-See the token.module and it's API.txt for more information about this
-process.
-
-If the token is intended to generate a path expected to contain slashes,
-the token name must end in 'path', 'path-raw' or 'alias'. This indicates to
-Pathauto that the slashes should not be removed from the replacement value.
-
-When an object is created (whether it is a node or a user or a
-taxonomy term) the data that Pathauto hands to the token_values in the
-$object is in a specific format. This is the format that most people
-write code to handle. However, during edits and bulk updates the data
-may be in a totally different format. So, if you are writing a
-hook_token_values implementation to add special tokens, be sure to
-test creation, edit, and bulk update cases to make sure your code will
-handle it.
-
-==================
-2 - Settings hook - To create aliases for your module
-==================
-You must implement hook_pathauto($op), where $op is always (at this
-time) 'settings'. Return an object (NOT an array) containing the
-following members, which will be used by pathauto to build a group
-of settings for your module and define the variables for saving your
-settings:
-
-module - The name of your module (e.g., 'node')
-groupheader - The translated label for the settings group (e.g.,
-  t('Content path settings')
-patterndescr - The translated label for the default pattern (e.g.,
-  t('Default path pattern (applies to all content types with blank patterns below)')
-patterndefault - A translated default pattern (e.g., t('[cat]/[title].html'))
-token_type - The token type (e.g. 'node', 'user') that can be used.
-patternitems - For modules which need to express multiple patterns
-  (for example, the node module supports a separate pattern for each
-  content type), an array whose keys consist of identifiers for each
-  pattern (e.g., the content type name) and values consist of the
-  translated label for the pattern
-bulkname - For modules which support a bulk update operation, the
-  translated label for the action (e.g., t('Bulk update content paths'))
-bulkdescr - For modules which support a bulk update operation, a
-  translated, more thorough description of what the operation will do
-  (e.g., t('Generate aliases for all existing content items which do not already have aliases.'))
-
-
-==================
-2 - $alias = pathauto_create_alias($module, $op, $placeholders, $src, $type=NULL)
-==================
-
-At the appropriate time (usually when a new item is being created for
-which a generated alias is desired), call pathauto_create_alias() to
-generate and create the alias.  See the user, taxonomy, and nodeapi hook
-implementations in pathauto.module for examples.
-
-$module - The name of your module (e.g., 'node')
-$op - Operation being performed on the item ('insert', 'update', or
-  'bulkupdate')
-$placeholders - An array whose keys consist of the translated placeholders
-  which appear in patterns and values are the "clean" values to be
-  substituted into the pattern. Call pathauto_cleanstring() on any
-  values which you do not know to be purely alphanumeric, to substitute
-  any non-alphanumerics with the user's designated separator. Note that
-  if the pattern has multiple slash-separated components (e.g., [term:path]),
-  pathauto_cleanstring() should be called for each component, not the
-  complete string.
-  Example: $placeholders[t('[title]')] = pathauto_cleanstring($node->title);
-$src - The "real" URI of the content to be aliased (e.g., "node/$node->nid")
-$type - For modules which provided patternitems in hook_autopath(),
-  the relevant identifier for the specific item to be aliased (e.g.,
-  $node->type)
-
-pathauto_create_alias() returns the alias that was created.
-
-
-==================
-3 - Bulk update function
-==================
-
-If a module supports bulk updating of aliases, it must provide a
-function of this form, to be called by pathauto when the corresponding
-checkbox is selected and the settings page submitted:
-
-function <module>_pathauto_bulkupdate()
-
-The function should iterate over the content items controlled by the
-module, calling pathauto_create_alias() for each one. It is
-recommended that the function report on its success (e.g., with a
-count of created aliases) via drupal_set_message().
-
-
-==================
-4 - Bulk delete hook_path_alias_types()
-==================
-
-For modules that create new types of pages that can be aliased with pathauto, a
-hook implementation is needed to allow the user to delete them all at once.
-
-function hook_path_alias_types()
-
-This hook returns an array whose keys match the beginning of the source paths
-(e.g.: "node/", "user/", etc.) and whose values describe the type of page (e.g.:
-"content", "users"). Like all displayed strings, these descriptionsshould be
-localized with t(). Use % to match interior pieces of a path; "user/%/track". This
-is a database wildcard, so be careful.
-
-
-==================
-Modules that extend node and/or taxonomy
-==================
-
-NOTE: this is basically not true any more.  If you feel you need this file an issue.
-
-Many contributed Drupal modules extend the core node and taxonomy
-modules. To extend pathauto patterns to support their extensions, they
-may implement the pathauto_node and pathauto_taxonomy hooks.
-
-To do so, implement the function <modulename>_pathauto_node (or _taxonomy),
-accepting the arguments $op and $node (or $term). Two operations are
-supported:
-
-$op = 'placeholders' - return an array keyed on placeholder strings
-(e.g., t('[eventyyyy]')) valued with descriptions (e.g. t('The year the
-event starts.')).
-$op = 'values' - return an array keyed on placeholder strings, valued
-with the "clean" actual value for the passed node or category (e.g.,
-pathauto_cleanstring(date('M', $eventstart)));
-
-See contrib/pathauto_node_event.inc for an example of extending node
-patterns.
diff --git a/profiles/wcm_base/modules/contrib/pathauto/README.txt b/profiles/wcm_base/modules/contrib/pathauto/README.txt
index 4c458a14..fc56959d 100644
--- a/profiles/wcm_base/modules/contrib/pathauto/README.txt
+++ b/profiles/wcm_base/modules/contrib/pathauto/README.txt
@@ -1,48 +1,49 @@
-Please read this file and also the INSTALL.txt.  
+Please read this file and also the INSTALL.txt.
 They contain answers to many common questions.
 If you are developing for this module, the API.txt may be interesting.
 If you are upgrading, check the CHANGELOG.txt for major changes.
 
-**Description:
-The Pathauto module provides support functions for other modules to 
-automatically generate aliases based on appropriate criteria, with a 
+** Description:
+The Pathauto module provides support functions for other modules to
+automatically generate aliases based on appropriate criteria, with a
 central settings path for site administrators.
 
 Implementations are provided for core entity types: content, taxonomy terms,
-and users (including blogs and tracker pages).
+and users (including blogs and forum pages).
 
-Pathauto also provides a way to delete large numbers of aliases.  This feature 
-is available at  Administer > Site building > URL aliases > Delete aliases
+Pathauto also provides a way to delete large numbers of aliases.  This feature
+is available at  Administer > Configuration > Search and metadata > URL aliases
+> Delete aliases.
 
-**Benefits:
+** Benefits:
 Besides making the page address more reflective of its content than
-"node/138", it's important to know that modern search engines give 
-heavy weight to search terms which appear in a page's URL. By 
-automatically using keywords based directly on the page content in the URL, 
+"node/138", it's important to know that modern search engines give
+heavy weight to search terms which appear in a page's URL. By
+automatically using keywords based directly on the page content in the URL,
 relevant search engine hits for your page can be significantly
 enhanced.
 
-**Installation AND Upgrades:
+** Installation AND Upgrades:
 See the INSTALL.txt file.
 
-**Notices:
+** Notices:
 Pathauto just adds URL aliases to content, users, and taxonomy terms.
-Because it's an alias, the standard Drupal URL (for example node/123 or 
-taxonomy/term/1) will still function as normal.  If you have external links 
-to your site pointing to standard Drupal URLs, or hardcoded links in a module, 
+Because it's an alias, the standard Drupal URL (for example node/123 or
+taxonomy/term/1) will still function as normal.  If you have external links
+to your site pointing to standard Drupal URLs, or hardcoded links in a module,
 template, content or menu which point to standard Drupal URLs it will bypass
 the alias set by Pathauto.
 
-There are reasons you might not want two URLs for the same content on your 
-site. If this applies to you, please note that you will need to update any 
-hard coded links in your content or blocks. 
+There are reasons you might not want two URLs for the same content on your
+site. If this applies to you, please note that you will need to update any
+hard coded links in your content or blocks.
 
 If you use the "system path" (i.e. node/10) for menu items and settings like
 that, Drupal will replace it with the url_alias.
 
-For external links, you might want to consider the Path Redirect or 
-Global Redirect modules, which allow you to set forwarding either per item or 
-across the site to your aliased URLs. 
+For external links, you might want to consider the Path Redirect or
+Global Redirect modules, which allow you to set forwarding either per item or
+across the site to your aliased URLs.
 
 URLs (not) Getting Replaced With Aliases:
 Please bear in mind that only URLs passed through Drupal's l() or url()
@@ -54,41 +55,27 @@ Drupal API instead:
 * 'href="'. url("node/$node->nid") .'"' or
 * l("Your link title", "node/$node->nid")
 
-See http://api.drupal.org/api/HEAD/function/url and 
+See http://api.drupal.org/api/HEAD/function/url and
 http://api.drupal.org/api/HEAD/function/l for more information.
 
 ** Disabling Pathauto for a specific content type (or taxonomy)
-When the pattern for a content type is left blank, the default pattern will be 
-used. But if the default pattern is also blank, Pathauto will be disabled 
+When the pattern for a content type is left blank, the default pattern will be
+used. But if the default pattern is also blank, Pathauto will be disabled
 for that content type.
 
-** Bulk Updates Must be Run Multiple Times:
-As of 5.x-2.x Pathauto now performs bulk updates in a manner which is more 
-likely to succeed on large sites.  The drawback is that it needs to be run 
-multiple times.  If you want to reduce the number of times that you need to 
-run Pathauto you can increase the "Maximum number of objects to alias in a 
-bulk update:" setting under General Settings.
-
-**WYSIWYG Conflicts - FCKEditor, TinyMCE, etc.
-If you use a WYSIWYG editor, please disable it for the Pathauto admin page.  
-Failure to do so may cause errors about "preg_replace" problems due to the <p>
-tag being added to the "strings to replace".  See http://drupal.org/node/175772
-
-**Credits:
+** Credits:
 The original module combined the functionality of Mike Ryan's autopath with
 Tommy Sundstrom's path_automatic.
 
 Significant enhancements were contributed by jdmquin @ www.bcdems.net.
 
-Matt England added the tracker support.
+Matt England added the tracker support (tracker support has been removed in
+recent changes).
 
 Other suggestions and patches contributed by the Drupal community.
 
-Current maintainers: 
-  Greg Knaddison - http://growingventuresolutions.com
+Current maintainers:
+  Dave Reid - http://www.davereid.net
+  Greg Knaddison - http://www.knaddison.com
   Mike Ryan - http://mikeryan.name
   Frederik 'Freso' S. Olesen - http://freso.dk
-
-**Changes:
-See the CHANGELOG.txt file.
-
diff --git a/profiles/wcm_base/modules/contrib/pathauto/pathauto.admin.inc b/profiles/wcm_base/modules/contrib/pathauto/pathauto.admin.inc
index 9030f487..b2103867 100644
--- a/profiles/wcm_base/modules/contrib/pathauto/pathauto.admin.inc
+++ b/profiles/wcm_base/modules/contrib/pathauto/pathauto.admin.inc
@@ -64,17 +64,11 @@ function pathauto_patterns_form($form, $form_state) {
       }
     }
 
-    // Display the user documentation of placeholders supported by
-    // this module, as a description on the last pattern
+    // Show the token help relevant to this pattern type.
     $form[$module]['token_help'] = array(
-      '#title' => t('Replacement patterns'),
-      '#type' => 'fieldset',
-      '#collapsible' => TRUE,
-      '#collapsed' => TRUE,
-    );
-    $form[$module]['token_help']['help'] = array(
       '#theme' => 'token_tree',
       '#token_types' => array($settings->token_type),
+      '#dialog' => TRUE,
     );
   }
 
@@ -144,7 +138,7 @@ function pathauto_settings_form($form) {
 
   $description = t('What should Pathauto do when updating an existing content item which already has an alias?');
   if (module_exists('redirect')) {
-    $description .= ' ' . t('The <a href="!url">Redirect module settings</a> affect whether a redirect is created when an alias is deleted.', array('!url' => url('admin/config/search/redirect')));
+    $description .= ' ' . t('The <a href="!url">Redirect module settings</a> affect whether a redirect is created when an alias is deleted.', array('!url' => url('admin/config/search/redirect/settings')));
   }
   else {
     $description .= ' ' . t('Considering installing the <a href="!url">Redirect module</a> to get redirects when your aliases change.', array('!url' => 'http://drupal.org/project/redirect'));
@@ -165,7 +159,7 @@ function pathauto_settings_form($form) {
     '#type' => 'checkbox',
     '#title' => t('Transliterate prior to creating alias'),
     '#default_value' => variable_get('pathauto_transliterate', FALSE) && module_exists('transliteration'),
-    '#description' => t('When a pattern includes certain characters (such as those with accents) should Pathauto attempt to transliterate them into the ASCII-96 alphabet? Transliteration is handled by the Transliteration module.'),
+    '#description' => t('When a pattern includes certain characters (such as those with accents) should Pathauto attempt to transliterate them into the US-ASCII alphabet? Transliteration is handled by the Transliteration module.'),
     '#access' => module_exists('transliteration'),
   );
 
diff --git a/profiles/wcm_base/modules/contrib/pathauto/pathauto.api.php b/profiles/wcm_base/modules/contrib/pathauto/pathauto.api.php
index 41f11543..4c921888 100644
--- a/profiles/wcm_base/modules/contrib/pathauto/pathauto.api.php
+++ b/profiles/wcm_base/modules/contrib/pathauto/pathauto.api.php
@@ -1,17 +1,171 @@
 <?php
-
 /**
  * @file
  * Documentation for pathauto API.
  *
- * @see hook_token_info
- * @see hook_tokens
+ * It may be helpful to review some examples of integration from
+ * pathauto.pathauto.inc.
+ *
+ * Pathauto works by using tokens in path patterns.  Thus the simplest
+ * integration is just to provide tokens.  Token support is provided by Drupal
+ * core. To provide additional token from your module, implement the following
+ * hooks:
+ *
+ * hook_tokens() - http://api.drupal.org/api/function/hook_tokens
+ * hook_token_info() - http://api.drupal.org/api/function/hook_token_info
+ *
+ * If you wish to provide pathauto integration for custom paths provided by your
+ * module, there are a few steps involved.
+ *
+ * 1. hook_pathauto()
+ *    Provide information required by pathauto for the settings form as well as
+ *    bulk generation.  See the documentation for hook_pathauto() for more
+ *    details.
+ *
+ * 2. pathauto_create_alias()
+ *    At the appropriate time (usually when a new item is being created for
+ *    which a generated alias is desired), call pathauto_create_alias() with the
+ *    appropriate parameters to generate and create the alias. See the user,
+ *    taxonomy, and node hook implementations in pathauto.module for examples.
+ *    Also see the documentation for pathauto_create_alias().
+ *
+ * 3. pathauto_path_delete_all()
+ *    At the appropriate time (usually when an item is being deleted), call
+ *    pathauto_path_delete_all() to remove any aliases that were created for the
+ *    content being removed.  See the documentation for
+ *    pathauto_path_delete_all() for more details.
+ *
+ * 4. hook_path_alias_types()
+ *    For modules that create new types of content that can be aliased with
+ *    pathauto, a hook implementation is needed to allow the user to delete them
+ *    all at once.  See the documentation for hook_path_alias_types() below for
+ *    more information.
+ *
+ * There are other integration points with pathauto, namely alter hooks that
+ * allow you to change the data used by pathauto at various points in the
+ * process.  See the below hook documentation for details.
  */
 
+/**
+ * Used primarily by the bulk delete form.  This hooks provides pathauto the
+ * information needed to bulk delete aliases created by your module.  The keys
+ * of the return array are used by pathauto as the system path prefix to delete
+ * from the url_aliases table.  The corresponding value is simply used as the
+ * label for each type of path on the bulk delete form.
+ *
+ * @return
+ *   An array whose keys match the beginning of the source paths
+ *   (e.g.: "node/", "user/", etc.) and whose values describe the type of page
+ *   (e.g.: "Content", "Users"). Like all displayed strings, these descriptions
+ *   should be localized with t(). Use % to match interior pieces of a path,
+ *   like "user/%/track". This is a database wildcard (meaning "user/%/track"
+ *   matches "user/1/track" as well as "user/1/view/track").
+ */
 function hook_path_alias_types() {
+  $objects['user/'] = t('Users');
+  $objects['node/'] = t('Content');
+  return $objects;
 }
 
+/**
+ * Provide information about the way your module's aliases will be built.
+ *
+ * The information you provide here is used to build the form
+ * on search/path/patterns. File pathauto.pathauto.inc provides example
+ * implementations for system modules.
+ *
+ * @see node_pathauto
+ *
+ * @param $op
+ *   At the moment this will always be 'settings'.
+ *
+ * @return object|null
+ *   An object, or array of objects (if providing multiple groups of path
+ *   patterns).  Each object should have the following members:
+ *   - 'module': The module or entity type.
+ *   - 'token_type': Which token type should be allowed in the patterns form.
+ *   - 'groupheader': Translated label for the settings group
+ *   - 'patterndescr': The translated label for the default pattern (e.g.,
+ *      t('Default path pattern (applies to all content types with blank
+ *      patterns below)')
+ *   - 'patterndefault': Default pattern  (e.g. 'content/[node:title]'
+ *   - 'batch_update_callback': The name of function that should be ran for
+ *      bulk update. @see node_pathauto_bulk_update_batch_process for example
+ *   - 'batch_file': The name of the file with the bulk update function.
+ *   - 'patternitems': Optional. An array of descritpions keyed by bundles.
+ */
 function hook_pathauto($op) {
+  switch ($op) {
+    case 'settings':
+      $settings = array();
+      $settings['module'] = 'file';
+      $settings['token_type'] = 'file';
+      $settings['groupheader'] = t('File paths');
+      $settings['patterndescr'] = t('Default path pattern (applies to all file types with blank patterns below)');
+      $settings['patterndefault'] = 'files/[file:name]';
+      $settings['batch_update_callback'] = 'file_entity_pathauto_bulk_update_batch_process';
+      $settings['batch_file'] = drupal_get_path('module', 'file_entity') . '/file_entity.pathauto.inc';
+
+      foreach (file_type_get_enabled_types() as $file_type => $type) {
+        $settings['patternitems'][$file_type] = t('Pattern for all @file_type paths.', array('@file_type' => $type->label));
+      }
+      return (object) $settings;
+
+    default:
+      break;
+  }
+}
+
+/**
+ * Determine if a possible URL alias would conflict with any existing paths.
+ *
+ * Returning TRUE from this function will trigger pathauto_alias_uniquify() to
+ * generate a similar URL alias with a suffix to avoid conflicts.
+ *
+ * @param string $alias
+ *   The potential URL alias.
+ * @param string $source
+ *   The source path for the alias (e.g. 'node/1').
+ * @param string $langcode
+ *   The language code for the alias (e.g. 'en').
+ *
+ * @return bool
+ *   TRUE if $alias conflicts with an existing, reserved path, or FALSE/NULL if
+ *   it does not match any reserved paths.
+ *
+ * @see pathauto_alias_uniquify()
+ */
+function hook_pathauto_is_alias_reserved($alias, $source, $langcode) {
+  // Check our module's list of paths and return TRUE if $alias matches any of
+  // them.
+  return (bool) db_query("SELECT 1 FROM {mytable} WHERE path = :path", array(':path' => $alias))->fetchField();
+}
+
+/**
+ * Alter the pattern to be used before an alias is generated by Pathauto.
+ *
+ * This hook will only be called if a default pattern is configured (on
+ * admin/config/search/path/patterns).
+ *
+ * @param string $pattern
+ *   The alias pattern for Pathauto to pass to token_replace() to generate the
+ *   URL alias.
+ * @param array $context
+ *   An associative array of additional options, with the following elements:
+ *   - 'module': The module or entity type being aliased.
+ *   - 'op': A string with the operation being performed on the object being
+ *     aliased. Can be either 'insert', 'update', 'return', or 'bulkupdate'.
+ *   - 'source': A string of the source path for the alias (e.g. 'node/1').
+ *   - 'data': An array of keyed objects to pass to token_replace().
+ *   - 'type': The sub-type or bundle of the object being aliased.
+ *   - 'language': A string of the language code for the alias (e.g. 'en').
+ *     This can be altered by reference.
+ */
+function hook_pathauto_pattern_alter(&$pattern, array $context) {
+  // Switch out any [node:created:*] tokens with [node:updated:*] on update.
+  if ($context['module'] == 'node' && ($context['op'] == 'update')) {
+    $pattern = preg_replace('/\[node:created(\:[^]]*)?\]/', '[node:updated$1]', $pattern);
+  }
 }
 
 /**
diff --git a/profiles/wcm_base/modules/contrib/pathauto/pathauto.inc b/profiles/wcm_base/modules/contrib/pathauto/pathauto.inc
index 9f98eec3..9699aa08 100644
--- a/profiles/wcm_base/modules/contrib/pathauto/pathauto.inc
+++ b/profiles/wcm_base/modules/contrib/pathauto/pathauto.inc
@@ -59,30 +59,27 @@ define('PATHAUTO_PUNCTUATION_DO_NOTHING', 2);
  *   A string alias.
  * @param $source
  *   A string that is the internal path.
- * @param $language
+ * @param $langcode
  *   A string indicating the path's language.
- * @return
+ *
+ * @return bool
  *   TRUE if an alias exists, FALSE if not.
+ *
+ * @deprecated Use path_pathauto_is_alias_reserved() instead.
  */
-function _pathauto_alias_exists($alias, $source, $language = LANGUAGE_NONE) {
-  $pid = db_query_range("SELECT pid FROM {url_alias} WHERE source <> :source AND alias = :alias AND language IN (:language, :language_none) ORDER BY language DESC, pid DESC", 0, 1, array(
-    ':source' => $source,
-    ':alias' => $alias,
-    ':language' => $language,
-    ':language_none' => LANGUAGE_NONE,
-  ))->fetchField();
-
-  return !empty($pid);
+function _pathauto_alias_exists($alias, $source, $langcode = LANGUAGE_NONE) {
+  return path_pathauto_is_alias_reserved($alias, $source, $langcode);
 }
 
 /**
  * Fetches an existing URL alias given a path and optional language.
  *
- * @param $source
+ * @param string $source
  *   An internal Drupal path.
- * @param $language
+ * @param string $language
  *   An optional language code to look up the path in.
- * @return
+ *
+ * @return bool|array
  *   FALSE if no alias was found or an associative array containing the
  *   following keys:
  *   - pid: Unique path alias identifier.
@@ -111,12 +108,17 @@ function _pathauto_existing_alias_data($source, $language = LANGUAGE_NONE) {
  * This function should *not* be called on URL alias or path strings because it
  * is assumed that they are already clean.
  *
- * @param $string
+ * @param string $string
  *   A string to clean.
- * @return
+ * @param array $options
+ *   (optional) A keyed array of settings and flags to control the Pathauto
+ *   clean string replacement process. Supported options are:
+ *   - langcode: A language code to be used when translating strings.
+ *
+ * @return string
  *   The cleaned string.
  */
-function pathauto_cleanstring($string) {
+function pathauto_cleanstring($string, array $options = array()) {
   // Use the advanced drupal_static() pattern, since this is called very often.
   static $drupal_static_fast;
   if (!isset($drupal_static_fast)) {
@@ -161,6 +163,7 @@ function pathauto_cleanstring($string) {
     if ($ignore_words_regex) {
       $cache['ignore_words_regex'] = '\b' . $ignore_words_regex . '\b';
       if (function_exists('mb_eregi_replace')) {
+        mb_regex_encoding('UTF-8');
         $cache['ignore_words_callback'] = 'mb_eregi_replace';
       }
       else {
@@ -170,15 +173,23 @@ function pathauto_cleanstring($string) {
     }
   }
 
-  // Empty strings do not need any proccessing.
+  // Empty strings do not need any processing.
   if ($string === '' || $string === NULL) {
     return '';
   }
 
+  $langcode = NULL;
+  if (!empty($options['language']->language)) {
+    $langcode = $options['language']->language;
+  }
+  elseif (!empty($options['langcode'])) {
+    $langcode = $options['langcode'];
+  }
+
   // Check if the string has already been processed, and if so return the
   // cached result.
-  if (isset($cache['strings'][$string])) {
-    return $cache['strings'][$string];
+  if (isset($cache['strings'][$langcode][$string])) {
+    return $cache['strings'][$langcode][$string];
   }
 
   // Remove all HTML tags from the string.
@@ -186,7 +197,10 @@ function pathauto_cleanstring($string) {
 
   // Optionally transliterate (by running through the Transliteration module)
   if ($cache['transliterate']) {
-    $output = transliteration_get($output);
+    // If the reduce strings to letters and numbers is enabled, don't bother
+    // replacing unknown characters with a question mark. Use an empty string
+    // instead.
+    $output = transliteration_get($output, $cache['reduce_ascii'] ? '' : '?', $langcode);
   }
 
   // Replace or drop punctuation based on user settings
@@ -220,7 +234,7 @@ function pathauto_cleanstring($string) {
   $output = truncate_utf8($output, $cache['maxlength'], TRUE);
 
   // Cache this result in the static array.
-  $cache['strings'][$string] = $output;
+  $cache['strings'][$langcode][$string] = $output;
 
   return $output;
 }
@@ -228,11 +242,12 @@ function pathauto_cleanstring($string) {
 /**
  * Trims duplicate, leading, and trailing separators from a string.
  *
- * @param $string
+ * @param string $string
  *   The string to clean path separators from.
- * @param $separator
+ * @param string $separator
  *   The path separator to use when cleaning.
- * @return
+ *
+ * @return string
  *   The cleaned version of the string.
  *
  * @see pathauto_cleanstring()
@@ -250,21 +265,20 @@ function _pathauto_clean_separators($string, $separator = NULL) {
 
   $output = $string;
 
-  // Clean duplicate or trailing separators.
   if (strlen($separator)) {
-    // Escape the separator.
+    // Trim any leading or trailing separators.
+    $output = trim($output, $separator);
+
+    // Escape the separator for use in regular expressions.
     $seppattern = preg_quote($separator, '/');
 
-    // Trim any leading or trailing separators.
-    $output = preg_replace("/^$seppattern+|$seppattern+$/", '', $output);
+    // Replace multiple separators with a single one.
+    $output = preg_replace("/$seppattern+/", $separator, $output);
 
     // Replace trailing separators around slashes.
     if ($separator !== '/') {
-      $output = preg_replace("/$seppattern+\/|\/$seppattern+/", "/", $output);
+      $output = preg_replace("/\/+$seppattern\/+|$seppattern\/+|\/+$seppattern/", "/", $output);
     }
-
-    // Replace multiple separators with a single one.
-    $output = preg_replace("/$seppattern+/", $separator, $output);
   }
 
   return $output;
@@ -278,9 +292,10 @@ function _pathauto_clean_separators($string, $separator = NULL) {
  * - Trim duplicate, leading, and trailing separators.
  * - Shorten to a desired length and logical position based on word boundaries.
  *
- * @param $alias
+ * @param string $alias
  *   A string with the URL alias to clean up.
- * @return
+ *
+ * @return string
  *   The cleaned URL alias.
  */
 function pathauto_clean_alias($alias) {
@@ -294,12 +309,15 @@ function pathauto_clean_alias($alias) {
 
   $output = $alias;
 
-  // Trim duplicate, leading, and trailing back-slashes.
-  $output = _pathauto_clean_separators($output, '/');
-
-  // Trim duplicate, leading, and trailing separators.
+  // Trim duplicate, leading, and trailing separators. Do this before cleaning
+  // backslashes since a pattern like "[token1]/[token2]-[token3]/[token4]"
+  // could end up like "value1/-/value2" and if backslashes were cleaned first
+  // this would result in a duplicate blackslash.
   $output = _pathauto_clean_separators($output);
 
+  // Trim duplicate, leading, and trailing backslashes.
+  $output = _pathauto_clean_separators($output, '/');
+
   // Shorten to a logical place based on word boundaries.
   $output = truncate_utf8($output, $cache['maxlength'], TRUE);
 
@@ -328,8 +346,10 @@ function pathauto_clean_alias($alias) {
  *   (e.g., $node->type).
  * @param $language
  *   A string specify the path's language.
- * @return
- *   The alias that was created.
+ *
+ * @return array|null|false
+ *   The alias array that was created, NULL if an empty alias was generated, or
+ *   FALSE if the alias generation was not possible.
  *
  * @see _pathauto_set_alias()
  * @see token_replace()
@@ -337,20 +357,32 @@ function pathauto_clean_alias($alias) {
 function pathauto_create_alias($module, $op, $source, $data, $type = NULL, $language = LANGUAGE_NONE) {
   // Retrieve and apply the pattern for this content type.
   $pattern = pathauto_pattern_load_by_entity($module, $type, $language);
+
+  // Allow other modules to alter the pattern.
+  $context = array(
+    'module' => $module,
+    'op' => $op,
+    'source' => $source,
+    'data' => $data,
+    'type' => $type,
+    'language' => &$language,
+  );
+  drupal_alter('pathauto_pattern', $pattern, $context);
+
   if (empty($pattern)) {
     // No pattern? Do nothing (otherwise we may blow away existing aliases...)
-    return '';
+    return FALSE;
   }
 
   // Special handling when updating an item which is already aliased.
   $existing_alias = NULL;
-  if ($op == 'update' || $op == 'bulkupdate') {
+  if ($op != 'insert') {
     if ($existing_alias = _pathauto_existing_alias_data($source, $language)) {
       switch (variable_get('pathauto_update_action', PATHAUTO_UPDATE_ACTION_DELETE)) {
         case PATHAUTO_UPDATE_ACTION_NO_NEW:
           // If an alias already exists, and the update action is set to do nothing,
           // then gosh-darn it, do nothing.
-          return '';
+          return FALSE;
       }
     }
   }
@@ -369,26 +401,19 @@ function pathauto_create_alias($module, $op, $source, $data, $type = NULL, $lang
   // @see token_scan()
   $pattern_tokens_removed = preg_replace('/\[[^\s\]:]*:[^\s\]]*\]/', '', $pattern);
   if ($alias === $pattern_tokens_removed) {
-    return '';
+    return;
   }
 
   $alias = pathauto_clean_alias($alias);
 
   // Allow other modules to alter the alias.
-  $context = array(
-    'module' => $module,
-    'op' => $op,
-    'source' => &$source,
-    'data' => $data,
-    'type' => $type,
-    'language' => &$language,
-    'pattern' => $pattern,
-  );
+  $context['source'] = &$source;
+  $context['pattern'] = $pattern;
   drupal_alter('pathauto_alias', $alias, $context);
 
   // If we have arrived at an empty string, discontinue.
   if (!drupal_strlen($alias)) {
-    return '';
+    return;
   }
 
   // If the alias already exists, generate a new, hopefully unique, variant.
@@ -432,7 +457,7 @@ function pathauto_create_alias($module, $op, $source, $data, $type = NULL, $lang
  *   A string with a language code.
  */
 function pathauto_alias_uniquify(&$alias, $source, $langcode) {
-  if (!_pathauto_alias_exists($alias, $source, $langcode)) {
+  if (!pathauto_is_alias_reserved($alias, $source, $langcode)) {
     return;
   }
 
@@ -445,9 +470,9 @@ function pathauto_alias_uniquify(&$alias, $source, $langcode) {
   do {
     // Append an incrementing numeric suffix until we find a unique alias.
     $unique_suffix = $separator . $i;
-    $alias = truncate_utf8($original_alias, $maxlength - drupal_strlen($unique_suffix, TRUE)) . $unique_suffix;
+    $alias = truncate_utf8($original_alias, $maxlength - drupal_strlen($unique_suffix), TRUE) . $unique_suffix;
     $i++;
-  } while (_pathauto_alias_exists($alias, $source, $langcode));
+  } while (pathauto_is_alias_reserved($alias, $source, $langcode));
 }
 
 /**
@@ -463,7 +488,7 @@ function pathauto_alias_uniquify(&$alias, $source, $langcode) {
 function _pathauto_path_is_callback($path) {
   // We need to use a try/catch here because of a core bug which will throw an
   // exception if $path is something like 'node/foo/bar'.
-  // @todo Remove when http://drupal.org/node/1302158 is fixed in core.
+  // @todo Remove when http://drupal.org/node/1003788 is fixed in core.
   try {
     $menu = menu_get_item($path);
   }
@@ -498,26 +523,19 @@ function _pathauto_path_is_callback($path) {
  *   An optional string with the operation being performed.
  *
  * @return
- *   The saved path from path_save() or NULL if the path was not saved.
+ *   The saved path from path_save() or FALSE if the path was not saved.
  *
  * @see path_save()
  */
 function _pathauto_set_alias(array $path, $existing_alias = NULL, $op = NULL) {
   $verbose = _pathauto_verbose(NULL, $op);
 
-  // Alert users that an existing callback cannot be overridden automatically
-  if (_pathauto_path_is_callback($path['alias'])) {
-    if ($verbose) {
-      _pathauto_verbose(t('Ignoring alias %alias due to existing path conflict.', array('%alias' => $path['alias'])));
-    }
-    return;
-  }
   // Alert users if they are trying to create an alias that is the same as the internal path
   if ($path['source'] == $path['alias']) {
     if ($verbose) {
       _pathauto_verbose(t('Ignoring alias %alias because it is the same as the internal path.', array('%alias' => $path['alias'])));
     }
-    return;
+    return FALSE;
   }
 
   // Skip replacing the current alias with an identical alias
@@ -529,7 +547,7 @@ function _pathauto_set_alias(array $path, $existing_alias = NULL, $op = NULL) {
       switch (variable_get('pathauto_update_action', PATHAUTO_UPDATE_ACTION_DELETE)) {
         case PATHAUTO_UPDATE_ACTION_NO_NEW:
           // Do not create the alias.
-          return;
+          return FALSE;
         case PATHAUTO_UPDATE_ACTION_LEAVE:
           // Create a new alias instead of overwriting the existing by leaving
           // $path['pid'] empty.
@@ -605,7 +623,7 @@ function pathauto_clean_token_values(&$replacements, $data = array(), $options =
   foreach ($replacements as $token => $value) {
     // Only clean non-path tokens.
     if (!preg_match('/(path|alias|url|url-brief)\]$/', $token)) {
-      $replacements[$token] = pathauto_cleanstring($value);
+      $replacements[$token] = pathauto_cleanstring($value, $options);
     }
   }
 }
diff --git a/profiles/wcm_base/modules/contrib/pathauto/pathauto.info b/profiles/wcm_base/modules/contrib/pathauto/pathauto.info
index 1488faa0..9a73e491 100644
--- a/profiles/wcm_base/modules/contrib/pathauto/pathauto.info
+++ b/profiles/wcm_base/modules/contrib/pathauto/pathauto.info
@@ -3,13 +3,14 @@ description = Provides a mechanism for modules to automatically generate aliases
 dependencies[] = path
 dependencies[] = token
 core = 7.x
+files[] = pathauto.migrate.inc
 files[] = pathauto.test
 configure = admin/config/search/path/patterns
 recommends[] = redirect
 
-; Information added by drupal.org packaging script on 2012-08-09
-version = "7.x-1.2"
+; Information added by Drupal.org packaging script on 2015-10-07
+version = "7.x-1.3"
 core = "7.x"
 project = "pathauto"
-datestamp = "1344525185"
+datestamp = "1444232655"
 
diff --git a/profiles/wcm_base/modules/contrib/pathauto/pathauto.install b/profiles/wcm_base/modules/contrib/pathauto/pathauto.install
index 82edccf3..62a4ed24 100644
--- a/profiles/wcm_base/modules/contrib/pathauto/pathauto.install
+++ b/profiles/wcm_base/modules/contrib/pathauto/pathauto.install
@@ -21,8 +21,8 @@ function pathauto_schema() {
         'description' => 'An entity type.',
       ),
       'entity_id' => array(
-        'type' => 'varchar',
-        'length' => 255,
+        'type' => 'int',
+        'unsigned' => TRUE,
         'not null' => TRUE,
         'description' => 'An entity ID.',
       ),
@@ -46,14 +46,20 @@ function pathauto_schema() {
  */
 function pathauto_install() {
   // Set some default variables necessary for the module to perform.
-  variable_set('pathauto_node_pattern', 'content/[node:title]');
-  variable_set('pathauto_taxonomy_term_pattern', '[term:vocabulary]/[term:name]');
-  variable_set('pathauto_forum_pattern', '[term:vocabulary]/[term:name]');
-  variable_set('pathauto_user_pattern', 'users/[user:name]');
-  variable_set('pathauto_blog_pattern', 'blogs/[user:name]');
-
-  // Set the default separator character to replace instead of remove (default).
-  variable_set('pathauto_punctuation_hyphen', 1);
+  $defaults = array(
+    'pathauto_node_pattern' => 'content/[node:title]',
+    'pathauto_taxonomy_term_pattern' => '[term:vocabulary]/[term:name]',
+    'pathauto_forum_pattern' => '[term:vocabulary]/[term:name]',
+    'pathauto_user_pattern' => 'users/[user:name]',
+    'pathauto_blog_pattern' => 'blogs/[user:name]',
+    // Set hyphen character to replace instead of remove.
+    'pathauto_punctuation_hyphen' => 1,
+  );
+  foreach ($defaults as $variable => $default) {
+    if (variable_get($variable) === NULL) {
+      variable_set($variable, $default);
+    }
+  }
 
   // Set the weight to 1
   db_update('system')
@@ -220,7 +226,7 @@ function pathauto_update_7005() {
 }
 
 /**
- * Create pathauto table, copying data from pathauto_persist if it exists
+ * Create pathauto_state table, using data from pathauto_persist if it exists.
  */
 function pathauto_update_7006() {
   if (!db_table_exists('pathauto_state')) {
@@ -232,13 +238,13 @@ function pathauto_update_7006() {
           'type' => 'varchar',
           'length' => 32,
           'not null' => TRUE,
-          'description' => 'An entity type.',
+          'description' => 'The entity type.',
         ),
         'entity_id' => array(
-          'type' => 'varchar',
-          'length' => 255,
+          'type' => 'int',
+          'unsigned' => TRUE,
           'not null' => TRUE,
-          'description' => 'An entity ID.',
+          'description' => 'The entity ID.',
         ),
         'pathauto' => array(
           'type' => 'int',
@@ -256,17 +262,11 @@ function pathauto_update_7006() {
       // that we can cleanly disable that module.
       db_rename_table('pathauto_persist', 'pathauto_state');
       db_create_table('pathauto_persist', $schema['pathauto_state']);
-      // Change the entity_id column to varchar because the entity system does
-      // not assume serial or integer IDs (see [#1823494]).
-      db_drop_primary_key('pathauto_state');
-      db_change_field('pathauto_state', 'entity_id', 'entity_id',
-            array('type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'description' => 'An entity ID.'));
-      db_add_primary_key('pathauto_state', array('entity_type', 'entity_id'));
       // Disable the module and inform the user.
       if (module_exists('pathauto_persist')) {
         module_disable(array('pathauto_persist'));
       }
-      return t('This version of Pathauto includes the functionality of Pathauto Persist, which has been disabled and can be safely removed. All settings have been copied.');
+      return t('The Pathauto Persist module and all of its data has been merged into Pathauto. The Pathauto Persist module has been disabled and can be safely uninstalled.');
     }
     else {
       db_create_table('pathauto_state', $schema['pathauto_state']);
diff --git a/profiles/wcm_base/modules/contrib/pathauto/pathauto.js b/profiles/wcm_base/modules/contrib/pathauto/pathauto.js
index be49cd63..52dcf12d 100644
--- a/profiles/wcm_base/modules/contrib/pathauto/pathauto.js
+++ b/profiles/wcm_base/modules/contrib/pathauto/pathauto.js
@@ -3,13 +3,13 @@
 Drupal.behaviors.pathFieldsetSummaries = {
   attach: function (context) {
     $('fieldset.path-form', context).drupalSetSummary(function (context) {
-      var path = $('.form-item-path-alias input').val();
-      var automatic = $('.form-item-path-pathauto input').attr('checked');
+      var path = $('.form-item-path-alias input', context).val();
+      var automatic = $('.form-item-path-pathauto input', context).attr('checked');
 
       if (automatic) {
         return Drupal.t('Automatic alias');
       }
-      if (path) {
+      else if (path) {
         return Drupal.t('Alias: @alias', { '@alias': path });
       }
       else {
diff --git a/profiles/wcm_base/modules/contrib/pathauto/pathauto.migrate.inc b/profiles/wcm_base/modules/contrib/pathauto/pathauto.migrate.inc
new file mode 100644
index 00000000..bbb9f297
--- /dev/null
+++ b/profiles/wcm_base/modules/contrib/pathauto/pathauto.migrate.inc
@@ -0,0 +1,56 @@
+<?php
+
+/**
+ * @file
+ * Support for the Pathauto module.
+ */
+
+/**
+ * Field handler.
+ */
+class PathautoMigrationHandler extends MigrateDestinationHandler {
+  public function __construct() {
+    $this->registerTypes(array('entity'));
+  }
+
+  /**
+   * Make the destination field visible.
+   */
+  public function fields() {
+    return array(
+      'pathauto' => t('Pathauto: Perform aliasing (set to 0 to prevent alias generation during migration'),
+    );
+  }
+
+  public function prepare($entity, stdClass $row) {
+    if (isset($entity->pathauto)) {
+      if (!isset($entity->path)) {
+        $entity->path = array();
+      }
+      elseif (is_string($entity->path)) {
+        // If MigratePathEntityHandler->prepare() hasn't run yet, support
+        // the alias (set as $entity->path as a string) being formatted properly
+        // in the path alias array.
+        $path = $entity->path;
+        $entity->path = array();
+        $entity->path['alias'] = $path;
+      }
+      $entity->path['pathauto'] = $entity->pathauto;
+      if (!isset($entity->path['alias'])) {
+        $entity->path['alias'] = '';
+      }
+      unset($entity->pathauto);
+    }
+  }
+}
+
+/*
+ * Implementation of hook_migrate_api().
+ */
+function pathauto_migrate_api() {
+  $api = array(
+    'api' => 2,
+    'destination handlers' => array('PathautoMigrationHandler'),
+  );
+  return $api;
+}
diff --git a/profiles/wcm_base/modules/contrib/pathauto/pathauto.module b/profiles/wcm_base/modules/contrib/pathauto/pathauto.module
index e4308ce6..63058209 100644
--- a/profiles/wcm_base/modules/contrib/pathauto/pathauto.module
+++ b/profiles/wcm_base/modules/contrib/pathauto/pathauto.module
@@ -26,30 +26,14 @@ define('PATHAUTO_IGNORE_WORDS', 'a, an, as, at, before, but, by, for, from, is,
  * Implements hook_hook_info().
  */
 function pathauto_hook_info() {
-  $info['pathauto'] = array('group' => 'pathauto');
-  $info['path_alias_types'] = array('group' => 'pathauto');
-  return $info;
-}
-
-/**
- * Implements hook_module_implements_alter().
- *
- * Adds pathauto support for core modules.
- */
-function pathauto_module_implements_alter(&$implementations, $hook) {
-  $hooks = pathauto_hook_info();
-  if (isset($hooks[$hook])) {
-    $modules = array('node', 'taxonomy', 'user', 'forum', 'blog');
-    foreach ($modules as $module) {
-      if (module_exists($module)) {
-        $implementations[$module] = TRUE;
-      }
-    }
-    // Move pathauto.module to get included first since it is responsible for
-    // other modules.
-    unset($implementations['pathauto']);
-    $implementations = array_merge(array('pathauto' => 'pathauto'), $implementations);
-  }
+  $hooks = array(
+    'pathauto',
+    'path_alias_types',
+    'pathauto_pattern_alter',
+    'pathauto_alias_alter',
+    'pathauto_is_alias_reserved',
+  );
+  return array_fill_keys($hooks, array('group' => 'pathauto'));
 }
 
 /**
@@ -67,6 +51,9 @@ function pathauto_help($path, $arg) {
       $output .= '<dd>' . t('The <strong>maximum alias length</strong> and <strong>maximum component length</strong> values default to 100 and have a limit of @max from Pathauto. This length is limited by the length of the "alias" column of the url_alias database table. The default database schema for this column is @max. If you set a length that is equal to that of the one set in the "alias" column it will cause problems in situations where the system needs to append additional words to the aliased URL. You should enter a value that is the length of the "alias" column minus the length of any strings that might get added to the end of the URL. The length of strings that might get added to the end of your URLs depends on which modules you have enabled and on your Pathauto settings. The recommended and default value is 100.', array('@max' => _pathauto_get_schema_alias_maxlength())) . '</dd>';
       $output .= '</dl>';
       return $output;
+    case 'admin/config/search/path/update_bulk':
+      $output = '<p>' . t('Bulk generation will only generate URL aliases for items that currently have no aliases. This is typically used when installing Pathauto on a site that has existing un-aliased content that needs to be aliased in bulk.') . '</p>';
+      return $output;
   }
 }
 
@@ -109,7 +96,7 @@ function pathauto_menu() {
     'file' => 'pathauto.admin.inc',
   );
   $items['admin/config/search/path/update_bulk'] = array(
-    'title' => 'Bulk update',
+    'title' => 'Bulk generate',
     'page callback' => 'drupal_get_form',
     'page arguments' => array('pathauto_bulk_update_form'),
     'access arguments' => array('administer url aliases'),
@@ -295,9 +282,19 @@ function pathauto_field_attach_form($entity_type, $entity, &$form, &$form_state,
     if (!empty($id)) {
       module_load_include('inc', 'pathauto');
       $uri = entity_uri($entity_type, $entity);
-      $path = drupal_get_path_alias($uri['path'], $langcode);
       $pathauto_alias = pathauto_create_alias($entity_type, 'return', $uri['path'], array($entity_type => $entity), $bundle, $langcode);
-      $entity->path['pathauto'] = ($path != $uri['path'] && $path == $pathauto_alias);
+      if ($pathauto_alias === FALSE) {
+        // If Pathauto is not going to be able to generate an alias, then we
+        // should not bother to show the checkbox since it wouldn't do anything.
+        // Note that if a pattern does apply, but all the tokens currently
+        // evaluate to empty strings, then $pathauto_alias would equal null and
+        // not false.
+        return;
+      }
+      else {
+        $path = drupal_get_path_alias($uri['path'], $langcode);
+        $entity->path['pathauto'] = ($path != $uri['path'] && $path == $pathauto_alias);
+      }
     }
     else {
       $entity->path['pathauto'] = TRUE;
@@ -344,13 +341,36 @@ function pathauto_field_attach_form($entity_type, $entity, &$form, &$form_state,
 /**
  * Implements hook_entity_load().
  */
-function pathauto_entity_load($entities, $type) {
-  $states = pathauto_entity_state_load_multiple($type, array_keys($entities));
-  foreach ($states as $id => $state) {
-    if (!isset($entities[$id]->path['pathauto'])) {
-      if (!isset($entities[$id]->path) || !is_array($entities[$id]->path)) {
-        $entities[$id]->path = array();
+function pathauto_entity_load($entities, $entity_type) {
+  // Statically cache which entity types have data in the pathauto_state
+  // table to avoid unnecessary queries for entities that would not have any
+  // data anyway.
+  static $loadable_types;
+  if (!isset($loadable_types)) {
+    $loadable_types = &drupal_static(__FUNCTION__);
+    if (!isset($loadable_types)) {
+      // Prevent errors if pathauto_update_7006() has not yet been run.
+      if (!db_table_exists('pathauto_state')) {
+        $loadable_types = array();
       }
+      else {
+        $loadable_types = db_query("SELECT DISTINCT entity_type FROM {pathauto_state}")->fetchCol();
+      }
+    }
+  }
+
+  // Check if this entity type has loadable records.
+  if (!in_array($entity_type, $loadable_types)) {
+    return;
+  }
+
+  $states = pathauto_entity_state_load_multiple($entity_type, array_keys($entities));
+  foreach ($states as $id => $state) {
+    if (!isset($entities[$id]->path)) {
+      $entities[$id]->path = array();
+    }
+
+    if (is_array($entities[$id]->path) && !isset($entities[$id]->path['pathauto'])) {
       $entities[$id]->path['pathauto'] = $state;
     }
   }
@@ -359,7 +379,7 @@ function pathauto_entity_load($entities, $type) {
 /**
  * Implements hook_entity_presave().
  */
-function pathauto_entity_presave($entity, $type) {
+function pathauto_entity_presave($entity, $entity_type) {
   if (isset($entity->path['pathauto']) && is_array($entity->path)) {
     // We must set an empty alias string for the path to prevent saving an
     // alias.
@@ -390,37 +410,42 @@ function pathauto_entity_presave($entity, $type) {
 /**
  * Implements hook_entity_insert().
  */
-function pathauto_entity_insert($entity, $type) {
+function pathauto_entity_insert($entity, $entity_type) {
   if (isset($entity->path['pathauto'])) {
-    pathauto_entity_state_save($type, $entity, $entity->path['pathauto']);
+    pathauto_entity_state_save($entity_type, $entity, $entity->path['pathauto']);
   }
 }
 
 /**
  * Implements hook_entity_update().
  */
-function pathauto_entity_update($entity, $type) {
+function pathauto_entity_update($entity, $entity_type) {
   if (isset($entity->path['pathauto'])) {
-    pathauto_entity_state_save($type, $entity, $entity->path['pathauto']);
+    pathauto_entity_state_save($entity_type, $entity, $entity->path['pathauto']);
   }
 }
 
 /**
  * Implements hook_entity_delete().
  */
-function pathauto_entity_delete($entity, $type) {
+function pathauto_entity_delete($entity, $entity_type) {
   if (isset($entity->path['pathauto'])) {
-    pathauto_entity_state_delete($type, $entity);
+    pathauto_entity_state_delete($entity_type, $entity);
   }
 }
 
 /**
  * Load a pathauto state for an entity.
  *
- * @param $entity_type
+ * @param string $entity_type
  *   An entity type.
- * @param $entity_id
+ * @param int $entity_id
  *   An entity ID.
+ *
+ * @return bool
+ *   A value that evaluates to TRUE if Pathauto should control this entity's
+ *   path. A value that evaluates to FALSE if Pathauto should not manage the
+ *   entity's path.
  */
 function pathauto_entity_state_load($entity_type, $entity_id) {
   $pathauto_state = pathauto_entity_state_load_multiple($entity_type, array($entity_id));
@@ -430,42 +455,29 @@ function pathauto_entity_state_load($entity_type, $entity_id) {
 /**
  * Load a pathauto state for multiple entities.
  *
- * @param $entity_type
- *   An entity type.
- * @param $entity_ids
- *   An array of entity IDs.
+ * @param string $entity_type
+ *   The entity type.
+ * @param int[] $entity_ids
+ *   The array of entity IDs.
+ *
+ * @return bool[]
+ *   An array of Pathauto states keyed by entity ID.
  */
 function pathauto_entity_state_load_multiple($entity_type, $entity_ids) {
-  try {
-    $pathauto_state = db_query("SELECT entity_id, pathauto FROM {pathauto_state} WHERE entity_type = :entity_type AND entity_id IN (:entity_ids)",
-      array(':entity_type' => $entity_type, ':entity_ids' => $entity_ids))->fetchAllKeyed();
-
-    return $pathauto_state;
-  } catch (Exception $ex) {
-    if (!defined('MAINTENANCE_MODE')) {
-      $message = 'The <code>pathauto_state</code> table does not exist, so a default value was provided. Please make sure to run <code>update.php</code>';
-      drupal_set_message($message, 'warning');
-      watchdog('pathauto', $message, array(), WATCHDOG_WARNING);
-    }
-    $result = array();
-    foreach ($entity_ids as $id) {
-      $result[$id] = FALSE;
-    }
-
-    return $result;
-  }
+  return db_query("SELECT entity_id, pathauto FROM {pathauto_state} WHERE entity_type = :entity_type AND entity_id IN (:entity_ids)", array(':entity_type' => $entity_type, ':entity_ids' => $entity_ids))->fetchAllKeyed();
 }
 
 /**
  * Save the pathauto state for an entity.
  *
- * @param $entity_type
- *   An entity type.
- * @param $entity
+ * @param string $entity_type
+ *   The entity type.
+ * @param object $entity
  *   The entity object.
- * @param $pathauto_state
- *   A boolean flag if TRUE means that Pathauto should keep controlling this
- *   entity's path in the future. A FALSE value means Pathauto should stay out.
+ * @param bool $pathauto_state
+ *   A value that evaluates to TRUE means that Pathauto should keep controlling
+ *   this entity's path in the future. A value that evaluates to FALSE means
+ *   that Pathauto should not manage the entity's path.
  */
 function pathauto_entity_state_save($entity_type, $entity, $pathauto_state) {
   list($entity_id) = entity_extract_ids($entity_type, $entity);
@@ -478,14 +490,15 @@ function pathauto_entity_state_save($entity_type, $entity, $pathauto_state) {
       'pathauto' => $pathauto_state ? 1 : 0,
     ))
     ->execute();
+  drupal_static_reset('pathauto_entity_load');
 }
 
 /**
  * Delete the pathauto state for an entity.
  *
- * @param $entity_type
- *   An entity type.
- * @param $entity
+ * @param string $entity_type
+ *   The entity type.
+ * @param object $entity
  *   The entity object.
  */
 function pathauto_entity_state_delete($entity_type, $entity) {
@@ -494,6 +507,7 @@ function pathauto_entity_state_delete($entity_type, $entity) {
     ->condition('entity_type', $entity_type)
     ->condition('entity_id', $entity_id)
     ->execute();
+  drupal_static_reset('pathauto_entity_load');
 }
 
 /**
@@ -504,16 +518,19 @@ function pathauto_action_info() {
     'type' => 'node',
     'label' => t('Update node alias'),
     'configurable' => FALSE,
+    'triggers' => array(),
   );
   $info['pathauto_taxonomy_term_update_action'] = array(
     'type' => 'taxonomy_term',
     'label' => t('Update taxonomy term alias'),
     'configurable' => FALSE,
+    'triggers' => array(),
   );
   $info['pathauto_user_update_action'] = array(
     'type' => 'user',
     'label' => t('Update user alias'),
     'configurable' => FALSE,
+    'triggers' => array(),
   );
 
   return $info;
@@ -523,7 +540,7 @@ function pathauto_action_info() {
  * Returns the language code of the given entity.
  *
  * Backward compatibility layer to ensure that installations running an older
- * version of core where entity_language() is not avilable do not break.
+ * version of core where entity_language() is not available do not break.
  *
  * @param string $entity_type
  *   An entity type.
@@ -547,6 +564,46 @@ function pathauto_entity_language($entity_type, $entity, $check_language_propert
   return !empty($langcode) ? $langcode : LANGUAGE_NONE;
 }
 
+function pathauto_is_alias_reserved($alias, $source, $langcode = LANGUAGE_NONE) {
+  foreach (module_implements('pathauto_is_alias_reserved') as $module) {
+    $result = module_invoke($module, 'pathauto_is_alias_reserved', $alias, $source, $langcode);
+    if (!empty($result)) {
+      // As soon as the first module says that an alias is in fact reserved,
+      // then there is no point in checking the rest of the modules.
+      return TRUE;
+    }
+  }
+
+  return FALSE;
+}
+
+/**
+ * Implements hook_pathauto_is_alias_reserved() on behalf of path.module.
+ */
+function path_pathauto_is_alias_reserved($alias, $source, $langcode) {
+  // For language neutral content, we need to make sure the alias doesn't
+  // collide with any existing aliases. For localized content, just make sure
+  // it doesn't collide with same language or language neutral aliases.
+  $query = db_select('url_alias', 'ua')
+         ->fields('ua', array('pid'))
+         ->condition('source', $source, '<>')
+         ->condition('alias', $alias);
+
+  if ($langcode != LANGUAGE_NONE) {
+    $query->condition('language', array($langcode, LANGUAGE_NONE), 'IN');
+  }
+
+  return $query->execute()->rowCount() > 0;
+}
+
+/**
+ * Implements hook_pathauto_is_alias_reserved().
+ */
+function pathauto_pathauto_is_alias_reserved($alias, $source, $langcode) {
+  module_load_include('inc', 'pathauto');
+  return _pathauto_path_is_callback($alias);
+}
+
 if (!function_exists('path_field_extra_fields')) {
 /**
  * Implements hook_field_extra_fields() on behalf of path.module.
@@ -589,6 +646,47 @@ function path_field_extra_fields() {
  * @{
  */
 
+/**
+ * Implements hook_path_alias_types() on behalf of node module.
+ */
+function node_path_alias_types() {
+  return array('node/' => t('Content'));
+}
+
+/**
+ * Implements hook_pathauto() on behalf of node module.
+ */
+function node_pathauto($op) {
+  if ($op == 'settings') {
+    $settings = array();
+    $settings['module'] = 'node';
+    $settings['token_type'] = 'node';
+    $settings['groupheader'] = t('Content paths');
+    $settings['patterndescr'] = t('Default path pattern (applies to all content types with blank patterns below)');
+    $settings['patterndefault'] = 'content/[node:title]';
+    $settings['batch_update_callback'] = 'node_pathauto_bulk_update_batch_process';
+    $settings['batch_file'] = drupal_get_path('module', 'pathauto') . '/pathauto.pathauto.inc';
+
+    $languages = array();
+    if (module_exists('locale')) {
+      $languages = array(LANGUAGE_NONE => t('language neutral')) + locale_language_list('name');
+    }
+
+    foreach (node_type_get_names() as $node_type => $node_name) {
+      if (count($languages) && variable_get('language_content_type_' . $node_type, 0)) {
+        $settings['patternitems'][$node_type] = t('Default path pattern for @node_type (applies to all @node_type content types with blank patterns below)', array('@node_type' => $node_name));
+        foreach ($languages as $lang_code => $lang_name) {
+          $settings['patternitems'][$node_type . '_' . $lang_code] = t('Pattern for all @language @node_type paths', array('@node_type' => $node_name, '@language' => $lang_name));
+        }
+      }
+      else {
+        $settings['patternitems'][$node_type] = t('Pattern for all @node_type paths', array('@node_type' => $node_name));
+      }
+    }
+    return (object) $settings;
+  }
+}
+
 /**
  * Implements hook_node_insert().
  */
@@ -647,20 +745,20 @@ function pathauto_node_operations() {
  */
 function pathauto_node_update_alias(stdClass $node, $op, array $options = array()) {
   // Skip processing if the user has disabled pathauto for the node.
-  if (isset($node->path['pathauto']) && empty($node->path['pathauto'])) {
-    return;
+  if (isset($node->path['pathauto']) && empty($node->path['pathauto']) && empty($options['force'])) {
+    return FALSE;
   }
 
   $options += array('language' => pathauto_entity_language('node', $node));
 
   // Skip processing if the node has no pattern.
   if (!pathauto_pattern_load_by_entity('node', $node->type, $options['language'])) {
-    return;
+    return FALSE;
   }
 
   module_load_include('inc', 'pathauto');
   $uri = entity_uri('node', $node);
-  pathauto_create_alias('node', $op, $uri['path'], array('node' => $node), $node->type, $options['language']);
+  return pathauto_create_alias('node', $op, $uri['path'], array('node' => $node), $node->type, $options['language']);
 }
 
 /**
@@ -703,6 +801,42 @@ function pathauto_node_update_action($node, $context = array()) {
  * @{
  */
 
+/**
+ * Implements hook_path_alias_types() on behalf of taxonomy module.
+ */
+function taxonomy_path_alias_types() {
+  return array('taxonomy/term/' => t('Taxonomy terms'));
+}
+
+/**
+ * Implements hook_pathauto() on behalf of taxonomy module.
+ */
+function taxonomy_pathauto($op) {
+  if ($op == 'settings') {
+    $settings = array();
+    $settings['module'] = 'taxonomy_term';
+    $settings['token_type'] = 'term';
+    $settings['groupheader'] = t('Taxonomy term paths');
+    $settings['patterndescr'] = t('Default path pattern (applies to all vocabularies with blank patterns below)');
+    $settings['patterndefault'] = '[term:vocabulary]/[term:name]';
+    $settings['batch_update_callback'] = 'taxonomy_pathauto_bulk_update_batch_process';
+    $settings['batch_file'] = drupal_get_path('module', 'pathauto') . '/pathauto.pathauto.inc';
+
+    $vocabularies = taxonomy_get_vocabularies();
+    if (count($vocabularies)) {
+      $settings['patternitems'] = array();
+      foreach ($vocabularies as $vid => $vocabulary) {
+        if ($vid == variable_get('forum_nav_vocabulary', '')) {
+          // Skip the forum vocabulary.
+          continue;
+        }
+        $settings['patternitems'][$vocabulary->machine_name] = t('Pattern for all %vocab-name paths', array('%vocab-name' => $vocabulary->name));
+      }
+    }
+    return (object) $settings;
+  }
+}
+
 /**
  * Implements hook_taxonomy_term_insert().
  */
@@ -747,8 +881,8 @@ function pathauto_form_taxonomy_form_term_alter(&$form, $form_state) {
  */
 function pathauto_taxonomy_term_update_alias(stdClass $term, $op, array $options = array()) {
   // Skip processing if the user has disabled pathauto for the term.
-  if (isset($term->path['pathauto']) && empty($term->path['pathauto'])) {
-    return;
+  if (isset($term->path['pathauto']) && empty($term->path['pathauto']) && empty($options['force'])) {
+    return FALSE;
   }
 
   $module = 'taxonomy_term';
@@ -757,7 +891,7 @@ function pathauto_taxonomy_term_update_alias(stdClass $term, $op, array $options
       $module = 'forum';
     }
     else {
-      return;
+      return FALSE;
     }
   }
 
@@ -774,21 +908,22 @@ function pathauto_taxonomy_term_update_alias(stdClass $term, $op, array $options
 
   // Skip processing if the term has no pattern.
   if (!pathauto_pattern_load_by_entity($module, $term->vocabulary_machine_name)) {
-    return;
+    return FALSE;
   }
 
   module_load_include('inc', 'pathauto');
   $uri = entity_uri('taxonomy_term', $term);
-  pathauto_create_alias($module, $op, $uri['path'], array('term' => $term), $term->vocabulary_machine_name, $options['language']);
+  $result = pathauto_create_alias($module, $op, $uri['path'], array('term' => $term), $term->vocabulary_machine_name, $options['language']);
 
   if (!empty($options['alias children'])) {
     // For all children generate new aliases.
-    $options['alias children'] = FALSE;
     unset($options['language']);
-    foreach (taxonomy_get_tree($term->vid, $term->tid) as $subterm) {
+    foreach (taxonomy_get_children($term->tid, $term->vid) as $subterm) {
       pathauto_taxonomy_term_update_alias($subterm, $op, $options);
     }
   }
+
+  return $result;
 }
 
 /**
@@ -826,11 +961,68 @@ function pathauto_taxonomy_term_update_action($term, $context = array()) {
  * @} End of "name pathauto_taxonomy".
  */
 
+/**
+ * @name pathauto_forum Pathauto integration for the core forum module.
+ * @{
+ */
+
+/**
+ * Implements hook_path_alias_types() on behalf of forum module.
+ */
+function forum_path_alias_types() {
+  return array('forum/' => t('Forums'));
+}
+
+/**
+ * Implements hook_pathauto() for forum module.
+ */
+function forum_pathauto($op) {
+  if ($op == 'settings') {
+    $settings = array();
+    $settings['module'] = 'forum';
+    $settings['token_type'] = 'term';
+    $settings['groupheader'] = t('Forum paths');
+    $settings['patterndescr'] = t('Pattern for forums and forum containers');
+    $settings['patterndefault'] = '[term:vocabulary]/[term:name]';
+    $settings['batch_update_callback'] = 'forum_pathauto_bulk_update_batch_process';
+    $settings['batch_file'] = drupal_get_path('module', 'pathauto') . '/pathauto.pathauto.inc';
+    return (object) $settings;
+  }
+}
+
+/**
+ * @} End of "name pathauto_forum".
+ */
+
 /**
  * @name pathauto_user Pathauto integration for the core user and blog modules.
  * @{
  */
 
+/**
+ * Implements hook_path_alias_types() on behalf of user module.
+ */
+function user_path_alias_types() {
+  return array('user/' => t('Users'));
+}
+
+/**
+ * Implements hook_pathauto() on behalf of user module.
+ */
+function user_pathauto($op) {
+  if ($op == 'settings') {
+    $settings = array();
+    $settings['module'] = 'user';
+    $settings['token_type'] = 'user';
+    $settings['groupheader'] = t('User paths');
+    $settings['patterndescr'] = t('Pattern for user account page paths');
+    $settings['patterndefault'] = 'users/[user:name]';
+    $settings['batch_update_callback'] = 'user_pathauto_bulk_update_batch_process';
+    $settings['batch_file'] = drupal_get_path('module', 'pathauto') . '/pathauto.pathauto.inc';
+    return (object) $settings;
+  }
+}
+
 /**
  * Implements hook_user_insert().
  */
@@ -878,8 +1070,8 @@ function pathauto_user_operations() {
  */
 function pathauto_user_update_alias(stdClass $account, $op, array $options = array()) {
   // Skip processing if the user has disabled pathauto for the account.
-  if (isset($account->path['pathauto']) && empty($account->path['pathauto'])) {
-    return;
+  if (isset($account->path['pathauto']) && empty($account->path['pathauto']) && empty($options['force'])) {
+    return FALSE;
   }
 
   $options += array(
@@ -891,17 +1083,19 @@ function pathauto_user_update_alias(stdClass $account, $op, array $options = arr
 
   // Skip processing if the account has no pattern.
   if (!pathauto_pattern_load_by_entity('user', '', $options['language'])) {
-    return;
+    return FALSE;
   }
 
   module_load_include('inc', 'pathauto');
   $uri = entity_uri('user', $account);
-  pathauto_create_alias('user', $op, $uri['path'], array('user' => $account), NULL, $options['language']);
+  $return = pathauto_create_alias('user', $op, $uri['path'], array('user' => $account), NULL, $options['language']);
 
   // Because blogs are also associated with users, also generate the blog paths.
   if (!empty($options['alias blog'])) {
     pathauto_blog_update_alias($account, $op, $options);
   }
+
+  return $return;
 }
 
 /**
@@ -935,6 +1129,39 @@ function pathauto_user_update_action($account, $context = array()) {
   pathauto_user_update_alias($account, 'bulkupdate', array('message' => TRUE));
 }
 
+/**
+ * @} End of "name pathauto_user".
+ */
+
+/**
+ * @name pathauto_blog Pathauto integration for the core blog module.
+ * @{
+ */
+
+/**
+ * Implements hook_path_alias_types() on behalf of blog module.
+ */
+function blog_path_alias_types() {
+  return array('blog/' => t('User blogs'));
+}
+
+/**
+ * Implements hook_pathauto() on behalf of blog module.
+ */
+function blog_pathauto($op) {
+  if ($op == 'settings') {
+    $settings = array();
+    $settings['module'] = 'blog';
+    $settings['token_type'] = 'user';
+    $settings['groupheader'] = t('Blog paths');
+    $settings['patterndescr'] = t('Pattern for blog page paths');
+    $settings['patterndefault'] = 'blogs/[user:name]';
+    $settings['batch_update_callback'] = 'blog_pathauto_bulk_update_batch_process';
+    $settings['batch_file'] = drupal_get_path('module', 'pathauto') . '/pathauto.pathauto.inc';
+    return (object) $settings;
+  }
+}
+
 /**
  * Update the blog URL aliases for an individual user account.
  *
@@ -949,7 +1176,7 @@ function pathauto_user_update_action($account, $context = array()) {
 function pathauto_blog_update_alias(stdClass $account, $op, array $options = array()) {
   // Skip processing if the blog has no pattern.
   if (!pathauto_pattern_load_by_entity('blog')) {
-    return;
+    return FALSE;
   }
 
   $options += array(
@@ -958,7 +1185,7 @@ function pathauto_blog_update_alias(stdClass $account, $op, array $options = arr
 
   module_load_include('inc', 'pathauto');
   if (node_access('create', 'blog', $account)) {
-    pathauto_create_alias('blog', $op, "blog/{$account->uid}", array('user' => $account), NULL, $options['language']);
+    return pathauto_create_alias('blog', $op, "blog/{$account->uid}", array('user' => $account), NULL, $options['language']);
   }
   else {
     pathauto_path_delete_all("blog/{$account->uid}");
@@ -966,5 +1193,30 @@ function pathauto_blog_update_alias(stdClass $account, $op, array $options = arr
 }
 
 /**
- * @} End of "name pathauto_user".
+ * @} End of "name pathauto_blog".
+ */
+
+/**
+ * Implements hook_features_pipe_COMPONENT_alter().
  */
+function pathauto_features_pipe_node_alter(&$pipe, $data, $export) {
+  foreach ($data as $node_type) {
+    $pipe['variable'][] = "pathauto_node_{$node_type}_pattern";
+    if (module_exists('locale')) {
+      $langcodes = array_keys(locale_language_list('name'));
+      $langcodes[] = LANGUAGE_NONE;
+      foreach ($langcodes as $langcode) {
+        $pipe['variable'][] = "pathauto_node_{$node_type}_{$langcode}_pattern";
+      }
+    }
+  }
+}
+
+/**
+ * Implements hook_features_pipe_COMPONENT_alter().
+ */
+function pathauto_features_pipe_taxonomy_alter(&$pipe, $data, $export) {
+  foreach ($data as $vocabulary) {
+    $pipe['variable'][] = "pathauto_taxonomy_term_{$vocabulary}_pattern";
+  }
+}
diff --git a/profiles/wcm_base/modules/contrib/pathauto/pathauto.pathauto.inc b/profiles/wcm_base/modules/contrib/pathauto/pathauto.pathauto.inc
index 28d3ce09..23df259c 100644
--- a/profiles/wcm_base/modules/contrib/pathauto/pathauto.pathauto.inc
+++ b/profiles/wcm_base/modules/contrib/pathauto/pathauto.pathauto.inc
@@ -7,79 +7,6 @@
  * @ingroup pathauto
  */
 
-/**
- * Implements hook_path_alias_types().
- *
- * Used primarily by the bulk delete form.
- */
-function pathauto_path_alias_types() {
-  $objects['user/'] = t('Users');
-  $objects['node/'] = t('Content');
-  if (module_exists('blog')) {
-    $objects['blog/'] = t('User blogs');
-  }
-  if (module_exists('taxonomy')) {
-    $objects['taxonomy/term/'] = t('Taxonomy terms');
-  }
-  if (module_exists('forum')) {
-    $objects['forum/'] = t('Forums');
-  }
-  return $objects;
-}
-
-/**
- * Implements hook_pathauto().
- *
- * This function is empty so that the other core module implementations can be
- * defined in this file. This is because in pathauto_module_implements_alter()
- * we add pathauto to be included first. The module system then peforms a
- * check on any subsequent run if this function still exists. If this does not
- * exist, than this file will not get included and the core implementations
- * will never get run.
- *
- * @see pathauto_module_implements_alter().
- */
-function pathauto_pathauto() {
-  // Empty hook; see the above comment.
-}
-
-/**
- * Implements hook_pathauto().
- */
-function node_pathauto($op) {
-  switch ($op) {
-    case 'settings':
-      $settings = array();
-      $settings['module'] = 'node';
-      $settings['token_type'] = 'node';
-      $settings['groupheader'] = t('Content paths');
-      $settings['patterndescr'] = t('Default path pattern (applies to all content types with blank patterns below)');
-      $settings['patterndefault'] = 'content/[node:title]';
-      $settings['batch_update_callback'] = 'node_pathauto_bulk_update_batch_process';
-      $settings['batch_file'] = drupal_get_path('module', 'pathauto') . '/pathauto.pathauto.inc';
-
-      $languages = array();
-      if (module_exists('locale')) {
-        $languages = array(LANGUAGE_NONE => t('language neutral')) + locale_language_list('name');
-      }
-
-      foreach (node_type_get_names() as $node_type => $node_name) {
-        if (count($languages) && variable_get('language_content_type_' . $node_type, 0)) {
-          $settings['patternitems'][$node_type] = t('Default path pattern for @node_type (applies to all @node_type content types with blank patterns below)', array('@node_type' => $node_name));
-          foreach ($languages as $lang_code => $lang_name) {
-            $settings['patternitems'][$node_type . '_' . $lang_code] = t('Pattern for all @language @node_type paths', array('@node_type' => $node_name, '@language' => $lang_name));
-          }
-        }
-        else {
-          $settings['patternitems'][$node_type] = t('Pattern for all @node_type paths', array('@node_type' => $node_name));
-        }
-      }
-      return (object) $settings;
-    default:
-      break;
-  }
-}
-
 /**
  * Batch processing callback; Generate aliases for nodes.
  */
@@ -122,38 +49,6 @@ function node_pathauto_bulk_update_batch_process(&$context) {
   }
 }
 
-/**
- * Implements hook_pathauto().
- */
-function taxonomy_pathauto($op) {
-  switch ($op) {
-    case 'settings':
-      $settings = array();
-      $settings['module'] = 'taxonomy_term';
-      $settings['token_type'] = 'term';
-      $settings['groupheader'] = t('Taxonomy term paths');
-      $settings['patterndescr'] = t('Default path pattern (applies to all vocabularies with blank patterns below)');
-      $settings['patterndefault'] = '[term:vocabulary]/[term:name]';
-      $settings['batch_update_callback'] = 'taxonomy_pathauto_bulk_update_batch_process';
-      $settings['batch_file'] = drupal_get_path('module', 'pathauto') . '/pathauto.pathauto.inc';
-
-      $vocabularies = taxonomy_get_vocabularies();
-      if (count($vocabularies)) {
-        $settings['patternitems'] = array();
-        foreach ($vocabularies as $vid => $vocabulary) {
-          if ($vid == variable_get('forum_nav_vocabulary', '')) {
-            // Skip the forum vocabulary.
-            continue;
-          }
-          $settings['patternitems'][$vocabulary->machine_name] = t('Pattern for all %vocab-name paths', array('%vocab-name' => $vocabulary->name));
-        }
-      }
-      return (object) $settings;
-    default:
-      break;
-  }
-}
-
 /**
  * Batch processing callback; Generate aliases for taxonomy terms.
  */
@@ -200,26 +95,6 @@ function taxonomy_pathauto_bulk_update_batch_process(&$context) {
   }
 }
 
-/**
- * Implements hook_pathauto() for forum module.
- */
-function forum_pathauto($op) {
-  switch ($op) {
-    case 'settings':
-      $settings = array();
-      $settings['module'] = 'forum';
-      $settings['token_type'] = 'term';
-      $settings['groupheader'] = t('Forum paths');
-      $settings['patterndescr'] = t('Pattern for forums and forum containers');
-      $settings['patterndefault'] = '[term:vocabulary]/[term:name]';
-      $settings['batch_update_callback'] = 'forum_pathauto_bulk_update_batch_process';
-      $settings['batch_file'] = drupal_get_path('module', 'pathauto') . '/pathauto.pathauto.inc';
-      return (object) $settings;
-    default:
-      break;
-  }
-}
-
 /**
  * Batch processing callback; Generate aliases for forums.
  */
@@ -263,26 +138,6 @@ function forum_pathauto_bulk_update_batch_process(&$context) {
   }
 }
 
-/**
- * Implements hook_pathauto().
- */
-function user_pathauto($op) {
-  switch ($op) {
-    case 'settings':
-      $settings = array();
-      $settings['module'] = 'user';
-      $settings['token_type'] = 'user';
-      $settings['groupheader'] = t('User paths');
-      $settings['patterndescr'] = t('Pattern for user account page paths');
-      $settings['patterndefault'] = 'users/[user:name]';
-      $settings['batch_update_callback'] = 'user_pathauto_bulk_update_batch_process';
-      $settings['batch_file'] = drupal_get_path('module', 'pathauto') . '/pathauto.pathauto.inc';
-      return (object) $settings;
-    default:
-      break;
-  }
-}
-
 /**
  * Batch processing callback; Generate aliases for users.
  */
@@ -325,26 +180,6 @@ function user_pathauto_bulk_update_batch_process(&$context) {
   }
 }
 
-/**
- * Implements hook_pathauto().
- */
-function blog_pathauto($op) {
-  switch ($op) {
-    case 'settings':
-      $settings = array();
-      $settings['module'] = 'blog';
-      $settings['token_type'] = 'user';
-      $settings['groupheader'] = t('Blog paths');
-      $settings['patterndescr'] = t('Pattern for blog page paths');
-      $settings['patterndefault'] = 'blogs/[user:name]';
-      $settings['batch_update_callback'] = 'blog_pathauto_bulk_update_batch_process';
-      $settings['batch_file'] = drupal_get_path('module', 'pathauto') . '/pathauto.pathauto.inc';
-      return (object) $settings;
-    default:
-      break;
-  }
-}
-
 /**
  * Batch processing callback; Generate aliases for blogs.
  */
diff --git a/profiles/wcm_base/modules/contrib/pathauto/pathauto.test b/profiles/wcm_base/modules/contrib/pathauto/pathauto.test
index 4bc0b716..298f8822 100644
--- a/profiles/wcm_base/modules/contrib/pathauto/pathauto.test
+++ b/profiles/wcm_base/modules/contrib/pathauto/pathauto.test
@@ -55,9 +55,13 @@ class PathautoTestHelper extends DrupalWebTestCase {
     $this->assertEntityAlias($entity_type, $entity, $uri['path'], $language);
   }
 
-  function assertNoEntityAliasExists($entity_type, $entity) {
+  function assertNoEntityAliasExists($entity_type, $entity, $alias = NULL) {
     $uri = entity_uri($entity_type, $entity);
-    $this->assertNoAliasExists(array('source' => $uri['path']));
+    $path = array('source' => $uri['path']);
+    if (!empty($alias)) {
+      $path['alias'] = $alias;
+    }
+    $this->assertNoAliasExists($path);
   }
 
   function assertAlias($source, $expected_alias, $language = LANGUAGE_NONE) {
@@ -192,6 +196,23 @@ class PathautoUnitTestCase extends PathautoTestHelper {
     }
   }
 
+  /**
+   * Test pathauto_clean_alias().
+   */
+  function testCleanAlias() {
+    $tests = array();
+    $tests['one/two/three'] = 'one/two/three';
+    $tests['/one/two/three/'] = 'one/two/three';
+    $tests['one//two///three'] = 'one/two/three';
+    $tests['one/two--three/-/--/-/--/four---five'] = 'one/two-three/four-five';
+    $tests['one/-//three--/four'] = 'one/three/four';
+    foreach ($tests as $input => $expected) {
+      $output = pathauto_clean_alias($input);
+      $this->assertEqual($output, $expected, t("pathauto_clean_alias('@input') expected '@expected', actual '@output'", array('@input' => $input, '@expected' => $expected, '@output' => $output)));
+    }
+
+  }
+
   /**
    * Test pathauto_path_delete_multiple().
    */
@@ -244,7 +265,7 @@ class PathautoUnitTestCase extends PathautoTestHelper {
     $node->title = 'Fifth title';
     pathauto_node_update($node);
     $this->assertEntityAlias('node', $node, 'content/fourth-title');
-    $this->assertNoAliasExists(array('alias' => 'content/fith-title'));
+    $this->assertNoAliasExists(array('alias' => 'content/fifth-title'));
 
     // Test PATHAUTO_UPDATE_ACTION_NO_NEW with unaliased node and 'update'.
     $this->deleteAllAliases();
@@ -289,6 +310,40 @@ class PathautoUnitTestCase extends PathautoTestHelper {
     $this->assertEntityAlias('taxonomy_term', $term2, 'My Crazy/Alias/child-term');
   }
 
+  /**
+   * Test using fields for path structures.
+   */
+  function testParentChildPathTokens() {
+    // First create a field which will be used to create the path. It must
+    // begin with a letter.
+    $fieldname = 'a' . drupal_strtolower($this->randomName());
+    field_create_field(array('field_name' => $fieldname, 'type' => 'text'));
+    field_create_instance(array('field_name' => $fieldname, 'entity_type' => 'taxonomy_term', 'bundle' => 'tags'));
+
+    // Make the path pattern of a field use the value of this field appended
+    // to the parent taxonomy term's pattern if there is one.
+    variable_set('pathauto_taxonomy_term_tags_pattern', '[term:parents:join-path]/[term:' . $fieldname . ']');
+
+    // Start by creating a parent term.
+    $parent = new stdClass();
+    $parent->$fieldname = array(LANGUAGE_NONE => array(array('value' => $parent->name = $this->randomName())));
+    $parent->vid = 1;
+    taxonomy_term_save($parent);
+
+    // Create the child term.
+    $child = new stdClass();
+    $child->name = $this->randomName();
+    $child->$fieldname = array(LANGUAGE_NONE => array(array('value' => $child->name = $this->randomName())));
+    $child->vid = 1;
+    $child->parent = $parent->tid;
+    taxonomy_term_save($child);
+    $this->assertEntityAlias('taxonomy_term', $child, drupal_strtolower($parent->name . '/' . $child->name));
+
+    // Re-saving the parent term should not modify the child term's alias.
+    taxonomy_term_save($parent);
+    $this->assertEntityAlias('taxonomy_term', $child, drupal_strtolower($parent->name . '/' . $child->name));
+  }
+
   function testEntityBundleRenamingDeleting() {
     // Create a vocabulary and test that it's pattern variable works.
     $vocab = $this->addVocabulary(array('machine_name' => 'old_name'));
@@ -315,17 +370,17 @@ class PathautoUnitTestCase extends PathautoTestHelper {
 
     // Check that Pathauto does not create an alias of '/admin'.
     $node = $this->drupalCreateNode(array('title' => 'Admin', 'type' => 'page'));
-    $this->assertNoEntityAlias('node', $node);
+    $this->assertEntityAlias('node', $node, 'admin-0');
 
     // Check that Pathauto does not create an alias of '/modules'.
     $node->title = 'Modules';
     node_save($node);
-    $this->assertNoEntityAlias('node', $node);
+    $this->assertEntityAlias('node', $node, 'modules-0');
 
     // Check that Pathauto does not create an alias of '/index.php'.
     $node->title = 'index.php';
     node_save($node);
-    $this->assertNoEntityAlias('node', $node);
+    $this->assertEntityAlias('node', $node, 'index.php-0');
 
     // Check that a safe value gets an automatic alias. This is also a control
     // to ensure the above tests work properly.
@@ -333,6 +388,18 @@ class PathautoUnitTestCase extends PathautoTestHelper {
     node_save($node);
     $this->assertEntityAlias('node', $node, 'safe-value');
   }
+
+  function testPathAliasUniquifyWordsafe() {
+    variable_set('pathauto_max_length', 25);
+
+    $node_1 = $this->drupalCreateNode(array('title' => 'thequick brownfox jumpedover thelazydog', 'type' => 'page'));
+    $node_2 = $this->drupalCreateNode(array('title' => 'thequick brownfox jumpedover thelazydog', 'type' => 'page'));
+
+    // Check that pathauto_alias_uniquify is calling truncate_utf8 with $wordsafe param set to TRUE.
+    // If it doesn't path alias result would be content/thequick-brownf-0
+    $this->assertEntityAlias('node', $node_1, 'content/thequick-brownfox');
+    $this->assertEntityAlias('node', $node_2, 'content/thequick-0');
+  }
 }
 
 /**
@@ -408,13 +475,23 @@ class PathautoFunctionalTestCase extends PathautoFunctionalTestHelper {
     $this->drupalGet($automatic_alias);
     $this->assertText($title, 'Node accessible through automatic alias.');
 
+    // Disable the update action. The checkbox should not be visible.
+    variable_set('pathauto_update_action', 0);
+    $this->drupalGet("node/{$node->nid}/edit");
+    $this->assertNoFieldById('edit-path-pathauto');
+
+    // Reset the update action back to default. The checkbox should be visible.
+    variable_del('pathauto_update_action');
+    $this->drupalGet("node/{$node->nid}/edit");
+    $this->assertFieldChecked('edit-path-pathauto');
+
     // Manually set the node's alias.
     $manual_alias = 'content/' . $node->nid;
     $edit = array(
       'path[pathauto]' => FALSE,
       'path[alias]' => $manual_alias,
     );
-    $this->drupalPost("node/{$node->nid}/edit", $edit, t('Save'));
+    $this->drupalPost(NULL, $edit, t('Save'));
     $this->assertText("Basic page $title has been updated.");
 
     // Check that the automatic alias checkbox is now unchecked by default.
@@ -449,6 +526,26 @@ class PathautoFunctionalTestCase extends PathautoFunctionalTestHelper {
     $this->assertNoFieldById('edit-path-pathauto');
     $this->assertFieldByName('path[alias]', '');
     $this->assertNoEntityAlias('node', $node);
+
+    // Set the page pattern to use only tokens so we can test the checkbox
+    // behavior if none of the tokens have a value currently.
+    variable_set('pathauto_node_page_pattern', '[node:title]');
+
+    // Create a node with an empty title. The Pathauto checkbox should still be
+    // visible but unchecked.
+    $node = $this->drupalCreateNode(array('type' => 'page', 'title' => ''));
+    $this->drupalGet('node/' . $node->nid . '/edit');
+    $this->assertNoFieldChecked('edit-path-pathauto');
+    $this->assertFieldByName('path[alias]', '');
+    $this->assertNoEntityAlias('node', $node);
+
+    $edit = array();
+    $edit['title'] = 'Valid title';
+    $edit['path[pathauto]'] = TRUE;
+    $this->drupalPost(NULL, $edit, t('Save'));
+    $this->drupalGet('node/' . $node->nid . '/edit');
+    $this->assertFieldChecked('edit-path-pathauto');
+    $this->assertFieldByName('path[alias]', 'valid-title');
   }
 
   /**
@@ -472,6 +569,83 @@ class PathautoFunctionalTestCase extends PathautoFunctionalTestHelper {
     $this->assertEntityAlias('node', $node2, 'node/' . $node2->nid);
   }
 
+  /**
+   * @todo Merge this with existing node test methods?
+   */
+  public function testNodeState() {
+    $nodeNoAliasUser = $this->drupalCreateUser(array('bypass node access'));
+    $nodeAliasUser = $this->drupalCreateUser(array('bypass node access', 'create url aliases'));
+
+    $node = $this->drupalCreateNode(array(
+      'title' => 'Node version one',
+      'type' => 'page',
+      'path' => array(
+        'pathauto' => FALSE,
+      ),
+    ));
+
+    $this->assertNoEntityAlias('node', $node);
+
+    // Set a manual path alias for the node.
+    $node->path['alias'] = 'test-alias';
+    node_save($node);
+
+    // Ensure that the pathauto field was saved to the database.
+    $node = node_load($node->nid, NULL, TRUE);
+    $this->assertFalse($node->path['pathauto']);
+
+    // Ensure that the manual path alias was saved and an automatic alias was not generated.
+    $this->assertEntityAlias('node', $node, 'test-alias');
+    $this->assertNoEntityAliasExists('node', $node, 'content/node-version-one');
+
+    // Save the node as a user who does not have access to path fieldset.
+    $this->drupalLogin($nodeNoAliasUser);
+    $this->drupalGet('node/' . $node->nid . '/edit');
+    $this->assertNoFieldByName('path[pathauto]');
+
+    $edit = array('title' => 'Node version two');
+    $this->drupalPost(NULL, $edit, 'Save');
+    $this->assertText('Basic page Node version two has been updated.');
+
+    $this->assertEntityAlias('node', $node, 'test-alias');
+    $this->assertNoEntityAliasExists('node', $node, 'content/node-version-one');
+    $this->assertNoEntityAliasExists('node', $node, 'content/node-version-two');
+
+    // Load the edit node page and check that the Pathauto checkbox is unchecked.
+    $this->drupalLogin($nodeAliasUser);
+    $this->drupalGet('node/' . $node->nid . '/edit');
+    $this->assertNoFieldChecked('edit-path-pathauto');
+
+    // Edit the manual alias and save the node.
+    $edit = array(
+      'title' => 'Node version three',
+      'path[alias]' => 'manually-edited-alias',
+    );
+    $this->drupalPost(NULL, $edit, 'Save');
+    $this->assertText('Basic page Node version three has been updated.');
+
+    $this->assertEntityAlias('node', $node, 'manually-edited-alias');
+    $this->assertNoEntityAliasExists('node', $node, 'test-alias');
+    $this->assertNoEntityAliasExists('node', $node, 'content/node-version-one');
+    $this->assertNoEntityAliasExists('node', $node, 'content/node-version-two');
+    $this->assertNoEntityAliasExists('node', $node, 'content/node-version-three');
+
+    // Programatically save the node with an automatic alias.
+    $node = node_load($node->nid, NULL, TRUE);
+    $node->path['pathauto'] = TRUE;
+    node_save($node);
+
+    // Ensure that the pathauto field was saved to the database.
+    $node = node_load($node->nid, NULL, TRUE);
+    $this->assertTrue($node->path['pathauto']);
+
+    $this->assertEntityAlias('node', $node, 'content/node-version-three');
+    $this->assertNoEntityAliasExists('node', $node, 'manually-edited-alias');
+    $this->assertNoEntityAliasExists('node', $node, 'test-alias');
+    $this->assertNoEntityAliasExists('node', $node, 'content/node-version-one');
+    $this->assertNoEntityAliasExists('node', $node, 'content/node-version-two');
+  }
+
   /**
    * Basic functional testing of Pathauto with taxonomy terms.
    */
@@ -672,6 +846,14 @@ class PathautoLocaleTestCase extends PathautoFunctionalTestHelper {
     $this->assertEntityAlias('node', $node, 'content/english-node-0', 'en');
     $this->assertEntityAlias('node', $node, 'french-node', 'fr');
     $this->assertAliasExists(array('pid' => $english_alias['pid'], 'alias' => 'content/english-node-0'));
+
+    // Create a new node with the same title as before but without
+    // specifying a language.
+    $node = $this->drupalCreateNode(array('title' => 'English node'));
+
+    // Check that the new node had a unique alias generated with the '-1'
+    // suffix.
+    $this->assertEntityAlias('node', $node, 'content/english-node-1');
   }
 }
 
@@ -791,133 +973,3 @@ class PathautoTokenTestCase extends PathautoFunctionalTestHelper {
     return $return;
   }
 }
-
-class PathautoPersistTestCase extends PathautoFunctionalTestHelper {
-  public static function getInfo() {
-    return array(
-      'name' => 'Pathauto persist tests',
-      'description' => 'Tests basic pathauto persist functionality.',
-      'group' => 'Pathauto',
-    );
-  }
-
-  public function setUp(array $modules = array()) {
-    parent::setUp($modules);
-
-    $this->nodeNoAliasUser = $this->drupalCreateUser(array('bypass node access'));
-    $this->nodeAliasUser = $this->drupalCreateUser(array('bypass node access', 'create url aliases'));
-  }
-
-  function assertEntityAlias($entity_type, $entity, $expected_alias, $language = LANGUAGE_NONE) {
-    $uri = entity_uri($entity_type, $entity);
-    $this->assertAlias($uri['path'], $expected_alias, $language);
-  }
-
-  function assertEntityAliasExists($entity_type, $entity) {
-    $uri = entity_uri($entity_type, $entity);
-    return $this->assertAliasExists(array('source' => $uri['path']));
-  }
-
-  function assertNoEntityAlias($entity_type, $entity, $language = LANGUAGE_NONE) {
-    $uri = entity_uri($entity_type, $entity);
-    $this->assertEntityAlias($entity_type, $entity, $uri['path'], $language);
-  }
-
-  function assertNoEntityAliasExists($entity_type, $entity, $alias = NULL) {
-    $uri = entity_uri($entity_type, $entity);
-    $path = array('source' => $uri['path']);
-    if (isset($alias)) {
-      $path['alias'] = $alias;
-    }
-    $this->assertNoAliasExists($path);
-  }
-
-  function assertAlias($source, $expected_alias, $language = LANGUAGE_NONE) {
-    drupal_clear_path_cache($source);
-    $alias = drupal_get_path_alias($source, $language);
-    $this->assertIdentical($alias, $expected_alias, t("Alias for %source with language '@language' was %actual, expected %expected.", array('%source' => $source, '%actual' => $alias, '%expected' => $expected_alias, '@language' => $language)));
-  }
-
-  function assertAliasExists($conditions) {
-    $path = path_load($conditions);
-    $this->assertTrue($path, t('Alias with conditions @conditions found.', array('@conditions' => var_export($conditions, TRUE))));
-    return $path;
-  }
-
-  function assertNoAliasExists($conditions) {
-    $alias = path_load($conditions);
-    $this->assertFalse($alias, t('Alias with conditions @conditions not found.', array('@conditions' => var_export($conditions, TRUE))));
-  }
-
-  public function testNodeAPI() {
-    $node = $this->drupalCreateNode(array(
-      'title' => 'Node version one',
-      'type' => 'article',
-      'path' => array(
-        'pathauto' => FALSE,
-      ),
-    ));
-
-    $this->assertNoEntityAlias('node', $node);
-
-    // Set a manual path alias for the node.
-    $node->path['alias'] = 'test-alias';
-    node_save($node);
-
-    // Ensure that the pathauto field was saved to the database.
-    $node = node_load($node->nid, NULL, TRUE);
-    $this->assertFalse($node->path['pathauto']);
-
-    // Ensure that the manual path alias was saved and an automatic alias was not generated.
-    $this->assertEntityAlias('node', $node, 'test-alias');
-    $this->assertNoEntityAliasExists('node', $node, 'content/node-version-one');
-
-    // Save the node as a user who does not have access to path fieldset.
-    $this->drupalLogin($this->nodeNoAliasUser);
-    $this->drupalGet('node/' . $node->nid . '/edit');
-    $this->assertNoFieldByName('path[pathauto]');
-
-    $edit = array('title' => 'Node version two');
-    $this->drupalPost(NULL, $edit, 'Save');
-    $this->assertText('Article Node version two has been updated.');
-
-    $this->assertEntityAlias('node', $node, 'test-alias');
-    $this->assertNoEntityAliasExists('node', $node, 'content/node-version-one');
-    $this->assertNoEntityAliasExists('node', $node, 'content/node-version-two');
-
-    // Load the edit node page and check that the Pathauto checkbox is unchecked.
-    $this->drupalLogin($this->nodeAliasUser);
-    $this->drupalGet('node/' . $node->nid . '/edit');
-    $this->assertNoFieldChecked('edit-path-pathauto');
-
-    // Edit the manual alias and save the node.
-    $edit = array(
-      'title' => 'Node version three',
-      'path[alias]' => 'manually-edited-alias',
-    );
-    $this->drupalPost(NULL, $edit, 'Save');
-    $this->assertText('Article Node version three has been updated.');
-
-    $this->assertEntityAlias('node', $node, 'manually-edited-alias');
-    $this->assertNoEntityAliasExists('node', $node, 'test-alias');
-    $this->assertNoEntityAliasExists('node', $node, 'content/node-version-one');
-    $this->assertNoEntityAliasExists('node', $node, 'content/node-version-two');
-    $this->assertNoEntityAliasExists('node', $node, 'content/node-version-three');
-
-    // Programatically save the node with an automatic alias.
-    $node = node_load($node->nid, NULL, TRUE);
-    $node->path['pathauto'] = TRUE;
-    node_save($node);
-
-    // Ensure that the pathauto field was saved to the database.
-    $node = node_load($node->nid, NULL, TRUE);
-    $this->assertTrue($node->path['pathauto']);
-
-    $this->assertEntityAlias('node', $node, 'content/node-version-three');
-    $this->assertNoEntityAliasExists('node', $node, 'manually-edited-alias');
-    $this->assertNoEntityAliasExists('node', $node, 'test-alias');
-    $this->assertNoEntityAliasExists('node', $node, 'content/node-version-one');
-    $this->assertNoEntityAliasExists('node', $node, 'content/node-version-two');
-
-  }
-}
diff --git a/profiles/wcm_base/modules/contrib/pathauto/pathauto.tokens.inc b/profiles/wcm_base/modules/contrib/pathauto/pathauto.tokens.inc
index a0f0b49b..dabcaa88 100644
--- a/profiles/wcm_base/modules/contrib/pathauto/pathauto.tokens.inc
+++ b/profiles/wcm_base/modules/contrib/pathauto/pathauto.tokens.inc
@@ -35,7 +35,7 @@ function pathauto_tokens($type, $tokens, array $data = array(), array $options =
           $values = array();
           foreach (element_children($array) as $key) {
             $value = is_array($array[$key]) ? render($array[$key]) : (string) $array[$key];
-            $value = pathauto_cleanstring($value);
+            $value = pathauto_cleanstring($value, $options);
             $values[] = $value;
           }
           $replacements[$original] = implode('/', $values);
diff --git a/profiles/wcm_base/modules/contrib/search_api/PATCHES.txt b/profiles/wcm_base/modules/contrib/search_api/PATCHES.txt
new file mode 100644
index 00000000..eb1be12e
--- /dev/null
+++ b/profiles/wcm_base/modules/contrib/search_api/PATCHES.txt
@@ -0,0 +1,4 @@
+The following patches have been applied to this project:
+- https://www.drupal.org/files/issues/search_api-missing-module-2838075-2.patch
+
+This file was automatically generated by Drush Make (http://drupal.org/project/drush).
diff --git a/profiles/wcm_base/modules/contrib/search_api/search_api.module b/profiles/wcm_base/modules/contrib/search_api/search_api.module
index bc2d28c0..c823bb65 100644
--- a/profiles/wcm_base/modules/contrib/search_api/search_api.module
+++ b/profiles/wcm_base/modules/contrib/search_api/search_api.module
@@ -784,7 +784,7 @@ function search_api_features_export_alter(&$export) {
  * @see hook_search_api_item_type_info()
  */
 function search_api_system_info_alter(&$info, $file, $type) {
-  if ($type != 'module' || $file->name == 'search_api') {
+  if ($type != 'module' || $file->name == 'search_api' || !module_exists($file->name)) {
     return;
   }
   // Check for defined item types.
diff --git a/profiles/wcm_base/modules/contrib/views/PATCHES.txt b/profiles/wcm_base/modules/contrib/views/PATCHES.txt
index ab83ee9d..7cb5e1ed 100644
--- a/profiles/wcm_base/modules/contrib/views/PATCHES.txt
+++ b/profiles/wcm_base/modules/contrib/views/PATCHES.txt
@@ -1,4 +1,4 @@
 The following patches have been applied to this project:
-- http://drupal.org/files/views-exposed-sorts-2037469-1.patch
+- http://drupal.org/files/issues/views-exposed-sorts-2037469-16.diff
 
 This file was automatically generated by Drush Make (http://drupal.org/project/drush).
diff --git a/profiles/wcm_base/modules/contrib/views/includes/handlers.inc b/profiles/wcm_base/modules/contrib/views/includes/handlers.inc
index 6c1e8879..680a54de 100644
--- a/profiles/wcm_base/modules/contrib/views/includes/handlers.inc
+++ b/profiles/wcm_base/modules/contrib/views/includes/handlers.inc
@@ -1588,7 +1588,7 @@ class views_join {
             $extras[] = $extra;
           }
           // Otherwise - and if we have a value - use it for a field-to-value condition.
-          elseif (!empty($info['value'])) {
+          elseif (isset($info['value'])) {
             // Convert a single-valued array of values to the single-value case,
             // and transform from IN() notation to = notation
             if (is_array($info['value']) && count($info['value']) == 1) {
diff --git a/profiles/wcm_base/modules/contrib/views/js/base.js b/profiles/wcm_base/modules/contrib/views/js/base.js
index 5855dceb..65bc4d51 100644
--- a/profiles/wcm_base/modules/contrib/views/js/base.js
+++ b/profiles/wcm_base/modules/contrib/views/js/base.js
@@ -64,6 +64,11 @@ Drupal.Views.parseQueryString = function (query) {
  * Helper function to return a view's arguments based on a path.
  */
 Drupal.Views.parseViewArgs = function (href, viewPath) {
+
+  // Provide language prefix.
+  if (Drupal.settings.pathPrefix) {
+    var viewPath = Drupal.settings.pathPrefix + viewPath;
+  }
   var returnObj = {};
   var path = Drupal.Views.getPath(href);
   // Ensure we have a correct path.
diff --git a/profiles/wcm_base/modules/contrib/views/modules/taxonomy/views_handler_argument_term_node_tid.inc b/profiles/wcm_base/modules/contrib/views/modules/taxonomy/views_handler_argument_term_node_tid.inc
index f47f08a8..58d18592 100644
--- a/profiles/wcm_base/modules/contrib/views/modules/taxonomy/views_handler_argument_term_node_tid.inc
+++ b/profiles/wcm_base/modules/contrib/views/modules/taxonomy/views_handler_argument_term_node_tid.inc
@@ -38,6 +38,7 @@ class views_handler_argument_term_node_tid extends views_handler_argument_many_t
   function title_query() {
     $titles = array();
     $result = db_select('taxonomy_term_data', 'td')
+      ->addTag('term_access')
       ->fields('td', array('name'))
       ->condition('td.tid', $this->value)
       ->execute();
diff --git a/profiles/wcm_base/modules/contrib/views/modules/taxonomy/views_handler_field_taxonomy.inc b/profiles/wcm_base/modules/contrib/views/modules/taxonomy/views_handler_field_taxonomy.inc
index 48da283d..9dacb0da 100644
--- a/profiles/wcm_base/modules/contrib/views/modules/taxonomy/views_handler_field_taxonomy.inc
+++ b/profiles/wcm_base/modules/contrib/views/modules/taxonomy/views_handler_field_taxonomy.inc
@@ -22,6 +22,7 @@ class views_handler_field_taxonomy extends views_handler_field {
     parent::construct();
     $this->additional_fields['vid'] = 'vid';
     $this->additional_fields['tid'] = 'tid';
+    $this->additional_fields['name'] = 'name';
     $this->additional_fields['vocabulary_machine_name'] = array(
       'table' => 'taxonomy_vocabulary',
       'field' => 'machine_name',
@@ -65,9 +66,13 @@ class views_handler_field_taxonomy extends views_handler_field {
       $term = new stdClass();
       $term->tid = $tid;
       $term->vid = $this->get_value($values, 'vid');
+      $term->name = $this->get_value($values, 'name');
       $term->vocabulary_machine_name = $values->{$this->aliases['vocabulary_machine_name']};
       $this->options['alter']['make_link'] = TRUE;
       $uri = entity_uri('taxonomy_term', $term);
+      if (isset($uri['options'])) {
+        $this->options['alter'] = array_merge($this->options['alter'], $uri['options']);
+      }
       $this->options['alter']['path'] = $uri['path'];
     }
 
diff --git a/profiles/wcm_base/modules/contrib/views/modules/taxonomy/views_plugin_argument_validate_taxonomy_term.inc b/profiles/wcm_base/modules/contrib/views/modules/taxonomy/views_plugin_argument_validate_taxonomy_term.inc
index 435db0dd..0765d72a 100644
--- a/profiles/wcm_base/modules/contrib/views/modules/taxonomy/views_plugin_argument_validate_taxonomy_term.inc
+++ b/profiles/wcm_base/modules/contrib/views/modules/taxonomy/views_plugin_argument_validate_taxonomy_term.inc
@@ -139,6 +139,7 @@ class views_plugin_argument_validate_taxonomy_term extends views_plugin_argument
         // if unverified tids left - verify them and cache results
         if (count($test)) {
           $query = db_select('taxonomy_term_data', 'td');
+          $query->addTag('term_access');
           $query->leftJoin('taxonomy_vocabulary', 'tv', 'td.vid = tv.vid');
           $query->fields('td');
           $query->fields('tv', array('machine_name'));
@@ -167,6 +168,7 @@ class views_plugin_argument_validate_taxonomy_term extends views_plugin_argument
       case 'name':
       case 'convert':
         $query = db_select('taxonomy_term_data', 'td');
+        $query->addTag('term_access');
         $query->leftJoin('taxonomy_vocabulary', 'tv', 'td.vid = tv.vid');
         $query->fields('td');
         $query->fields('tv', array('machine_name'));
@@ -202,6 +204,7 @@ class views_plugin_argument_validate_taxonomy_term extends views_plugin_argument
       $arg_keys = array_flip($args);
 
       $query = db_select('taxonomy_term_data', 'td');
+      $query->addTag('term_access');
       $query->condition('tid', $args);
       $query->addField('td', 'tid', 'tid');
       if (!empty($vocabularies)) {
diff --git a/profiles/wcm_base/modules/contrib/views/plugins/views_plugin_cache.inc b/profiles/wcm_base/modules/contrib/views/plugins/views_plugin_cache.inc
index 0dfc9114..d5d785f3 100644
--- a/profiles/wcm_base/modules/contrib/views/plugins/views_plugin_cache.inc
+++ b/profiles/wcm_base/modules/contrib/views/plugins/views_plugin_cache.inc
@@ -289,7 +289,14 @@ class views_plugin_cache extends views_plugin {
 
   function get_results_key() {
     if (!isset($this->_results_key)) {
-      $this->_results_key = $this->view->name . ':' . $this->display->id . ':results:' . $this->get_cache_key();
+      $key_data = array();
+      foreach (array('exposed_info', 'page', 'sort', 'order', 'items_per_page', 'offset') as $key) {
+        if (isset($_GET[$key])) {
+          $key_data[$key] = $_GET[$key];
+        }
+      }
+
+      $this->_results_key = $this->view->name . ':' . $this->display->id . ':results:' . $this->get_cache_key($key_data);
     }
 
     return $this->_results_key;
@@ -298,6 +305,7 @@ class views_plugin_cache extends views_plugin {
   function get_output_key() {
     if (!isset($this->_output_key)) {
       $key_data = array(
+        'result' => $this->view->result,
         'theme' => $GLOBALS['theme'],
       );
       $this->_output_key = $this->view->name . ':' . $this->display->id . ':output:' . $this->get_cache_key($key_data);
diff --git a/profiles/wcm_base/modules/contrib/views/plugins/views_plugin_cache_time.inc b/profiles/wcm_base/modules/contrib/views/plugins/views_plugin_cache_time.inc
index d3ab7f92..c11a1925 100644
--- a/profiles/wcm_base/modules/contrib/views/plugins/views_plugin_cache_time.inc
+++ b/profiles/wcm_base/modules/contrib/views/plugins/views_plugin_cache_time.inc
@@ -41,7 +41,7 @@ class views_plugin_cache_time extends views_plugin_cache {
       '#maxlength' => '30',
       '#description' => t('Length of time in seconds raw query results should be cached.'),
       '#default_value' => $this->options['results_lifespan_custom'],
-      '#process' => array('form_process_select','ctools_dependent_process'),
+      '#process' => array('ctools_dependent_process'),
       '#dependency' => array(
         'edit-cache-options-results-lifespan' => array('custom'),
       ),
@@ -60,7 +60,7 @@ class views_plugin_cache_time extends views_plugin_cache {
       '#maxlength' => '30',
       '#description' => t('Length of time in seconds rendered HTML output should be cached.'),
       '#default_value' => $this->options['output_lifespan_custom'],
-      '#process' => array('form_process_select','ctools_dependent_process'),
+      '#process' => array('ctools_dependent_process'),
       '#dependency' => array(
         'edit-cache-options-output-lifespan' => array('custom'),
       ),
diff --git a/profiles/wcm_base/modules/contrib/views/plugins/views_plugin_display_page.inc b/profiles/wcm_base/modules/contrib/views/plugins/views_plugin_display_page.inc
index 4bcec0bc..832bc6b5 100644
--- a/profiles/wcm_base/modules/contrib/views/plugins/views_plugin_display_page.inc
+++ b/profiles/wcm_base/modules/contrib/views/plugins/views_plugin_display_page.inc
@@ -118,6 +118,8 @@ class views_plugin_display_page extends views_plugin_display {
         'access arguments' => $access_arguments,
         // Identify URL embedded arguments and correlate them to a handler
         'load arguments'  => array($this->view->name, $this->display->id, '%index'),
+        // Make sure the menu router knows where views_page is.
+        'module' => 'views',
       );
       $menu = $this->get_option('menu');
       if (empty($menu)) {
@@ -182,6 +184,8 @@ class views_plugin_display_page extends views_plugin_display {
               'title' => $tab_options['title'],
               'description' => $tab_options['description'],
               'menu_name' => $tab_options['name'],
+              // Make sure the menu router knows where views_page is.
+              'module' => 'views',
             );
             switch ($tab_options['type']) {
               default:
diff --git a/profiles/wcm_base/modules/contrib/views/plugins/views_plugin_exposed_form.inc b/profiles/wcm_base/modules/contrib/views/plugins/views_plugin_exposed_form.inc
index 1d19ed17..bc444149 100644
--- a/profiles/wcm_base/modules/contrib/views/plugins/views_plugin_exposed_form.inc
+++ b/profiles/wcm_base/modules/contrib/views/plugins/views_plugin_exposed_form.inc
@@ -237,15 +237,20 @@ class views_plugin_exposed_form extends views_plugin {
         'DESC' => $this->options['sort_desc_label'],
       );
       if (isset($form_state['input']['sort_by']) && isset($this->view->sort[$form_state['input']['sort_by']])) {
-        $default_sort_order = $form_state['input']['sort_order'];
+        if (isset($form_state['input']['sort_order'])) {
+          $default_sort_order = $form_state['input']['sort_order'];
+        } else {
+          $default_sort_order = $this->view->sort[$form_state['input']['sort_by']]->options['order'];
+        }
       } else {
-        $first_sort = reset($this->view->sort);
+        $first_sort = $this->view->sort[key($exposed_sorts)];
         $default_sort_order = $first_sort->options['order'];
       }
 
       if (!isset($form_state['input']['sort_by'])) {
         $keys = array_keys($exposed_sorts);
         $form_state['input']['sort_by'] = array_shift($keys);
+        $form_state['input']['sort_order'] = $default_sort_order;
       }
 
       if ($this->options['expose_sort_order']) {
diff --git a/profiles/wcm_base/modules/contrib/views/plugins/views_plugin_style_jump_menu.inc b/profiles/wcm_base/modules/contrib/views/plugins/views_plugin_style_jump_menu.inc
index 1de90f79..b82facd7 100644
--- a/profiles/wcm_base/modules/contrib/views/plugins/views_plugin_style_jump_menu.inc
+++ b/profiles/wcm_base/modules/contrib/views/plugins/views_plugin_style_jump_menu.inc
@@ -146,7 +146,7 @@ class views_plugin_style_jump_menu extends views_plugin_style {
       $lookup_options = array();
       // We need to check if the path is absolute
       // or else language is not taken in account.
-      if ($this->view->display[$this->view->current_display]->display_options['fields'][$this->options['path']]['absolute']) {
+      if (!empty($this->view->display[$this->view->current_display]->display_options['fields'][$this->options['path']]['absolute'])) {
         $lookup_options['absolute'] = TRUE;
       }
       $lookup_url = url($_GET['q'], $lookup_options);
diff --git a/profiles/wcm_base/modules/contrib/views/tests/views_test.info b/profiles/wcm_base/modules/contrib/views/tests/views_test.info
index 6e9008ed..25cdf02e 100644
--- a/profiles/wcm_base/modules/contrib/views/tests/views_test.info
+++ b/profiles/wcm_base/modules/contrib/views/tests/views_test.info
@@ -5,9 +5,9 @@ core = 7.x
 dependencies[] = views
 hidden = TRUE
 
-; Information added by Drupal.org packaging script on 2016-06-15
-version = "7.x-3.14"
+; Information added by Drupal.org packaging script on 2017-02-22
+version = "7.x-3.15"
 core = "7.x"
 project = "views"
-datestamp = "1466019588"
+datestamp = "1487784193"
 
diff --git a/profiles/wcm_base/modules/contrib/views/views.info b/profiles/wcm_base/modules/contrib/views/views.info
index 0b425f17..5d7320a9 100644
--- a/profiles/wcm_base/modules/contrib/views/views.info
+++ b/profiles/wcm_base/modules/contrib/views/views.info
@@ -328,9 +328,9 @@ files[] = tests/views_cache.test
 files[] = tests/views_view.test
 files[] = tests/views_ui.test
 
-; Information added by Drupal.org packaging script on 2016-06-15
-version = "7.x-3.14"
+; Information added by Drupal.org packaging script on 2017-02-22
+version = "7.x-3.15"
 core = "7.x"
 project = "views"
-datestamp = "1466019588"
+datestamp = "1487784193"
 
diff --git a/profiles/wcm_base/modules/contrib/views/views_ui.info b/profiles/wcm_base/modules/contrib/views/views_ui.info
index cbe65b06..ebf2edbb 100644
--- a/profiles/wcm_base/modules/contrib/views/views_ui.info
+++ b/profiles/wcm_base/modules/contrib/views/views_ui.info
@@ -7,9 +7,9 @@ dependencies[] = views
 files[] = views_ui.module
 files[] = plugins/views_wizard/views_ui_base_views_wizard.class.php
 
-; Information added by Drupal.org packaging script on 2016-06-15
-version = "7.x-3.14"
+; Information added by Drupal.org packaging script on 2017-02-22
+version = "7.x-3.15"
 core = "7.x"
 project = "views"
-datestamp = "1466019588"
+datestamp = "1487784193"
 
diff --git a/profiles/wcm_base/modules/contrib/views_bulk_operations/actions/archive.action.inc b/profiles/wcm_base/modules/contrib/views_bulk_operations/actions/archive.action.inc
index f0055274..ef36acd5 100644
--- a/profiles/wcm_base/modules/contrib/views_bulk_operations/actions/archive.action.inc
+++ b/profiles/wcm_base/modules/contrib/views_bulk_operations/actions/archive.action.inc
@@ -3,10 +3,14 @@
 /**
  * @file
  * Provides an action for creating a zip archive of selected files.
+ *
  * An entry in the {file_managed} table is created for the newly created archive,
  * and it is marked as permanent or temporary based on the operation settings.
  */
 
+/**
+ * Implements hook_action_info().
+ */
 function views_bulk_operations_archive_action_info() {
   $actions = array();
   if (function_exists('zip_open')) {
@@ -71,6 +75,10 @@ function views_bulk_operations_archive_action($file, $context) {
     $archive_file->filemime = file_get_mimetype($destination);
     $archive_file->uid      = $user->uid;
     $archive_file->status   = $context['settings']['temporary'] ? FALSE : FILE_STATUS_PERMANENT;
+    // Clear filesize() cache to avoid private file system differences in
+    // filesize.
+    // @see https://www.drupal.org/node/2743999
+    clearstatcache();
     file_save($archive_file);
 
     $url = file_create_url($archive_file->uri);
@@ -100,8 +108,11 @@ function views_bulk_operations_archive_action_form($context) {
 }
 
 /**
- * Assembles a sanitized and unique URI for the archive, and returns it for
- * usage by the action callback (views_bulk_operations_archive_action).
+ * Assembles a sanitized and unique URI for the archive.
+ *
+ * @returns array
+ *   A URI array used by the action callback
+ *   (views_bulk_operations_archive_action).
  */
 function views_bulk_operations_archive_action_submit($form, $form_state) {
   // Validate the scheme, fallback to public if it's somehow invalid.
@@ -156,10 +167,12 @@ function views_bulk_operations_archive_action_views_bulk_operations_form($option
 /**
  * Create a sanitized and unique version of the provided filename.
  *
- * @param $filename
- *   String filename
+ * @param string $filename
+ *   The filename to create.
+ * @param array $archive_list
+ *   The list of files already in the archive.
  *
- * @return
+ * @return string
  *   The new filename.
  */
 function _views_bulk_operations_archive_action_create_filename($filename, $archive_list) {
@@ -167,7 +180,7 @@ function _views_bulk_operations_archive_action_create_filename($filename, $archi
   // some filesystems, not many applications handle them well.
   $filename = preg_replace('/[\x00-\x1F]/u', '_', $filename);
   if (substr(PHP_OS, 0, 3) == 'WIN') {
-    // These characters are not allowed in Windows filenames
+    // These characters are not allowed in Windows filenames.
     $filename = str_replace(array(':', '*', '?', '"', '<', '>', '|'), '_', $filename);
   }
 
diff --git a/profiles/wcm_base/modules/contrib/views_bulk_operations/actions/change_owner.action.inc b/profiles/wcm_base/modules/contrib/views_bulk_operations/actions/change_owner.action.inc
new file mode 100644
index 00000000..697670db
--- /dev/null
+++ b/profiles/wcm_base/modules/contrib/views_bulk_operations/actions/change_owner.action.inc
@@ -0,0 +1,65 @@
+<?php
+
+/**
+ * @file
+ * Implements a generic entity change owner action.
+ */
+
+/**
+ * Implements hook_action_info().
+ */
+function views_bulk_operations_change_owner_action_info() {
+  return array(
+    'views_bulk_operations_change_owner_action' => array(
+      'type' => 'entity',
+      'label' => t('Change owner'),
+      'configurable' => TRUE,
+      'behavior' => array('changes_property'),
+      'triggers' => array('any'),
+    ),
+  );
+}
+
+/**
+ * Action function.
+ */
+function views_bulk_operations_change_owner_action($entity, $context) {
+  $entity->uid = $context['owner_uid'];
+}
+
+/**
+ * Action form function.
+ */
+function views_bulk_operations_change_owner_action_form($context, &$form_state) {
+  $form['owner_username'] = array(
+    '#type' => 'textfield',
+    '#maxlength' => USERNAME_MAX_LENGTH,
+    '#title' => t('Owner'),
+    '#required' => TRUE,
+    '#description' => t('Choose the user you would like to set as the owner.'),
+    '#autocomplete_path' => 'user/autocomplete',
+  );
+
+  return $form;
+}
+
+/**
+ * Action form validate function.
+ *
+ * Checks that the submitted text is a valid username.
+ */
+function views_bulk_operations_change_owner_action_validate($form, $form_state) {
+  if (!user_load_by_name($form_state['values']['owner_username'])) {
+    form_set_error('owner_username', t('Valid username required.'));
+  }
+}
+
+/**
+ * Action form submit function.
+ *
+ * Pass submitted username back to views_bulk_operations_change_owner.
+ */
+function views_bulk_operations_change_owner_action_submit($form, $form_state) {
+  $user = user_load_by_name($form_state['values']['owner_username']);
+  return array('owner_uid' => $user->uid);
+}
diff --git a/profiles/wcm_base/modules/contrib/views_bulk_operations/actions/delete.action.inc b/profiles/wcm_base/modules/contrib/views_bulk_operations/actions/delete.action.inc
index 52c72d2f..439a504d 100644
--- a/profiles/wcm_base/modules/contrib/views_bulk_operations/actions/delete.action.inc
+++ b/profiles/wcm_base/modules/contrib/views_bulk_operations/actions/delete.action.inc
@@ -24,11 +24,46 @@ function views_bulk_operations_delete_action_info() {
   );
 }
 
+function views_bulk_operations_delete_item_views_bulk_operations_form($settings) {
+  $form = array();
+  $form['log'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Log individual deletions'),
+    '#description' => t('Note: Deleting large amounts of entities will generate large amounts of log messages.'),
+    '#default_value' => !empty($settings['log']),
+  );
+
+  return $form;
+}
+
 function views_bulk_operations_delete_item($entity, $context) {
   $info = entity_get_info($context['entity_type']);
   $entity_id = $entity->{$info['entity keys']['id']};
 
   entity_delete($context['entity_type'], $entity_id);
+
+  // Add a message to the watchdog if we've been configured to do so.
+  if (!empty($context['settings']['log'])) {
+    // Log an appropriate message for this entity type, using the format from
+    // the node, taxonomy and user module for their entity types.
+    switch ($context['entity_type']) {
+      case 'node':
+        watchdog('content', '@type: deleted %title.', array('@type' => $entity->type, '%title' => $entity->title));
+        break;
+
+      case 'taxonomy_term':
+        watchdog('taxonomy', 'Deleted term %name.', array('%name' => $entity->name), WATCHDOG_NOTICE);
+        break;
+
+      case 'user':
+        watchdog('user', 'Deleted user: %name %email.', array('%name' => $entity->name, '%email' => '<' . $entity->mail . '>'), WATCHDOG_NOTICE);
+        break;
+
+      default:
+        watchdog('entity', 'Deleted @type %label.', array('@type' => $context['entity_type'], '%label' => entity_label($context['entity_type'], $entity)));
+        break;
+    }
+  }
 }
 
 function views_bulk_operations_delete_revision($entity, $context) {
diff --git a/profiles/wcm_base/modules/contrib/views_bulk_operations/actions/modify.action.inc b/profiles/wcm_base/modules/contrib/views_bulk_operations/actions/modify.action.inc
index 301b17b2..06fa46dc 100644
--- a/profiles/wcm_base/modules/contrib/views_bulk_operations/actions/modify.action.inc
+++ b/profiles/wcm_base/modules/contrib/views_bulk_operations/actions/modify.action.inc
@@ -1,24 +1,30 @@
 <?php
 
 /**
- * @file VBO action to modify entity values (properties and fields).
+ * @file
+ * VBO action to modify entity values (properties and fields).
  */
 
 // Specifies that all available values should be shown to the user for editing.
 define('VBO_MODIFY_ACTION_ALL', '_all_');
 
+/**
+ * Implements hook_action_info().
+ */
 function views_bulk_operations_modify_action_info() {
-  return array('views_bulk_operations_modify_action' => array(
-    'type' => 'entity',
-    'label' => t('Modify entity values'),
-    'behavior' => array('changes_property'),
-    // This action only works when invoked through VBO. That's why it's
-    // declared as non-configurable to prevent it from being shown in the
-    // "Create an advanced action" dropdown on admin/config/system/actions.
-    'configurable' => FALSE,
-    'vbo_configurable' => TRUE,
-    'triggers' => array('any'),
-  ));
+  return array(
+    'views_bulk_operations_modify_action' => array(
+      'type' => 'entity',
+      'label' => t('Modify entity values'),
+      'behavior' => array('changes_property'),
+      // This action only works when invoked through VBO. That's why it's
+      // declared as non-configurable to prevent it from being shown in the
+      // "Create an advanced action" dropdown on admin/config/system/actions.
+      'configurable' => FALSE,
+      'vbo_configurable' => TRUE,
+      'triggers' => array('any'),
+    ),
+  );
 }
 
 /**
@@ -28,7 +34,7 @@ function views_bulk_operations_modify_action_info() {
  * replacing the existing values, or appending to them (based on user input).
  */
 function views_bulk_operations_modify_action($entity, $context) {
-  list(,,$bundle_name) = entity_extract_ids($context['entity_type'], $entity);
+  list(,, $bundle_name) = entity_extract_ids($context['entity_type'], $entity);
   // Handle Field API fields.
   if (!empty($context['selected']['bundle_' . $bundle_name])) {
     // The pseudo entity is cloned so that changes to it don't get carried
@@ -38,7 +44,7 @@ function views_bulk_operations_modify_action($entity, $context) {
       // Get this field's language. We can just pull it from the pseudo entity
       // as it was created using field_attach_form and entity_language so it's
       // already been figured out if this field is translatable or not and
-      // applied the appropriate language code to the field
+      // applied the appropriate language code to the field.
       $language = key($pseudo_entity->{$key});
       // Replace any tokens that might exist in the field columns.
       foreach ($pseudo_entity->{$key}[$language] as $delta => &$item) {
@@ -58,9 +64,11 @@ function views_bulk_operations_modify_action($entity, $context) {
         if ($field_info['cardinality'] != FIELD_CARDINALITY_UNLIMITED && $field_count > $field_info['cardinality']) {
           $entity_label = entity_label($context['entity_type'], $entity);
           $warning = t('Tried to set !field_count values for field !field_name that supports a maximum of !cardinality.',
-                       array('!field_count' => $field_count,
-                             '!field_name' => $field_info['field_name'],
-                             '!cardinality' => $field_info['cardinality']));
+            array(
+              '!field_count' => $field_count,
+              '!field_name' => $field_info['field_name'],
+              '!cardinality' => $field_info['cardinality'],
+            ));
           drupal_set_message($warning, 'warning', FALSE);
         }
 
@@ -76,11 +84,17 @@ function views_bulk_operations_modify_action($entity, $context) {
   }
 
   // Handle properties.
+  // Use the wrapper to set property values, since some properties need
+  // additional massaging by their setter callbacks.
+  // The wrapper will automatically modify $entity itself.
+  $wrapper = entity_metadata_wrapper($context['entity_type'], $entity);
+  // The default setting for 'revision' property (create new revisions) should
+  // be respected for nodes. This requires some special treatment.
+  if ($context['entity_type'] == 'node' && in_array('revision', variable_get('node_options_' . $bundle_name)) && !in_array('revision', $context['selected']['properties'])) {
+    $wrapper->revision->set(1);
+  }
+
   if (!empty($context['selected']['properties'])) {
-    // Use the wrapper to set property values, since some properties need
-    // additional massaging by their setter callbacks.
-    // The wrapper will automatically modify $entity itself.
-    $wrapper = entity_metadata_wrapper($context['entity_type'], $entity);
     foreach ($context['selected']['properties'] as $key) {
       if (!$wrapper->$key->access('update')) {
         // No access.
@@ -113,7 +127,8 @@ function views_bulk_operations_modify_action($entity, $context) {
  * entity bundle, as provided by field_attach_form().
  */
 function views_bulk_operations_modify_action_form($context, &$form_state) {
-  // This action form uses admin-provided settings. If they were not set, pull the defaults now.
+  // This action form uses admin-provided settings. If they were not set, pull
+  // the defaults now.
   if (!isset($context['settings'])) {
     $context['settings'] = views_bulk_operations_modify_action_views_bulk_operations_form_options();
   }
@@ -126,7 +141,8 @@ function views_bulk_operations_modify_action_form($context, &$form_state) {
   // and filled with form data.
   // After submit, the pseudo-entities get passed to the actual action
   // (views_bulk_operations_modify_action()) which copies the data from the
-  // relevant pseudo-entity constructed here to the actual entity being modified.
+  // relevant pseudo-entity constructed here to the actual entity being
+  // modified.
   $form_state['entities'] = array();
 
   $info = entity_get_info($entity_type);
@@ -151,7 +167,16 @@ function views_bulk_operations_modify_action_form($context, &$form_state) {
         '#title' => $property['label'],
       );
 
-      $determined_type = ($property['type'] == 'boolean') ? 'checkbox' : 'textfield';
+      // According to _views_bulk_operations_modify_action_get_properties
+      // we have fixed list of supported types. Most of these types are string
+      // and only some of them has options list.
+      if (isset($property['options list'])) {
+        $determined_type = ($property['type'] == 'list') ? 'checkboxes' : 'select';
+      }
+      else {
+        $determined_type = ($property['type'] == 'boolean') ? 'checkbox' : 'textfield';
+      }
+
       $form['properties'][$key] = array(
         '#type' => $determined_type,
         '#title' => $property['label'],
@@ -189,7 +214,7 @@ function views_bulk_operations_modify_action_form($context, &$form_state) {
     }
   }
 
-  // Going to need this for multilingual nodes
+  // Going to need this for multilingual nodes.
   global $language;
   foreach ($bundles as $bundle_name => $bundle) {
     $bundle_key = $info['entity keys']['bundle'];
@@ -202,8 +227,8 @@ function views_bulk_operations_modify_action_form($context, &$form_state) {
     $entity = entity_create($context['entity_type'], $default_values);
     $form_state['entities'][$bundle_name] = $entity;
 
-    // Show the more detailed label only if the entity type has multiple bundles.
-    // Otherwise, it would just be confusing.
+    // Show the more detailed label only if the entity type has multiple
+    // bundles. Otherwise, it would just be confusing.
     if (count($info['bundles']) > 1) {
       $label = t('Fields for @bundle_key @label', array('@bundle_key' => $bundle_key, '@label' => $bundle['label']));
     }
@@ -417,9 +442,9 @@ function views_bulk_operations_modify_action_submit($form, $form_state) {
  * Properties that can't be changed are entity keys, timestamps, and the ones
  * without a setter callback.
  *
- * @param $entity_type
+ * @param string $entity_type
  *   The entity type whose properties will be fetched.
- * @param $display_values
+ * @param array $display_values
  *   An optional, admin-provided list of properties and fields that should be
  *   displayed for editing, used to filter the returned list of properties.
  */
@@ -435,8 +460,17 @@ function _views_bulk_operations_modify_action_get_properties($entity_type, $disp
     }
   }
   // List of supported types.
-  $supported_types = array('text', 'token', 'integer', 'decimal', 'date', 'duration',
-                           'boolean', 'uri', 'list');
+  $supported_types = array(
+    'text',
+    'token',
+    'integer',
+    'decimal',
+    'date',
+    'duration',
+    'boolean',
+    'uri',
+    'list',
+  );
   $property_info = entity_get_property_info($entity_type);
   if (empty($property_info['properties'])) {
     // Stop here if no properties were found.
@@ -484,9 +518,9 @@ function _views_bulk_operations_modify_action_get_properties($entity_type, $disp
  * (through the action settings) then only bundles that have at least one field
  * selected are returned.
  *
- * @param $entity_type
+ * @param string $entity_type
  *   The entity type whose bundles will be fetched.
- * @param $context
+ * @param array $context
  *   The VBO context variable.
  */
 function _views_bulk_operations_modify_action_get_bundles($entity_type, $context) {
@@ -594,8 +628,8 @@ function views_bulk_operations_modify_action_views_bulk_operations_form($options
   }
   foreach ($info['bundles'] as $bundle_name => $bundle) {
     $bundle_key = $info['entity keys']['bundle'];
-    // Show the more detailed label only if the entity type has multiple bundles.
-    // Otherwise, it would just be confusing.
+    // Show the more detailed label only if the entity type has multiple
+    // bundles. Otherwise, it would just be confusing.
     if (count($info['bundles']) > 1) {
       $label = t('Fields for @bundle_key @label', array('@bundle_key' => $bundle_key, '@label' => $bundle['label']));
     }
diff --git a/profiles/wcm_base/modules/contrib/views_bulk_operations/actions/user_cancel.action.inc b/profiles/wcm_base/modules/contrib/views_bulk_operations/actions/user_cancel.action.inc
index 147d2920..3637e39c 100644
--- a/profiles/wcm_base/modules/contrib/views_bulk_operations/actions/user_cancel.action.inc
+++ b/profiles/wcm_base/modules/contrib/views_bulk_operations/actions/user_cancel.action.inc
@@ -1,17 +1,19 @@
 <?php
 /**
-  * @file
-  * VBO action to cancel user accounts.
-  */
+ * @file
+ * VBO action to cancel user accounts.
+ */
 
 function views_bulk_operations_user_cancel_action_info() {
-  return array('views_bulk_operations_user_cancel_action' => array(
-    'type' => 'user',
-    'label' => t('Cancel user account'),
-    'configurable' => TRUE,
-    'behavior' => array('deletes_property'),
-    'triggers' => array('any'),
-  ));
+  return array(
+    'views_bulk_operations_user_cancel_action' => array(
+      'type' => 'user',
+      'label' => t('Cancel user account'),
+      'configurable' => TRUE,
+      'behavior' => array('deletes_property'),
+      'triggers' => array('any'),
+    ),
+  );
 }
 
 function views_bulk_operations_user_cancel_action_form($context) {
@@ -75,7 +77,17 @@ function views_bulk_operations_user_cancel_action($account, $context) {
       if (!empty($context['user_cancel_notify'])) {
         _user_mail_notify('status_canceled', $account);
       }
-      user_delete($account->uid);
+      // In cases when nodes are to be reassigned to UID 0, the user_delete must
+      // not run until *after* the user_cancel has been invoked, otherwise the
+      // nodes are deleted before they can be reassigned. Adding the user delete
+      // to the batch queue ensures things happen in the correct sequence.
+      $batch = array(
+        'operations' => array(
+          array('user_delete', array($account->uid)),
+        ),
+        'file' => drupal_get_path('module', 'node') . '/node.admin.inc',
+      );
+      batch_set($batch);
       watchdog('user', 'Deleted user: %name %email.', array('%name' => $account->name, '%email' => '<' . $account->mail . '>'), WATCHDOG_NOTICE);
       break;
   }
diff --git a/profiles/wcm_base/modules/contrib/views_bulk_operations/actions_permissions.info b/profiles/wcm_base/modules/contrib/views_bulk_operations/actions_permissions.info
index 658d1adc..11ff5235 100644
--- a/profiles/wcm_base/modules/contrib/views_bulk_operations/actions_permissions.info
+++ b/profiles/wcm_base/modules/contrib/views_bulk_operations/actions_permissions.info
@@ -3,9 +3,9 @@ description = Provides permission-based access control for actions. Used by View
 package = Administration
 core = 7.x
 
-; Information added by Drupal.org packaging script on 2015-07-01
-version = "7.x-3.3"
+; Information added by Drupal.org packaging script on 2017-02-21
+version = "7.x-3.4"
 core = "7.x"
 project = "views_bulk_operations"
-datestamp = "1435764542"
+datestamp = "1487698687"
 
diff --git a/profiles/wcm_base/modules/contrib/views_bulk_operations/css/views_bulk_operations.css b/profiles/wcm_base/modules/contrib/views_bulk_operations/css/views_bulk_operations.css
index a93cf22a..d26da62e 100644
--- a/profiles/wcm_base/modules/contrib/views_bulk_operations/css/views_bulk_operations.css
+++ b/profiles/wcm_base/modules/contrib/views_bulk_operations/css/views_bulk_operations.css
@@ -1,4 +1,5 @@
-.vbo-select-all-markup, .vbo-table-select-all-markup {
+.vbo-select-all-markup,
+.vbo-table-select-all-markup {
   display: none;
 }
 
@@ -15,9 +16,10 @@
 .views-table-row-select-all td {
   text-align: center;
 }
-.vbo-table-select-all-pages, .vbo-table-select-this-page {
-  margin: 0 !important;
-  padding: 2px 5px !important;
+.vbo-views-form .vbo-table-select-all-pages,
+.vbo-views-form .vbo-table-select-this-page {
+  margin: 0;
+  padding: 2px 5px;
 }
 
 /* Generic "select all" */
@@ -30,6 +32,6 @@
   margin-bottom: 0;
 }
 .vbo-fieldset-select-all div {
-  padding: 0 !important;
-  margin: 0 !important;
+  padding: 0;
+  margin: 0;
 }
diff --git a/profiles/wcm_base/modules/contrib/views_bulk_operations/js/views_bulk_operations.js b/profiles/wcm_base/modules/contrib/views_bulk_operations/js/views_bulk_operations.js
index ca76df86..a4e8237a 100644
--- a/profiles/wcm_base/modules/contrib/views_bulk_operations/js/views_bulk_operations.js
+++ b/profiles/wcm_base/modules/contrib/views_bulk_operations/js/views_bulk_operations.js
@@ -1,9 +1,17 @@
 (function ($) {
+  // Polyfill for jQuery less than 1.6.
+  if (typeof $.fn.prop != 'function') {
+    jQuery.fn.extend({
+      prop: jQuery.fn.attr
+    });
+  }
+
   Drupal.behaviors.vbo = {
     attach: function(context) {
       $('.vbo-views-form', context).each(function() {
         Drupal.vbo.initTableBehaviors(this);
         Drupal.vbo.initGenericBehaviors(this);
+        Drupal.vbo.toggleButtonsState(this);
       });
     }
   }
@@ -32,7 +40,8 @@
     // This is the "select all" checkbox in (each) table header.
     $('.vbo-table-select-all', form).click(function() {
       var table = $(this).closest('table')[0];
-      $('input[id^="edit-views-bulk-operations"]:not(:disabled)', table).attr('checked', this.checked);
+      $('input[id^="edit-views-bulk-operations"]:not(:disabled)', table).prop('checked', this.checked);
+      Drupal.vbo.toggleButtonsState(form);
 
       // Toggle the visibility of the "select all" row (if any).
       if (this.checked) {
@@ -83,35 +92,43 @@
     $('.vbo-select-all-markup', form).show();
 
     $('.vbo-select-this-page', form).click(function() {
-      $('input[id^="edit-views-bulk-operations"]', form).attr('checked', this.checked);
-      $('.vbo-select-all-pages', form).attr('checked', false);
+      $('input[id^="edit-views-bulk-operations"]', form).prop('checked', this.checked);
+      Drupal.vbo.toggleButtonsState(form);
+      $('.vbo-select-all-pages', form).prop('checked', false);
 
       // Toggle the "select all" checkbox in grouped tables (if any).
-      $('.vbo-table-select-all', form).attr('checked', this.checked);
+      $('.vbo-table-select-all', form).prop('checked', this.checked);
     });
     $('.vbo-select-all-pages', form).click(function() {
-      $('input[id^="edit-views-bulk-operations"]', form).attr('checked', this.checked);
-      $('.vbo-select-this-page', form).attr('checked', false);
+      $('input[id^="edit-views-bulk-operations"]', form).prop('checked', this.checked);
+      Drupal.vbo.toggleButtonsState(form);
+      $('.vbo-select-this-page', form).prop('checked', false);
 
       // Toggle the "select all" checkbox in grouped tables (if any).
-      $('.vbo-table-select-all', form).attr('checked', this.checked);
+      $('.vbo-table-select-all', form).prop('checked', this.checked);
 
       // Modify the value of the hidden form field.
       $('.select-all-rows', form).val(this.checked);
     });
 
+    // Toggle submit buttons' "disabled" states with the state of the operation
+    // selectbox.
+    $('select[name="operation"]', form).change(function () {
+      Drupal.vbo.toggleButtonsState(form);
+    });
+
     $('.vbo-select', form).click(function() {
       // If a checkbox was deselected, uncheck any "select all" checkboxes.
       if (!this.checked) {
-        $('.vbo-select-this-page', form).attr('checked', false);
-        $('.vbo-select-all-pages', form).attr('checked', false);
+        $('.vbo-select-this-page', form).prop('checked', false);
+        $('.vbo-select-all-pages', form).prop('checked', false);
         // Modify the value of the hidden form field.
         $('.select-all-rows', form).val('0')
 
         var table = $(this).closest('table')[0];
         if (table) {
           // Uncheck the "select all" checkbox in the table header.
-          $('.vbo-table-select-all', table).attr('checked', false);
+          $('.vbo-table-select-all', table).prop('checked', false);
 
           // If there's a "select all" row, hide it.
           if ($('.vbo-table-select-this-page', table).length) {
@@ -121,7 +138,24 @@
           }
         }
       }
+
+      Drupal.vbo.toggleButtonsState(form);
     });
   }
 
+  Drupal.vbo.toggleButtonsState = function(form) {
+    // If no rows are checked, disable any form submit actions.
+    var selectbox = $('select[name="operation"]', form);
+    var checkedCheckboxes = $('.vbo-select:checked', form);
+    var buttons = $('[id^="edit-select"] input[type="submit"]', form);
+
+    if (selectbox.length) {
+      var has_selection = checkedCheckboxes.length && selectbox.val() !== '0';
+      buttons.prop('disabled', !has_selection);
+    }
+    else {
+      buttons.prop('disabled', !checkedCheckboxes.length);
+    }
+  };
+
 })(jQuery);
diff --git a/profiles/wcm_base/modules/contrib/views_bulk_operations/views/views_bulk_operations.views.inc b/profiles/wcm_base/modules/contrib/views_bulk_operations/views/views_bulk_operations.views.inc
index 1c7078a5..e6c685a0 100644
--- a/profiles/wcm_base/modules/contrib/views_bulk_operations/views/views_bulk_operations.views.inc
+++ b/profiles/wcm_base/modules/contrib/views_bulk_operations/views/views_bulk_operations.views.inc
@@ -6,7 +6,8 @@
 function views_bulk_operations_views_data_alter(&$data) {
   foreach (entity_get_info() as $entity_type => $info) {
     if (isset($info['base table']) && isset($data[$info['base table']]['table'])) {
-      $data[$info['base table']]['views_bulk_operations'] = array(
+      $data[$info['base table']]['views_bulk_operations']['moved to'] = array('views_entity_' . $entity_type, 'views_bulk_operations');
+      $data['views_entity_' . $entity_type]['views_bulk_operations'] = array(
         'title' => $data[$info['base table']]['table']['group'],
         'group' => t('Bulk operations'),
         'help' => t('Provide a checkbox to select the row for bulk operations.'),
diff --git a/profiles/wcm_base/modules/contrib/views_bulk_operations/views/views_bulk_operations_handler_field_operations.inc b/profiles/wcm_base/modules/contrib/views_bulk_operations/views/views_bulk_operations_handler_field_operations.inc
index 61886d48..dcfd5342 100644
--- a/profiles/wcm_base/modules/contrib/views_bulk_operations/views/views_bulk_operations_handler_field_operations.inc
+++ b/profiles/wcm_base/modules/contrib/views_bulk_operations/views/views_bulk_operations_handler_field_operations.inc
@@ -6,7 +6,7 @@
 * Implements the Views Form API.
 */
 
-class views_bulk_operations_handler_field_operations extends views_handler_field {
+class views_bulk_operations_handler_field_operations extends views_handler_field_entity {
   var $revision = FALSE;
 
   function init(&$view, &$options) {
@@ -46,6 +46,12 @@ class views_bulk_operations_handler_field_operations extends views_handler_field
         unset($operation_options['use_queue']);
       }
     }
+
+    // Check whether this is a revision.
+    $table_data = views_fetch_data($this->table);
+    if (!empty($table_data['table']['revision'])) {
+      $this->revision = TRUE;
+    }
   }
 
   function option_definition() {
@@ -186,6 +192,14 @@ class views_bulk_operations_handler_field_operations extends views_handler_field
           $dom_id . '-selected' => array(1),
         ),
       );
+      $form['vbo_operations'][$operation_id]['skip_permission_check'] = array(
+        '#type' => 'checkbox',
+        '#title' => t('Skip permission step'),
+        '#default_value' => !empty($operation_options['skip_permission_check']),
+        '#dependency' => array(
+          $dom_id . '-selected' => array(1),
+        ),
+      );
 
       $form['vbo_operations'][$operation_id] += $operation->adminOptionsForm($dom_id, $this);
     }
@@ -263,19 +277,20 @@ class views_bulk_operations_handler_field_operations extends views_handler_field
     // At this point, the query has already been run, so we can access the results
     // in order to get the base key value (for example, nid for nodes).
     foreach ($this->view->result as $row_index => $row) {
-      $entity_id = $this->get_value($row);
+      $this->view->row_index = $row_index;
+      $id = $this->get_value($row, $this->real_field);
 
       if ($this->options['vbo_settings']['force_single']) {
         $form[$this->options['id']][$row_index] = array(
           '#type' => 'radio',
           '#parents' => array($this->options['id']),
-          '#return_value' => $entity_id,
+          '#return_value' => $id,
         );
       }
       else {
         $form[$this->options['id']][$row_index] = array(
           '#type' => 'checkbox',
-          '#return_value' => $entity_id,
+          '#return_value' => $id,
           '#default_value' => FALSE,
           '#attributes' => array('class' => array('vbo-select')),
         );
@@ -293,9 +308,12 @@ class views_bulk_operations_handler_field_operations extends views_handler_field
         if (empty($options['selected'])) {
           continue;
         }
-
         $operation = views_bulk_operations_get_operation($operation_id, $entity_type, $options);
-        if (!$operation || !$operation->access($user)) {
+        if (!$operation) {
+          continue;
+        }
+        $skip_permission_check = $operation->getAdminOption('skip_permission_check', FALSE);
+        if (!$operation->access($user) && !$skip_permission_check) {
           continue;
         }
         $selected[$operation_id] = $operation;
@@ -318,29 +336,7 @@ class views_bulk_operations_handler_field_operations extends views_handler_field
    * the entity type that VBO is operating on.
    */
   public function get_entity_type() {
-    $base_table = $this->view->base_table;
-
-    // If the current field is under a relationship you can't be sure that the
-    // base table of the view is the base table of the current field.
-    // For example a field from a node author on a node view does have users as base table.
-    if (!empty($this->options['relationship']) && $this->options['relationship'] != 'none') {
-      $relationships = $this->view->display_handler->get_option('relationships');
-      $options = $relationships[$this->options['relationship']];
-      $data = views_fetch_data($options['table']);
-      $base_table = $data[$options['field']]['relationship']['base'];
-    }
-    // The base table is now known, use it to determine the entity type.
-    foreach (entity_get_info() as $entity_type => $info) {
-      if (isset($info['base table']) && $info['base table'] == $base_table) {
-        return $entity_type;
-      }
-      elseif (isset($info['revision table']) && $info['revision table'] == $base_table) {
-        $this->revision = TRUE;
-        return $entity_type;
-      }
-    }
-    // This should never happen.
-    _views_bulk_operations_report_error("Could not determine the entity type for VBO field on views base table %table", array('%table' => $base_table));
-    return FALSE;
+    return $this->entity_type;
   }
+
 }
diff --git a/profiles/wcm_base/modules/contrib/views_bulk_operations/views_bulk_operations.drush.inc b/profiles/wcm_base/modules/contrib/views_bulk_operations/views_bulk_operations.drush.inc
index 09c4fb63..e9ca1929 100644
--- a/profiles/wcm_base/modules/contrib/views_bulk_operations/views_bulk_operations.drush.inc
+++ b/profiles/wcm_base/modules/contrib/views_bulk_operations/views_bulk_operations.drush.inc
@@ -154,7 +154,7 @@ function views_bulk_operations_drush_execute($vid = NULL, $operation_id = NULL)
   $current = 1;
   foreach ($view->result as $row_index => $result) {
     $rows[$row_index] = array(
-      'entity_id' => $vbo->get_value($result),
+      'entity_id' => $result->{$vbo->real_field},
       'views_row' => array(),
       'position' => array(
         'current' => $current++,
diff --git a/profiles/wcm_base/modules/contrib/views_bulk_operations/views_bulk_operations.info b/profiles/wcm_base/modules/contrib/views_bulk_operations/views_bulk_operations.info
index 8fbdffaa..b16bf0e0 100644
--- a/profiles/wcm_base/modules/contrib/views_bulk_operations/views_bulk_operations.info
+++ b/profiles/wcm_base/modules/contrib/views_bulk_operations/views_bulk_operations.info
@@ -1,7 +1,7 @@
 name = Views Bulk Operations
 description = Provides a way of selecting multiple rows and applying operations to them.
 dependencies[] = entity
-dependencies[] = views
+dependencies[] = views (>=3.12)
 package = Views
 core = 7.x
 php = 5.2.9
@@ -9,9 +9,9 @@ php = 5.2.9
 files[] = plugins/operation_types/base.class.php
 files[] = views/views_bulk_operations_handler_field_operations.inc
 
-; Information added by Drupal.org packaging script on 2015-07-01
-version = "7.x-3.3"
+; Information added by Drupal.org packaging script on 2017-02-21
+version = "7.x-3.4"
 core = "7.x"
 project = "views_bulk_operations"
-datestamp = "1435764542"
+datestamp = "1487698687"
 
diff --git a/profiles/wcm_base/modules/contrib/views_bulk_operations/views_bulk_operations.module b/profiles/wcm_base/modules/contrib/views_bulk_operations/views_bulk_operations.module
index e74eeb1d..9b17c444 100644
--- a/profiles/wcm_base/modules/contrib/views_bulk_operations/views_bulk_operations.module
+++ b/profiles/wcm_base/modules/contrib/views_bulk_operations/views_bulk_operations.module
@@ -45,6 +45,7 @@ function views_bulk_operations_load_action_includes() {
     'archive.action',
     'argument_selector.action',
     'book.action',
+    'change_owner.action',
     'delete.action',
     'modify.action',
     'script.action',
@@ -75,7 +76,7 @@ function views_bulk_operations_load_action_includes() {
  */
 function views_bulk_operations_cron() {
   db_delete('queue')
-    ->condition('name', db_like('views_bulk_operations_active_queue_'), 'LIKE')
+    ->condition('name', db_like('views_bulk_operations_active_queue_') . '%', 'LIKE')
     ->condition('created', REQUEST_TIME - 86400, '<')
     ->execute();
 }
@@ -214,7 +215,12 @@ function views_bulk_operations_get_operation_info($operation_id = NULL) {
 function views_bulk_operations_get_operation($operation_id, $entity_type, $options) {
   $operations = &drupal_static(__FUNCTION__);
 
-  if (!isset($operations[$operation_id])) {
+  // Create a unique hash of the options.
+  $cid = md5(serialize($options));
+
+  // See if there's a cached copy of the operation, including entity type and
+  // options.
+  if (!isset($operations[$operation_id][$entity_type][$cid])) {
     // Intentionally not using views_bulk_operations_get_operation_info() here
     // since it's an expensive function that loads all the operations on the
     // system, despite the fact that we might only need a few.
@@ -223,14 +229,14 @@ function views_bulk_operations_get_operation($operation_id, $entity_type, $optio
     $operation_info = $plugin['list callback']($operation_id);
 
     if ($operation_info) {
-      $operations[$operation_id] = new $plugin['handler']['class']($operation_id, $entity_type, $operation_info, $options);
+      $operations[$operation_id][$entity_type][$cid] = new $plugin['handler']['class']($operation_id, $entity_type, $operation_info, $options);
     }
     else {
-      $operations[$operation_id] = FALSE;
+      $operations[$operation_id][$entity_type][$cid] = FALSE;
     }
   }
 
-  return $operations[$operation_id];
+  return $operations[$operation_id][$entity_type][$cid];
 }
 
 /**
@@ -638,11 +644,11 @@ function theme_views_bulk_operations_confirmation($variables) {
   // All rows on all pages have been selected, so show a count of additional items.
   if ($select_all_pages) {
     $more_count = $vbo->view->total_rows - count($vbo->view->result);
-    $items[] = t('...and <strong>!count</strong> more.', array('!count' => $more_count));
+    $items[] = t('...and %count more.', array('%count' => $more_count));
   }
 
   $count = format_plural(count($entities), 'item', '@count items');
-  $output = theme('item_list', array('items' => $items, 'title' => t('You selected the following <strong>!count</strong>:', array('!count' => $count))));
+  $output = theme('item_list', array('items' => $items, 'title' => t('You selected the following %count:', array('%count' => $count))));
   return $output;
 }
 
@@ -902,10 +908,16 @@ function views_bulk_operations_adjust_selection($queue_name, $operation, $option
   }
 
   $vbo = _views_bulk_operations_get_field($view);
+
+  // Call views_handler_field_entity::pre_render() to get the entities.
+  $vbo->pre_render($view->result);
+
   $rows = array();
   foreach ($view->result as $row_index => $result) {
+    // Set the row index.
+    $view->row_index = $row_index;
     $rows[$row_index] = array(
-      'entity_id' => $vbo->get_value($result),
+      'entity_id' => $vbo->get_value($result, $vbo->real_field),
       'views_row' => array(),
       'position' => array(
         'current' => ++$context['sandbox']['progress'],
@@ -1075,7 +1087,8 @@ function views_bulk_operations_queue_item_process($queue_item_data, &$log = NULL
     }
 
     // If the current entity can't be accessed, skip it and log a notice.
-    if (!_views_bulk_operations_entity_access($operation, $entity_type, $entity, $account)) {
+    $skip_permission_check = $operation->getAdminOption('skip_permission_check');
+    if (!$skip_permission_check && !_views_bulk_operations_entity_access($operation, $entity_type, $entity, $account)) {
       $message = 'Skipped %operation on @type %title due to insufficient permissions.';
       $arguments = array(
         '%operation' => $operation->label(),
@@ -1127,12 +1140,22 @@ function views_bulk_operations_direct_adjust(&$selection, $vbo) {
     if ($field_name != $vbo->options['id']) {
       unset($view->field[$field_name]);
     }
+    else {
+      // Get hold of the new VBO field.
+      $new_vbo = $view->field[$field_name];
+    }
   }
 
   $view->execute($vbo->view->current_display);
+
+  // Call views_handler_field_entity::pre_render() to get the entities.
+  $new_vbo->pre_render($view->result);
+
   $results = array();
   foreach ($view->result as $row_index => $result) {
-    $results[$row_index] = $vbo->get_value($result);
+    // Set the row index.
+    $view->row_index = $row_index;
+    $results[$row_index] = $new_vbo->get_value($result, $new_vbo->real_field);
   }
   $selection = $results;
 }
@@ -1160,9 +1183,10 @@ function views_bulk_operations_direct_process($operation, $rows, $options) {
     }
     $entities = _views_bulk_operations_entity_load($entity_type, $entity_ids, $options['revision']);
 
+    $skip_permission_check = $operation->getAdminOption('skip_permission_check');
     // Filter out entities that can't be accessed.
     foreach ($entities as $id => $entity) {
-      if (!_views_bulk_operations_entity_access($operation, $entity_type, $entity)) {
+      if (!$skip_permission_check && !_views_bulk_operations_entity_access($operation, $entity_type, $entity, $account)) {
         $context['results']['log'][] = t('Skipped %operation on @type %title due to insufficient permissions.', array(
           '%operation' => $operation->label(),
           '@type' => $entity_type,
diff --git a/profiles/wcm_base/modules/contrib/views_bulk_operations/views_bulk_operations.rules.inc b/profiles/wcm_base/modules/contrib/views_bulk_operations/views_bulk_operations.rules.inc
index b3a64184..1273552e 100644
--- a/profiles/wcm_base/modules/contrib/views_bulk_operations/views_bulk_operations.rules.inc
+++ b/profiles/wcm_base/modules/contrib/views_bulk_operations/views_bulk_operations.rules.inc
@@ -114,15 +114,25 @@ function views_bulk_operations_rules_action_info() {
 function views_bulk_operations_views_list() {
   $selectable_displays = array();
   foreach (views_get_enabled_views() as $name => $base_view) {
+    $view = $base_view->clone_view();
     foreach ($base_view->display as $display_name => $display) {
-      $view = $base_view->clone_view();
-      $view->build($display_name);
-      $vbo = _views_bulk_operations_get_field($view);
-      if ($vbo) {
-        $selectable_displays[$view->name . '|' . $display_name] = check_plain($view->human_name) . ' | ' . check_plain($display->display_title);
+      if (!$view->set_display($display_name)) {
+        continue;
+      }
+
+      // Initialize the style plugin and only continue to initialize handlers
+      // if the style uses fields.
+      if (!$view->init_style() || !$view->style_plugin->uses_fields()) {
+        continue;
+      }
+
+      $view->init_handlers($display_name);
+      if (_views_bulk_operations_get_field($view)) {
+        $selectable_displays[$view->name . '|' . $display_name] = check_plain($view->human_name . ' | ' . $display->display_title);
       }
     }
   }
+
   return $selectable_displays;
 }
 
diff --git a/profiles/wcm_base/modules/contrib/wysiwyg/editors/ckeditor.inc b/profiles/wcm_base/modules/contrib/wysiwyg/editors/ckeditor.inc
index b2c20f3e..0a1ff682 100644
--- a/profiles/wcm_base/modules/contrib/wysiwyg/editors/ckeditor.inc
+++ b/profiles/wcm_base/modules/contrib/wysiwyg/editors/ckeditor.inc
@@ -32,7 +32,7 @@ function wysiwyg_ckeditor_editor() {
       ),
     ),
     'install note callback' => 'wysiwyg_ckeditor_install_note',
-    'verified version range' => array('3.0', '4.6.1.580bcaf'),
+    'verified version range' => array('3.0', '4.6.2.20af917'),
     'migrate settings callback' => 'wysiwyg_ckeditor_migrate_settings',
     'version callback' => 'wysiwyg_ckeditor_version',
     'themes callback' => 'wysiwyg_ckeditor_themes',
diff --git a/profiles/wcm_base/modules/contrib/wysiwyg/editors/tinymce.inc b/profiles/wcm_base/modules/contrib/wysiwyg/editors/tinymce.inc
index 56b8aff3..91f5cc51 100644
--- a/profiles/wcm_base/modules/contrib/wysiwyg/editors/tinymce.inc
+++ b/profiles/wcm_base/modules/contrib/wysiwyg/editors/tinymce.inc
@@ -27,7 +27,7 @@ function wysiwyg_tinymce_editor() {
       ),
     ),
     'version callback' => 'wysiwyg_tinymce_version',
-    'verified version range' => array('3.3.9.2', '4.5.1'),
+    'verified version range' => array('3.3.9.2', '4.5.3'),
     'themes callback' => 'wysiwyg_tinymce_themes',
     'settings form callback' => 'wysiwyg_tinymce_settings_form',
     'init callback' => 'wysiwyg_tinymce_init',
@@ -995,11 +995,29 @@ function _wysiwyg_tinymce_migrate_settings(&$settings, $editor, $profile_version
       $settings['buttons'] = $fixed_buttons;
       $migrated_version = '4.0.0';
     }
+    if (version_compare($profile_version, '4.5.0', '<') && version_compare($installed_version, '4.5.0', '>=')) {
+      // The list buttons now require the lists plugin.
+      if (!empty($settings['buttons']['default']['bullist'])) {
+        $settings['buttons']['lists']['bullist'] = 1;
+      }
+      if (!empty($settings['buttons']['default']['numlist'])) {
+        $settings['buttons']['lists']['numlist'] = 1;
+      }
+      unset($settings['buttons']['default']['bullist'], $settings['buttons']['default']['numlist']);
+      $migrated_version = '4.5.0';
+    }
   }
   else {
     // Downgrading, starting at the profile version going down.
     if (version_compare($profile_version, '4.5.0', '>=') && version_compare($installed_version, '4.5.0', '<')) {
       unset($settings['buttons']['toc']);
+      if (!empty($settings['buttons']['lists']['bullist'])) {
+        $settings['buttons']['default']['bullist'] = 1;
+      }
+      if (!empty($settings['buttons']['lists']['numlist'])) {
+        $settings['buttons']['default']['numlist'] = 1;
+      }
+      unset($settings['buttons']['lists']);
       $migrated_version = '4.5.0';
     }
     if (version_compare($profile_version, '4.3.0', '>=') && version_compare($installed_version, '4.3.0', '<')) {
@@ -1371,6 +1389,9 @@ function _wysiwyg_tinymce_plugins($editor) {
         'buttons' => array('toc' => t('Table of Contents')),
         'url' => _wysiwyg_tinymce_get_plugin_url('toc'),
       );
+      // The list buttons now require the lists plugin.
+      $plugins['lists']['buttons'] = array('bullist' => t('Unordered list'), 'numlist' => t('Ordered list'));
+      unset($plugins['default']['buttons']['bullist'], $plugins['default']['buttons']['numlist']);
     }
   }
 
diff --git a/profiles/wcm_base/modules/contrib/wysiwyg/tests/wysiwyg_test.info b/profiles/wcm_base/modules/contrib/wysiwyg/tests/wysiwyg_test.info
index c7582dff..9114024e 100644
--- a/profiles/wcm_base/modules/contrib/wysiwyg/tests/wysiwyg_test.info
+++ b/profiles/wcm_base/modules/contrib/wysiwyg/tests/wysiwyg_test.info
@@ -6,9 +6,9 @@ hidden = TRUE
 dependencies[] = wysiwyg
 files[] = wysiwyg_test.module
 
-; Information added by Drupal.org packaging script on 2017-01-22
-version = "7.x-2.3+8-dev"
+; Information added by Drupal.org packaging script on 2017-02-27
+version = "7.x-2.3+14-dev"
 core = "7.x"
 project = "wysiwyg"
-datestamp = "1485124688"
+datestamp = "1488180786"
 
diff --git a/profiles/wcm_base/modules/contrib/wysiwyg/wysiwyg.admin.inc b/profiles/wcm_base/modules/contrib/wysiwyg/wysiwyg.admin.inc
index 5ee0bca9..091b990c 100644
--- a/profiles/wcm_base/modules/contrib/wysiwyg/wysiwyg.admin.inc
+++ b/profiles/wcm_base/modules/contrib/wysiwyg/wysiwyg.admin.inc
@@ -89,10 +89,10 @@ function wysiwyg_profile_form($form, &$form_state, $profile) {
       // If the editor integration supports migration between versions, attempt
       // it before widgets for settings are rendered.
       if (isset($editor['migrate settings callback']) && function_exists($editor['migrate settings callback'])) {
-        // Get the version migrated to. MUST be in the verified version range or
-        // FALSE if no migration was possible.
+        // Get the version migrated to. MUST be in the verified version range,
+        // FALSE if no migration was possible, or TRUE if no change needed.
         $migrated_version = $editor['migrate settings callback']($settings, $editor, $profile_version, $installed_version);
-        $profile->changed = ($migrated_version !== TRUE && $migrated_version != $installed_version);
+        $profile->changed = ($migrated_version !== TRUE && $migrated_version != $profile_version);
         if ($migrated_version === FALSE) {
           $migrate_message .= ' ' . t('Wysiwyg is not able to automatically adapt the profile to the installed editor version. It is recommended to start over with a new profile.');
           $migrate_status = 'error';
diff --git a/profiles/wcm_base/modules/contrib/wysiwyg/wysiwyg.features.inc b/profiles/wcm_base/modules/contrib/wysiwyg/wysiwyg.features.inc
index 187178a0..00e638e9 100644
--- a/profiles/wcm_base/modules/contrib/wysiwyg/wysiwyg.features.inc
+++ b/profiles/wcm_base/modules/contrib/wysiwyg/wysiwyg.features.inc
@@ -52,9 +52,10 @@ function wysiwyg_features_export_render($module, $data, $export = NULL) {
 
   foreach ($data as $name) {
     if ($profile = wysiwyg_get_profile($name)) {
+      $profile = (array) $profile;
       $profile_export = features_var_export($profile, '  ');
-      $profile_identifier = features_var_export($profile->format);
-      $code[] = "  // Exported profile: {$profile->format}.";
+      $profile_identifier = features_var_export($profile['format']);
+      $code[] = "  // Exported profile: {$profile['format']}.";
       $code[] = "  \$profiles[{$profile_identifier}] = {$profile_export};";
       $code[] = "";
     }
@@ -78,23 +79,30 @@ function wysiwyg_features_revert($module) {
 function wysiwyg_features_rebuild($module) {
   if ($defaults = features_get_default('wysiwyg', $module)) {
     foreach ($defaults as $profile) {
+      $profile = is_object($profile) ? (array) $profile : $profile;
       if (empty($profile['settings']['_profile_preferences'])) {
         if (!empty($profile['preferences'])) {
-          $settings =  &$profile['preferences'];
+          $settings = &$profile['preferences'];
         }
         else {
           // Importing an older profile, move state to its own section.
-          $settings =  &$profile['settings'];
+          $settings = &$profile['settings'];
         }
 
         $preferences = array(
-          'add_to_summaries' => $settings['add_to_summaries'],
+          'add_to_summaries' => (!empty($settings['add_to_summaries']) ? $settings['add_to_summaries'] : FALSE),
           'default' => $settings['default'],
           'show_toggle' => $settings['show_toggle'],
           'user_choose' => $settings['user_choose'],
-          'version' => NULL,
+          'version' => (!empty($settings['version']) ? $settings['version'] : NULL),
+        );
+        unset($settings['add_to_summaries'],
+          $settings['default'],
+          $settings['show_toggle'],
+          $settings['user_choose'],
+          $settings['version'],
+          $profile['preferences']
         );
-        unset($settings['add_to_summaries'], $settings['default'], $settings['show_toggle'], $settings['user_choose']);
 
         if (!empty($settings['library'])) {
           $preferences['library'] = $settings['library'];
@@ -102,7 +110,7 @@ function wysiwyg_features_rebuild($module) {
         }
 
         $editor = wysiwyg_get_editor($profile['editor']);
-        if (!empty($editor['installed'])) {
+        if (empty($preferences['version']) && !empty($editor['installed'])) {
           $preferences['version'] = $editor['installed version'];
         }
 
@@ -126,4 +134,3 @@ function wysiwyg_features_rebuild($module) {
     wysiwyg_profile_cache_clear();
   }
 }
-
diff --git a/profiles/wcm_base/modules/contrib/wysiwyg/wysiwyg.info b/profiles/wcm_base/modules/contrib/wysiwyg/wysiwyg.info
index 8fa87613..74b25e02 100644
--- a/profiles/wcm_base/modules/contrib/wysiwyg/wysiwyg.info
+++ b/profiles/wcm_base/modules/contrib/wysiwyg/wysiwyg.info
@@ -9,9 +9,9 @@ configure = admin/config/content/wysiwyg
 files[] = wysiwyg.module
 files[] = tests/wysiwyg.test
 
-; Information added by Drupal.org packaging script on 2017-01-22
-version = "7.x-2.3+8-dev"
+; Information added by Drupal.org packaging script on 2017-02-27
+version = "7.x-2.3+14-dev"
 core = "7.x"
 project = "wysiwyg"
-datestamp = "1485124688"
+datestamp = "1488180786"
 
diff --git a/profiles/wcm_base/modules/contrib/wysiwyg/wysiwyg.js b/profiles/wcm_base/modules/contrib/wysiwyg/wysiwyg.js
index 131a4be0..4e566db4 100644
--- a/profiles/wcm_base/modules/contrib/wysiwyg/wysiwyg.js
+++ b/profiles/wcm_base/modules/contrib/wysiwyg/wysiwyg.js
@@ -247,12 +247,11 @@ Drupal.wysiwygAttach = function(context, fieldId) {
   }
   // Detach any previous editor instance if enabled, else remove the grippie.
   detachFromField(context, {'editor': previousEditor, 'status': previousStatus, 'field': fieldId, 'resizable': fieldInfo.resizable}, 'unload');
-  if (doSummary) {
+  var wasSummary = !!_internalInstances[fieldInfo.summary];
+  if (doSummary || wasSummary) {
     // Summary instances may have a different status if no real editor was
     // attached yet because the field was hidden.
-    if (_internalInstances[fieldInfo.summary]) {
-      previousStatus = _internalInstances[fieldInfo.summary]['status'];
-    }
+    previousStatus = wasSummary ? _internalInstances[fieldInfo.summary]['status'] : false;
     detachFromField(context, {'editor': previousEditor, 'status': previousStatus, 'field': fieldInfo.summary, 'resizable': fieldInfo.resizable}, 'unload');
   }
   // Store this field id, so (external) plugins can use it.
@@ -264,10 +263,10 @@ Drupal.wysiwygAttach = function(context, fieldId) {
   // Attach to main field.
   attachToField(context, {'status': fieldInfo.enabled, 'editor': editor, 'field': fieldId, 'format': fieldInfo.activeFormat, 'resizable': fieldInfo.resizable}, editorSettings);
   // Attach to summary field.
-  if (doSummary) {
+  if (doSummary || wasSummary) {
     // If the summary wrapper is visible, attach immediately.
     if ($('#' + fieldInfo.summary).parents('.text-summary-wrapper').is(':visible')) {
-      attachToField(context, {'status': fieldInfo.enabled, 'editor': editor, 'field': fieldInfo.summary, 'format': fieldInfo.activeFormat, 'resizable': fieldInfo.resizable}, editorSettings);
+      attachToField(context, {'status': doSummary && fieldInfo.enabled, 'editor': editor, 'field': fieldInfo.summary, 'format': fieldInfo.activeFormat, 'resizable': fieldInfo.resizable}, editorSettings);
     }
     else {
       // Attach an instance of the 'none' editor to have consistency while the
@@ -276,7 +275,7 @@ Drupal.wysiwygAttach = function(context, fieldId) {
       // Unbind any existing click handler to avoid double toggling.
       $('#' + fieldId).parents('.text-format-wrapper').find('.link-edit-summary').unbind('click.wysiwyg').bind('click.wysiwyg', function () {
         detachFromField(context, {'status': false, 'editor': editor, 'field': fieldInfo.summary, 'format': fieldInfo.activeFormat, 'resizable': fieldInfo.resizable}, editorSettings);
-        attachToField(context, {'status': fieldInfo.enabled, 'editor': editor, 'field': fieldInfo.summary, 'format': fieldInfo.activeFormat, 'resizable': fieldInfo.resizable}, editorSettings);
+        attachToField(context, {'status': doSummary && fieldInfo.enabled, 'editor': editor, 'field': fieldInfo.summary, 'format': fieldInfo.activeFormat, 'resizable': fieldInfo.resizable}, editorSettings);
         $(this).unbind('click.wysiwyg');
       });
     }
diff --git a/profiles/wcm_base/modules/custom/ocio_landing_page/ocio_landing_page.module b/profiles/wcm_base/modules/custom/ocio_landing_page/ocio_landing_page.module
index abcf93e3..da5098ce 100644
--- a/profiles/wcm_base/modules/custom/ocio_landing_page/ocio_landing_page.module
+++ b/profiles/wcm_base/modules/custom/ocio_landing_page/ocio_landing_page.module
@@ -33,6 +33,10 @@ function ocio_landing_page_preprocess_panels_ipe_pane_wrapper(&$vars) {
     unset($vars['links']['delete']);
   }
 
+  if (!user_access('administer themes')) {
+    unset($vars['links']['css']);
+  }
+
   if (!user_access('move landing page pane')) {
     $vars['pane']->locks = array('type' => 'immovable');
   }
diff --git a/profiles/wcm_base/modules/custom/wcm_panels_settings/wcm_panels_settings.info b/profiles/wcm_base/modules/custom/wcm_panels_settings/wcm_panels_settings.info
index c090d2ad..178e847b 100644
--- a/profiles/wcm_base/modules/custom/wcm_panels_settings/wcm_panels_settings.info
+++ b/profiles/wcm_base/modules/custom/wcm_panels_settings/wcm_panels_settings.info
@@ -21,15 +21,9 @@ features[features_override_items][] = field_instance.fieldable_panels_pane-image
 features[features_override_items][] = page_manager_handlers.node_edit_panel_context
 features[features_overrides][] = field_instance.fieldable_panels_pane-image-field_basic_image_image.display|default|settings|image_style
 features[features_overrides][] = field_instance.fieldable_panels_pane-image-field_basic_image_image.ds_extras_field_template
-features[features_overrides][] = field_instance.fieldable_panels_pane-image-field_basic_image_image.widget|module
-features[features_overrides][] = field_instance.fieldable_panels_pane-image-field_basic_image_image.widget|settings|allowed_schemes
-features[features_overrides][] = field_instance.fieldable_panels_pane-image-field_basic_image_image.widget|settings|allowed_types
-features[features_overrides][] = field_instance.fieldable_panels_pane-image-field_basic_image_image.widget|settings|browser_plugins
-features[features_overrides][] = field_instance.fieldable_panels_pane-image-field_basic_image_image.widget|settings|manualcrop_instant_crop
+features[features_overrides][] = field_instance.fieldable_panels_pane-image-field_basic_image_image.widget|settings|allowed_schemes|private
+features[features_overrides][] = field_instance.fieldable_panels_pane-image-field_basic_image_image.widget|settings|browser_plugins|media_default--media_browser_my_files
 features[features_overrides][] = field_instance.fieldable_panels_pane-image-field_basic_image_image.widget|settings|manualcrop_styles_list|panopoly_image_full
-features[features_overrides][] = field_instance.fieldable_panels_pane-image-field_basic_image_image.widget|settings|preview_image_style
-features[features_overrides][] = field_instance.fieldable_panels_pane-image-field_basic_image_image.widget|settings|progress_indicator
-features[features_overrides][] = field_instance.fieldable_panels_pane-image-field_basic_image_image.widget|type
 features[features_overrides][] = page_manager_handlers.node_edit_panel_context.conf|display|content|new-08dde41f-c835-4e3a-b0ef-28191ff0275d
 features[features_overrides][] = page_manager_handlers.node_edit_panel_context.conf|display|content|new-13dff848-cce9-4135-9dcc-dab92cb83895
 features[features_overrides][] = page_manager_handlers.node_edit_panel_context.conf|display|content|new-373bd769-1e08-4ec5-85b6-0a1d2fc759fd
@@ -62,6 +56,7 @@ features[variable][] = panels_page_allowed_layouts
 features[variable][] = panels_page_allowed_types
 features[variable][] = panels_page_default
 features[variable][] = panopoly_admin_front_page_and_sticky
+features[variable][] = views_defaults
 features_exclude[dependencies][file_entity] = file_entity
 features_exclude[dependencies][link] = link
 features_exclude[dependencies][ocio_field_bases] = ocio_field_bases
diff --git a/profiles/wcm_base/modules/custom/wcm_panels_settings/wcm_panels_settings.strongarm.inc b/profiles/wcm_base/modules/custom/wcm_panels_settings/wcm_panels_settings.strongarm.inc
index b08fb958..1a9e56d4 100644
--- a/profiles/wcm_base/modules/custom/wcm_panels_settings/wcm_panels_settings.strongarm.inc
+++ b/profiles/wcm_base/modules/custom/wcm_panels_settings/wcm_panels_settings.strongarm.inc
@@ -477,5 +477,17 @@ function wcm_panels_settings_strongarm() {
   $strongarm->value = '1';
   $export['panopoly_admin_front_page_and_sticky'] = $strongarm;
 
+  $strongarm = new stdClass();
+  $strongarm->disabled = FALSE; /* Edit this to true to make a default strongarm disabled initially */
+  $strongarm->api_version = 1;
+  $strongarm->name = 'views_defaults';
+  $strongarm->value = array(
+    'admin_views_user' => FALSE,
+    'workbench_files' => TRUE,
+    'panopoly_search' => TRUE,
+    'workbench_moderation' => TRUE,
+  );
+  $export['views_defaults'] = $strongarm;
+
   return $export;
 }
diff --git a/profiles/wcm_base/modules/custom/wcm_permissions/wcm_permissions.features.user_permission.inc b/profiles/wcm_base/modules/custom/wcm_permissions/wcm_permissions.features.user_permission.inc
index a9df6bf7..2b704c8b 100644
--- a/profiles/wcm_base/modules/custom/wcm_permissions/wcm_permissions.features.user_permission.inc
+++ b/profiles/wcm_base/modules/custom/wcm_permissions/wcm_permissions.features.user_permission.inc
@@ -259,6 +259,17 @@ function wcm_permissions_user_default_permissions() {
     'module' => 'media_internet',
   );
 
+  // Exported permission: 'add terms in featured_slideshow'.
+  $permissions['add terms in featured_slideshow'] = array(
+    'name' => 'add terms in featured_slideshow',
+    'roles' => array(
+      'administrator' => 'administrator',
+      'site builder' => 'site builder',
+      'site manager' => 'site manager',
+    ),
+    'module' => 'taxonomy_access_fix',
+  );
+
   // Exported permission: 'add terms in ocio_tags'.
   $permissions['add terms in ocio_tags'] = array(
     'name' => 'add terms in ocio_tags',
@@ -485,6 +496,15 @@ function wcm_permissions_user_default_permissions() {
     'module' => 'field_group',
   );
 
+  // Exported permission: 'administer fields'.
+  $permissions['administer fields'] = array(
+    'name' => 'administer fields',
+    'roles' => array(
+      'administrator' => 'administrator',
+    ),
+    'module' => 'field',
+  );
+
   // Exported permission: 'administer file types'.
   $permissions['administer file types'] = array(
     'name' => 'administer file types',
@@ -532,6 +552,15 @@ function wcm_permissions_user_default_permissions() {
     'module' => 'flexslider',
   );
 
+  // Exported permission: 'administer honeypot'.
+  $permissions['administer honeypot'] = array(
+    'name' => 'administer honeypot',
+    'roles' => array(
+      'administrator' => 'administrator',
+    ),
+    'module' => 'honeypot',
+  );
+
   // Exported permission: 'administer image styles'.
   $permissions['administer image styles'] = array(
     'name' => 'administer image styles',
@@ -1025,6 +1054,15 @@ function wcm_permissions_user_default_permissions() {
     'module' => 'file_entity',
   );
 
+  // Exported permission: 'bypass honeypot protection'.
+  $permissions['bypass honeypot protection'] = array(
+    'name' => 'bypass honeypot protection',
+    'roles' => array(
+      'administrator' => 'administrator',
+    ),
+    'module' => 'honeypot',
+  );
+
   // Exported permission: 'bypass node access'.
   $permissions['bypass node access'] = array(
     'name' => 'bypass node access',
@@ -1861,6 +1899,17 @@ function wcm_permissions_user_default_permissions() {
     'module' => 'node',
   );
 
+  // Exported permission: 'delete terms in featured_slideshow'.
+  $permissions['delete terms in featured_slideshow'] = array(
+    'name' => 'delete terms in featured_slideshow',
+    'roles' => array(
+      'administrator' => 'administrator',
+      'site builder' => 'site builder',
+      'site manager' => 'site manager',
+    ),
+    'module' => 'taxonomy',
+  );
+
   // Exported permission: 'delete terms in ocio_tags'.
   $permissions['delete terms in ocio_tags'] = array(
     'name' => 'delete terms in ocio_tags',
@@ -1916,6 +1965,16 @@ function wcm_permissions_user_default_permissions() {
     'module' => 'taxonomy',
   );
 
+  // Exported permission: 'diff view changes'.
+  $permissions['diff view changes'] = array(
+    'name' => 'diff view changes',
+    'roles' => array(
+      'anonymous user' => 'anonymous user',
+      'authenticated user' => 'authenticated user',
+    ),
+    'module' => 'diff',
+  );
+
   // Exported permission: 'download any audio files'.
   $permissions['download any audio files'] = array(
     'name' => 'download any audio files',
@@ -2470,6 +2529,17 @@ function wcm_permissions_user_default_permissions() {
     'module' => 'private',
   );
 
+  // Exported permission: 'edit terms in featured_slideshow'.
+  $permissions['edit terms in featured_slideshow'] = array(
+    'name' => 'edit terms in featured_slideshow',
+    'roles' => array(
+      'administrator' => 'administrator',
+      'site builder' => 'site builder',
+      'site manager' => 'site manager',
+    ),
+    'module' => 'taxonomy',
+  );
+
   // Exported permission: 'edit terms in ocio_tags'.
   $permissions['edit terms in ocio_tags'] = array(
     'name' => 'edit terms in ocio_tags',
diff --git a/profiles/wcm_base/modules/custom/wcm_permissions/wcm_permissions.info b/profiles/wcm_base/modules/custom/wcm_permissions/wcm_permissions.info
index 0b543d67..db75d8f8 100644
--- a/profiles/wcm_base/modules/custom/wcm_permissions/wcm_permissions.info
+++ b/profiles/wcm_base/modules/custom/wcm_permissions/wcm_permissions.info
@@ -16,18 +16,21 @@ dependencies[] = custom_breadcrumbs
 dependencies[] = defaultconfig
 dependencies[] = defaultcontent
 dependencies[] = devel
+dependencies[] = diff
 dependencies[] = draggableviews
 dependencies[] = ds
 dependencies[] = ds_extras
 dependencies[] = ds_ui
 dependencies[] = facetapi
 dependencies[] = features
+dependencies[] = field
 dependencies[] = field_group
 dependencies[] = fieldable_panels_panes
 dependencies[] = file_entity
 dependencies[] = filter
 dependencies[] = fitvids
 dependencies[] = flexslider
+dependencies[] = honeypot
 dependencies[] = image
 dependencies[] = linkchecker
 dependencies[] = linkit
@@ -104,6 +107,7 @@ features[user_permission][] = access wcm advanced menu
 features[user_permission][] = access workbench
 features[user_permission][] = add content to books
 features[user_permission][] = add media from remote sources
+features[user_permission][] = add terms in featured_slideshow
 features[user_permission][] = add terms in ocio_tags
 features[user_permission][] = add terms in panopoly_categories
 features[user_permission][] = add terms in wcm_file_tags
@@ -128,11 +132,13 @@ features[user_permission][] = administer facets
 features[user_permission][] = administer features
 features[user_permission][] = administer fieldable panels panes
 features[user_permission][] = administer fieldgroups
+features[user_permission][] = administer fields
 features[user_permission][] = administer file types
 features[user_permission][] = administer files
 features[user_permission][] = administer filters
 features[user_permission][] = administer fitvids
 features[user_permission][] = administer flexslider
+features[user_permission][] = administer honeypot
 features[user_permission][] = administer image styles
 features[user_permission][] = administer linkchecker
 features[user_permission][] = administer linkit
@@ -187,6 +193,7 @@ features[user_permission][] = administer workbench
 features[user_permission][] = administer workbench moderation
 features[user_permission][] = block IP addresses
 features[user_permission][] = bypass file access
+features[user_permission][] = bypass honeypot protection
 features[user_permission][] = bypass node access
 features[user_permission][] = bypass private files download permission
 features[user_permission][] = bypass private files download permission for temporary files
@@ -262,11 +269,13 @@ features[user_permission][] = delete own video files
 features[user_permission][] = delete own web_form content
 features[user_permission][] = delete own webform submissions
 features[user_permission][] = delete revisions
+features[user_permission][] = delete terms in featured_slideshow
 features[user_permission][] = delete terms in ocio_tags
 features[user_permission][] = delete terms in panopoly_categories
 features[user_permission][] = delete terms in wcm_file_tags
 features[user_permission][] = delete terms in wcm_user_contact_group
 features[user_permission][] = delete terms in wcm_user_leadership_group
+features[user_permission][] = diff view changes
 features[user_permission][] = download any audio files
 features[user_permission][] = download any document files
 features[user_permission][] = download any image files
@@ -316,6 +325,7 @@ features[user_permission][] = edit own video files
 features[user_permission][] = edit own web_form content
 features[user_permission][] = edit own webform submissions
 features[user_permission][] = edit private content
+features[user_permission][] = edit terms in featured_slideshow
 features[user_permission][] = edit terms in ocio_tags
 features[user_permission][] = edit terms in panopoly_categories
 features[user_permission][] = edit terms in wcm_file_tags
diff --git a/profiles/wcm_base/modules/custom/wcm_user_config/wcm_user_config.info b/profiles/wcm_base/modules/custom/wcm_user_config/wcm_user_config.info
index 6c6c7c5e..3e370176 100644
--- a/profiles/wcm_base/modules/custom/wcm_user_config/wcm_user_config.info
+++ b/profiles/wcm_base/modules/custom/wcm_user_config/wcm_user_config.info
@@ -81,6 +81,5 @@ features[user_role][] = editor
 features[user_role][] = private content viewer
 features[user_role][] = site builder
 features[user_role][] = site manager
-features[variable][] = views_defaults
 features_exclude[dependencies][wcm_user_config] = wcm_user_config
 features_exclude[dependencies][admin_views] = admin_views
diff --git a/profiles/wcm_base/modules/custom/wcm_user_config/wcm_user_config.strongarm.inc b/profiles/wcm_base/modules/custom/wcm_user_config/wcm_user_config.strongarm.inc
deleted file mode 100644
index cb82a49d..00000000
--- a/profiles/wcm_base/modules/custom/wcm_user_config/wcm_user_config.strongarm.inc
+++ /dev/null
@@ -1,24 +0,0 @@
-<?php
-/**
- * @file
- * wcm_user_config.strongarm.inc
- */
-
-/**
- * Implements hook_strongarm().
- */
-function wcm_user_config_strongarm() {
-  $export = array();
-
-  $strongarm = new stdClass();
-  $strongarm->disabled = FALSE; /* Edit this to true to make a default strongarm disabled initially */
-  $strongarm->api_version = 1;
-  $strongarm->name = 'views_defaults';
-  $strongarm->value = array(
-    'admin_views_user' => FALSE,
-    'workbench_files' => TRUE,
-  );
-  $export['views_defaults'] = $strongarm;
-
-  return $export;
-}
diff --git a/profiles/wcm_base/modules/custom/wcm_workbench/wcm_workbench.features.features_overrides.inc b/profiles/wcm_base/modules/custom/wcm_workbench/wcm_workbench.features.features_overrides.inc
index 5c54b403..3aeb1424 100644
--- a/profiles/wcm_base/modules/custom/wcm_workbench/wcm_workbench.features.features_overrides.inc
+++ b/profiles/wcm_base/modules/custom/wcm_workbench/wcm_workbench.features.features_overrides.inc
@@ -13,131 +13,6 @@ function wcm_workbench_features_override_default_overrides() {
 
   // Exported overrides for: views_view
   $overrides["views_view.workbench_edited.display|page_1|display_options|path"] = 'admin/workbench/my/edits';
-  $overrides["views_view.workbench_files.display|default|display_options|empty"] = array(
-    'area' => array(
-      'id' => 'area',
-      'table' => 'views',
-      'field' => 'area',
-      'empty' => TRUE,
-      'content' => 'No files available.',
-      'format' => 'filtered_html',
-    ),
-  );
-  $overrides["views_view.workbench_files.display|default|display_options|fields|filename|link_to_file"]["DELETED"] = TRUE;
-  $overrides["views_view.workbench_files.display|default|display_options|use_more_always"] = FALSE;
-  $overrides["views_view.workbench_files.display|page_1|display_options|menu|title"] = 'Files';
-  $overrides["views_view.workbench_files.display|page_1|display_options|menu|weight"] = 50;
-  $overrides["views_view.workbench_moderation.display|default|display_options|fields|edit_node"] = array(
-    'id' => 'edit_node',
-    'table' => 'views_entity_node',
-    'field' => 'edit_node',
-    'label' => 'Edit',
-  );
-  $overrides["views_view.workbench_moderation.display|default|display_options|fields|nothing"] = array(
-    'id' => 'nothing',
-    'table' => 'views',
-    'field' => 'nothing',
-    'label' => 'Operations',
-    'alter' => array(
-      'text' => '[views_conditional]',
-      'make_link' => TRUE,
-      'path' => 'node/[nid]/moderation/diff/view/[vid]/[vid_1]',
-    ),
-    'hide_empty' => TRUE,
-    'empty_zero' => TRUE,
-    'hide_alter_empty' => TRUE,
-  );
-  $overrides["views_view.workbench_moderation.display|default|display_options|fields|vid"] = array(
-    'id' => 'vid',
-    'table' => 'node_revision',
-    'field' => 'vid',
-    'relationship' => 'nid',
-    'label' => '',
-    'exclude' => TRUE,
-    'element_label_colon' => FALSE,
-  );
-  $overrides["views_view.workbench_moderation.display|default|display_options|fields|vid_1"] = array(
-    'id' => 'vid_1',
-    'table' => 'node_revision',
-    'field' => 'vid',
-    'label' => '',
-    'exclude' => TRUE,
-    'element_label_colon' => FALSE,
-  );
-  $overrides["views_view.workbench_moderation.display|default|display_options|fields|views_conditional"] = array(
-    'id' => 'views_conditional',
-    'table' => 'views_conditional',
-    'field' => 'views_conditional',
-    'label' => '',
-    'exclude' => TRUE,
-    'element_label_colon' => FALSE,
-    'element_default_classes' => FALSE,
-    'hide_empty' => TRUE,
-    'empty_zero' => TRUE,
-    'if' => 'vid_1',
-    'condition' => 2,
-    'equalto' => '[vid]',
-    'then' => 'compare',
-    'strip_tags' => 1,
-  );
-  $overrides["views_view.workbench_moderation.display|default|display_options|style_options|columns|edit_node"] = 'nothing';
-  $overrides["views_view.workbench_moderation.display|default|display_options|style_options|columns|vid"] = 'vid';
-  $overrides["views_view.workbench_moderation.display|default|display_options|style_options|columns|vid_1"] = 'vid_1';
-  $overrides["views_view.workbench_moderation.display|default|display_options|style_options|columns|views_conditional"] = 'views_conditional';
-  $overrides["views_view.workbench_moderation.display|default|display_options|style_options|columns|workbench_moderation_history_link"] = 'workbench_moderation_history_link';
-  $overrides["views_view.workbench_moderation.display|default|display_options|style_options|info|changed|empty_column"] = 0;
-  $overrides["views_view.workbench_moderation.display|default|display_options|style_options|info|edit_node"] = array(
-    'align' => '',
-    'separator' => '',
-    'empty_column' => 0,
-  );
-  $overrides["views_view.workbench_moderation.display|default|display_options|style_options|info|log|empty_column"] = 0;
-  $overrides["views_view.workbench_moderation.display|default|display_options|style_options|info|moderation_actions|empty_column"] = 0;
-  $overrides["views_view.workbench_moderation.display|default|display_options|style_options|info|name|empty_column"] = 0;
-  $overrides["views_view.workbench_moderation.display|default|display_options|style_options|info|nid|empty_column"] = 0;
-  $overrides["views_view.workbench_moderation.display|default|display_options|style_options|info|nothing|empty_column"] = 0;
-  $overrides["views_view.workbench_moderation.display|default|display_options|style_options|info|nothing|separator"] = ' ';
-  $overrides["views_view.workbench_moderation.display|default|display_options|style_options|info|state|empty_column"] = 0;
-  $overrides["views_view.workbench_moderation.display|default|display_options|style_options|info|title|empty_column"] = 0;
-  $overrides["views_view.workbench_moderation.display|default|display_options|style_options|info|type|empty_column"] = 0;
-  $overrides["views_view.workbench_moderation.display|default|display_options|style_options|info|vid"] = array(
-    'sortable' => 0,
-    'default_sort_order' => 'asc',
-    'align' => '',
-    'separator' => '',
-    'empty_column' => 0,
-  );
-  $overrides["views_view.workbench_moderation.display|default|display_options|style_options|info|vid_1"] = array(
-    'sortable' => 0,
-    'default_sort_order' => 'asc',
-    'align' => '',
-    'separator' => '',
-    'empty_column' => 0,
-  );
-  $overrides["views_view.workbench_moderation.display|default|display_options|style_options|info|views_conditional"] = array(
-    'align' => '',
-    'separator' => '',
-    'empty_column' => 0,
-  );
-  $overrides["views_view.workbench_moderation.display|default|display_options|style_options|info|workbench_moderation_history_link"] = array(
-    'align' => '',
-    'separator' => '',
-    'empty_column' => 0,
-  );
-  $overrides["views_view.workbench_moderation.display|default|display_options|style_options|order"]["DELETED"] = TRUE;
-  $overrides["views_view.workbench_moderation.display|drafts_page|display_options|menu|weight"] = -5;
-  $overrides["views_view.workbench_moderation.display|drafts_page|display_options|path"] = 'admin/workbench/my/drafts';
-  $overrides["views_view.workbench_moderation.display|needs_review_page|display_options|menu|title"] = 'Needs Review';
-  $overrides["views_view.workbench_moderation.display|needs_review_page|display_options|menu|weight"]["DELETED"] = TRUE;
-  $overrides["views_view.workbench_moderation.display|needs_review_page|display_options|tab_options"] = array(
-    'title' => 'All Content',
-  );
-  $overrides["views_view.workbench_recent_content.display|page_1|display_options|defaults|title"] = FALSE;
-  $overrides["views_view.workbench_recent_content.display|page_1|display_options|menu|context"] = 0;
-  $overrides["views_view.workbench_recent_content.display|page_1|display_options|menu|context_only_inline"] = 0;
-  $overrides["views_view.workbench_recent_content.display|page_1|display_options|menu|title"] = 'All Content';
-  $overrides["views_view.workbench_recent_content.display|page_1|display_options|path"] = 'admin/workbench/all';
-  $overrides["views_view.workbench_recent_content.display|page_1|display_options|title"] = 'All Content';
 
  return $overrides;
 }
diff --git a/profiles/wcm_base/modules/custom/wcm_workbench/wcm_workbench.features.inc b/profiles/wcm_base/modules/custom/wcm_workbench/wcm_workbench.features.inc
index 2f3e33d0..6060d1ec 100644
--- a/profiles/wcm_base/modules/custom/wcm_workbench/wcm_workbench.features.inc
+++ b/profiles/wcm_base/modules/custom/wcm_workbench/wcm_workbench.features.inc
@@ -27,135 +27,4 @@ function wcm_workbench_views_default_views_alter(&$data) {
   if (isset($data['workbench_edited'])) {
     $data['workbench_edited']->display['page_1']->display_options['path'] = 'admin/workbench/my/edits'; /* WAS: 'admin/workbench/content/edited' */
   }
-  if (isset($data['workbench_files'])) {
-    $data['workbench_files']->display['default']->display_options['empty'] = array(
-      'area' => array(
-        'id' => 'area',
-        'table' => 'views',
-        'field' => 'area',
-        'empty' => TRUE,
-        'content' => 'No files available.',
-        'format' => 'filtered_html',
-      ),
-    ); /* WAS: '' */
-    $data['workbench_files']->display['default']->display_options['use_more_always'] = FALSE; /* WAS: '' */
-    $data['workbench_files']->display['page_1']->display_options['menu']['title'] = 'Files'; /* WAS: 'File list' */
-    $data['workbench_files']->display['page_1']->display_options['menu']['weight'] = 50; /* WAS: 0 */
-    unset($data['workbench_files']->display['default']->display_options['fields']['filename']['link_to_file']);
-  }
-  if (isset($data['workbench_moderation'])) {
-    $data['workbench_moderation']->display['default']->display_options['fields']['edit_node'] = array(
-      'id' => 'edit_node',
-      'table' => 'views_entity_node',
-      'field' => 'edit_node',
-      'label' => 'Edit',
-    ); /* WAS: '' */
-    $data['workbench_moderation']->display['default']->display_options['fields']['nothing'] = array(
-      'id' => 'nothing',
-      'table' => 'views',
-      'field' => 'nothing',
-      'label' => 'Operations',
-      'alter' => array(
-        'text' => '[views_conditional]',
-        'make_link' => TRUE,
-        'path' => 'node/[nid]/moderation/diff/view/[vid]/[vid_1]',
-      ),
-      'hide_empty' => TRUE,
-      'empty_zero' => TRUE,
-      'hide_alter_empty' => TRUE,
-    ); /* WAS: '' */
-    $data['workbench_moderation']->display['default']->display_options['fields']['vid'] = array(
-      'id' => 'vid',
-      'table' => 'node_revision',
-      'field' => 'vid',
-      'relationship' => 'nid',
-      'label' => '',
-      'exclude' => TRUE,
-      'element_label_colon' => FALSE,
-    ); /* WAS: '' */
-    $data['workbench_moderation']->display['default']->display_options['fields']['vid_1'] = array(
-      'id' => 'vid_1',
-      'table' => 'node_revision',
-      'field' => 'vid',
-      'label' => '',
-      'exclude' => TRUE,
-      'element_label_colon' => FALSE,
-    ); /* WAS: '' */
-    $data['workbench_moderation']->display['default']->display_options['fields']['views_conditional'] = array(
-      'id' => 'views_conditional',
-      'table' => 'views_conditional',
-      'field' => 'views_conditional',
-      'label' => '',
-      'exclude' => TRUE,
-      'element_label_colon' => FALSE,
-      'element_default_classes' => FALSE,
-      'hide_empty' => TRUE,
-      'empty_zero' => TRUE,
-      'if' => 'vid_1',
-      'condition' => 2,
-      'equalto' => '[vid]',
-      'then' => 'compare',
-      'strip_tags' => 1,
-    ); /* WAS: '' */
-    $data['workbench_moderation']->display['default']->display_options['style_options']['columns']['edit_node'] = 'nothing'; /* WAS: '' */
-    $data['workbench_moderation']->display['default']->display_options['style_options']['columns']['vid'] = 'vid'; /* WAS: '' */
-    $data['workbench_moderation']->display['default']->display_options['style_options']['columns']['vid_1'] = 'vid_1'; /* WAS: '' */
-    $data['workbench_moderation']->display['default']->display_options['style_options']['columns']['views_conditional'] = 'views_conditional'; /* WAS: '' */
-    $data['workbench_moderation']->display['default']->display_options['style_options']['columns']['workbench_moderation_history_link'] = 'workbench_moderation_history_link'; /* WAS: '' */
-    $data['workbench_moderation']->display['default']->display_options['style_options']['info']['changed']['empty_column'] = 0; /* WAS: '' */
-    $data['workbench_moderation']->display['default']->display_options['style_options']['info']['edit_node'] = array(
-      'align' => '',
-      'separator' => '',
-      'empty_column' => 0,
-    ); /* WAS: '' */
-    $data['workbench_moderation']->display['default']->display_options['style_options']['info']['log']['empty_column'] = 0; /* WAS: '' */
-    $data['workbench_moderation']->display['default']->display_options['style_options']['info']['moderation_actions']['empty_column'] = 0; /* WAS: '' */
-    $data['workbench_moderation']->display['default']->display_options['style_options']['info']['name']['empty_column'] = 0; /* WAS: '' */
-    $data['workbench_moderation']->display['default']->display_options['style_options']['info']['nid']['empty_column'] = 0; /* WAS: '' */
-    $data['workbench_moderation']->display['default']->display_options['style_options']['info']['nothing']['empty_column'] = 0; /* WAS: '' */
-    $data['workbench_moderation']->display['default']->display_options['style_options']['info']['nothing']['separator'] = ' '; /* WAS: '' */
-    $data['workbench_moderation']->display['default']->display_options['style_options']['info']['state']['empty_column'] = 0; /* WAS: '' */
-    $data['workbench_moderation']->display['default']->display_options['style_options']['info']['title']['empty_column'] = 0; /* WAS: '' */
-    $data['workbench_moderation']->display['default']->display_options['style_options']['info']['type']['empty_column'] = 0; /* WAS: '' */
-    $data['workbench_moderation']->display['default']->display_options['style_options']['info']['vid'] = array(
-      'sortable' => 0,
-      'default_sort_order' => 'asc',
-      'align' => '',
-      'separator' => '',
-      'empty_column' => 0,
-    ); /* WAS: '' */
-    $data['workbench_moderation']->display['default']->display_options['style_options']['info']['vid_1'] = array(
-      'sortable' => 0,
-      'default_sort_order' => 'asc',
-      'align' => '',
-      'separator' => '',
-      'empty_column' => 0,
-    ); /* WAS: '' */
-    $data['workbench_moderation']->display['default']->display_options['style_options']['info']['views_conditional'] = array(
-      'align' => '',
-      'separator' => '',
-      'empty_column' => 0,
-    ); /* WAS: '' */
-    $data['workbench_moderation']->display['default']->display_options['style_options']['info']['workbench_moderation_history_link'] = array(
-      'align' => '',
-      'separator' => '',
-      'empty_column' => 0,
-    ); /* WAS: '' */
-    $data['workbench_moderation']->display['drafts_page']->display_options['menu']['weight'] = -5; /* WAS: 98 */
-    $data['workbench_moderation']->display['drafts_page']->display_options['path'] = 'admin/workbench/my/drafts'; /* WAS: 'admin/workbench/drafts' */
-    $data['workbench_moderation']->display['needs_review_page']->display_options['menu']['title'] = 'Needs Review'; /* WAS: 'Needs review' */
-    $data['workbench_moderation']->display['needs_review_page']->display_options['tab_options'] = array(
-      'title' => 'All Content',
-    ); /* WAS: '' */
-    unset($data['workbench_moderation']->display['default']->display_options['style_options']['order']);
-    unset($data['workbench_moderation']->display['needs_review_page']->display_options['menu']['weight']);
-  }
-  if (isset($data['workbench_recent_content'])) {
-    $data['workbench_recent_content']->display['page_1']->display_options['defaults']['title'] = FALSE; /* WAS: '' */
-    $data['workbench_recent_content']->display['page_1']->display_options['menu']['context'] = 0; /* WAS: '' */
-    $data['workbench_recent_content']->display['page_1']->display_options['menu']['context_only_inline'] = 0; /* WAS: '' */
-    $data['workbench_recent_content']->display['page_1']->display_options['menu']['title'] = 'All Content'; /* WAS: 'All Recent Content' */
-    $data['workbench_recent_content']->display['page_1']->display_options['path'] = 'admin/workbench/all'; /* WAS: 'admin/workbench/content/all' */
-    $data['workbench_recent_content']->display['page_1']->display_options['title'] = 'All Content'; /* WAS: '' */
-  }
 }
diff --git a/profiles/wcm_base/modules/custom/wcm_workbench/wcm_workbench.info b/profiles/wcm_base/modules/custom/wcm_workbench/wcm_workbench.info
index 59935580..3141ee2f 100644
--- a/profiles/wcm_base/modules/custom/wcm_workbench/wcm_workbench.info
+++ b/profiles/wcm_base/modules/custom/wcm_workbench/wcm_workbench.info
@@ -12,63 +12,20 @@ dependencies[] = views
 dependencies[] = workbench
 dependencies[] = workbench_media
 dependencies[] = workbench_moderation
+dependencies[] = workbench_moderation
+dependencies[] = workbench_moderation
 features[ctools][] = strongarm:strongarm:1
 features[ctools][] = views:views_default:3.0
 features[fe_block_settings][] = workbench-block
 features[features_api][] = api:2
-features[features_override_items][] = views_view.workbench_edited
-features[features_override_items][] = views_view.workbench_files
-features[features_override_items][] = views_view.workbench_moderation
-features[features_override_items][] = views_view.workbench_recent_content
 features[features_overrides][] = views_view.workbench_edited.display|page_1|display_options|path
-features[features_overrides][] = views_view.workbench_files.display|default|display_options|empty
-features[features_overrides][] = views_view.workbench_files.display|default|display_options|fields|filename|link_to_file
-features[features_overrides][] = views_view.workbench_files.display|default|display_options|use_more_always
-features[features_overrides][] = views_view.workbench_files.display|page_1|display_options|menu|title
-features[features_overrides][] = views_view.workbench_files.display|page_1|display_options|menu|weight
-features[features_overrides][] = views_view.workbench_moderation.display|default|display_options|fields|edit_node
-features[features_overrides][] = views_view.workbench_moderation.display|default|display_options|fields|nothing
-features[features_overrides][] = views_view.workbench_moderation.display|default|display_options|fields|vid
-features[features_overrides][] = views_view.workbench_moderation.display|default|display_options|fields|vid_1
-features[features_overrides][] = views_view.workbench_moderation.display|default|display_options|fields|views_conditional
-features[features_overrides][] = views_view.workbench_moderation.display|default|display_options|style_options|columns|edit_node
-features[features_overrides][] = views_view.workbench_moderation.display|default|display_options|style_options|columns|vid
-features[features_overrides][] = views_view.workbench_moderation.display|default|display_options|style_options|columns|vid_1
-features[features_overrides][] = views_view.workbench_moderation.display|default|display_options|style_options|columns|views_conditional
-features[features_overrides][] = views_view.workbench_moderation.display|default|display_options|style_options|columns|workbench_moderation_history_link
-features[features_overrides][] = views_view.workbench_moderation.display|default|display_options|style_options|info|changed|empty_column
-features[features_overrides][] = views_view.workbench_moderation.display|default|display_options|style_options|info|edit_node
-features[features_overrides][] = views_view.workbench_moderation.display|default|display_options|style_options|info|log|empty_column
-features[features_overrides][] = views_view.workbench_moderation.display|default|display_options|style_options|info|moderation_actions|empty_column
-features[features_overrides][] = views_view.workbench_moderation.display|default|display_options|style_options|info|name|empty_column
-features[features_overrides][] = views_view.workbench_moderation.display|default|display_options|style_options|info|nid|empty_column
-features[features_overrides][] = views_view.workbench_moderation.display|default|display_options|style_options|info|nothing|empty_column
-features[features_overrides][] = views_view.workbench_moderation.display|default|display_options|style_options|info|nothing|separator
-features[features_overrides][] = views_view.workbench_moderation.display|default|display_options|style_options|info|state|empty_column
-features[features_overrides][] = views_view.workbench_moderation.display|default|display_options|style_options|info|title|empty_column
-features[features_overrides][] = views_view.workbench_moderation.display|default|display_options|style_options|info|type|empty_column
-features[features_overrides][] = views_view.workbench_moderation.display|default|display_options|style_options|info|vid
-features[features_overrides][] = views_view.workbench_moderation.display|default|display_options|style_options|info|vid_1
-features[features_overrides][] = views_view.workbench_moderation.display|default|display_options|style_options|info|views_conditional
-features[features_overrides][] = views_view.workbench_moderation.display|default|display_options|style_options|info|workbench_moderation_history_link
-features[features_overrides][] = views_view.workbench_moderation.display|default|display_options|style_options|order
-features[features_overrides][] = views_view.workbench_moderation.display|drafts_page|display_options|menu|weight
-features[features_overrides][] = views_view.workbench_moderation.display|drafts_page|display_options|path
-features[features_overrides][] = views_view.workbench_moderation.display|needs_review_page|display_options|menu|title
-features[features_overrides][] = views_view.workbench_moderation.display|needs_review_page|display_options|menu|weight
-features[features_overrides][] = views_view.workbench_moderation.display|needs_review_page|display_options|tab_options
-features[features_overrides][] = views_view.workbench_recent_content.display|page_1|display_options|defaults|title
-features[features_overrides][] = views_view.workbench_recent_content.display|page_1|display_options|menu|context
-features[features_overrides][] = views_view.workbench_recent_content.display|page_1|display_options|menu|context_only_inline
-features[features_overrides][] = views_view.workbench_recent_content.display|page_1|display_options|menu|title
-features[features_overrides][] = views_view.workbench_recent_content.display|page_1|display_options|path
-features[features_overrides][] = views_view.workbench_recent_content.display|page_1|display_options|title
 features[variable][] = diff_context_lines_leading
 features[variable][] = diff_context_lines_trailing
 features[variable][] = diff_default_state_node
 features[variable][] = diff_radio_behavior
 features[variable][] = diff_theme
 features[views_view][] = files
+features[views_view][] = wcm_workbench_moderation
 features[workbench_moderation_states][] = draft
 features[workbench_moderation_states][] = needs_review
 features[workbench_moderation_states][] = published
diff --git a/profiles/wcm_base/modules/custom/wcm_workbench/wcm_workbench.module b/profiles/wcm_base/modules/custom/wcm_workbench/wcm_workbench.module
index 55c37830..83b0ff98 100644
--- a/profiles/wcm_base/modules/custom/wcm_workbench/wcm_workbench.module
+++ b/profiles/wcm_base/modules/custom/wcm_workbench/wcm_workbench.module
@@ -53,19 +53,19 @@ function wcm_workbench_form_node_revision_delete_confirm_alter(&$form, &$form_st
  * Add links to workbench block to view changes between revisions.
  */
 function wcm_workbench_node_view($node, $view_mode) {
-  if ($view_mode == 'full') {
+  if ($view_mode == 'full' && user_access('view all unpublished content')) {
     $links = array();
 
     $url = 'node/'. $node->nid . '/moderation/diff/view/';
 
-    if(isset($node->workbench_moderation['published'])) {
+    if (isset($node->workbench_moderation['published'])) {
       $published = $node->workbench_moderation['published']->vid;
       if ($node->vid != $published) {
         $links[] = l('Published revision', $url . $published . '/' . $node->vid);
       }
     }
 
-    if(isset($node->workbench_moderation['current']) ) {
+    if (isset($node->workbench_moderation['current']) ) {
       $current = $node->workbench_moderation['current']->vid;
       if ($node->vid != $current) {
         $links[] = l('Latest draft', $url .  $node->vid . '/' . $current);
diff --git a/profiles/wcm_base/modules/custom/wcm_workbench/wcm_workbench.views_default.inc b/profiles/wcm_base/modules/custom/wcm_workbench/wcm_workbench.views_default.inc
index abf2aed8..e7ec7d6e 100644
--- a/profiles/wcm_base/modules/custom/wcm_workbench/wcm_workbench.views_default.inc
+++ b/profiles/wcm_base/modules/custom/wcm_workbench/wcm_workbench.views_default.inc
@@ -238,5 +238,478 @@ function wcm_workbench_views_default_views() {
   $handler->display->display_options['menu']['weight'] = 50;
   $export['files'] = $view;
 
+  $view = new view();
+  $view->name = 'wcm_workbench_moderation';
+  $view->description = 'Lists content by moderation state.';
+  $view->tag = 'Workbench Moderation';
+  $view->base_table = 'node_revision';
+  $view->human_name = 'WCM Workbench Moderation';
+  $view->core = 7;
+  $view->api_version = '3.0';
+  $view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */
+
+  /* Display: Defaults */
+  $handler = $view->new_display('default', 'Defaults', 'default');
+  $handler->display->display_options['title'] = 'Content I\'ve edited';
+  $handler->display->display_options['use_more_always'] = TRUE;
+  $handler->display->display_options['use_more_text'] = 'view all';
+  $handler->display->display_options['access']['type'] = 'perm';
+  $handler->display->display_options['access']['perm'] = 'use workbench_moderation my drafts tab';
+  $handler->display->display_options['cache']['type'] = 'none';
+  $handler->display->display_options['query']['type'] = 'views_query';
+  $handler->display->display_options['query']['options']['query_comment'] = FALSE;
+  $handler->display->display_options['exposed_form']['type'] = 'basic';
+  $handler->display->display_options['pager']['type'] = 'full';
+  $handler->display->display_options['pager']['options']['items_per_page'] = '25';
+  $handler->display->display_options['pager']['options']['offset'] = '0';
+  $handler->display->display_options['pager']['options']['id'] = '0';
+  $handler->display->display_options['pager']['options']['expose']['items_per_page'] = TRUE;
+  $handler->display->display_options['pager']['options']['expose']['items_per_page_options'] = '10, 25, 50, 100, 200';
+  $handler->display->display_options['style_plugin'] = 'table';
+  $handler->display->display_options['style_options']['columns'] = array(
+    'nid' => 'nid',
+    'log' => 'log',
+    'nothing' => 'nothing',
+    'state' => 'state',
+    'moderation_actions' => 'moderation_actions',
+    'title' => 'title',
+    'type' => 'type',
+    'name' => 'name',
+    'changed' => 'changed',
+    'edit_node' => 'nothing',
+    'vid' => 'vid',
+    'vid_1' => 'vid_1',
+    'views_conditional' => 'views_conditional',
+    'workbench_moderation_history_link' => 'workbench_moderation_history_link',
+  );
+  $handler->display->display_options['style_options']['default'] = 'changed';
+  $handler->display->display_options['style_options']['info'] = array(
+    'nid' => array(
+      'sortable' => 0,
+      'default_sort_order' => 'asc',
+      'align' => '',
+      'separator' => '',
+      'empty_column' => 0,
+    ),
+    'log' => array(
+      'align' => '',
+      'separator' => '',
+      'empty_column' => 0,
+    ),
+    'nothing' => array(
+      'align' => '',
+      'separator' => '&emsp;',
+      'empty_column' => 0,
+    ),
+    'state' => array(
+      'sortable' => 1,
+      'default_sort_order' => 'asc',
+      'align' => '',
+      'separator' => '',
+      'empty_column' => 0,
+    ),
+    'moderation_actions' => array(
+      'align' => '',
+      'separator' => '',
+      'empty_column' => 0,
+    ),
+    'title' => array(
+      'sortable' => 1,
+      'default_sort_order' => 'asc',
+      'align' => '',
+      'separator' => '',
+      'empty_column' => 0,
+    ),
+    'type' => array(
+      'sortable' => 1,
+      'default_sort_order' => 'asc',
+      'align' => '',
+      'separator' => '',
+      'empty_column' => 0,
+    ),
+    'name' => array(
+      'sortable' => 1,
+      'default_sort_order' => 'asc',
+      'align' => '',
+      'separator' => '',
+      'empty_column' => 0,
+    ),
+    'changed' => array(
+      'sortable' => 1,
+      'default_sort_order' => 'desc',
+      'align' => '',
+      'separator' => '',
+      'empty_column' => 0,
+    ),
+    'edit_node' => array(
+      'align' => '',
+      'separator' => '',
+      'empty_column' => 0,
+    ),
+    'vid' => array(
+      'sortable' => 0,
+      'default_sort_order' => 'asc',
+      'align' => '',
+      'separator' => '',
+      'empty_column' => 0,
+    ),
+    'vid_1' => array(
+      'sortable' => 0,
+      'default_sort_order' => 'asc',
+      'align' => '',
+      'separator' => '',
+      'empty_column' => 0,
+    ),
+    'views_conditional' => array(
+      'align' => '',
+      'separator' => '',
+      'empty_column' => 0,
+    ),
+    'workbench_moderation_history_link' => array(
+      'align' => '',
+      'separator' => '',
+      'empty_column' => 0,
+    ),
+  );
+  /* No results behavior: Global: Text area */
+  $handler->display->display_options['empty']['area']['id'] = 'area';
+  $handler->display->display_options['empty']['area']['table'] = 'views';
+  $handler->display->display_options['empty']['area']['field'] = 'area';
+  $handler->display->display_options['empty']['area']['content'] = 'You haven\'t created or edited any content.';
+  $handler->display->display_options['empty']['area']['format'] = '1';
+  /* Relationship: Workbench Moderation: Node */
+  $handler->display->display_options['relationships']['nid']['id'] = 'nid';
+  $handler->display->display_options['relationships']['nid']['table'] = 'workbench_moderation_node_history';
+  $handler->display->display_options['relationships']['nid']['field'] = 'nid';
+  $handler->display->display_options['relationships']['nid']['required'] = TRUE;
+  /* Relationship: Content revision: User */
+  $handler->display->display_options['relationships']['uid']['id'] = 'uid';
+  $handler->display->display_options['relationships']['uid']['table'] = 'node_revision';
+  $handler->display->display_options['relationships']['uid']['field'] = 'uid';
+  /* Field: Content: Nid */
+  $handler->display->display_options['fields']['nid']['id'] = 'nid';
+  $handler->display->display_options['fields']['nid']['table'] = 'node';
+  $handler->display->display_options['fields']['nid']['field'] = 'nid';
+  $handler->display->display_options['fields']['nid']['relationship'] = 'nid';
+  $handler->display->display_options['fields']['nid']['exclude'] = TRUE;
+  $handler->display->display_options['fields']['nid']['link_to_node'] = TRUE;
+  /* Field: Content revision: Vid */
+  $handler->display->display_options['fields']['vid']['id'] = 'vid';
+  $handler->display->display_options['fields']['vid']['table'] = 'node_revision';
+  $handler->display->display_options['fields']['vid']['field'] = 'vid';
+  $handler->display->display_options['fields']['vid']['relationship'] = 'nid';
+  $handler->display->display_options['fields']['vid']['label'] = '';
+  $handler->display->display_options['fields']['vid']['exclude'] = TRUE;
+  $handler->display->display_options['fields']['vid']['element_label_colon'] = FALSE;
+  /* Field: Content revision: Vid */
+  $handler->display->display_options['fields']['vid_1']['id'] = 'vid_1';
+  $handler->display->display_options['fields']['vid_1']['table'] = 'node_revision';
+  $handler->display->display_options['fields']['vid_1']['field'] = 'vid';
+  $handler->display->display_options['fields']['vid_1']['label'] = '';
+  $handler->display->display_options['fields']['vid_1']['exclude'] = TRUE;
+  $handler->display->display_options['fields']['vid_1']['element_label_colon'] = FALSE;
+  /* Field: Views: Views Conditional */
+  $handler->display->display_options['fields']['views_conditional_1']['id'] = 'views_conditional_1';
+  $handler->display->display_options['fields']['views_conditional_1']['table'] = 'views_conditional';
+  $handler->display->display_options['fields']['views_conditional_1']['field'] = 'views_conditional';
+  $handler->display->display_options['fields']['views_conditional_1']['label'] = '';
+  $handler->display->display_options['fields']['views_conditional_1']['exclude'] = TRUE;
+  $handler->display->display_options['fields']['views_conditional_1']['element_label_colon'] = FALSE;
+  $handler->display->display_options['fields']['views_conditional_1']['if'] = 'vid_1';
+  $handler->display->display_options['fields']['views_conditional_1']['condition'] = '1';
+  $handler->display->display_options['fields']['views_conditional_1']['equalto'] = '[vid]';
+  $handler->display->display_options['fields']['views_conditional_1']['then'] = 'node/[nid]';
+  $handler->display->display_options['fields']['views_conditional_1']['or'] = 'node/[nid]/draft';
+  $handler->display->display_options['fields']['views_conditional_1']['strip_tags'] = 1;
+  /* 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']['relationship'] = 'nid';
+  $handler->display->display_options['fields']['title']['alter']['make_link'] = TRUE;
+  $handler->display->display_options['fields']['title']['alter']['path'] = '[views_conditional_1]';
+  $handler->display->display_options['fields']['title']['alter']['absolute'] = TRUE;
+  $handler->display->display_options['fields']['title']['alter']['word_boundary'] = FALSE;
+  $handler->display->display_options['fields']['title']['alter']['ellipsis'] = FALSE;
+  $handler->display->display_options['fields']['title']['link_to_node'] = FALSE;
+  /* Field: Content revision: Log message */
+  $handler->display->display_options['fields']['log']['id'] = 'log';
+  $handler->display->display_options['fields']['log']['table'] = 'node_revision';
+  $handler->display->display_options['fields']['log']['field'] = 'log';
+  $handler->display->display_options['fields']['log']['exclude'] = TRUE;
+  /* Field: Workbench Moderation: Moderation history link */
+  $handler->display->display_options['fields']['workbench_moderation_history_link']['id'] = 'workbench_moderation_history_link';
+  $handler->display->display_options['fields']['workbench_moderation_history_link']['table'] = 'node';
+  $handler->display->display_options['fields']['workbench_moderation_history_link']['field'] = 'workbench_moderation_history_link';
+  $handler->display->display_options['fields']['workbench_moderation_history_link']['exclude'] = TRUE;
+  $handler->display->display_options['fields']['workbench_moderation_history_link']['hide_alter_empty'] = FALSE;
+  /* Field: Moderation state */
+  $handler->display->display_options['fields']['state']['id'] = 'state';
+  $handler->display->display_options['fields']['state']['table'] = 'workbench_moderation_node_history';
+  $handler->display->display_options['fields']['state']['field'] = 'state';
+  $handler->display->display_options['fields']['state']['ui_name'] = 'Moderation state';
+  $handler->display->display_options['fields']['state']['label'] = 'Moderation state';
+  $handler->display->display_options['fields']['state']['alter']['alter_text'] = TRUE;
+  $handler->display->display_options['fields']['state']['alter']['text'] = '<div>[state]</div><div>[workbench_moderation_history_link]</div>';
+  $handler->display->display_options['fields']['state']['hide_alter_empty'] = FALSE;
+  $handler->display->display_options['fields']['state']['machine_name'] = 0;
+  /* Field: Workbench Moderation: Moderation links */
+  $handler->display->display_options['fields']['moderation_actions']['id'] = 'moderation_actions';
+  $handler->display->display_options['fields']['moderation_actions']['table'] = 'workbench_moderation_node_history';
+  $handler->display->display_options['fields']['moderation_actions']['field'] = 'moderation_actions';
+  $handler->display->display_options['fields']['moderation_actions']['label'] = 'Set moderation state';
+  /* Field: Content: Type */
+  $handler->display->display_options['fields']['type']['id'] = 'type';
+  $handler->display->display_options['fields']['type']['table'] = 'node';
+  $handler->display->display_options['fields']['type']['field'] = 'type';
+  $handler->display->display_options['fields']['type']['relationship'] = 'nid';
+  $handler->display->display_options['fields']['type']['alter']['word_boundary'] = FALSE;
+  $handler->display->display_options['fields']['type']['alter']['ellipsis'] = FALSE;
+  /* Field: User: Name */
+  $handler->display->display_options['fields']['name']['id'] = 'name';
+  $handler->display->display_options['fields']['name']['table'] = 'users';
+  $handler->display->display_options['fields']['name']['field'] = 'name';
+  $handler->display->display_options['fields']['name']['relationship'] = 'uid';
+  $handler->display->display_options['fields']['name']['label'] = 'Revised by';
+  /* Field: Content: Updated date */
+  $handler->display->display_options['fields']['changed']['id'] = 'changed';
+  $handler->display->display_options['fields']['changed']['table'] = 'node';
+  $handler->display->display_options['fields']['changed']['field'] = 'changed';
+  $handler->display->display_options['fields']['changed']['relationship'] = 'nid';
+  $handler->display->display_options['fields']['changed']['label'] = 'Last updated';
+  $handler->display->display_options['fields']['changed']['alter']['word_boundary'] = FALSE;
+  $handler->display->display_options['fields']['changed']['alter']['ellipsis'] = FALSE;
+  $handler->display->display_options['fields']['changed']['date_format'] = 'time ago';
+  /* Field: Views: Views Conditional */
+  $handler->display->display_options['fields']['views_conditional']['id'] = 'views_conditional';
+  $handler->display->display_options['fields']['views_conditional']['table'] = 'views_conditional';
+  $handler->display->display_options['fields']['views_conditional']['field'] = 'views_conditional';
+  $handler->display->display_options['fields']['views_conditional']['label'] = '';
+  $handler->display->display_options['fields']['views_conditional']['exclude'] = TRUE;
+  $handler->display->display_options['fields']['views_conditional']['element_label_colon'] = FALSE;
+  $handler->display->display_options['fields']['views_conditional']['element_default_classes'] = FALSE;
+  $handler->display->display_options['fields']['views_conditional']['hide_empty'] = TRUE;
+  $handler->display->display_options['fields']['views_conditional']['empty_zero'] = TRUE;
+  $handler->display->display_options['fields']['views_conditional']['if'] = 'vid_1';
+  $handler->display->display_options['fields']['views_conditional']['condition'] = 2;
+  $handler->display->display_options['fields']['views_conditional']['equalto'] = '[vid]';
+  $handler->display->display_options['fields']['views_conditional']['then'] = 'compare';
+  $handler->display->display_options['fields']['views_conditional']['strip_tags'] = 1;
+  /* Field: Content: Edit link */
+  $handler->display->display_options['fields']['edit_node']['id'] = 'edit_node';
+  $handler->display->display_options['fields']['edit_node']['table'] = 'views_entity_node';
+  $handler->display->display_options['fields']['edit_node']['field'] = 'edit_node';
+  $handler->display->display_options['fields']['edit_node']['label'] = 'Edit';
+  /* Field: Global: Custom text */
+  $handler->display->display_options['fields']['nothing']['id'] = 'nothing';
+  $handler->display->display_options['fields']['nothing']['table'] = 'views';
+  $handler->display->display_options['fields']['nothing']['field'] = 'nothing';
+  $handler->display->display_options['fields']['nothing']['label'] = 'Operations';
+  $handler->display->display_options['fields']['nothing']['alter']['text'] = '[views_conditional]';
+  $handler->display->display_options['fields']['nothing']['alter']['make_link'] = TRUE;
+  $handler->display->display_options['fields']['nothing']['alter']['path'] = 'node/[nid]/moderation/diff/view/[vid]/[vid_1]';
+  $handler->display->display_options['fields']['nothing']['hide_empty'] = TRUE;
+  $handler->display->display_options['fields']['nothing']['empty_zero'] = TRUE;
+  $handler->display->display_options['fields']['nothing']['hide_alter_empty'] = TRUE;
+  /* Sort criterion: Content: Updated date */
+  $handler->display->display_options['sorts']['changed']['id'] = 'changed';
+  $handler->display->display_options['sorts']['changed']['table'] = 'node';
+  $handler->display->display_options['sorts']['changed']['field'] = 'changed';
+  $handler->display->display_options['sorts']['changed']['relationship'] = 'nid';
+  $handler->display->display_options['sorts']['changed']['order'] = 'DESC';
+  /* Filter criterion: User: Current */
+  $handler->display->display_options['filters']['uid_current']['id'] = 'uid_current';
+  $handler->display->display_options['filters']['uid_current']['table'] = 'users';
+  $handler->display->display_options['filters']['uid_current']['field'] = 'uid_current';
+  $handler->display->display_options['filters']['uid_current']['relationship'] = 'uid';
+  $handler->display->display_options['filters']['uid_current']['value'] = '1';
+  /* Filter criterion: Content: Title */
+  $handler->display->display_options['filters']['title']['id'] = 'title';
+  $handler->display->display_options['filters']['title']['table'] = 'node';
+  $handler->display->display_options['filters']['title']['field'] = 'title';
+  $handler->display->display_options['filters']['title']['relationship'] = 'nid';
+  $handler->display->display_options['filters']['title']['operator'] = 'contains';
+  $handler->display->display_options['filters']['title']['exposed'] = TRUE;
+  $handler->display->display_options['filters']['title']['expose']['operator_id'] = 'title_op';
+  $handler->display->display_options['filters']['title']['expose']['label'] = 'Title';
+  $handler->display->display_options['filters']['title']['expose']['operator'] = 'title_op';
+  $handler->display->display_options['filters']['title']['expose']['identifier'] = 'title';
+  $handler->display->display_options['filters']['title']['expose']['remember'] = TRUE;
+  /* 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']['relationship'] = 'nid';
+  $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'] = TRUE;
+  /* Filter criterion: Workbench Moderation: State */
+  $handler->display->display_options['filters']['state']['id'] = 'state';
+  $handler->display->display_options['filters']['state']['table'] = 'workbench_moderation_node_history';
+  $handler->display->display_options['filters']['state']['field'] = 'state';
+  $handler->display->display_options['filters']['state']['value'] = array(
+    'all' => 'all',
+    'draft' => 'draft',
+    'needs_review' => 'needs_review',
+    'published' => 'published',
+  );
+  $handler->display->display_options['filters']['state']['exposed'] = TRUE;
+  $handler->display->display_options['filters']['state']['expose']['operator_id'] = 'state_op';
+  $handler->display->display_options['filters']['state']['expose']['label'] = 'State';
+  $handler->display->display_options['filters']['state']['expose']['operator'] = 'state_op';
+  $handler->display->display_options['filters']['state']['expose']['identifier'] = 'state';
+  $handler->display->display_options['filters']['state']['expose']['remember'] = TRUE;
+  $handler->display->display_options['filters']['state']['expose']['reduce'] = TRUE;
+  /* Filter criterion: Workbench Moderation: Current */
+  $handler->display->display_options['filters']['is_current']['id'] = 'is_current';
+  $handler->display->display_options['filters']['is_current']['table'] = 'workbench_moderation_node_history';
+  $handler->display->display_options['filters']['is_current']['field'] = 'is_current';
+
+  /* Display: Needs review page */
+  $handler = $view->new_display('page', 'Needs review page', 'needs_review_page');
+  $handler->display->display_options['defaults']['title'] = FALSE;
+  $handler->display->display_options['title'] = 'Needs review';
+  $handler->display->display_options['defaults']['hide_admin_links'] = FALSE;
+  $handler->display->display_options['defaults']['access'] = FALSE;
+  $handler->display->display_options['access']['type'] = 'perm';
+  $handler->display->display_options['access']['perm'] = 'use workbench_moderation needs review tab';
+  $handler->display->display_options['defaults']['empty'] = FALSE;
+  /* No results behavior: Global: Text area */
+  $handler->display->display_options['empty']['area']['id'] = 'area';
+  $handler->display->display_options['empty']['area']['table'] = 'views';
+  $handler->display->display_options['empty']['area']['field'] = 'area';
+  $handler->display->display_options['empty']['area']['content'] = 'This list displays content in the "Needs review" state that you can moderate. Currently there is no such content.';
+  $handler->display->display_options['empty']['area']['format'] = 'plain_text';
+  $handler->display->display_options['defaults']['filter_groups'] = FALSE;
+  $handler->display->display_options['defaults']['filters'] = FALSE;
+  /* Filter criterion: Workbench Moderation: Current */
+  $handler->display->display_options['filters']['is_current']['id'] = 'is_current';
+  $handler->display->display_options['filters']['is_current']['table'] = 'workbench_moderation_node_history';
+  $handler->display->display_options['filters']['is_current']['field'] = 'is_current';
+  $handler->display->display_options['filters']['is_current']['value'] = '1';
+  /* Filter criterion: Workbench Moderation: State */
+  $handler->display->display_options['filters']['state']['id'] = 'state';
+  $handler->display->display_options['filters']['state']['table'] = 'workbench_moderation_node_history';
+  $handler->display->display_options['filters']['state']['field'] = 'state';
+  $handler->display->display_options['filters']['state']['value'] = array(
+    'needs_review' => 'needs_review',
+  );
+  $handler->display->display_options['filters']['state']['expose']['label'] = 'Workbench Moderation: State';
+  $handler->display->display_options['filters']['state']['expose']['operator'] = 'state_op';
+  $handler->display->display_options['filters']['state']['expose']['identifier'] = 'state';
+  /* Filter criterion: Content: Title */
+  $handler->display->display_options['filters']['title']['id'] = 'title';
+  $handler->display->display_options['filters']['title']['table'] = 'node';
+  $handler->display->display_options['filters']['title']['field'] = 'title';
+  $handler->display->display_options['filters']['title']['relationship'] = 'nid';
+  $handler->display->display_options['filters']['title']['operator'] = 'contains';
+  $handler->display->display_options['filters']['title']['exposed'] = TRUE;
+  $handler->display->display_options['filters']['title']['expose']['operator_id'] = 'title_op';
+  $handler->display->display_options['filters']['title']['expose']['label'] = 'Title';
+  $handler->display->display_options['filters']['title']['expose']['operator'] = 'title_op';
+  $handler->display->display_options['filters']['title']['expose']['identifier'] = 'title';
+  $handler->display->display_options['filters']['title']['expose']['remember'] = TRUE;
+  /* 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']['relationship'] = 'nid';
+  $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'] = TRUE;
+  $handler->display->display_options['path'] = 'admin/workbench/needs-review';
+  $handler->display->display_options['menu']['type'] = 'tab';
+  $handler->display->display_options['menu']['title'] = 'Needs Review';
+  $handler->display->display_options['tab_options']['title'] = 'All Content';
+
+  /* Display: Drafts page */
+  $handler = $view->new_display('page', 'Drafts page', 'drafts_page');
+  $handler->display->display_options['defaults']['title'] = FALSE;
+  $handler->display->display_options['title'] = 'My drafts';
+  $handler->display->display_options['defaults']['hide_admin_links'] = FALSE;
+  $handler->display->display_options['defaults']['empty'] = FALSE;
+  /* No results behavior: Global: Text area */
+  $handler->display->display_options['empty']['area']['id'] = 'area';
+  $handler->display->display_options['empty']['area']['table'] = 'views';
+  $handler->display->display_options['empty']['area']['field'] = 'area';
+  $handler->display->display_options['empty']['area']['content'] = 'This list displays content you have created that is not published. Currently there is no such content.';
+  $handler->display->display_options['empty']['area']['format'] = 'plain_text';
+  $handler->display->display_options['defaults']['filter_groups'] = FALSE;
+  $handler->display->display_options['defaults']['filters'] = FALSE;
+  /* Filter criterion: User: Current */
+  $handler->display->display_options['filters']['uid_current']['id'] = 'uid_current';
+  $handler->display->display_options['filters']['uid_current']['table'] = 'users';
+  $handler->display->display_options['filters']['uid_current']['field'] = 'uid_current';
+  $handler->display->display_options['filters']['uid_current']['relationship'] = 'uid';
+  $handler->display->display_options['filters']['uid_current']['value'] = '1';
+  $handler->display->display_options['filters']['uid_current']['group'] = 1;
+  /* Filter criterion: Workbench Moderation: Current */
+  $handler->display->display_options['filters']['is_current']['id'] = 'is_current';
+  $handler->display->display_options['filters']['is_current']['table'] = 'workbench_moderation_node_history';
+  $handler->display->display_options['filters']['is_current']['field'] = 'is_current';
+  $handler->display->display_options['filters']['is_current']['value'] = '1';
+  $handler->display->display_options['filters']['is_current']['group'] = 1;
+  /* Filter criterion: Workbench Moderation: State */
+  $handler->display->display_options['filters']['state_1']['id'] = 'state_1';
+  $handler->display->display_options['filters']['state_1']['table'] = 'workbench_moderation_node_history';
+  $handler->display->display_options['filters']['state_1']['field'] = 'state';
+  $handler->display->display_options['filters']['state_1']['operator'] = 'not in';
+  $handler->display->display_options['filters']['state_1']['value'] = array(
+    'published' => 'published',
+  );
+  $handler->display->display_options['filters']['state_1']['group'] = 1;
+  /* Filter criterion: Content: Title */
+  $handler->display->display_options['filters']['title']['id'] = 'title';
+  $handler->display->display_options['filters']['title']['table'] = 'node';
+  $handler->display->display_options['filters']['title']['field'] = 'title';
+  $handler->display->display_options['filters']['title']['relationship'] = 'nid';
+  $handler->display->display_options['filters']['title']['operator'] = 'contains';
+  $handler->display->display_options['filters']['title']['group'] = 1;
+  $handler->display->display_options['filters']['title']['exposed'] = TRUE;
+  $handler->display->display_options['filters']['title']['expose']['operator_id'] = 'title_op';
+  $handler->display->display_options['filters']['title']['expose']['label'] = 'Title';
+  $handler->display->display_options['filters']['title']['expose']['operator'] = 'title_op';
+  $handler->display->display_options['filters']['title']['expose']['identifier'] = 'title';
+  $handler->display->display_options['filters']['title']['expose']['remember'] = TRUE;
+  /* 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']['relationship'] = 'nid';
+  $handler->display->display_options['filters']['type']['group'] = 1;
+  $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'] = TRUE;
+  /* Filter criterion: Workbench Moderation: State */
+  $handler->display->display_options['filters']['state']['id'] = 'state';
+  $handler->display->display_options['filters']['state']['table'] = 'workbench_moderation_node_history';
+  $handler->display->display_options['filters']['state']['field'] = 'state';
+  $handler->display->display_options['filters']['state']['value'] = array(
+    'draft' => 'draft',
+    'needs_review' => 'needs_review',
+  );
+  $handler->display->display_options['filters']['state']['group'] = 1;
+  $handler->display->display_options['filters']['state']['exposed'] = TRUE;
+  $handler->display->display_options['filters']['state']['expose']['operator_id'] = 'state_op';
+  $handler->display->display_options['filters']['state']['expose']['label'] = 'State';
+  $handler->display->display_options['filters']['state']['expose']['operator'] = 'state_op';
+  $handler->display->display_options['filters']['state']['expose']['identifier'] = 'state';
+  $handler->display->display_options['filters']['state']['expose']['remember'] = TRUE;
+  $handler->display->display_options['filters']['state']['expose']['reduce'] = TRUE;
+  $handler->display->display_options['path'] = 'admin/workbench/my/drafts';
+  $handler->display->display_options['menu']['type'] = 'tab';
+  $handler->display->display_options['menu']['title'] = 'My drafts';
+  $handler->display->display_options['menu']['weight'] = -5;
+  $export['wcm_workbench_moderation'] = $view;
+
   return $export;
 }
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_admin/CHANGELOG.txt b/profiles/wcm_base/modules/panopoly/panopoly_admin/CHANGELOG.txt
index ea66f369..95b2d781 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_admin/CHANGELOG.txt
+++ b/profiles/wcm_base/modules/panopoly/panopoly_admin/CHANGELOG.txt
@@ -1,3 +1,11 @@
+7.x-1.43, 2017-02-22
+-------------------
+- No changes since last release.
+
+7.x-1.42, 2017-02-17
+-------------------
+- No changes since last release.
+
 Panopoly Admin 7.x-1.41, 2016-11-17
 ----------------------------
 - No changes since last release.
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_admin/panopoly_admin.info b/profiles/wcm_base/modules/panopoly/panopoly_admin/panopoly_admin.info
index 27b7f23a..6ae88f4c 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_admin/panopoly_admin.info
+++ b/profiles/wcm_base/modules/panopoly/panopoly_admin/panopoly_admin.info
@@ -37,9 +37,9 @@ features[page_manager_pages][] = panopoly_admin_layout_library
 features[page_manager_pages][] = panopoly_admin_page_library
 features[page_manager_pages][] = panopoly_admin_pane_library
 
-; Information added by Drupal.org packaging script on 2016-11-17
-version = "7.x-1.41"
+; Information added by Drupal.org packaging script on 2017-02-23
+version = "7.x-1.43"
 core = "7.x"
 project = "panopoly_admin"
-datestamp = "1479408704"
+datestamp = "1487817492"
 
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_core/CHANGELOG.txt b/profiles/wcm_base/modules/panopoly/panopoly_core/CHANGELOG.txt
index cfdb3626..1acdf699 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_core/CHANGELOG.txt
+++ b/profiles/wcm_base/modules/panopoly/panopoly_core/CHANGELOG.txt
@@ -1,3 +1,17 @@
+7.x-1.43, 2017-02-22
+-------------------
+- Security update to Views 3.15.
+
+7.x-1.42, 2017-02-17
+-------------------
+- Update Media module to 7.x-2.0-rc3.
+- Update CTools to 1.12 and Panels to 3.8.
+- Revert "Issue #2789503 by cboyden, temkin, dsnopek: Update CTools to 1.12 and
+  Panels to 3.8".
+- Update CTools to 1.12 and Panels to 3.8.
+- Update to Pathauto 1.3.
+- Fix tests and 'drush' installation with Drupal 7.50 and greater.
+
 Panopoly Core 7.x-1.41, 2016-11-17
 ---------------------------
 - Add Panelizer patch to make 'administer panelizer' permission work correctly.
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_core/css/panopoly-jquery-ui-theme.css b/profiles/wcm_base/modules/panopoly/panopoly_core/css/panopoly-jquery-ui-theme.css
index ffcfc738..1b092c9e 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_core/css/panopoly-jquery-ui-theme.css
+++ b/profiles/wcm_base/modules/panopoly/panopoly_core/css/panopoly-jquery-ui-theme.css
@@ -52,7 +52,7 @@
 }
 
 .ui-front {
-  z-index: 100;
+  z-index: 10001 !important;
 }
 
 
@@ -283,7 +283,6 @@ button.ui-button::-moz-focus-inner {
   background-color: transparent;
 }
 .ui-dialog .ui-dialog-titlebar {
-  padding: 0;
   position: relative;
   height: 50px;
   font-size: 16px;
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_core/panopoly_core.info b/profiles/wcm_base/modules/panopoly/panopoly_core/panopoly_core.info
index cd26031e..b9effc44 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_core/panopoly_core.info
+++ b/profiles/wcm_base/modules/panopoly/panopoly_core/panopoly_core.info
@@ -80,10 +80,11 @@ features_exclude[variable][panelizer_taxonomy_term:panopoly_categories_default]
 features_exclude[variable][panelizer_taxonomy_term:panopoly_categories_allowed_layouts] = panelizer_taxonomy_term:panopoly_categories_allowed_layouts
 features_exclude[variable][panelizer_taxonomy_term:panopoly_categories_allowed_types] = panelizer_taxonomy_term:panopoly_categories_allowed_types
 features_exclude[variable][panelizer_defaults_taxonomy_term_panopoly_categories] = panelizer_defaults_taxonomy_term_panopoly_categories
+features_exclude[variable][pathauto_taxonomy_term_panopoly_categories_pattern] = pathauto_taxonomy_term_panopoly_categories_pattern
 
-; Information added by Drupal.org packaging script on 2016-11-17
-version = "7.x-1.41"
+; Information added by Drupal.org packaging script on 2017-02-23
+version = "7.x-1.43"
 core = "7.x"
 project = "panopoly_core"
-datestamp = "1479408715"
+datestamp = "1487817502"
 
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_core/panopoly_core.make b/profiles/wcm_base/modules/panopoly/panopoly_core/panopoly_core.make
index d185047a..dccc501f 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_core/panopoly_core.make
+++ b/profiles/wcm_base/modules/panopoly/panopoly_core/panopoly_core.make
@@ -5,14 +5,15 @@ core = 7.x
 
 ; Panels and Chaos Tools Magic
 
-projects[ctools][version] = 1.9
+projects[ctools][version] = 1.12
 projects[ctools][subdir] = contrib
-projects[ctools][patch][2209775] = https://www.drupal.org/files/issues/ctools-readd_access_callback_params-2209775-24.patch
 projects[ctools][patch][2607626] = https://www.drupal.org/files/issues/ctools-close-modal-2607626-5.patch
+projects[ctools][patch][2787045] = https://www.drupal.org/files/issues/ctools-jquery_compatibility-2787045-14.patch
 
-projects[panels][version] = 3.7
+projects[panels][version] = 3.8
 projects[panels][subdir] = contrib
-projects[panels][patch][2787637] = https://www.drupal.org/files/issues/panels-storage-alt-task-2787637-6.patch
+projects[panels][patch][2790075] = https://www.drupal.org/files/issues/not_authorized_when-2790075-26.patch
+projects[panels][patch][2479879] = https://www.drupal.org/files/issues/panels-revert_allowed_types_to_variable-2479879-37.patch
 
 projects[panels_breadcrumbs][version] = 2.2
 projects[panels_breadcrumbs][subdir] = contrib
@@ -33,7 +34,7 @@ projects[fape][subdir] = contrib
 
 ; Views Magic
 
-projects[views][version] = 3.14
+projects[views][version] = 3.15
 projects[views][subdir] = contrib
 projects[views][patch][2037469] = http://drupal.org/files/views-exposed-sorts-2037469-1.patch
 
@@ -48,9 +49,8 @@ projects[views_bulk_operations][subdir] = contrib
 
 ; The Usual Suspects
 
-projects[pathauto][version] = 1.2
+projects[pathauto][version] = 1.3
 projects[pathauto][subdir] = contrib
-projects[pathauto][patch][936222] = http://drupal.org/files/issues/pathauto-persist-936222-195-pathauto-state.patch
 
 projects[token][version] = 1.6
 projects[token][subdir] = contrib
@@ -83,6 +83,7 @@ projects[link][subdir] = contrib
 
 projects[apps][version] = 1.0
 projects[apps][subdir] = contrib
+projects[apps][patch][2753413] = https://www.drupal.org/files/issues/apps-manifest-2753413-3.patch
 
 projects[features][version] = 2.10
 projects[features][subdir] = contrib
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_magic/CHANGELOG.txt b/profiles/wcm_base/modules/panopoly/panopoly_magic/CHANGELOG.txt
index 27b8cc8a..503881d0 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_magic/CHANGELOG.txt
+++ b/profiles/wcm_base/modules/panopoly/panopoly_magic/CHANGELOG.txt
@@ -1,3 +1,12 @@
+7.x-1.43, 2017-02-22
+-------------------
+- No changes since last release.
+
+7.x-1.42, 2017-02-17
+-------------------
+- Panopoly Magic live preview does not render field collections.
+- Preview doesn't refresh after link is inserted into field with Linkit.
+
 Panopoly Magic 7.x-1.41, 2016-11-17
 ----------------------------
 - Redirected to ajax endpoint when editing with IPE.
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_magic/panopoly-magic.js b/profiles/wcm_base/modules/panopoly/panopoly_magic/panopoly-magic.js
index 265b2a78..0bbf783e 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_magic/panopoly-magic.js
+++ b/profiles/wcm_base/modules/panopoly/panopoly_magic/panopoly-magic.js
@@ -34,6 +34,10 @@
   // Used to make sure we don't wrap Drupal.wysiwygAttach() more than once.
   var wrappedWysiwygAttach = false;
 
+  // Used to make sure we don't wrap insertLink() on the Linkit field helper
+  // more than once.
+  var wrappedLinkitField = false;
+
   // Triggers the CTools autosubmit on the given form. If timeout is passed,
   // it'll set a timeout to do the actual submit rather than calling it directly
   // and return the timer handle.
@@ -124,6 +128,18 @@
     };
   }
 
+  // Used to wrap a function with an afterFunc (we use it for wrapping
+  // insertLink() on the Linkit field helper);
+  function wrapFunctionAfter(parent, name, afterFunc) {
+    var originalFunc = parent[name];
+    parent[name] = function () {
+      var retval = originalFunc.apply(this, arguments);
+      afterFunc.apply(this, arguments);
+      return retval;
+    };
+  }
+
+
   /**
    * Improves the Auto Submit Experience for CTools Modals
    */
@@ -225,6 +241,18 @@
       // Prevent ctools auto-submit from firing when changing text formats.
       $(':input.filter-list').addClass('ctools-auto-submit-exclude');
 
+      // Handle Linkit fields.
+      if (!wrappedLinkitField && typeof Drupal.linkit !== 'undefined') {
+        var linkitFieldHelper = Drupal.linkit.getDialogHelper('field');
+        if (typeof linkitFieldHelper !== 'undefined') {
+          wrapFunctionAfter(linkitFieldHelper, 'insertLink', function (data) {
+            var element = document.getElementById(Drupal.settings.linkit.currentInstance.source);
+            triggerSubmit(element.form);
+          });
+          wrappedLinkitField = true;
+        }
+      }
+
     }
   }
 })(jQuery);
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_magic/panopoly_magic.info b/profiles/wcm_base/modules/panopoly/panopoly_magic/panopoly_magic.info
index 65813939..42faec4e 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_magic/panopoly_magic.info
+++ b/profiles/wcm_base/modules/panopoly/panopoly_magic/panopoly_magic.info
@@ -15,9 +15,9 @@ stylesheets[all][] = css/panopoly-modal.css
 features[features_api][] = api:2
 files[] = plugins/views/panopoly_magic_plugin_display_panel_pane.inc
 
-; Information added by Drupal.org packaging script on 2016-11-17
-version = "7.x-1.41"
+; Information added by Drupal.org packaging script on 2017-02-23
+version = "7.x-1.43"
 core = "7.x"
 project = "panopoly_magic"
-datestamp = "1479408750"
+datestamp = "1487817533"
 
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_magic/panopoly_magic.module b/profiles/wcm_base/modules/panopoly/panopoly_magic/panopoly_magic.module
index a7499830..676ab68d 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_magic/panopoly_magic.module
+++ b/profiles/wcm_base/modules/panopoly/panopoly_magic/panopoly_magic.module
@@ -379,9 +379,17 @@ function panopoly_magic_form_alter(&$form, &$form_state, $form_id) {
           $entity->fpid = NULL;
         }
 
+        // Process any field collection fields that may be present.
+        $field_collection_fields = _panopoly_magic_process_field_collection_fields('fieldable_panels_pane', $entity->bundle, $entity, $form, $form_state);
+
         field_attach_form_validate('fieldable_panels_pane', $entity, $form, $form_state);
         field_attach_submit('fieldable_panels_pane', $entity, $form, $form_state);
 
+        // Add back any field collection fields.
+        foreach ($field_collection_fields as $field_collection_field => $field_collection_value) {
+          $entity->$field_collection_field = $field_collection_value;
+        }
+
         // Set the callback to use for rendering the preview.
         $preview_callback = 'panopoly_magic_render_fieldable_panels_pane_preview';
 
@@ -602,6 +610,50 @@ function _panopoly_magic_add_path_to_ajax($element) {
   }
 }
 
+/**
+ * Process any field collection fields, returning psuedo values for them.
+ */
+function _panopoly_magic_process_field_collection_fields($entity_type, $bundle, $entity, $form, &$form_state) {
+  $field_collection_fields = array();
+
+  $instances = field_info_instances($entity_type, $bundle);
+  foreach ($instances as $instance) {
+    $field_name = $instance['field_name'];
+    $field = field_info_field($field_name);
+    if ($field['type'] == 'field_collection') {
+      $langcode = entity_language($entity_type, $entity);
+      if (!$langcode) {
+        $langcode = LANGUAGE_NONE;
+      }
+
+      foreach (element_children($form[$field_name][$langcode]) as $index) {
+        // Only address the numeric children.
+        if (!is_numeric($index)) {
+          continue;
+        }
+        $element = $form[$field_name][$langcode][$index];
+
+        // Create a new field collection entity with the values.
+        $field_collection_item = entity_create('field_collection_item', array('field_name' => $field_name));
+        $field_collection_item->setHostEntity($entity_type, $entity, $langcode, FALSE);
+        field_attach_form_validate('field_collection_item', $field_collection_item, $element, $form_state);
+        field_attach_submit('field_collection_item', $field_collection_item, $element, $form_state);
+        _field_invoke_multiple('load', 'field_collection_item', array($field_collection_item->item_id => $field_collection_item));
+
+        // Stash it for later use.
+        $field_collection_fields[$field_name][$langcode][] = array(
+          'entity' => $field_collection_item,
+        );
+      }
+
+      // Clear out the field so the values don't get submitted.
+      $entity->$field_name[$langcode] = array();
+    }
+  }
+
+  return $field_collection_fields;
+}
+
 /**
  * Ajax callback that just returns the rendered preview.
  */
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_pages/CHANGELOG.txt b/profiles/wcm_base/modules/panopoly/panopoly_pages/CHANGELOG.txt
index 14fe3bf1..b34a4016 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_pages/CHANGELOG.txt
+++ b/profiles/wcm_base/modules/panopoly/panopoly_pages/CHANGELOG.txt
@@ -1,3 +1,11 @@
+7.x-1.43, 2017-02-22
+-------------------
+- No changes since last release.
+
+7.x-1.42, 2017-02-17
+-------------------
+- Update to Pathauto 1.3.
+
 Panopoly Pages 7.x-1.41, 2016-11-17
 ----------------------------
 - No changes since last release.
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_pages/panopoly_pages.info b/profiles/wcm_base/modules/panopoly/panopoly_pages/panopoly_pages.info
index eda62262..b1e374e0 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_pages/panopoly_pages.info
+++ b/profiles/wcm_base/modules/panopoly/panopoly_pages/panopoly_pages.info
@@ -77,10 +77,13 @@ features_exclude[variable][panelizer_node:panopoly_landing_page_default] = panel
 features_exclude[variable][panelizer_node:panopoly_page_allowed_layouts] = panelizer_node:panopoly_page_allowed_layouts
 features_exclude[variable][panelizer_node:panopoly_page_allowed_types] = panelizer_node:panopoly_page_allowed_types
 features_exclude[variable][panelizer_node:panopoly_page_default] = panelizer_node:panopoly_page_default
+features_exclude[variable][pathauto_node_panopoly_landing_page_pattern] = pathauto_node_panopoly_landing_page_pattern
+features_exclude[variable][pathauto_node_panopoly_page_pattern] = pathauto_node_panopoly_page_pattern
+features_exclude[variable][pathauto_taxonomy_term_panopoly_categories_pattern] = pathauto_taxonomy_term_panopoly_categories_pattern
 
-; Information added by Drupal.org packaging script on 2016-11-17
-version = "7.x-1.41"
+; Information added by Drupal.org packaging script on 2017-02-23
+version = "7.x-1.43"
 core = "7.x"
 project = "panopoly_pages"
-datestamp = "1479408760"
+datestamp = "1487817545"
 
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_search/CHANGELOG.txt b/profiles/wcm_base/modules/panopoly/panopoly_search/CHANGELOG.txt
index 6ee02b05..2839f940 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_search/CHANGELOG.txt
+++ b/profiles/wcm_base/modules/panopoly/panopoly_search/CHANGELOG.txt
@@ -1,3 +1,11 @@
+7.x-1.43, 2017-02-22
+-------------------
+- No changes since last release.
+
+7.x-1.42, 2017-02-17
+-------------------
+- Fix tests and 'drush' installation with Drupal 7.50 and greater.
+
 Panopoly Search 7.x-1.41, 2016-11-17
 -----------------------------
 - SolrPhpClient cannot be downloaded.
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_search/panopoly_search.info b/profiles/wcm_base/modules/panopoly/panopoly_search/panopoly_search.info
index 5262a7b0..82640cb2 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_search/panopoly_search.info
+++ b/profiles/wcm_base/modules/panopoly/panopoly_search/panopoly_search.info
@@ -54,9 +54,9 @@ features[variable][] = search_cron_limit
 features[views_view][] = panopoly_database_search
 features[views_view][] = panopoly_search
 
-; Information added by Drupal.org packaging script on 2016-11-17
-version = "7.x-1.41"
+; Information added by Drupal.org packaging script on 2017-02-23
+version = "7.x-1.43"
 core = "7.x"
 project = "panopoly_search"
-datestamp = "1479408770"
+datestamp = "1487817557"
 
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_search/panopoly_search.make b/profiles/wcm_base/modules/panopoly/panopoly_search/panopoly_search.make
index d8084c51..dac0834b 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_search/panopoly_search.make
+++ b/profiles/wcm_base/modules/panopoly/panopoly_search/panopoly_search.make
@@ -10,6 +10,7 @@ projects[facetapi][subdir] = contrib
 
 projects[search_api][version] = 1.18
 projects[search_api][subdir] = contrib
+projects[search_api][patch][2838075] = https://www.drupal.org/files/issues/search_api-missing-module-2838075-2.patch
 
 projects[search_api_solr][version] = 1.10
 projects[search_api_solr][subdir] = contrib
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_test/.gitignore b/profiles/wcm_base/modules/panopoly/panopoly_test/.gitignore
index ec14d1e0..9c355d8b 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_test/.gitignore
+++ b/profiles/wcm_base/modules/panopoly/panopoly_test/.gitignore
@@ -1,4 +1,5 @@
 behat.yml
 composer.phar
+composer.lock
 bin
 vendor
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_test/CHANGELOG.txt b/profiles/wcm_base/modules/panopoly/panopoly_test/CHANGELOG.txt
index e83c5762..8122e9ba 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_test/CHANGELOG.txt
+++ b/profiles/wcm_base/modules/panopoly/panopoly_test/CHANGELOG.txt
@@ -1,3 +1,16 @@
+7.x-1.43, 2017-02-22
+-------------------
+- No changes since last release.
+
+7.x-1.42, 2017-02-17
+-------------------
+- Rename 'tests' directory to 'behat'.
+- Add composer.lock to .gitignore in panopoly_test.
+- Upload screenshots to imgur on failed tests.
+- Update Behat Drupal extension to 3.2.2.
+- Use linkit on path for "Make title a link" for all FPP widgets.
+- Use linkit on Spotlight.
+
 Panopoly Test 7.x-1.41, 2016-11-17
 ---------------------------
 - Switch Image widget to use Media Browser.
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_test/tests/behat.common.yml b/profiles/wcm_base/modules/panopoly/panopoly_test/behat/behat.common.yml
similarity index 100%
rename from profiles/wcm_base/modules/panopoly/panopoly_test/tests/behat.common.yml
rename to profiles/wcm_base/modules/panopoly/panopoly_test/behat/behat.common.yml
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_test/tests/behat.template.yml b/profiles/wcm_base/modules/panopoly/panopoly_test/behat/behat.template.yml
similarity index 100%
rename from profiles/wcm_base/modules/panopoly/panopoly_test/tests/behat.template.yml
rename to profiles/wcm_base/modules/panopoly/panopoly_test/behat/behat.template.yml
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_test/tests/composer.json b/profiles/wcm_base/modules/panopoly/panopoly_test/behat/composer.json
similarity index 57%
rename from profiles/wcm_base/modules/panopoly/panopoly_test/tests/composer.json
rename to profiles/wcm_base/modules/panopoly/panopoly_test/behat/composer.json
index d42dea98..20992ddd 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_test/tests/composer.json
+++ b/profiles/wcm_base/modules/panopoly/panopoly_test/behat/composer.json
@@ -1,7 +1,7 @@
 {
   "require": {
-    "drupal/drupal-extension": "3.0.10"
-},
+    "drupal/drupal-extension": "3.2.2"
+  },
   "config": {
     "bin-dir": "bin/"
   }
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/advanced_widgets.feature b/profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/advanced_widgets.feature
similarity index 100%
rename from profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/advanced_widgets.feature
rename to profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/advanced_widgets.feature
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/basic_ipe.feature b/profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/basic_ipe.feature
similarity index 100%
rename from profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/basic_ipe.feature
rename to profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/basic_ipe.feature
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/bootstrap/FeatureContext.php b/profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/bootstrap/FeatureContext.php
similarity index 100%
rename from profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/bootstrap/FeatureContext.php
rename to profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/bootstrap/FeatureContext.php
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/contentitem_widget.feature b/profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/contentitem_widget.feature
similarity index 100%
rename from profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/contentitem_widget.feature
rename to profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/contentitem_widget.feature
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/contentlist_widget.feature b/profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/contentlist_widget.feature
similarity index 100%
rename from profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/contentlist_widget.feature
rename to profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/contentlist_widget.feature
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/contentpage.feature b/profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/contentpage.feature
similarity index 100%
rename from profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/contentpage.feature
rename to profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/contentpage.feature
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/demo.feature b/profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/demo.feature
similarity index 100%
rename from profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/demo.feature
rename to profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/demo.feature
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/file_widget.feature b/profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/file_widget.feature
similarity index 100%
rename from profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/file_widget.feature
rename to profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/file_widget.feature
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/fpp_linkit.feature b/profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/fpp_linkit.feature
new file mode 100644
index 00000000..966c1905
--- /dev/null
+++ b/profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/fpp_linkit.feature
@@ -0,0 +1,21 @@
+Feature: Use linkit for title links on any widget
+  In order to make widget titles into links
+  As a site builder
+  I need to be able to use the Linkit function
+
+  # NOTE: we use the @panopoly_wysiwyg tag because that is where Linkit comes
+  #       from in a default install.
+  @api @javascript @panopoly_widgets @panopoly_wysiwyg
+  Scenario: Linkit should work when making the title a link
+    Given I am logged in as a user with the "administrator" role
+      And Panopoly magic live previews are disabled
+      And I am viewing a landing page
+    When I customize this page with the Panels IPE
+      And I click "Add new pane"
+      And I click "Add text" in the "CTools modal" region
+    Then I should see "Configure new Add text"
+    When I fill in "Title" with "Widget title 1"
+      And I check the box "Make title a link"
+      And I click "Search for existing content" in the "CTools modal" region
+    Then I should see "Linkit"
+
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/help.feature b/profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/help.feature
similarity index 100%
rename from profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/help.feature
rename to profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/help.feature
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/hidden_view_mode_options.feature b/profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/hidden_view_mode_options.feature
similarity index 100%
rename from profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/hidden_view_mode_options.feature
rename to profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/hidden_view_mode_options.feature
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/image_widget.feature b/profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/image_widget.feature
similarity index 97%
rename from profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/image_widget.feature
rename to profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/image_widget.feature
index 1156ceab..2ca7eea4 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/image_widget.feature
+++ b/profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/image_widget.feature
@@ -87,6 +87,6 @@ Feature: Add image widget
       And I click "Add new pane"
       And I click "Add image" in the "CTools modal" region
     Then I should see "Configure new Add image"
-    When I click "Search for existing content" in the "CTools modal" region
+    When I click the 2nd "Search for existing content" in the "CTools modal" region
     Then I should see "Linkit"
 
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/landingpage.feature b/profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/landingpage.feature
similarity index 100%
rename from profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/landingpage.feature
rename to profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/landingpage.feature
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/linkit.feature b/profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/linkit.feature
similarity index 100%
rename from profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/linkit.feature
rename to profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/linkit.feature
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/links_widget.feature b/profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/links_widget.feature
similarity index 100%
rename from profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/links_widget.feature
rename to profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/links_widget.feature
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/login.feature b/profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/login.feature
similarity index 100%
rename from profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/login.feature
rename to profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/login.feature
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/managed_file.feature b/profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/managed_file.feature
similarity index 100%
rename from profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/managed_file.feature
rename to profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/managed_file.feature
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/maps_widget.feature b/profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/maps_widget.feature
similarity index 100%
rename from profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/maps_widget.feature
rename to profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/maps_widget.feature
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/panopoly_core_dependencies.feature b/profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/panopoly_core_dependencies.feature
similarity index 100%
rename from profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/panopoly_core_dependencies.feature
rename to profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/panopoly_core_dependencies.feature
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/panopoly_magic/add_content_preview.feature b/profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/panopoly_magic/add_content_preview.feature
similarity index 100%
rename from profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/panopoly_magic/add_content_preview.feature
rename to profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/panopoly_magic/add_content_preview.feature
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/panopoly_magic/display_type.feature b/profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/panopoly_magic/display_type.feature
similarity index 100%
rename from profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/panopoly_magic/display_type.feature
rename to profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/panopoly_magic/display_type.feature
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/panopoly_magic/fape.feature b/profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/panopoly_magic/fape.feature
similarity index 100%
rename from profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/panopoly_magic/fape.feature
rename to profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/panopoly_magic/fape.feature
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/panopoly_magic/form_improvements.feature b/profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/panopoly_magic/form_improvements.feature
similarity index 100%
rename from profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/panopoly_magic/form_improvements.feature
rename to profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/panopoly_magic/form_improvements.feature
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/panopoly_magic/livepreview.feature b/profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/panopoly_magic/livepreview.feature
similarity index 100%
rename from profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/panopoly_magic/livepreview.feature
rename to profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/panopoly_magic/livepreview.feature
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/panopoly_magic/seldom_used_panes.feature b/profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/panopoly_magic/seldom_used_panes.feature
similarity index 100%
rename from profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/panopoly_magic/seldom_used_panes.feature
rename to profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/panopoly_magic/seldom_used_panes.feature
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/panopoly_magic/view_modes.feature b/profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/panopoly_magic/view_modes.feature
similarity index 100%
rename from profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/panopoly_magic/view_modes.feature
rename to profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/panopoly_magic/view_modes.feature
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/pathauto_administrator.feature b/profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/pathauto_administrator.feature
similarity index 100%
rename from profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/pathauto_administrator.feature
rename to profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/pathauto_administrator.feature
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/pathauto_editor.feature b/profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/pathauto_editor.feature
similarity index 100%
rename from profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/pathauto_editor.feature
rename to profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/pathauto_editor.feature
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/search.feature b/profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/search.feature
similarity index 100%
rename from profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/search.feature
rename to profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/search.feature
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/spotlight_widget.feature b/profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/spotlight_widget.feature
similarity index 85%
rename from profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/spotlight_widget.feature
rename to profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/spotlight_widget.feature
index 0b01e50b..d9e7a205 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/spotlight_widget.feature
+++ b/profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/spotlight_widget.feature
@@ -39,3 +39,10 @@ Feature: Add spotlight widget
       | Description                                | Testing description |
       And I press "edit-return"
     Then I should see "Image field is required"
+
+  # NOTE: we use the @panopoly_wysiwyg tag because that is where Linkit comes
+  #       from in a default install
+  @api @javascript @panopoly_widgets @panopoly_wysiwig
+  Scenario: Linkit is enabled on the link field
+    When I click the 2nd "Search for existing content" in the "CTools modal" region
+    Then I should see "Linkit"
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/submenu_widget.feature b/profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/submenu_widget.feature
similarity index 100%
rename from profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/submenu_widget.feature
rename to profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/submenu_widget.feature
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/table_widget.feature b/profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/table_widget.feature
similarity index 100%
rename from profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/table_widget.feature
rename to profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/table_widget.feature
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/text_widget.feature b/profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/text_widget.feature
similarity index 100%
rename from profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/text_widget.feature
rename to profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/text_widget.feature
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/video_widget.feature b/profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/video_widget.feature
similarity index 100%
rename from profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/video_widget.feature
rename to profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/video_widget.feature
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/wysiwyg.feature b/profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/wysiwyg.feature
similarity index 100%
rename from profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/wysiwyg.feature
rename to profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/wysiwyg.feature
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/wysiwyg_media.feature b/profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/wysiwyg_media.feature
similarity index 100%
rename from profiles/wcm_base/modules/panopoly/panopoly_test/tests/features/wysiwyg_media.feature
rename to profiles/wcm_base/modules/panopoly/panopoly_test/behat/features/wysiwyg_media.feature
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_test/tests/steps/panopoly_test.behat.inc b/profiles/wcm_base/modules/panopoly/panopoly_test/behat/steps/panopoly_test.behat.inc
similarity index 89%
rename from profiles/wcm_base/modules/panopoly/panopoly_test/tests/steps/panopoly_test.behat.inc
rename to profiles/wcm_base/modules/panopoly/panopoly_test/behat/steps/panopoly_test.behat.inc
index 51763fe3..01fb66b4 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_test/tests/steps/panopoly_test.behat.inc
+++ b/profiles/wcm_base/modules/panopoly/panopoly_test/behat/steps/panopoly_test.behat.inc
@@ -10,6 +10,8 @@ use Drupal\Component\Utility\Random;
 use Drupal\DrupalExtension\Context\RawDrupalContext;
 use Behat\Behat\Hook\Scope\BeforeScenarioScope;
 use Drupal\DrupalExtension\Hook\Scope\AfterUserCreateScope;
+use Behat\Testwork\Tester\Result\TestResult;
+use Behat\Mink\Exception\UnsupportedDriverActionException;
 
 class TestSubContext extends RawDrupalContext implements DrupalSubContextInterface {
 
@@ -130,7 +132,7 @@ class TestSubContext extends RawDrupalContext implements DrupalSubContextInterfa
    *
    * @AfterStep
    */
-  public function afterStep($event) {
+  public function afterStepWaitForJavascript($event) {
     if (isset($this->javascript) && $this->javascript && empty($this->iframe)) {
       $text = $event->getStep()->getText();
       if (preg_match('/(follow|press|click|submit|viewing|visit|reload|attach)/i', $text)) {
@@ -139,6 +141,74 @@ class TestSubContext extends RawDrupalContext implements DrupalSubContextInterfa
     }
   }
 
+  /**
+   * After a failed step, upload a screenshot.
+   *
+   * @AfterStep
+   */
+  public function afterStepTakeScreenshot($event) {
+    if ($event->getTestResult()->getResultCode() === TestResult::FAILED && ($imgur_client_id = getenv('IMGUR_CLIENT_ID')))  {
+      $driver = $this->getSession()->getDriver();
+
+      // Get the screenshot if the driver supports it.
+      try {
+        $image = $driver->getScreenshot();
+      }
+      catch (UnsupportedDriverActionException $e) {
+        return;
+      }
+
+      // Upload the image.
+      $title = preg_replace('/[^a-zA-Z0-9\._-]/', '_', $event->getStep()->getText());
+      $url = $this->uploadScreenshot($image, $title, $imgur_client_id);
+      // @todo Is there a Behat API we can use to write to the screen?
+      print "Screenshot uploaded to $url\n";
+    }
+  }
+
+  /**
+   * Uploads a screenshot to imgur.
+   *
+   * @param string $image
+   *   The image data.
+   * @param string $title
+   *   The image title.
+   * @param string $imgur_client_id
+   *   The Client ID for your application registered with imgur
+   *
+   * @see https://api.imgur.com/oauth2
+   */
+  protected function uploadScreenshot($image, $title, $imgur_client_id) {
+    // @todo This should use Guzzle rather than curl directly
+    $curl = curl_init();
+    curl_setopt_array($curl, array(
+      CURLOPT_URL => "https://api.imgur.com/3/image",
+      CURLOPT_RETURNTRANSFER => true,
+      CURLOPT_ENCODING => "",
+      CURLOPT_MAXREDIRS => 10,
+      CURLOPT_TIMEOUT => 30,
+      CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
+      CURLOPT_CUSTOMREQUEST => "POST",
+      CURLOPT_POSTFIELDS => "image=".urlencode(base64_encode($image))."&title=$title",
+      CURLOPT_HTTPHEADER => array(
+        "authorization: Client-ID $imgur_client_id",
+        "cache-control: no-cache",
+        "content-type: application/x-www-form-urlencoded"
+      ),
+    ));
+
+    $response = curl_exec($curl);
+    $error = curl_error($curl);
+    curl_close($curl);
+
+    $payload = json_decode($response);
+    if ($error || property_exists($payload, 'error')) {
+      return;
+    }
+
+    return $payload->data->link;
+  }
+
   /**
    * Convert escaped characters in arguments.
    *
@@ -772,4 +842,30 @@ class TestSubContext extends RawDrupalContext implements DrupalSubContextInterfa
 
   }
 
+  /**
+   * @When /^I click the (?P<count>\d+)(?:st|nd|rd|th) "(?P<link>[^"]*)" in the "(?P<region>[^"]*)" region$/
+   */
+  public function clickNthLink($count, $link, $region) {
+    $session = $this->getSession();
+    $region = $session->getPage()->find('region', $region);
+
+    // We index from zero, rather than one.
+    $index = $count - 1;
+
+    foreach ($region->findAll('xpath', '//a[text()="' . $link . '"]') as $element) {
+      if ($index == 0) {
+        $element->click();
+        return;
+      }
+      elseif ($index < 0) {
+        break;
+      }
+      else {
+        $index--;
+      }
+    }
+
+    throw new \Exception(sprintf("Cannot find link with text '%s' and index %d", $link, $count));
+  }
+
 }
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_test/tests/steps/panopoly_test_fpp.behat.inc b/profiles/wcm_base/modules/panopoly/panopoly_test/behat/steps/panopoly_test_fpp.behat.inc
similarity index 100%
rename from profiles/wcm_base/modules/panopoly/panopoly_test/tests/steps/panopoly_test_fpp.behat.inc
rename to profiles/wcm_base/modules/panopoly/panopoly_test/behat/steps/panopoly_test_fpp.behat.inc
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_test/tests/steps/panopoly_test_media.behat.inc b/profiles/wcm_base/modules/panopoly/panopoly_test/behat/steps/panopoly_test_media.behat.inc
similarity index 100%
rename from profiles/wcm_base/modules/panopoly/panopoly_test/tests/steps/panopoly_test_media.behat.inc
rename to profiles/wcm_base/modules/panopoly/panopoly_test/behat/steps/panopoly_test_media.behat.inc
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_test/tests/steps/panopoly_test_panels.behat.inc b/profiles/wcm_base/modules/panopoly/panopoly_test/behat/steps/panopoly_test_panels.behat.inc
similarity index 100%
rename from profiles/wcm_base/modules/panopoly/panopoly_test/tests/steps/panopoly_test_panels.behat.inc
rename to profiles/wcm_base/modules/panopoly/panopoly_test/behat/steps/panopoly_test_panels.behat.inc
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_test/tests/steps/panopoly_test_wysiwyg.behat.inc b/profiles/wcm_base/modules/panopoly/panopoly_test/behat/steps/panopoly_test_wysiwyg.behat.inc
similarity index 100%
rename from profiles/wcm_base/modules/panopoly/panopoly_test/tests/steps/panopoly_test_wysiwyg.behat.inc
rename to profiles/wcm_base/modules/panopoly/panopoly_test/behat/steps/panopoly_test_wysiwyg.behat.inc
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_test/tests/test-lg.png b/profiles/wcm_base/modules/panopoly/panopoly_test/behat/test-lg.png
similarity index 100%
rename from profiles/wcm_base/modules/panopoly/panopoly_test/tests/test-lg.png
rename to profiles/wcm_base/modules/panopoly/panopoly_test/behat/test-lg.png
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_test/tests/test-sm.png b/profiles/wcm_base/modules/panopoly/panopoly_test/behat/test-sm.png
similarity index 100%
rename from profiles/wcm_base/modules/panopoly/panopoly_test/tests/test-sm.png
rename to profiles/wcm_base/modules/panopoly/panopoly_test/behat/test-sm.png
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_test/tests/test.txt b/profiles/wcm_base/modules/panopoly/panopoly_test/behat/test.txt
similarity index 100%
rename from profiles/wcm_base/modules/panopoly/panopoly_test/tests/test.txt
rename to profiles/wcm_base/modules/panopoly/panopoly_test/behat/test.txt
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_test/panopoly_test.info b/profiles/wcm_base/modules/panopoly/panopoly_test/panopoly_test.info
index 6113977c..a90d6166 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_test/panopoly_test.info
+++ b/profiles/wcm_base/modules/panopoly/panopoly_test/panopoly_test.info
@@ -99,9 +99,9 @@ features_exclude[dependencies][panopoly_pages] = panopoly_pages
 features_exclude[dependencies][panelizer] = panelizer
 hidden = 1
 
-; Information added by Drupal.org packaging script on 2016-11-17
-version = "7.x-1.41"
+; Information added by Drupal.org packaging script on 2017-02-23
+version = "7.x-1.43"
 core = "7.x"
 project = "panopoly_test"
-datestamp = "1479408780"
+datestamp = "1487817567"
 
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_test/tests/composer.lock b/profiles/wcm_base/modules/panopoly/panopoly_test/tests/composer.lock
deleted file mode 100644
index f7956a73..00000000
--- a/profiles/wcm_base/modules/panopoly/panopoly_test/tests/composer.lock
+++ /dev/null
@@ -1,1593 +0,0 @@
-{
-    "_readme": [
-        "This file locks the dependencies of your project to a known state",
-        "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
-        "This file is @generated automatically"
-    ],
-    "hash": "d1d0790dc6cb573b31a6316a9af5130c",
-    "packages": [
-        {
-            "name": "behat/behat",
-            "version": "v3.0.15",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/Behat/Behat.git",
-                "reference": "b35ae3d45332d80c532af69cc36f780a9397a996"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/Behat/Behat/zipball/b35ae3d45332d80c532af69cc36f780a9397a996",
-                "reference": "b35ae3d45332d80c532af69cc36f780a9397a996",
-                "shasum": ""
-            },
-            "require": {
-                "behat/gherkin": "~4.3",
-                "behat/transliterator": "~1.0",
-                "ext-mbstring": "*",
-                "php": ">=5.3.3",
-                "symfony/class-loader": "~2.1",
-                "symfony/config": "~2.3",
-                "symfony/console": "~2.1",
-                "symfony/dependency-injection": "~2.1",
-                "symfony/event-dispatcher": "~2.1",
-                "symfony/translation": "~2.3",
-                "symfony/yaml": "~2.1"
-            },
-            "require-dev": {
-                "phpspec/prophecy-phpunit": "~1.0",
-                "phpunit/phpunit": "~4.0",
-                "symfony/process": "~2.1"
-            },
-            "suggest": {
-                "behat/mink-extension": "for integration with Mink testing framework",
-                "behat/symfony2-extension": "for integration with Symfony2 web framework",
-                "behat/yii-extension": "for integration with Yii web framework"
-            },
-            "bin": [
-                "bin/behat"
-            ],
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-0": {
-                    "Behat\\Behat": "src/",
-                    "Behat\\Testwork": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Konstantin Kudryashov",
-                    "email": "ever.zet@gmail.com",
-                    "homepage": "http://everzet.com"
-                }
-            ],
-            "description": "Scenario-oriented BDD framework for PHP 5.3",
-            "homepage": "http://behat.org/",
-            "keywords": [
-                "Agile",
-                "BDD",
-                "ScenarioBDD",
-                "Scrum",
-                "StoryBDD",
-                "User story",
-                "business",
-                "development",
-                "documentation",
-                "examples",
-                "symfony",
-                "testing"
-            ],
-            "time": "2015-02-22 14:10:33"
-        },
-        {
-            "name": "behat/gherkin",
-            "version": "v4.3.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/Behat/Gherkin.git",
-                "reference": "43777c51058b77bcd84a8775b7a6ad05e986b5db"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/Behat/Gherkin/zipball/43777c51058b77bcd84a8775b7a6ad05e986b5db",
-                "reference": "43777c51058b77bcd84a8775b7a6ad05e986b5db",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.1"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "~4.0",
-                "symfony/yaml": "~2.1"
-            },
-            "suggest": {
-                "symfony/yaml": "If you want to parse features, represented in YAML files"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "4.2-dev"
-                }
-            },
-            "autoload": {
-                "psr-0": {
-                    "Behat\\Gherkin": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Konstantin Kudryashov",
-                    "email": "ever.zet@gmail.com",
-                    "homepage": "http://everzet.com"
-                }
-            ],
-            "description": "Gherkin DSL parser for PHP 5.3",
-            "homepage": "http://behat.org/",
-            "keywords": [
-                "BDD",
-                "Behat",
-                "Cucumber",
-                "DSL",
-                "gherkin",
-                "parser"
-            ],
-            "time": "2014-06-06 01:24:32"
-        },
-        {
-            "name": "behat/mink",
-            "version": "v1.6.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/minkphp/Mink.git",
-                "reference": "8b68523a339ec991bcd638b39dc8f04f808da88a"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/minkphp/Mink/zipball/8b68523a339ec991bcd638b39dc8f04f808da88a",
-                "reference": "8b68523a339ec991bcd638b39dc8f04f808da88a",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.1",
-                "symfony/css-selector": "~2.0"
-            },
-            "suggest": {
-                "behat/mink-browserkit-driver": "extremely fast headless driver for Symfony\\Kernel-based apps (Sf2, Silex)",
-                "behat/mink-goutte-driver": "fast headless driver for any app without JS emulation",
-                "behat/mink-selenium2-driver": "slow, but JS-enabled driver for any app (requires Selenium2)",
-                "behat/mink-zombie-driver": "fast and JS-enabled headless driver for any app (requires node.js)"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.6.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Behat\\Mink\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Konstantin Kudryashov",
-                    "email": "ever.zet@gmail.com",
-                    "homepage": "http://everzet.com"
-                }
-            ],
-            "description": "Browser controller/emulator abstraction for PHP",
-            "homepage": "http://mink.behat.org/",
-            "keywords": [
-                "browser",
-                "testing",
-                "web"
-            ],
-            "time": "2015-02-04 17:02:06"
-        },
-        {
-            "name": "behat/mink-browserkit-driver",
-            "version": "v1.2.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/minkphp/MinkBrowserKitDriver.git",
-                "reference": "aed8f4a596b79014a75254c3e337511c33e38cbd"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/minkphp/MinkBrowserKitDriver/zipball/aed8f4a596b79014a75254c3e337511c33e38cbd",
-                "reference": "aed8f4a596b79014a75254c3e337511c33e38cbd",
-                "shasum": ""
-            },
-            "require": {
-                "behat/mink": "~1.6@dev",
-                "php": ">=5.3.1",
-                "symfony/browser-kit": "~2.0",
-                "symfony/dom-crawler": "~2.0"
-            },
-            "require-dev": {
-                "silex/silex": "~1.2"
-            },
-            "type": "mink-driver",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.2.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-0": {
-                    "Behat\\Mink\\Driver": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Konstantin Kudryashov",
-                    "email": "ever.zet@gmail.com",
-                    "homepage": "http://everzet.com"
-                }
-            ],
-            "description": "Symfony2 BrowserKit driver for Mink framework",
-            "homepage": "http://mink.behat.org/",
-            "keywords": [
-                "Mink",
-                "Symfony2",
-                "browser",
-                "testing"
-            ],
-            "time": "2014-09-26 11:35:19"
-        },
-        {
-            "name": "behat/mink-extension",
-            "version": "v2.0.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/Behat/MinkExtension.git",
-                "reference": "06a4cb56614b047d8d15ea5cd392d19fd3d856e8"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/Behat/MinkExtension/zipball/06a4cb56614b047d8d15ea5cd392d19fd3d856e8",
-                "reference": "06a4cb56614b047d8d15ea5cd392d19fd3d856e8",
-                "shasum": ""
-            },
-            "require": {
-                "behat/behat": "~3.0,>=3.0.5",
-                "behat/mink": "~1.5",
-                "php": ">=5.3.2",
-                "symfony/config": "~2.2"
-            },
-            "require-dev": {
-                "behat/mink-goutte-driver": "~1.0",
-                "phpspec/phpspec": "~2.0"
-            },
-            "type": "behat-extension",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-0": {
-                    "Behat\\MinkExtension": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Christophe Coevoet",
-                    "email": "stof@notk.org"
-                },
-                {
-                    "name": "Konstantin Kudryashov",
-                    "email": "ever.zet@gmail.com"
-                }
-            ],
-            "description": "Mink extension for Behat",
-            "homepage": "http://extensions.behat.org/mink",
-            "keywords": [
-                "browser",
-                "gui",
-                "test",
-                "web"
-            ],
-            "time": "2014-09-23 10:59:27"
-        },
-        {
-            "name": "behat/mink-goutte-driver",
-            "version": "v1.1.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/minkphp/MinkGoutteDriver.git",
-                "reference": "2bf327b4166694ecaa8ae7f956cb6ae252ecf03e"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/minkphp/MinkGoutteDriver/zipball/2bf327b4166694ecaa8ae7f956cb6ae252ecf03e",
-                "reference": "2bf327b4166694ecaa8ae7f956cb6ae252ecf03e",
-                "shasum": ""
-            },
-            "require": {
-                "behat/mink": "~1.6@dev",
-                "behat/mink-browserkit-driver": "~1.2@dev",
-                "fabpot/goutte": "~1.0.4|~2.0",
-                "php": ">=5.3.1"
-            },
-            "type": "mink-driver",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.1.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-0": {
-                    "Behat\\Mink\\Driver": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Konstantin Kudryashov",
-                    "email": "ever.zet@gmail.com",
-                    "homepage": "http://everzet.com"
-                }
-            ],
-            "description": "Goutte driver for Mink framework",
-            "homepage": "http://mink.behat.org/",
-            "keywords": [
-                "browser",
-                "goutte",
-                "headless",
-                "testing"
-            ],
-            "time": "2014-10-09 09:21:12"
-        },
-        {
-            "name": "behat/mink-selenium2-driver",
-            "version": "v1.2.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/minkphp/MinkSelenium2Driver.git",
-                "reference": "8018fee80bf6573f909ece3e0dfc07d0eb352210"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/minkphp/MinkSelenium2Driver/zipball/8018fee80bf6573f909ece3e0dfc07d0eb352210",
-                "reference": "8018fee80bf6573f909ece3e0dfc07d0eb352210",
-                "shasum": ""
-            },
-            "require": {
-                "behat/mink": "~1.6@dev",
-                "instaclick/php-webdriver": "~1.1",
-                "php": ">=5.3.1"
-            },
-            "type": "mink-driver",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.2.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-0": {
-                    "Behat\\Mink\\Driver": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Konstantin Kudryashov",
-                    "email": "ever.zet@gmail.com",
-                    "homepage": "http://everzet.com"
-                },
-                {
-                    "name": "Pete Otaqui",
-                    "email": "pete@otaqui.com",
-                    "homepage": "https://github.com/pete-otaqui"
-                }
-            ],
-            "description": "Selenium2 (WebDriver) driver for Mink framework",
-            "homepage": "http://mink.behat.org/",
-            "keywords": [
-                "ajax",
-                "browser",
-                "javascript",
-                "selenium",
-                "testing",
-                "webdriver"
-            ],
-            "time": "2014-09-29 13:12:12"
-        },
-        {
-            "name": "behat/transliterator",
-            "version": "v1.0.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/Behat/Transliterator.git",
-                "reference": "c93521d3462a554332d1ef5bb0e9b5b8ca4106c4"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/Behat/Transliterator/zipball/c93521d3462a554332d1ef5bb0e9b5b8ca4106c4",
-                "reference": "c93521d3462a554332d1ef5bb0e9b5b8ca4106c4",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.3"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0-dev"
-                }
-            },
-            "autoload": {
-                "psr-0": {
-                    "Behat\\Transliterator": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "Artistic-1.0"
-            ],
-            "description": "String transliterator",
-            "keywords": [
-                "i18n",
-                "slug",
-                "transliterator"
-            ],
-            "time": "2014-05-15 22:08:22"
-        },
-        {
-            "name": "drupal/drupal-driver",
-            "version": "v1.0.15",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/jhedstrom/DrupalDriver.git",
-                "reference": "9729a726835d1f3285dba03b7adbd7430d621fa4"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/jhedstrom/DrupalDriver/zipball/9729a726835d1f3285dba03b7adbd7430d621fa4",
-                "reference": "9729a726835d1f3285dba03b7adbd7430d621fa4",
-                "shasum": ""
-            },
-            "require": {
-                "symfony/dependency-injection": "~2.6",
-                "symfony/process": "~2.5"
-            },
-            "require-dev": {
-                "mockery/mockery": "dev-master",
-                "phpspec/phpspec": "~2.0",
-                "phpunit/phpunit": "~4.0"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-0": {
-                    "Drupal\\Component": "src/",
-                    "Drupal\\Driver": "src/",
-                    "Drupal\\Tests\\Driver": "tests/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "GPL-2.0+"
-            ],
-            "authors": [
-                {
-                    "name": "Jonathan Hedstrom",
-                    "email": "jhedstrom@gmail.com"
-                }
-            ],
-            "description": "A collection of reusable Drupal drivers",
-            "homepage": "http://github.com/jhedstrom/DrupalDriver",
-            "keywords": [
-                "drupal",
-                "test",
-                "web"
-            ],
-            "time": "2015-06-01 18:16:33"
-        },
-        {
-            "name": "drupal/drupal-extension",
-            "version": "v3.0.10",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/jhedstrom/drupalextension.git",
-                "reference": "e5c5b8bf24f583afe4cf5392eb491bb64f3efc4e"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/jhedstrom/drupalextension/zipball/e5c5b8bf24f583afe4cf5392eb491bb64f3efc4e",
-                "reference": "e5c5b8bf24f583afe4cf5392eb491bb64f3efc4e",
-                "shasum": ""
-            },
-            "require": {
-                "behat/behat": "~3.0,>=3.0.5",
-                "behat/mink": "~1.5",
-                "behat/mink-extension": "~2.0",
-                "behat/mink-goutte-driver": "~1.0",
-                "behat/mink-selenium2-driver": "~1.1",
-                "drupal/drupal-driver": "~1.0"
-            },
-            "require-dev": {
-                "phpspec/phpspec": "~2.0",
-                "phpunit/phpunit": "3.7.*"
-            },
-            "type": "behat-extension",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-0": {
-                    "Drupal\\Drupal": "src/",
-                    "Drupal\\Exception": "src/",
-                    "Drupal\\DrupalExtension": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "GPL-2.0+"
-            ],
-            "authors": [
-                {
-                    "name": "Jonathan Hedstrom",
-                    "email": "jhedstrom@gmail.com"
-                }
-            ],
-            "description": "Drupal extension for Behat",
-            "homepage": "http://drupal.org/project/drupalextension",
-            "keywords": [
-                "drupal",
-                "test",
-                "web"
-            ],
-            "time": "2015-05-06 20:37:38"
-        },
-        {
-            "name": "fabpot/goutte",
-            "version": "v1.0.7",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/FriendsOfPHP/Goutte.git",
-                "reference": "794b196e76bdd37b5155cdecbad311f0a3b07625"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/FriendsOfPHP/Goutte/zipball/794b196e76bdd37b5155cdecbad311f0a3b07625",
-                "reference": "794b196e76bdd37b5155cdecbad311f0a3b07625",
-                "shasum": ""
-            },
-            "require": {
-                "ext-curl": "*",
-                "guzzle/http": "~3.1",
-                "php": ">=5.3.0",
-                "symfony/browser-kit": "~2.1",
-                "symfony/css-selector": "~2.1",
-                "symfony/dom-crawler": "~2.1",
-                "symfony/finder": "~2.1",
-                "symfony/process": "~2.1"
-            },
-            "require-dev": {
-                "guzzle/plugin-history": "~3.1",
-                "guzzle/plugin-mock": "~3.1"
-            },
-            "type": "application",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0-dev"
-                }
-            },
-            "autoload": {
-                "psr-0": {
-                    "Goutte": "."
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                }
-            ],
-            "description": "A simple PHP Web Scraper",
-            "homepage": "https://github.com/fabpot/Goutte",
-            "keywords": [
-                "scraper"
-            ],
-            "time": "2014-10-09 15:52:51"
-        },
-        {
-            "name": "guzzle/common",
-            "version": "v3.9.2",
-            "target-dir": "Guzzle/Common",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/Guzzle3/common.git",
-                "reference": "2e36af7cf2ce3ea1f2d7c2831843b883a8e7b7dc"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/Guzzle3/common/zipball/2e36af7cf2ce3ea1f2d7c2831843b883a8e7b7dc",
-                "reference": "2e36af7cf2ce3ea1f2d7c2831843b883a8e7b7dc",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.2",
-                "symfony/event-dispatcher": ">=2.1"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.7-dev"
-                }
-            },
-            "autoload": {
-                "psr-0": {
-                    "Guzzle\\Common": ""
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "description": "Common libraries used by Guzzle",
-            "homepage": "http://guzzlephp.org/",
-            "keywords": [
-                "collection",
-                "common",
-                "event",
-                "exception"
-            ],
-            "abandoned": "guzzle/guzzle",
-            "time": "2014-08-11 04:32:36"
-        },
-        {
-            "name": "guzzle/http",
-            "version": "v3.9.2",
-            "target-dir": "Guzzle/Http",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/Guzzle3/http.git",
-                "reference": "1e8dd1e2ba9dc42332396f39fbfab950b2301dc5"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/Guzzle3/http/zipball/1e8dd1e2ba9dc42332396f39fbfab950b2301dc5",
-                "reference": "1e8dd1e2ba9dc42332396f39fbfab950b2301dc5",
-                "shasum": ""
-            },
-            "require": {
-                "guzzle/common": "self.version",
-                "guzzle/parser": "self.version",
-                "guzzle/stream": "self.version",
-                "php": ">=5.3.2"
-            },
-            "suggest": {
-                "ext-curl": "*"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.7-dev"
-                }
-            },
-            "autoload": {
-                "psr-0": {
-                    "Guzzle\\Http": ""
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Michael Dowling",
-                    "email": "mtdowling@gmail.com",
-                    "homepage": "https://github.com/mtdowling"
-                }
-            ],
-            "description": "HTTP libraries used by Guzzle",
-            "homepage": "http://guzzlephp.org/",
-            "keywords": [
-                "Guzzle",
-                "client",
-                "curl",
-                "http",
-                "http client"
-            ],
-            "abandoned": "guzzle/guzzle",
-            "time": "2014-08-11 04:32:36"
-        },
-        {
-            "name": "guzzle/parser",
-            "version": "v3.9.2",
-            "target-dir": "Guzzle/Parser",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/Guzzle3/parser.git",
-                "reference": "6874d171318a8e93eb6d224cf85e4678490b625c"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/Guzzle3/parser/zipball/6874d171318a8e93eb6d224cf85e4678490b625c",
-                "reference": "6874d171318a8e93eb6d224cf85e4678490b625c",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.2"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.7-dev"
-                }
-            },
-            "autoload": {
-                "psr-0": {
-                    "Guzzle\\Parser": ""
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "description": "Interchangeable parsers used by Guzzle",
-            "homepage": "http://guzzlephp.org/",
-            "keywords": [
-                "URI Template",
-                "cookie",
-                "http",
-                "message",
-                "url"
-            ],
-            "abandoned": "guzzle/guzzle",
-            "time": "2014-02-05 18:29:46"
-        },
-        {
-            "name": "guzzle/stream",
-            "version": "v3.9.2",
-            "target-dir": "Guzzle/Stream",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/Guzzle3/stream.git",
-                "reference": "60c7fed02e98d2c518dae8f97874c8f4622100f0"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/Guzzle3/stream/zipball/60c7fed02e98d2c518dae8f97874c8f4622100f0",
-                "reference": "60c7fed02e98d2c518dae8f97874c8f4622100f0",
-                "shasum": ""
-            },
-            "require": {
-                "guzzle/common": "self.version",
-                "php": ">=5.3.2"
-            },
-            "suggest": {
-                "guzzle/http": "To convert Guzzle request objects to PHP streams"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.7-dev"
-                }
-            },
-            "autoload": {
-                "psr-0": {
-                    "Guzzle\\Stream": ""
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Michael Dowling",
-                    "email": "mtdowling@gmail.com",
-                    "homepage": "https://github.com/mtdowling"
-                }
-            ],
-            "description": "Guzzle stream wrapper component",
-            "homepage": "http://guzzlephp.org/",
-            "keywords": [
-                "Guzzle",
-                "component",
-                "stream"
-            ],
-            "abandoned": "guzzle/guzzle",
-            "time": "2014-05-01 21:36:02"
-        },
-        {
-            "name": "instaclick/php-webdriver",
-            "version": "1.4.2",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/instaclick/php-webdriver.git",
-                "reference": "6aa16bbc02a5897200ab70316e0d2a01664afc51"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/instaclick/php-webdriver/zipball/6aa16bbc02a5897200ab70316e0d2a01664afc51",
-                "reference": "6aa16bbc02a5897200ab70316e0d2a01664afc51",
-                "shasum": ""
-            },
-            "require": {
-                "ext-curl": "*",
-                "php": ">=5.3.2"
-            },
-            "require-dev": {
-                "satooshi/php-coveralls": "dev-master"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.4.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-0": {
-                    "WebDriver": "lib/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "Apache-2.0"
-            ],
-            "authors": [
-                {
-                    "name": "Justin Bishop",
-                    "email": "jubishop@gmail.com",
-                    "role": "Developer"
-                },
-                {
-                    "name": "Anthon Pang",
-                    "email": "apang@softwaredevelopment.ca",
-                    "role": "Fork Maintainer"
-                }
-            ],
-            "description": "PHP WebDriver for Selenium 2",
-            "homepage": "http://instaclick.com/",
-            "keywords": [
-                "browser",
-                "selenium",
-                "webdriver",
-                "webtest"
-            ],
-            "time": "2015-04-05 19:52:55"
-        },
-        {
-            "name": "symfony/browser-kit",
-            "version": "v2.7.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/BrowserKit.git",
-                "reference": "d0a144a1a96d5dc90bed2814b2096a1322761672"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/BrowserKit/zipball/d0a144a1a96d5dc90bed2814b2096a1322761672",
-                "reference": "d0a144a1a96d5dc90bed2814b2096a1322761672",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.9",
-                "symfony/dom-crawler": "~2.0,>=2.0.5"
-            },
-            "require-dev": {
-                "symfony/css-selector": "~2.0,>=2.0.5",
-                "symfony/phpunit-bridge": "~2.7",
-                "symfony/process": "~2.0,>=2.0.5"
-            },
-            "suggest": {
-                "symfony/process": ""
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.7-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\BrowserKit\\": ""
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony BrowserKit Component",
-            "homepage": "https://symfony.com",
-            "time": "2015-06-04 20:11:48"
-        },
-        {
-            "name": "symfony/class-loader",
-            "version": "v2.7.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/ClassLoader.git",
-                "reference": "84843730de48ca0feba91004a03c7c952f8ea1da"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/ClassLoader/zipball/84843730de48ca0feba91004a03c7c952f8ea1da",
-                "reference": "84843730de48ca0feba91004a03c7c952f8ea1da",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.9"
-            },
-            "require-dev": {
-                "symfony/finder": "~2.0,>=2.0.5",
-                "symfony/phpunit-bridge": "~2.7"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.7-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\ClassLoader\\": ""
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony ClassLoader Component",
-            "homepage": "https://symfony.com",
-            "time": "2015-06-08 09:37:21"
-        },
-        {
-            "name": "symfony/config",
-            "version": "v2.7.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/Config.git",
-                "reference": "d2d2b288abab05abc1f00a33c61c74ef9441ac61"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/Config/zipball/d2d2b288abab05abc1f00a33c61c74ef9441ac61",
-                "reference": "d2d2b288abab05abc1f00a33c61c74ef9441ac61",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.9",
-                "symfony/filesystem": "~2.3"
-            },
-            "require-dev": {
-                "symfony/phpunit-bridge": "~2.7"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.7-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Config\\": ""
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony Config Component",
-            "homepage": "https://symfony.com",
-            "time": "2015-06-11 14:06:56"
-        },
-        {
-            "name": "symfony/console",
-            "version": "v2.7.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/Console.git",
-                "reference": "564398bc1f33faf92fc2ec86859983d30eb81806"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/Console/zipball/564398bc1f33faf92fc2ec86859983d30eb81806",
-                "reference": "564398bc1f33faf92fc2ec86859983d30eb81806",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.9"
-            },
-            "require-dev": {
-                "psr/log": "~1.0",
-                "symfony/event-dispatcher": "~2.1",
-                "symfony/phpunit-bridge": "~2.7",
-                "symfony/process": "~2.1"
-            },
-            "suggest": {
-                "psr/log": "For using the console logger",
-                "symfony/event-dispatcher": "",
-                "symfony/process": ""
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.7-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Console\\": ""
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony Console Component",
-            "homepage": "https://symfony.com",
-            "time": "2015-06-10 15:30:22"
-        },
-        {
-            "name": "symfony/css-selector",
-            "version": "v2.7.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/CssSelector.git",
-                "reference": "0b5c07b516226b7dd32afbbc82fe547a469c5092"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/CssSelector/zipball/0b5c07b516226b7dd32afbbc82fe547a469c5092",
-                "reference": "0b5c07b516226b7dd32afbbc82fe547a469c5092",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.9"
-            },
-            "require-dev": {
-                "symfony/phpunit-bridge": "~2.7"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.7-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\CssSelector\\": ""
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Jean-François Simon",
-                    "email": "jeanfrancois.simon@sensiolabs.com"
-                },
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony CssSelector Component",
-            "homepage": "https://symfony.com",
-            "time": "2015-05-15 13:33:16"
-        },
-        {
-            "name": "symfony/dependency-injection",
-            "version": "v2.7.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/DependencyInjection.git",
-                "reference": "1a409e52a38ec891de0a7a61a191d1c62080b69d"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/DependencyInjection/zipball/1a409e52a38ec891de0a7a61a191d1c62080b69d",
-                "reference": "1a409e52a38ec891de0a7a61a191d1c62080b69d",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.9"
-            },
-            "conflict": {
-                "symfony/expression-language": "<2.6"
-            },
-            "require-dev": {
-                "symfony/config": "~2.2",
-                "symfony/expression-language": "~2.6",
-                "symfony/phpunit-bridge": "~2.7",
-                "symfony/yaml": "~2.1"
-            },
-            "suggest": {
-                "symfony/config": "",
-                "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them",
-                "symfony/yaml": ""
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.7-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\DependencyInjection\\": ""
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony DependencyInjection Component",
-            "homepage": "https://symfony.com",
-            "time": "2015-06-11 19:13:11"
-        },
-        {
-            "name": "symfony/dom-crawler",
-            "version": "v2.7.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/DomCrawler.git",
-                "reference": "11d8eb8ccc1533f4c2d89a025f674894fda520b3"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/DomCrawler/zipball/11d8eb8ccc1533f4c2d89a025f674894fda520b3",
-                "reference": "11d8eb8ccc1533f4c2d89a025f674894fda520b3",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.9"
-            },
-            "require-dev": {
-                "symfony/css-selector": "~2.3",
-                "symfony/phpunit-bridge": "~2.7"
-            },
-            "suggest": {
-                "symfony/css-selector": ""
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.7-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\DomCrawler\\": ""
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony DomCrawler Component",
-            "homepage": "https://symfony.com",
-            "time": "2015-05-22 14:54:25"
-        },
-        {
-            "name": "symfony/event-dispatcher",
-            "version": "v2.7.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/EventDispatcher.git",
-                "reference": "be3c5ff8d503c46768aeb78ce6333051aa6f26d9"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/EventDispatcher/zipball/be3c5ff8d503c46768aeb78ce6333051aa6f26d9",
-                "reference": "be3c5ff8d503c46768aeb78ce6333051aa6f26d9",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.9"
-            },
-            "require-dev": {
-                "psr/log": "~1.0",
-                "symfony/config": "~2.0,>=2.0.5",
-                "symfony/dependency-injection": "~2.6",
-                "symfony/expression-language": "~2.6",
-                "symfony/phpunit-bridge": "~2.7",
-                "symfony/stopwatch": "~2.3"
-            },
-            "suggest": {
-                "symfony/dependency-injection": "",
-                "symfony/http-kernel": ""
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.7-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\EventDispatcher\\": ""
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony EventDispatcher Component",
-            "homepage": "https://symfony.com",
-            "time": "2015-06-08 09:37:21"
-        },
-        {
-            "name": "symfony/filesystem",
-            "version": "v2.7.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/Filesystem.git",
-                "reference": "a0d43eb3e17d4f4c6990289805a488a0482a07f3"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/Filesystem/zipball/a0d43eb3e17d4f4c6990289805a488a0482a07f3",
-                "reference": "a0d43eb3e17d4f4c6990289805a488a0482a07f3",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.9"
-            },
-            "require-dev": {
-                "symfony/phpunit-bridge": "~2.7"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.7-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Filesystem\\": ""
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony Filesystem Component",
-            "homepage": "https://symfony.com",
-            "time": "2015-06-08 09:37:21"
-        },
-        {
-            "name": "symfony/finder",
-            "version": "v2.7.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/Finder.git",
-                "reference": "c13a40d638aeede1e8400f8c956c7f9246c05f75"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/Finder/zipball/c13a40d638aeede1e8400f8c956c7f9246c05f75",
-                "reference": "c13a40d638aeede1e8400f8c956c7f9246c05f75",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.9"
-            },
-            "require-dev": {
-                "symfony/phpunit-bridge": "~2.7"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.7-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Finder\\": ""
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony Finder Component",
-            "homepage": "https://symfony.com",
-            "time": "2015-06-04 20:11:48"
-        },
-        {
-            "name": "symfony/process",
-            "version": "v2.7.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/Process.git",
-                "reference": "552d8efdc80980cbcca50b28d626ac8e36e3cdd1"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/Process/zipball/552d8efdc80980cbcca50b28d626ac8e36e3cdd1",
-                "reference": "552d8efdc80980cbcca50b28d626ac8e36e3cdd1",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.9"
-            },
-            "require-dev": {
-                "symfony/phpunit-bridge": "~2.7"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.7-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Process\\": ""
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony Process Component",
-            "homepage": "https://symfony.com",
-            "time": "2015-06-08 09:37:21"
-        },
-        {
-            "name": "symfony/translation",
-            "version": "v2.7.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/Translation.git",
-                "reference": "8349a2b0d11bd0311df9e8914408080912983a0b"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/Translation/zipball/8349a2b0d11bd0311df9e8914408080912983a0b",
-                "reference": "8349a2b0d11bd0311df9e8914408080912983a0b",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.9"
-            },
-            "conflict": {
-                "symfony/config": "<2.7"
-            },
-            "require-dev": {
-                "psr/log": "~1.0",
-                "symfony/config": "~2.7",
-                "symfony/intl": "~2.3",
-                "symfony/phpunit-bridge": "~2.7",
-                "symfony/yaml": "~2.2"
-            },
-            "suggest": {
-                "psr/log": "To use logging capability in translator",
-                "symfony/config": "",
-                "symfony/yaml": ""
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.7-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Translation\\": ""
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony Translation Component",
-            "homepage": "https://symfony.com",
-            "time": "2015-06-11 17:26:34"
-        },
-        {
-            "name": "symfony/yaml",
-            "version": "v2.7.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/Yaml.git",
-                "reference": "9808e75c609a14f6db02f70fccf4ca4aab53c160"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/Yaml/zipball/9808e75c609a14f6db02f70fccf4ca4aab53c160",
-                "reference": "9808e75c609a14f6db02f70fccf4ca4aab53c160",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.9"
-            },
-            "require-dev": {
-                "symfony/phpunit-bridge": "~2.7"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.7-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Yaml\\": ""
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony Yaml Component",
-            "homepage": "https://symfony.com",
-            "time": "2015-06-10 15:30:22"
-        }
-    ],
-    "packages-dev": [],
-    "aliases": [],
-    "minimum-stability": "stable",
-    "stability-flags": [],
-    "prefer-stable": false,
-    "prefer-lowest": false,
-    "platform": [],
-    "platform-dev": []
-}
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_theme/CHANGELOG.txt b/profiles/wcm_base/modules/panopoly/panopoly_theme/CHANGELOG.txt
index 998744c3..e40cdae8 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_theme/CHANGELOG.txt
+++ b/profiles/wcm_base/modules/panopoly/panopoly_theme/CHANGELOG.txt
@@ -1,3 +1,11 @@
+7.x-1.43, 2017-02-22
+-------------------
+- No changes since last release.
+
+7.x-1.42, 2017-02-17
+-------------------
+- No changes since last release.
+
 Panopoly Theme 7.x-1.41, 2016-11-17
 ----------------------------
 - No changes since last release.
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_theme/panopoly_theme.info b/profiles/wcm_base/modules/panopoly/panopoly_theme/panopoly_theme.info
index c6b7a68b..cec9675b 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_theme/panopoly_theme.info
+++ b/profiles/wcm_base/modules/panopoly/panopoly_theme/panopoly_theme.info
@@ -11,9 +11,9 @@ stylesheets[all][] = css/panopoly-accordian.css
 stylesheets[all][] = css/panopoly-layouts.css
 features[features_api][] = api:2
 
-; Information added by Drupal.org packaging script on 2016-11-17
-version = "7.x-1.41"
+; Information added by Drupal.org packaging script on 2017-02-23
+version = "7.x-1.43"
 core = "7.x"
 project = "panopoly_theme"
-datestamp = "1479408791"
+datestamp = "1487817578"
 
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_widgets/CHANGELOG.txt b/profiles/wcm_base/modules/panopoly/panopoly_widgets/CHANGELOG.txt
index 972360d5..940ed297 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_widgets/CHANGELOG.txt
+++ b/profiles/wcm_base/modules/panopoly/panopoly_widgets/CHANGELOG.txt
@@ -1,3 +1,15 @@
+7.x-1.43, 2017-02-22
+-------------------
+- No changes since last release.
+
+7.x-1.42, 2017-02-17
+-------------------
+- Update Media module to 7.x-2.0-rc3.
+- Spotlight title display problems at mobile width.
+- Use linkit on path for "Make title a link" for all FPP widgets.
+- Use linkit on Spotlight.
+- URLs truncated on Image widgets.
+
 Panopoly Widgets 7.x-1.41, 2016-11-17
 ------------------------------
 - Switch Image widget to use Media Browser.
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_widgets/panopoly-widgets-spotlight.css b/profiles/wcm_base/modules/panopoly/panopoly_widgets/panopoly-widgets-spotlight.css
index 2bbf55b7..2653124f 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_widgets/panopoly-widgets-spotlight.css
+++ b/profiles/wcm_base/modules/panopoly/panopoly_widgets/panopoly-widgets-spotlight.css
@@ -110,6 +110,7 @@
     border-width: 0;
     padding: 0em;
     background: none;
+    min-height: 10em;
 }
 
 /**
@@ -124,6 +125,8 @@
     bottom: 0px;
     display: inline-block;
     max-width: 85%;
+    max-height: 75%;
+    overflow: hidden;
 }
 .pane-bundle-spotlight .panopoly-spotlight-wrapper h2 {
     margin: 0;
@@ -135,17 +138,18 @@
 .pane-bundle-spotlight .panopoly-spotlight-wrapper p {
     font-size: .8em;
     margin: 0;
-    line-height: 1.2em;
+    line-height: 1.2;
     margin-top: 5px;
 }
 .pane-bundle-spotlight .panopoly-spotlight-label {
-    display: inline-block;
-    background-color: #FFF;
-    opacity: .75;
-}
-.pane-bundle-spotlight .panopoly-spotlight-label {
+    box-sizing: content-box;
+    max-height: 2.9em;
+    line-height: 1.5;
+    overflow: hidden;
     padding: .3em .7em;
     margin: 0 50px 0 0;
+    background-color: #FFF;
+    opacity: .75;
 }
 .pane-bundle-spotlight .panopoly-spotlight-info {
     padding: .7em;
@@ -153,6 +157,10 @@
     color: #FFFFFF;
     opacity: .75;
 }
+.pane-bundle-spotlight .panopoly-spotlight-info p {
+    max-height: 2.4em;
+    overflow: hidden;
+}
 .pane-bundle-spotlight .panopoly-spotlight-buttons-wrapper li {
     background: none;
     background-color: #000;
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_widgets/panopoly_widgets.features.field_base.inc b/profiles/wcm_base/modules/panopoly/panopoly_widgets/panopoly_widgets.features.field_base.inc
index 7bbb31ed..0aa3c62e 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_widgets/panopoly_widgets.features.field_base.inc
+++ b/profiles/wcm_base/modules/panopoly/panopoly_widgets/panopoly_widgets.features.field_base.inc
@@ -10,7 +10,7 @@
 function panopoly_widgets_field_default_field_bases() {
   $field_bases = array();
 
-  // Exported field_base: 'field_basic_file_file'
+  // Exported field_base: 'field_basic_file_file'.
   $field_bases['field_basic_file_file'] = array(
     'active' => 1,
     'cardinality' => 1,
@@ -33,7 +33,7 @@ function panopoly_widgets_field_default_field_bases() {
     'type' => 'file',
   );
 
-  // Exported field_base: 'field_basic_file_text'
+  // Exported field_base: 'field_basic_file_text'.
   $field_bases['field_basic_file_text'] = array(
     'active' => 1,
     'cardinality' => 1,
@@ -52,7 +52,7 @@ function panopoly_widgets_field_default_field_bases() {
     'type' => 'text_long',
   );
 
-  // Exported field_base: 'field_basic_image_caption'
+  // Exported field_base: 'field_basic_image_caption'.
   $field_bases['field_basic_image_caption'] = array(
     'active' => 1,
     'cardinality' => 1,
@@ -71,7 +71,7 @@ function panopoly_widgets_field_default_field_bases() {
     'type' => 'text_with_summary',
   );
 
-  // Exported field_base: 'field_basic_image_image'
+  // Exported field_base: 'field_basic_image_image'.
   $field_bases['field_basic_image_image'] = array(
     'active' => 1,
     'cardinality' => 1,
@@ -93,14 +93,13 @@ function panopoly_widgets_field_default_field_bases() {
     'type' => 'image',
   );
 
-  // Exported field_base: 'field_basic_image_link'
+  // Exported field_base: 'field_basic_image_link'.
   $field_bases['field_basic_image_link'] = array(
     'active' => 1,
     'cardinality' => 1,
     'deleted' => 0,
     'entity_types' => array(),
     'field_name' => 'field_basic_image_link',
-    'foreign keys' => array(),
     'indexes' => array(),
     'locked' => 0,
     'module' => 'link',
@@ -123,7 +122,7 @@ function panopoly_widgets_field_default_field_bases() {
     'type' => 'link_field',
   );
 
-  // Exported field_base: 'field_basic_spotlight_duration'
+  // Exported field_base: 'field_basic_spotlight_duration'.
   $field_bases['field_basic_spotlight_duration'] = array(
     'active' => 1,
     'cardinality' => 1,
@@ -138,7 +137,7 @@ function panopoly_widgets_field_default_field_bases() {
     'type' => 'number_integer',
   );
 
-  // Exported field_base: 'field_basic_spotlight_items'
+  // Exported field_base: 'field_basic_spotlight_items'.
   $field_bases['field_basic_spotlight_items'] = array(
     'active' => 1,
     'cardinality' => -1,
@@ -160,7 +159,7 @@ function panopoly_widgets_field_default_field_bases() {
     'type' => 'panopoly_spotlight',
   );
 
-  // Exported field_base: 'field_basic_spotlight_pager'
+  // Exported field_base: 'field_basic_spotlight_pager'.
   $field_bases['field_basic_spotlight_pager'] = array(
     'active' => 1,
     'cardinality' => 1,
@@ -186,7 +185,7 @@ function panopoly_widgets_field_default_field_bases() {
     'type' => 'list_text',
   );
 
-  // Exported field_base: 'field_basic_table_table'
+  // Exported field_base: 'field_basic_table_table'.
   $field_bases['field_basic_table_table'] = array(
     'active' => 1,
     'cardinality' => 1,
@@ -204,7 +203,7 @@ function panopoly_widgets_field_default_field_bases() {
     'type' => 'tablefield',
   );
 
-  // Exported field_base: 'field_basic_text_text'
+  // Exported field_base: 'field_basic_text_text'.
   $field_bases['field_basic_text_text'] = array(
     'active' => 1,
     'cardinality' => 1,
@@ -223,7 +222,7 @@ function panopoly_widgets_field_default_field_bases() {
     'type' => 'text_long',
   );
 
-  // Exported field_base: 'field_map_address'
+  // Exported field_base: 'field_map_address'.
   $field_bases['field_map_address'] = array(
     'active' => 1,
     'cardinality' => 1,
@@ -244,7 +243,7 @@ function panopoly_widgets_field_default_field_bases() {
     'type' => 'text',
   );
 
-  // Exported field_base: 'field_map_information'
+  // Exported field_base: 'field_map_information'.
   $field_bases['field_map_information'] = array(
     'active' => 1,
     'cardinality' => 1,
@@ -263,7 +262,7 @@ function panopoly_widgets_field_default_field_bases() {
     'type' => 'text_long',
   );
 
-  // Exported field_base: 'field_quick_links_links'
+  // Exported field_base: 'field_quick_links_links'.
   $field_bases['field_quick_links_links'] = array(
     'active' => 1,
     'cardinality' => -1,
@@ -292,7 +291,7 @@ function panopoly_widgets_field_default_field_bases() {
     'type' => 'link_field',
   );
 
-  // Exported field_base: 'field_video_file'
+  // Exported field_base: 'field_video_file'.
   $field_bases['field_video_file'] = array(
     'active' => 1,
     'cardinality' => 1,
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_widgets/panopoly_widgets.features.field_instance.inc b/profiles/wcm_base/modules/panopoly/panopoly_widgets/panopoly_widgets.features.field_instance.inc
index 62685fd3..aabd9f72 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_widgets/panopoly_widgets.features.field_instance.inc
+++ b/profiles/wcm_base/modules/panopoly/panopoly_widgets/panopoly_widgets.features.field_instance.inc
@@ -11,7 +11,7 @@ function panopoly_widgets_field_default_field_instances() {
   $field_instances = array();
 
   // Exported field_instance:
-  // 'fieldable_panels_pane-basic_file-field_basic_file_file'
+  // 'fieldable_panels_pane-basic_file-field_basic_file_file'.
   $field_instances['fieldable_panels_pane-basic_file-field_basic_file_file'] = array(
     'bundle' => 'basic_file',
     'deleted' => 0,
@@ -48,7 +48,7 @@ function panopoly_widgets_field_default_field_instances() {
   );
 
   // Exported field_instance:
-  // 'fieldable_panels_pane-basic_file-field_basic_file_text'
+  // 'fieldable_panels_pane-basic_file-field_basic_file_text'.
   $field_instances['fieldable_panels_pane-basic_file-field_basic_file_text'] = array(
     'bundle' => 'basic_file',
     'default_value' => NULL,
@@ -83,7 +83,7 @@ function panopoly_widgets_field_default_field_instances() {
   );
 
   // Exported field_instance:
-  // 'fieldable_panels_pane-image-field_basic_image_caption'
+  // 'fieldable_panels_pane-image-field_basic_image_caption'.
   $field_instances['fieldable_panels_pane-image-field_basic_image_caption'] = array(
     'bundle' => 'image',
     'default_value' => NULL,
@@ -120,7 +120,7 @@ function panopoly_widgets_field_default_field_instances() {
   );
 
   // Exported field_instance:
-  // 'fieldable_panels_pane-image-field_basic_image_image'
+  // 'fieldable_panels_pane-image-field_basic_image_image'.
   $field_instances['fieldable_panels_pane-image-field_basic_image_image'] = array(
     'bundle' => 'image',
     'deleted' => 0,
@@ -195,7 +195,8 @@ function panopoly_widgets_field_default_field_instances() {
     ),
   );
 
-  // Exported field_instance: 'fieldable_panels_pane-image-field_basic_image_link'
+  // Exported field_instance:
+  // 'fieldable_panels_pane-image-field_basic_image_link'.
   $field_instances['fieldable_panels_pane-image-field_basic_image_link'] = array(
     'bundle' => 'image',
     'default_value' => NULL,
@@ -224,7 +225,7 @@ function panopoly_widgets_field_default_field_instances() {
         'title' => '',
       ),
       'display' => array(
-        'url_cutoff' => 80,
+        'url_cutoff' => '',
       ),
       'enable_tokens' => 0,
       'linkit' => array(
@@ -250,7 +251,7 @@ function panopoly_widgets_field_default_field_instances() {
     ),
   );
 
-  // Exported field_instance: 'fieldable_panels_pane-map-field_map_address'
+  // Exported field_instance: 'fieldable_panels_pane-map-field_map_address'.
   $field_instances['fieldable_panels_pane-map-field_map_address'] = array(
     'bundle' => 'map',
     'default_value' => NULL,
@@ -296,7 +297,7 @@ function panopoly_widgets_field_default_field_instances() {
     ),
   );
 
-  // Exported field_instance: 'fieldable_panels_pane-map-field_map_information'
+  // Exported field_instance: 'fieldable_panels_pane-map-field_map_information'.
   $field_instances['fieldable_panels_pane-map-field_map_information'] = array(
     'bundle' => 'map',
     'default_value' => NULL,
@@ -331,7 +332,7 @@ function panopoly_widgets_field_default_field_instances() {
   );
 
   // Exported field_instance:
-  // 'fieldable_panels_pane-quick_links-field_quick_links_links'
+  // 'fieldable_panels_pane-quick_links-field_quick_links_links'.
   $field_instances['fieldable_panels_pane-quick_links-field_quick_links_links'] = array(
     'bundle' => 'quick_links',
     'default_value' => NULL,
@@ -381,7 +382,7 @@ function panopoly_widgets_field_default_field_instances() {
   );
 
   // Exported field_instance:
-  // 'fieldable_panels_pane-spotlight-field_basic_spotlight_duration'
+  // 'fieldable_panels_pane-spotlight-field_basic_spotlight_duration'.
   $field_instances['fieldable_panels_pane-spotlight-field_basic_spotlight_duration'] = array(
     'bundle' => 'spotlight',
     'default_value' => NULL,
@@ -416,7 +417,7 @@ function panopoly_widgets_field_default_field_instances() {
   );
 
   // Exported field_instance:
-  // 'fieldable_panels_pane-spotlight-field_basic_spotlight_items'
+  // 'fieldable_panels_pane-spotlight-field_basic_spotlight_items'.
   $field_instances['fieldable_panels_pane-spotlight-field_basic_spotlight_items'] = array(
     'bundle' => 'spotlight',
     'default_value' => NULL,
@@ -458,7 +459,7 @@ function panopoly_widgets_field_default_field_instances() {
   );
 
   // Exported field_instance:
-  // 'fieldable_panels_pane-spotlight-field_basic_spotlight_pager'
+  // 'fieldable_panels_pane-spotlight-field_basic_spotlight_pager'.
   $field_instances['fieldable_panels_pane-spotlight-field_basic_spotlight_pager'] = array(
     'bundle' => 'spotlight',
     'default_value' => array(
@@ -493,7 +494,7 @@ function panopoly_widgets_field_default_field_instances() {
   );
 
   // Exported field_instance:
-  // 'fieldable_panels_pane-table-field_basic_table_table'
+  // 'fieldable_panels_pane-table-field_basic_table_table'.
   $field_instances['fieldable_panels_pane-table-field_basic_table_table'] = array(
     'bundle' => 'table',
     'default_value' => array(
@@ -544,7 +545,8 @@ function panopoly_widgets_field_default_field_instances() {
     ),
   );
 
-  // Exported field_instance: 'fieldable_panels_pane-text-field_basic_text_text'
+  // Exported field_instance:
+  // 'fieldable_panels_pane-text-field_basic_text_text'.
   $field_instances['fieldable_panels_pane-text-field_basic_text_text'] = array(
     'bundle' => 'text',
     'default_value' => NULL,
@@ -578,7 +580,7 @@ function panopoly_widgets_field_default_field_instances() {
     ),
   );
 
-  // Exported field_instance: 'fieldable_panels_pane-video-field_video_file'
+  // Exported field_instance: 'fieldable_panels_pane-video-field_video_file'.
   $field_instances['fieldable_panels_pane-video-field_video_file'] = array(
     'bundle' => 'video',
     'deleted' => 0,
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_widgets/panopoly_widgets.info b/profiles/wcm_base/modules/panopoly/panopoly_widgets/panopoly_widgets.info
index 6c2daf9d..9575ac69 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_widgets/panopoly_widgets.info
+++ b/profiles/wcm_base/modules/panopoly/panopoly_widgets/panopoly_widgets.info
@@ -124,9 +124,9 @@ features[linkit_profiles][] = content_fields
 features[views_view][] = panopoly_widgets_general_content
 features_exclude[dependencies][linkit] = linkit
 
-; Information added by Drupal.org packaging script on 2016-11-17
-version = "7.x-1.41"
+; Information added by Drupal.org packaging script on 2017-02-23
+version = "7.x-1.43"
 core = "7.x"
 project = "panopoly_widgets"
-datestamp = "1479408816"
+datestamp = "1487817596"
 
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_widgets/panopoly_widgets.install b/profiles/wcm_base/modules/panopoly/panopoly_widgets/panopoly_widgets.install
index 885328fe..362cde04 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_widgets/panopoly_widgets.install
+++ b/profiles/wcm_base/modules/panopoly/panopoly_widgets/panopoly_widgets.install
@@ -397,3 +397,10 @@ function panopoly_widgets_update_7018() {
   features_revert(array('panopoly_widgets' => array('field_instance')));
 }
 
+/**
+ * Make sure the image widget disables URL truncating.
+ */
+function panopoly_widgets_update_7019() {
+  features_revert(array('panopoly_widgets' => array('field_instance')));
+}
+
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_widgets/panopoly_widgets.make b/profiles/wcm_base/modules/panopoly/panopoly_widgets/panopoly_widgets.make
index b3602bd6..caa99312 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_widgets/panopoly_widgets.make
+++ b/profiles/wcm_base/modules/panopoly/panopoly_widgets/panopoly_widgets.make
@@ -18,15 +18,13 @@ projects[menu_block][subdir] = contrib
 
 ; Panopoly - Contrib - Files & Media
 
-projects[file_entity][version] = 2.0-beta2
+projects[file_entity][version] = 2.0-beta3
 projects[file_entity][subdir] = contrib
 
-projects[media][version] = 2.0-beta1
+projects[media][version] = 2.0-rc3
 projects[media][subdir] = contrib
-projects[media][patch][2126697] = https://www.drupal.org/files/issues/media_wysiwyg_2126697-53.patch
-projects[media][patch][2308487] = https://www.drupal.org/files/issues/media-alt-title-double-encoded-2308487-2.patch
-projects[media][patch][2084287] = http://www.drupal.org/files/issues/media-file-name-focus-2084287-2.patch
-projects[media][patch][2534724] = https://www.drupal.org/files/issues/media-browser_opens_twice-2534724-53.patch
+projects[media][patch][2842446] = https://www.drupal.org/files/issues/media-2841331-3.patch
+projects[media][patch][2272567] = https://www.drupal.org/files/issues/media_dialog_appears_2272567-32.patch
 
 projects[media_youtube][version] = 3.0
 projects[media_youtube][subdir] = contrib
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_widgets/panopoly_widgets.module b/profiles/wcm_base/modules/panopoly/panopoly_widgets/panopoly_widgets.module
index d4888b7f..8739af6c 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_widgets/panopoly_widgets.module
+++ b/profiles/wcm_base/modules/panopoly/panopoly_widgets/panopoly_widgets.module
@@ -488,6 +488,25 @@ function panopoly_widgets_fieldable_panels_pane_view($entity, $view_mode, $langc
   }
 }
 
+/**
+ * Implements hook_form_FORM_ID_alter().
+ */
+function panopoly_widgets_form_fieldable_panels_panes_fieldable_panels_pane_content_type_edit_form_alter(&$form, &$form_state) {
+  if (isset($form['widget_settings']['link'])) {
+    // For when panopoly_magic is enabled.
+    $element =& $form['widget_settings']['link'];
+  }
+  else {
+    $element =& $form['link'];
+  }
+
+  $element['path']['#linkit'] = array(
+    'enable' => TRUE,
+    'profile' => 'content_fields',
+    'button_text' => t('Search for existing content'),
+  );
+}
+
 /**
  * Rewrites the node title by poisening the node_load() static cache.
  *
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_widgets/panopoly_widgets.spotlight.inc b/profiles/wcm_base/modules/panopoly/panopoly_widgets/panopoly_widgets.spotlight.inc
index edaad665..304c4db5 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_widgets/panopoly_widgets.spotlight.inc
+++ b/profiles/wcm_base/modules/panopoly/panopoly_widgets/panopoly_widgets.spotlight.inc
@@ -242,6 +242,11 @@ function panopoly_widgets_field_widget_form(&$form, &$form_state, $field, $insta
       '#title' => t('Link'),
       '#type' => 'textfield',
       '#default_value' => isset($items[$delta]['link']) ? $items[$delta]['link'] : NULL,
+      '#linkit' => array(
+        'enable' => TRUE,
+        'profile' => 'content_fields',
+        'button_text' => t('Search for existing content'),
+      ),
     );
 
     $element['fid'] = array(
diff --git a/profiles/wcm_base/themes/wcm_omega/readme.md b/profiles/wcm_base/themes/wcm_omega/readme.md
new file mode 100644
index 00000000..d5e2dba6
--- /dev/null
+++ b/profiles/wcm_base/themes/wcm_omega/readme.md
@@ -0,0 +1,11 @@
+## Prepare your environment for theme compilation. 
+1. Install Node.js via a provided installer: https://nodejs.org/en/download/
+2. Update npm from the version packaged with Node: `npm install npm@latest -g`
+3. Install Gulp globally: `sudo npm install -g gulp`
+
+## Prepare your local version of the theme for the first time.
+1. Navigate to the root of the theme folder via terminal
+2. Install node_modules and local instance of gulp: `npm install`
+3. Make a copy of *gulpfile.default.js* as *gulpfile.js*
+4. Add your local web address to *gulpfile.js*
+5. Run Gulp via the command line at the theme root: `gulp`
\ No newline at end of file
diff --git a/profiles/wcm_base/wcm_base.make b/profiles/wcm_base/wcm_base.make
index fff7cbfb..5afff176 100644
--- a/profiles/wcm_base/wcm_base.make
+++ b/profiles/wcm_base/wcm_base.make
@@ -79,7 +79,7 @@ projects[mailsystem][subdir] = contrib
 projects[mimemail][version] = 1.0-beta4
 projects[mimemail][subdir] = contrib
 
-projects[media][version] = 2.0-rc5
+projects[media][version] = 2.0-rc11
 projects[media][subdir] = contrib
 projects[media][patch][2297685] = http://drupal.org/files/issues/media-edit_uri_for_remote_files-2297685-6.patch
 
@@ -149,9 +149,9 @@ projects[token][subdir] = contrib
 projects[token_filter][version] = 1.1
 projects[token_filter][subdir] = contrib
 
-projects[views][version] = 3.14
+projects[views][version] = 3.15
 projects[views][subdir] = contrib
-projects[views][patch][2037469] = http://drupal.org/files/views-exposed-sorts-2037469-1.patch
+projects[views][patch][2037469] = http://drupal.org/files/issues/views-exposed-sorts-2037469-16.diff
 
 projects[views_accordion][version] = 1.1
 projects[views_accordion][subdir] = contrib
@@ -159,7 +159,7 @@ projects[views_accordion][subdir] = contrib
 projects[views_conditional][version] = 1.3
 projects[views_conditional][subdir] = contrib
 
-projects[views_bulk_operations][version] = 3.3
+projects[views_bulk_operations][version] = 3.4
 projects[views_bulk_operations][subdir] = contrib
 
 projects[views_nested_accordion][version] = 1.0
@@ -460,32 +460,32 @@ libraries[ocio_modernizr][download][branch] = 7.x-1.x
 
 ; The Panopoly Foundation
 
-projects[panopoly_core][version] = 1.41
+projects[panopoly_core][version] = 1.43
 projects[panopoly_core][subdir] = panopoly
 
-projects[panopoly_theme][version] = 1.41
+projects[panopoly_theme][version] = 1.43
 projects[panopoly_theme][subdir] = panopoly
 
-projects[panopoly_magic][version] = 1.41
+projects[panopoly_magic][version] = 1.43
 projects[panopoly_magic][subdir] = panopoly
 
-projects[panopoly_widgets][version] = 1.41
+projects[panopoly_widgets][version] = 1.43
 projects[panopoly_widgets][subdir] = panopoly
 
-projects[panopoly_admin][version] = 1.41
+projects[panopoly_admin][version] = 1.43
 projects[panopoly_admin][subdir] = panopoly
 
 
 ; The Panopoly Toolset
 
-projects[panopoly_pages][version] = 1.41
+projects[panopoly_pages][version] = 1.43
 projects[panopoly_pages][subdir] = panopoly
 
-projects[panopoly_search][version] = 1.41
+projects[panopoly_search][version] = 1.43
 projects[panopoly_search][subdir] = panopoly
 
 
 ; For running the automated tests.
 
-projects[panopoly_test][version] = 1.41
+projects[panopoly_test][version] = 1.43
 projects[panopoly_test][subdir] = panopoly
-- 
GitLab