diff --git a/src/objectliterals.exports b/src/objectliterals.exports
index 2e348ad82d..c90a6c0a85 100644
--- a/src/objectliterals.exports
+++ b/src/objectliterals.exports
@@ -157,6 +157,14 @@
@exportObjectLiteralProperty ol.tilegrid.TileGridOptions.tileSize ol.Size|undefined
@exportObjectLiteralProperty ol.tilegrid.TileGridOptions.tileSizes Array.
|undefined
+@exportObjectLiteral ol.tilegrid.WMTSOptions
+@exportObjectLiteralProperty ol.tilegrid.WMTSOptions.origin ol.Coordinate|undefined
+@exportObjectLiteralProperty ol.tilegrid.WMTSOptions.origins Array.|undefined
+@exportObjectLiteralProperty ol.tilegrid.WMTSOptions.resolutions !Array.
+@exportObjectLiteralProperty ol.tilegrid.WMTSOptions.matrixIds !Array.
+@exportObjectLiteralProperty ol.tilegrid.WMTSOptions.tileSize ol.Size|undefined
+@exportObjectLiteralProperty ol.tilegrid.WMTSOptions.tileSizes Array.|undefined
+
@exportObjectLiteral ol.tilegrid.XYZOptions
@exportObjectLiteralProperty ol.tilegrid.XYZOptions.maxZoom number
diff --git a/src/ol/tilegrid/wmtstilegrid.exports b/src/ol/tilegrid/wmtstilegrid.exports
new file mode 100644
index 0000000000..bf723f3d17
--- /dev/null
+++ b/src/ol/tilegrid/wmtstilegrid.exports
@@ -0,0 +1 @@
+@exportClass ol.tilegrid.WMTS ol.tilegrid.WMTSOptions
diff --git a/src/ol/tilegrid/wmtstilegrid.js b/src/ol/tilegrid/wmtstilegrid.js
new file mode 100644
index 0000000000..81f2c01adf
--- /dev/null
+++ b/src/ol/tilegrid/wmtstilegrid.js
@@ -0,0 +1,53 @@
+goog.provide('ol.tilegrid.WMTS');
+
+goog.require('ol.Size');
+goog.require('ol.projection');
+goog.require('ol.tilegrid.TileGrid');
+
+
+
+/**
+ * @constructor
+ * @extends {ol.tilegrid.TileGrid}
+ * @param {ol.tilegrid.WMTSOptions} wmtsOptions WMTS options.
+ */
+ol.tilegrid.WMTS = function(wmtsOptions) {
+
+ goog.asserts.assert(
+ wmtsOptions.resolutions.length == wmtsOptions.matrixIds.length);
+
+ /**
+ * @private
+ * @type {!Array.}
+ */
+ this.matrixIds_ = wmtsOptions.matrixIds;
+ // FIXME: should the matrixIds become optionnal?
+
+ goog.base(this, {
+ origin: wmtsOptions.origin,
+ origins: wmtsOptions.origins,
+ resolutions: wmtsOptions.resolutions,
+ tileSize: wmtsOptions.tileSize,
+ tileSizes: wmtsOptions.tileSizes
+ });
+
+};
+goog.inherits(ol.tilegrid.WMTS, ol.tilegrid.TileGrid);
+
+
+/**
+ * @param {number} z Z.
+ * @return {string} MatrixId..
+ */
+ol.tilegrid.WMTS.prototype.getMatrixId = function(z) {
+ goog.asserts.assert(0 <= z && z < this.matrixIds_.length);
+ return this.matrixIds_[z];
+};
+
+
+/**
+ * @return {Array.} MatrixIds.
+ */
+ol.tilegrid.WMTS.prototype.getMatrixIds = function() {
+ return this.matrixIds_;
+};