diff --git a/app/scripts/directives/editEnvironmentFrom.js b/app/scripts/directives/editEnvironmentFrom.js
index 227924089a..966791f902 100644
--- a/app/scripts/directives/editEnvironmentFrom.js
+++ b/app/scripts/directives/editEnvironmentFrom.js
@@ -11,7 +11,8 @@
       addRowLink: '@',              // creates a link to "add row" and sets its text label
       entries: '=',                 // an array of objects containing configmaps and secrets
       envFromSelectorOptions: '<',  // dropdown selector options, an array of objects
-      selectorPlaceholder: '@'      // placeholder copy for dropdown selector
+      selectorPlaceholder: '@',     // placeholder copy for dropdown selector
+      isReadonly: '<?'              // display as read only values
     },
     templateUrl: 'views/directives/edit-environment-from.html'
   });
@@ -20,7 +21,6 @@
                                $filter,
                                utils) {
     var ctrl = this;
-
     var canI = $filter('canI');
     var humanizeKind = $filter('humanizeKind');
     var uniqueId = _.uniqueId();
@@ -51,6 +51,7 @@
       }
 
       ctrl.envFromEntries.splice(start, deleteCount);
+
       if(!ctrl.envFromEntries.length && ctrl.addRowLink) {
         addEntry(ctrl.envFromEntries);
       }
@@ -59,11 +60,18 @@
       ctrl.editEnvironmentFromForm.$setDirty();
     };
 
+    ctrl.hasOptions = function() {
+      return !_.isEmpty(ctrl.envFromSelectorOptions);
+    };
+
+    ctrl.hasEntries = function() {
+      return _.some(ctrl.entries, function(entry) {
+        return _.get(entry, 'configMapRef.name') || _.get(entry, 'secretRef.name');
+      });
+    };
+
     ctrl.isEnvFromReadonly = function(entry) {
-      return ctrl.isReadonlyAny ||
-        entry.isReadonlyValue === true ||
-        ((entry.secretRef || entry.configMapRef) && !entry.selectedEnvFrom) ||
-        _.isEmpty(ctrl.envFromSelectorOptions);
+      return ctrl.isReadonly === true || entry && entry.isReadonly === true;
     };
 
     ctrl.groupByKind = function(object) {
@@ -107,66 +115,61 @@
       });
     };
 
