docs: function (options) {
  
  		if (!Crafty.support.canvas || Crafty.deactivateParticles) return this;
  
  		//If we drew on the main canvas, we'd have to redraw
  		//potentially huge sections of the screen every frame
  		//So we create a separate canvas, where we only have to redraw
  		//the changed particles.
  		var c, ctx, relativeX, relativeY, bounding;
  
  		c = document.createElement("canvas");
  		c.width = Crafty.viewport.width;
  		c.height = Crafty.viewport.height;
  		c.style.position = 'absolute';
  
  		Crafty.stage.elem.appendChild(c);
  
  		ctx = c.getContext('2d');
  
  		this._Particles.init(options);
  
  		// Clean up the DOM when this component is removed
  		this.bind('Remove', function () {
  			Crafty.stage.elem.removeChild(c);
  		}).bind("RemoveComponent", function (id) {
  			if (id === "particles")
  				Crafty.stage.elem.removeChild(c);
  		});;
  
  		relativeX = this.x + Crafty.viewport.x;
  		relativeY = this.y + Crafty.viewport.y;
  		this._Particles.position = this._Particles.vectorHelpers.create(relativeX, relativeY);
  
  		var oldViewport = { x: Crafty.viewport.x, y: Crafty.viewport.y };
  
  		this.bind('EnterFrame', function () {
  			relativeX = this.x + Crafty.viewport.x;
  			relativeY = this.y + Crafty.viewport.y;
  			this._Particles.viewportDelta = { x: Crafty.viewport.x - oldViewport.x, y: Crafty.viewport.y - oldViewport.y };
  
  			oldViewport = { x: Crafty.viewport.x, y: Crafty.viewport.y };
  
  			this._Particles.position = this._Particles.vectorHelpers.create(relativeX, relativeY);
  
  			//Selective clearing
  			if (typeof Crafty.DrawManager.boundingRect == 'function') {
  				bounding = Crafty.DrawManager.boundingRect(this._Particles.register);
  				if (bounding) ctx.clearRect(bounding._x, bounding._y, bounding._w, bounding._h);
  			} else {
  				ctx.clearRect(0, 0, Crafty.viewport.width, Crafty.viewport.height);
  			}
  
  			//This updates all particle colors & positions
  			this._Particles.update();
  
  			//This renders the updated particles
  			this._Particles.render(ctx);
  		});
  		return this;
  	}