diff --git a/app/index.html b/app/index.html
index 757186ce64..a1e24bfe82 100644
--- a/app/index.html
+++ b/app/index.html
@@ -328,6 +328,7 @@ <h1>JavaScript Required</h1>
         <script src="scripts/directives/labels.js"></script>
         <script src="scripts/directives/lifecycleHook.js"></script>
         <script src="scripts/directives/actionChip.js"></script>
+        <script src="scripts/directives/addSecretToApplication.js"></script>
         <script src="scripts/directives/templateopt.js"></script>
         <script src="scripts/directives/tasks.js"></script>
         <script src="scripts/directives/catalog.js"></script>
diff --git a/app/scripts/controllers/secret.js b/app/scripts/controllers/secret.js
index 85041fd0a4..b0dd222f22 100644
--- a/app/scripts/controllers/secret.js
+++ b/app/scripts/controllers/secret.js
@@ -27,6 +27,16 @@ angular.module('openshiftConsole')
       }
     ];
 
+    $scope.addToApplicationVisible = false;
+
+    $scope.addToApplication = function() {
+      $scope.addToApplicationVisible = true;
+    };
+
+    $scope.closeAddToApplication = function() {
+      $scope.addToApplicationVisible = false;
+    };
+
     ProjectsService
       .get($routeParams.project)
       .then(_.spread(function(project, context) {
diff --git a/app/scripts/directives/addSecretToApplication.js b/app/scripts/directives/addSecretToApplication.js
new file mode 100644
index 0000000000..c2681b2a9e
--- /dev/null
+++ b/app/scripts/directives/addSecretToApplication.js
@@ -0,0 +1,180 @@
+"use strict";
+(function() {
+  angular.module("openshiftConsole").component('addSecretToApplication', {
+    controller: [
+      '$filter',
+      '$scope',
+      'APIService',
+      'DataService',
+      'Navigate',
+      'NotificationsService',
+      'StorageService',
+      AddSecretToApplication
+    ],
+    controllerAs: 'ctrl',
+    bindings: {
+      project: '<',
+      secret: '<',
+      onComplete: '<',
+      onCancel: '<'
+    },
+    templateUrl: 'views/directives/add-secret-to-application.html'
+  });
+
+  function AddSecretToApplication($filter, $scope, APIService, DataService, Navigate, NotificationsService, StorageService) {
+    var ctrl = this;
+    var deploymentConfigs;
+    var deployments;
+    var replicationControllers;
+    var replicaSets;
+    var statefulSets;
+
+    var sortApplications = function() {
+      // Don't waste time sorting on each data load, just sort when we have them all
+      if (deploymentConfigs && deployments && replicationControllers && replicaSets && statefulSets) {
+        var apiObjects = deploymentConfigs.concat(deployments)
+          .concat(replicationControllers)
+          .concat(replicaSets)
+          .concat(statefulSets);
+        ctrl.applications = _.sortBy(apiObjects, ['metadata.name', 'kind']);
+        ctrl.updating = false;
+      }
+    };
+
+    var getApplications = function() {
+      var hasDeploymentFilter = $filter('hasDeployment');
+      var hasDeploymentConfigFilter = $filter('hasDeploymentConfig');
+
+      ctrl.updating = true;
+      var context = {
+        namespace: ctrl.project.metadata.name
+      };
+      // Load all the "application" types
+      DataService.list('deploymentconfigs', context).then(function(deploymentConfigData) {
+        deploymentConfigs = _.toArray(deploymentConfigData.by('metadata.name'));
+        sortApplications();
+      });
+      DataService.list('replicationcontrollers', context).then(function(replicationControllerData) {
+        replicationControllers = _.reject(replicationControllerData.by('metadata.name'), hasDeploymentConfigFilter);
+        sortApplications();
+      });
+      DataService.list({
+        group: 'apps',
+        resource: 'deployments'
+      }, context).then(function(deploymentData) {
+        deployments = _.toArray(deploymentData.by('metadata.name'));
+        sortApplications();
+      });
+      DataService.list({
+        group: 'extensions',
+        resource: 'replicasets'
+      }, context).then(function(replicaSetData) {
+        replicaSets = _.reject(replicaSetData.by('metadata.name'), hasDeploymentFilter);
+        sortApplications();
+      });
+      DataService.list({
+        group: 'apps',
+        resource: 'statefulsets'
+      }, context).then(function(statefulSetData) {
+        statefulSets = _.toArray(statefulSetData.by('metadata.name'));
+        sortApplications();
+      });
+    };
+
+    ctrl.$onInit = function() {
+      ctrl.addType = 'env';
+      ctrl.disableInputs = false;
+      getApplications();
+    };
+
+    ctrl.$postLink = function() {
+      $scope.$watch(function() {
+        return ctrl.application;
+      }, function() {
+        // Look at the existing mount paths so that we can warn if the new value is not unique.
+        var podTemplate = _.get(ctrl.application, 'spec.template');
+        ctrl.existingMountPaths = StorageService.getMountPaths(podTemplate);
+      });
+    };
+
+    ctrl.addToApplication = function() {
+      var applicationToUpdate = angular.copy(ctrl.application);
+
+      var podTemplate = _.get(applicationToUpdate, 'spec.template');
+
+      ctrl.disableInputs = true;
+
+      if (ctrl.addType === 'env') {
+        var newEnvFrom = {
+          secretRef: {
+            name: ctrl.secret.metadata.name
+          }
+        };
+
+        // For each container, add the new volume mount.
+        _.each(podTemplate.spec.containers, function(container) {
+          container.envFrom = container.envFrom || [];
+          container.envFrom.push(newEnvFrom);
+        });
+      } else {
+        var generateName = $filter('generateName');
+        var name = generateName(ctrl.secret.metadata.name + '-');
+        var newVolumeMount = {
+          name: name,
+          mountPath: ctrl.mountVolume,
+          readOnly: true
+        };
+
+        // For each selected container, add the new volume mount.
+        _.each(podTemplate.spec.containers, function(container) {
+          container.volumeMounts = container.volumeMounts || [];
+          container.volumeMounts.push(newVolumeMount);
+        });
+
+        var newVolume = {
+          name: name,
+          secret: {
+            secretName: ctrl.secret.metadata.name
+          }
+        };
+
+        podTemplate.spec.volumes = podTemplate.spec.volumes || [];
+        podTemplate.spec.volumes.push(newVolume);
+      }
+
+      var humanizeKind = $filter('humanizeKind');
+      var sourceKind = humanizeKind(ctrl.secret.kind);
+      var targetKind = humanizeKind(applicationToUpdate.kind);
+      var context = {
+        namespace: ctrl.project.metadata.name
+      };
+
+      DataService.update(APIService.kindToResource(applicationToUpdate.kind), applicationToUpdate.metadata.name, applicationToUpdate, context).then(
+        function() {
+          NotificationsService.addNotification({
+            type: "success",
+            message: "Successfully added " + sourceKind + " " + ctrl.secret.metadata.name + " to " + targetKind + " " + applicationToUpdate.metadata.name + ".",
+            links: [{
+              href: Navigate.resourceURL(applicationToUpdate),
+              label: "View " + humanizeKind(applicationToUpdate.kind, true)
+            }]
+          });
+          if (angular.isFunction(ctrl.onComplete)) {
+            ctrl.onComplete();
+          }
+        },
+        function(result) {
+          var getErrorDetails = $filter('getErrorDetails');
+
+          NotificationsService.addNotification({
+            type: "error",
+            message: "An error occurred  adding " + sourceKind + " " + ctrl.secret.metadata.name + " to " + targetKind + " " + applicationToUpdate.metadata.name + ". " +
+            getErrorDetails(result)
+          });
+        }).finally(function() {
+          ctrl.disableInputs = false;
+        }
+      );
+    };
+  }
+})();
diff --git a/app/styles/_secrets.less b/app/styles/_secrets.less
index 08a7206b90..b3b45581a1 100644
--- a/app/styles/_secrets.less
+++ b/app/styles/_secrets.less
@@ -1,3 +1,58 @@
+.add-secret-to-application {
+  .catalogs-overlay-panel {
+    max-width: 600px;
+  }
+
+  .dialog-title {
+    border-bottom: 1px solid @color-pf-black-300;
+
+    h3 {
+      margin: 18px 0;
+      padding-left: 15px;
+    }
+  }
+
+  .dialog-body {
+    padding: 20px;
+
+    .add-choice {
+      margin-bottom: 10px;
+    }
+    .button-group {
+      .btn {
+        margin-left: 10px;
+        &:first-of-type {
+          margin-left: 0;
+        }
+      }
+    }
+    legend {
+      border-bottom: 0;
+      font-size:  @font-size-base + 1;
+      font-weight: 600;
+      margin-bottom: 10px;
+    }
+    .radio {
+      margin-top: 0;
+    }
+  }
+
+  .updating {
+    background-color: @color-pf-white;
+    bottom: 55px;
+    left: 0;
+    padding-top: 60px;
+    position: absolute;
+    right: 0;
+    top: 55px;
+    z-index: 1000;
+  }
+
+  .volume-options {
+    margin-left: 20px;
+  }
+}
+
 .osc-secrets-form {
   .advanced-secrets,
   .basic-secrets {
@@ -80,7 +135,7 @@ dl.secret-data {
 }
 
 .create-secret-modal {
-  background-color: #F5F5F5;
+  background-color: @color-pf-black-150;
   .modal-footer{
     margin-top: 0px
   }
diff --git a/app/views/browse/secret.html b/app/views/browse/secret.html
index ad84548998..a576e435df 100644
--- a/app/views/browse/secret.html
+++ b/app/views/browse/secret.html
@@ -10,8 +10,11 @@ <h2>The secret details could not be loaded.</h2>
       </div>
       <div ng-if="loaded && !error">
         <h1 class="contains-actions">
-          <div class="pull-right dropdown" ng-hide="!('secrets' | canIDoAny)">
-            <button type="button" class="dropdown-toggle btn btn-default actions-dropdown-btn hidden-xs" data-toggle="dropdown">
+          <div class="pull-right dropdown">
+            <button type="button" class="btn btn-default hidden-xs" ng-click="addToApplication()">
+              Add to Application
+            </button>
+            <button type="button" class="dropdown-toggle btn btn-default actions-dropdown-btn hidden-xs" data-toggle="dropdown" ng-hide="!('secrets' | canIDoAny)">
               Actions
               <span class="caret"></span>
             </button>
@@ -19,6 +22,9 @@ <h1 class="contains-actions">
                class="dropdown-toggle actions-dropdown-kebab visible-xs-inline"
                data-toggle="dropdown"><i class="fa fa-ellipsis-v"></i><span class="sr-only">Actions</span></a>
             <ul class="dropdown-menu dropdown-menu-right actions action-button">
+              <li class="visible-xs">
+                <a href="" role="button" ng-click="addToApplication()">Add to Application</a>
+              </li>
               <li ng-if="'secrets' | canI : 'update'">
                 <a ng-href="{{secret | editYamlURL}}" role="button">Edit YAML</a>
               </li>
@@ -79,5 +85,8 @@ <h2 class="mar-top-none">
         </div><!-- /col-* -->
       </div>
     </div>
+    <overlay-panel class="add-secret-to-application" show-panel="addToApplicationVisible" show-close="true" handle-close="closeAddToApplication">
+      <add-secret-to-application project="project" secret="secret" on-cancel="closeAddToApplication" on-complete="closeAddToApplication"></add-secret-to-application>
+    </overlay-panel>
   </div><!-- /middle-content -->
 </div>
diff --git a/app/views/directives/add-secret-to-application.html b/app/views/directives/add-secret-to-application.html
new file mode 100644
index 0000000000..7e88b520c0
--- /dev/null
+++ b/app/views/directives/add-secret-to-application.html
@@ -0,0 +1,92 @@
+<div>
+  <div class="dialog-title">
+    <h3>Add to Application</h3>
+  </div>
+  <div class="dialog-body">
+    <form name="addToApplicationForm" novalidate>
+      <fieldset ng-disabled="disableInputs">
+        <legend>Add this secret to application:</legend>
+        <div class="form-group">
+          <div class="application-select">
+            <ui-select id="application" ng-model="ctrl.application" required="true" ng-disabled="ctrl.disableInputs">
+              <ui-select-match placeholder="{{ctrl.applications.length ? 'Select an application' : 'There are no applications in this project'}}">
+              <span>
+                {{$select.selected.metadata.name}}
+                <small class="text-muted">&ndash; {{$select.selected.kind | humanizeKind : true}}</small>
+              </span>
+              </ui-select-match>
+              <ui-select-choices
+                repeat="application in (ctrl.applications) | filter : { metadata: { name: $select.search } } track by (application | uid)"
+                group-by="ctrl.groupByKind">
+                <span ng-bind-html="application.metadata.name | highlight : $select.search"></span>
+              </ui-select-choices>
+            </ui-select>
+          </div>
+        </div>
+        <legend>Add secret as:</legend>
+        <div class="form-group">
+          <div class="radio">
+            <label class="add-choice" for="envFrom">
+              <input id="envFrom" type="radio" ng-model="ctrl.addType" value="env" ng-disabled="ctrl.disableInputs">
+              Environment variables
+            </label>
+            <div>
+              <label class="add-choice" for="mountVolume">
+                <input type="radio" ng-model="ctrl.addType" value="volume" ng-disabled="ctrl.disableInputs">
+                Volume
+              </label>
+            </div>
+            <div class="volume-options">
+              <div ng-class="{'has-error': (addToApplicationForm.mountVolume.$error.pattern && addToApplicationForm.mountVolume.$touched)}">
+                <input class="form-control"
+                       name="mountVolume"
+                       id="mountVolume"
+                       placeholder="Enter a mount path"
+                       type="text"
+                       required
+                       ng-pattern="/^\/.*$/"
+                       osc-unique="ctrl.existingMountPaths"
+                       aria-describedby="mount-path-help"
+                       ng-disabled="ctrl.addType !== 'volume' || ctrl.disableInputs"
+                       ng-model="ctrl.mountVolume"
+                       autocorrect="off"
+                       autocapitalize="off"
+                       spellcheck="false">
+              </div>
+              <div class="help-block bind-description">
+                Mount Path for the volume. A file will be created in this director for each key from the secret. The file contents will be the value of the key.
+              </div>
+              <div class="has-error" ng-show="addToApplicationForm.mountVolume.$error.oscUnique">
+              <span class="help-block">
+                The mount path is already used. Please choose another mount path.
+              </span>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="button-group pull-right">
+          <button
+            class="btn btn-default"
+            ng-class="{'dialog-btn': isDialog}"
+            ng-click="ctrl.onCancel()">
+            Cancel
+          </button>
+          <button type="submit"
+                  class="btn btn-primary"
+                  ng-class="{'dialog-btn': isDialog}"
+                  ng-click="ctrl.addToApplication()"
+                  ng-disabled="ctrl.addType === 'volume' && addToApplicationForm.$invalid || !ctrl.application"
+                  value="">
+            Save
+          </button>
+        </div>
+      </fieldset>
+    </form>
+    <div class="updating" ng-if="ctrl.updating">
+      <div class="spinner spinner-lg" aria-hidden="true"></div>
+      <h3>
+        <span class="sr-only">Updating</span>
+      </h3>
+    </div>
+  </div>
+</div>
diff --git a/dist/scripts/scripts.js b/dist/scripts/scripts.js
index be8564f3ef..0b2d8e5500 100644
--- a/dist/scripts/scripts.js
+++ b/dist/scripts/scripts.js
@@ -3,7 +3,7 @@
 function OverviewController(e, t, n, a, r, o, i, s, c, l, u, d, m, p, f, g, h, v, y, b, C, S, w, k, j) {
 var P = this, R = t("isIE")() || t("isEdge")();
 e.projectName = n.project;
-var E, T, I = t("annotation"), N = t("buildConfigForBuild"), D = t("deploymentIsInProgress"), A = t("imageObjectRef"), B = t("isJenkinsPipelineStrategy"), L = t("isNewerResource"), U = t("label"), O = t("podTemplate"), F = {}, x = {}, M = {}, V = P.state = {
+var T, E, I = t("annotation"), N = t("buildConfigForBuild"), D = t("deploymentIsInProgress"), A = t("imageObjectRef"), B = t("isJenkinsPipelineStrategy"), L = t("isNewerResource"), U = t("label"), O = t("podTemplate"), F = {}, x = {}, M = {}, V = P.state = {
 alerts: {},
 builds: {},
 clusterQuotas: {},
@@ -210,15 +210,15 @@ return "Succeeded" !== e.status.phase && "Failed" !== e.status.phase && (!U(e, "
 V.podsByOwnerUID = C.groupByOwnerUID(P.pods), P.monopods = _.filter(V.podsByOwnerUID[""], je);
 }, Re = function(e) {
 return !!_.get(e, "status.replicas") || (!I(e, "deploymentConfig") || D(e));
-}, Ee = function(e) {
+}, Te = function(e) {
 return I(e, "deploymentConfig");
-}, Te = function() {
+}, Ee = function() {
 if (P.deploymentConfigs && P.replicationControllers) {
 var e = [];
 P.replicationControllersByDeploymentConfig = {}, P.currentByDeploymentConfig = {}, M = {};
 var t = {}, n = {};
 _.each(P.replicationControllers, function(a) {
-var r = Ee(a) || "";
+var r = Te(a) || "";
 (!r || !P.deploymentConfigs[r] && _.get(a, "status.replicas")) && e.push(a);
 var o = M[r];
 o && !L(a, o) || (M[r] = a);
@@ -236,9 +236,9 @@ if (_.get(e, "status.replicas")) return !0;
 var n = u.getRevision(e);
 return !n || !!t && u.getRevision(t) === n;
 }, Ne = function() {
-P.replicaSets && E && (P.replicaSetsByDeploymentUID = b.groupByControllerUID(P.replicaSets), P.currentByDeploymentUID = {}, _.each(P.replicaSetsByDeploymentUID, function(e, t) {
+P.replicaSets && T && (P.replicaSetsByDeploymentUID = b.groupByControllerUID(P.replicaSets), P.currentByDeploymentUID = {}, _.each(P.replicaSetsByDeploymentUID, function(e, t) {
 if (t) {
-var n = E[t], a = _.filter(e, function(e) {
+var n = T[t], a = _.filter(e, function(e) {
 return Ie(e, n);
 }), r = u.sortByRevision(a);
 P.replicaSetsByDeploymentUID[t] = r, P.currentByDeploymentUID[t] = _.head(r);
@@ -381,9 +381,9 @@ P.pods && p.fetchReferencedImageStreamImages(P.pods, V.imagesByDockerReference,
 Ye.push(l.watch("pods", a, function(e) {
 P.pods = e.by("metadata.name"), Pe(), r(), _e(), $e(P.monopods), pe(P.monopods), we(P.monopods), ie(), h.log("pods (subscribe)", P.pods);
 })), Ye.push(l.watch("replicationcontrollers", a, function(e) {
-P.replicationControllers = e.by("metadata.name"), Te(), $e(P.vanillaReplicationControllers), $e(P.monopods), pe(P.vanillaReplicationControllers), we(P.vanillaReplicationControllers), Qe(), ie(), h.log("replicationcontrollers (subscribe)", P.replicationControllers);
+P.replicationControllers = e.by("metadata.name"), Ee(), $e(P.vanillaReplicationControllers), $e(P.monopods), pe(P.vanillaReplicationControllers), we(P.vanillaReplicationControllers), Qe(), ie(), h.log("replicationcontrollers (subscribe)", P.replicationControllers);
 })), Ye.push(l.watch("deploymentconfigs", a, function(e) {
-P.deploymentConfigs = e.by("metadata.name"), Te(), $e(P.deploymentConfigs), $e(P.vanillaReplicationControllers), we(P.deploymentConfigs), Ce(), He(), We(), Qe(), ie(), h.log("deploymentconfigs (subscribe)", P.deploymentConfigs);
+P.deploymentConfigs = e.by("metadata.name"), Ee(), $e(P.deploymentConfigs), $e(P.vanillaReplicationControllers), we(P.deploymentConfigs), Ce(), He(), We(), Qe(), ie(), h.log("deploymentconfigs (subscribe)", P.deploymentConfigs);
 })), Ye.push(l.watch({
 group: "extensions",
 resource: "replicasets"
@@ -393,7 +393,7 @@ P.replicaSets = e.by("metadata.name"), Ne(), $e(P.vanillaReplicaSets), $e(P.mono
 group: "apps",
 resource: "deployments"
 }, a, function(e) {
-E = e.by("metadata.uid"), P.deployments = _.sortBy(E, "metadata.name"), Ne(), $e(P.deployments), $e(P.vanillaReplicaSets), we(P.deployments), Qe(), ie(), h.log("deployments (subscribe)", P.deploymentsByUID);
+T = e.by("metadata.uid"), P.deployments = _.sortBy(T, "metadata.name"), Ne(), $e(P.deployments), $e(P.vanillaReplicaSets), we(P.deployments), Qe(), ie(), h.log("deployments (subscribe)", P.deploymentsByUID);
 })), Ye.push(l.watch("builds", a, function(e) {
 V.builds = e.by("metadata.name"), Ke(), h.log("builds (subscribe)", V.builds);
 })), Ye.push(l.watch({
@@ -429,7 +429,7 @@ P.horizontalPodAutoscalers = e.by("metadata.name"), Le(), h.log("autoscalers (su
 poll: R,
 pollInterval: 6e4
 })), Ye.push(l.watch("imagestreams", a, function(e) {
-T = e.by("metadata.name"), p.buildDockerRefMapForImageStreams(T, V.imageStreamImageRefByDockerReference), r(), h.log("imagestreams (subscribe)", T);
+E = e.by("metadata.name"), p.buildDockerRefMapForImageStreams(E, V.imageStreamImageRefByDockerReference), r(), h.log("imagestreams (subscribe)", E);
 }, {
 poll: R,
 pollInterval: 6e4
@@ -4714,9 +4714,9 @@ var t = a("annotation")(e, "deploymentVersion");
 t && (n.logOptions.replicationControllers[e.metadata.name].version = t), n.logCanRun.replicationControllers[e.metadata.name] = !_.includes([ "New", "Pending" ], a("deploymentStatus")(e));
 }, R = function(e) {
 n.logOptions.builds[e.metadata.name] = {}, n.logCanRun.builds[e.metadata.name] = !_.includes([ "New", "Pending", "Error" ], e.status.phase);
-}, E = function() {
-n.filteredStatefulSets = s.filterForKeywords(_.values(n.statefulSets), S, w);
 }, T = function() {
+n.filteredStatefulSets = s.filterForKeywords(_.values(n.statefulSets), S, w);
+}, E = function() {
 b = _.filter(n.pods, function(e) {
 return !n.filters.hideOlderResources || "Succeeded" !== e.status.phase && "Failed" !== e.status.phase;
 }), n.filteredPods = s.filterForKeywords(b, S, w);
@@ -4780,13 +4780,13 @@ var t = _.get(n, [ "podsByOwnerUID", e.metadata.uid ], []);
 _.isEmpty(t) || u.toPodsForDeployment(e, t);
 }, m.get(e.project).then(_.spread(function(e, a) {
 n.project = e, n.projectContext = a, o.watch("pods", a, function(e) {
-n.podsByName = e.by("metadata.name"), n.pods = C(n.podsByName, !0), n.podsByOwnerUID = d.groupByOwnerUID(n.pods), n.podsLoaded = !0, _.each(n.pods, j), T(), c.log("pods", n.pods);
+n.podsByName = e.by("metadata.name"), n.pods = C(n.podsByName, !0), n.podsByOwnerUID = d.groupByOwnerUID(n.pods), n.podsLoaded = !0, _.each(n.pods, j), E(), c.log("pods", n.pods);
 }), o.watch({
 resource: "statefulsets",
 group: "apps",
 version: "v1beta1"
 }, a, function(e) {
-n.statefulSets = e.by("metadata.name"), n.statefulSetsLoaded = !0, E(), c.log("statefulSets", n.statefulSets);
+n.statefulSets = e.by("metadata.name"), n.statefulSetsLoaded = !0, T(), c.log("statefulSets", n.statefulSets);
 }), o.watch("replicationcontrollers", a, function(e) {
 n.replicationControllers = C(e.by("metadata.name"), !0), n.replicationControllersLoaded = !0, _.each(n.replicationControllers, P), U(), c.log("replicationcontrollers", n.replicationControllers);
 }), o.watch("builds", a, function(e) {
@@ -4799,7 +4799,7 @@ n.replicaSets = C(e.by("metadata.name"), !0), n.replicaSetsLoaded = !0, O(), c.l
 }), n.$on("$destroy", function() {
 o.unwatchAll(f);
 }), n.$watch("filters.hideOlderResources", function() {
-T(), A(), U(), O(), E();
+E(), A(), U(), O(), T();
 var e = t.search();
 e.hideOlderResources = n.filters.hideOlderResources ? "true" : "false", t.replace().search(e);
 }), n.$watch("kindSelector.selected.kind", function() {
@@ -4897,14 +4897,14 @@ subjectName: n.name
 httpErr: e("getErrorDetails")(a)
 }));
 });
-}, E = {};
-n.tab && (E[n.tab] = !0);
-var T = u.getSubjectKinds();
+}, T = {};
+n.tab && (T[n.tab] = !0);
+var E = u.getSubjectKinds();
 angular.extend(a, {
-selectedTab: E,
+selectedTab: T,
 projectName: g,
 forms: {},
-subjectKinds: T,
+subjectKinds: E,
 newBinding: {
 role: "",
 kind: n.tab || "User",
@@ -4980,7 +4980,7 @@ e && !_.includes(a.projects, e) ? a.projects = [ e ].concat(t) : a.projects = t;
 }), l.get(n.project).then(_.spread(function(n, r) {
 f = r, j(), k(f), angular.extend(a, {
 project: n,
-subjectKinds: T,
+subjectKinds: E,
 canUpdateRolebindings: y("rolebindings", "update", g),
 confirmRemove: function(n, r, i) {
 var c = null, l = I(n, r, i, a.user.metadata.name);
@@ -5739,10 +5739,10 @@ e.metricsAvailable = t;
 });
 var P = t("deploymentStatus"), R = function(t) {
 e.logCanRun = !_.includes([ "New", "Pending" ], P(t));
-}, E = t("isIE")() || t("isEdge")();
+}, T = t("isIE")() || t("isEdge")();
 g.get(n.project).then(_.spread(function(u, g) {
 e.project = u, e.projectContext = g;
-var v = {}, T = function() {
+var v = {}, E = function() {
 if (e.hpaForRS = s.filterHPA(v, y, n.replicaSet), e.deploymentConfigName && e.isActive) {
 var t = s.filterHPA(v, "DeploymentConfig", e.deploymentConfigName);
 e.autoscalers = e.hpaForRS.concat(t);
@@ -5755,7 +5755,7 @@ j.push(o.watch(e.resource, g, function(t) {
 var n, a = [];
 angular.forEach(t.by("metadata.name"), function(t) {
 (C(t, "deploymentConfig") || "") === e.deploymentConfigName && a.push(t);
-}), n = i.getActiveDeployment(a), e.isActive = n && n.metadata.uid === e.replicaSet.metadata.uid, T();
+}), n = i.getActiveDeployment(a), e.isActive = n && n.metadata.uid === e.replicaSet.metadata.uid, E();
 }));
 }, N = function() {
 s.getHPAWarnings(e.replicaSet, e.autoscalers, e.limitRanges, u).then(function(t) {
@@ -5813,7 +5813,7 @@ title: e.deployment.metadata.name,
 link: m.resourceURL(e.deployment)
 },
 humanizedKind: "Deployments"
-}), $(), T();
+}), $(), E();
 })), j.push(o.watch({
 group: "extensions",
 resource: "replicasets"
@@ -5876,9 +5876,9 @@ group: "autoscaling",
 resource: "horizontalpodautoscalers",
 version: "v1"
 }, g, function(e) {
-v = e.by("metadata.name"), T(), N();
+v = e.by("metadata.name"), E(), N();
 }, {
-poll: E,
+poll: T,
 pollInterval: 6e4
 })), o.list("limitranges", g).then(function(t) {
 e.limitRanges = t.by("metadata.name"), N();
@@ -6106,7 +6106,11 @@ title: "Secrets",
 link: "project/" + e.project + "/browse/secrets"
 }, {
 title: n.secretName
-} ], r.get(e.project).then(_.spread(function(e, t) {
+} ], n.addToApplicationVisible = !1, n.addToApplication = function() {
+n.addToApplicationVisible = !0;
+}, n.closeAddToApplication = function() {
+n.addToApplicationVisible = !1;
+}, r.get(e.project).then(_.spread(function(e, t) {
 n.project = e, n.context = t, a.get("secrets", n.secretName, t, {
 errorNotification: !1
 }).then(function(e) {
@@ -6639,7 +6643,7 @@ e.$on("$destroy", b), u.get(a.project).then(_.spread(function(n, r) {
 e.project = n, e.context = r, i.canI("buildconfigs", "update", a.project) ? s.get("buildconfigs", a.buildconfig, r, {
 errorNotification: !1
 }).then(function(t) {
-e.buildConfig = t, f(), e.updatedBuildConfig = angular.copy(e.buildConfig), e.buildStrategy = v(e.updatedBuildConfig), e.strategyType = e.buildConfig.spec.strategy.type, e.envVars = e.buildStrategy.env || [], e.triggers = C(e.triggers, e.buildConfig.spec.triggers), e.sources = E(e.sources, e.buildConfig.spec.source), _.has(t, "spec.strategy.jenkinsPipelineStrategy.jenkinsfile") && (e.jenkinsfileOptions.type = "inline"), s.list("secrets", r).then(function(t) {
+e.buildConfig = t, f(), e.updatedBuildConfig = angular.copy(e.buildConfig), e.buildStrategy = v(e.updatedBuildConfig), e.strategyType = e.buildConfig.spec.strategy.type, e.envVars = e.buildStrategy.env || [], e.triggers = C(e.triggers, e.buildConfig.spec.triggers), e.sources = T(e.sources, e.buildConfig.spec.source), _.has(t, "spec.strategy.jenkinsPipelineStrategy.jenkinsfile") && (e.jenkinsfileOptions.type = "inline"), s.list("secrets", r).then(function(t) {
 var n = m.groupSecretsByType(t), a = _.mapValues(n, function(e) {
 return _.map(e, "metadata.name");
 });
@@ -6832,7 +6836,7 @@ var a = "Custom" === e.strategyType ? "secretSource" : "secret", r = _.filter(n,
 return e[a].name;
 });
 _.isEmpty(r) ? delete t.secrets : t.secrets = r;
-}, E = function(e, t) {
+}, T = function(e, t) {
 return "None" === t.type ? e : (e.none = !1, angular.forEach(t, function(t, n) {
 e[n] = !0;
 }), e);
@@ -7543,10 +7547,10 @@ link: "project/" + e.projectName + "/create?tab=fromCatalog"
 }, {
 title: R
 } ];
-var E = {
+var T = {
 name: "app",
 value: ""
-}, T = t("orderByDisplayName"), I = t("getErrorDetails"), N = {}, D = function() {
+}, E = t("orderByDisplayName"), I = t("getErrorDetails"), N = {}, D = function() {
 g.hideNotification("create-builder-list-config-maps-error"), g.hideNotification("create-builder-list-secrets-error"), _.each(N, function(e) {
 !e.id || "error" !== e.type && "warning" !== e.type || g.hideNotification(e.id);
 });
@@ -7567,7 +7571,7 @@ h = e.by("metadata.name"), m.log("quotas", h);
 }), c.list("appliedclusterresourcequotas", n).then(function(e) {
 y = e.by("metadata.name"), m.log("cluster quotas", y);
 }), e.$watch("scaling.autoscale", S), e.$watch("container", S, !0), e.$watch("name", function(e, t) {
-E.value && E.value !== t || (E.value = e);
+T.value && T.value !== t || (T.value = e);
 }), function(a) {
 a.name = r.name, a.imageName = P, a.imageTag = r.imageTag, a.namespace = r.namespace, a.buildConfig = {
 buildOnSourceChange: !0,
@@ -7587,7 +7591,7 @@ deployOnConfigChange: !0
 }, a.DCEnvVarsFromImage, a.DCEnvVarsFromUser = [], a.routing = {
 include: !0,
 portOptions: []
-}, a.labelArray = [ E ], a.annotations = {}, a.scaling = {
+}, a.labelArray = [ T ], a.annotations = {}, a.scaling = {
 replicas: 1,
 autoscale: !1,
 autoscaleOptions: [ {
@@ -7611,7 +7615,7 @@ var o = [], i = [];
 e.valueFromObjects = [], c.list("configmaps", n, null, {
 errorNotification: !1
 }).then(function(t) {
-o = T(t.by("metadata.name")), e.valueFromObjects = o.concat(i);
+o = E(t.by("metadata.name")), e.valueFromObjects = o.concat(i);
 }, function(e) {
 403 !== e.code && g.addNotification({
 id: "create-builder-list-config-maps-error",
@@ -7622,7 +7626,7 @@ details: I(e)
 }), c.list("secrets", n, null, {
 errorNotification: !1
 }).then(function(t) {
-i = T(t.by("metadata.name")), e.valueFromObjects = i.concat(o);
+i = E(t.by("metadata.name")), e.valueFromObjects = i.concat(o);
 var n = b.groupSecretsByType(t), a = _.mapValues(n, function(e) {
 return _.map(e, "metadata.name");
 });
@@ -9228,7 +9232,7 @@ selectedProject: p.project
 }, p.aceLoaded = function(e) {
 (j = e.getSession()).setOption("tabSize", 2), j.setOption("useSoftTabs", !0), e.setDragDelay = 0, e.$blockScrolling = 1 / 0;
 };
-var E = function(e) {
+var T = function(e) {
 a.open({
 animation: !0,
 templateUrl: "views/modals/confirm.html",
@@ -9245,18 +9249,18 @@ cancelButtonText: "Cancel"
 }
 }
 }).result.then(y);
-}, T = {}, I = function() {
-c.hideNotification("from-file-error"), _.each(T, function(e) {
+}, E = {}, I = function() {
+c.hideNotification("from-file-error"), _.each(E, function(e) {
 !e.id || "error" !== e.type && "warning" !== e.type || c.hideNotification(e.id);
 });
 }, N = function(e) {
-I(), T = u.getSecurityAlerts(p.createResources, p.input.selectedProject.metadata.name);
+I(), E = u.getSecurityAlerts(p.createResources, p.input.selectedProject.metadata.name);
 var t = e.quotaAlerts || [];
-T = T.concat(t), _.filter(T, {
+E = E.concat(t), _.filter(E, {
 type: "error"
-}).length ? (_.each(T, function(e) {
+}).length ? (_.each(E, function(e) {
 e.id = _.uniqueId("from-file-alert-"), c.addNotification(e);
-}), p.disableInputs = !1) : T.length ? (E(T), p.disableInputs = !1) : y();
+}), p.disableInputs = !1) : E.length ? (T(E), p.disableInputs = !1) : y();
 }, D = function() {
 if (_.has(p.input.selectedProject, "metadata.uid")) return n.when(p.input.selectedProject);
 var t = p.input.selectedProject.metadata.name, a = p.input.selectedProject.metadata.annotations["new-display-name"], r = e("description")(p.input.selectedProject);
@@ -10589,7 +10593,111 @@ showAction: "=?"
 },
 templateUrl: "views/directives/action-chip.html"
 };
-}), angular.module("openshiftConsole").directive("templateOptions", function() {
+}), function() {
+angular.module("openshiftConsole").component("addSecretToApplication", {
+controller: [ "$filter", "$scope", "APIService", "DataService", "Navigate", "NotificationsService", "StorageService", function(e, t, n, a, r, o, i) {
+var s, c, l, u, d, m = this, p = function() {
+if (s && c && l && u && d) {
+var e = s.concat(c).concat(l).concat(u).concat(d);
+m.applications = _.sortBy(e, [ "metadata.name", "kind" ]), m.updating = !1;
+}
+}, f = function() {
+var t = e("hasDeployment"), n = e("hasDeploymentConfig");
+m.updating = !0;
+var r = {
+namespace: m.project.metadata.name
+};
+a.list("deploymentconfigs", r).then(function(e) {
+s = _.toArray(e.by("metadata.name")), p();
+}), a.list("replicationcontrollers", r).then(function(e) {
+l = _.reject(e.by("metadata.name"), n), p();
+}), a.list({
+group: "apps",
+resource: "deployments"
+}, r).then(function(e) {
+c = _.toArray(e.by("metadata.name")), p();
+}), a.list({
+group: "extensions",
+resource: "replicasets"
+}, r).then(function(e) {
+u = _.reject(e.by("metadata.name"), t), p();
+}), a.list({
+group: "apps",
+resource: "statefulsets"
+}, r).then(function(e) {
+d = _.toArray(e.by("metadata.name")), p();
+});
+};
+m.$onInit = function() {
+m.addType = "env", m.disableInputs = !1, f();
+}, m.$postLink = function() {
+t.$watch(function() {
+return m.application;
+}, function() {
+var e = _.get(m.application, "spec.template");
+m.existingMountPaths = i.getMountPaths(e);
+});
+}, m.addToApplication = function() {
+var t = angular.copy(m.application), i = _.get(t, "spec.template");
+if (m.disableInputs = !0, "env" === m.addType) {
+var s = {
+secretRef: {
+name: m.secret.metadata.name
+}
+};
+_.each(i.spec.containers, function(e) {
+e.envFrom = e.envFrom || [], e.envFrom.push(s);
+});
+} else {
+var c = e("generateName")(m.secret.metadata.name + "-"), l = {
+name: c,
+mountPath: m.mountVolume,
+readOnly: !0
+};
+_.each(i.spec.containers, function(e) {
+e.volumeMounts = e.volumeMounts || [], e.volumeMounts.push(l);
+});
+var u = {
+name: c,
+secret: {
+secretName: m.secret.metadata.name
+}
+};
+i.spec.volumes = i.spec.volumes || [], i.spec.volumes.push(u);
+}
+var d = e("humanizeKind"), p = d(m.secret.kind), f = d(t.kind), g = {
+namespace: m.project.metadata.name
+};
+a.update(n.kindToResource(t.kind), t.metadata.name, t, g).then(function() {
+o.addNotification({
+type: "success",
+message: "Successfully added " + p + " " + m.secret.metadata.name + " to " + f + " " + t.metadata.name + ".",
+links: [ {
+href: r.resourceURL(t),
+label: "View " + d(t.kind, !0)
+} ]
+}), angular.isFunction(m.onComplete) && m.onComplete();
+}, function(n) {
+var a = e("getErrorDetails");
+o.addNotification({
+type: "error",
+message: "An error occurred  adding " + p + " " + m.secret.metadata.name + " to " + f + " " + t.metadata.name + ". " + a(n)
+});
+}).finally(function() {
+m.disableInputs = !1;
+});
+};
+} ],
+controllerAs: "ctrl",
+bindings: {
+project: "<",
+secret: "<",
+onComplete: "<",
+onCancel: "<"
+},
+templateUrl: "views/directives/add-secret-to-application.html"
+});
+}(), angular.module("openshiftConsole").directive("templateOptions", function() {
 return {
 restrict: "E",
 templateUrl: "views/_templateopt.html",
@@ -10823,8 +10931,8 @@ Used: t.available > 0 ? "#0088ce" : "#ec7a08",
 Available: "#d1d1d1"
 }
 };
-E[t.id] ? E[t.id].load(r) : ((n = B(e)).data = r, a(function() {
-$ || (E[t.id] = c3.generate(n));
+T[t.id] ? T[t.id].load(r) : ((n = B(e)).data = r, a(function() {
+$ || (T[t.id] = c3.generate(n));
 }));
 }
 }
@@ -10837,10 +10945,10 @@ _.each(e.datasets, function(e) {
 t[e.id] = e.data;
 });
 var n, r = c.getSparklineData(t), o = e.chartPrefix + "sparkline";
-T[o] ? T[o].load(r) : ((n = L(e)).data = r, e.chartDataColors && (n.color = {
+E[o] ? E[o].load(r) : ((n = L(e)).data = r, e.chartDataColors && (n.color = {
 pattern: e.chartDataColors
 }), a(function() {
-$ || (T[o] = c3.generate(n));
+$ || (E[o] = c3.generate(n));
 }));
 }
 }
@@ -10928,7 +11036,7 @@ m.loaded = !0;
 }
 }
 m.includedMetrics = m.includedMetrics || [ "cpu", "memory", "network" ];
-var R, E = {}, T = {}, I = n("resources.limits.memory"), N = n("resources.limits.cpu"), D = 30, $ = !1;
+var R, T = {}, E = {}, I = n("resources.limits.memory"), N = n("resources.limits.cpu"), D = 30, $ = !1;
 m.uniqueID = c.uniqueID(), m.metrics = [], _.includes(m.includedMetrics, "memory") && m.metrics.push({
 label: "Memory",
 units: "MiB",
@@ -11025,14 +11133,14 @@ delete e.data;
 }, !0), R = t(P, c.getDefaultUpdateInterval(), !1);
 });
 var O = o.$on("metrics.charts.resize", function() {
-c.redraw(E), c.redraw(T);
+c.redraw(T), c.redraw(E);
 });
 m.$on("$destroy", function() {
-R && (t.cancel(R), R = null), O && (O(), O = null), angular.forEach(E, function(e) {
+R && (t.cancel(R), R = null), O && (O(), O = null), angular.forEach(T, function(e) {
 e.destroy();
-}), E = null, angular.forEach(T, function(e) {
+}), T = null, angular.forEach(E, function(e) {
 e.destroy();
-}), T = null, $ = !0;
+}), E = null, $ = !0;
 });
 }
 };
@@ -11148,7 +11256,7 @@ _.set(R, [ e, n ], i);
 } else _.set(R, [ e, n ], r);
 }
 function y() {
-if (!E && h()) {
+if (!T && h()) {
 P = Date.now();
 var e = f();
 c.getPodMetrics(e).then(u, g).finally(function() {
@@ -11158,7 +11266,7 @@ t.loaded = !0;
 }
 var b, C = {}, S = 30, w = "compact" === t.profile, k = !1;
 t.uniqueID = s.uniqueID();
-var j, P, R = {}, E = w, T = function(e) {
+var j, P, R = {}, T = w, E = function(e) {
 return e >= 1024;
 };
 t.metrics = [ {
@@ -11166,10 +11274,10 @@ label: "Memory",
 units: "MiB",
 convert: i.bytesToMiB,
 formatUsage: function(e) {
-return T(e) && (e /= 1024), s.formatUsage(e);
+return E(e) && (e /= 1024), s.formatUsage(e);
 },
 usageUnits: function(e) {
-return T(e) ? "GiB" : "MiB";
+return E(e) ? "GiB" : "MiB";
 },
 descriptor: "memory/usage",
 type: "pod_container",
@@ -11231,7 +11339,7 @@ return _.set(n, "legend.show", !w && !t.showAverage), n;
 t.$watch("options", function() {
 R = {}, j = null, delete t.metricsError, y();
 }, !0), b = e(y, s.getDefaultUpdateInterval(), !1), t.updateInView = function(e) {
-E = !e, e && (!P || Date.now() > P + s.getDefaultUpdateInterval()) && y();
+T = !e, e && (!P || Date.now() > P + s.getDefaultUpdateInterval()) && y();
 };
 var $ = r.$on("metrics.charts.resize", function() {
 s.redraw(C);
@@ -11310,11 +11418,11 @@ y = setInterval(function() {
 n > 10 ? e() : (n++, j().is(":visible") && (P(), e()));
 }, 100);
 }
-}, E = _.debounce(function() {
+}, T = _.debounce(function() {
 P(!0), b(), S();
 }, 100);
-m.on("resize", E);
-var T, I = function() {
+m.on("resize", T);
+var E, I = function() {
 C = !0, d.scrollBottom(u);
 }, N = document.createDocumentFragment(), D = _.debounce(function() {
 l.appendChild(N), N = document.createDocumentFragment(), t.autoScrollActive && I(), t.showScrollLinks || b();
@@ -11322,9 +11430,9 @@ l.appendChild(N), N = document.createDocumentFragment(), t.autoScrollActive && I
 maxWait: 300
 }), A = function(e) {
 var t = r.defer();
-return T ? (T.onClose(function() {
+return E ? (E.onClose(function() {
 t.resolve();
-}), T.stop()) : t.resolve(), e || (D.cancel(), l && (l.innerHTML = ""), N = document.createDocumentFragment()), t.promise;
+}), E.stop()) : t.resolve(), e || (D.cancel(), l && (l.innerHTML = ""), N = document.createDocumentFragment()), t.promise;
 }, B = function() {
 A().then(function() {
 t.$evalAsync(function() {
@@ -11344,7 +11452,7 @@ limitBytes: 10485760
 }, t.options), n = 0, a = function(e) {
 n++, N.appendChild(f(n, e)), D();
 };
-(T = c.createStream(h, v, t.context, e)).onMessage(function(r, o, i) {
+(E = c.createStream(h, v, t.context, e)).onMessage(function(r, o, i) {
 t.$evalAsync(function() {
 t.empty = !1, "logs" !== t.state && (t.state = "logs", R());
 }), r && (e.limitBytes && i >= e.limitBytes && (t.$evalAsync(function() {
@@ -11352,18 +11460,18 @@ t.limitReached = !0, t.loading = !1;
 }), A(!0)), a(r), !t.largeLog && n >= e.tailLines && t.$evalAsync(function() {
 t.largeLog = !0;
 }));
-}), T.onClose(function() {
-T = null, t.$evalAsync(function() {
+}), E.onClose(function() {
+E = null, t.$evalAsync(function() {
 t.loading = !1, t.autoScrollActive = !1, 0 !== n || t.emptyStateMessage || (t.state = "empty", t.emptyStateMessage = "The logs are no longer available or could not be loaded.");
 });
-}), T.onError(function() {
-T = null, t.$evalAsync(function() {
+}), E.onError(function() {
+E = null, t.$evalAsync(function() {
 angular.extend(t, {
 loading: !1,
 autoScrollActive: !1
 }), 0 === n ? (t.state = "empty", t.emptyStateMessage = "The logs are no longer available or could not be loaded.") : t.errorWhileRunning = !0;
 });
-}), T.start();
+}), E.start();
 }
 });
 });
@@ -11409,7 +11517,7 @@ t.autoScrollActive = !t.autoScrollActive, t.autoScrollActive && I();
 goChromeless: d.chromelessLink,
 restartLogs: B
 }), t.$on("$destroy", function() {
-A(), m.off("resize", E), m.off("scroll", S), u && $(u).off("scroll", S);
+A(), m.off("resize", T), m.off("scroll", S), u && $(u).off("scroll", S);
 }), "deploymentconfigs/logs" === h && !v) return t.state = "empty", void (t.emptyStateMessage = "Logs are not available for this replication controller because it was not generated from a deployment configuration.");
 t.$watchGroup([ "name", "options.container", "run" ], B);
 } ],
@@ -13501,7 +13609,7 @@ hasErrors: r
 project: n.input.selectedProject,
 appName: n.app.name
 }) : s.toNextSteps(n.app.name, n.input.selectedProject.metadata.name);
-}, E = function(e) {
+}, T = function(e) {
 a.open({
 animation: !0,
 templateUrl: "views/modals/confirm.html",
@@ -13518,14 +13626,14 @@ cancelButtonText: "Cancel"
 }
 }
 }).result.then(R);
-}, T = function(e) {
+}, E = function(e) {
 h = e.quotaAlerts || [];
 var t = _.filter(h, {
 type: "error"
 });
 n.nameTaken || t.length ? (n.disableInputs = !1, _.each(h, function(e) {
 e.id = _.uniqueId("deploy-image-alert-"), c.addNotification(e);
-})) : h.length ? (E(h), n.disableInputs = !1) : R();
+})) : h.length ? (T(h), n.disableInputs = !1) : R();
 };
 n.create = function() {
 n.disableInputs = !0, v(), y().then(function(e) {
@@ -13535,7 +13643,7 @@ namespace: n.input.selectedProject.metadata.name
 }), o = function(e) {
 return n.nameTaken = e.nameTaken, a;
 };
-t.then(o, o).then(T, T);
+t.then(o, o).then(E, E);
 }, function(e) {
 c.addNotification({
 id: "deploy-image-create-project-error",
@@ -13994,14 +14102,14 @@ e.totalUnread = j(e.notifications).length, e.hasUnread = !!e.totalUnread, o.$emi
 });
 }, R = function() {
 _.each(v, P);
-}, E = function(e) {
-return _.orderBy(e, [ "event.lastTimestamp", "event.firstTimestamp" ], [ "desc", "desc" ]);
 }, T = function(e) {
+return _.orderBy(e, [ "event.lastTimestamp", "event.firstTimestamp" ], [ "desc", "desc" ]);
+}, E = function(e) {
 var t = _.sortBy(e, function(e) {
 return e.heading;
 });
 return _.each(t, function(e) {
-e.notifications = E(e.notifications), e.counts = P(e);
+e.notifications = T(e.notifications), e.counts = P(e);
 }), t;
 }, I = function(e) {
 var t = {};
@@ -14026,7 +14134,7 @@ return e.project.metadata.name === r.project;
 });
 });
 }, A = function(e) {
-h = I(e.by("metadata.uid")), v = T(h), $();
+h = I(e.by("metadata.uid")), v = E(h), $();
 }, B = {
 Normal: "pficon pficon-info",
 Warning: "pficon pficon-warning-triangle-o"
diff --git a/dist/scripts/templates.js b/dist/scripts/templates.js
index dde6b3f3cd..7baaec4829 100644
--- a/dist/scripts/templates.js
+++ b/dist/scripts/templates.js
@@ -3571,13 +3571,19 @@ angular.module('openshiftConsoleTemplates', []).run(['$templateCache', function(
     "</div>\n" +
     "<div ng-if=\"loaded && !error\">\n" +
     "<h1 class=\"contains-actions\">\n" +
-    "<div class=\"pull-right dropdown\" ng-hide=\"!('secrets' | canIDoAny)\">\n" +
-    "<button type=\"button\" class=\"dropdown-toggle btn btn-default actions-dropdown-btn hidden-xs\" data-toggle=\"dropdown\">\n" +
+    "<div class=\"pull-right dropdown\">\n" +
+    "<button type=\"button\" class=\"btn btn-default hidden-xs\" ng-click=\"addToApplication()\">\n" +
+    "Add to Application\n" +
+    "</button>\n" +
+    "<button type=\"button\" class=\"dropdown-toggle btn btn-default actions-dropdown-btn hidden-xs\" data-toggle=\"dropdown\" ng-hide=\"!('secrets' | canIDoAny)\">\n" +
     "Actions\n" +
     "<span class=\"caret\"></span>\n" +
     "</button>\n" +
     "<a href=\"\" class=\"dropdown-toggle actions-dropdown-kebab visible-xs-inline\" data-toggle=\"dropdown\"><i class=\"fa fa-ellipsis-v\"></i><span class=\"sr-only\">Actions</span></a>\n" +
     "<ul class=\"dropdown-menu dropdown-menu-right actions action-button\">\n" +
+    "<li class=\"visible-xs\">\n" +
+    "<a href=\"\" role=\"button\" ng-click=\"addToApplication()\">Add to Application</a>\n" +
+    "</li>\n" +
     "<li ng-if=\"'secrets' | canI : 'update'\">\n" +
     "<a ng-href=\"{{secret | editYamlURL}}\" role=\"button\">Edit YAML</a>\n" +
     "</li>\n" +
@@ -3630,6 +3636,9 @@ angular.module('openshiftConsoleTemplates', []).run(['$templateCache', function(
     "</div>\n" +
     "</div>\n" +
     "</div>\n" +
+    "<overlay-panel class=\"add-secret-to-application\" show-panel=\"addToApplicationVisible\" show-close=\"true\" handle-close=\"closeAddToApplication\">\n" +
+    "<add-secret-to-application project=\"project\" secret=\"secret\" on-cancel=\"closeAddToApplication\" on-complete=\"closeAddToApplication\"></add-secret-to-application>\n" +
+    "</overlay-panel>\n" +
     "</div>\n" +
     "</div>"
   );
@@ -5531,6 +5540,79 @@ angular.module('openshiftConsoleTemplates', []).run(['$templateCache', function(
   );
 
 
+  $templateCache.put('views/directives/add-secret-to-application.html',
+    "<div>\n" +
+    "<div class=\"dialog-title\">\n" +
+    "<h3>Add to Application</h3>\n" +
+    "</div>\n" +
+    "<div class=\"dialog-body\">\n" +
+    "<form name=\"addToApplicationForm\" novalidate>\n" +
+    "<fieldset ng-disabled=\"disableInputs\">\n" +
+    "<legend>Add this secret to application:</legend>\n" +
+    "<div class=\"form-group\">\n" +
+    "<div class=\"application-select\">\n" +
+    "<ui-select id=\"application\" ng-model=\"ctrl.application\" required=\"true\" ng-disabled=\"ctrl.disableInputs\">\n" +
+    "<ui-select-match placeholder=\"{{ctrl.applications.length ? 'Select an application' : 'There are no applications in this project'}}\">\n" +
+    "<span>\n" +
+    "{{$select.selected.metadata.name}}\n" +
+    "<small class=\"text-muted\">&ndash; {{$select.selected.kind | humanizeKind : true}}</small>\n" +
+    "</span>\n" +
+    "</ui-select-match>\n" +
+    "<ui-select-choices repeat=\"application in (ctrl.applications) | filter : { metadata: { name: $select.search } } track by (application | uid)\" group-by=\"ctrl.groupByKind\">\n" +
+    "<span ng-bind-html=\"application.metadata.name | highlight : $select.search\"></span>\n" +
+    "</ui-select-choices>\n" +
+    "</ui-select>\n" +
+    "</div>\n" +
+    "</div>\n" +
+    "<legend>Add secret as:</legend>\n" +
+    "<div class=\"form-group\">\n" +
+    "<div class=\"radio\">\n" +
+    "<label class=\"add-choice\" for=\"envFrom\">\n" +
+    "<input id=\"envFrom\" type=\"radio\" ng-model=\"ctrl.addType\" value=\"env\" ng-disabled=\"ctrl.disableInputs\">\n" +
+    "Environment variables\n" +
+    "</label>\n" +
+    "<div>\n" +
+    "<label class=\"add-choice\" for=\"mountVolume\">\n" +
+    "<input type=\"radio\" ng-model=\"ctrl.addType\" value=\"volume\" ng-disabled=\"ctrl.disableInputs\">\n" +
+    "Volume\n" +
+    "</label>\n" +
+    "</div>\n" +
+    "<div class=\"volume-options\">\n" +
+    "<div ng-class=\"{'has-error': (addToApplicationForm.mountVolume.$error.pattern && addToApplicationForm.mountVolume.$touched)}\">\n" +
+    "<input class=\"form-control\" name=\"mountVolume\" id=\"mountVolume\" placeholder=\"Enter a mount path\" type=\"text\" required ng-pattern=\"/^\\/.*$/\" osc-unique=\"ctrl.existingMountPaths\" aria-describedby=\"mount-path-help\" ng-disabled=\"ctrl.addType !== 'volume' || ctrl.disableInputs\" ng-model=\"ctrl.mountVolume\" autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\">\n" +
+    "</div>\n" +
+    "<div class=\"help-block bind-description\">\n" +
+    "Mount Path for the volume. A file will be created in this director for each key from the secret. The file contents will be the value of the key.\n" +
+    "</div>\n" +
+    "<div class=\"has-error\" ng-show=\"addToApplicationForm.mountVolume.$error.oscUnique\">\n" +
+    "<span class=\"help-block\">\n" +
+    "The mount path is already used. Please choose another mount path.\n" +
+    "</span>\n" +
+    "</div>\n" +
+    "</div>\n" +
+    "</div>\n" +
+    "</div>\n" +
+    "<div class=\"button-group pull-right\">\n" +
+    "<button class=\"btn btn-default\" ng-class=\"{'dialog-btn': isDialog}\" ng-click=\"ctrl.onCancel()\">\n" +
+    "Cancel\n" +
+    "</button>\n" +
+    "<button type=\"submit\" class=\"btn btn-primary\" ng-class=\"{'dialog-btn': isDialog}\" ng-click=\"ctrl.addToApplication()\" ng-disabled=\"ctrl.addType === 'volume' && addToApplicationForm.$invalid || !ctrl.application\" value=\"\">\n" +
+    "Save\n" +
+    "</button>\n" +
+    "</div>\n" +
+    "</fieldset>\n" +
+    "</form>\n" +
+    "<div class=\"updating\" ng-if=\"ctrl.updating\">\n" +
+    "<div class=\"spinner spinner-lg\" aria-hidden=\"true\"></div>\n" +
+    "<h3>\n" +
+    "<span class=\"sr-only\">Updating</span>\n" +
+    "</h3>\n" +
+    "</div>\n" +
+    "</div>\n" +
+    "</div>"
+  );
+
+
   $templateCache.put('views/directives/annotations.html',
     "<p ng-class=\"{'mar-bottom-xl': !expandAnnotations}\">\n" +
     "<a href=\"\" ng-click=\"toggleAnnotations()\" ng-if=\"!expandAnnotations\">Show Annotations</a>\n" +
diff --git a/dist/styles/main.css b/dist/styles/main.css
index 4dc6fe7ce0..42d94d117a 100644
--- a/dist/styles/main.css
+++ b/dist/styles/main.css
@@ -3,6 +3,7 @@ body,figure{margin:0}
 .text-left,caption,th{text-align:left}
 .navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.pre-scrollable{max-height:340px}
 .c3 svg,html{-webkit-tap-highlight-color:transparent}
+.list-view-pf-top-align .list-view-pf-actions,.list-view-pf-top-align .list-view-pf-checkbox{align-self:flex-start}
 .fa,.font-icon,.glyphicon{-moz-osx-font-smoothing:grayscale}
 @font-face{font-family:"Open Sans";font-style:normal;font-weight:300;src:url(../styles/fonts/OpenSans-Light-webfont.eot);src:local("Open Sans Light"),local("OpenSans-Light"),url(../styles/fonts/OpenSans-Light-webfont.eot?#iefix) format("embedded-opentype"),url(../styles/fonts/OpenSans-Light-webfont.woff2) format("woff2"),url(../styles/fonts/OpenSans-Light-webfont.woff) format("woff"),url(../styles/fonts/OpenSans-Light-webfont.ttf) format("truetype"),url(../styles/fonts/OpenSans-Light-webfont.svg#OpenSans) format("svg")}
 @font-face{font-family:"Open Sans";font-style:normal;font-weight:400;src:url(../styles/fonts/OpenSans-Regular-webfont.eot);src:local("Open Sans"),local("OpenSans"),url(../styles/fonts/OpenSans-Regular-webfont.eot?#iefix) format("embedded-opentype"),url(../styles/fonts/OpenSans-Regular-webfont.woff2) format("woff2"),url(../styles/fonts/OpenSans-Regular-webfont.woff) format("woff"),url(../styles/fonts/OpenSans-Regular-webfont.ttf) format("truetype"),url(../styles/fonts/OpenSans-Regular-webfont.svg#OpenSans) format("svg")}
@@ -766,6 +767,7 @@ select[multiple].input-lg,textarea.input-lg{height:auto}
 .form-horizontal .form-group-sm .control-label{padding-top:3px;font-size:11px}
 }
 .btn{display:inline-block;margin-bottom:0;font-weight:600;text-align:center;vertical-align:middle;touch-action:manipulation;cursor:pointer;border:1px solid transparent;white-space:nowrap;padding:2px 6px;font-size:13px;line-height:1.66666667;border-radius:1px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}
+.bootstrap-switch,.datepicker table{-webkit-user-select:none;-moz-user-select:none}
 .btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:dotted thin!important;outline:-webkit-focus-ring-color auto 5px!important;outline-offset:-2px!important}
 .btn.focus,.btn:focus,.btn:hover{color:#4d5258;text-decoration:none}
 .btn.active,.btn:active{outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}
@@ -950,7 +952,7 @@ select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.i
 .navbar-collapse.in{overflow-y:visible}
 .navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-left:0;padding-right:0}
 }
-.embed-responsive,.modal,.modal-open,.progress{overflow:hidden}
+.carousel-inner,.embed-responsive,.modal,.modal-open,.progress{overflow:hidden}
 @media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}
 }
 .membership .ui-select-bootstrap>.ui-select-choices,.typeahead-long{max-height:300px}
@@ -1336,7 +1338,7 @@ button.close{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance
 .popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}
 .popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#bbb}
 .popover.left>.arrow:after{right:1px;border-right-width:0;border-left-color:#fff}
-.carousel-inner{overflow:hidden;width:100%}
+.carousel-inner{width:100%}
 .carousel-inner>.item{display:none;position:relative;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}
 @media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-moz-transition:-moz-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;-moz-perspective:1000px;perspective:1000px}
 .carousel-inner>.item.active.right,.carousel-inner>.item.next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);left:0}
@@ -2374,7 +2376,7 @@ td>.progress:first-child:last-child{margin-bottom:0;margin-top:3px}
 .datepicker-dropdown.datepicker-orient-bottom:after{top:-6px}
 .datepicker-dropdown.datepicker-orient-top:before{bottom:-7px;border-bottom:0;border-top:7px solid #bbb}
 .datepicker-dropdown.datepicker-orient-top:after{bottom:-6px;border-bottom:0;border-top:6px solid #fff}
-.datepicker table{margin:0;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}
+.datepicker table{margin:0;-webkit-touch-callout:none;-khtml-user-select:none;-ms-user-select:none;user-select:none}
 .datepicker table tr td,.datepicker table tr th{text-align:center;width:30px;height:30px;border:none}
 .datepicker table tr td.new,.datepicker table tr td.old{color:#9c9c9c}
 .datepicker table tr td.day:hover,.datepicker table tr td.focused{background:#f1f1f1;cursor:pointer}
@@ -2510,7 +2512,8 @@ select.bs-select-hidden,select.selectpicker{display:none!important}
 .bs-donebutton .btn-group button{width:100%}
 .bs-searchbox+.bs-actionsbox{padding:0 8px 4px}
 .bs-searchbox .form-control{margin-bottom:0;width:100%;float:none}
-.bootstrap-switch{display:inline-block;direction:ltr;cursor:pointer;border-radius:1px;border:1px solid #bbb;position:relative;text-align:left;overflow:hidden;line-height:8px;z-index:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}
+.bootstrap-switch{display:inline-block;direction:ltr;cursor:pointer;border-radius:1px;border:1px solid #bbb;position:relative;text-align:left;overflow:hidden;line-height:8px;z-index:0;-ms-user-select:none;user-select:none;vertical-align:middle;-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}
+.c3 text,.log-line-number{-moz-user-select:none;-webkit-user-select:none}
 .bootstrap-switch .bootstrap-switch-container{display:inline-block;top:0;border-radius:1px;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}
 .bootstrap-switch .bootstrap-switch-handle-off,.bootstrap-switch .bootstrap-switch-handle-on,.bootstrap-switch .bootstrap-switch-label{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;cursor:pointer;display:inline-block!important;height:100%;padding:2px 6px;font-size:13px;line-height:21px}
 .ie9.layout-pf-alt-fixed .nav-pf-vertical-alt,.ie9.layout-pf-fixed .nav-pf-secondary-nav,.ie9.layout-pf-fixed .nav-pf-tertiary-nav,.ie9.layout-pf-fixed .nav-pf-vertical,.list-group-item-header{box-sizing:content-box}
@@ -2544,7 +2547,7 @@ select.bs-select-hidden,select.selectpicker{display:none!important}
 .bootstrap-touchspin .input-group-btn-vertical i{position:absolute;font-weight:400}
 .c3 svg{font:10px sans-serif}
 .c3 line,.c3 path{fill:none;stroke:#000}
-.c3 text{-webkit-user-select:none;-moz-user-select:none;user-select:none}
+.c3 text{user-select:none}
 .c3-bars path,.c3-event-rect,.c3-legend-item-tile,.c3-xgrid-focus,.c3-ygrid{shape-rendering:crispEdges}
 .c3-chart-arc text{fill:#fff;font-size:13px}
 .c3-grid text{fill:#aaa}
@@ -3129,7 +3132,6 @@ a.disabled{color:#8b8d8f;cursor:not-allowed;text-decoration:none}
 }
 .list-view-pf-actions{float:right;margin-bottom:20px;margin-left:20px;margin-top:20px;order:2}
 .list-view-pf-actions .dropdown-kebab-pf,.list-view-pf-actions button,.list-view-pf-actions>a{margin-left:10px}
-.list-view-pf-top-align .list-view-pf-actions{align-self:flex-start}
 .list-view-pf-additional-info{align-items:center;display:flex;flex-wrap:wrap}
 @media (min-width:992px){.list-view-pf-additional-info{flex:1 0 auto;float:left;width:50%}
 }
@@ -3144,7 +3146,6 @@ a.disabled{color:#8b8d8f;cursor:not-allowed;text-decoration:none}
 @media (min-width:992px){.list-view-pf-body{align-items:center;display:flex;flex-direction:row}
 }
 .list-view-pf-checkbox{border-right:1px solid #d1d1d1;float:left;margin-right:15px;padding:3px 10px 3px 0}
-.list-view-pf-top-align .list-view-pf-checkbox{align-self:flex-start}
 .list-view-pf-stacked .list-view-pf-description{display:block;flex:none}
 @media (min-width:992px){.list-view-pf-description{align-items:center;display:flex;float:left;width:50%}
 }
@@ -5307,6 +5308,17 @@ td.visible-print,th.visible-print{display:table-cell!important}
 .landing::-webkit-scrollbar-track{background-color:#042e43}
 .landing-side-bar::-webkit-scrollbar-track{background-color:#21272e}
 .project-bar ::-webkit-scrollbar-track{background-color:#050505}
+.add-secret-to-application .catalogs-overlay-panel{max-width:600px}
+.add-secret-to-application .dialog-title{border-bottom:1px solid #d1d1d1}
+.add-secret-to-application .dialog-title h3{margin:18px 0;padding-left:15px}
+.add-secret-to-application .dialog-body{padding:20px}
+.add-secret-to-application .dialog-body .add-choice{margin-bottom:10px}
+.add-secret-to-application .dialog-body .button-group .btn{margin-left:10px}
+.add-secret-to-application .dialog-body .button-group .btn:first-of-type{margin-left:0}
+.add-secret-to-application .dialog-body legend{border-bottom:0;font-size:14px;font-weight:600;margin-bottom:10px}
+.add-secret-to-application .dialog-body .radio{margin-top:0}
+.add-secret-to-application .updating{background-color:#fff;bottom:55px;left:0;padding-top:60px;position:absolute;right:0;top:55px;z-index:1000}
+.add-secret-to-application .volume-options{margin-left:20px}
 .osc-secrets-form .advanced-secrets .help-blocks,.osc-secrets-form .advanced-secrets .input-labels,.osc-secrets-form .basic-secrets .help-blocks,.osc-secrets-form .basic-secrets .input-labels{display:table;padding-right:30px;position:relative;width:100%}
 .osc-secrets-form .advanced-secrets .help-blocks .help-block,.osc-secrets-form .advanced-secrets .help-blocks .input-label,.osc-secrets-form .advanced-secrets .input-labels .help-block,.osc-secrets-form .advanced-secrets .input-labels .input-label,.osc-secrets-form .basic-secrets .help-blocks .help-block,.osc-secrets-form .basic-secrets .help-blocks .input-label,.osc-secrets-form .basic-secrets .input-labels .help-block,.osc-secrets-form .basic-secrets .input-labels .input-label{width:100%;float:left;padding-right:5px}
 .osc-secrets-form .advanced-secrets .secret-row,.osc-secrets-form .basic-secrets .secret-row{display:table;padding-right:30px;position:relative;width:100%;margin-bottom:15px}
@@ -5322,7 +5334,7 @@ dl.secret-data dt{margin-bottom:5px}
 dl.secret-data dt{clear:left;float:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:160px}
 }
 dl.secret-data pre{margin-bottom:0}
-.create-secret-modal{background-color:#F5F5F5}
+.create-secret-modal{background-color:#f5f5f5}
 .create-secret-modal .modal-footer{margin-top:0px}
 .create-secret-modal .modal-body{padding:0px 18px}
 .create-secret-editor{height:150px}
@@ -5657,7 +5669,7 @@ alerts+.chromeless .log-loading-msg{margin-top:130px}
 .log-line{color:#d1d1d1}
 .log-line:hover{background-color:#22262b;color:#ededed}
 .log-line-number:before{content:attr(data-line-number)}
-.log-line-number{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;border-right:1px #272b30 solid;padding-right:10px;vertical-align:top;white-space:nowrap;width:60px;color:#72767b}
+.log-line-number{-ms-user-select:none;border-right:1px #272b30 solid;padding-right:10px;vertical-align:top;white-space:nowrap;width:60px;color:#72767b}
 .log-line-text{padding:0 10px;white-space:pre-wrap;width:100%;word-wrap:break-word;word-break:break-word;overflow-wrap:break-word;min-width:0}
 .appended-icon,.project-date [am-time-ago],.projects-list [am-time-ago]{white-space:nowrap}
 .log-line-text::-moz-selection{color:#101214;background:#e5e5e5}