diff --git a/externs/olx.js b/externs/olx.js
index c06867e93e..9689d9e241 100644
--- a/externs/olx.js
+++ b/externs/olx.js
@@ -4573,6 +4573,7 @@ olx.source.TileDebugOptions.prototype.wrapX;
* @typedef {{attributions: (Array.
|undefined),
* crossOrigin: (null|string|undefined),
* maxZoom: (number|undefined),
+ * opaque: (boolean|undefined),
* reprojectionErrorThreshold: (number|undefined),
* tileLoadFunction: (ol.TileLoadFunctionType|undefined),
* url: (string|undefined),
@@ -4612,6 +4613,14 @@ olx.source.OSMOptions.prototype.crossOrigin;
olx.source.OSMOptions.prototype.maxZoom;
+/**
+ * Whether the layer is opaque. Default is `true`.
+ * @type {boolean|undefined}
+ * @api
+ */
+olx.source.OSMOptions.prototype.opaque;
+
+
/**
* Maximum allowed reprojection error (in pixels). Default is `0.5`.
* Higher values can increase reprojection performance, but decrease precision.
diff --git a/src/ol/source/osmsource.js b/src/ol/source/osmsource.js
index 52f7816ec6..91d9c69c93 100644
--- a/src/ol/source/osmsource.js
+++ b/src/ol/source/osmsource.js
@@ -33,7 +33,7 @@ ol.source.OSM = function(opt_options) {
goog.base(this, {
attributions: attributions,
crossOrigin: crossOrigin,
- opaque: true,
+ opaque: options.opaque !== undefined ? options.opaque : true,
maxZoom: options.maxZoom !== undefined ? options.maxZoom : 19,
reprojectionErrorThreshold: options.reprojectionErrorThreshold,
tileLoadFunction: options.tileLoadFunction,