-    var updateEnvFromEntries = function(entries) {
-      ctrl.envFromEntries = entries || [];
+    var updateEnvFromEntries = function() {
+      var configMapsByName = {};
+      var secretsByName = {};
+
+      ctrl.envFromEntries = ctrl.entries || [];
 
       if(!ctrl.envFromEntries.length) {
         addEntry(ctrl.envFromEntries);
       }
 
-      _.each(ctrl.envFromEntries, function(entry) {
-        if(entry) {
-          if(entry.configMapRef && !canI('configmaps', 'get')) {
-            entry.isReadonlyValue = true;
-          }
-
-          if(entry.secretRef && !canI('secrets', 'get')) {
-            entry.isReadonlyValue = true;
-          }
+      _.each(ctrl.envFromSelectorOptions, function(option) {
+        switch(option.kind) {
+          case 'ConfigMap':
+            configMapsByName[option.metadata.name] = option;
+            break;
+          case 'Secret':
+            secretsByName[option.metadata.name] = option;
+            break;
         }
       });
-    };
 
-    var getReferenceValue = function(option) {
-      var referenceValue;
-
-      switch(option.kind) {
-        case 'ConfigMap':
-          referenceValue = _.find(ctrl.envFromEntries, {configMapRef: {name: option.metadata.name}});
-          break;
-        case 'Secret':
-          referenceValue = _.find(ctrl.envFromEntries, {secretRef: {name: option.metadata.name}});
-          break;
-      }
+      _.each(ctrl.envFromEntries, function(entry) {
+        var refType;
+        var entryType;
 
-      return referenceValue;
-    };
+        if (entry.configMapRef) {
+          refType = 'configMapRef';
+          entryType = 'configmaps';
+        }
 
-    ctrl.checkEntries = function(option, entrySelectedEnvFrom) {
-      if(option === entrySelectedEnvFrom) {
-        return false;
-      }
+        if(entry.secretRef) {
+          refType = 'secretRef';
+          entryType = 'secrets';
+        }
 
-      return !!(getReferenceValue(option));
-    };
+        if (refType && entryType) {
+          var refTypeName = entry[refType].name;
 
-    var findReferenceValueForEntries = function(entries, envFromSelectorOptions) {
-      ctrl.cannotAdd = (ctrl.isReadonlyAny || _.isEmpty(envFromSelectorOptions));
+          if (entry.configMapRef && (refTypeName in configMapsByName)) {
+            entry.selectedEnvFrom = configMapsByName[refTypeName];
+          }
 
-      if(envFromSelectorOptions) {
-        _.each(envFromSelectorOptions, function(option) {
-          var referenceValue = getReferenceValue(option);
+          if (entry.secretRef && (refTypeName in secretsByName)) {
+            entry.selectedEnvFrom = secretsByName[refTypeName];
+          }
 
-          if (referenceValue) {
-            _.set(referenceValue, 'selectedEnvFrom', option);
+          if(!canI(entryType, 'get')) {
+            entry.isReadonly = true;
           }
-        });
-      }
+        }
+      });
     };
 
     ctrl.$onInit = function() {
-      updateEnvFromEntries(ctrl.entries);
-      findReferenceValueForEntries(ctrl.entries, ctrl.envFromSelectorOptions);
+      updateEnvFromEntries();
 
       if('cannotDelete' in $attrs) {
         ctrl.cannotDeleteAny = true;
@@ -176,10 +179,6 @@
         ctrl.cannotSort = true;
       }
 
-      if('isReadonly' in $attrs) {
-        ctrl.isReadonlyAny = true;
-      }
-
       if('showHeader' in $attrs) {
         ctrl.showHeader = true;
       }
@@ -190,12 +189,8 @@
     };
 
     ctrl.$onChanges = function(changes) {
-      if(changes.entries) {
-        updateEnvFromEntries(changes.entries.currentValue);
-      }
-
-      if(changes.envFromSelectorOptions) {
-        findReferenceValueForEntries(ctrl.envFromEntries, changes.envFromSelectorOptions.currentValue);
+      if(changes.entries || changes.envFromSelectorOptions) {
+        updateEnvFromEntries();
       }
     };
   }
diff --git a/app/views/directives/edit-environment-from.html b/app/views/directives/edit-environment-from.html
index 7940c8c551..6a3ac4419a 100644
--- a/app/views/directives/edit-environment-from.html
+++ b/app/views/directives/edit-environment-from.html
@@ -8,7 +8,6 @@
       </div>
     </div>
   </div>
-
   <div ng-model="$ctrl.entries" class="environment-from-editor" as-sortable="$ctrl.dragControlListeners">
     <div
       class="environment-from-entry"
@@ -18,9 +17,9 @@
       as-sortable-item>
 
       <div class="form-group environment-from-input">
-        <div ng-if="$ctrl.isEnvFromReadonly(entry)" class="faux-input-group">
+        <div ng-if="$ctrl.isEnvFromReadonly(entry) || !$ctrl.hasOptions()" class="faux-input-group">
           <div ng-if="!entry.configMapRef.name && !entry.secretRef.name">
-            No secrets or config maps have been added as Environment From.
+            No config maps or secrets have been added as Environment From.
           </div>
           <div ng-if="entry.configMapRef.name || entry.secretRef.name" class="faux-form-control readonly">
             Use all keys and values from
@@ -29,7 +28,7 @@
           </div>
         </div>
 
-        <div ng-if="!$ctrl.isEnvFromReadonly(entry)">
+        <div ng-if="!$ctrl.isEnvFromReadonly(entry) && $ctrl.hasOptions()">
           <div class="ui-select">
             <ui-select ng-model="entry.selectedEnvFrom"
                        ng-required="entry.selectedEnvFrom"
@@ -42,7 +41,6 @@
                 </span>
               </ui-select-match>
               <ui-select-choices
-                ui-disable-choice="$ctrl.checkEntries(source, entry.selectedEnvFrom)"
                 repeat="source in $ctrl.envFromSelectorOptions | filter : { metadata: { name: $select.search } } track by (source | uid)"
                 group-by="$ctrl.groupByKind">
                 <span ng-bind-html="source.metadata.name | highlight : $select.search"></span>
@@ -52,7 +50,7 @@
         </div>
       </div>
 
-      <div ng-if="!$ctrl.isReadonlyAny && !entry.isReadonlyValue" class="environment-from-editor-button">
+      <div ng-if="!$ctrl.isEnvFromReadonly(entry) && $ctrl.hasEntries()" class="environment-from-editor-button">
         <span
           ng-if="!$ctrl.cannotSort && $ctrl.entries.length > 1"
           class="fa fa-bars sort-row"
@@ -70,18 +68,18 @@
       </div>
       <div class="environment-from-view-details">
         <a
-          ng-if="entry.selectedEnvFrom"
           href=""
+          ng-if="entry.selectedEnvFrom"
           ng-click="$ctrl.viewOverlayPanel(entry.selectedEnvFrom)">View Details</a>
       </div>
     </div>
 
-    <div class="environment-from-entry form-group" ng-if="!$ctrl.cannotAdd">
+    <div class="environment-from-entry form-group" ng-if="!$ctrl.isEnvFromReadonly() && $ctrl.hasOptions()">
       <a
         href=""
         class="add-row-link"
         role="button"
-        ng-click="$ctrl.onAddRow()">{{ $ctrl.addRowLink }}</a>
+        ng-click="$ctrl.onAddRow()">{{$ctrl.addRowLink}}</a>
     </div>
   </div>
 
diff --git a/app/views/directives/edit-environment-variables.html b/app/views/directives/edit-environment-variables.html
index b5f1e950dc..2c2fa1ec98 100644
--- a/app/views/directives/edit-environment-variables.html
+++ b/app/views/directives/edit-environment-variables.html
@@ -46,6 +46,7 @@ <h4 class="section-label">
       selector-placeholder="Config Map/Secret"
       env-from-selector-options="$ctrl.valueFromObjects"
       add-row-link="Add ALL Values from Config Map or Secret"
+      is-readonly="$ctrl.ngReadonly"
       show-header>
     </edit-environment-from>
   </div>
diff --git a/dist/scripts/scripts.js b/dist/scripts/scripts.js
index 487a76eff9..f70be3c8d1 100644
--- a/dist/scripts/scripts.js
+++ b/dist/scripts/scripts.js
@@ -9207,8 +9207,14 @@ a.onAddRow = function() {
 s(a.envFromEntries), n.setFocusOn("." + a.setFocusClass);
 }, a.deleteEntry = function(e, t) {
 a.envFromEntries && !a.envFromEntries.length || (a.envFromEntries.splice(e, t), !a.envFromEntries.length && a.addRowLink && s(a.envFromEntries), a.updateEntries(a.envFromEntries), a.editEnvironmentFromForm.$setDirty());
+}, a.hasOptions = function() {
+return !_.isEmpty(a.envFromSelectorOptions);
+}, a.hasEntries = function() {
+return _.some(a.entries, function(e) {
+return _.get(e, "configMapRef.name") || _.get(e, "secretRef.name");
+});
 }, a.isEnvFromReadonly = function(e) {
-return a.isReadonlyAny || !0 === e.isReadonlyValue || (e.secretRef || e.configMapRef) && !e.selectedEnvFrom || _.isEmpty(a.envFromSelectorOptions);
+return !0 === a.isReadonly || e && !0 === e.isReadonly;
 }, a.groupByKind = function(e) {
 return o(e.kind);
 }, a.dragControlListeners = {
@@ -9238,50 +9244,37 @@ a.entries = _.filter(e, function(e) {
 return e.secretRef || e.configMapRef;
 });
 };
-var c = function(e) {
-a.envFromEntries = e || [], a.envFromEntries.length || s(a.envFromEntries), _.each(a.envFromEntries, function(e) {
-e && (e.configMapRef && !r("configmaps", "get") && (e.isReadonlyValue = !0), e.secretRef && !r("secrets", "get") && (e.isReadonlyValue = !0));
-});
-}, l = function(e) {
-var t;
-switch (e.kind) {
+var c = function() {
+var e = {}, t = {};
+a.envFromEntries = a.entries || [], a.envFromEntries.length || s(a.envFromEntries), _.each(a.envFromSelectorOptions, function(n) {
+switch (n.kind) {
 case "ConfigMap":
-t = _.find(a.envFromEntries, {
-configMapRef: {
-name: e.metadata.name
-}
-});
+e[n.metadata.name] = n;
 break;
 
 case "Secret":
-t = _.find(a.envFromEntries, {
-secretRef: {
-name: e.metadata.name
+t[n.metadata.name] = n;
 }
-});
+}), _.each(a.envFromEntries, function(n) {
+var a, o;
+if (n.configMapRef && (a = "configMapRef", o = "configmaps"), n.secretRef && (a = "secretRef", o = "secrets"), a && o) {
+var i = n[a].name;
+n.configMapRef && i in e && (n.selectedEnvFrom = e[i]), n.secretRef && i in t && (n.selectedEnvFrom = t[i]), r(o, "get") || (n.isReadonly = !0);
 }
-return t;
-};
-a.checkEntries = function(e, t) {
-return e !== t && !!l(e);
-};
-var u = function(e, t) {
-a.cannotAdd = a.isReadonlyAny || _.isEmpty(t), t && _.each(t, function(e) {
-var t = l(e);
-t && _.set(t, "selectedEnvFrom", e);
 });
 };
 a.$onInit = function() {
-c(a.entries), u(a.entries, a.envFromSelectorOptions), "cannotDelete" in e && (a.cannotDeleteAny = !0), "cannotSort" in e && (a.cannotSort = !0), "isReadonly" in e && (a.isReadonlyAny = !0), "showHeader" in e && (a.showHeader = !0), a.envFromEntries && !a.envFromEntries.length && s(a.envFromEntries);
+c(), "cannotDelete" in e && (a.cannotDeleteAny = !0), "cannotSort" in e && (a.cannotSort = !0), "showHeader" in e && (a.showHeader = !0), a.envFromEntries && !a.envFromEntries.length && s(a.envFromEntries);
 }, a.$onChanges = function(e) {
-e.entries && c(e.entries.currentValue), e.envFromSelectorOptions && u(a.envFromEntries, e.envFromSelectorOptions.currentValue);
+(e.entries || e.envFromSelectorOptions) && c();
 };
 } ],
 bindings: {
 addRowLink: "@",
 entries: "=",
 envFromSelectorOptions: "<",
-selectorPlaceholder: "@"
+selectorPlaceholder: "@",
+isReadonly: "<?"
 },
 templateUrl: "views/directives/edit-environment-from.html"
 });
diff --git a/dist/scripts/templates.js b/dist/scripts/templates.js
index e3f6abd1f2..93c5ef1b15 100644
--- a/dist/scripts/templates.js
+++ b/dist/scripts/templates.js
@@ -6709,9 +6709,9 @@ angular.module('openshiftConsoleTemplates', []).run(['$templateCache', function(
     "<div ng-model=\"$ctrl.entries\" class=\"environment-from-editor\" as-sortable=\"$ctrl.dragControlListeners\">\n" +
     "<div class=\"environment-from-entry\" ng-class-odd=\"'odd'\" ng-class-even=\"'even'\" ng-repeat=\"entry in $ctrl.envFromEntries\" as-sortable-item>\n" +
     "<div class=\"form-group environment-from-input\">\n" +
-    "<div ng-if=\"$ctrl.isEnvFromReadonly(entry)\" class=\"faux-input-group\">\n" +
+    "<div ng-if=\"$ctrl.isEnvFromReadonly(entry) || !$ctrl.hasOptions()\" class=\"faux-input-group\">\n" +
     "<div ng-if=\"!entry.configMapRef.name && !entry.secretRef.name\">\n" +
-    "No secrets or config maps have been added as Environment From.\n" +
+    "No config maps or secrets have been added as Environment From.\n" +
     "</div>\n" +
     "<div ng-if=\"entry.configMapRef.name || entry.secretRef.name\" class=\"faux-form-control readonly\">\n" +
     "Use all keys and values from\n" +
@@ -6719,7 +6719,7 @@ angular.module('openshiftConsoleTemplates', []).run(['$templateCache', function(
     "<span ng-if=\"entry.secretRef.name\">secret {{entry.secretRef.name}}</span>\n" +
     "</div>\n" +
     "</div>\n" +
-    "<div ng-if=\"!$ctrl.isEnvFromReadonly(entry)\">\n" +
+    "<div ng-if=\"!$ctrl.isEnvFromReadonly(entry) && $ctrl.hasOptions()\">\n" +
     "<div class=\"ui-select\">\n" +
     "<ui-select ng-model=\"entry.selectedEnvFrom\" ng-required=\"entry.selectedEnvFrom\" on-select=\"$ctrl.envFromObjectSelected($index, entry, $select.selected)\" ng-class=\"{'{{$ctrl.setFocusClass}}' : $last}\">\n" +
     "<ui-select-match placeholder=\"Select a resource\">\n" +
@@ -6728,23 +6728,23 @@ angular.module('openshiftConsoleTemplates', []).run(['$templateCache', function(
     "<small class=\"text-muted\">&ndash; {{$select.selected.kind | humanizeKind : true}}</small>\n" +
     "</span>\n" +
     "</ui-select-match>\n" +
-    "<ui-select-choices ui-disable-choice=\"$ctrl.checkEntries(source, entry.selectedEnvFrom)\" repeat=\"source in $ctrl.envFromSelectorOptions | filter : { metadata: { name: $select.search } } track by (source | uid)\" group-by=\"$ctrl.groupByKind\">\n" +
+    "<ui-select-choices repeat=\"source in $ctrl.envFromSelectorOptions | filter : { metadata: { name: $select.search } } track by (source | uid)\" group-by=\"$ctrl.groupByKind\">\n" +
     "<span ng-bind-html=\"source.metadata.name | highlight : $select.search\"></span>\n" +
     "</ui-select-choices>\n" +
     "</ui-select>\n" +
     "</div>\n" +
     "</div>\n" +
     "</div>\n" +
-    "<div ng-if=\"!$ctrl.isReadonlyAny && !entry.isReadonlyValue\" class=\"environment-from-editor-button\">\n" +
+    "<div ng-if=\"!$ctrl.isEnvFromReadonly(entry) && $ctrl.hasEntries()\" class=\"environment-from-editor-button\">\n" +
     "<span ng-if=\"!$ctrl.cannotSort && $ctrl.entries.length > 1\" class=\"fa fa-bars sort-row\" role=\"button\" aria-label=\"Move row\" aria-grabbed=\"false\" as-sortable-item-handle></span>\n" +
     "<a ng-if=\"!$ctrl.cannotDeleteAny\" href=\"\" class=\"pficon pficon-close delete-row as-sortable-item-delete\" role=\"button\" aria-label=\"Delete row\" ng-click=\"$ctrl.deleteEntry($index, 1)\"></a>\n" +
     "</div>\n" +
     "<div class=\"environment-from-view-details\">\n" +
-    "<a ng-if=\"entry.selectedEnvFrom\" href=\"\" ng-click=\"$ctrl.viewOverlayPanel(entry.selectedEnvFrom)\">View Details</a>\n" +
+    "<a href=\"\" ng-if=\"entry.selectedEnvFrom\" ng-click=\"$ctrl.viewOverlayPanel(entry.selectedEnvFrom)\">View Details</a>\n" +
     "</div>\n" +
     "</div>\n" +
-    "<div class=\"environment-from-entry form-group\" ng-if=\"!$ctrl.cannotAdd\">\n" +
-    "<a href=\"\" class=\"add-row-link\" role=\"button\" ng-click=\"$ctrl.onAddRow()\">{{ $ctrl.addRowLink }}</a>\n" +
+    "<div class=\"environment-from-entry form-group\" ng-if=\"!$ctrl.isEnvFromReadonly() && $ctrl.hasOptions()\">\n" +
+    "<a href=\"\" class=\"add-row-link\" role=\"button\" ng-click=\"$ctrl.onAddRow()\">{{$ctrl.addRowLink}}</a>\n" +
     "</div>\n" +
     "</div>\n" +
     "<overlay-panel class=\"add-config-to-application\" show-panel=\"$ctrl.overlayPanelVisible\" show-close=\"true\" handle-close=\"$ctrl.closeOverlayPanel\">\n" +
@@ -6798,7 +6798,7 @@ angular.module('openshiftConsoleTemplates', []).run(['$templateCache', function(
     "Environment From\n" +
     "<span class=\"pficon pficon-help\" aria-hidden=\"true\" data-toggle=\"tooltip\" data-original-title=\"Environment From lets you add all key-value pairs from a config map or secret as environment variables.\"></span>\n" +
     "</h4>\n" +
-    "<edit-environment-from entries=\"container.envFrom\" selector-placeholder=\"Config Map/Secret\" env-from-selector-options=\"$ctrl.valueFromObjects\" add-row-link=\"Add ALL Values from Config Map or Secret\" show-header>\n" +
+    "<edit-environment-from entries=\"container.envFrom\" selector-placeholder=\"Config Map/Secret\" env-from-selector-options=\"$ctrl.valueFromObjects\" add-row-link=\"Add ALL Values from Config Map or Secret\" is-readonly=\"$ctrl.ngReadonly\" show-header>\n" +
     "</edit-environment-from>\n" +
     "</div>\n" +
     "<button class=\"btn btn-default\" ng-if=\"$ctrl.canIUpdate && !$ctrl.ngReadonly\" ng-click=\"$ctrl.save()\" ng-disabled=\"$ctrl.form.$pristine || $ctrl.form.$invalid\">Save</button>\n" +