diff --git a/src/ol/renderer/Composite.js b/src/ol/renderer/Composite.js
new file mode 100644
index 0000000000..5682a15e90
--- /dev/null
+++ b/src/ol/renderer/Composite.js
@@ -0,0 +1,103 @@
+goog.provide('ol.renderer.Composite');
+
+goog.require('goog.dom');
+goog.require('ol.layer.Layer');
+goog.require('ol.Loc');
+
+/**
+ * @constructor
+ * @param {string|Element} target
+ */
+ol.renderer.Composite = function(target) {
+
+ /**
+ * @type Element
+ * @private
+ */
+ this.target_ = goog.dom.getElement(target);
+
+ /**
+ * @type Array.
+ * @private
+ */
+ this.renderers_ = [];
+
+};
+
+/**
+ * @param {Array.} layers
+ * @param {ol.Loc} center
+ * @param {number} resolution
+ */
+ol.renderer.Composite.prototype.draw = function(layers, center, resolution) {
+};
+
+/**
+ * @param {ol.layer.Layer} layer
+ */
+ol.renderer.Composite.prototype.getRenderer = function(layer) {
+ function finder(candidate) {
+ return candidate.getLayer() === layer;
+ }
+ return goog.array.find(this.renderers_, finder);
+};
+
+/**
+ * @param {ol.layer.Layer} layer
+ */
+ol.renderer.Composite.prototype.createRenderer = function(layer) {
+};
+
+/**
+ * List of preferred renderer types. Layer renderers have a getType method
+ * that returns a string describing their type. This list determines the
+ * preferences for picking a layer renderer.
+ *
+ * @type {Array.}
+ */
+ol.renderer.Composite.preferredRenderers = ["svg", "canvas", "vml"];
+
+/**
+ * @param {ol.layer.Layer} layer
+ * @returns {Function}
+ */
+ol.renderer.Composite.prototype.pickRendererType = function(layer) {
+ // maps candidate renderer types to candidate renderers
+ var types = {};
+
+ function picker(Candidate) {
+ var supports = Candidate.isSupported() && Candidate.canRender(layer);
+ if (supports) {
+ types[Candidate.getType()] = Candidate;
+ }
+ return supports;
+ }
+ var Candidates = goog.array.some(ol.renderer.Composite.registry_, picker);
+
+ // check to see if any preferred renderers are available
+ var preferences = ol.renderer.Composite.preferredRenderers;
+
+ var Renderer;
+ for (var i=0, ii=preferences.length; i}
+ * @private
+ */
+ol.renderer.Composite.registry_ = [];
+
+/**
+ * @param {Function} Renderer
+ */
+ol.renderer.Composite.register = function(Renderer) {
+ ol.renderer.Composite.registry_.push(Renderer);
+};