diff --git a/profiles/wcm_base/CHANGELOG.txt b/profiles/wcm_base/CHANGELOG.txt
index 41dfc2e09e71a700bdc0b94de0b12a4b27957a14..39790086dcf977811bf7f99f3c76a3a6ca488f3d 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 9fca0f7503cf3f66381b5f04d1f1b7fd6a5525cd..c3cf605037a0b17dc5b5a68dc3dc53e35aced2c1 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 267648ff56b12148743fc2627cbb47e83bcb693a..1896d0650f382f7e3216e8d4154680fc4cbae02c 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 de3040f261a4ec717bd28fb20d43fa61774b5676..8972a33a738dc4dfefaa36a2ab79e523ebdcf743 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 9153cc9ba8ce52166eeb131e46d6c4252aa8895e..e3ed2d1a6415b7ac527e7240104fca5a23603773 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 20313e71c7f68779e0b0cfa46aed9c68f0049aed..a9b8804240d2f2efbbeeb4950d9fb6ef9ea19347 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 50fe58dbe85524fd589790fee8ea728b3a0f428f..b6efdd44c6bab144367f1b2e765c76625b57fde7 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 6bffdff420c866ed7e3129adb1ae12e7bebbe0e1..9c9cb0d37ec664c0e70bab710c9ddf579e6cf4b4 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 3193df425af734c59744f92426ff808ceaaa8824..6eff3991056535e012cc0d0f9b9ae907b72946cd 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 5b786fc61e0c268d7c755a40f8317c2398cb5799..0a1cecb4873b255acb1b1da2d20ccc8a011906b7 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 b92ba7c076471b43ef47386cb8c22b3a2ab99cf7..b3545605302b46f8a2bc14ba245f76f0e4e119d2 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 06564010fa37dfbfe684fc7d07aca7b3d898c738..54ed294922d4d3b4bd4bf40a77960d11032a615d 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 cf7a5dbdd124cfc99ba7f9d9bfaa3b419adfbd5b..02e8cd2da6f3fa55456303bf2a743bde0b1391dc 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 93a33610025d4a6633c43d10626464d4e988467f..a2ed8b2ed28e53a35c635e32a817611e76d377e4 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 35fa9eae81f689262b862a1b7c7ed5274c3af1c2..304d57f13c705af04c5be87c19c44be32085b459 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 ed33cdfdce1e8501239b3087f5e770e3b58c8397..deac91183be60f74c34c5b0e70e1a1bb831311a4 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 77ff90301eea12fd37a55a293f525868b7a75521..9d566988b18c0172b5215d7ae1ddaeff1aa582fb 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 a7f98c9a903c7a88284a15994939896f8cd6ea7c..5aeea2425ba7f95649c1a83271df2ae05e5b5753 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 8c4b4a55f940a37c6d1280d14b5c743879893009..68af95d12baf1c46db7b2eec8d6daa57680af70e 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 e585cd48c7f9128f33dfe463ea7cd227bcd1503e..0000000000000000000000000000000000000000
--- 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 4c458a141b04106b4b2b0a2de370079072962eb4..fc56959d42b639fe04ad6462baff6a6eacd63e01 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 9030f48768c0a028c03e436b69f0c85c3dc03bed..b2103867c3875ee24647170c98070de4707c3c4d 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 41f1154360f92f782c96d94d1bdf6192284b0a9c..4c921888325d7a1f5c89d4cf621050384e02a610 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 9f98eec380379281c0d708371cdde7af9f575063..9699aa08b676734b45304ee637c3502a590c1412 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 1488faa0e9a2d59be402cd3d36cc15e450f8d9db..9a73e491d4ec6ca027f3fb162b371558ced3b430 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 82edccf3dfef81a9f7d9c24429b8bf515d96a6da..62a4ed24970a96e6463cec3d40b2af1785ea2953 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 be49cd6334a5f60c7de48fecd866572e4f2801ae..52dcf12d5234aa87f6efb139207b15fee2439b2e 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 0000000000000000000000000000000000000000..bbb9f29779d63edd20c0ab20bdfc3bab5177719d
--- /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 e4308ce6eca51622706700217fb1ef65cf437358..63058209f0dc215808591409239db4ded023b3d9 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 28d3ce0926620eba2ade6548bf74bad7e03cb234..23df259c1dd49ec36d6498e9f131a43504324e42 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 4bc0b71679ea627d3b6000c3fcd9b03ae879ae12..298f88222431fcdf215489e94a1c4c3f0d938ade 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 a0f0b49bcf825b274cf9d7d564afc9684cc72bc2..dabcaa8814c5c7088ebbaad4549e2529a8d6a4f5 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 0000000000000000000000000000000000000000..eb1be12e08ac3f18dea627aa371543f59ab46dbc
--- /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 bc2d28c03267a3f1d626c25b6224801cb34faf34..c823bb653766f58cb5e280a4ba126402e7216d04 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 ab83ee9da6d85c9fef70c885c3284fa0a0f89344..7cb5e1edbbcfb197a232527dfe2fe074fe516e74 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 6c1e8879e41c7e71f9666143186d841acc4d7ac5..680a54de7b21620ec0f882837873299abc55c2d6 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 5855dceb9d3f565e5c525cb33662315c98b27c7c..65bc4d51fc11c20562d26d7231416ddded5650f3 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 f47f08a85a30425641aab5b7be8a189cba054aaf..58d185928e48d720b61e7fa30c55f68f6147aa47 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 48da283d95df7d561e7f269d8063887cd981799e..9dacb0da0531ea63eff2ee1a8106bc20e1d551a9 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 435db0ddff84be02ffc55ddc6277a67cd5d369f7..0765d72a513d5286a9a245e8a7ebbddfea624cc4 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 0dfc9114b057b77948ee6eb73a44e646bfecc1e1..d5d785f3cc00b070340f00bdcc8904bbd6f80065 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 d3ab7f928af9cb36db4ace89a8713067e20fcec9..c11a1925926e83a617100811ee07ee5ebb450d8a 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 4bcec0bc20588345e54261d42748926776bc7c13..832bc6b52b13d507e3d16c09d1fb220a97a373ad 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 1d19ed17f26e94d4ff41178e1cecff01e9044a2f..bc444149a0294cc33e4c12b12a3c0f25162b0e29 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 1de90f79e7e7597e35e54f75c78c8a127b18f40a..b82facd71a507535cf166884e73c70a3d6362e17 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 6e9008ed624c93c1c8870de9a6a4b103023edc1b..25cdf02ee6bfe0e8be09611ec743eb7f8bb3546e 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 0b425f178dedd853b063c18786aa2afebabb96d9..5d7320a9f5b404513371b58d5eef1adca214bca9 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 cbe65b06677e3a6493b801e443febcb307a31e78..ebf2edbb439d2a0c9dc54c2c6a5c9c45ad36ef73 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 f00552743d6fe890daaa18dce908972d948e6b12..ef36acd50f1ce3ab7770c596cb20fc1450346667 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 0000000000000000000000000000000000000000..697670db8baaac2e343cca7fca33c5d86ea647d8
--- /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 52c72d2fb9564ffb3b748c913341b263939c9c20..439a504d664ed143a0fd78267c73898914e26625 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 301b17b2c74431c40909e54259cd354ccce1a534..06fa46dc7e092742c206f9b3799166380bed7850 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 147d29208134259152a21db1c45187ad0b6c0d14..3637e39c088498426b42e3014064bf9842d2ddcd 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 658d1adc17c4c51ca52a3be64fb91eca73efc8c6..11ff52358330cd69722280aea097f79f55d04522 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 a93cf22a6e3ee67aa1f986d5c31bb76e890d0f38..d26da62e33387917d1a67b0d093c7a0c9de907e6 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 ca76df863e2068e413de6732289c30baff007173..a4e8237ad001ce39609984cb7422cc4279f3da60 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 1c7078a53e5cf4501126814c31102f9be3b483e9..e6c685a07bca593da880ae8c4ce307d1da382d90 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 61886d48e53c9481046db2b997fa6083b939b2da..dcfd534264bbea40b3183e6f561e888e91997841 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 09c4fb637bcfa9d5e3300a4579652763d5647007..e9ca1929e4559f85b3727c3a95a339814ebe7ec8 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 8fbdffaa5d5ec23f872c317355131512ae332dd2..b16bf0e022f6c29cbe2fc28a09a16df2261a3f9f 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 e74eeb1dfc9045b2fa7bcb48bd55223cb054dcb1..9b17c4448d6a4cf9f1f54e56846864925bc6d5cc 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 b3a64184d864041e31dd77eaebb9da64a75a2155..1273552eaf8117b52c1a907a76efeaf195398e1e 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 b2c20f3ea6dbb1cf060ea4b5887969dcc2e63605..0a1ff68247cde4183e100900d4d9f7d525764cad 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 56b8aff347c26773a76934b67540e0f6f718d034..91f5cc5137f44e2e1625695bf531456fb5773cd6 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 c7582dfffcec96479a962824191030421497fb83..9114024ecb35094e6b2495c658b5a0fcfb1d24d5 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 5ee0bca91b7846d6a34b851157f49a44e7d05bc1..091b990cec87495167083472d047935d9deb32f7 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 187178a02afbdb1e5cd940ea5096f6a61f638586..00e638e9268a4b51113814c25e08dc1e21d82770 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 8fa876131a88746a0e42e8b6547be3d93ada3c7f..74b25e02535315466e324b2ea62e354281567339 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 131a4be05765998a2d423036bf5974eabb07e90b..4e566db4d2ec84316ff7581929fde5abc9a71782 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 abcf93e3bd7ea5b65e819e0f25e2e3b5da28a5d3..da5098ce8f6a5cf812706ca1537781b5b67bcf73 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 c090d2adb201cfa5206e981b91db612f3f97b1e0..178e847bfcf51de3182fe5744c90674d03330b82 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 b08fb958737c3b4b6543dc13919e2c091797caf8..1a9e56d44556ed41d85ebfc014fed1f3918082f5 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 a9df6bf75c4eae8790a38398d4ead2228b78c480..2b704c8b6548e38bfb723c24a9f33d5e9432323d 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 0b543d67c8cd1a80d983596542025fd055aad36c..db75d8f8471d513ac6e73b174002b1d042d96352 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 6c6c7c5e4d33694d1ee69d42e53ba4a96788122b..3e37017631c2f266c03dbd900a9a97fe66355ba6 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 cb82a49d7cdff4da38edb75602407a9658856c77..0000000000000000000000000000000000000000
--- 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 5c54b40326dc47ecf65be6b5365e656fec3f064f..3aeb14245bd75ac4629058932aa0106e31f2eb80 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 2f3e33d0f0c482e0e483f4232b1bb4aeb6296c6d..6060d1ec8857d7cbf2abd8af50c6a81540152767 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 59935580e67ab8ae13601ab08339f5709777da60..3141ee2f0a198059d056c4776bc945627c5eb494 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 55c37830687e2ce5467ab1769d4f69d9e7d18d77..83b0ff981585029a99516a5d41883997688799d3 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 abf2aed8e1e902b4c4bc51c3358b09e6881c17f3..e7ec7d6e167cc63041b154d397f761933a505893 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 ea66f3695925f053f40887d2a80a62b899b236c8..95b2d7815e5d0596611fbfa84057669abb59b3be 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 27b7f23ab5126c65f3fd99d1804f18717393de2a..6ae88f4c09329e9727dfdd09f2263729d639570d 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 cfdb36261fbb389ffe5238763d1bf1316d3d75b0..1acdf6990c18e5f2cdcb6c436b57237985d6b0f8 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 ffcfc7387fd841e1315e59b21de7625d4a11e9d5..1b092c9e70df505d4492ead369ff3fea40d4a571 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 cd26031e1868816fc0a6c4c53df95374005286b5..b9effc4462e31b2d75b554e54af708fe00265cad 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 d185047a60a3986dbe7e618f84dd1eb3976b7a9b..dccc501fbd35337c60fb9d31058860ccb6dcffa7 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 27b8cc8a069d231a6d1d4d40868f9f0dd384c86d..503881d087dd1a1c5a5695e053e6c45996d6b08e 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 265b2a78f6b8e88cdda91d0dd233b99ebc255a01..0bbf783ed27aa610e4ce7e73114edb45ad403699 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 65813939c33ab860459ba186b05eebcd5258d597..42faec4eaab44611734459ca1defa773bd454aaf 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 a7499830571073247b84c59685b997e72ae31c49..676ab68d3f6513b67121f2cd2b250142ed49db4d 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 14fe3bf1623ef176c72609bc826a0e83b1c848c3..b34a401639c4128bd983ed788f3b4945e459c3ec 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 eda6226295bed7a9075e6dd1b995cb25f6648e67..b1e374e0c1e5e93e8e01bf66e0058498f1afbb64 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 6ee02b0572f3777f3ccc4051490b7c79c5df084d..2839f940bc055cbd8488b16491f2ca3a922328ba 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 5262a7b0c1b608972de83f129a1949d9cb2d82f3..82640cb2be843f3eb5507986dd20d7283b5ff535 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 d8084c51e21c3fb9668d8675cf0376ac9a488667..dac0834b0cc02082070ffaa63949939891424135 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 ec14d1e05c6c1f549ddc45c67b75895877940939..9c355d8b325ee93fe0d09cadf7920dfd743c8ac0 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 e83c5762e67e12a82c092c56ca1f28a6557db8a0..8122e9badf94ec709f1402438447dcfed00d5735 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 d42dea98e160a23addb25f574b7a893168e31123..20992ddd042986ac77f17ab35c3e008a3404cf28 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 0000000000000000000000000000000000000000..966c19051dd59325ae8ef18a86bbcd961ec23cac
--- /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 1156ceab6ada01b9b69d0a0832809949aa9a1515..2ca7eea47d225b2aa895439d2ee97131fd667c01 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 0b01e50bca518060dc518631185113f1bee92e85..d9e7a205400cfeb273325827633d72483850ff8b 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 51763fe30c96dc8a968d496dbb1562563e938937..01fb66b4ded7170c3c09de83f4fe3421b748aae2 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 6113977cc5399ef67fb5c6df68629be35cf71b91..a90d6166257a52fb43d535d7073931bd8d80c52d 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 f7956a735cb41f7717af2f28c0683507900fd4ef..0000000000000000000000000000000000000000
--- 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 998744c3470003c59b80ed3f9b4f722f92653328..e40cdae8e969bbe88ae591a7eefeaec0739abe1b 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 c6b7a68b3a8d3872eac6111d60dbdc86d88c1e50..cec9675b61edbfce70859a3a7e340419609d3a6e 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 972360d5997ccaab029fd4644b61f8e5bfa805f5..940ed297bb7a21f6e223d42d0e2df9b2a2fecc15 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 2bbf55b797901edbfc3317ccc31f6ef6f174c7cd..2653124f08873ec3296111ac60fe7b208c8a7f1b 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 7bbb31ed56b80783804c93eb4c71f6fe67317caa..0aa3c62ea264ee60311858877097cbff7739d1b6 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 62685fd33802dba8c700f24d4f368f408feaa493..aabd9f7252a200ad7a117592be0a5b92fd9a2714 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 6c2daf9dfb76c1914ea66c279f632937e6280fea..9575ac693263f3348dd120e810c9aa59435176ea 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 885328fee9b425a98de90dd480f2b68b01ce27f7..362cde04f2990232088cec34bffcaf24642e3e40 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 b3602bd61559b9b5366974e3b8199d4165033105..caa993125e90786f814721b937fd9f85ea661bbd 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 d4888b7f0bbd33fac509e41ccc4228a19e474a1c..8739af6cbd6bd3d6deae92c4f8b79aa7f5349375 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 edaad6655730247363b88ade31490e073a8a7eed..304c4db5358c22dd3f41bea0e6ff4bdccf2c1c0c 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 0000000000000000000000000000000000000000..d5e2dba6f34af9c7a3945821e9c2eed35ca85122
--- /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 fff7cbfb5b47d3957c9a1bc092fd4fc840727d91..5afff176d071f07cc5bf3e0c8bd181d5c2b5dcb4 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