diff --git a/src/ol/tile/stamen.js b/src/ol/tile/stamen.js
new file mode 100644
index 0000000000..69d0985571
--- /dev/null
+++ b/src/ol/tile/stamen.js
@@ -0,0 +1,92 @@
+// FIXME Configure minZoom when supported by TileGrid
+
+goog.provide('ol.layer.Stamen');
+goog.provide('ol.store.Stamen');
+
+goog.require('ol.TileUrlFunction');
+goog.require('ol.layer.XYZ');
+
+
+/**
+ * @enum {string}
+ */
+ol.StamenProvider = {
+ TERRAIN: 'terrain',
+ TONER: 'toner',
+ WATERCOLOR: 'watercolor'
+};
+
+
+/**
+ * @enum {string}
+ */
+ol.StamenFlavor = {
+ TERRAIN_BACKGROUND: 'background',
+ TERRAIN_LABELS: 'labels',
+ TERRAIN_LINES: 'lines',
+ TONER_2010: '2010',
+ TONER_2011: '2011',
+ TONER_2011_LABELS: '2011-labels',
+ TONER_2011_LINES: '2011-lines',
+ TONER_2011_LITE: '2011-lite',
+ TONER_BACKGROUND: 'background',
+ TONER_HYBRID: 'hybrid',
+ TONER_LABELS: 'labels',
+ TONER_LINES: 'lines',
+ TONER_LITE: 'lite'
+};
+
+
+/**
+ * @type {Object.
}
+ */
+ol.StamenProviderConfig = {};
+ol.StamenProviderConfig[ol.StamenProvider.TERRAIN] = {
+ type: 'jpg',
+ minZoom: 4,
+ maxZoom: 18
+};
+ol.StamenProviderConfig[ol.StamenProvider.TONER] = {
+ type: 'png',
+ minZoom: 0,
+ maxZoom: 20
+};
+ol.StamenProviderConfig[ol.StamenProvider.WATERCOLOR] = {
+ type: 'jpg',
+ minZoom: 3,
+ maxZoom: 16
+};
+
+
+
+/**
+ * @constructor
+ * @extends {ol.layer.XYZ}
+ * @param {ol.StamenProvider} provider Provider.
+ * @param {ol.StamenFlavor=} opt_flavor Flavor.
+ * @param {Object.=} opt_values Values.
+ */
+ol.layer.Stamen = function(provider, opt_flavor, opt_values) {
+
+ var config = ol.StamenProviderConfig[provider];
+
+ var layer = provider;
+ if (goog.isDef(opt_flavor)) {
+ layer += '-' + opt_flavor;
+ }
+ var tileUrlFunction = ol.TileUrlFunction.createFromTemplate(
+ 'http://{a-d}.tile.stamen.com/' + layer + '/{z}/{x}/{y}.' + config.type);
+
+ var attribution = new ol.Attribution(
+ 'Map tiles by Stamen Design, ' +
+ 'under ' +
+ 'CC BY 3.0. ' +
+ 'Data by OpenStreetMap, ' +
+ 'under ' +
+ 'CC BY SA.');
+
+ goog.base(this, config.maxZoom, tileUrlFunction, [attribution]);
+
+};
+goog.inherits(ol.layer.Stamen, ol.layer.XYZ);