diff --git a/externs/olx.js b/externs/olx.js
index af2312a837..7d51dbbbfd 100644
--- a/externs/olx.js
+++ b/externs/olx.js
@@ -1726,9 +1726,7 @@ olx.interaction.PinchZoomOptions.prototype.duration;
/**
* @typedef {{addCondition: (ol.events.ConditionType|undefined),
* condition: (ol.events.ConditionType|undefined),
- * layerFilter: (function(ol.layer.Layer): boolean|undefined),
- * layer: (ol.layer.Layer|undefined),
- * layers: (Array.
|undefined),
+ * layers: (Array.|function(ol.layer.Layer): boolean|undefined),
* style: (ol.style.Style|Array.|ol.feature.StyleFunction|undefined),
* removeCondition: (ol.events.ConditionType|undefined),
* toggleCondition: (ol.events.ConditionType|undefined)}}
@@ -1756,22 +1754,12 @@ olx.interaction.SelectOptions.prototype.condition;
/**
- * Filter function to restrict selection to a subset of layers.
- * @type {function(ol.layer.Layer): boolean|undefined}
- */
-olx.interaction.SelectOptions.prototype.layerFilter;
-
-
-/**
- * Layer. The single layer from which features should be selected.
- * @type {ol.layer.Layer|undefined}
- */
-olx.interaction.SelectOptions.prototype.layer;
-
-
-/**
- * Layers. Zero or more layers from which features should be selected.
- * @type {Array.|undefined}
+ * A list of layers from which features should be
+ * selected. Alternatively, a filter function can be provided. The
+ * function will be called for each layer in the map and should return
+ * `true` for layers that you want to be selectable. If the option is
+ * absent, all visible layers will be considered selectable.
+ * @type {Array.|function(ol.layer.Layer): boolean|undefined}
*/
olx.interaction.SelectOptions.prototype.layers;
diff --git a/src/ol/interaction/selectinteraction.js b/src/ol/interaction/selectinteraction.js
index 181b912869..30bad1a3a3 100644
--- a/src/ol/interaction/selectinteraction.js
+++ b/src/ol/interaction/selectinteraction.js
@@ -55,28 +55,20 @@ ol.interaction.Select = function(opt_options) {
options.toggleCondition : ol.events.condition.shiftKeyOnly;
var layerFilter;
- if (goog.isDef(options.layerFilter)) {
- layerFilter = options.layerFilter;
- } else if (goog.isDef(options.layer)) {
- var layer = options.layer;
- layerFilter =
- /**
- * @param {ol.layer.Layer} l Layer.
- * @return {boolean} Include.
- */
- function(l) {
- return l === layer;
- };
- } else if (goog.isDef(options.layers)) {
- var layers = options.layers;
- layerFilter =
- /**
- * @param {ol.layer.Layer} layer Layer.
- * @return {boolean} Include.
- */
- function(layer) {
- return goog.array.contains(layers, layer);
- };
+ if (goog.isDef(options.layers)) {
+ if (goog.isFunction(options.layers)) {
+ layerFilter = options.layers;
+ } else {
+ var layers = options.layers;
+ layerFilter =
+ /**
+ * @param {ol.layer.Layer} layer Layer.
+ * @return {boolean} Include.
+ */
+ function(layer) {
+ return goog.array.contains(layers, layer);
+ };
+ }
} else {
layerFilter = goog.functions.TRUE;
}