From 52091d9dff9b213dc653b4fca7f991b0f9f8fcb7 Mon Sep 17 00:00:00 2001
From: Ben Richards <benjamindrichards@gmail.com>
Date: Tue, 27 Jan 2015 17:28:25 +1300
Subject: [PATCH] Reformat source to use tabs for greater visual clarity

Also fix a couple of orphaned, undocumented properties
---
 bower.json                                         |   46 +-
 build/kiwi.d.ts                                    |   62 +-
 build/kiwi.js                                      |   59 +-
 docs/classes/Kiwi.CameraManager.html               |   12 +-
 docs/classes/Kiwi.ComponentManager.html            |    4 +-
 docs/classes/Kiwi.Components.ArcadePhysics.html    |   58 +-
 docs/classes/Kiwi.Components.Box.html              |   24 +-
 docs/classes/Kiwi.Components.Input.html            |    2 +-
 docs/classes/Kiwi.GameManager.html                 |   10 +-
 docs/classes/Kiwi.GameObjects.Sprite.html          |    2 +-
 docs/classes/Kiwi.GameObjects.Textfield.html       |   26 +-
 docs/classes/Kiwi.GameObjects.Tilemap.TileMap.html |   26 +-
 .../Kiwi.GameObjects.Tilemap.TileMapLayer.html     |   26 +-
 .../classes/Kiwi.GameObjects.Tilemap.TileType.html |   14 +-
 docs/classes/Kiwi.Geom.Ray.html                    |    2 +-
 docs/classes/Kiwi.Group.html                       |    2 +-
 docs/classes/Kiwi.Input.Touch.html                 |   38 +-
 docs/classes/Kiwi.PluginManager.html               |   24 +-
 docs/classes/Kiwi.Renderers.GLRenderManager.html   |  124 +-
 docs/classes/Kiwi.Renderers.GLTextureManager.html  |   34 +-
 docs/classes/Kiwi.Renderers.GLTextureWrapper.html  |   78 +-
 docs/classes/Kiwi.Renderers.Renderer.html          |   30 +-
 .../Kiwi.Renderers.TextureAtlasRenderer.html       |   46 +-
 docs/classes/Kiwi.Shaders.ShaderManager.html       |   20 +-
 docs/classes/Kiwi.Shaders.ShaderPair.html          |   32 +-
 docs/classes/Kiwi.Shaders.TextureAtlasShader.html  |   24 +-
 docs/classes/Kiwi.Sound.Audio.html                 |   18 +-
 docs/classes/Kiwi.Sound.AudioManager.html          |   82 +-
 docs/classes/Kiwi.Stage.html                       |   12 +-
 docs/classes/Kiwi.State.html                       |   46 +-
 docs/classes/Kiwi.StateManager.html                |    8 +-
 docs/data.json                                     |  702 ++---
 docs/files/src_Kiwi.ts.html                        |  454 ++--
 docs/files/src_animations_Animation.ts.html        |  988 +++----
 docs/files/src_animations_Sequence.ts.html         |  109 +-
 docs/files/src_animations_tweens_Tween.ts.html     | 1118 ++++----
 .../src_animations_tweens_TweenManager.ts.html     |  368 +--
 .../src_animations_tweens_easing_Back.ts.html      |  108 +-
 .../src_animations_tweens_easing_Bounce.ts.html    |  132 +-
 .../src_animations_tweens_easing_Circular.ts.html  |   98 +-
 .../src_animations_tweens_easing_Cubic.ts.html     |  102 +-
 .../src_animations_tweens_easing_Elastic.ts.html   |  132 +-
 ...rc_animations_tweens_easing_Exponential.ts.html |  108 +-
 .../src_animations_tweens_easing_Linear.ts.html    |   54 +-
 .../src_animations_tweens_easing_Quadratic.ts.html |  104 +-
 .../src_animations_tweens_easing_Quartic.ts.html   |  102 +-
 .../src_animations_tweens_easing_Quintic.ts.html   |  102 +-
 ...src_animations_tweens_easing_Sinusoidal.ts.html |  100 +-
 docs/files/src_components_AnimationManager.ts.html |  888 ++++---
 docs/files/src_components_ArcadePhysics.ts.html    | 2385 +++++++++--------
 docs/files/src_components_Box.ts.html              |  954 ++++---
 docs/files/src_components_Input.ts.html            | 1561 ++++++-----
 docs/files/src_components_Sound.ts.html            |  365 +--
 docs/files/src_core_Camera.ts.html                 |  429 ++-
 docs/files/src_core_CameraManager.ts.html          |  339 ++-
 docs/files/src_core_Component.ts.html              |  218 +-
 docs/files/src_core_ComponentManager.ts.html       |  569 ++--
 docs/files/src_core_Entity.ts.html                 | 1360 +++++-----
 docs/files/src_core_Game.ts.html                   | 1179 +++++----
 docs/files/src_core_Group.ts.html                  | 2583 +++++++++---------
 docs/files/src_core_IChild.ts.html                 |  595 ++---
 docs/files/src_core_PluginManager.ts.html          |  562 ++--
 docs/files/src_core_Signal.ts.html                 |  748 +++---
 docs/files/src_core_SignalBinding.ts.html          |  418 +--
 docs/files/src_core_Stage.ts.html                  | 1698 ++++++------
 docs/files/src_core_State.ts.html                  |  941 ++++---
 docs/files/src_core_StateConfig.ts.html            |  284 +-
 docs/files/src_core_StateManager.ts.html           |  927 ++++---
 docs/files/src_file_AudioFile.ts.html              |  307 ++-
 docs/files/src_file_DataFile.ts.html               |  373 +--
 docs/files/src_file_DataLibrary.ts.html            |  186 +-
 docs/files/src_file_File.ts.html                   | 2798 ++++++++++----------
 docs/files/src_file_FileStore.ts.html              |  413 ++-
 docs/files/src_file_Loader.ts.html                 | 2772 +++++++++----------
 docs/files/src_file_TextureFile.ts.html            |  323 +--
 docs/files/src_gameobjects_Sprite.ts.html          |  337 ++-
 docs/files/src_gameobjects_StaticImage.ts.html     |  221 +-
 docs/files/src_gameobjects_Textfield.ts.html       |  984 ++++---
 docs/files/src_gameobjects_tilemap_TileMap.ts.html | 1001 ++++---
 .../src_gameobjects_tilemap_TileMapLayer.ts.html   | 1904 +++++++------
 .../files/src_gameobjects_tilemap_TileType.ts.html |  164 +-
 docs/files/src_geom_AABB.ts.html                   |  320 +--
 docs/files/src_geom_Circle.ts.html                 |  977 +++----
 docs/files/src_geom_Intersect.ts.html              | 1279 ++++-----
 docs/files/src_geom_IntersectResult.ts.html        |  262 +-
 docs/files/src_geom_Line.ts.html                   |  619 ++---
 docs/files/src_geom_Matrix.ts.html                 |  929 +++----
 docs/files/src_geom_Point.ts.html                  |  909 +++----
 docs/files/src_geom_Ray.ts.html                    |  406 ++-
 docs/files/src_geom_Rectangle.ts.html              | 1411 +++++-----
 docs/files/src_geom_Transform.ts.html              | 1373 +++++-----
 docs/files/src_geom_Vector2.ts.html                |  695 ++---
 docs/files/src_hud_HUDDisplay.ts.html              |  447 ++--
 docs/files/src_hud_HUDManager.ts.html              |  559 ++--
 docs/files/src_hud_HUDWidget.ts.html               |  605 +++--
 docs/files/src_hud_components_Counter.ts.html      |  361 ++-
 docs/files/src_hud_components_Time.ts.html         |  529 ++--
 docs/files/src_hud_components_WidgetInput.ts.html  |  368 ++-
 docs/files/src_hud_widgets_Bar.ts.html             |  450 ++--
 docs/files/src_hud_widgets_BasicScore.ts.html      |  100 +-
 docs/files/src_hud_widgets_Button.ts.html          |   81 +-
 docs/files/src_hud_widgets_Icon.ts.html            |  327 +--
 docs/files/src_hud_widgets_IconBar.ts.html         |  403 +--
 docs/files/src_hud_widgets_Menu.ts.html            |  365 +--
 docs/files/src_hud_widgets_MenuItem.ts.html        |   79 +-
 docs/files/src_hud_widgets_TextField.ts.html       |  356 +--
 docs/files/src_hud_widgets_Time.ts.html            |  173 +-
 docs/files/src_input_Finger.ts.html                |  134 +-
 docs/files/src_input_InputManager.ts.html          |  511 ++--
 docs/files/src_input_Key.ts.html                   |  511 ++--
 docs/files/src_input_Keyboard.ts.html              |  602 ++---
 docs/files/src_input_Keycodes.ts.html              | 1814 ++++++-------
 docs/files/src_input_Mouse.ts.html                 |  765 +++---
 docs/files/src_input_MouseCursor.ts.html           |  306 +--
 docs/files/src_input_Pointer.ts.html               |  796 +++---
 docs/files/src_input_Touch.ts.html                 | 1603 ++++++-----
 docs/files/src_render_CanvasRenderer.ts.html       |  288 +-
 docs/files/src_render_GLArrayBuffer.ts.html        |  359 ++-
 docs/files/src_render_GLBlendMode.ts.html          |  495 ++--
 docs/files/src_render_GLElementArrayBuffer.ts.html |  206 +-
 docs/files/src_render_GLRenderManager.ts.html      | 1295 +++++----
 docs/files/src_render_GLShaderManager.ts.html      |  291 +-
 docs/files/src_render_GLTextureManager.ts.html     |  499 ++--
 docs/files/src_render_GLTextureWrapper.ts.html     |  325 +--
 docs/files/src_render_renderers_Renderer.ts.html   |  292 +-
 ...c_render_renderers_TextureAtlasRenderer.ts.html |  458 ++--
 docs/files/src_render_shaders_ShaderPair.ts.html   |  387 ++-
 .../src_render_shaders_TextureAtlasShader.ts.html  |  188 +-
 docs/files/src_sound_Audio.ts.html                 | 1688 ++++++------
 docs/files/src_sound_AudioLibrary.ts.html          |  173 +-
 docs/files/src_sound_AudioManager.ts.html          |  983 +++----
 docs/files/src_system_Bootstrap.ts.html            |  373 +--
 docs/files/src_system_Device.ts.html               | 1233 ++++-----
 docs/files/src_textures_SingleImage.ts.html        |  149 +-
 docs/files/src_textures_SpriteSheet.ts.html        |  387 ++-
 docs/files/src_textures_TextureAtlas.ts.html       |  470 ++--
 docs/files/src_textures_TextureLibrary.ts.html     |  445 ++--
 docs/files/src_time_Clock.ts.html                  | 1428 +++++-----
 docs/files/src_time_ClockManager.ts.html           |  369 +--
 docs/files/src_time_MasterClock.ts.html            |  319 +--
 docs/files/src_time_Timer.ts.html                  | 1011 +++----
 docs/files/src_time_TimerEvent.ts.html             |  185 +-
 docs/files/src_utils_Canvas.ts.html                |  647 ++---
 docs/files/src_utils_Common.ts.html                |  644 ++---
 docs/files/src_utils_GameMath.ts.html              | 2445 ++++++++---------
 docs/files/src_utils_Log.ts.html                   |  854 +++---
 docs/files/src_utils_RandomDataGenerator.ts.html   |  762 +++---
 docs/files/src_utils_RequestAnimationFrame.ts.html |  444 ++--
 docs/files/src_utils_Version.ts.html               |  146 +-
 docs/modules/GameObjects.html                      |    2 +-
 docs/modules/Kiwi.html                             |    2 +-
 docs/modules/Renderers.html                        |    2 +-
 docs/modules/Shaders.html                          |    2 +-
 gruntfile.js                                       |  188 +-
 package.json                                       |   50 +-
 src/Kiwi.ts                                        |  454 ++--
 src/animations/Animation.ts                        |  988 +++----
 src/animations/Sequence.ts                         |  110 +-
 src/animations/tweens/Tween.ts                     | 1118 ++++----
 src/animations/tweens/TweenManager.ts              |  368 +--
 src/animations/tweens/easing/Back.ts               |  108 +-
 src/animations/tweens/easing/Bounce.ts             |  132 +-
 src/animations/tweens/easing/Circular.ts           |   98 +-
 src/animations/tweens/easing/Cubic.ts              |  102 +-
 src/animations/tweens/easing/Elastic.ts            |  132 +-
 src/animations/tweens/easing/Exponential.ts        |  108 +-
 src/animations/tweens/easing/Linear.ts             |   64 +-
 src/animations/tweens/easing/Quadratic.ts          |  104 +-
 src/animations/tweens/easing/Quartic.ts            |  102 +-
 src/animations/tweens/easing/Quintic.ts            |  102 +-
 src/animations/tweens/easing/Sinusoidal.ts         |  100 +-
 src/components/AnimationManager.ts                 |  888 ++++---
 src/components/ArcadePhysics.ts                    | 2385 +++++++++--------
 src/components/Box.ts                              |  954 ++++---
 src/components/Input.ts                            | 1561 ++++++-----
 src/components/Sound.ts                            |  368 +--
 src/core/Camera.ts                                 |  435 ++-
 src/core/CameraManager.ts                          |  351 ++-
 src/core/Component.ts                              |  218 +-
 src/core/ComponentManager.ts                       |  569 ++--
 src/core/Entity.ts                                 | 1370 +++++-----
 src/core/Game.ts                                   | 1182 ++++-----
 src/core/Group.ts                                  | 2591 +++++++++---------
 src/core/IChild.ts                                 |  598 ++---
 src/core/PluginManager.ts                          |  563 ++--
 src/core/Signal.ts                                 |  748 +++---
 src/core/SignalBinding.ts                          |  418 +--
 src/core/Stage.ts                                  | 1698 ++++++------
 src/core/State.ts                                  |  944 ++++---
 src/core/StateConfig.ts                            |  284 +-
 src/core/StateManager.ts                           |  927 ++++---
 src/file/AudioFile.ts                              |  314 ++-
 src/file/DataFile.ts                               |  372 +--
 src/file/DataLibrary.ts                            |  186 +-
 src/file/File.ts                                   | 2798 ++++++++++----------
 src/file/FileStore.ts                              |  414 ++-
 src/file/Loader.ts                                 | 2772 +++++++++----------
 src/file/TextureFile.ts                            |  322 +--
 src/gameobjects/Sprite.ts                          |  340 ++-
 src/gameobjects/StaticImage.ts                     |  224 +-
 src/gameobjects/Textfield.ts                       |  987 ++++---
 src/gameobjects/tilemap/TileMap.ts                 | 1001 ++++---
 src/gameobjects/tilemap/TileMapLayer.ts            | 1918 +++++++-------
 src/gameobjects/tilemap/TileType.ts                |  165 +-
 src/geom/AABB.ts                                   |  320 +--
 src/geom/Circle.ts                                 |  980 +++----
 src/geom/Intersect.ts                              | 1286 ++++-----
 src/geom/IntersectResult.ts                        |  262 +-
 src/geom/Line.ts                                   |  622 ++---
 src/geom/Matrix.ts                                 |  932 +++----
 src/geom/Point.ts                                  |  912 +++----
 src/geom/Ray.ts                                    |  409 ++-
 src/geom/Rectangle.ts                              | 1414 +++++-----
 src/geom/Transform.ts                              | 1380 +++++-----
 src/geom/Vector2.ts                                |  698 ++---
 src/hud/HUDDisplay.ts                              |  447 ++--
 src/hud/HUDManager.ts                              |  559 ++--
 src/hud/HUDWidget.ts                               |  561 ++--
 src/hud/components/Counter.ts                      |  361 ++-
 src/hud/components/Time.ts                         |  483 ++--
 src/hud/components/WidgetInput.ts                  |  368 ++-
 src/hud/widgets/Bar.ts                             |  455 ++--
 src/hud/widgets/BasicScore.ts                      |  100 +-
 src/hud/widgets/Button.ts                          |   94 +-
 src/hud/widgets/Icon.ts                            |  330 +--
 src/hud/widgets/IconBar.ts                         |  406 +--
 src/hud/widgets/Menu.ts                            |  368 +--
 src/hud/widgets/MenuItem.ts                        |   94 +-
 src/hud/widgets/TextField.ts                       |  356 +--
 src/hud/widgets/Time.ts                            |  174 +-
 src/input/Finger.ts                                |  134 +-
 src/input/InputManager.ts                          |  514 ++--
 src/input/Key.ts                                   |  514 ++--
 src/input/Keyboard.ts                              |  602 ++---
 src/input/Keycodes.ts                              | 1814 ++++++-------
 src/input/Mouse.ts                                 |  768 +++---
 src/input/MouseCursor.ts                           |  306 +--
 src/input/Pointer.ts                               |  796 +++---
 src/input/Touch.ts                                 | 1603 ++++++-----
 src/render/CanvasRenderer.ts                       |  288 +-
 src/render/GLArrayBuffer.ts                        |  359 ++-
 src/render/GLBlendMode.ts                          |  484 ++--
 src/render/GLElementArrayBuffer.ts                 |  218 +-
 src/render/GLRenderManager.ts                      | 1295 +++++----
 src/render/GLShaderManager.ts                      |  294 +-
 src/render/GLTextureManager.ts                     |  471 ++--
 src/render/GLTextureWrapper.ts                     |  325 +--
 src/render/renderers/Renderer.ts                   |  295 +--
 src/render/renderers/TextureAtlasRenderer.ts       |  458 ++--
 src/render/shaders/ShaderPair.ts                   |  390 ++-
 src/render/shaders/TextureAtlasShader.ts           |  188 +-
 src/sound/Audio.ts                                 | 1691 ++++++------
 src/sound/AudioLibrary.ts                          |  197 +-
 src/sound/AudioManager.ts                          |  986 +++----
 src/system/Bootstrap.ts                            |  376 +--
 src/system/Device.ts                               | 1236 ++++-----
 src/textures/SingleImage.ts                        |  149 +-
 src/textures/SpriteSheet.ts                        |  387 ++-
 src/textures/TextureAtlas.ts                       |  470 ++--
 src/textures/TextureLibrary.ts                     |  445 ++--
 src/time/Clock.ts                                  | 1428 +++++-----
 src/time/ClockManager.ts                           |  372 +--
 src/time/MasterClock.ts                            |  322 +--
 src/time/Timer.ts                                  | 1014 +++----
 src/time/TimerEvent.ts                             |  186 +-
 src/utils/Canvas.ts                                |  648 ++---
 src/utils/Common.ts                                |  644 ++---
 src/utils/GameMath.ts                              | 2446 ++++++++---------
 src/utils/Log.ts                                   |  855 +++---
 src/utils/RandomDataGenerator.ts                   |  762 +++---
 src/utils/RequestAnimationFrame.ts                 |  444 ++--
 src/utils/Version.ts                               |  146 +-
 templateGame/lib/kiwi.js                           |   59 +-
 templateGame/src/states/intro.js                   |    2 +-
 templateGame/src/states/loading.js                 |   18 +-
 templateGame/src/states/play.js                    |   48 +-
 tslint.json                                        |   94 +-
 277 files changed, 77797 insertions(+), 77737 deletions(-)

diff --git a/bower.json b/bower.json
index dbd9f53..054b974 100644
--- a/bower.json
+++ b/bower.json
@@ -1,25 +1,25 @@
 {
-  "name": "Kiwi.js",
-  "version": "1.1.1",
-  "homepage": "git://github.com:gamelab/kiwi.js.git",
-  "authors": [
-    "GameLab"
-  ],
-  "description": "Kiwi.js is a Javascript/Typescript library for creating HTML5 games.",
-  "main": "build/kiwi.min.js",
-  "keywords": [
-    "game",
-    "library",
-    "html5",
-    "typescript",
-    "javascript"
-  ],
-  "license": "MIT",
-  "ignore": [
-    "**/.*",
-    "node_modules",
-    "bower_components",
-    "test",
-    "tests"
-  ]
+	"name": "Kiwi.js",
+	"version": "1.1.1",
+	"homepage": "git://github.com:gamelab/kiwi.js.git",
+	"authors": [
+		"GameLab"
+	],
+	"description": "Kiwi.js is a Javascript/Typescript library for creating HTML5 games.",
+	"main": "build/kiwi.min.js",
+	"keywords": [
+		"game",
+		"library",
+		"html5",
+		"typescript",
+		"javascript"
+	],
+	"license": "MIT",
+	"ignore": [
+		"**/.*",
+		"node_modules",
+		"bower_components",
+		"test",
+		"tests"
+	]
 }
diff --git a/build/kiwi.d.ts b/build/kiwi.d.ts
index 3749383..0d696d2 100644
--- a/build/kiwi.d.ts
+++ b/build/kiwi.d.ts
@@ -10044,8 +10044,6 @@ declare module Kiwi.Renderers {
 }
 declare var mat2d: any, mat3: any, vec2: any, vec3: any, mat4: any;
 /**
-*
-*
 * @module Kiwi
 * @submodule Renderers
 * @main Renderers
@@ -10147,6 +10145,12 @@ declare module Kiwi.Renderers {
         * @private
         */
         private _maxItems;
+        /**
+        * Camera matrix used on graphics card
+        * @property camMatrix
+        * @type Float32Array
+        * @public
+        */
         camMatrix: Float32Array;
         /**
         * The most recently bound texture atlas.
@@ -10379,11 +10383,11 @@ declare module Kiwi.Shaders {
     class ShaderManager {
         constructor();
         /**
-       * An object containing a set of properties each of which references a ShaderPair.
-       * @property _shaderPairs
-       * @type Object
-       * @private
-       */
+        * An object containing a set of properties each of which references a ShaderPair.
+        * @property _shaderPairs
+        * @type Object
+        * @private
+        */
         private _shaderPairs;
         /**
         * The shader program that is currently set to be used useing gl.useProgram.
@@ -10506,11 +10510,17 @@ declare module Kiwi.Renderers {
         texture: WebGLTexture;
         /**
         * The image wrapped by this wrapper.
+        * @property _image
+        * @type HTMLImageElement
+        * @private
+        */
+        private _image;
+        /**
+        * The image wrapped by this wrapper.
         * @property image
         * @type HTMLImageElement
         * @public
         */
-        private _image;
         image: HTMLImageElement;
         /**
         * Creates a webgl texture object
@@ -11044,15 +11054,15 @@ declare module Kiwi.Renderers {
 declare module Kiwi.Renderers {
     class Renderer {
         /**
-         * Base class for WebGL Renderers. Not for instantiation.
-         * @class Renderer
-         * @constructor
-         * @namespace Kiwi.Renderers
-         * @param gl {WebGLRenderingContext}
-           * @param shaderManager {Kiwi.Shaders.ShaderManager}
-         * @param [params=null] {object}
-         * @return {Kiwi.Renderers.Renderer}
-         */
+        * Base class for WebGL Renderers. Not for instantiation.
+        * @class Renderer
+        * @constructor
+        * @namespace Kiwi.Renderers
+        * @param gl {WebGLRenderingContext}
+        * @param shaderManager {Kiwi.Shaders.ShaderManager}
+        * @param [params=null] {object}
+        * @return {Kiwi.Renderers.Renderer}
+        */
         constructor(gl: WebGLRenderingContext, shaderManager: Kiwi.Shaders.ShaderManager, isBatchRenderer?: boolean);
         /**
         * Identifier for this renderer
@@ -11421,12 +11431,12 @@ declare module Kiwi.Shaders {
         */
         applyUniforms(gl: WebGLRenderingContext): void;
         /**
-       * Applies a single uniforms to the uploaded program
-       * @method applyUniform
-       * @param gl {WebGLRenderingCotext}
-       * @param name {string}
-       * @public
-       */
+        * Applies a single uniforms to the uploaded program
+        * @method applyUniform
+        * @param gl {WebGLRenderingCotext}
+        * @param name {string}
+        * @public
+        */
         applyUniform(gl: WebGLRenderingContext, name: string): void;
         /**
         * Initialises all uniforms
@@ -18732,6 +18742,12 @@ declare module Kiwi.Sound {
         * @private
         */
         private _locked;
+        /**
+        * Sound buffer
+        * @property _unlockedSource
+        * @type {any}
+        * @private
+        */
         private _unlockedSource;
         /**
         * Returns a boolean indicating whether the device has been touched or not. READ ONLY.
diff --git a/build/kiwi.js b/build/kiwi.js
index a85b529..09dea29 100644
--- a/build/kiwi.js
+++ b/build/kiwi.js
@@ -14663,8 +14663,6 @@ var Kiwi;
     })(Renderers = Kiwi.Renderers || (Kiwi.Renderers = {}));
 })(Kiwi || (Kiwi = {}));
 /**
-*
-*
 * @module Kiwi
 * @submodule Renderers
 * @main Renderers
@@ -14928,8 +14926,8 @@ var Kiwi;
                     }
                 }, this);
                 /* if (this.filtersEnabled && !this.filters.isEmpty) {
-                     this.filters.enableFrameBuffers(gl);
-                 }*/
+                    this.filters.enableFrameBuffers(gl);
+                }*/
             };
             /**
             * Scales the viewport according to a scale mode and space dimensions.
@@ -15255,11 +15253,11 @@ var Kiwi;
         var ShaderManager = (function () {
             function ShaderManager() {
                 /**
-               * An object containing a set of properties each of which references a ShaderPair.
-               * @property _shaderPairs
-               * @type Object
-               * @private
-               */
+                * An object containing a set of properties each of which references a ShaderPair.
+                * @property _shaderPairs
+                * @type Object
+                * @private
+                */
                 this._shaderPairs = {};
             }
             Object.defineProperty(ShaderManager.prototype, "currentShader", {
@@ -15442,6 +15440,12 @@ var Kiwi;
                 configurable: true
             });
             Object.defineProperty(GLTextureWrapper.prototype, "image", {
+                /**
+                * The image wrapped by this wrapper.
+                * @property image
+                * @type HTMLImageElement
+                * @public
+                */
                 get: function () {
                     return (this._image);
                 },
@@ -15453,7 +15457,6 @@ var Kiwi;
                 enumerable: true,
                 configurable: true
             });
-            //force : if true then other textures will be removed until there is room.
             /**
             * Creates a webgl texture object
             * @method createTexture
@@ -16273,15 +16276,15 @@ var Kiwi;
     (function (Renderers) {
         var Renderer = (function () {
             /**
-             * Base class for WebGL Renderers. Not for instantiation.
-             * @class Renderer
-             * @constructor
-             * @namespace Kiwi.Renderers
-             * @param gl {WebGLRenderingContext}
-               * @param shaderManager {Kiwi.Shaders.ShaderManager}
-             * @param [params=null] {object}
-             * @return {Kiwi.Renderers.Renderer}
-             */
+            * Base class for WebGL Renderers. Not for instantiation.
+            * @class Renderer
+            * @constructor
+            * @namespace Kiwi.Renderers
+            * @param gl {WebGLRenderingContext}
+            * @param shaderManager {Kiwi.Shaders.ShaderManager}
+            * @param [params=null] {object}
+            * @return {Kiwi.Renderers.Renderer}
+            */
             function Renderer(gl, shaderManager, isBatchRenderer) {
                 if (isBatchRenderer === void 0) { isBatchRenderer = false; }
                 /**
@@ -16664,12 +16667,12 @@ var Kiwi;
                 }
             };
             /**
-           * Applies a single uniforms to the uploaded program
-           * @method applyUniform
-           * @param gl {WebGLRenderingCotext}
-           * @param name {string}
-           * @public
-           */
+            * Applies a single uniforms to the uploaded program
+            * @method applyUniform
+            * @param gl {WebGLRenderingCotext}
+            * @param name {string}
+            * @public
+            */
             ShaderPair.prototype.applyUniform = function (gl, name) {
                 var u = this.uniforms[name];
                 if (this.uniforms[name].dirty) {
@@ -26686,6 +26689,12 @@ var Kiwi;
                 * @public
                 */
                 this.masterGain = null;
+                /**
+                * Sound buffer
+                * @property _unlockedSource
+                * @type {any}
+                * @private
+                */
                 this._unlockedSource = null;
                 this._game = game;
             }
diff --git a/docs/classes/Kiwi.CameraManager.html b/docs/classes/Kiwi.CameraManager.html
index 3b785e5..6e37964 100644
--- a/docs/classes/Kiwi.CameraManager.html
+++ b/docs/classes/Kiwi.CameraManager.html
@@ -809,7 +809,7 @@ <h3 class="name"><code>remove</code></h3>
             
         
         
-        <a href="../files/src_core_CameraManager.ts.html#l105"><code>src&#x2F;core&#x2F;CameraManager.ts:105</code></a>
+        <a href="../files/src_core_CameraManager.ts.html#l103"><code>src&#x2F;core&#x2F;CameraManager.ts:103</code></a>
         
         </p>
 
@@ -903,7 +903,7 @@ <h3 class="name"><code>removeAll</code></h3>
             
         
         
-        <a href="../files/src_core_CameraManager.ts.html#l160"><code>src&#x2F;core&#x2F;CameraManager.ts:160</code></a>
+        <a href="../files/src_core_CameraManager.ts.html#l157"><code>src&#x2F;core&#x2F;CameraManager.ts:157</code></a>
         
         </p>
 
@@ -960,7 +960,7 @@ <h3 class="name"><code>render</code></h3>
             
         
         
-        <a href="../files/src_core_CameraManager.ts.html#l142"><code>src&#x2F;core&#x2F;CameraManager.ts:142</code></a>
+        <a href="../files/src_core_CameraManager.ts.html#l139"><code>src&#x2F;core&#x2F;CameraManager.ts:139</code></a>
         
         </p>
 
@@ -1017,7 +1017,7 @@ <h3 class="name"><code>update</code></h3>
             
         
         
-        <a href="../files/src_core_CameraManager.ts.html#l125"><code>src&#x2F;core&#x2F;CameraManager.ts:125</code></a>
+        <a href="../files/src_core_CameraManager.ts.html#l122"><code>src&#x2F;core&#x2F;CameraManager.ts:122</code></a>
         
         </p>
 
@@ -1074,7 +1074,7 @@ <h3 class="name"><code>zeroAllCameras</code></h3>
             
         
         
-        <a href="../files/src_core_CameraManager.ts.html#l169"><code>src&#x2F;core&#x2F;CameraManager.ts:169</code></a>
+        <a href="../files/src_core_CameraManager.ts.html#l166"><code>src&#x2F;core&#x2F;CameraManager.ts:166</code></a>
         
         </p>
 
@@ -1143,7 +1143,7 @@ <h3 class="name"><code>zeroCamera</code></h3>
             
         
         
-        <a href="../files/src_core_CameraManager.ts.html#l183"><code>src&#x2F;core&#x2F;CameraManager.ts:183</code></a>
+        <a href="../files/src_core_CameraManager.ts.html#l180"><code>src&#x2F;core&#x2F;CameraManager.ts:180</code></a>
         
         </p>
 
diff --git a/docs/classes/Kiwi.ComponentManager.html b/docs/classes/Kiwi.ComponentManager.html
index 1e7cf1f..c1a8bf9 100644
--- a/docs/classes/Kiwi.ComponentManager.html
+++ b/docs/classes/Kiwi.ComponentManager.html
@@ -1341,7 +1341,7 @@ <h3 class="name"><code>postRender</code></h3>
             
         
         
-        <a href="../files/src_core_ComponentManager.ts.html#l285"><code>src&#x2F;core&#x2F;ComponentManager.ts:285</code></a>
+        <a href="../files/src_core_ComponentManager.ts.html#l283"><code>src&#x2F;core&#x2F;ComponentManager.ts:283</code></a>
         
         </p>
 
@@ -1925,7 +1925,7 @@ <h3 class="name"><code>render</code></h3>
             
         
         
-        <a href="../files/src_core_ComponentManager.ts.html#l270"><code>src&#x2F;core&#x2F;ComponentManager.ts:270</code></a>
+        <a href="../files/src_core_ComponentManager.ts.html#l269"><code>src&#x2F;core&#x2F;ComponentManager.ts:269</code></a>
         
         </p>
 
diff --git a/docs/classes/Kiwi.Components.ArcadePhysics.html b/docs/classes/Kiwi.Components.ArcadePhysics.html
index 091bfad..39a84d3 100644
--- a/docs/classes/Kiwi.Components.ArcadePhysics.html
+++ b/docs/classes/Kiwi.Components.ArcadePhysics.html
@@ -1146,7 +1146,7 @@ <h3 class="name"><code>collide</code></h3>
             
         
         
-        <a href="../files/src_components_ArcadePhysics.ts.html#l1113"><code>src&#x2F;components&#x2F;ArcadePhysics.ts:1113</code></a>
+        <a href="../files/src_components_ArcadePhysics.ts.html#l1111"><code>src&#x2F;components&#x2F;ArcadePhysics.ts:1111</code></a>
         
         </p>
 
@@ -1300,7 +1300,7 @@ <h3 class="name"><code>collideGroup</code></h3>
             
         
         
-        <a href="../files/src_components_ArcadePhysics.ts.html#l1129"><code>src&#x2F;components&#x2F;ArcadePhysics.ts:1129</code></a>
+        <a href="../files/src_components_ArcadePhysics.ts.html#l1127"><code>src&#x2F;components&#x2F;ArcadePhysics.ts:1127</code></a>
         
         </p>
 
@@ -1453,7 +1453,7 @@ <h3 class="name"><code>collideGroupGroup</code></h3>
             
         
         
-        <a href="../files/src_components_ArcadePhysics.ts.html#l1147"><code>src&#x2F;components&#x2F;ArcadePhysics.ts:1147</code></a>
+        <a href="../files/src_components_ArcadePhysics.ts.html#l1145"><code>src&#x2F;components&#x2F;ArcadePhysics.ts:1145</code></a>
         
         </p>
 
@@ -1612,7 +1612,7 @@ <h3 class="name"><code>computeVelocity</code></h3>
             
         
         
-        <a href="../files/src_components_ArcadePhysics.ts.html#l982"><code>src&#x2F;components&#x2F;ArcadePhysics.ts:982</code></a>
+        <a href="../files/src_components_ArcadePhysics.ts.html#l980"><code>src&#x2F;components&#x2F;ArcadePhysics.ts:980</code></a>
         
         </p>
 
@@ -1758,7 +1758,7 @@ <h3 class="name"><code>destroy</code></h3>
             
         
         
-        <a href="../files/src_components_ArcadePhysics.ts.html#l1073"><code>src&#x2F;components&#x2F;ArcadePhysics.ts:1073</code></a>
+        <a href="../files/src_components_ArcadePhysics.ts.html#l1071"><code>src&#x2F;components&#x2F;ArcadePhysics.ts:1071</code></a>
         
         </p>
 
@@ -1819,7 +1819,7 @@ <h3 class="name"><code>objType</code></h3>
             
         
         
-        <a href="../files/src_components_ArcadePhysics.ts.html#l1088"><code>src&#x2F;components&#x2F;ArcadePhysics.ts:1088</code></a>
+        <a href="../files/src_components_ArcadePhysics.ts.html#l1086"><code>src&#x2F;components&#x2F;ArcadePhysics.ts:1086</code></a>
         
         </p>
 
@@ -1918,7 +1918,7 @@ <h3 class="name"><code>overlaps</code></h3>
             
         
         
-        <a href="../files/src_components_ArcadePhysics.ts.html#l1171"><code>src&#x2F;components&#x2F;ArcadePhysics.ts:1171</code></a>
+        <a href="../files/src_components_ArcadePhysics.ts.html#l1169"><code>src&#x2F;components&#x2F;ArcadePhysics.ts:1169</code></a>
         
         </p>
 
@@ -2071,7 +2071,7 @@ <h3 class="name"><code>overlaps</code></h3>
             
         
         
-        <a href="../files/src_components_ArcadePhysics.ts.html#l1207"><code>src&#x2F;components&#x2F;ArcadePhysics.ts:1207</code></a>
+        <a href="../files/src_components_ArcadePhysics.ts.html#l1205"><code>src&#x2F;components&#x2F;ArcadePhysics.ts:1205</code></a>
         
         </p>
 
@@ -2217,7 +2217,7 @@ <h3 class="name"><code>overlaps</code></h3>
             
         
         
-        <a href="../files/src_components_ArcadePhysics.ts.html#l865"><code>src&#x2F;components&#x2F;ArcadePhysics.ts:865</code></a>
+        <a href="../files/src_components_ArcadePhysics.ts.html#l863"><code>src&#x2F;components&#x2F;ArcadePhysics.ts:863</code></a>
         
         </p>
 
@@ -2348,7 +2348,7 @@ <h3 class="name"><code>overlapsArray</code></h3>
             
         
         
-        <a href="../files/src_components_ArcadePhysics.ts.html#l935"><code>src&#x2F;components&#x2F;ArcadePhysics.ts:935</code></a>
+        <a href="../files/src_components_ArcadePhysics.ts.html#l933"><code>src&#x2F;components&#x2F;ArcadePhysics.ts:933</code></a>
         
         </p>
 
@@ -2486,7 +2486,7 @@ <h3 class="name"><code>overlapsArrayGroup</code></h3>
             
         
         
-        <a href="../files/src_components_ArcadePhysics.ts.html#l1239"><code>src&#x2F;components&#x2F;ArcadePhysics.ts:1239</code></a>
+        <a href="../files/src_components_ArcadePhysics.ts.html#l1237"><code>src&#x2F;components&#x2F;ArcadePhysics.ts:1237</code></a>
         
         </p>
 
@@ -2632,7 +2632,7 @@ <h3 class="name"><code>overlapsGroup</code></h3>
             
         
         
-        <a href="../files/src_components_ArcadePhysics.ts.html#l900"><code>src&#x2F;components&#x2F;ArcadePhysics.ts:900</code></a>
+        <a href="../files/src_components_ArcadePhysics.ts.html#l898"><code>src&#x2F;components&#x2F;ArcadePhysics.ts:898</code></a>
         
         </p>
 
@@ -2770,7 +2770,7 @@ <h3 class="name"><code>overlapsObjectGroup</code></h3>
             
         
         
-        <a href="../files/src_components_ArcadePhysics.ts.html#l1189"><code>src&#x2F;components&#x2F;ArcadePhysics.ts:1189</code></a>
+        <a href="../files/src_components_ArcadePhysics.ts.html#l1187"><code>src&#x2F;components&#x2F;ArcadePhysics.ts:1187</code></a>
         
         </p>
 
@@ -2920,7 +2920,7 @@ <h3 class="name"><code>overlapsTiles</code></h3>
             
         
         
-        <a href="../files/src_components_ArcadePhysics.ts.html#l835"><code>src&#x2F;components&#x2F;ArcadePhysics.ts:835</code></a>
+        <a href="../files/src_components_ArcadePhysics.ts.html#l833"><code>src&#x2F;components&#x2F;ArcadePhysics.ts:833</code></a>
         
         </p>
 
@@ -3344,7 +3344,7 @@ <h3 class="name"><code>separateTilesX</code></h3>
             
         
         
-        <a href="../files/src_components_ArcadePhysics.ts.html#l654"><code>src&#x2F;components&#x2F;ArcadePhysics.ts:654</code></a>
+        <a href="../files/src_components_ArcadePhysics.ts.html#l652"><code>src&#x2F;components&#x2F;ArcadePhysics.ts:652</code></a>
         
         </p>
 
@@ -3499,7 +3499,7 @@ <h3 class="name"><code>separateTilesY</code></h3>
             
         
         
-        <a href="../files/src_components_ArcadePhysics.ts.html#l742"><code>src&#x2F;components&#x2F;ArcadePhysics.ts:742</code></a>
+        <a href="../files/src_components_ArcadePhysics.ts.html#l740"><code>src&#x2F;components&#x2F;ArcadePhysics.ts:740</code></a>
         
         </p>
 
@@ -4366,7 +4366,7 @@ <h3 class="name"><code>update</code></h3>
             
         
         
-        <a href="../files/src_components_ArcadePhysics.ts.html#l1051"><code>src&#x2F;components&#x2F;ArcadePhysics.ts:1051</code></a>
+        <a href="../files/src_components_ArcadePhysics.ts.html#l1049"><code>src&#x2F;components&#x2F;ArcadePhysics.ts:1049</code></a>
         
         </p>
 
@@ -4423,7 +4423,7 @@ <h3 class="name"><code>updateMotion</code></h3>
             
         
         
-        <a href="../files/src_components_ArcadePhysics.ts.html#l1016"><code>src&#x2F;components&#x2F;ArcadePhysics.ts:1016</code></a>
+        <a href="../files/src_components_ArcadePhysics.ts.html#l1014"><code>src&#x2F;components&#x2F;ArcadePhysics.ts:1014</code></a>
         
         </p>
 
@@ -4909,7 +4909,7 @@ <h3 class="name"><code>ANY</code></h3>
             
         
         
-        <a href="../files/src_components_ArcadePhysics.ts.html#l1379"><code>src&#x2F;components&#x2F;ArcadePhysics.ts:1379</code></a>
+        <a href="../files/src_components_ArcadePhysics.ts.html#l1377"><code>src&#x2F;components&#x2F;ArcadePhysics.ts:1377</code></a>
         
         </p>
 
@@ -5008,7 +5008,7 @@ <h3 class="name"><code>CEILING</code></h3>
             
         
         
-        <a href="../files/src_components_ArcadePhysics.ts.html#l1346"><code>src&#x2F;components&#x2F;ArcadePhysics.ts:1346</code></a>
+        <a href="../files/src_components_ArcadePhysics.ts.html#l1344"><code>src&#x2F;components&#x2F;ArcadePhysics.ts:1344</code></a>
         
         </p>
 
@@ -5107,7 +5107,7 @@ <h3 class="name"><code>DOWN</code></h3>
             
         
         
-        <a href="../files/src_components_ArcadePhysics.ts.html#l1324"><code>src&#x2F;components&#x2F;ArcadePhysics.ts:1324</code></a>
+        <a href="../files/src_components_ArcadePhysics.ts.html#l1322"><code>src&#x2F;components&#x2F;ArcadePhysics.ts:1322</code></a>
         
         </p>
 
@@ -5253,7 +5253,7 @@ <h3 class="name"><code>FLOOR</code></h3>
             
         
         
-        <a href="../files/src_components_ArcadePhysics.ts.html#l1357"><code>src&#x2F;components&#x2F;ArcadePhysics.ts:1357</code></a>
+        <a href="../files/src_components_ArcadePhysics.ts.html#l1355"><code>src&#x2F;components&#x2F;ArcadePhysics.ts:1355</code></a>
         
         </p>
 
@@ -5443,7 +5443,7 @@ <h3 class="name"><code>LEFT</code></h3>
             
         
         
-        <a href="../files/src_components_ArcadePhysics.ts.html#l1291"><code>src&#x2F;components&#x2F;ArcadePhysics.ts:1291</code></a>
+        <a href="../files/src_components_ArcadePhysics.ts.html#l1289"><code>src&#x2F;components&#x2F;ArcadePhysics.ts:1289</code></a>
         
         </p>
 
@@ -5731,7 +5731,7 @@ <h3 class="name"><code>NONE</code></h3>
             
         
         
-        <a href="../files/src_components_ArcadePhysics.ts.html#l1335"><code>src&#x2F;components&#x2F;ArcadePhysics.ts:1335</code></a>
+        <a href="../files/src_components_ArcadePhysics.ts.html#l1333"><code>src&#x2F;components&#x2F;ArcadePhysics.ts:1333</code></a>
         
         </p>
 
@@ -5782,7 +5782,7 @@ <h3 class="name"><code>OVERLAP_BIAS</code></h3>
             
         
         
-        <a href="../files/src_components_ArcadePhysics.ts.html#l1390"><code>src&#x2F;components&#x2F;ArcadePhysics.ts:1390</code></a>
+        <a href="../files/src_components_ArcadePhysics.ts.html#l1388"><code>src&#x2F;components&#x2F;ArcadePhysics.ts:1388</code></a>
         
         </p>
 
@@ -5924,7 +5924,7 @@ <h3 class="name"><code>RIGHT</code></h3>
             
         
         
-        <a href="../files/src_components_ArcadePhysics.ts.html#l1302"><code>src&#x2F;components&#x2F;ArcadePhysics.ts:1302</code></a>
+        <a href="../files/src_components_ArcadePhysics.ts.html#l1300"><code>src&#x2F;components&#x2F;ArcadePhysics.ts:1300</code></a>
         
         </p>
 
@@ -6071,7 +6071,7 @@ <h3 class="name"><code>UP</code></h3>
             
         
         
-        <a href="../files/src_components_ArcadePhysics.ts.html#l1313"><code>src&#x2F;components&#x2F;ArcadePhysics.ts:1313</code></a>
+        <a href="../files/src_components_ArcadePhysics.ts.html#l1311"><code>src&#x2F;components&#x2F;ArcadePhysics.ts:1311</code></a>
         
         </p>
 
@@ -6122,7 +6122,7 @@ <h3 class="name"><code>updateInterval</code></h3>
             
         
         
-        <a href="../files/src_components_ArcadePhysics.ts.html#l1280"><code>src&#x2F;components&#x2F;ArcadePhysics.ts:1280</code></a>
+        <a href="../files/src_components_ArcadePhysics.ts.html#l1278"><code>src&#x2F;components&#x2F;ArcadePhysics.ts:1278</code></a>
         
         </p>
 
@@ -6221,7 +6221,7 @@ <h3 class="name"><code>WALL</code></h3>
             
         
         
-        <a href="../files/src_components_ArcadePhysics.ts.html#l1368"><code>src&#x2F;components&#x2F;ArcadePhysics.ts:1368</code></a>
+        <a href="../files/src_components_ArcadePhysics.ts.html#l1366"><code>src&#x2F;components&#x2F;ArcadePhysics.ts:1366</code></a>
         
         </p>
 
diff --git a/docs/classes/Kiwi.Components.Box.html b/docs/classes/Kiwi.Components.Box.html
index 4a0177b..ef01a59 100644
--- a/docs/classes/Kiwi.Components.Box.html
+++ b/docs/classes/Kiwi.Components.Box.html
@@ -943,7 +943,7 @@ <h3 class="name"><code>_rotateHitbox</code></h3>
             
         
         
-        <a href="../files/src_components_Box.ts.html#l394"><code>src&#x2F;components&#x2F;Box.ts:394</code></a>
+        <a href="../files/src_components_Box.ts.html#l393"><code>src&#x2F;components&#x2F;Box.ts:393</code></a>
         
         </p>
 
@@ -1071,7 +1071,7 @@ <h3 class="name"><code>_rotateRect</code></h3>
             
         
         
-        <a href="../files/src_components_Box.ts.html#l364"><code>src&#x2F;components&#x2F;Box.ts:364</code></a>
+        <a href="../files/src_components_Box.ts.html#l363"><code>src&#x2F;components&#x2F;Box.ts:363</code></a>
         
         </p>
 
@@ -1179,7 +1179,7 @@ <h3 class="name"><code>destroy</code></h3>
             
         
         
-        <a href="../files/src_components_Box.ts.html#l488"><code>src&#x2F;components&#x2F;Box.ts:488</code></a>
+        <a href="../files/src_components_Box.ts.html#l487"><code>src&#x2F;components&#x2F;Box.ts:487</code></a>
         
         </p>
 
@@ -1252,7 +1252,7 @@ <h3 class="name"><code>draw</code></h3>
             
         
         
-        <a href="../files/src_components_Box.ts.html#l425"><code>src&#x2F;components&#x2F;Box.ts:425</code></a>
+        <a href="../files/src_components_Box.ts.html#l424"><code>src&#x2F;components&#x2F;Box.ts:424</code></a>
         
         </p>
 
@@ -1380,7 +1380,7 @@ <h3 class="name"><code>extents</code></h3>
             
         
         
-        <a href="../files/src_components_Box.ts.html#l464"><code>src&#x2F;components&#x2F;Box.ts:464</code></a>
+        <a href="../files/src_components_Box.ts.html#l463"><code>src&#x2F;components&#x2F;Box.ts:463</code></a>
         
         </p>
 
@@ -1900,7 +1900,7 @@ <h3 class="name"><code>_transformedBounds</code></h3>
             
         
         
-        <a href="../files/src_components_Box.ts.html#l320"><code>src&#x2F;components&#x2F;Box.ts:320</code></a>
+        <a href="../files/src_components_Box.ts.html#l319"><code>src&#x2F;components&#x2F;Box.ts:319</code></a>
         
         </p>
 
@@ -1947,7 +1947,7 @@ <h3 class="name"><code>_transformedCenter</code></h3>
             
         
         
-        <a href="../files/src_components_Box.ts.html#l290"><code>src&#x2F;components&#x2F;Box.ts:290</code></a>
+        <a href="../files/src_components_Box.ts.html#l289"><code>src&#x2F;components&#x2F;Box.ts:289</code></a>
         
         </p>
 
@@ -2041,7 +2041,7 @@ <h3 class="name"><code>_worldBounds</code></h3>
             
         
         
-        <a href="../files/src_components_Box.ts.html#l329"><code>src&#x2F;components&#x2F;Box.ts:329</code></a>
+        <a href="../files/src_components_Box.ts.html#l328"><code>src&#x2F;components&#x2F;Box.ts:328</code></a>
         
         </p>
 
@@ -2232,7 +2232,7 @@ <h3 class="name"><code>bounds</code></h3>
             
         
         
-        <a href="../files/src_components_Box.ts.html#l338"><code>src&#x2F;components&#x2F;Box.ts:338</code></a>
+        <a href="../files/src_components_Box.ts.html#l337"><code>src&#x2F;components&#x2F;Box.ts:337</code></a>
         
         </p>
 
@@ -2280,7 +2280,7 @@ <h3 class="name"><code>center</code></h3>
             
         
         
-        <a href="../files/src_components_Box.ts.html#l299"><code>src&#x2F;components&#x2F;Box.ts:299</code></a>
+        <a href="../files/src_components_Box.ts.html#l298"><code>src&#x2F;components&#x2F;Box.ts:298</code></a>
         
         </p>
 
@@ -2750,7 +2750,7 @@ <h3 class="name"><code>rawCenter</code></h3>
             
         
         
-        <a href="../files/src_components_Box.ts.html#l275"><code>src&#x2F;components&#x2F;Box.ts:275</code></a>
+        <a href="../files/src_components_Box.ts.html#l274"><code>src&#x2F;components&#x2F;Box.ts:274</code></a>
         
         </p>
 
@@ -2847,7 +2847,7 @@ <h3 class="name"><code>worldBounds</code></h3>
             
         
         
-        <a href="../files/src_components_Box.ts.html#l351"><code>src&#x2F;components&#x2F;Box.ts:351</code></a>
+        <a href="../files/src_components_Box.ts.html#l350"><code>src&#x2F;components&#x2F;Box.ts:350</code></a>
         
         </p>
 
diff --git a/docs/classes/Kiwi.Components.Input.html b/docs/classes/Kiwi.Components.Input.html
index f5a0ac6..3eed36a 100644
--- a/docs/classes/Kiwi.Components.Input.html
+++ b/docs/classes/Kiwi.Components.Input.html
@@ -1336,7 +1336,7 @@ <h3 class="name"><code>destory</code></h3>
             
         
         
-        <a href="../files/src_components_Input.ts.html#l756"><code>src&#x2F;components&#x2F;Input.ts:756</code></a>
+        <a href="../files/src_components_Input.ts.html#l755"><code>src&#x2F;components&#x2F;Input.ts:755</code></a>
         
         </p>
 
diff --git a/docs/classes/Kiwi.GameManager.html b/docs/classes/Kiwi.GameManager.html
index 5aea519..c88f795 100644
--- a/docs/classes/Kiwi.GameManager.html
+++ b/docs/classes/Kiwi.GameManager.html
@@ -368,7 +368,7 @@ <h2 class="off-left">APIs</h2>
 
     
         <div class="foundat">
-            Defined in: <a href="../files/src_Kiwi.ts.html#l307"><code>src&#x2F;Kiwi.ts:307</code></a>
+            Defined in: <a href="../files/src_Kiwi.ts.html#l306"><code>src&#x2F;Kiwi.ts:306</code></a>
         </div>
     
 
@@ -650,7 +650,7 @@ <h3 class="name"><code>objType</code></h3>
             
         
         
-        <a href="../files/src_Kiwi.ts.html#l316"><code>src&#x2F;Kiwi.ts:316</code></a>
+        <a href="../files/src_Kiwi.ts.html#l315"><code>src&#x2F;Kiwi.ts:315</code></a>
         
         </p>
 
@@ -735,7 +735,7 @@ <h3 class="name"><code>register</code></h3>
             
         
         
-        <a href="../files/src_Kiwi.ts.html#l335"><code>src&#x2F;Kiwi.ts:335</code></a>
+        <a href="../files/src_Kiwi.ts.html#l334"><code>src&#x2F;Kiwi.ts:334</code></a>
         
         </p>
 
@@ -832,7 +832,7 @@ <h3 class="name"><code>total</code></h3>
             
         
         
-        <a href="../files/src_Kiwi.ts.html#l348"><code>src&#x2F;Kiwi.ts:348</code></a>
+        <a href="../files/src_Kiwi.ts.html#l347"><code>src&#x2F;Kiwi.ts:347</code></a>
         
         </p>
 
@@ -904,7 +904,7 @@ <h3 class="name"><code>_games</code></h3>
             
         
         
-        <a href="../files/src_Kiwi.ts.html#l326"><code>src&#x2F;Kiwi.ts:326</code></a>
+        <a href="../files/src_Kiwi.ts.html#l325"><code>src&#x2F;Kiwi.ts:325</code></a>
         
         </p>
 
diff --git a/docs/classes/Kiwi.GameObjects.Sprite.html b/docs/classes/Kiwi.GameObjects.Sprite.html
index 64199f7..41ea93a 100644
--- a/docs/classes/Kiwi.GameObjects.Sprite.html
+++ b/docs/classes/Kiwi.GameObjects.Sprite.html
@@ -1699,7 +1699,7 @@ <h3 class="name"><code>renderGL</code></h3>
             
         
         
-        <a href="../files/src_gameobjects_Sprite.ts.html#l164"><code>src&#x2F;gameobjects&#x2F;Sprite.ts:164</code></a>
+        <a href="../files/src_gameobjects_Sprite.ts.html#l162"><code>src&#x2F;gameobjects&#x2F;Sprite.ts:162</code></a>
         
         </p>
 
diff --git a/docs/classes/Kiwi.GameObjects.Textfield.html b/docs/classes/Kiwi.GameObjects.Textfield.html
index e1096c2..a7d5d44 100644
--- a/docs/classes/Kiwi.GameObjects.Textfield.html
+++ b/docs/classes/Kiwi.GameObjects.Textfield.html
@@ -372,7 +372,7 @@ <h2 class="off-left">APIs</h2>
 
     
         <div class="foundat">
-            Defined in: <a href="../files/src_gameobjects_Textfield.ts.html#l493"><code>src&#x2F;gameobjects&#x2F;Textfield.ts:493</code></a>
+            Defined in: <a href="../files/src_gameobjects_Textfield.ts.html#l486"><code>src&#x2F;gameobjects&#x2F;Textfield.ts:486</code></a>
         </div>
     
 
@@ -983,7 +983,7 @@ <h3 class="name"><code>_renderText</code></h3>
             
         
         
-        <a href="../files/src_gameobjects_Textfield.ts.html#l306"><code>src&#x2F;gameobjects&#x2F;Textfield.ts:306</code></a>
+        <a href="../files/src_gameobjects_Textfield.ts.html#l304"><code>src&#x2F;gameobjects&#x2F;Textfield.ts:304</code></a>
         
         </p>
 
@@ -1560,7 +1560,7 @@ <h3 class="name"><code>render</code></h3>
             
         
         
-        <a href="../files/src_gameobjects_Textfield.ts.html#l379"><code>src&#x2F;gameobjects&#x2F;Textfield.ts:379</code></a>
+        <a href="../files/src_gameobjects_Textfield.ts.html#l377"><code>src&#x2F;gameobjects&#x2F;Textfield.ts:377</code></a>
         
         </p>
 
@@ -1662,7 +1662,7 @@ <h3 class="name"><code>renderGL</code></h3>
             
         
         
-        <a href="../files/src_gameobjects_Textfield.ts.html#l429"><code>src&#x2F;gameobjects&#x2F;Textfield.ts:429</code></a>
+        <a href="../files/src_gameobjects_Textfield.ts.html#l425"><code>src&#x2F;gameobjects&#x2F;Textfield.ts:425</code></a>
         
         </p>
 
@@ -2185,7 +2185,7 @@ <h3 class="name"><code>_canvas</code></h3>
             
         
         
-        <a href="../files/src_gameobjects_Textfield.ts.html#l272"><code>src&#x2F;gameobjects&#x2F;Textfield.ts:272</code></a>
+        <a href="../files/src_gameobjects_Textfield.ts.html#l270"><code>src&#x2F;gameobjects&#x2F;Textfield.ts:270</code></a>
         
         </p>
 
@@ -2319,7 +2319,7 @@ <h3 class="name"><code>_ctx</code></h3>
             
         
         
-        <a href="../files/src_gameobjects_Textfield.ts.html#l280"><code>src&#x2F;gameobjects&#x2F;Textfield.ts:280</code></a>
+        <a href="../files/src_gameobjects_Textfield.ts.html#l278"><code>src&#x2F;gameobjects&#x2F;Textfield.ts:278</code></a>
         
         </p>
 
@@ -2768,7 +2768,7 @@ <h3 class="name"><code>_tempDirty</code></h3>
             
         
         
-        <a href="../files/src_gameobjects_Textfield.ts.html#l288"><code>src&#x2F;gameobjects&#x2F;Textfield.ts:288</code></a>
+        <a href="../files/src_gameobjects_Textfield.ts.html#l286"><code>src&#x2F;gameobjects&#x2F;Textfield.ts:286</code></a>
         
         </p>
 
@@ -3223,7 +3223,7 @@ <h3 class="name"><code>box</code></h3>
             
         
         
-        <a href="../files/src_gameobjects_Textfield.ts.html#l296"><code>src&#x2F;gameobjects&#x2F;Textfield.ts:296</code></a>
+        <a href="../files/src_gameobjects_Textfield.ts.html#l294"><code>src&#x2F;gameobjects&#x2F;Textfield.ts:294</code></a>
         
         </p>
 
@@ -3539,7 +3539,7 @@ <h3 class="name"><code>fontFamily</code></h3>
             
         
         
-        <a href="../files/src_gameobjects_Textfield.ts.html#l212"><code>src&#x2F;gameobjects&#x2F;Textfield.ts:212</code></a>
+        <a href="../files/src_gameobjects_Textfield.ts.html#l211"><code>src&#x2F;gameobjects&#x2F;Textfield.ts:211</code></a>
         
         </p>
 
@@ -4314,7 +4314,7 @@ <h3 class="name"><code>textAlign</code></h3>
             
         
         
-        <a href="../files/src_gameobjects_Textfield.ts.html#l257"><code>src&#x2F;gameobjects&#x2F;Textfield.ts:257</code></a>
+        <a href="../files/src_gameobjects_Textfield.ts.html#l255"><code>src&#x2F;gameobjects&#x2F;Textfield.ts:255</code></a>
         
         </p>
 
@@ -4733,7 +4733,7 @@ <h3 class="name"><code>y</code></h3>
             
         
         
-        <a href="../files/src_gameobjects_Textfield.ts.html#l247"><code>src&#x2F;gameobjects&#x2F;Textfield.ts:247</code></a>
+        <a href="../files/src_gameobjects_Textfield.ts.html#l245"><code>src&#x2F;gameobjects&#x2F;Textfield.ts:245</code></a>
         
         </p>
 
@@ -4784,7 +4784,7 @@ <h3 class="name"><code>TEXT_ALIGN_RIGHT</code></h3>
             
         
         
-        <a href="../files/src_gameobjects_Textfield.ts.html#l237"><code>src&#x2F;gameobjects&#x2F;Textfield.ts:237</code></a>
+        <a href="../files/src_gameobjects_Textfield.ts.html#l235"><code>src&#x2F;gameobjects&#x2F;Textfield.ts:235</code></a>
         
         </p>
 
@@ -4831,7 +4831,7 @@ <h3 class="name"><code>textAlign</code></h3>
             
         
         
-        <a href="../files/src_gameobjects_Textfield.ts.html#l257"><code>src&#x2F;gameobjects&#x2F;Textfield.ts:257</code></a>
+        <a href="../files/src_gameobjects_Textfield.ts.html#l255"><code>src&#x2F;gameobjects&#x2F;Textfield.ts:255</code></a>
         
         </p>
 
diff --git a/docs/classes/Kiwi.GameObjects.Tilemap.TileMap.html b/docs/classes/Kiwi.GameObjects.Tilemap.TileMap.html
index 554839a..2f68cb0 100644
--- a/docs/classes/Kiwi.GameObjects.Tilemap.TileMap.html
+++ b/docs/classes/Kiwi.GameObjects.Tilemap.TileMap.html
@@ -855,7 +855,7 @@ <h3 class="name"><code>_generateTypesFromTileset</code></h3>
             
         
         
-        <a href="../files/src_gameobjects_tilemap_TileMap.ts.html#l238"><code>src&#x2F;gameobjects&#x2F;tilemap&#x2F;TileMap.ts:238</code></a>
+        <a href="../files/src_gameobjects_tilemap_TileMap.ts.html#l237"><code>src&#x2F;gameobjects&#x2F;tilemap&#x2F;TileMap.ts:237</code></a>
         
         </p>
 
@@ -1170,7 +1170,7 @@ <h3 class="name"><code>createNewLayer</code></h3>
             
         
         
-        <a href="../files/src_gameobjects_tilemap_TileMap.ts.html#l401"><code>src&#x2F;gameobjects&#x2F;tilemap&#x2F;TileMap.ts:401</code></a>
+        <a href="../files/src_gameobjects_tilemap_TileMap.ts.html#l400"><code>src&#x2F;gameobjects&#x2F;tilemap&#x2F;TileMap.ts:400</code></a>
         
         </p>
 
@@ -1402,7 +1402,7 @@ <h3 class="name"><code>createNewObjectLayer</code></h3>
             
         
         
-        <a href="../files/src_gameobjects_tilemap_TileMap.ts.html#l441"><code>src&#x2F;gameobjects&#x2F;tilemap&#x2F;TileMap.ts:441</code></a>
+        <a href="../files/src_gameobjects_tilemap_TileMap.ts.html#l440"><code>src&#x2F;gameobjects&#x2F;tilemap&#x2F;TileMap.ts:440</code></a>
         
         </p>
 
@@ -1459,7 +1459,7 @@ <h3 class="name"><code>createNewObjectLayer</code></h3>
             
         
         
-        <a href="../files/src_gameobjects_tilemap_TileMap.ts.html#l451"><code>src&#x2F;gameobjects&#x2F;tilemap&#x2F;TileMap.ts:451</code></a>
+        <a href="../files/src_gameobjects_tilemap_TileMap.ts.html#l450"><code>src&#x2F;gameobjects&#x2F;tilemap&#x2F;TileMap.ts:450</code></a>
         
         </p>
 
@@ -1530,7 +1530,7 @@ <h3 class="name"><code>createTileType</code></h3>
             
         
         
-        <a href="../files/src_gameobjects_tilemap_TileMap.ts.html#l312"><code>src&#x2F;gameobjects&#x2F;tilemap&#x2F;TileMap.ts:312</code></a>
+        <a href="../files/src_gameobjects_tilemap_TileMap.ts.html#l311"><code>src&#x2F;gameobjects&#x2F;tilemap&#x2F;TileMap.ts:311</code></a>
         
         </p>
 
@@ -1640,7 +1640,7 @@ <h3 class="name"><code>createTileTypes</code></h3>
             
         
         
-        <a href="../files/src_gameobjects_tilemap_TileMap.ts.html#l326"><code>src&#x2F;gameobjects&#x2F;tilemap&#x2F;TileMap.ts:326</code></a>
+        <a href="../files/src_gameobjects_tilemap_TileMap.ts.html#l325"><code>src&#x2F;gameobjects&#x2F;tilemap&#x2F;TileMap.ts:325</code></a>
         
         </p>
 
@@ -1753,7 +1753,7 @@ <h3 class="name"><code>createTileTypesByRange</code></h3>
             
         
         
-        <a href="../files/src_gameobjects_tilemap_TileMap.ts.html#l343"><code>src&#x2F;gameobjects&#x2F;tilemap&#x2F;TileMap.ts:343</code></a>
+        <a href="../files/src_gameobjects_tilemap_TileMap.ts.html#l342"><code>src&#x2F;gameobjects&#x2F;tilemap&#x2F;TileMap.ts:342</code></a>
         
         </p>
 
@@ -1878,7 +1878,7 @@ <h3 class="name"><code>getLayer</code></h3>
             
         
         
-        <a href="../files/src_gameobjects_tilemap_TileMap.ts.html#l483"><code>src&#x2F;gameobjects&#x2F;tilemap&#x2F;TileMap.ts:483</code></a>
+        <a href="../files/src_gameobjects_tilemap_TileMap.ts.html#l482"><code>src&#x2F;gameobjects&#x2F;tilemap&#x2F;TileMap.ts:482</code></a>
         
         </p>
 
@@ -1985,7 +1985,7 @@ <h3 class="name"><code>getLayerByName</code></h3>
             
         
         
-        <a href="../files/src_gameobjects_tilemap_TileMap.ts.html#l466"><code>src&#x2F;gameobjects&#x2F;tilemap&#x2F;TileMap.ts:466</code></a>
+        <a href="../files/src_gameobjects_tilemap_TileMap.ts.html#l465"><code>src&#x2F;gameobjects&#x2F;tilemap&#x2F;TileMap.ts:465</code></a>
         
         </p>
 
@@ -2085,7 +2085,7 @@ <h3 class="name"><code>objType</code></h3>
             
         
         
-        <a href="../files/src_gameobjects_tilemap_TileMap.ts.html#l495"><code>src&#x2F;gameobjects&#x2F;tilemap&#x2F;TileMap.ts:495</code></a>
+        <a href="../files/src_gameobjects_tilemap_TileMap.ts.html#l494"><code>src&#x2F;gameobjects&#x2F;tilemap&#x2F;TileMap.ts:494</code></a>
         
         </p>
 
@@ -2172,7 +2172,7 @@ <h3 class="name"><code>setCell</code></h3>
             
         
         
-        <a href="../files/src_gameobjects_tilemap_TileMap.ts.html#l367"><code>src&#x2F;gameobjects&#x2F;tilemap&#x2F;TileMap.ts:367</code></a>
+        <a href="../files/src_gameobjects_tilemap_TileMap.ts.html#l366"><code>src&#x2F;gameobjects&#x2F;tilemap&#x2F;TileMap.ts:366</code></a>
         
         </p>
 
@@ -2291,7 +2291,7 @@ <h3 class="name"><code>setCellsByRange</code></h3>
             
         
         
-        <a href="../files/src_gameobjects_tilemap_TileMap.ts.html#l378"><code>src&#x2F;gameobjects&#x2F;tilemap&#x2F;TileMap.ts:378</code></a>
+        <a href="../files/src_gameobjects_tilemap_TileMap.ts.html#l377"><code>src&#x2F;gameobjects&#x2F;tilemap&#x2F;TileMap.ts:377</code></a>
         
         </p>
 
@@ -2432,7 +2432,7 @@ <h3 class="name"><code>setTo</code></h3>
             
         
         
-        <a href="../files/src_gameobjects_tilemap_TileMap.ts.html#l290"><code>src&#x2F;gameobjects&#x2F;tilemap&#x2F;TileMap.ts:290</code></a>
+        <a href="../files/src_gameobjects_tilemap_TileMap.ts.html#l289"><code>src&#x2F;gameobjects&#x2F;tilemap&#x2F;TileMap.ts:289</code></a>
         
         </p>
 
diff --git a/docs/classes/Kiwi.GameObjects.Tilemap.TileMapLayer.html b/docs/classes/Kiwi.GameObjects.Tilemap.TileMapLayer.html
index 8e10d73..2d9ef95 100644
--- a/docs/classes/Kiwi.GameObjects.Tilemap.TileMapLayer.html
+++ b/docs/classes/Kiwi.GameObjects.Tilemap.TileMapLayer.html
@@ -1432,7 +1432,7 @@ <h3 class="name"><code>_calculateBoundaries</code></h3>
             
         
         
-        <a href="../files/src_gameobjects_tilemap_TileMapLayer.ts.html#l693"><code>src&#x2F;gameobjects&#x2F;tilemap&#x2F;TileMapLayer.ts:693</code></a>
+        <a href="../files/src_gameobjects_tilemap_TileMapLayer.ts.html#l692"><code>src&#x2F;gameobjects&#x2F;tilemap&#x2F;TileMapLayer.ts:692</code></a>
         
         </p>
 
@@ -1701,7 +1701,7 @@ <h3 class="name"><code>chartToScreen</code></h3>
             
         
         
-        <a href="../files/src_gameobjects_tilemap_TileMapLayer.ts.html#l757"><code>src&#x2F;gameobjects&#x2F;tilemap&#x2F;TileMapLayer.ts:757</code></a>
+        <a href="../files/src_gameobjects_tilemap_TileMapLayer.ts.html#l756"><code>src&#x2F;gameobjects&#x2F;tilemap&#x2F;TileMapLayer.ts:756</code></a>
         
         </p>
 
@@ -3653,7 +3653,7 @@ <h3 class="name"><code>render</code></h3>
             
         
         
-        <a href="../files/src_gameobjects_tilemap_TileMapLayer.ts.html#l792"><code>src&#x2F;gameobjects&#x2F;tilemap&#x2F;TileMapLayer.ts:792</code></a>
+        <a href="../files/src_gameobjects_tilemap_TileMapLayer.ts.html#l791"><code>src&#x2F;gameobjects&#x2F;tilemap&#x2F;TileMapLayer.ts:791</code></a>
         
         </p>
 
@@ -4277,7 +4277,7 @@ <h3 class="name"><code>screenToChart</code></h3>
             
         
         
-        <a href="../files/src_gameobjects_tilemap_TileMapLayer.ts.html#l774"><code>src&#x2F;gameobjects&#x2F;tilemap&#x2F;TileMapLayer.ts:774</code></a>
+        <a href="../files/src_gameobjects_tilemap_TileMapLayer.ts.html#l773"><code>src&#x2F;gameobjects&#x2F;tilemap&#x2F;TileMapLayer.ts:773</code></a>
         
         </p>
 
@@ -5294,7 +5294,7 @@ <h3 class="name"><code>_maxX</code></h3>
             
         
         
-        <a href="../files/src_gameobjects_tilemap_TileMapLayer.ts.html#l616"><code>src&#x2F;gameobjects&#x2F;tilemap&#x2F;TileMapLayer.ts:616</code></a>
+        <a href="../files/src_gameobjects_tilemap_TileMapLayer.ts.html#l615"><code>src&#x2F;gameobjects&#x2F;tilemap&#x2F;TileMapLayer.ts:615</code></a>
         
         </p>
 
@@ -5342,7 +5342,7 @@ <h3 class="name"><code>_maxY</code></h3>
             
         
         
-        <a href="../files/src_gameobjects_tilemap_TileMapLayer.ts.html#l625"><code>src&#x2F;gameobjects&#x2F;tilemap&#x2F;TileMapLayer.ts:625</code></a>
+        <a href="../files/src_gameobjects_tilemap_TileMapLayer.ts.html#l624"><code>src&#x2F;gameobjects&#x2F;tilemap&#x2F;TileMapLayer.ts:624</code></a>
         
         </p>
 
@@ -5434,7 +5434,7 @@ <h3 class="name"><code>_startX</code></h3>
             
         
         
-        <a href="../files/src_gameobjects_tilemap_TileMapLayer.ts.html#l634"><code>src&#x2F;gameobjects&#x2F;tilemap&#x2F;TileMapLayer.ts:634</code></a>
+        <a href="../files/src_gameobjects_tilemap_TileMapLayer.ts.html#l633"><code>src&#x2F;gameobjects&#x2F;tilemap&#x2F;TileMapLayer.ts:633</code></a>
         
         </p>
 
@@ -5482,7 +5482,7 @@ <h3 class="name"><code>_startY</code></h3>
             
         
         
-        <a href="../files/src_gameobjects_tilemap_TileMapLayer.ts.html#l643"><code>src&#x2F;gameobjects&#x2F;tilemap&#x2F;TileMapLayer.ts:643</code></a>
+        <a href="../files/src_gameobjects_tilemap_TileMapLayer.ts.html#l642"><code>src&#x2F;gameobjects&#x2F;tilemap&#x2F;TileMapLayer.ts:642</code></a>
         
         </p>
 
@@ -5577,7 +5577,7 @@ <h3 class="name"><code>_temptype</code></h3>
             
         
         
-        <a href="../files/src_gameobjects_tilemap_TileMapLayer.ts.html#l652"><code>src&#x2F;gameobjects&#x2F;tilemap&#x2F;TileMapLayer.ts:652</code></a>
+        <a href="../files/src_gameobjects_tilemap_TileMapLayer.ts.html#l651"><code>src&#x2F;gameobjects&#x2F;tilemap&#x2F;TileMapLayer.ts:651</code></a>
         
         </p>
 
@@ -6090,7 +6090,7 @@ <h3 class="name"><code>corner1</code></h3>
             
         
         
-        <a href="../files/src_gameobjects_tilemap_TileMapLayer.ts.html#l660"><code>src&#x2F;gameobjects&#x2F;tilemap&#x2F;TileMapLayer.ts:660</code></a>
+        <a href="../files/src_gameobjects_tilemap_TileMapLayer.ts.html#l659"><code>src&#x2F;gameobjects&#x2F;tilemap&#x2F;TileMapLayer.ts:659</code></a>
         
         </p>
 
@@ -6139,7 +6139,7 @@ <h3 class="name"><code>corner2</code></h3>
             
         
         
-        <a href="../files/src_gameobjects_tilemap_TileMapLayer.ts.html#l668"><code>src&#x2F;gameobjects&#x2F;tilemap&#x2F;TileMapLayer.ts:668</code></a>
+        <a href="../files/src_gameobjects_tilemap_TileMapLayer.ts.html#l667"><code>src&#x2F;gameobjects&#x2F;tilemap&#x2F;TileMapLayer.ts:667</code></a>
         
         </p>
 
@@ -6188,7 +6188,7 @@ <h3 class="name"><code>corner3</code></h3>
             
         
         
-        <a href="../files/src_gameobjects_tilemap_TileMapLayer.ts.html#l676"><code>src&#x2F;gameobjects&#x2F;tilemap&#x2F;TileMapLayer.ts:676</code></a>
+        <a href="../files/src_gameobjects_tilemap_TileMapLayer.ts.html#l675"><code>src&#x2F;gameobjects&#x2F;tilemap&#x2F;TileMapLayer.ts:675</code></a>
         
         </p>
 
@@ -6237,7 +6237,7 @@ <h3 class="name"><code>corner4</code></h3>
             
         
         
-        <a href="../files/src_gameobjects_tilemap_TileMapLayer.ts.html#l684"><code>src&#x2F;gameobjects&#x2F;tilemap&#x2F;TileMapLayer.ts:684</code></a>
+        <a href="../files/src_gameobjects_tilemap_TileMapLayer.ts.html#l683"><code>src&#x2F;gameobjects&#x2F;tilemap&#x2F;TileMapLayer.ts:683</code></a>
         
         </p>
 
diff --git a/docs/classes/Kiwi.GameObjects.Tilemap.TileType.html b/docs/classes/Kiwi.GameObjects.Tilemap.TileType.html
index a8b5760..cccf28f 100644
--- a/docs/classes/Kiwi.GameObjects.Tilemap.TileType.html
+++ b/docs/classes/Kiwi.GameObjects.Tilemap.TileType.html
@@ -682,7 +682,7 @@ <h3 class="name"><code>objType</code></h3>
             
         
         
-        <a href="../files/src_gameobjects_tilemap_TileType.ts.html#l89"><code>src&#x2F;gameobjects&#x2F;tilemap&#x2F;TileType.ts:89</code></a>
+        <a href="../files/src_gameobjects_tilemap_TileType.ts.html#l88"><code>src&#x2F;gameobjects&#x2F;tilemap&#x2F;TileType.ts:88</code></a>
         
         </p>
 
@@ -752,7 +752,7 @@ <h3 class="name"><code>allowCollisions</code></h3>
             
         
         
-        <a href="../files/src_gameobjects_tilemap_TileType.ts.html#l34"><code>src&#x2F;gameobjects&#x2F;tilemap&#x2F;TileType.ts:34</code></a>
+        <a href="../files/src_gameobjects_tilemap_TileType.ts.html#l33"><code>src&#x2F;gameobjects&#x2F;tilemap&#x2F;TileType.ts:33</code></a>
         
         </p>
 
@@ -802,7 +802,7 @@ <h3 class="name"><code>cellIndex</code></h3>
             
         
         
-        <a href="../files/src_gameobjects_tilemap_TileType.ts.html#l80"><code>src&#x2F;gameobjects&#x2F;tilemap&#x2F;TileType.ts:80</code></a>
+        <a href="../files/src_gameobjects_tilemap_TileType.ts.html#l79"><code>src&#x2F;gameobjects&#x2F;tilemap&#x2F;TileType.ts:79</code></a>
         
         </p>
 
@@ -850,7 +850,7 @@ <h3 class="name"><code>index</code></h3>
             
         
         
-        <a href="../files/src_gameobjects_tilemap_TileType.ts.html#l71"><code>src&#x2F;gameobjects&#x2F;tilemap&#x2F;TileType.ts:71</code></a>
+        <a href="../files/src_gameobjects_tilemap_TileType.ts.html#l70"><code>src&#x2F;gameobjects&#x2F;tilemap&#x2F;TileType.ts:70</code></a>
         
         </p>
 
@@ -898,7 +898,7 @@ <h3 class="name"><code>offset</code></h3>
             
         
         
-        <a href="../files/src_gameobjects_tilemap_TileType.ts.html#l53"><code>src&#x2F;gameobjects&#x2F;tilemap&#x2F;TileType.ts:53</code></a>
+        <a href="../files/src_gameobjects_tilemap_TileType.ts.html#l52"><code>src&#x2F;gameobjects&#x2F;tilemap&#x2F;TileType.ts:52</code></a>
         
         </p>
 
@@ -946,7 +946,7 @@ <h3 class="name"><code>properties</code></h3>
             
         
         
-        <a href="../files/src_gameobjects_tilemap_TileType.ts.html#l44"><code>src&#x2F;gameobjects&#x2F;tilemap&#x2F;TileType.ts:44</code></a>
+        <a href="../files/src_gameobjects_tilemap_TileType.ts.html#l43"><code>src&#x2F;gameobjects&#x2F;tilemap&#x2F;TileType.ts:43</code></a>
         
         </p>
 
@@ -994,7 +994,7 @@ <h3 class="name"><code>tilemap</code></h3>
             
         
         
-        <a href="../files/src_gameobjects_tilemap_TileType.ts.html#l63"><code>src&#x2F;gameobjects&#x2F;tilemap&#x2F;TileType.ts:63</code></a>
+        <a href="../files/src_gameobjects_tilemap_TileType.ts.html#l62"><code>src&#x2F;gameobjects&#x2F;tilemap&#x2F;TileType.ts:62</code></a>
         
         </p>
 
diff --git a/docs/classes/Kiwi.Geom.Ray.html b/docs/classes/Kiwi.Geom.Ray.html
index 94c520b..d60843e 100644
--- a/docs/classes/Kiwi.Geom.Ray.html
+++ b/docs/classes/Kiwi.Geom.Ray.html
@@ -1449,7 +1449,7 @@ <h3 class="name"><code>toString</code></h3>
             
         
         
-        <a href="../files/src_geom_Ray.ts.html#l200"><code>src&#x2F;geom&#x2F;Ray.ts:200</code></a>
+        <a href="../files/src_geom_Ray.ts.html#l197"><code>src&#x2F;geom&#x2F;Ray.ts:197</code></a>
         
         </p>
 
diff --git a/docs/classes/Kiwi.Group.html b/docs/classes/Kiwi.Group.html
index 586dc79..cdcc5e4 100644
--- a/docs/classes/Kiwi.Group.html
+++ b/docs/classes/Kiwi.Group.html
@@ -5346,7 +5346,7 @@ <h3 class="name"><code>_destroyRemoveChildren</code></h3>
             
         
         
-        <a href="../files/src_core_Group.ts.html#l1302"><code>src&#x2F;core&#x2F;Group.ts:1302</code></a>
+        <a href="../files/src_core_Group.ts.html#l1301"><code>src&#x2F;core&#x2F;Group.ts:1301</code></a>
         
         </p>
 
diff --git a/docs/classes/Kiwi.Input.Touch.html b/docs/classes/Kiwi.Input.Touch.html
index 5e96e0b..9e9dc93 100644
--- a/docs/classes/Kiwi.Input.Touch.html
+++ b/docs/classes/Kiwi.Input.Touch.html
@@ -968,7 +968,7 @@ <h3 class="name"><code>_cancelFinger</code></h3>
             
         
         
-        <a href="../files/src_input_Touch.ts.html#l468"><code>src&#x2F;input&#x2F;Touch.ts:468</code></a>
+        <a href="../files/src_input_Touch.ts.html#l467"><code>src&#x2F;input&#x2F;Touch.ts:467</code></a>
         
         </p>
 
@@ -1192,7 +1192,7 @@ <h3 class="name"><code>_enterFinger</code></h3>
             
         
         
-        <a href="../files/src_input_Touch.ts.html#l495"><code>src&#x2F;input&#x2F;Touch.ts:495</code></a>
+        <a href="../files/src_input_Touch.ts.html#l493"><code>src&#x2F;input&#x2F;Touch.ts:493</code></a>
         
         </p>
 
@@ -1304,7 +1304,7 @@ <h3 class="name"><code>_leaveFinger</code></h3>
             
         
         
-        <a href="../files/src_input_Touch.ts.html#l516"><code>src&#x2F;input&#x2F;Touch.ts:516</code></a>
+        <a href="../files/src_input_Touch.ts.html#l514"><code>src&#x2F;input&#x2F;Touch.ts:514</code></a>
         
         </p>
 
@@ -1416,7 +1416,7 @@ <h3 class="name"><code>_moveFinger</code></h3>
             
         
         
-        <a href="../files/src_input_Touch.ts.html#l533"><code>src&#x2F;input&#x2F;Touch.ts:533</code></a>
+        <a href="../files/src_input_Touch.ts.html#l531"><code>src&#x2F;input&#x2F;Touch.ts:531</code></a>
         
         </p>
 
@@ -1856,7 +1856,7 @@ <h3 class="name"><code>onPointerCancel</code></h3>
             
         
         
-        <a href="../files/src_input_Touch.ts.html#l686"><code>src&#x2F;input&#x2F;Touch.ts:686</code></a>
+        <a href="../files/src_input_Touch.ts.html#l683"><code>src&#x2F;input&#x2F;Touch.ts:683</code></a>
         
         </p>
 
@@ -1946,7 +1946,7 @@ <h3 class="name"><code>onPointerEnd</code></h3>
             
         
         
-        <a href="../files/src_input_Touch.ts.html#l733"><code>src&#x2F;input&#x2F;Touch.ts:733</code></a>
+        <a href="../files/src_input_Touch.ts.html#l730"><code>src&#x2F;input&#x2F;Touch.ts:730</code></a>
         
         </p>
 
@@ -2036,7 +2036,7 @@ <h3 class="name"><code>onPointerEnter</code></h3>
             
         
         
-        <a href="../files/src_input_Touch.ts.html#l698"><code>src&#x2F;input&#x2F;Touch.ts:698</code></a>
+        <a href="../files/src_input_Touch.ts.html#l695"><code>src&#x2F;input&#x2F;Touch.ts:695</code></a>
         
         </p>
 
@@ -2126,7 +2126,7 @@ <h3 class="name"><code>onPointerLeave</code></h3>
             
         
         
-        <a href="../files/src_input_Touch.ts.html#l710"><code>src&#x2F;input&#x2F;Touch.ts:710</code></a>
+        <a href="../files/src_input_Touch.ts.html#l707"><code>src&#x2F;input&#x2F;Touch.ts:707</code></a>
         
         </p>
 
@@ -2214,7 +2214,7 @@ <h3 class="name"><code>onPointerMove</code></h3>
             
         
         
-        <a href="../files/src_input_Touch.ts.html#l722"><code>src&#x2F;input&#x2F;Touch.ts:722</code></a>
+        <a href="../files/src_input_Touch.ts.html#l719"><code>src&#x2F;input&#x2F;Touch.ts:719</code></a>
         
         </p>
 
@@ -2304,7 +2304,7 @@ <h3 class="name"><code>onPointerStart</code></h3>
             
         
         
-        <a href="../files/src_input_Touch.ts.html#l674"><code>src&#x2F;input&#x2F;Touch.ts:674</code></a>
+        <a href="../files/src_input_Touch.ts.html#l671"><code>src&#x2F;input&#x2F;Touch.ts:671</code></a>
         
         </p>
 
@@ -2394,7 +2394,7 @@ <h3 class="name"><code>onTouchCancel</code></h3>
             
         
         
-        <a href="../files/src_input_Touch.ts.html#l577"><code>src&#x2F;input&#x2F;Touch.ts:577</code></a>
+        <a href="../files/src_input_Touch.ts.html#l575"><code>src&#x2F;input&#x2F;Touch.ts:575</code></a>
         
         </p>
 
@@ -2485,7 +2485,7 @@ <h3 class="name"><code>onTouchEnd</code></h3>
             
         
         
-        <a href="../files/src_input_Touch.ts.html#l648"><code>src&#x2F;input&#x2F;Touch.ts:648</code></a>
+        <a href="../files/src_input_Touch.ts.html#l646"><code>src&#x2F;input&#x2F;Touch.ts:646</code></a>
         
         </p>
 
@@ -2576,7 +2576,7 @@ <h3 class="name"><code>onTouchEnter</code></h3>
             
         
         
-        <a href="../files/src_input_Touch.ts.html#l594"><code>src&#x2F;input&#x2F;Touch.ts:594</code></a>
+        <a href="../files/src_input_Touch.ts.html#l592"><code>src&#x2F;input&#x2F;Touch.ts:592</code></a>
         
         </p>
 
@@ -2666,7 +2666,7 @@ <h3 class="name"><code>onTouchLeave</code></h3>
             
         
         
-        <a href="../files/src_input_Touch.ts.html#l612"><code>src&#x2F;input&#x2F;Touch.ts:612</code></a>
+        <a href="../files/src_input_Touch.ts.html#l610"><code>src&#x2F;input&#x2F;Touch.ts:610</code></a>
         
         </p>
 
@@ -2756,7 +2756,7 @@ <h3 class="name"><code>onTouchMove</code></h3>
             
         
         
-        <a href="../files/src_input_Touch.ts.html#l631"><code>src&#x2F;input&#x2F;Touch.ts:631</code></a>
+        <a href="../files/src_input_Touch.ts.html#l629"><code>src&#x2F;input&#x2F;Touch.ts:629</code></a>
         
         </p>
 
@@ -2846,7 +2846,7 @@ <h3 class="name"><code>onTouchStart</code></h3>
             
         
         
-        <a href="../files/src_input_Touch.ts.html#l559"><code>src&#x2F;input&#x2F;Touch.ts:559</code></a>
+        <a href="../files/src_input_Touch.ts.html#l557"><code>src&#x2F;input&#x2F;Touch.ts:557</code></a>
         
         </p>
 
@@ -2927,7 +2927,7 @@ <h3 class="name"><code>reset</code></h3>
             
         
         
-        <a href="../files/src_input_Touch.ts.html#l800"><code>src&#x2F;input&#x2F;Touch.ts:800</code></a>
+        <a href="../files/src_input_Touch.ts.html#l797"><code>src&#x2F;input&#x2F;Touch.ts:797</code></a>
         
         </p>
 
@@ -3041,7 +3041,7 @@ <h3 class="name"><code>stop</code></h3>
             
         
         
-        <a href="../files/src_input_Touch.ts.html#l771"><code>src&#x2F;input&#x2F;Touch.ts:771</code></a>
+        <a href="../files/src_input_Touch.ts.html#l768"><code>src&#x2F;input&#x2F;Touch.ts:768</code></a>
         
         </p>
 
@@ -3098,7 +3098,7 @@ <h3 class="name"><code>update</code></h3>
             
         
         
-        <a href="../files/src_input_Touch.ts.html#l753"><code>src&#x2F;input&#x2F;Touch.ts:753</code></a>
+        <a href="../files/src_input_Touch.ts.html#l750"><code>src&#x2F;input&#x2F;Touch.ts:750</code></a>
         
         </p>
 
diff --git a/docs/classes/Kiwi.PluginManager.html b/docs/classes/Kiwi.PluginManager.html
index c63a1ae..43984aa 100644
--- a/docs/classes/Kiwi.PluginManager.html
+++ b/docs/classes/Kiwi.PluginManager.html
@@ -707,7 +707,7 @@ <h3 class="name"><code>_createPlugins</code></h3>
             
         
         
-        <a href="../files/src_core_PluginManager.ts.html#l241"><code>src&#x2F;core&#x2F;PluginManager.ts:241</code></a>
+        <a href="../files/src_core_PluginManager.ts.html#l239"><code>src&#x2F;core&#x2F;PluginManager.ts:239</code></a>
         
         </p>
 
@@ -766,7 +766,7 @@ <h3 class="name"><code>boot</code></h3>
             
         
         
-        <a href="../files/src_core_PluginManager.ts.html#l261"><code>src&#x2F;core&#x2F;PluginManager.ts:261</code></a>
+        <a href="../files/src_core_PluginManager.ts.html#l256"><code>src&#x2F;core&#x2F;PluginManager.ts:256</code></a>
         
         </p>
 
@@ -833,7 +833,7 @@ <h3 class="name"><code>pluginIsRegistered</code></h3>
             
         
         
-        <a href="../files/src_core_PluginManager.ts.html#l225"><code>src&#x2F;core&#x2F;PluginManager.ts:225</code></a>
+        <a href="../files/src_core_PluginManager.ts.html#l223"><code>src&#x2F;core&#x2F;PluginManager.ts:223</code></a>
         
         </p>
 
@@ -925,7 +925,7 @@ <h3 class="name"><code>register</code></h3>
             
         
         
-        <a href="../files/src_core_PluginManager.ts.html#l63"><code>src&#x2F;core&#x2F;PluginManager.ts:63</code></a>
+        <a href="../files/src_core_PluginManager.ts.html#l61"><code>src&#x2F;core&#x2F;PluginManager.ts:61</code></a>
         
         </p>
 
@@ -1007,7 +1007,7 @@ <h3 class="name"><code>update</code></h3>
             
         
         
-        <a href="../files/src_core_PluginManager.ts.html#l277"><code>src&#x2F;core&#x2F;PluginManager.ts:277</code></a>
+        <a href="../files/src_core_PluginManager.ts.html#l272"><code>src&#x2F;core&#x2F;PluginManager.ts:272</code></a>
         
         </p>
 
@@ -1064,7 +1064,7 @@ <h3 class="name"><code>validatePlugins</code></h3>
             
         
         
-        <a href="../files/src_core_PluginManager.ts.html#l130"><code>src&#x2F;core&#x2F;PluginManager.ts:130</code></a>
+        <a href="../files/src_core_PluginManager.ts.html#l128"><code>src&#x2F;core&#x2F;PluginManager.ts:128</code></a>
         
         </p>
 
@@ -1142,7 +1142,7 @@ <h3 class="name"><code>validMinimumPluginVersionExists</code></h3>
             
         
         
-        <a href="../files/src_core_PluginManager.ts.html#l208"><code>src&#x2F;core&#x2F;PluginManager.ts:208</code></a>
+        <a href="../files/src_core_PluginManager.ts.html#l206"><code>src&#x2F;core&#x2F;PluginManager.ts:206</code></a>
         
         </p>
 
@@ -1299,7 +1299,7 @@ <h3 class="name"><code>_bootObjects</code></h3>
             
         
         
-        <a href="../files/src_core_PluginManager.ts.html#l122"><code>src&#x2F;core&#x2F;PluginManager.ts:122</code></a>
+        <a href="../files/src_core_PluginManager.ts.html#l120"><code>src&#x2F;core&#x2F;PluginManager.ts:120</code></a>
         
         </p>
 
@@ -1346,7 +1346,7 @@ <h3 class="name"><code>_plugins</code></h3>
             
         
         
-        <a href="../files/src_core_PluginManager.ts.html#l114"><code>src&#x2F;core&#x2F;PluginManager.ts:114</code></a>
+        <a href="../files/src_core_PluginManager.ts.html#l112"><code>src&#x2F;core&#x2F;PluginManager.ts:112</code></a>
         
         </p>
 
@@ -1395,7 +1395,7 @@ <h3 class="name"><code>getAvailablePlugins</code></h3>
             
         
         
-        <a href="../files/src_core_PluginManager.ts.html#l46"><code>src&#x2F;core&#x2F;PluginManager.ts:46</code></a>
+        <a href="../files/src_core_PluginManager.ts.html#l45"><code>src&#x2F;core&#x2F;PluginManager.ts:45</code></a>
         
         </p>
 
@@ -1442,7 +1442,7 @@ <h3 class="name"><code>objType</code></h3>
             
         
         
-        <a href="../files/src_core_PluginManager.ts.html#l96"><code>src&#x2F;core&#x2F;PluginManager.ts:96</code></a>
+        <a href="../files/src_core_PluginManager.ts.html#l94"><code>src&#x2F;core&#x2F;PluginManager.ts:94</code></a>
         
         </p>
 
@@ -1489,7 +1489,7 @@ <h3 class="name"><code>objType</code></h3>
             
         
         
-        <a href="../files/src_core_PluginManager.ts.html#l106"><code>src&#x2F;core&#x2F;PluginManager.ts:106</code></a>
+        <a href="../files/src_core_PluginManager.ts.html#l104"><code>src&#x2F;core&#x2F;PluginManager.ts:104</code></a>
         
         </p>
 
diff --git a/docs/classes/Kiwi.Renderers.GLRenderManager.html b/docs/classes/Kiwi.Renderers.GLRenderManager.html
index 580f913..b821e83 100644
--- a/docs/classes/Kiwi.Renderers.GLRenderManager.html
+++ b/docs/classes/Kiwi.Renderers.GLRenderManager.html
@@ -372,7 +372,7 @@ <h2 class="off-left">APIs</h2>
 
     
         <div class="foundat">
-            Defined in: <a href="../files/src_render_GLRenderManager.ts.html#l18"><code>src&#x2F;render&#x2F;GLRenderManager.ts:18</code></a>
+            Defined in: <a href="../files/src_render_GLRenderManager.ts.html#l13"><code>src&#x2F;render&#x2F;GLRenderManager.ts:13</code></a>
         </div>
     
 
@@ -446,7 +446,7 @@ <h3 class="name"><code>Kiwi.Renderers.GLRenderManager</code></h3>
             
         
         
-        <a href="../files/src_render_GLRenderManager.ts.html#l18"><code>src&#x2F;render&#x2F;GLRenderManager.ts:18</code></a>
+        <a href="../files/src_render_GLRenderManager.ts.html#l13"><code>src&#x2F;render&#x2F;GLRenderManager.ts:13</code></a>
         
         </p>
 
@@ -769,6 +769,13 @@ <h2 class="off-left">Item Index</h2>
                             </li>
                         
                             <li class="index-item property public">
+                                <a href="#property_camMatrix">camMatrix</a>
+
+                                
+                                
+                            </li>
+                        
+                            <li class="index-item property public">
                                 <a href="#property_numDrawCalls">numDrawCalls</a>
 
                                 
@@ -823,7 +830,7 @@ <h3 class="name"><code>_init</code></h3>
             
         
         
-        <a href="../files/src_render_GLRenderManager.ts.html#l294"><code>src&#x2F;render&#x2F;GLRenderManager.ts:294</code></a>
+        <a href="../files/src_render_GLRenderManager.ts.html#l292"><code>src&#x2F;render&#x2F;GLRenderManager.ts:292</code></a>
         
         </p>
 
@@ -899,7 +906,7 @@ <h3 class="name"><code>_switchBlendMode</code></h3>
             
         
         
-        <a href="../files/src_render_GLRenderManager.ts.html#l655"><code>src&#x2F;render&#x2F;GLRenderManager.ts:655</code></a>
+        <a href="../files/src_render_GLRenderManager.ts.html#l653"><code>src&#x2F;render&#x2F;GLRenderManager.ts:653</code></a>
         
         </p>
 
@@ -1012,7 +1019,7 @@ <h3 class="name"><code>_switchRenderer</code></h3>
             
         
         
-        <a href="../files/src_render_GLRenderManager.ts.html#l630"><code>src&#x2F;render&#x2F;GLRenderManager.ts:630</code></a>
+        <a href="../files/src_render_GLRenderManager.ts.html#l628"><code>src&#x2F;render&#x2F;GLRenderManager.ts:628</code></a>
         
         </p>
 
@@ -1123,7 +1130,7 @@ <h3 class="name"><code>_switchTexture</code></h3>
             
         
         
-        <a href="../files/src_render_GLRenderManager.ts.html#l643"><code>src&#x2F;render&#x2F;GLRenderManager.ts:643</code></a>
+        <a href="../files/src_render_GLRenderManager.ts.html#l641"><code>src&#x2F;render&#x2F;GLRenderManager.ts:641</code></a>
         
         </p>
 
@@ -1238,7 +1245,7 @@ <h3 class="name"><code>addSharedRenderer</code></h3>
             
         
         
-        <a href="../files/src_render_GLRenderManager.ts.html#l182"><code>src&#x2F;render&#x2F;GLRenderManager.ts:182</code></a>
+        <a href="../files/src_render_GLRenderManager.ts.html#l180"><code>src&#x2F;render&#x2F;GLRenderManager.ts:180</code></a>
         
         </p>
 
@@ -1374,7 +1381,7 @@ <h3 class="name"><code>addSharedRendererClone</code></h3>
             
         
         
-        <a href="../files/src_render_GLRenderManager.ts.html#l206"><code>src&#x2F;render&#x2F;GLRenderManager.ts:206</code></a>
+        <a href="../files/src_render_GLRenderManager.ts.html#l204"><code>src&#x2F;render&#x2F;GLRenderManager.ts:204</code></a>
         
         </p>
 
@@ -1518,7 +1525,7 @@ <h3 class="name"><code>addTexture</code></h3>
             
         
         
-        <a href="../files/src_render_GLRenderManager.ts.html#l156"><code>src&#x2F;render&#x2F;GLRenderManager.ts:156</code></a>
+        <a href="../files/src_render_GLRenderManager.ts.html#l154"><code>src&#x2F;render&#x2F;GLRenderManager.ts:154</code></a>
         
         </p>
 
@@ -1613,7 +1620,7 @@ <h3 class="name"><code>boot</code></h3>
             
         
         
-        <a href="../files/src_render_GLRenderManager.ts.html#l41"><code>src&#x2F;render&#x2F;GLRenderManager.ts:41</code></a>
+        <a href="../files/src_render_GLRenderManager.ts.html#l35"><code>src&#x2F;render&#x2F;GLRenderManager.ts:35</code></a>
         
         </p>
 
@@ -1670,7 +1677,7 @@ <h3 class="name"><code>collateBatches</code></h3>
             
         
         
-        <a href="../files/src_render_GLRenderManager.ts.html#l528"><code>src&#x2F;render&#x2F;GLRenderManager.ts:528</code></a>
+        <a href="../files/src_render_GLRenderManager.ts.html#l526"><code>src&#x2F;render&#x2F;GLRenderManager.ts:526</code></a>
         
         </p>
 
@@ -1727,7 +1734,7 @@ <h3 class="name"><code>collateChild</code></h3>
             
         
         
-        <a href="../files/src_render_GLRenderManager.ts.html#l503"><code>src&#x2F;render&#x2F;GLRenderManager.ts:503</code></a>
+        <a href="../files/src_render_GLRenderManager.ts.html#l501"><code>src&#x2F;render&#x2F;GLRenderManager.ts:501</code></a>
         
         </p>
 
@@ -1784,7 +1791,7 @@ <h3 class="name"><code>collateRenderSequence</code></h3>
             
         
         
-        <a href="../files/src_render_GLRenderManager.ts.html#l492"><code>src&#x2F;render&#x2F;GLRenderManager.ts:492</code></a>
+        <a href="../files/src_render_GLRenderManager.ts.html#l490"><code>src&#x2F;render&#x2F;GLRenderManager.ts:490</code></a>
         
         </p>
 
@@ -1851,7 +1858,7 @@ <h3 class="name"><code>endState</code></h3>
             
         
         
-        <a href="../files/src_render_GLRenderManager.ts.html#l407"><code>src&#x2F;render&#x2F;GLRenderManager.ts:407</code></a>
+        <a href="../files/src_render_GLRenderManager.ts.html#l405"><code>src&#x2F;render&#x2F;GLRenderManager.ts:405</code></a>
         
         </p>
 
@@ -1931,7 +1938,7 @@ <h3 class="name"><code>initState</code></h3>
             
         
         
-        <a href="../files/src_render_GLRenderManager.ts.html#l395"><code>src&#x2F;render&#x2F;GLRenderManager.ts:395</code></a>
+        <a href="../files/src_render_GLRenderManager.ts.html#l393"><code>src&#x2F;render&#x2F;GLRenderManager.ts:393</code></a>
         
         </p>
 
@@ -1993,7 +2000,7 @@ <h3 class="name"><code>objType</code></h3>
             
         
         
-        <a href="../files/src_render_GLRenderManager.ts.html#l54"><code>src&#x2F;render&#x2F;GLRenderManager.ts:54</code></a>
+        <a href="../files/src_render_GLRenderManager.ts.html#l48"><code>src&#x2F;render&#x2F;GLRenderManager.ts:48</code></a>
         
         </p>
 
@@ -2074,7 +2081,7 @@ <h3 class="name"><code>render</code></h3>
             
         
         
-        <a href="../files/src_render_GLRenderManager.ts.html#l419"><code>src&#x2F;render&#x2F;GLRenderManager.ts:419</code></a>
+        <a href="../files/src_render_GLRenderManager.ts.html#l417"><code>src&#x2F;render&#x2F;GLRenderManager.ts:417</code></a>
         
         </p>
 
@@ -2179,7 +2186,7 @@ <h3 class="name"><code>renderBatch</code></h3>
             
         
         
-        <a href="../files/src_render_GLRenderManager.ts.html#l569"><code>src&#x2F;render&#x2F;GLRenderManager.ts:569</code></a>
+        <a href="../files/src_render_GLRenderManager.ts.html#l567"><code>src&#x2F;render&#x2F;GLRenderManager.ts:567</code></a>
         
         </p>
 
@@ -2305,7 +2312,7 @@ <h3 class="name"><code>renderBatches</code></h3>
             
         
         
-        <a href="../files/src_render_GLRenderManager.ts.html#l557"><code>src&#x2F;render&#x2F;GLRenderManager.ts:557</code></a>
+        <a href="../files/src_render_GLRenderManager.ts.html#l555"><code>src&#x2F;render&#x2F;GLRenderManager.ts:555</code></a>
         
         </p>
 
@@ -2424,7 +2431,7 @@ <h3 class="name"><code>renderEntity</code></h3>
             
         
         
-        <a href="../files/src_render_GLRenderManager.ts.html#l605"><code>src&#x2F;render&#x2F;GLRenderManager.ts:605</code></a>
+        <a href="../files/src_render_GLRenderManager.ts.html#l603"><code>src&#x2F;render&#x2F;GLRenderManager.ts:603</code></a>
         
         </p>
 
@@ -2556,7 +2563,7 @@ <h3 class="name"><code>requestRendererInstance</code></h3>
             
         
         
-        <a href="../files/src_render_GLRenderManager.ts.html#l261"><code>src&#x2F;render&#x2F;GLRenderManager.ts:261</code></a>
+        <a href="../files/src_render_GLRenderManager.ts.html#l259"><code>src&#x2F;render&#x2F;GLRenderManager.ts:259</code></a>
         
         </p>
 
@@ -2689,7 +2696,7 @@ <h3 class="name"><code>requestSharedRenderer</code></h3>
             
         
         
-        <a href="../files/src_render_GLRenderManager.ts.html#l235"><code>src&#x2F;render&#x2F;GLRenderManager.ts:235</code></a>
+        <a href="../files/src_render_GLRenderManager.ts.html#l233"><code>src&#x2F;render&#x2F;GLRenderManager.ts:233</code></a>
         
         </p>
 
@@ -2826,7 +2833,7 @@ <h3 class="name"><code>scaleViewport</code></h3>
             
         
         
-        <a href="../files/src_render_GLRenderManager.ts.html#l347"><code>src&#x2F;render&#x2F;GLRenderManager.ts:347</code></a>
+        <a href="../files/src_render_GLRenderManager.ts.html#l345"><code>src&#x2F;render&#x2F;GLRenderManager.ts:345</code></a>
         
         </p>
 
@@ -2969,7 +2976,7 @@ <h3 class="name"><code>setupGLState</code></h3>
             
         
         
-        <a href="../files/src_render_GLRenderManager.ts.html#l618"><code>src&#x2F;render&#x2F;GLRenderManager.ts:618</code></a>
+        <a href="../files/src_render_GLRenderManager.ts.html#l616"><code>src&#x2F;render&#x2F;GLRenderManager.ts:616</code></a>
         
         </p>
 
@@ -3050,7 +3057,7 @@ <h3 class="name"><code>_currentBlendMode</code></h3>
             
         
         
-        <a href="../files/src_render_GLRenderManager.ts.html#l107"><code>src&#x2F;render&#x2F;GLRenderManager.ts:107</code></a>
+        <a href="../files/src_render_GLRenderManager.ts.html#l101"><code>src&#x2F;render&#x2F;GLRenderManager.ts:101</code></a>
         
         </p>
 
@@ -3099,7 +3106,7 @@ <h3 class="name"><code>_currentRenderer</code></h3>
             
         
         
-        <a href="../files/src_render_GLRenderManager.ts.html#l99"><code>src&#x2F;render&#x2F;GLRenderManager.ts:99</code></a>
+        <a href="../files/src_render_GLRenderManager.ts.html#l93"><code>src&#x2F;render&#x2F;GLRenderManager.ts:93</code></a>
         
         </p>
 
@@ -3146,7 +3153,7 @@ <h3 class="name"><code>_currentTextureAtlas</code></h3>
             
         
         
-        <a href="../files/src_render_GLRenderManager.ts.html#l148"><code>src&#x2F;render&#x2F;GLRenderManager.ts:148</code></a>
+        <a href="../files/src_render_GLRenderManager.ts.html#l146"><code>src&#x2F;render&#x2F;GLRenderManager.ts:146</code></a>
         
         </p>
 
@@ -3193,7 +3200,7 @@ <h3 class="name"><code>_entityCount</code></h3>
             
         
         
-        <a href="../files/src_render_GLRenderManager.ts.html#l116"><code>src&#x2F;render&#x2F;GLRenderManager.ts:116</code></a>
+        <a href="../files/src_render_GLRenderManager.ts.html#l110"><code>src&#x2F;render&#x2F;GLRenderManager.ts:110</code></a>
         
         </p>
 
@@ -3242,7 +3249,7 @@ <h3 class="name"><code>_game</code></h3>
             
         
         
-        <a href="../files/src_render_GLRenderManager.ts.html#l64"><code>src&#x2F;render&#x2F;GLRenderManager.ts:64</code></a>
+        <a href="../files/src_render_GLRenderManager.ts.html#l58"><code>src&#x2F;render&#x2F;GLRenderManager.ts:58</code></a>
         
         </p>
 
@@ -3289,7 +3296,7 @@ <h3 class="name"><code>_maxItems</code></h3>
             
         
         
-        <a href="../files/src_render_GLRenderManager.ts.html#l134"><code>src&#x2F;render&#x2F;GLRenderManager.ts:134</code></a>
+        <a href="../files/src_render_GLRenderManager.ts.html#l128"><code>src&#x2F;render&#x2F;GLRenderManager.ts:128</code></a>
         
         </p>
 
@@ -3339,7 +3346,7 @@ <h3 class="name"><code>_shaderManager</code></h3>
             
         
         
-        <a href="../files/src_render_GLRenderManager.ts.html#l80"><code>src&#x2F;render&#x2F;GLRenderManager.ts:80</code></a>
+        <a href="../files/src_render_GLRenderManager.ts.html#l74"><code>src&#x2F;render&#x2F;GLRenderManager.ts:74</code></a>
         
         </p>
 
@@ -3386,7 +3393,7 @@ <h3 class="name"><code>_sharedRenderers</code></h3>
             
         
         
-        <a href="../files/src_render_GLRenderManager.ts.html#l167"><code>src&#x2F;render&#x2F;GLRenderManager.ts:167</code></a>
+        <a href="../files/src_render_GLRenderManager.ts.html#l165"><code>src&#x2F;render&#x2F;GLRenderManager.ts:165</code></a>
         
         </p>
 
@@ -3439,7 +3446,7 @@ <h3 class="name"><code>_stageResolution</code></h3>
             
         
         
-        <a href="../files/src_render_GLRenderManager.ts.html#l91"><code>src&#x2F;render&#x2F;GLRenderManager.ts:91</code></a>
+        <a href="../files/src_render_GLRenderManager.ts.html#l85"><code>src&#x2F;render&#x2F;GLRenderManager.ts:85</code></a>
         
         </p>
 
@@ -3486,7 +3493,7 @@ <h3 class="name"><code>_textureManager</code></h3>
             
         
         
-        <a href="../files/src_render_GLRenderManager.ts.html#l72"><code>src&#x2F;render&#x2F;GLRenderManager.ts:72</code></a>
+        <a href="../files/src_render_GLRenderManager.ts.html#l66"><code>src&#x2F;render&#x2F;GLRenderManager.ts:66</code></a>
         
         </p>
 
@@ -3508,6 +3515,53 @@ <h3 class="name"><code>_textureManager</code></h3>
 </div>
 
                 
+                    <div id="property_camMatrix" class="property item public">
+    <h3 class="name"><code>camMatrix</code></h3>
+    <span class="type">Float32Array</span>
+
+    
+
+    
+        <span class="flag public">public</span>
+    
+
+    
+
+    
+
+    <div class="meta">
+        
+            
+                
+                <p>
+                
+                Defined in
+                
+            
+        
+        
+        <a href="../files/src_render_GLRenderManager.ts.html#l138"><code>src&#x2F;render&#x2F;GLRenderManager.ts:138</code></a>
+        
+        </p>
+
+        
+
+        
+    </div>
+
+    <div class="description">
+        <p>Camera matrix used on graphics card</p>
+
+    </div>
+
+    
+
+    
+
+    
+</div>
+
+                
                     <div id="property_numDrawCalls" class="property item public">
     <h3 class="name"><code>numDrawCalls</code></h3>
     <span class="type">Number</span>
@@ -3533,7 +3587,7 @@ <h3 class="name"><code>numDrawCalls</code></h3>
             
         
         
-        <a href="../files/src_render_GLRenderManager.ts.html#l125"><code>src&#x2F;render&#x2F;GLRenderManager.ts:125</code></a>
+        <a href="../files/src_render_GLRenderManager.ts.html#l119"><code>src&#x2F;render&#x2F;GLRenderManager.ts:119</code></a>
         
         </p>
 
diff --git a/docs/classes/Kiwi.Renderers.GLTextureManager.html b/docs/classes/Kiwi.Renderers.GLTextureManager.html
index 3d48633..8a72294 100644
--- a/docs/classes/Kiwi.Renderers.GLTextureManager.html
+++ b/docs/classes/Kiwi.Renderers.GLTextureManager.html
@@ -368,7 +368,7 @@ <h2 class="off-left">APIs</h2>
 
     
         <div class="foundat">
-            Defined in: <a href="../files/src_render_GLTextureManager.ts.html#l13"><code>src&#x2F;render&#x2F;GLTextureManager.ts:13</code></a>
+            Defined in: <a href="../files/src_render_GLTextureManager.ts.html#l12"><code>src&#x2F;render&#x2F;GLTextureManager.ts:12</code></a>
         </div>
     
 
@@ -428,7 +428,7 @@ <h3 class="name"><code>Kiwi.Renderers.GLTextureManager</code></h3>
             
         
         
-        <a href="../files/src_render_GLTextureManager.ts.html#l13"><code>src&#x2F;render&#x2F;GLTextureManager.ts:13</code></a>
+        <a href="../files/src_render_GLTextureManager.ts.html#l12"><code>src&#x2F;render&#x2F;GLTextureManager.ts:12</code></a>
         
         </p>
 
@@ -663,7 +663,7 @@ <h3 class="name"><code>_addTextureToCache</code></h3>
             
         
         
-        <a href="../files/src_render_GLTextureManager.ts.html#l84"><code>src&#x2F;render&#x2F;GLTextureManager.ts:84</code></a>
+        <a href="../files/src_render_GLTextureManager.ts.html#l83"><code>src&#x2F;render&#x2F;GLTextureManager.ts:83</code></a>
         
         </p>
 
@@ -759,7 +759,7 @@ <h3 class="name"><code>_deleteTexture</code></h3>
             
         
         
-        <a href="../files/src_render_GLTextureManager.ts.html#l94"><code>src&#x2F;render&#x2F;GLTextureManager.ts:94</code></a>
+        <a href="../files/src_render_GLTextureManager.ts.html#l93"><code>src&#x2F;render&#x2F;GLTextureManager.ts:93</code></a>
         
         </p>
 
@@ -874,7 +874,7 @@ <h3 class="name"><code>_freeSpace</code></h3>
             
         
         
-        <a href="../files/src_render_GLTextureManager.ts.html#l230"><code>src&#x2F;render&#x2F;GLTextureManager.ts:230</code></a>
+        <a href="../files/src_render_GLTextureManager.ts.html#l228"><code>src&#x2F;render&#x2F;GLTextureManager.ts:228</code></a>
         
         </p>
 
@@ -1004,7 +1004,7 @@ <h3 class="name"><code>_uploadTexture</code></h3>
             
         
         
-        <a href="../files/src_render_GLTextureManager.ts.html#l108"><code>src&#x2F;render&#x2F;GLTextureManager.ts:108</code></a>
+        <a href="../files/src_render_GLTextureManager.ts.html#l107"><code>src&#x2F;render&#x2F;GLTextureManager.ts:107</code></a>
         
         </p>
 
@@ -1121,7 +1121,7 @@ <h3 class="name"><code>clearTextures</code></h3>
             
         
         
-        <a href="../files/src_render_GLTextureManager.ts.html#l171"><code>src&#x2F;render&#x2F;GLTextureManager.ts:171</code></a>
+        <a href="../files/src_render_GLTextureManager.ts.html#l170"><code>src&#x2F;render&#x2F;GLTextureManager.ts:170</code></a>
         
         </p>
 
@@ -1217,7 +1217,7 @@ <h3 class="name"><code>registerTextureWrapper</code></h3>
             
         
         
-        <a href="../files/src_render_GLTextureManager.ts.html#l155"><code>src&#x2F;render&#x2F;GLTextureManager.ts:155</code></a>
+        <a href="../files/src_render_GLTextureManager.ts.html#l154"><code>src&#x2F;render&#x2F;GLTextureManager.ts:154</code></a>
         
         </p>
 
@@ -1330,7 +1330,7 @@ <h3 class="name"><code>uploadTexture</code></h3>
             
         
         
-        <a href="../files/src_render_GLTextureManager.ts.html#l144"><code>src&#x2F;render&#x2F;GLTextureManager.ts:144</code></a>
+        <a href="../files/src_render_GLTextureManager.ts.html#l143"><code>src&#x2F;render&#x2F;GLTextureManager.ts:143</code></a>
         
         </p>
 
@@ -1441,7 +1441,7 @@ <h3 class="name"><code>uploadTextureLibrary</code></h3>
             
         
         
-        <a href="../files/src_render_GLTextureManager.ts.html#l129"><code>src&#x2F;render&#x2F;GLTextureManager.ts:129</code></a>
+        <a href="../files/src_render_GLTextureManager.ts.html#l128"><code>src&#x2F;render&#x2F;GLTextureManager.ts:128</code></a>
         
         </p>
 
@@ -1562,7 +1562,7 @@ <h3 class="name"><code>useTexture</code></h3>
             
         
         
-        <a href="../files/src_render_GLTextureManager.ts.html#l189"><code>src&#x2F;render&#x2F;GLTextureManager.ts:189</code></a>
+        <a href="../files/src_render_GLTextureManager.ts.html#l187"><code>src&#x2F;render&#x2F;GLTextureManager.ts:187</code></a>
         
         </p>
 
@@ -1685,7 +1685,7 @@ <h3 class="name"><code>_textureWrapperCache</code></h3>
             
         
         
-        <a href="../files/src_render_GLTextureManager.ts.html#l76"><code>src&#x2F;render&#x2F;GLTextureManager.ts:76</code></a>
+        <a href="../files/src_render_GLTextureManager.ts.html#l75"><code>src&#x2F;render&#x2F;GLTextureManager.ts:75</code></a>
         
         </p>
 
@@ -1734,7 +1734,7 @@ <h3 class="name"><code>DEFAULT_MAX_TEX_MEM_MB</code></h3>
             
         
         
-        <a href="../files/src_render_GLTextureManager.ts.html#l28"><code>src&#x2F;render&#x2F;GLTextureManager.ts:28</code></a>
+        <a href="../files/src_render_GLTextureManager.ts.html#l27"><code>src&#x2F;render&#x2F;GLTextureManager.ts:27</code></a>
         
         </p>
 
@@ -1781,7 +1781,7 @@ <h3 class="name"><code>maxTextureMem</code></h3>
             
         
         
-        <a href="../files/src_render_GLTextureManager.ts.html#l37"><code>src&#x2F;render&#x2F;GLTextureManager.ts:37</code></a>
+        <a href="../files/src_render_GLTextureManager.ts.html#l36"><code>src&#x2F;render&#x2F;GLTextureManager.ts:36</code></a>
         
         </p>
 
@@ -1828,7 +1828,7 @@ <h3 class="name"><code>numTextureWrites</code></h3>
             
         
         
-        <a href="../files/src_render_GLTextureManager.ts.html#l67"><code>src&#x2F;render&#x2F;GLTextureManager.ts:67</code></a>
+        <a href="../files/src_render_GLTextureManager.ts.html#l66"><code>src&#x2F;render&#x2F;GLTextureManager.ts:66</code></a>
         
         </p>
 
@@ -1875,7 +1875,7 @@ <h3 class="name"><code>usedTextureMem</code></h3>
             
         
         
-        <a href="../files/src_render_GLTextureManager.ts.html#l45"><code>src&#x2F;render&#x2F;GLTextureManager.ts:45</code></a>
+        <a href="../files/src_render_GLTextureManager.ts.html#l44"><code>src&#x2F;render&#x2F;GLTextureManager.ts:44</code></a>
         
         </p>
 
@@ -1922,7 +1922,7 @@ <h3 class="name"><code>usedTextureMem</code></h3>
             
         
         
-        <a href="../files/src_render_GLTextureManager.ts.html#l56"><code>src&#x2F;render&#x2F;GLTextureManager.ts:56</code></a>
+        <a href="../files/src_render_GLTextureManager.ts.html#l55"><code>src&#x2F;render&#x2F;GLTextureManager.ts:55</code></a>
         
         </p>
 
diff --git a/docs/classes/Kiwi.Renderers.GLTextureWrapper.html b/docs/classes/Kiwi.Renderers.GLTextureWrapper.html
index a7409bb..a9755d1 100644
--- a/docs/classes/Kiwi.Renderers.GLTextureWrapper.html
+++ b/docs/classes/Kiwi.Renderers.GLTextureWrapper.html
@@ -368,7 +368,7 @@ <h2 class="off-left">APIs</h2>
 
     
         <div class="foundat">
-            Defined in: <a href="../files/src_render_GLTextureWrapper.ts.html#l13"><code>src&#x2F;render&#x2F;GLTextureWrapper.ts:13</code></a>
+            Defined in: <a href="../files/src_render_GLTextureWrapper.ts.html#l11"><code>src&#x2F;render&#x2F;GLTextureWrapper.ts:11</code></a>
         </div>
     
 
@@ -444,7 +444,7 @@ <h3 class="name"><code>Kiwi.Renderers.GLTextureWrapper</code></h3>
             
         
         
-        <a href="../files/src_render_GLTextureWrapper.ts.html#l13"><code>src&#x2F;render&#x2F;GLTextureWrapper.ts:13</code></a>
+        <a href="../files/src_render_GLTextureWrapper.ts.html#l11"><code>src&#x2F;render&#x2F;GLTextureWrapper.ts:11</code></a>
         
         </p>
 
@@ -581,6 +581,13 @@ <h2 class="off-left">Item Index</h2>
 
                     <ul class="index-list properties">
                         
+                            <li class="index-item property private">
+                                <a href="#property__image">_image</a>
+
+                                
+                                
+                            </li>
+                        
                             <li class="index-item property">
                                 <a href="#property_created">created</a>
 
@@ -681,7 +688,7 @@ <h3 class="name"><code>createTexture</code></h3>
             
         
         
-        <a href="../files/src_render_GLTextureWrapper.ts.html#l98"><code>src&#x2F;render&#x2F;GLTextureWrapper.ts:98</code></a>
+        <a href="../files/src_render_GLTextureWrapper.ts.html#l101"><code>src&#x2F;render&#x2F;GLTextureWrapper.ts:101</code></a>
         
         </p>
 
@@ -771,7 +778,7 @@ <h3 class="name"><code>deleteTexture</code></h3>
             
         
         
-        <a href="../files/src_render_GLTextureWrapper.ts.html#l156"><code>src&#x2F;render&#x2F;GLTextureWrapper.ts:156</code></a>
+        <a href="../files/src_render_GLTextureWrapper.ts.html#l159"><code>src&#x2F;render&#x2F;GLTextureWrapper.ts:159</code></a>
         
         </p>
 
@@ -861,7 +868,7 @@ <h3 class="name"><code>refreshTexture</code></h3>
             
         
         
-        <a href="../files/src_render_GLTextureWrapper.ts.html#l145"><code>src&#x2F;render&#x2F;GLTextureWrapper.ts:145</code></a>
+        <a href="../files/src_render_GLTextureWrapper.ts.html#l148"><code>src&#x2F;render&#x2F;GLTextureWrapper.ts:148</code></a>
         
         </p>
 
@@ -951,7 +958,7 @@ <h3 class="name"><code>uploadTexture</code></h3>
             
         
         
-        <a href="../files/src_render_GLTextureWrapper.ts.html#l111"><code>src&#x2F;render&#x2F;GLTextureWrapper.ts:111</code></a>
+        <a href="../files/src_render_GLTextureWrapper.ts.html#l114"><code>src&#x2F;render&#x2F;GLTextureWrapper.ts:114</code></a>
         
         </p>
 
@@ -1005,6 +1012,53 @@ <h3 class="name"><code>uploadTexture</code></h3>
                 <h2 class="off-left">Properties</h2>
 
                 
+                    <div id="property__image" class="property item private">
+    <h3 class="name"><code>_image</code></h3>
+    <span class="type">HTMLImageElement</span>
+
+    
+
+    
+        <span class="flag private">private</span>
+    
+
+    
+
+    
+
+    <div class="meta">
+        
+            
+                
+                <p>
+                
+                Defined in
+                
+            
+        
+        
+        <a href="../files/src_render_GLTextureWrapper.ts.html#l77"><code>src&#x2F;render&#x2F;GLTextureWrapper.ts:77</code></a>
+        
+        </p>
+
+        
+
+        
+    </div>
+
+    <div class="description">
+        <p>The image wrapped by this wrapper.</p>
+
+    </div>
+
+    
+
+    
+
+    
+</div>
+
+                
                     <div id="property_created" class="property item">
     <h3 class="name"><code>created</code></h3>
     <span class="type">Boolean</span>
@@ -1028,7 +1082,7 @@ <h3 class="name"><code>created</code></h3>
             
         
         
-        <a href="../files/src_render_GLTextureWrapper.ts.html#l51"><code>src&#x2F;render&#x2F;GLTextureWrapper.ts:51</code></a>
+        <a href="../files/src_render_GLTextureWrapper.ts.html#l49"><code>src&#x2F;render&#x2F;GLTextureWrapper.ts:49</code></a>
         
         </p>
 
@@ -1075,7 +1129,7 @@ <h3 class="name"><code>image</code></h3>
             
         
         
-        <a href="../files/src_render_GLTextureWrapper.ts.html#l79"><code>src&#x2F;render&#x2F;GLTextureWrapper.ts:79</code></a>
+        <a href="../files/src_render_GLTextureWrapper.ts.html#l85"><code>src&#x2F;render&#x2F;GLTextureWrapper.ts:85</code></a>
         
         </p>
 
@@ -1120,7 +1174,7 @@ <h3 class="name"><code>numBytes</code></h3>
             
         
         
-        <a href="../files/src_render_GLTextureWrapper.ts.html#l40"><code>src&#x2F;render&#x2F;GLTextureWrapper.ts:40</code></a>
+        <a href="../files/src_render_GLTextureWrapper.ts.html#l38"><code>src&#x2F;render&#x2F;GLTextureWrapper.ts:38</code></a>
         
         </p>
 
@@ -1167,7 +1221,7 @@ <h3 class="name"><code>texture</code></h3>
             
         
         
-        <a href="../files/src_render_GLTextureWrapper.ts.html#l71"><code>src&#x2F;render&#x2F;GLTextureWrapper.ts:71</code></a>
+        <a href="../files/src_render_GLTextureWrapper.ts.html#l69"><code>src&#x2F;render&#x2F;GLTextureWrapper.ts:69</code></a>
         
         </p>
 
@@ -1211,7 +1265,7 @@ <h3 class="name"><code>textureAtlas</code></h3>
             
         
         
-        <a href="../files/src_render_GLTextureWrapper.ts.html#l32"><code>src&#x2F;render&#x2F;GLTextureWrapper.ts:32</code></a>
+        <a href="../files/src_render_GLTextureWrapper.ts.html#l30"><code>src&#x2F;render&#x2F;GLTextureWrapper.ts:30</code></a>
         
         </p>
 
@@ -1256,7 +1310,7 @@ <h3 class="name"><code>uploaded</code></h3>
             
         
         
-        <a href="../files/src_render_GLTextureWrapper.ts.html#l61"><code>src&#x2F;render&#x2F;GLTextureWrapper.ts:61</code></a>
+        <a href="../files/src_render_GLTextureWrapper.ts.html#l59"><code>src&#x2F;render&#x2F;GLTextureWrapper.ts:59</code></a>
         
         </p>
 
diff --git a/docs/classes/Kiwi.Renderers.Renderer.html b/docs/classes/Kiwi.Renderers.Renderer.html
index f00fe7d..7bb1199 100644
--- a/docs/classes/Kiwi.Renderers.Renderer.html
+++ b/docs/classes/Kiwi.Renderers.Renderer.html
@@ -368,7 +368,7 @@ <h2 class="off-left">APIs</h2>
 
     
         <div class="foundat">
-            Defined in: <a href="../files/src_render_renderers_Renderer.ts.html#l14"><code>src&#x2F;render&#x2F;renderers&#x2F;Renderer.ts:14</code></a>
+            Defined in: <a href="../files/src_render_renderers_Renderer.ts.html#l13"><code>src&#x2F;render&#x2F;renderers&#x2F;Renderer.ts:13</code></a>
         </div>
     
 
@@ -450,7 +450,7 @@ <h3 class="name"><code>Kiwi.Renderers.Renderer</code></h3>
             
         
         
-        <a href="../files/src_render_renderers_Renderer.ts.html#l14"><code>src&#x2F;render&#x2F;renderers&#x2F;Renderer.ts:14</code></a>
+        <a href="../files/src_render_renderers_Renderer.ts.html#l13"><code>src&#x2F;render&#x2F;renderers&#x2F;Renderer.ts:13</code></a>
         
         </p>
 
@@ -731,7 +731,7 @@ <h3 class="name"><code>clear</code></h3>
             
         
         
-        <a href="../files/src_render_renderers_Renderer.ts.html#l86"><code>src&#x2F;render&#x2F;renderers&#x2F;Renderer.ts:86</code></a>
+        <a href="../files/src_render_renderers_Renderer.ts.html#l85"><code>src&#x2F;render&#x2F;renderers&#x2F;Renderer.ts:85</code></a>
         
         </p>
 
@@ -843,7 +843,7 @@ <h3 class="name"><code>disable</code></h3>
             
         
         
-        <a href="../files/src_render_renderers_Renderer.ts.html#l75"><code>src&#x2F;render&#x2F;renderers&#x2F;Renderer.ts:75</code></a>
+        <a href="../files/src_render_renderers_Renderer.ts.html#l74"><code>src&#x2F;render&#x2F;renderers&#x2F;Renderer.ts:74</code></a>
         
         </p>
 
@@ -949,7 +949,7 @@ <h3 class="name"><code>draw</code></h3>
             
         
         
-        <a href="../files/src_render_renderers_Renderer.ts.html#l96"><code>src&#x2F;render&#x2F;renderers&#x2F;Renderer.ts:96</code></a>
+        <a href="../files/src_render_renderers_Renderer.ts.html#l95"><code>src&#x2F;render&#x2F;renderers&#x2F;Renderer.ts:95</code></a>
         
         </p>
 
@@ -1045,7 +1045,7 @@ <h3 class="name"><code>enable</code></h3>
             
         
         
-        <a href="../files/src_render_renderers_Renderer.ts.html#l64"><code>src&#x2F;render&#x2F;renderers&#x2F;Renderer.ts:64</code></a>
+        <a href="../files/src_render_renderers_Renderer.ts.html#l63"><code>src&#x2F;render&#x2F;renderers&#x2F;Renderer.ts:63</code></a>
         
         </p>
 
@@ -1157,7 +1157,7 @@ <h3 class="name"><code>updateStageResolution</code></h3>
             
         
         
-        <a href="../files/src_render_renderers_Renderer.ts.html#l105"><code>src&#x2F;render&#x2F;renderers&#x2F;Renderer.ts:105</code></a>
+        <a href="../files/src_render_renderers_Renderer.ts.html#l104"><code>src&#x2F;render&#x2F;renderers&#x2F;Renderer.ts:104</code></a>
         
         </p>
 
@@ -1268,7 +1268,7 @@ <h3 class="name"><code>updateTextureSize</code></h3>
             
         
         
-        <a href="../files/src_render_renderers_Renderer.ts.html#l115"><code>src&#x2F;render&#x2F;renderers&#x2F;Renderer.ts:115</code></a>
+        <a href="../files/src_render_renderers_Renderer.ts.html#l114"><code>src&#x2F;render&#x2F;renderers&#x2F;Renderer.ts:114</code></a>
         
         </p>
 
@@ -1362,7 +1362,7 @@ <h3 class="name"><code>blendMode</code></h3>
             
         
         
-        <a href="../files/src_render_renderers_Renderer.ts.html#l135"><code>src&#x2F;render&#x2F;renderers&#x2F;Renderer.ts:135</code></a>
+        <a href="../files/src_render_renderers_Renderer.ts.html#l134"><code>src&#x2F;render&#x2F;renderers&#x2F;Renderer.ts:134</code></a>
         
         </p>
 
@@ -1411,7 +1411,7 @@ <h3 class="name"><code>camMatrix</code></h3>
             
         
         
-        <a href="../files/src_render_renderers_Renderer.ts.html#l40"><code>src&#x2F;render&#x2F;renderers&#x2F;Renderer.ts:40</code></a>
+        <a href="../files/src_render_renderers_Renderer.ts.html#l39"><code>src&#x2F;render&#x2F;renderers&#x2F;Renderer.ts:39</code></a>
         
         </p>
 
@@ -1458,7 +1458,7 @@ <h3 class="name"><code>isBatchRenderer</code></h3>
             
         
         
-        <a href="../files/src_render_renderers_Renderer.ts.html#l145"><code>src&#x2F;render&#x2F;renderers&#x2F;Renderer.ts:145</code></a>
+        <a href="../files/src_render_renderers_Renderer.ts.html#l144"><code>src&#x2F;render&#x2F;renderers&#x2F;Renderer.ts:144</code></a>
         
         </p>
 
@@ -1505,7 +1505,7 @@ <h3 class="name"><code>loaded</code></h3>
             
         
         
-        <a href="../files/src_render_renderers_Renderer.ts.html#l48"><code>src&#x2F;render&#x2F;renderers&#x2F;Renderer.ts:48</code></a>
+        <a href="../files/src_render_renderers_Renderer.ts.html#l47"><code>src&#x2F;render&#x2F;renderers&#x2F;Renderer.ts:47</code></a>
         
         </p>
 
@@ -1553,7 +1553,7 @@ <h3 class="name"><code>RENDERER_ID</code></h3>
             
         
         
-        <a href="../files/src_render_renderers_Renderer.ts.html#l31"><code>src&#x2F;render&#x2F;renderers&#x2F;Renderer.ts:31</code></a>
+        <a href="../files/src_render_renderers_Renderer.ts.html#l30"><code>src&#x2F;render&#x2F;renderers&#x2F;Renderer.ts:30</code></a>
         
         </p>
 
@@ -1600,7 +1600,7 @@ <h3 class="name"><code>shaderManager</code></h3>
             
         
         
-        <a href="../files/src_render_renderers_Renderer.ts.html#l56"><code>src&#x2F;render&#x2F;renderers&#x2F;Renderer.ts:56</code></a>
+        <a href="../files/src_render_renderers_Renderer.ts.html#l55"><code>src&#x2F;render&#x2F;renderers&#x2F;Renderer.ts:55</code></a>
         
         </p>
 
@@ -1647,7 +1647,7 @@ <h3 class="name"><code>shaderPair</code></h3>
             
         
         
-        <a href="../files/src_render_renderers_Renderer.ts.html#l126"><code>src&#x2F;render&#x2F;renderers&#x2F;Renderer.ts:126</code></a>
+        <a href="../files/src_render_renderers_Renderer.ts.html#l125"><code>src&#x2F;render&#x2F;renderers&#x2F;Renderer.ts:125</code></a>
         
         </p>
 
diff --git a/docs/classes/Kiwi.Renderers.TextureAtlasRenderer.html b/docs/classes/Kiwi.Renderers.TextureAtlasRenderer.html
index 9f7a3ff..d467a83 100644
--- a/docs/classes/Kiwi.Renderers.TextureAtlasRenderer.html
+++ b/docs/classes/Kiwi.Renderers.TextureAtlasRenderer.html
@@ -372,7 +372,7 @@ <h2 class="off-left">APIs</h2>
 
     
         <div class="foundat">
-            Defined in: <a href="../files/src_render_renderers_TextureAtlasRenderer.ts.html#l13"><code>src&#x2F;render&#x2F;renderers&#x2F;TextureAtlasRenderer.ts:13</code></a>
+            Defined in: <a href="../files/src_render_renderers_TextureAtlasRenderer.ts.html#l12"><code>src&#x2F;render&#x2F;renderers&#x2F;TextureAtlasRenderer.ts:12</code></a>
         </div>
     
 
@@ -454,7 +454,7 @@ <h3 class="name"><code>Kiwi.Renderers.TextureAtlasRenderer</code></h3>
             
         
         
-        <a href="../files/src_render_renderers_TextureAtlasRenderer.ts.html#l13"><code>src&#x2F;render&#x2F;renderers&#x2F;TextureAtlasRenderer.ts:13</code></a>
+        <a href="../files/src_render_renderers_TextureAtlasRenderer.ts.html#l12"><code>src&#x2F;render&#x2F;renderers&#x2F;TextureAtlasRenderer.ts:12</code></a>
         
         </p>
 
@@ -785,7 +785,7 @@ <h3 class="name"><code>_generateIndices</code></h3>
             
         
         
-        <a href="../files/src_render_renderers_TextureAtlasRenderer.ts.html#l146"><code>src&#x2F;render&#x2F;renderers&#x2F;TextureAtlasRenderer.ts:146</code></a>
+        <a href="../files/src_render_renderers_TextureAtlasRenderer.ts.html#l144"><code>src&#x2F;render&#x2F;renderers&#x2F;TextureAtlasRenderer.ts:144</code></a>
         
         </p>
 
@@ -887,7 +887,7 @@ <h3 class="name"><code>addToBatch</code></h3>
             
         
         
-        <a href="../files/src_render_renderers_TextureAtlasRenderer.ts.html#l195"><code>src&#x2F;render&#x2F;renderers&#x2F;TextureAtlasRenderer.ts:195</code></a>
+        <a href="../files/src_render_renderers_TextureAtlasRenderer.ts.html#l193"><code>src&#x2F;render&#x2F;renderers&#x2F;TextureAtlasRenderer.ts:193</code></a>
         
         </p>
 
@@ -1007,7 +1007,7 @@ <h3 class="name"><code>clear</code></h3>
             
         
         
-        <a href="../files/src_render_renderers_TextureAtlasRenderer.ts.html#l115"><code>src&#x2F;render&#x2F;renderers&#x2F;TextureAtlasRenderer.ts:115</code></a>
+        <a href="../files/src_render_renderers_TextureAtlasRenderer.ts.html#l114"><code>src&#x2F;render&#x2F;renderers&#x2F;TextureAtlasRenderer.ts:114</code></a>
         
         </p>
 
@@ -1097,7 +1097,7 @@ <h3 class="name"><code>concatBatch</code></h3>
             
         
         
-        <a href="../files/src_render_renderers_TextureAtlasRenderer.ts.html#l230"><code>src&#x2F;render&#x2F;renderers&#x2F;TextureAtlasRenderer.ts:230</code></a>
+        <a href="../files/src_render_renderers_TextureAtlasRenderer.ts.html#l228"><code>src&#x2F;render&#x2F;renderers&#x2F;TextureAtlasRenderer.ts:228</code></a>
         
         </p>
 
@@ -1187,7 +1187,7 @@ <h3 class="name"><code>disable</code></h3>
             
         
         
-        <a href="../files/src_render_renderers_TextureAtlasRenderer.ts.html#l104"><code>src&#x2F;render&#x2F;renderers&#x2F;TextureAtlasRenderer.ts:104</code></a>
+        <a href="../files/src_render_renderers_TextureAtlasRenderer.ts.html#l103"><code>src&#x2F;render&#x2F;renderers&#x2F;TextureAtlasRenderer.ts:103</code></a>
         
         </p>
 
@@ -1277,7 +1277,7 @@ <h3 class="name"><code>draw</code></h3>
             
         
         
-        <a href="../files/src_render_renderers_TextureAtlasRenderer.ts.html#l126"><code>src&#x2F;render&#x2F;renderers&#x2F;TextureAtlasRenderer.ts:126</code></a>
+        <a href="../files/src_render_renderers_TextureAtlasRenderer.ts.html#l125"><code>src&#x2F;render&#x2F;renderers&#x2F;TextureAtlasRenderer.ts:125</code></a>
         
         </p>
 
@@ -1373,7 +1373,7 @@ <h3 class="name"><code>enable</code></h3>
             
         
         
-        <a href="../files/src_render_renderers_TextureAtlasRenderer.ts.html#l84"><code>src&#x2F;render&#x2F;renderers&#x2F;TextureAtlasRenderer.ts:84</code></a>
+        <a href="../files/src_render_renderers_TextureAtlasRenderer.ts.html#l83"><code>src&#x2F;render&#x2F;renderers&#x2F;TextureAtlasRenderer.ts:83</code></a>
         
         </p>
 
@@ -1479,7 +1479,7 @@ <h3 class="name"><code>setShaderPair</code></h3>
             
         
         
-        <a href="../files/src_render_renderers_TextureAtlasRenderer.ts.html#l183"><code>src&#x2F;render&#x2F;renderers&#x2F;TextureAtlasRenderer.ts:183</code></a>
+        <a href="../files/src_render_renderers_TextureAtlasRenderer.ts.html#l181"><code>src&#x2F;render&#x2F;renderers&#x2F;TextureAtlasRenderer.ts:181</code></a>
         
         </p>
 
@@ -1577,7 +1577,7 @@ <h3 class="name"><code>updateStageResolution</code></h3>
             
         
         
-        <a href="../files/src_render_renderers_TextureAtlasRenderer.ts.html#l161"><code>src&#x2F;render&#x2F;renderers&#x2F;TextureAtlasRenderer.ts:161</code></a>
+        <a href="../files/src_render_renderers_TextureAtlasRenderer.ts.html#l159"><code>src&#x2F;render&#x2F;renderers&#x2F;TextureAtlasRenderer.ts:159</code></a>
         
         </p>
 
@@ -1688,7 +1688,7 @@ <h3 class="name"><code>updateTextureSize</code></h3>
             
         
         
-        <a href="../files/src_render_renderers_TextureAtlasRenderer.ts.html#l172"><code>src&#x2F;render&#x2F;renderers&#x2F;TextureAtlasRenderer.ts:172</code></a>
+        <a href="../files/src_render_renderers_TextureAtlasRenderer.ts.html#l170"><code>src&#x2F;render&#x2F;renderers&#x2F;TextureAtlasRenderer.ts:170</code></a>
         
         </p>
 
@@ -1782,7 +1782,7 @@ <h3 class="name"><code>_indexBuffer</code></h3>
             
         
         
-        <a href="../files/src_render_renderers_TextureAtlasRenderer.ts.html#l76"><code>src&#x2F;render&#x2F;renderers&#x2F;TextureAtlasRenderer.ts:76</code></a>
+        <a href="../files/src_render_renderers_TextureAtlasRenderer.ts.html#l75"><code>src&#x2F;render&#x2F;renderers&#x2F;TextureAtlasRenderer.ts:75</code></a>
         
         </p>
 
@@ -1829,7 +1829,7 @@ <h3 class="name"><code>_maxItems</code></h3>
             
         
         
-        <a href="../files/src_render_renderers_TextureAtlasRenderer.ts.html#l60"><code>src&#x2F;render&#x2F;renderers&#x2F;TextureAtlasRenderer.ts:60</code></a>
+        <a href="../files/src_render_renderers_TextureAtlasRenderer.ts.html#l59"><code>src&#x2F;render&#x2F;renderers&#x2F;TextureAtlasRenderer.ts:59</code></a>
         
         </p>
 
@@ -1876,7 +1876,7 @@ <h3 class="name"><code>_shaderPairName</code></h3>
             
         
         
-        <a href="../files/src_render_renderers_TextureAtlasRenderer.ts.html#l51"><code>src&#x2F;render&#x2F;renderers&#x2F;TextureAtlasRenderer.ts:51</code></a>
+        <a href="../files/src_render_renderers_TextureAtlasRenderer.ts.html#l50"><code>src&#x2F;render&#x2F;renderers&#x2F;TextureAtlasRenderer.ts:50</code></a>
         
         </p>
 
@@ -1925,7 +1925,7 @@ <h3 class="name"><code>_vertexBuffer</code></h3>
             
         
         
-        <a href="../files/src_render_renderers_TextureAtlasRenderer.ts.html#l68"><code>src&#x2F;render&#x2F;renderers&#x2F;TextureAtlasRenderer.ts:68</code></a>
+        <a href="../files/src_render_renderers_TextureAtlasRenderer.ts.html#l67"><code>src&#x2F;render&#x2F;renderers&#x2F;TextureAtlasRenderer.ts:67</code></a>
         
         </p>
 
@@ -1969,7 +1969,7 @@ <h3 class="name"><code>blendMode</code></h3>
             
         
         
-        <a href="../files/src_render_renderers_Renderer.ts.html#l135"><code>src&#x2F;render&#x2F;renderers&#x2F;Renderer.ts:135</code></a>
+        <a href="../files/src_render_renderers_Renderer.ts.html#l134"><code>src&#x2F;render&#x2F;renderers&#x2F;Renderer.ts:134</code></a>
         
         </p>
 
@@ -2015,7 +2015,7 @@ <h3 class="name"><code>camMatrix</code></h3>
             
         
         
-        <a href="../files/src_render_renderers_Renderer.ts.html#l40"><code>src&#x2F;render&#x2F;renderers&#x2F;Renderer.ts:40</code></a>
+        <a href="../files/src_render_renderers_Renderer.ts.html#l39"><code>src&#x2F;render&#x2F;renderers&#x2F;Renderer.ts:39</code></a>
         
         </p>
 
@@ -2059,7 +2059,7 @@ <h3 class="name"><code>isBatchRenderer</code></h3>
             
         
         
-        <a href="../files/src_render_renderers_Renderer.ts.html#l145"><code>src&#x2F;render&#x2F;renderers&#x2F;Renderer.ts:145</code></a>
+        <a href="../files/src_render_renderers_Renderer.ts.html#l144"><code>src&#x2F;render&#x2F;renderers&#x2F;Renderer.ts:144</code></a>
         
         </p>
 
@@ -2103,7 +2103,7 @@ <h3 class="name"><code>loaded</code></h3>
             
         
         
-        <a href="../files/src_render_renderers_Renderer.ts.html#l48"><code>src&#x2F;render&#x2F;renderers&#x2F;Renderer.ts:48</code></a>
+        <a href="../files/src_render_renderers_Renderer.ts.html#l47"><code>src&#x2F;render&#x2F;renderers&#x2F;Renderer.ts:47</code></a>
         
         </p>
 
@@ -2151,7 +2151,7 @@ <h3 class="name"><code>RENDERER_ID</code></h3>
             
         
         
-        <a href="../files/src_render_renderers_TextureAtlasRenderer.ts.html#l34"><code>src&#x2F;render&#x2F;renderers&#x2F;TextureAtlasRenderer.ts:34</code></a>
+        <a href="../files/src_render_renderers_TextureAtlasRenderer.ts.html#l33"><code>src&#x2F;render&#x2F;renderers&#x2F;TextureAtlasRenderer.ts:33</code></a>
         
         </p>
 
@@ -2195,7 +2195,7 @@ <h3 class="name"><code>shaderManager</code></h3>
             
         
         
-        <a href="../files/src_render_renderers_Renderer.ts.html#l56"><code>src&#x2F;render&#x2F;renderers&#x2F;Renderer.ts:56</code></a>
+        <a href="../files/src_render_renderers_Renderer.ts.html#l55"><code>src&#x2F;render&#x2F;renderers&#x2F;Renderer.ts:55</code></a>
         
         </p>
 
@@ -2242,7 +2242,7 @@ <h3 class="name"><code>shaderPair</code></h3>
             
         
         
-        <a href="../files/src_render_renderers_TextureAtlasRenderer.ts.html#l43"><code>src&#x2F;render&#x2F;renderers&#x2F;TextureAtlasRenderer.ts:43</code></a>
+        <a href="../files/src_render_renderers_TextureAtlasRenderer.ts.html#l42"><code>src&#x2F;render&#x2F;renderers&#x2F;TextureAtlasRenderer.ts:42</code></a>
         
         </p>
 
diff --git a/docs/classes/Kiwi.Shaders.ShaderManager.html b/docs/classes/Kiwi.Shaders.ShaderManager.html
index e2a18f9..b6de66a 100644
--- a/docs/classes/Kiwi.Shaders.ShaderManager.html
+++ b/docs/classes/Kiwi.Shaders.ShaderManager.html
@@ -372,7 +372,7 @@ <h2 class="off-left">APIs</h2>
 
     
         <div class="foundat">
-            Defined in: <a href="../files/src_render_GLShaderManager.ts.html#l25"><code>src&#x2F;render&#x2F;GLShaderManager.ts:25</code></a>
+            Defined in: <a href="../files/src_render_GLShaderManager.ts.html#l24"><code>src&#x2F;render&#x2F;GLShaderManager.ts:24</code></a>
         </div>
     
 
@@ -435,7 +435,7 @@ <h3 class="name"><code>Kiwi.Shaders.ShaderManager</code></h3>
             
         
         
-        <a href="../files/src_render_GLShaderManager.ts.html#l25"><code>src&#x2F;render&#x2F;GLShaderManager.ts:25</code></a>
+        <a href="../files/src_render_GLShaderManager.ts.html#l24"><code>src&#x2F;render&#x2F;GLShaderManager.ts:24</code></a>
         
         </p>
 
@@ -629,7 +629,7 @@ <h3 class="name"><code>_addShader</code></h3>
             
         
         
-        <a href="../files/src_render_GLShaderManager.ts.html#l130"><code>src&#x2F;render&#x2F;GLShaderManager.ts:130</code></a>
+        <a href="../files/src_render_GLShaderManager.ts.html#l127"><code>src&#x2F;render&#x2F;GLShaderManager.ts:127</code></a>
         
         </p>
 
@@ -752,7 +752,7 @@ <h3 class="name"><code>_loadShader</code></h3>
             
         
         
-        <a href="../files/src_render_GLShaderManager.ts.html#l143"><code>src&#x2F;render&#x2F;GLShaderManager.ts:143</code></a>
+        <a href="../files/src_render_GLShaderManager.ts.html#l140"><code>src&#x2F;render&#x2F;GLShaderManager.ts:140</code></a>
         
         </p>
 
@@ -863,7 +863,7 @@ <h3 class="name"><code>_useShader</code></h3>
             
         
         
-        <a href="../files/src_render_GLShaderManager.ts.html#l154"><code>src&#x2F;render&#x2F;GLShaderManager.ts:154</code></a>
+        <a href="../files/src_render_GLShaderManager.ts.html#l151"><code>src&#x2F;render&#x2F;GLShaderManager.ts:151</code></a>
         
         </p>
 
@@ -974,7 +974,7 @@ <h3 class="name"><code>init</code></h3>
             
         
         
-        <a href="../files/src_render_GLShaderManager.ts.html#l64"><code>src&#x2F;render&#x2F;GLShaderManager.ts:64</code></a>
+        <a href="../files/src_render_GLShaderManager.ts.html#l61"><code>src&#x2F;render&#x2F;GLShaderManager.ts:61</code></a>
         
         </p>
 
@@ -1095,7 +1095,7 @@ <h3 class="name"><code>requestShader</code></h3>
             
         
         
-        <a href="../files/src_render_GLShaderManager.ts.html#l76"><code>src&#x2F;render&#x2F;GLShaderManager.ts:76</code></a>
+        <a href="../files/src_render_GLShaderManager.ts.html#l73"><code>src&#x2F;render&#x2F;GLShaderManager.ts:73</code></a>
         
         </p>
 
@@ -1242,7 +1242,7 @@ <h3 class="name"><code>shaderExists</code></h3>
             
         
         
-        <a href="../files/src_render_GLShaderManager.ts.html#l118"><code>src&#x2F;render&#x2F;GLShaderManager.ts:118</code></a>
+        <a href="../files/src_render_GLShaderManager.ts.html#l115"><code>src&#x2F;render&#x2F;GLShaderManager.ts:115</code></a>
         
         </p>
 
@@ -1350,7 +1350,7 @@ <h3 class="name"><code>_shaderPairs</code></h3>
             
         
         
-        <a href="../files/src_render_GLShaderManager.ts.html#l43"><code>src&#x2F;render&#x2F;GLShaderManager.ts:43</code></a>
+        <a href="../files/src_render_GLShaderManager.ts.html#l40"><code>src&#x2F;render&#x2F;GLShaderManager.ts:40</code></a>
         
         </p>
 
@@ -1397,7 +1397,7 @@ <h3 class="name"><code>currentShader</code></h3>
             
         
         
-        <a href="../files/src_render_GLShaderManager.ts.html#l51"><code>src&#x2F;render&#x2F;GLShaderManager.ts:51</code></a>
+        <a href="../files/src_render_GLShaderManager.ts.html#l48"><code>src&#x2F;render&#x2F;GLShaderManager.ts:48</code></a>
         
         </p>
 
diff --git a/docs/classes/Kiwi.Shaders.ShaderPair.html b/docs/classes/Kiwi.Shaders.ShaderPair.html
index 377c7c8..feff16a 100644
--- a/docs/classes/Kiwi.Shaders.ShaderPair.html
+++ b/docs/classes/Kiwi.Shaders.ShaderPair.html
@@ -676,7 +676,7 @@ <h3 class="name"><code>applyUniform</code></h3>
             
         
         
-        <a href="../files/src_render_shaders_ShaderPair.ts.html#l173"><code>src&#x2F;render&#x2F;shaders&#x2F;ShaderPair.ts:173</code></a>
+        <a href="../files/src_render_shaders_ShaderPair.ts.html#l170"><code>src&#x2F;render&#x2F;shaders&#x2F;ShaderPair.ts:170</code></a>
         
         </p>
 
@@ -781,7 +781,7 @@ <h3 class="name"><code>applyUniforms</code></h3>
             
         
         
-        <a href="../files/src_render_shaders_ShaderPair.ts.html#l161"><code>src&#x2F;render&#x2F;shaders&#x2F;ShaderPair.ts:161</code></a>
+        <a href="../files/src_render_shaders_ShaderPair.ts.html#l158"><code>src&#x2F;render&#x2F;shaders&#x2F;ShaderPair.ts:158</code></a>
         
         </p>
 
@@ -887,7 +887,7 @@ <h3 class="name"><code>attach</code></h3>
             
         
         
-        <a href="../files/src_render_shaders_ShaderPair.ts.html#l79"><code>src&#x2F;render&#x2F;shaders&#x2F;ShaderPair.ts:79</code></a>
+        <a href="../files/src_render_shaders_ShaderPair.ts.html#l76"><code>src&#x2F;render&#x2F;shaders&#x2F;ShaderPair.ts:76</code></a>
         
         </p>
 
@@ -1035,7 +1035,7 @@ <h3 class="name"><code>compile</code></h3>
             
         
         
-        <a href="../files/src_render_shaders_ShaderPair.ts.html#l96"><code>src&#x2F;render&#x2F;shaders&#x2F;ShaderPair.ts:96</code></a>
+        <a href="../files/src_render_shaders_ShaderPair.ts.html#l93"><code>src&#x2F;render&#x2F;shaders&#x2F;ShaderPair.ts:93</code></a>
         
         </p>
 
@@ -1167,7 +1167,7 @@ <h3 class="name"><code>init</code></h3>
             
         
         
-        <a href="../files/src_render_shaders_ShaderPair.ts.html#l33"><code>src&#x2F;render&#x2F;shaders&#x2F;ShaderPair.ts:33</code></a>
+        <a href="../files/src_render_shaders_ShaderPair.ts.html#l31"><code>src&#x2F;render&#x2F;shaders&#x2F;ShaderPair.ts:31</code></a>
         
         </p>
 
@@ -1257,7 +1257,7 @@ <h3 class="name"><code>initUniforms</code></h3>
             
         
         
-        <a href="../files/src_render_shaders_ShaderPair.ts.html#l188"><code>src&#x2F;render&#x2F;shaders&#x2F;ShaderPair.ts:188</code></a>
+        <a href="../files/src_render_shaders_ShaderPair.ts.html#l185"><code>src&#x2F;render&#x2F;shaders&#x2F;ShaderPair.ts:185</code></a>
         
         </p>
 
@@ -1353,7 +1353,7 @@ <h3 class="name"><code>setParam</code></h3>
             
         
         
-        <a href="../files/src_render_shaders_ShaderPair.ts.html#l149"><code>src&#x2F;render&#x2F;shaders&#x2F;ShaderPair.ts:149</code></a>
+        <a href="../files/src_render_shaders_ShaderPair.ts.html#l146"><code>src&#x2F;render&#x2F;shaders&#x2F;ShaderPair.ts:146</code></a>
         
         </p>
 
@@ -1447,7 +1447,7 @@ <h3 class="name"><code>attributes</code></h3>
             
         
         
-        <a href="../files/src_render_shaders_ShaderPair.ts.html#l124"><code>src&#x2F;render&#x2F;shaders&#x2F;ShaderPair.ts:124</code></a>
+        <a href="../files/src_render_shaders_ShaderPair.ts.html#l121"><code>src&#x2F;render&#x2F;shaders&#x2F;ShaderPair.ts:121</code></a>
         
         </p>
 
@@ -1494,7 +1494,7 @@ <h3 class="name"><code>fragShader</code></h3>
             
         
         
-        <a href="../files/src_render_shaders_ShaderPair.ts.html#l63"><code>src&#x2F;render&#x2F;shaders&#x2F;ShaderPair.ts:63</code></a>
+        <a href="../files/src_render_shaders_ShaderPair.ts.html#l60"><code>src&#x2F;render&#x2F;shaders&#x2F;ShaderPair.ts:60</code></a>
         
         </p>
 
@@ -1541,7 +1541,7 @@ <h3 class="name"><code>loaded</code></h3>
             
         
         
-        <a href="../files/src_render_shaders_ShaderPair.ts.html#l47"><code>src&#x2F;render&#x2F;shaders&#x2F;ShaderPair.ts:47</code></a>
+        <a href="../files/src_render_shaders_ShaderPair.ts.html#l44"><code>src&#x2F;render&#x2F;shaders&#x2F;ShaderPair.ts:44</code></a>
         
         </p>
 
@@ -1590,7 +1590,7 @@ <h3 class="name"><code>RENDERER_ID</code></h3>
             
         
         
-        <a href="../files/src_render_shaders_ShaderPair.ts.html#l24"><code>src&#x2F;render&#x2F;shaders&#x2F;ShaderPair.ts:24</code></a>
+        <a href="../files/src_render_shaders_ShaderPair.ts.html#l22"><code>src&#x2F;render&#x2F;shaders&#x2F;ShaderPair.ts:22</code></a>
         
         </p>
 
@@ -1636,7 +1636,7 @@ <h3 class="name"><code>shaderProgram</code></h3>
             
         
         
-        <a href="../files/src_render_shaders_ShaderPair.ts.html#l71"><code>src&#x2F;render&#x2F;shaders&#x2F;ShaderPair.ts:71</code></a>
+        <a href="../files/src_render_shaders_ShaderPair.ts.html#l68"><code>src&#x2F;render&#x2F;shaders&#x2F;ShaderPair.ts:68</code></a>
         
         </p>
 
@@ -1683,7 +1683,7 @@ <h3 class="name"><code>texture2DFrag</code></h3>
             
         
         
-        <a href="../files/src_render_shaders_ShaderPair.ts.html#l133"><code>src&#x2F;render&#x2F;shaders&#x2F;ShaderPair.ts:133</code></a>
+        <a href="../files/src_render_shaders_ShaderPair.ts.html#l130"><code>src&#x2F;render&#x2F;shaders&#x2F;ShaderPair.ts:130</code></a>
         
         </p>
 
@@ -1730,7 +1730,7 @@ <h3 class="name"><code>texture2DVert</code></h3>
             
         
         
-        <a href="../files/src_render_shaders_ShaderPair.ts.html#l141"><code>src&#x2F;render&#x2F;shaders&#x2F;ShaderPair.ts:141</code></a>
+        <a href="../files/src_render_shaders_ShaderPair.ts.html#l138"><code>src&#x2F;render&#x2F;shaders&#x2F;ShaderPair.ts:138</code></a>
         
         </p>
 
@@ -1777,7 +1777,7 @@ <h3 class="name"><code>uniforms</code></h3>
             
         
         
-        <a href="../files/src_render_shaders_ShaderPair.ts.html#l116"><code>src&#x2F;render&#x2F;shaders&#x2F;ShaderPair.ts:116</code></a>
+        <a href="../files/src_render_shaders_ShaderPair.ts.html#l113"><code>src&#x2F;render&#x2F;shaders&#x2F;ShaderPair.ts:113</code></a>
         
         </p>
 
@@ -1824,7 +1824,7 @@ <h3 class="name"><code>vertShader</code></h3>
             
         
         
-        <a href="../files/src_render_shaders_ShaderPair.ts.html#l55"><code>src&#x2F;render&#x2F;shaders&#x2F;ShaderPair.ts:55</code></a>
+        <a href="../files/src_render_shaders_ShaderPair.ts.html#l52"><code>src&#x2F;render&#x2F;shaders&#x2F;ShaderPair.ts:52</code></a>
         
         </p>
 
diff --git a/docs/classes/Kiwi.Shaders.TextureAtlasShader.html b/docs/classes/Kiwi.Shaders.TextureAtlasShader.html
index 2b57901..54e57df 100644
--- a/docs/classes/Kiwi.Shaders.TextureAtlasShader.html
+++ b/docs/classes/Kiwi.Shaders.TextureAtlasShader.html
@@ -682,7 +682,7 @@ <h3 class="name"><code>applyUniform</code></h3>
             
         
         
-        <a href="../files/src_render_shaders_ShaderPair.ts.html#l173"><code>src&#x2F;render&#x2F;shaders&#x2F;ShaderPair.ts:173</code></a>
+        <a href="../files/src_render_shaders_ShaderPair.ts.html#l170"><code>src&#x2F;render&#x2F;shaders&#x2F;ShaderPair.ts:170</code></a>
         
         </p>
 
@@ -784,7 +784,7 @@ <h3 class="name"><code>applyUniforms</code></h3>
             
         
         
-        <a href="../files/src_render_shaders_ShaderPair.ts.html#l161"><code>src&#x2F;render&#x2F;shaders&#x2F;ShaderPair.ts:161</code></a>
+        <a href="../files/src_render_shaders_ShaderPair.ts.html#l158"><code>src&#x2F;render&#x2F;shaders&#x2F;ShaderPair.ts:158</code></a>
         
         </p>
 
@@ -887,7 +887,7 @@ <h3 class="name"><code>attach</code></h3>
             
         
         
-        <a href="../files/src_render_shaders_ShaderPair.ts.html#l79"><code>src&#x2F;render&#x2F;shaders&#x2F;ShaderPair.ts:79</code></a>
+        <a href="../files/src_render_shaders_ShaderPair.ts.html#l76"><code>src&#x2F;render&#x2F;shaders&#x2F;ShaderPair.ts:76</code></a>
         
         </p>
 
@@ -1032,7 +1032,7 @@ <h3 class="name"><code>compile</code></h3>
             
         
         
-        <a href="../files/src_render_shaders_ShaderPair.ts.html#l96"><code>src&#x2F;render&#x2F;shaders&#x2F;ShaderPair.ts:96</code></a>
+        <a href="../files/src_render_shaders_ShaderPair.ts.html#l93"><code>src&#x2F;render&#x2F;shaders&#x2F;ShaderPair.ts:93</code></a>
         
         </p>
 
@@ -1267,7 +1267,7 @@ <h3 class="name"><code>initUniforms</code></h3>
             
         
         
-        <a href="../files/src_render_shaders_ShaderPair.ts.html#l188"><code>src&#x2F;render&#x2F;shaders&#x2F;ShaderPair.ts:188</code></a>
+        <a href="../files/src_render_shaders_ShaderPair.ts.html#l185"><code>src&#x2F;render&#x2F;shaders&#x2F;ShaderPair.ts:185</code></a>
         
         </p>
 
@@ -1360,7 +1360,7 @@ <h3 class="name"><code>setParam</code></h3>
             
         
         
-        <a href="../files/src_render_shaders_ShaderPair.ts.html#l149"><code>src&#x2F;render&#x2F;shaders&#x2F;ShaderPair.ts:149</code></a>
+        <a href="../files/src_render_shaders_ShaderPair.ts.html#l146"><code>src&#x2F;render&#x2F;shaders&#x2F;ShaderPair.ts:146</code></a>
         
         </p>
 
@@ -1498,7 +1498,7 @@ <h3 class="name"><code>fragShader</code></h3>
             
         
         
-        <a href="../files/src_render_shaders_ShaderPair.ts.html#l63"><code>src&#x2F;render&#x2F;shaders&#x2F;ShaderPair.ts:63</code></a>
+        <a href="../files/src_render_shaders_ShaderPair.ts.html#l60"><code>src&#x2F;render&#x2F;shaders&#x2F;ShaderPair.ts:60</code></a>
         
         </p>
 
@@ -1589,7 +1589,7 @@ <h3 class="name"><code>loaded</code></h3>
             
         
         
-        <a href="../files/src_render_shaders_ShaderPair.ts.html#l47"><code>src&#x2F;render&#x2F;shaders&#x2F;ShaderPair.ts:47</code></a>
+        <a href="../files/src_render_shaders_ShaderPair.ts.html#l44"><code>src&#x2F;render&#x2F;shaders&#x2F;ShaderPair.ts:44</code></a>
         
         </p>
 
@@ -1633,7 +1633,7 @@ <h3 class="name"><code>shaderProgram</code></h3>
             
         
         
-        <a href="../files/src_render_shaders_ShaderPair.ts.html#l71"><code>src&#x2F;render&#x2F;shaders&#x2F;ShaderPair.ts:71</code></a>
+        <a href="../files/src_render_shaders_ShaderPair.ts.html#l68"><code>src&#x2F;render&#x2F;shaders&#x2F;ShaderPair.ts:68</code></a>
         
         </p>
 
@@ -1677,7 +1677,7 @@ <h3 class="name"><code>texture2DFrag</code></h3>
             
         
         
-        <a href="../files/src_render_shaders_ShaderPair.ts.html#l133"><code>src&#x2F;render&#x2F;shaders&#x2F;ShaderPair.ts:133</code></a>
+        <a href="../files/src_render_shaders_ShaderPair.ts.html#l130"><code>src&#x2F;render&#x2F;shaders&#x2F;ShaderPair.ts:130</code></a>
         
         </p>
 
@@ -1721,7 +1721,7 @@ <h3 class="name"><code>texture2DVert</code></h3>
             
         
         
-        <a href="../files/src_render_shaders_ShaderPair.ts.html#l141"><code>src&#x2F;render&#x2F;shaders&#x2F;ShaderPair.ts:141</code></a>
+        <a href="../files/src_render_shaders_ShaderPair.ts.html#l138"><code>src&#x2F;render&#x2F;shaders&#x2F;ShaderPair.ts:138</code></a>
         
         </p>
 
@@ -1812,7 +1812,7 @@ <h3 class="name"><code>vertShader</code></h3>
             
         
         
-        <a href="../files/src_render_shaders_ShaderPair.ts.html#l55"><code>src&#x2F;render&#x2F;shaders&#x2F;ShaderPair.ts:55</code></a>
+        <a href="../files/src_render_shaders_ShaderPair.ts.html#l52"><code>src&#x2F;render&#x2F;shaders&#x2F;ShaderPair.ts:52</code></a>
         
         </p>
 
diff --git a/docs/classes/Kiwi.Sound.Audio.html b/docs/classes/Kiwi.Sound.Audio.html
index c683123..bc5daea 100644
--- a/docs/classes/Kiwi.Sound.Audio.html
+++ b/docs/classes/Kiwi.Sound.Audio.html
@@ -1135,7 +1135,7 @@ <h3 class="name"><code>addMarker</code></h3>
             
         
         
-        <a href="../files/src_sound_Audio.ts.html#l553"><code>src&#x2F;sound&#x2F;Audio.ts:553</code></a>
+        <a href="../files/src_sound_Audio.ts.html#l552"><code>src&#x2F;sound&#x2F;Audio.ts:552</code></a>
         
         </p>
 
@@ -1265,7 +1265,7 @@ <h3 class="name"><code>destroy</code></h3>
             
         
         
-        <a href="../files/src_sound_Audio.ts.html#l814"><code>src&#x2F;sound&#x2F;Audio.ts:814</code></a>
+        <a href="../files/src_sound_Audio.ts.html#l813"><code>src&#x2F;sound&#x2F;Audio.ts:813</code></a>
         
         </p>
 
@@ -1398,7 +1398,7 @@ <h3 class="name"><code>pause</code></h3>
             
         
         
-        <a href="../files/src_sound_Audio.ts.html#l697"><code>src&#x2F;sound&#x2F;Audio.ts:697</code></a>
+        <a href="../files/src_sound_Audio.ts.html#l696"><code>src&#x2F;sound&#x2F;Audio.ts:696</code></a>
         
         </p>
 
@@ -1471,7 +1471,7 @@ <h3 class="name"><code>play</code></h3>
             
         
         
-        <a href="../files/src_sound_Audio.ts.html#l585"><code>src&#x2F;sound&#x2F;Audio.ts:585</code></a>
+        <a href="../files/src_sound_Audio.ts.html#l584"><code>src&#x2F;sound&#x2F;Audio.ts:584</code></a>
         
         </p>
 
@@ -1580,7 +1580,7 @@ <h3 class="name"><code>removeMarker</code></h3>
             
         
         
-        <a href="../files/src_sound_Audio.ts.html#l567"><code>src&#x2F;sound&#x2F;Audio.ts:567</code></a>
+        <a href="../files/src_sound_Audio.ts.html#l566"><code>src&#x2F;sound&#x2F;Audio.ts:566</code></a>
         
         </p>
 
@@ -1661,7 +1661,7 @@ <h3 class="name"><code>resume</code></h3>
             
         
         
-        <a href="../files/src_sound_Audio.ts.html#l710"><code>src&#x2F;sound&#x2F;Audio.ts:710</code></a>
+        <a href="../files/src_sound_Audio.ts.html#l709"><code>src&#x2F;sound&#x2F;Audio.ts:709</code></a>
         
         </p>
 
@@ -1718,7 +1718,7 @@ <h3 class="name"><code>stop</code></h3>
             
         
         
-        <a href="../files/src_sound_Audio.ts.html#l669"><code>src&#x2F;sound&#x2F;Audio.ts:669</code></a>
+        <a href="../files/src_sound_Audio.ts.html#l668"><code>src&#x2F;sound&#x2F;Audio.ts:668</code></a>
         
         </p>
 
@@ -1775,7 +1775,7 @@ <h3 class="name"><code>update</code></h3>
             
         
         
-        <a href="../files/src_sound_Audio.ts.html#l747"><code>src&#x2F;sound&#x2F;Audio.ts:747</code></a>
+        <a href="../files/src_sound_Audio.ts.html#l746"><code>src&#x2F;sound&#x2F;Audio.ts:746</code></a>
         
         </p>
 
@@ -3067,7 +3067,7 @@ <h3 class="name"><code>mute</code></h3>
             
         
         
-        <a href="../files/src_sound_Audio.ts.html#l523"><code>src&#x2F;sound&#x2F;Audio.ts:523</code></a>
+        <a href="../files/src_sound_Audio.ts.html#l522"><code>src&#x2F;sound&#x2F;Audio.ts:522</code></a>
         
         </p>
 
diff --git a/docs/classes/Kiwi.Sound.AudioManager.html b/docs/classes/Kiwi.Sound.AudioManager.html
index 4629157..be8d321 100644
--- a/docs/classes/Kiwi.Sound.AudioManager.html
+++ b/docs/classes/Kiwi.Sound.AudioManager.html
@@ -653,6 +653,13 @@ <h2 class="off-left">Item Index</h2>
                             </li>
                         
                             <li class="index-item property private">
+                                <a href="#property__unlockedSource">_unlockedSource</a>
+
+                                
+                                
+                            </li>
+                        
+                            <li class="index-item property private">
                                 <a href="#property__volume">_volume</a>
 
                                 
@@ -770,7 +777,7 @@ <h3 class="name"><code>_unlocked</code></h3>
             
         
         
-        <a href="../files/src_sound_AudioManager.ts.html#l211"><code>src&#x2F;sound&#x2F;AudioManager.ts:211</code></a>
+        <a href="../files/src_sound_AudioManager.ts.html#l218"><code>src&#x2F;sound&#x2F;AudioManager.ts:218</code></a>
         
         </p>
 
@@ -853,7 +860,7 @@ <h3 class="name"><code>add</code></h3>
             
         
         
-        <a href="../files/src_sound_AudioManager.ts.html#l352"><code>src&#x2F;sound&#x2F;AudioManager.ts:352</code></a>
+        <a href="../files/src_sound_AudioManager.ts.html#l358"><code>src&#x2F;sound&#x2F;AudioManager.ts:358</code></a>
         
         </p>
 
@@ -980,7 +987,7 @@ <h3 class="name"><code>boot</code></h3>
             
         
         
-        <a href="../files/src_sound_AudioManager.ts.html#l152"><code>src&#x2F;sound&#x2F;AudioManager.ts:152</code></a>
+        <a href="../files/src_sound_AudioManager.ts.html#l159"><code>src&#x2F;sound&#x2F;AudioManager.ts:159</code></a>
         
         </p>
 
@@ -1051,7 +1058,7 @@ <h3 class="name"><code>isRegistered</code></h3>
             
         
         
-        <a href="../files/src_sound_AudioManager.ts.html#l319"><code>src&#x2F;sound&#x2F;AudioManager.ts:319</code></a>
+        <a href="../files/src_sound_AudioManager.ts.html#l325"><code>src&#x2F;sound&#x2F;AudioManager.ts:325</code></a>
         
         </p>
 
@@ -1221,7 +1228,7 @@ <h3 class="name"><code>pauseAll</code></h3>
             
         
         
-        <a href="../files/src_sound_AudioManager.ts.html#l432"><code>src&#x2F;sound&#x2F;AudioManager.ts:432</code></a>
+        <a href="../files/src_sound_AudioManager.ts.html#l438"><code>src&#x2F;sound&#x2F;AudioManager.ts:438</code></a>
         
         </p>
 
@@ -1278,7 +1285,7 @@ <h3 class="name"><code>playAll</code></h3>
             
         
         
-        <a href="../files/src_sound_AudioManager.ts.html#l400"><code>src&#x2F;sound&#x2F;AudioManager.ts:400</code></a>
+        <a href="../files/src_sound_AudioManager.ts.html#l406"><code>src&#x2F;sound&#x2F;AudioManager.ts:406</code></a>
         
         </p>
 
@@ -1349,7 +1356,7 @@ <h3 class="name"><code>registerSound</code></h3>
             
         
         
-        <a href="../files/src_sound_AudioManager.ts.html#l336"><code>src&#x2F;sound&#x2F;AudioManager.ts:336</code></a>
+        <a href="../files/src_sound_AudioManager.ts.html#l342"><code>src&#x2F;sound&#x2F;AudioManager.ts:342</code></a>
         
         </p>
 
@@ -1460,7 +1467,7 @@ <h3 class="name"><code>remove</code></h3>
             
         
         
-        <a href="../files/src_sound_AudioManager.ts.html#l371"><code>src&#x2F;sound&#x2F;AudioManager.ts:371</code></a>
+        <a href="../files/src_sound_AudioManager.ts.html#l377"><code>src&#x2F;sound&#x2F;AudioManager.ts:377</code></a>
         
         </p>
 
@@ -1559,7 +1566,7 @@ <h3 class="name"><code>resumeAll</code></h3>
             
         
         
-        <a href="../files/src_sound_AudioManager.ts.html#l450"><code>src&#x2F;sound&#x2F;AudioManager.ts:450</code></a>
+        <a href="../files/src_sound_AudioManager.ts.html#l455"><code>src&#x2F;sound&#x2F;AudioManager.ts:455</code></a>
         
         </p>
 
@@ -1616,7 +1623,7 @@ <h3 class="name"><code>stopAll</code></h3>
             
         
         
-        <a href="../files/src_sound_AudioManager.ts.html#l415"><code>src&#x2F;sound&#x2F;AudioManager.ts:415</code></a>
+        <a href="../files/src_sound_AudioManager.ts.html#l421"><code>src&#x2F;sound&#x2F;AudioManager.ts:421</code></a>
         
         </p>
 
@@ -1673,7 +1680,7 @@ <h3 class="name"><code>update</code></h3>
             
         
         
-        <a href="../files/src_sound_AudioManager.ts.html#l468"><code>src&#x2F;sound&#x2F;AudioManager.ts:468</code></a>
+        <a href="../files/src_sound_AudioManager.ts.html#l472"><code>src&#x2F;sound&#x2F;AudioManager.ts:472</code></a>
         
         </p>
 
@@ -1942,6 +1949,53 @@ <h3 class="name"><code>_sounds</code></h3>
 </div>
 
                 
+                    <div id="property__unlockedSource" class="property item private">
+    <h3 class="name"><code>_unlockedSource</code></h3>
+    <span class="type">Any</span>
+
+    
+
+    
+        <span class="flag private">private</span>
+    
+
+    
+
+    
+
+    <div class="meta">
+        
+            
+                
+                <p>
+                
+                Defined in
+                
+            
+        
+        
+        <a href="../files/src_sound_AudioManager.ts.html#l141"><code>src&#x2F;sound&#x2F;AudioManager.ts:141</code></a>
+        
+        </p>
+
+        
+
+        
+    </div>
+
+    <div class="description">
+        <p>Sound buffer</p>
+
+    </div>
+
+    
+
+    
+
+    
+</div>
+
+                
                     <div id="property__volume" class="property item private">
     <h3 class="name"><code>_volume</code></h3>
     <span class="type">Number</span>
@@ -2111,7 +2165,7 @@ <h3 class="name"><code>locked</code></h3>
             
         
         
-        <a href="../files/src_sound_AudioManager.ts.html#l142"><code>src&#x2F;sound&#x2F;AudioManager.ts:142</code></a>
+        <a href="../files/src_sound_AudioManager.ts.html#l149"><code>src&#x2F;sound&#x2F;AudioManager.ts:149</code></a>
         
         </p>
 
@@ -2205,7 +2259,7 @@ <h3 class="name"><code>mute</code></h3>
             
         
         
-        <a href="../files/src_sound_AudioManager.ts.html#l234"><code>src&#x2F;sound&#x2F;AudioManager.ts:234</code></a>
+        <a href="../files/src_sound_AudioManager.ts.html#l241"><code>src&#x2F;sound&#x2F;AudioManager.ts:241</code></a>
         
         </p>
 
@@ -2397,7 +2451,7 @@ <h3 class="name"><code>volume</code></h3>
             
         
         
-        <a href="../files/src_sound_AudioManager.ts.html#l281"><code>src&#x2F;sound&#x2F;AudioManager.ts:281</code></a>
+        <a href="../files/src_sound_AudioManager.ts.html#l287"><code>src&#x2F;sound&#x2F;AudioManager.ts:287</code></a>
         
         </p>
 
diff --git a/docs/classes/Kiwi.Stage.html b/docs/classes/Kiwi.Stage.html
index 94be777..a8dd3e2 100644
--- a/docs/classes/Kiwi.Stage.html
+++ b/docs/classes/Kiwi.Stage.html
@@ -1248,7 +1248,7 @@ <h3 class="name"><code>_scaleContainer</code></h3>
             
         
         
-        <a href="../files/src_core_Stage.ts.html#l797"><code>src&#x2F;core&#x2F;Stage.ts:797</code></a>
+        <a href="../files/src_core_Stage.ts.html#l794"><code>src&#x2F;core&#x2F;Stage.ts:794</code></a>
         
         </p>
 
@@ -1497,7 +1497,7 @@ <h3 class="name"><code>clearDebugCanvas</code></h3>
             
         
         
-        <a href="../files/src_core_Stage.ts.html#l774"><code>src&#x2F;core&#x2F;Stage.ts:774</code></a>
+        <a href="../files/src_core_Stage.ts.html#l771"><code>src&#x2F;core&#x2F;Stage.ts:771</code></a>
         
         </p>
 
@@ -1580,7 +1580,7 @@ <h3 class="name"><code>createDebugCanvas</code></h3>
             
         
         
-        <a href="../files/src_core_Stage.ts.html#l740"><code>src&#x2F;core&#x2F;Stage.ts:740</code></a>
+        <a href="../files/src_core_Stage.ts.html#l738"><code>src&#x2F;core&#x2F;Stage.ts:738</code></a>
         
         </p>
 
@@ -1858,7 +1858,7 @@ <h3 class="name"><code>resize</code></h3>
             
         
         
-        <a href="../files/src_core_Stage.ts.html#l699"><code>src&#x2F;core&#x2F;Stage.ts:699</code></a>
+        <a href="../files/src_core_Stage.ts.html#l697"><code>src&#x2F;core&#x2F;Stage.ts:697</code></a>
         
         </p>
 
@@ -1982,7 +1982,7 @@ <h3 class="name"><code>setRGBColor</code></h3>
             
         
         
-        <a href="../files/src_core_Stage.ts.html#l722"><code>src&#x2F;core&#x2F;Stage.ts:722</code></a>
+        <a href="../files/src_core_Stage.ts.html#l720"><code>src&#x2F;core&#x2F;Stage.ts:720</code></a>
         
         </p>
 
@@ -2111,7 +2111,7 @@ <h3 class="name"><code>toggleDebugCanvas</code></h3>
             
         
         
-        <a href="../files/src_core_Stage.ts.html#l788"><code>src&#x2F;core&#x2F;Stage.ts:788</code></a>
+        <a href="../files/src_core_Stage.ts.html#l785"><code>src&#x2F;core&#x2F;Stage.ts:785</code></a>
         
         </p>
 
diff --git a/docs/classes/Kiwi.State.html b/docs/classes/Kiwi.State.html
index 4eb4e83..a87ca3e 100644
--- a/docs/classes/Kiwi.State.html
+++ b/docs/classes/Kiwi.State.html
@@ -1280,7 +1280,7 @@ <h3 class="name"><code>_destroyChildren</code></h3>
             
         
         
-        <a href="../files/src_core_State.ts.html#l466"><code>src&#x2F;core&#x2F;State.ts:466</code></a>
+        <a href="../files/src_core_State.ts.html#l458"><code>src&#x2F;core&#x2F;State.ts:458</code></a>
         
         </p>
 
@@ -1380,7 +1380,7 @@ <h3 class="name"><code>addAudio</code></h3>
             
         
         
-        <a href="../files/src_core_State.ts.html#l358"><code>src&#x2F;core&#x2F;State.ts:358</code></a>
+        <a href="../files/src_core_State.ts.html#l350"><code>src&#x2F;core&#x2F;State.ts:350</code></a>
         
         </p>
 
@@ -2030,7 +2030,7 @@ <h3 class="name"><code>addImage</code></h3>
             
         
         
-        <a href="../files/src_core_State.ts.html#l286"><code>src&#x2F;core&#x2F;State.ts:286</code></a>
+        <a href="../files/src_core_State.ts.html#l279"><code>src&#x2F;core&#x2F;State.ts:279</code></a>
         
         </p>
 
@@ -2234,7 +2234,7 @@ <h3 class="name"><code>addJSON</code></h3>
             
         
         
-        <a href="../files/src_core_State.ts.html#l344"><code>src&#x2F;core&#x2F;State.ts:344</code></a>
+        <a href="../files/src_core_State.ts.html#l336"><code>src&#x2F;core&#x2F;State.ts:336</code></a>
         
         </p>
 
@@ -2424,7 +2424,7 @@ <h3 class="name"><code>addSpriteSheet</code></h3>
             
         
         
-        <a href="../files/src_core_State.ts.html#l303"><code>src&#x2F;core&#x2F;State.ts:303</code></a>
+        <a href="../files/src_core_State.ts.html#l296"><code>src&#x2F;core&#x2F;State.ts:296</code></a>
         
         </p>
 
@@ -2814,7 +2814,7 @@ <h3 class="name"><code>addTextureAtlas</code></h3>
             
         
         
-        <a href="../files/src_core_State.ts.html#l327"><code>src&#x2F;core&#x2F;State.ts:327</code></a>
+        <a href="../files/src_core_State.ts.html#l319"><code>src&#x2F;core&#x2F;State.ts:319</code></a>
         
         </p>
 
@@ -2972,7 +2972,7 @@ <h3 class="name"><code>addToTrackingList</code></h3>
             
         
         
-        <a href="../files/src_core_State.ts.html#l389"><code>src&#x2F;core&#x2F;State.ts:389</code></a>
+        <a href="../files/src_core_State.ts.html#l381"><code>src&#x2F;core&#x2F;State.ts:381</code></a>
         
         </p>
 
@@ -3859,7 +3859,7 @@ <h3 class="name"><code>create</code></h3>
             
         
         
-        <a href="../files/src_core_State.ts.html#l208"><code>src&#x2F;core&#x2F;State.ts:208</code></a>
+        <a href="../files/src_core_State.ts.html#l206"><code>src&#x2F;core&#x2F;State.ts:206</code></a>
         
         </p>
 
@@ -3952,7 +3952,7 @@ <h3 class="name"><code>destroy</code></h3>
             
         
         
-        <a href="../files/src_core_State.ts.html#l441"><code>src&#x2F;core&#x2F;State.ts:441</code></a>
+        <a href="../files/src_core_State.ts.html#l433"><code>src&#x2F;core&#x2F;State.ts:433</code></a>
         
         </p>
 
@@ -4038,7 +4038,7 @@ <h3 class="name"><code>destroyUnused</code></h3>
             
         
         
-        <a href="../files/src_core_State.ts.html#l418"><code>src&#x2F;core&#x2F;State.ts:418</code></a>
+        <a href="../files/src_core_State.ts.html#l410"><code>src&#x2F;core&#x2F;State.ts:410</code></a>
         
         </p>
 
@@ -5343,7 +5343,7 @@ <h3 class="name"><code>init</code></h3>
             
         
         
-        <a href="../files/src_core_State.ts.html#l156"><code>src&#x2F;core&#x2F;State.ts:156</code></a>
+        <a href="../files/src_core_State.ts.html#l155"><code>src&#x2F;core&#x2F;State.ts:155</code></a>
         
         </p>
 
@@ -5426,7 +5426,7 @@ <h3 class="name"><code>loadComplete</code></h3>
             
         
         
-        <a href="../files/src_core_State.ts.html#l185"><code>src&#x2F;core&#x2F;State.ts:185</code></a>
+        <a href="../files/src_core_State.ts.html#l184"><code>src&#x2F;core&#x2F;State.ts:184</code></a>
         
         </p>
 
@@ -5505,7 +5505,7 @@ <h3 class="name"><code>loadProgress</code></h3>
             
         
         
-        <a href="../files/src_core_State.ts.html#l174"><code>src&#x2F;core&#x2F;State.ts:174</code></a>
+        <a href="../files/src_core_State.ts.html#l173"><code>src&#x2F;core&#x2F;State.ts:173</code></a>
         
         </p>
 
@@ -5619,7 +5619,7 @@ <h3 class="name"><code>loadUpdate</code></h3>
             
         
         
-        <a href="../files/src_core_State.ts.html#l192"><code>src&#x2F;core&#x2F;State.ts:192</code></a>
+        <a href="../files/src_core_State.ts.html#l191"><code>src&#x2F;core&#x2F;State.ts:191</code></a>
         
         </p>
 
@@ -5823,7 +5823,7 @@ <h3 class="name"><code>postRender</code></h3>
             
         
         
-        <a href="../files/src_core_State.ts.html#l264"><code>src&#x2F;core&#x2F;State.ts:264</code></a>
+        <a href="../files/src_core_State.ts.html#l257"><code>src&#x2F;core&#x2F;State.ts:257</code></a>
         
         </p>
 
@@ -5880,7 +5880,7 @@ <h3 class="name"><code>postUpdate</code></h3>
             
         
         
-        <a href="../files/src_core_State.ts.html#l252"><code>src&#x2F;core&#x2F;State.ts:252</code></a>
+        <a href="../files/src_core_State.ts.html#l247"><code>src&#x2F;core&#x2F;State.ts:247</code></a>
         
         </p>
 
@@ -5938,7 +5938,7 @@ <h3 class="name"><code>preload</code></h3>
             
         
         
-        <a href="../files/src_core_State.ts.html#l166"><code>src&#x2F;core&#x2F;State.ts:166</code></a>
+        <a href="../files/src_core_State.ts.html#l165"><code>src&#x2F;core&#x2F;State.ts:165</code></a>
         
         </p>
 
@@ -5995,7 +5995,7 @@ <h3 class="name"><code>preUpdate</code></h3>
             
         
         
-        <a href="../files/src_core_State.ts.html#l216"><code>src&#x2F;core&#x2F;State.ts:216</code></a>
+        <a href="../files/src_core_State.ts.html#l214"><code>src&#x2F;core&#x2F;State.ts:214</code></a>
         
         </p>
 
@@ -6556,7 +6556,7 @@ <h3 class="name"><code>removeFromTrackingList</code></h3>
             
         
         
-        <a href="../files/src_core_State.ts.html#l403"><code>src&#x2F;core&#x2F;State.ts:403</code></a>
+        <a href="../files/src_core_State.ts.html#l395"><code>src&#x2F;core&#x2F;State.ts:395</code></a>
         
         </p>
 
@@ -7206,7 +7206,7 @@ <h3 class="name"><code>shutDown</code></h3>
             
         
         
-        <a href="../files/src_core_State.ts.html#l271"><code>src&#x2F;core&#x2F;State.ts:271</code></a>
+        <a href="../files/src_core_State.ts.html#l264"><code>src&#x2F;core&#x2F;State.ts:264</code></a>
         
         </p>
 
@@ -7519,7 +7519,7 @@ <h3 class="name"><code>update</code></h3>
             
         
         
-        <a href="../files/src_core_State.ts.html#l227"><code>src&#x2F;core&#x2F;State.ts:227</code></a>
+        <a href="../files/src_core_State.ts.html#l223"><code>src&#x2F;core&#x2F;State.ts:223</code></a>
         
         </p>
 
@@ -7618,7 +7618,7 @@ <h3 class="name"><code>_destroyRemoveChildren</code></h3>
             
         
         
-        <a href="../files/src_core_Group.ts.html#l1302"><code>src&#x2F;core&#x2F;Group.ts:1302</code></a>
+        <a href="../files/src_core_Group.ts.html#l1301"><code>src&#x2F;core&#x2F;Group.ts:1301</code></a>
         
         </p>
 
@@ -8909,7 +8909,7 @@ <h3 class="name"><code>trackingList</code></h3>
             
         
         
-        <a href="../files/src_core_State.ts.html#l380"><code>src&#x2F;core&#x2F;State.ts:380</code></a>
+        <a href="../files/src_core_State.ts.html#l372"><code>src&#x2F;core&#x2F;State.ts:372</code></a>
         
         </p>
 
diff --git a/docs/classes/Kiwi.StateManager.html b/docs/classes/Kiwi.StateManager.html
index 51b7e57..742af82 100644
--- a/docs/classes/Kiwi.StateManager.html
+++ b/docs/classes/Kiwi.StateManager.html
@@ -1542,7 +1542,7 @@ <h3 class="name"><code>onLoadComplete</code></h3>
             
         
         
-        <a href="../files/src_core_StateManager.ts.html#l395"><code>src&#x2F;core&#x2F;StateManager.ts:395</code></a>
+        <a href="../files/src_core_StateManager.ts.html#l394"><code>src&#x2F;core&#x2F;StateManager.ts:394</code></a>
         
         </p>
 
@@ -1734,7 +1734,7 @@ <h3 class="name"><code>postRender</code></h3>
             
         
         
-        <a href="../files/src_core_StateManager.ts.html#l457"><code>src&#x2F;core&#x2F;StateManager.ts:457</code></a>
+        <a href="../files/src_core_StateManager.ts.html#l456"><code>src&#x2F;core&#x2F;StateManager.ts:456</code></a>
         
         </p>
 
@@ -1791,7 +1791,7 @@ <h3 class="name"><code>rebuildLibraries</code></h3>
             
         
         
-        <a href="../files/src_core_StateManager.ts.html#l413"><code>src&#x2F;core&#x2F;StateManager.ts:413</code></a>
+        <a href="../files/src_core_StateManager.ts.html#l412"><code>src&#x2F;core&#x2F;StateManager.ts:412</code></a>
         
         </p>
 
@@ -2135,7 +2135,7 @@ <h3 class="name"><code>update</code></h3>
             
         
         
-        <a href="../files/src_core_StateManager.ts.html#l428"><code>src&#x2F;core&#x2F;StateManager.ts:428</code></a>
+        <a href="../files/src_core_StateManager.ts.html#l427"><code>src&#x2F;core&#x2F;StateManager.ts:427</code></a>
         
         </p>
 
diff --git a/docs/data.json b/docs/data.json
index d0f6bb3..196df58 100644
--- a/docs/data.json
+++ b/docs/data.json
@@ -1561,7 +1561,7 @@
             },
             "tag": "main",
             "file": "src/Kiwi.ts",
-            "line": 307,
+            "line": 306,
             "description": "Module - Kiwi (Core)\nThe top level namespace in which all core classes and modules are defined.",
             "itemtype": "main"
         },
@@ -1634,7 +1634,7 @@
             },
             "module": "Kiwi",
             "file": "src/gameobjects/Textfield.ts",
-            "line": 493,
+            "line": 486,
             "description": "The GameObject namespace holds classes which are designed to be added to a State (either directly, or as an ancestor of a Group) and are the Objects that are used when wanting to render anything visual onto the current State. Each GameObject is a representation of a particular item in a game and as such has information that corresponds to that item (like where they are in the 'GameWorld', the scale of the GameObject, who their parent is, e.t.c). For Example: If you wanted to have a massive background image then you can use the StaticImage GameObject, as that is a relatively light-weight object). Or if you had Player with an Animation, which user's could interactive with, then you would use a Sprite, which is more robust.",
             "tag": "main",
             "itemtype": "main"
@@ -1822,7 +1822,7 @@
             "module": "Kiwi",
             "namespace": "",
             "file": "src/render/GLTextureWrapper.ts",
-            "line": 13,
+            "line": 11,
             "description": "Contains the classes which are related to the rendering of GameObjects.",
             "tag": "main",
             "itemtype": "main"
@@ -1843,7 +1843,7 @@
             "module": "Kiwi",
             "namespace": "",
             "file": "src/render/GLShaderManager.ts",
-            "line": 25,
+            "line": 24,
             "description": "GLSL ES Shaders are used for WebGL rendering.\nShaderPair objects encapsulate GLSL ES vertex and fragment shader programs. \n  ShaderPairs contain the GLSL code, provide an interface to uniforms and attributes, and have the ability to link and compile the shaders.\nThe ShaderManager keeps track of each ShaderPair, and controls which one is bound for use at any particular time.\n  Only the ShaderManager can create ShaderPairs. When a renderer (see note on renderes below) requests a ShaderPair the ShaderManager will either\n      1) Return a reference to an already instantiated ShaderPair, and set the GL state to use the shader program or\n      2) Return a reference to a new ShaderPair, which will be linked and compiled and bound for use.\n  All ShaderPairs must be housed as properties of the Kiwi.Shaders object. \n\nKiwi.Renderer objects use a ShaderPair to draw.\n  They must request a ShaderPair from the ShaderManager.\n  Many renderers may use the same ShaderPair.\n  Some renderers may at different times use multiple ShaderPairs (only one is possible at any given time)",
             "tag": "main",
             "itemtype": "main"
@@ -3843,7 +3843,7 @@
             "submodule": "GameObjects",
             "namespace": "Kiwi.GameObjects",
             "file": "src/gameobjects/Textfield.ts",
-            "line": 493,
+            "line": 486,
             "description": "Alias of the \"Kiwi.GameObjects.Textfield\". \nThis will continue to be an alias until we can deprecate the existing version.",
             "extends": "Kiwi.GameObjects.Textfield"
         },
@@ -5195,7 +5195,7 @@
             "submodule": "Renderers",
             "namespace": "Kiwi.Renderers",
             "file": "src/render/renderers/Renderer.ts",
-            "line": 14,
+            "line": 13,
             "description": "Base class for WebGL Renderers. Not for instantiation.",
             "is_constructor": 1,
             "params": [
@@ -5234,7 +5234,7 @@
             "submodule": "Renderers",
             "namespace": "Kiwi.Renderers",
             "file": "src/render/renderers/TextureAtlasRenderer.ts",
-            "line": 13,
+            "line": 12,
             "description": "The Renderer object for rendering Texture Atlases",
             "is_constructor": 1,
             "extends": "Kiwi.Renderers.Renderer",
@@ -5465,7 +5465,7 @@
             "submodule": "Renderers",
             "namespace": "Kiwi.Renderers",
             "file": "src/render/GLRenderManager.ts",
-            "line": 18,
+            "line": 13,
             "description": "Manages all rendering using WebGL. Requires the inclusion of gl-matrix.js / g-matrix.min.js -  https://github.com/toji/gl-matrix\nDirectly manages renderer objects, including factory methods for their creation. \nCreates manager objects for shaders and textures.\nManages gl state at game initialisation, at state start and end, and per frame.\nRuns the recursive scene graph rendering sequence every frame.",
             "extends": "IRenderer",
             "is_constructor": 1,
@@ -5493,7 +5493,7 @@
             "submodule": "Shaders",
             "namespace": "Kiwi.Shaders",
             "file": "src/render/GLShaderManager.ts",
-            "line": 25,
+            "line": 24,
             "description": "Manages all WebGL Shaders. Maintains a list of ShaderPairs \n \nProvides an interface for using a specific ShaderPair, adding new ShaderPairs, and requesting a reference to a ShaderPair instance.\nRenderes use shaderPairs to draw. Multiple renderers may use the same compiled shader program.\nThis Manager ensures only one compiled instance of each program is created",
             "extends": "IRenderer",
             "is_constructor": 1,
@@ -5514,7 +5514,7 @@
             "submodule": "Renderers",
             "namespace": "Kiwi.Renderers",
             "file": "src/render/GLTextureManager.ts",
-            "line": 13,
+            "line": 12,
             "description": "Manages GL Texture objects, including creation, uploading, destruction and memory management",
             "is_constructor": 1,
             "return": {
@@ -5534,7 +5534,7 @@
             "submodule": "Renderers",
             "namespace": "Kiwi.Renderers",
             "file": "src/render/GLTextureWrapper.ts",
-            "line": 13,
+            "line": 11,
             "description": "Wraps a webGL texture object",
             "is_constructor": 1,
             "params": [
@@ -6311,7 +6311,7 @@
             "module": "Kiwi",
             "namespace": "Kiwi",
             "file": "src/Kiwi.ts",
-            "line": 307,
+            "line": 306,
             "description": "The GameManager is used to maintain mulitple instances of Kiwi games within a single document.",
             "static": 1
         }
@@ -9674,7 +9674,7 @@
         },
         {
             "file": "src/components/ArcadePhysics.ts",
-            "line": 654,
+            "line": 652,
             "description": "Separates a GameObjects from an Array of Tiles on the x-axis.",
             "itemtype": "method",
             "name": "separateTilesX",
@@ -9709,7 +9709,7 @@
         },
         {
             "file": "src/components/ArcadePhysics.ts",
-            "line": 742,
+            "line": 740,
             "description": "Separates a GameObject from a tiles on the y-axis.",
             "itemtype": "method",
             "name": "separateTilesY",
@@ -9744,7 +9744,7 @@
         },
         {
             "file": "src/components/ArcadePhysics.ts",
-            "line": 835,
+            "line": 833,
             "description": "A method to check to see if any Tiles with in this parent TileMapLayer overlaps with a GameObject passed.\nIf seperateObjects is true it will seperate the two entities based on their bounding box.\nONLY works if the parent of the ArcadePhysics component which is calling this method is a TileMapLayer.\nNote: The GameObject passed must contain a box component and only if you want to separate the two objects must is ALSO contain an ArcadePhysics component.",
             "itemtype": "method",
             "name": "overlapsTiles",
@@ -9782,7 +9782,7 @@
         },
         {
             "file": "src/components/ArcadePhysics.ts",
-            "line": 865,
+            "line": 863,
             "description": "A method to check to see if the parent of this physics component overlaps with another Kiwi.Entity.\nIf seperateObjects is true it will seperate the two entities based on their bounding box.\nNote: The GameObject passed must contain a box component and only if you want to separate the two objects must is ALSO contain an ArcadePhysics component. \nAlso: Not to be used for separation from tiles.",
             "itemtype": "method",
             "name": "overlaps",
@@ -9813,7 +9813,7 @@
         },
         {
             "file": "src/components/ArcadePhysics.ts",
-            "line": 900,
+            "line": 898,
             "description": "A method to check to see if the parent of this physics component overlaps with another individual in a Kiwi Group.",
             "itemtype": "method",
             "name": "overlapsGroup",
@@ -9844,7 +9844,7 @@
         },
         {
             "file": "src/components/ArcadePhysics.ts",
-            "line": 935,
+            "line": 933,
             "description": "A method to check to see if the parent of this physics component overlaps with any Entities that are held in an Array which is passed.",
             "itemtype": "method",
             "name": "overlapsArray",
@@ -9875,7 +9875,7 @@
         },
         {
             "file": "src/components/ArcadePhysics.ts",
-            "line": 982,
+            "line": 980,
             "description": "Computes the velocity based on the parameters passed.",
             "itemtype": "method",
             "name": "computeVelocity",
@@ -9921,7 +9921,7 @@
         },
         {
             "file": "src/components/ArcadePhysics.ts",
-            "line": 1016,
+            "line": 1014,
             "description": "Updates the position of this object. Automatically called if the 'moves' parameter is true.  \nThis called each frame during the update method.",
             "itemtype": "method",
             "name": "updateMotion",
@@ -9934,7 +9934,7 @@
         },
         {
             "file": "src/components/ArcadePhysics.ts",
-            "line": 1051,
+            "line": 1049,
             "description": "The Update loop of the physics component",
             "itemtype": "method",
             "name": "update",
@@ -9947,7 +9947,7 @@
         },
         {
             "file": "src/components/ArcadePhysics.ts",
-            "line": 1073,
+            "line": 1071,
             "description": "Removes all properties that refer to other objects or outside of this class in order to flag this object for garbage collection.",
             "itemtype": "method",
             "name": "destroy",
@@ -9960,7 +9960,7 @@
         },
         {
             "file": "src/components/ArcadePhysics.ts",
-            "line": 1088,
+            "line": 1086,
             "description": "The type of object that this is.",
             "itemtype": "method",
             "name": "objType",
@@ -9977,7 +9977,7 @@
         },
         {
             "file": "src/components/ArcadePhysics.ts",
-            "line": 1113,
+            "line": 1111,
             "description": "A Static method to check to see if two objects collide or not. Returns a boolean indicating whether they overlaped or not.",
             "itemtype": "method",
             "name": "collide",
@@ -10014,7 +10014,7 @@
         },
         {
             "file": "src/components/ArcadePhysics.ts",
-            "line": 1129,
+            "line": 1127,
             "description": "A Static method to check to see if a single entity collides with a group of entities. Returns a boolean indicating whether they overlaped or not.",
             "itemtype": "method",
             "name": "collideGroup",
@@ -10051,7 +10051,7 @@
         },
         {
             "file": "src/components/ArcadePhysics.ts",
-            "line": 1147,
+            "line": 1145,
             "description": "A Static method to check to see if a group of entities overlap with another group of entities. Returns a boolean indicating whether they overlaped or not.",
             "itemtype": "method",
             "name": "collideGroupGroup",
@@ -10088,7 +10088,7 @@
         },
         {
             "file": "src/components/ArcadePhysics.ts",
-            "line": 1171,
+            "line": 1169,
             "description": "A Static method to that checks to see if two objects overlap. Returns a boolean indicating whether they did or not.",
             "itemtype": "method",
             "name": "overlaps",
@@ -10125,7 +10125,7 @@
         },
         {
             "file": "src/components/ArcadePhysics.ts",
-            "line": 1189,
+            "line": 1187,
             "description": "A Static method to that checks to see if a single object overlaps with a group of entities. Returns a boolean indicating whether they did or not.",
             "itemtype": "method",
             "name": "overlapsObjectGroup",
@@ -10162,7 +10162,7 @@
         },
         {
             "file": "src/components/ArcadePhysics.ts",
-            "line": 1207,
+            "line": 1205,
             "description": "A Static method that checks to see if any objects in one group overlap with objects in another group.",
             "itemtype": "method",
             "name": "overlaps",
@@ -10199,7 +10199,7 @@
         },
         {
             "file": "src/components/ArcadePhysics.ts",
-            "line": 1239,
+            "line": 1237,
             "description": "A Static method that checks to see if any objects from an Array collide with a Kiwi Group members.",
             "itemtype": "method",
             "name": "overlapsArrayGroup",
@@ -10234,7 +10234,7 @@
         },
         {
             "file": "src/components/ArcadePhysics.ts",
-            "line": 1280,
+            "line": 1278,
             "description": "How often the motion should be updated.",
             "itemtype": "property",
             "name": "updateInterval",
@@ -10250,7 +10250,7 @@
         },
         {
             "file": "src/components/ArcadePhysics.ts",
-            "line": 1291,
+            "line": 1289,
             "description": "Generic value for \"left\" Used by <code>facing</code>, <code>allowCollisions</code>, and <code>touching</code>.",
             "itemtype": "property",
             "name": "LEFT",
@@ -10266,7 +10266,7 @@
         },
         {
             "file": "src/components/ArcadePhysics.ts",
-            "line": 1302,
+            "line": 1300,
             "description": "Generic value for \"right\" Used by <code>facing</code>, <code>allowCollisions</code>, and <code>touching</code>.",
             "itemtype": "property",
             "name": "RIGHT",
@@ -10282,7 +10282,7 @@
         },
         {
             "file": "src/components/ArcadePhysics.ts",
-            "line": 1313,
+            "line": 1311,
             "description": "Generic value for \"up\" Used by <code>facing</code>, <code>allowCollisions</code>, and <code>touching</code>.",
             "itemtype": "property",
             "name": "UP",
@@ -10298,7 +10298,7 @@
         },
         {
             "file": "src/components/ArcadePhysics.ts",
-            "line": 1324,
+            "line": 1322,
             "description": "Generic value for \"down\" Used by <code>facing</code>, <code>allowCollisions</code>, and <code>touching</code>.",
             "itemtype": "property",
             "name": "DOWN",
@@ -10314,7 +10314,7 @@
         },
         {
             "file": "src/components/ArcadePhysics.ts",
-            "line": 1335,
+            "line": 1333,
             "description": "Special-case constant meaning no collisions, used mainly by <code>allowCollisions</code> and <code>touching</code>.",
             "itemtype": "property",
             "name": "NONE",
@@ -10330,7 +10330,7 @@
         },
         {
             "file": "src/components/ArcadePhysics.ts",
-            "line": 1346,
+            "line": 1344,
             "description": "Special-case constant meaning up, used mainly by <code>allowCollisions</code> and <code>touching</code>.",
             "itemtype": "property",
             "name": "CEILING",
@@ -10346,7 +10346,7 @@
         },
         {
             "file": "src/components/ArcadePhysics.ts",
-            "line": 1357,
+            "line": 1355,
             "description": "Special-case constant meaning down, used mainly by <code>allowCollisions</code> and <code>touching</code>.",
             "itemtype": "property",
             "name": "FLOOR",
@@ -10362,7 +10362,7 @@
         },
         {
             "file": "src/components/ArcadePhysics.ts",
-            "line": 1368,
+            "line": 1366,
             "description": "Special-case constant meaning only the left and right sides, used mainly by <code>allowCollisions</code> and <code>touching</code>.",
             "itemtype": "property",
             "name": "WALL",
@@ -10378,7 +10378,7 @@
         },
         {
             "file": "src/components/ArcadePhysics.ts",
-            "line": 1379,
+            "line": 1377,
             "description": "Special-case constant meaning any direction, used mainly by <code>allowCollisions</code> and <code>touching</code>.",
             "itemtype": "property",
             "name": "ANY",
@@ -10394,7 +10394,7 @@
         },
         {
             "file": "src/components/ArcadePhysics.ts",
-            "line": 1390,
+            "line": 1388,
             "description": "Handy constant used during collision resolution (see <code>separateX()</code> and <code>separateY()</code>).",
             "itemtype": "property",
             "name": "OVERLAP_BIAS",
@@ -10626,7 +10626,7 @@
         },
         {
             "file": "src/components/Box.ts",
-            "line": 275,
+            "line": 274,
             "description": "Returns the raw center point of the box.\nThis is READ ONLY.",
             "itemtype": "property",
             "name": "rawCenter",
@@ -10640,7 +10640,7 @@
         },
         {
             "file": "src/components/Box.ts",
-            "line": 290,
+            "line": 289,
             "description": "Contains the center point after the box has been transformed.",
             "itemtype": "property",
             "name": "_transformedCenter",
@@ -10654,7 +10654,7 @@
         },
         {
             "file": "src/components/Box.ts",
-            "line": 299,
+            "line": 298,
             "description": "Returns the center point for the box after it has been transformed.\nWorld coordinates.\nThis is READ ONLY.",
             "itemtype": "property",
             "name": "center",
@@ -10668,7 +10668,7 @@
         },
         {
             "file": "src/components/Box.ts",
-            "line": 320,
+            "line": 319,
             "description": "Contains the transformed or 'normal' bounds for this entity.",
             "itemtype": "property",
             "name": "_transformedBounds",
@@ -10682,7 +10682,7 @@
         },
         {
             "file": "src/components/Box.ts",
-            "line": 329,
+            "line": 328,
             "description": "The 'world' transformed bounds for this entity.",
             "itemtype": "property",
             "name": "_worldBounds",
@@ -10696,7 +10696,7 @@
         },
         {
             "file": "src/components/Box.ts",
-            "line": 338,
+            "line": 337,
             "description": "Returns the 'transformed' or 'normal' bounds for this box. \nThis is READ ONLY.",
             "itemtype": "property",
             "name": "bounds",
@@ -10710,7 +10710,7 @@
         },
         {
             "file": "src/components/Box.ts",
-            "line": 351,
+            "line": 350,
             "description": "Returns the 'transformed' bounds for this entity using the world coodinates.\nThis is READ ONLY.",
             "itemtype": "property",
             "name": "worldBounds",
@@ -10724,7 +10724,7 @@
         },
         {
             "file": "src/components/Box.ts",
-            "line": 364,
+            "line": 363,
             "description": "Private internal method only. Used to calculate the transformed bounds after rotation/scale.",
             "itemtype": "method",
             "name": "_rotateRect",
@@ -10755,7 +10755,7 @@
         },
         {
             "file": "src/components/Box.ts",
-            "line": 394,
+            "line": 393,
             "description": "A private method that is used to calculate the transformed hitbox's coordinates after rotation.",
             "itemtype": "method",
             "name": "_rotateHitbox",
@@ -10786,7 +10786,7 @@
         },
         {
             "file": "src/components/Box.ts",
-            "line": 425,
+            "line": 424,
             "description": "Draws the various bounds on a context that is passed. Useful for debugging and using in combination with the debug canvas.",
             "itemtype": "method",
             "name": "draw",
@@ -10812,7 +10812,7 @@
         },
         {
             "file": "src/components/Box.ts",
-            "line": 464,
+            "line": 463,
             "description": "Method which takes four Points and then converts it into a Rectangle, which represents the area those points covered.\nThe points passed can be maybe in any order, as the are checked for validity first.",
             "itemtype": "method",
             "name": "extents",
@@ -10848,7 +10848,7 @@
         },
         {
             "file": "src/components/Box.ts",
-            "line": 488,
+            "line": 487,
             "description": "Destroys this component and all of the links it may have to other objects.",
             "itemtype": "method",
             "name": "destroy",
@@ -11586,7 +11586,7 @@
         },
         {
             "file": "src/components/Input.ts",
-            "line": 756,
+            "line": 755,
             "description": "Destroys the input.",
             "itemtype": "method",
             "name": "destory",
@@ -12171,7 +12171,7 @@
         },
         {
             "file": "src/core/CameraManager.ts",
-            "line": 83,
+            "line": 82,
             "description": "Creates a new Camera and adds it to the collection of cameras.",
             "params": [
                 {
@@ -12212,7 +12212,7 @@
         },
         {
             "file": "src/core/CameraManager.ts",
-            "line": 105,
+            "line": 103,
             "description": "Removes the given camera, if it is present in the camera managers camera collection.",
             "itemtype": "method",
             "name": "remove",
@@ -12235,7 +12235,7 @@
         },
         {
             "file": "src/core/CameraManager.ts",
-            "line": 125,
+            "line": 122,
             "description": "Calls update on all the cameras.",
             "itemtype": "method",
             "name": "update",
@@ -12247,7 +12247,7 @@
         },
         {
             "file": "src/core/CameraManager.ts",
-            "line": 142,
+            "line": 139,
             "description": "Calls the render method on all the cameras",
             "itemtype": "method",
             "name": "render",
@@ -12259,7 +12259,7 @@
         },
         {
             "file": "src/core/CameraManager.ts",
-            "line": 160,
+            "line": 157,
             "description": "Removes all cameras in the camera Manager except the default camera. Does nothing if in multi camera mode.",
             "itemtype": "method",
             "name": "removeAll",
@@ -12271,7 +12271,7 @@
         },
         {
             "file": "src/core/CameraManager.ts",
-            "line": 169,
+            "line": 166,
             "description": "Returns all cameras to origin. Called when starting a new state.",
             "itemtype": "method",
             "name": "zeroAllCameras",
@@ -12284,7 +12284,7 @@
         },
         {
             "file": "src/core/CameraManager.ts",
-            "line": 183,
+            "line": 180,
             "description": "Returns camera to origin.",
             "itemtype": "method",
             "name": "zeroCamera",
@@ -12732,7 +12732,7 @@
         },
         {
             "file": "src/core/ComponentManager.ts",
-            "line": 270,
+            "line": 269,
             "description": "Renders all active Components",
             "itemtype": "method",
             "name": "render",
@@ -12744,7 +12744,7 @@
         },
         {
             "file": "src/core/ComponentManager.ts",
-            "line": 285,
+            "line": 283,
             "description": "Calls postRender on all active Components",
             "itemtype": "method",
             "name": "postRender",
@@ -15389,7 +15389,7 @@
         },
         {
             "file": "src/core/Group.ts",
-            "line": 1302,
+            "line": 1301,
             "description": "A temporary property that holds a boolean indicating whether or not the group's children should be destroyed or not.",
             "itemtype": "property",
             "name": "_destroyRemoveChildren",
@@ -15883,7 +15883,7 @@
         },
         {
             "file": "src/core/PluginManager.ts",
-            "line": 46,
+            "line": 45,
             "description": "An array of objects represetning all available plugins, each containing the name and version number of an available plugin",
             "itemtype": "property",
             "name": "getAvailablePlugins",
@@ -15897,7 +15897,7 @@
         },
         {
             "file": "src/core/PluginManager.ts",
-            "line": 63,
+            "line": 61,
             "description": "Registers a plugin object as available. Any game instance can choose to use the plugin.\nPlugins need only be registered once per webpage. If registered a second time it will be ignored.\nTwo plugins with the same names cannot be reigstered simultaneously, even if different versions.",
             "itemtype": "method",
             "name": "register",
@@ -15917,7 +15917,7 @@
         },
         {
             "file": "src/core/PluginManager.ts",
-            "line": 96,
+            "line": 94,
             "description": "Identifies the object as a PluginManager.",
             "itemtype": "property",
             "name": "objType",
@@ -15930,7 +15930,7 @@
         },
         {
             "file": "src/core/PluginManager.ts",
-            "line": 106,
+            "line": 104,
             "description": "A reference to the game instance that owns the PluginManager.",
             "itemtype": "property",
             "name": "objType",
@@ -15943,7 +15943,7 @@
         },
         {
             "file": "src/core/PluginManager.ts",
-            "line": 114,
+            "line": 112,
             "description": "An array of plugin names which the game instance has been configured to use. Each name must match the constructor function for the plugin.",
             "itemtype": "property",
             "name": "_plugins",
@@ -15956,7 +15956,7 @@
         },
         {
             "file": "src/core/PluginManager.ts",
-            "line": 122,
+            "line": 120,
             "description": "An array of objects that contain a boot function, each of which will be called when PluginManager.boot is invoked.",
             "itemtype": "property",
             "name": "_bootObjects",
@@ -15969,7 +15969,7 @@
         },
         {
             "file": "src/core/PluginManager.ts",
-            "line": 130,
+            "line": 128,
             "description": "Builds a list of valid plugins used by the game instance. Each plugin name that is supplied in the Kiwi.Game constructor configuration object  \nis checked against the Kiwi.Plugins namespace to ensure that a property of the same name exists.\nThis will ignore plugin that are registered but not used by the game instance.",
             "itemtype": "method",
             "name": "validatePlugins",
@@ -15981,7 +15981,7 @@
         },
         {
             "file": "src/core/PluginManager.ts",
-            "line": 208,
+            "line": 206,
             "description": "Returns whether a valid minimum version of a plugin exists.",
             "itemtype": "method",
             "name": "validMinimumPluginVersionExists",
@@ -16008,7 +16008,7 @@
         },
         {
             "file": "src/core/PluginManager.ts",
-            "line": 225,
+            "line": 223,
             "description": "Returns true if a plugin identified by the supplied pluginName is registered.",
             "itemtype": "method",
             "name": "pluginIsRegistered",
@@ -16027,7 +16027,7 @@
         },
         {
             "file": "src/core/PluginManager.ts",
-            "line": 241,
+            "line": 239,
             "description": "Called after all other core objects and services created by the Kiwi.Game constructor are created.\nAttempts to find a \"create\" function on each plugin and calls it if it exists.\nThe create function may return an object on which a boot function exists - to be called during boot process.",
             "itemtype": "method",
             "name": "_createPlugins",
@@ -16039,7 +16039,7 @@
         },
         {
             "file": "src/core/PluginManager.ts",
-            "line": 261,
+            "line": 256,
             "description": "Calls the boot functions on any objects that plugins used by the game instance have designated during creation.",
             "itemtype": "method",
             "name": "boot",
@@ -16051,7 +16051,7 @@
         },
         {
             "file": "src/core/PluginManager.ts",
-            "line": 277,
+            "line": 272,
             "description": "Calls the update functions on any objects that plugins used by the game instance have designated during creation.",
             "itemtype": "method",
             "name": "update",
@@ -17383,7 +17383,7 @@
         },
         {
             "file": "src/core/Stage.ts",
-            "line": 699,
+            "line": 697,
             "description": "Set the stage width and height for rendering purposes.\nThis will not effect that \"scaleType\" that it has been set to.",
             "itemtype": "method",
             "name": "resize",
@@ -17407,7 +17407,7 @@
         },
         {
             "file": "src/core/Stage.ts",
-            "line": 722,
+            "line": 720,
             "description": "Sets the background color of the stage through component RGB colour values. \nEach parameter is a number between 0 and 255.\nThis method also returns an Object Literal with \"r\", \"g\", \"b\" properties.",
             "itemtype": "method",
             "name": "setRGBColor",
@@ -17440,7 +17440,7 @@
         },
         {
             "file": "src/core/Stage.ts",
-            "line": 740,
+            "line": 738,
             "description": "Creates a debug canvas and adds it above the regular game canvas.\nThe debug canvas is not created by default (even with debugging on) and rendering/clearing of the canvas is upto the developer. \nThe context for rendering can be access via the \"dctx\" property and you can use the \"clearDebugCanvas\" method to clear the canvas.",
             "itemtype": "method",
             "name": "createDebugCanvas",
@@ -17452,7 +17452,7 @@
         },
         {
             "file": "src/core/Stage.ts",
-            "line": 774,
+            "line": 771,
             "description": "Clears the debug canvas and fills with either the color passed. \nIf not colour is passed then Red at 20% opacity is used.",
             "itemtype": "method",
             "name": "clearDebugCanvas",
@@ -17473,7 +17473,7 @@
         },
         {
             "file": "src/core/Stage.ts",
-            "line": 788,
+            "line": 785,
             "description": "Toggles the visibility of the debug canvas.",
             "itemtype": "method",
             "name": "toggleDebugCanvas",
@@ -17485,7 +17485,7 @@
         },
         {
             "file": "src/core/Stage.ts",
-            "line": 797,
+            "line": 794,
             "description": "Handles the scaling/sizing based upon the scaleType property.",
             "itemtype": "method",
             "name": "_scaleContainer",
@@ -17645,7 +17645,7 @@
         },
         {
             "file": "src/core/State.ts",
-            "line": 156,
+            "line": 155,
             "description": "Gets executed when the state has been initalised and gets switched to for the first time.\nThis method only ever gets called once and it is before the preload method.\nCan have parameters passed to it by the previous state that switched to it.",
             "itemtype": "method",
             "name": "init",
@@ -17665,7 +17665,7 @@
         },
         {
             "file": "src/core/State.ts",
-            "line": 166,
+            "line": 165,
             "description": "This method is where you would load of all the assets that are requried for this state or in the entire game.",
             "itemtype": "method",
             "name": "preload",
@@ -17677,7 +17677,7 @@
         },
         {
             "file": "src/core/State.ts",
-            "line": 174,
+            "line": 173,
             "description": "This method is progressively called whilst loading files and is executed each time a file has been loaded.\nThis can be used to create a 'progress' bar during the loading stage of a game.",
             "itemtype": "method",
             "name": "loadProgress",
@@ -17706,7 +17706,7 @@
         },
         {
             "file": "src/core/State.ts",
-            "line": 185,
+            "line": 184,
             "description": "Gets executed when the game is finished loading and it is about to 'create' the state.",
             "itemtype": "method",
             "name": "loadComplete",
@@ -17718,7 +17718,7 @@
         },
         {
             "file": "src/core/State.ts",
-            "line": 192,
+            "line": 191,
             "description": "The game loop that gets executed while the game is loading.",
             "itemtype": "method",
             "name": "loadUpdate",
@@ -17730,7 +17730,7 @@
         },
         {
             "file": "src/core/State.ts",
-            "line": 208,
+            "line": 206,
             "description": "Is executed once all of the assets have loaded and the game is ready to be 'created'.",
             "itemtype": "method",
             "name": "create",
@@ -17751,7 +17751,7 @@
         },
         {
             "file": "src/core/State.ts",
-            "line": 216,
+            "line": 214,
             "description": "Is called every frame before the update loop. When overriding make sure you include a super call.",
             "itemtype": "method",
             "name": "preUpdate",
@@ -17763,7 +17763,7 @@
         },
         {
             "file": "src/core/State.ts",
-            "line": 227,
+            "line": 223,
             "description": "The update loop that is executed every frame while the game is 'playing'. When overriding make sure you include a super call too.",
             "itemtype": "method",
             "name": "update",
@@ -17775,7 +17775,7 @@
         },
         {
             "file": "src/core/State.ts",
-            "line": 252,
+            "line": 247,
             "description": "The post update loop is executed every frame after the update method. \nWhen overriding make sure you include a super call at the end of the method.",
             "itemtype": "method",
             "name": "postUpdate",
@@ -17787,7 +17787,7 @@
         },
         {
             "file": "src/core/State.ts",
-            "line": 264,
+            "line": 257,
             "description": "Called after all of the layers have rendered themselves, useful for debugging.",
             "itemtype": "method",
             "name": "postRender",
@@ -17799,7 +17799,7 @@
         },
         {
             "file": "src/core/State.ts",
-            "line": 271,
+            "line": 264,
             "description": "Called just before this State is going to be Shut Down and another one is going to be switched too.",
             "itemtype": "method",
             "name": "shutDown",
@@ -17811,7 +17811,7 @@
         },
         {
             "file": "src/core/State.ts",
-            "line": 286,
+            "line": 279,
             "description": "Adds a new image file that is be loaded when the state gets up to the loading all of the assets.",
             "itemtype": "method",
             "name": "addImage",
@@ -17866,7 +17866,7 @@
         },
         {
             "file": "src/core/State.ts",
-            "line": 303,
+            "line": 296,
             "description": "Adds a new spritesheet image file that is be loaded when the state gets up to the loading all of the assets.",
             "itemtype": "method",
             "name": "addSpriteSheet",
@@ -17953,7 +17953,7 @@
         },
         {
             "file": "src/core/State.ts",
-            "line": 327,
+            "line": 319,
             "description": "Adds a new texture atlas that is to be loaded when the states gets up to the stage of loading the assets.",
             "itemtype": "method",
             "name": "addTextureAtlas",
@@ -17996,7 +17996,7 @@
         },
         {
             "file": "src/core/State.ts",
-            "line": 344,
+            "line": 336,
             "description": "Adds a json file that is to be loaded when the state gets up to the stage of loading the assets.",
             "itemtype": "method",
             "name": "addJSON",
@@ -18027,7 +18027,7 @@
         },
         {
             "file": "src/core/State.ts",
-            "line": 358,
+            "line": 350,
             "description": "Adds a new audio file that is to be loaded when the state gets up to the stage of loading the assets.",
             "itemtype": "method",
             "name": "addAudio",
@@ -18056,7 +18056,7 @@
         },
         {
             "file": "src/core/State.ts",
-            "line": 380,
+            "line": 372,
             "description": "Contains a reference to all of the Objects that have ever been created for this state. Generally Kiwi.Entities or Kiwi.Groups.\nUseful for keeping track of sprites that are not used any more and need to be destroyed.",
             "itemtype": "property",
             "name": "trackingList",
@@ -18069,7 +18069,7 @@
         },
         {
             "file": "src/core/State.ts",
-            "line": 389,
+            "line": 381,
             "description": "Adds a new Objects to the tracking list. \nThis is an INTERNAL Kiwi method and DEVS shouldn't need to worry about it.",
             "itemtype": "method",
             "name": "addToTrackingList",
@@ -18088,7 +18088,7 @@
         },
         {
             "file": "src/core/State.ts",
-            "line": 403,
+            "line": 395,
             "description": "Removes a Object from the tracking list. This should only need to happen when a child is being destroyed.\nThis is an INTERNAL Kiwi method and DEVS shouldn't really need to worry about it.",
             "itemtype": "method",
             "name": "removeFromTrackingList",
@@ -18107,7 +18107,7 @@
         },
         {
             "file": "src/core/State.ts",
-            "line": 418,
+            "line": 410,
             "description": "Destroys all of Objects in the tracking list that are not currently on stage. \nAll that currently don't have this STATE as an ancestor.\nReturns the number of Objects removed.",
             "itemtype": "method",
             "name": "destroyUnused",
@@ -18123,7 +18123,7 @@
         },
         {
             "file": "src/core/State.ts",
-            "line": 441,
+            "line": 433,
             "description": "Used to mark all Entities that have been created for deletion, regardless of it they are on the stage or not.",
             "itemtype": "method",
             "name": "destroy",
@@ -18143,7 +18143,7 @@
         },
         {
             "file": "src/core/State.ts",
-            "line": 466,
+            "line": 458,
             "description": "Recursively goes through a child given and runs the destroy method on all that are passed.",
             "itemtype": "method",
             "name": "_destroyChildren",
@@ -18645,7 +18645,7 @@
         },
         {
             "file": "src/core/StateManager.ts",
-            "line": 395,
+            "line": 394,
             "description": "Executed when the preloading has completed. Then executes the loadComplete and create methods of the new State.",
             "itemtype": "method",
             "name": "onLoadComplete",
@@ -18657,7 +18657,7 @@
         },
         {
             "file": "src/core/StateManager.ts",
-            "line": 413,
+            "line": 412,
             "description": "Rebuilds the texture, audio and data libraries that are on the current state. Thus updating what files the user has access to.",
             "itemtype": "method",
             "name": "rebuildLibraries",
@@ -18669,7 +18669,7 @@
         },
         {
             "file": "src/core/StateManager.ts",
-            "line": 428,
+            "line": 427,
             "description": "The update loop that is accessible on the StateManager.",
             "itemtype": "method",
             "name": "update",
@@ -18681,7 +18681,7 @@
         },
         {
             "file": "src/core/StateManager.ts",
-            "line": 457,
+            "line": 456,
             "description": "PostRender - Called after all of the rendering has been executed in a frame.",
             "itemtype": "method",
             "name": "postRender",
@@ -22585,7 +22585,7 @@
         },
         {
             "file": "src/gameobjects/tilemap/TileMap.ts",
-            "line": 238,
+            "line": 237,
             "description": "Generates new TileTypes based upon the Tileset information that lies inside the Tiled JSON.\nThis is an INTERNAL method, which is used when the createFromFileStore method is executed.",
             "itemtype": "method",
             "name": "_generateTypesFromTileset",
@@ -22615,7 +22615,7 @@
         },
         {
             "file": "src/gameobjects/tilemap/TileMap.ts",
-            "line": 290,
+            "line": 289,
             "description": "Method to set the default TileMap properties. Useful when wanting to create tilemaps programmatically.",
             "itemtype": "method",
             "name": "setTo",
@@ -22650,7 +22650,7 @@
         },
         {
             "file": "src/gameobjects/tilemap/TileMap.ts",
-            "line": 306,
+            "line": 305,
             "description": "-----------------------\n Creation of Tile Types\n-----------------------",
             "class": "Kiwi.GameObjects.Tilemap.TileMap",
             "module": "GameObjects",
@@ -22659,7 +22659,7 @@
         },
         {
             "file": "src/gameobjects/tilemap/TileMap.ts",
-            "line": 312,
+            "line": 311,
             "description": "Generates a single new TileType. Returns the TileType that was generated.",
             "itemtype": "method",
             "name": "createTileType",
@@ -22685,7 +22685,7 @@
         },
         {
             "file": "src/gameobjects/tilemap/TileMap.ts",
-            "line": 326,
+            "line": 325,
             "description": "Creates a new TileType for each cell that you pass.",
             "itemtype": "method",
             "name": "createTileTypes",
@@ -22709,7 +22709,7 @@
         },
         {
             "file": "src/gameobjects/tilemap/TileMap.ts",
-            "line": 343,
+            "line": 342,
             "description": "Used to create a number of TileTypes based starting cell number and how many you want from there.",
             "itemtype": "method",
             "name": "createTileTypesByRange",
@@ -22736,7 +22736,7 @@
         },
         {
             "file": "src/gameobjects/tilemap/TileMap.ts",
-            "line": 361,
+            "line": 360,
             "description": "-----------------------\n Cell Modifications\n-----------------------",
             "class": "Kiwi.GameObjects.Tilemap.TileMap",
             "module": "GameObjects",
@@ -22745,7 +22745,7 @@
         },
         {
             "file": "src/gameobjects/tilemap/TileMap.ts",
-            "line": 367,
+            "line": 366,
             "description": "Changes a single cellIndex that a TileType is to use when it is rendered.",
             "itemtype": "method",
             "name": "setCell",
@@ -22770,7 +22770,7 @@
         },
         {
             "file": "src/gameobjects/tilemap/TileMap.ts",
-            "line": 378,
+            "line": 377,
             "description": "Changes a range of cellIndexs for Tiles the same range of TileTypes.",
             "itemtype": "method",
             "name": "setCellsByRange",
@@ -22800,7 +22800,7 @@
         },
         {
             "file": "src/gameobjects/tilemap/TileMap.ts",
-            "line": 395,
+            "line": 394,
             "description": "-----------------------\n Creation of Tilemap Layers\n-----------------------",
             "class": "Kiwi.GameObjects.Tilemap.TileMap",
             "module": "GameObjects",
@@ -22809,7 +22809,7 @@
         },
         {
             "file": "src/gameobjects/tilemap/TileMap.ts",
-            "line": 401,
+            "line": 400,
             "description": "Creates a new TileMapLayer with the details that are provided. \nIf no width/height/tileWidth/tileHeight parameters are passed then the values will be what this TileMap has.\nIf no 'data' is provided then the map will be automatically filled with empty Types of Tiles.\nReturns the new TileMapLayer that was created.",
             "itemtype": "method",
             "name": "createNewLayer",
@@ -22885,7 +22885,7 @@
         },
         {
             "file": "src/gameobjects/tilemap/TileMap.ts",
-            "line": 441,
+            "line": 440,
             "description": "Eventually will create a new object layer. Currently does nothing.",
             "itemtype": "method",
             "name": "createNewObjectLayer",
@@ -22898,7 +22898,7 @@
         },
         {
             "file": "src/gameobjects/tilemap/TileMap.ts",
-            "line": 451,
+            "line": 450,
             "description": "Eventually will create a new image layer. Currently does nothing.",
             "itemtype": "method",
             "name": "createNewObjectLayer",
@@ -22911,7 +22911,7 @@
         },
         {
             "file": "src/gameobjects/tilemap/TileMap.ts",
-            "line": 460,
+            "line": 459,
             "description": "-----------------------\n TileMapLayer Management Functions\n-----------------------",
             "class": "Kiwi.GameObjects.Tilemap.TileMap",
             "module": "GameObjects",
@@ -22920,7 +22920,7 @@
         },
         {
             "file": "src/gameobjects/tilemap/TileMap.ts",
-            "line": 466,
+            "line": 465,
             "description": "Get a layer by the name that it was given upon creation.\nReturns null if no layer with that name was found.",
             "itemtype": "method",
             "name": "getLayerByName",
@@ -22944,7 +22944,7 @@
         },
         {
             "file": "src/gameobjects/tilemap/TileMap.ts",
-            "line": 483,
+            "line": 482,
             "description": "Returns the layer with the number associated with it in the layers array.",
             "itemtype": "method",
             "name": "getLayer",
@@ -22968,7 +22968,7 @@
         },
         {
             "file": "src/gameobjects/tilemap/TileMap.ts",
-            "line": 495,
+            "line": 494,
             "description": "The type of object that it is.",
             "itemtype": "method",
             "name": "objType",
@@ -23770,7 +23770,7 @@
         },
         {
             "file": "src/gameobjects/tilemap/TileMapLayer.ts",
-            "line": 610,
+            "line": 609,
             "description": "-----------------------\n Temp Properties used During Rendering\n-----------------------",
             "class": "Kiwi.GameObjects.Tilemap.TileMapLayer",
             "module": "GameObjects",
@@ -23779,7 +23779,7 @@
         },
         {
             "file": "src/gameobjects/tilemap/TileMapLayer.ts",
-            "line": 616,
+            "line": 615,
             "description": "Used whilst rendering to calculate the number of tiles to be rendered on the X axis.\nIs updated each frame, via the _calculateBoundaries method.",
             "itemtype": "property",
             "name": "_maxX",
@@ -23793,7 +23793,7 @@
         },
         {
             "file": "src/gameobjects/tilemap/TileMapLayer.ts",
-            "line": 625,
+            "line": 624,
             "description": "Used whilst rendering to calculate the number of tiles to be rendered on the Y axis.\nIs updated each frame, via the _calculateBoundaries method.",
             "itemtype": "property",
             "name": "_maxY",
@@ -23807,7 +23807,7 @@
         },
         {
             "file": "src/gameobjects/tilemap/TileMapLayer.ts",
-            "line": 634,
+            "line": 633,
             "description": "Used whilst rendering to calculate which is the first tile to be rendered on the X axis.\nIs updated each frame, via the _calculateBoundaries method.",
             "itemtype": "property",
             "name": "_startX",
@@ -23821,7 +23821,7 @@
         },
         {
             "file": "src/gameobjects/tilemap/TileMapLayer.ts",
-            "line": 643,
+            "line": 642,
             "description": "Used whilst rendering to calculate which is the first tile to be rendered on the Y axis.\nIs updated each frame, via the _calculateBoundaries method.",
             "itemtype": "property",
             "name": "_startY",
@@ -23835,7 +23835,7 @@
         },
         {
             "file": "src/gameobjects/tilemap/TileMapLayer.ts",
-            "line": 652,
+            "line": 651,
             "description": "Temporary property that holds the tileType of the current tile being rendered.",
             "itemtype": "property",
             "name": "_temptype",
@@ -23849,7 +23849,7 @@
         },
         {
             "file": "src/gameobjects/tilemap/TileMapLayer.ts",
-            "line": 660,
+            "line": 659,
             "description": "Corner values used internally.",
             "itemtype": "property",
             "name": "corner1",
@@ -23864,7 +23864,7 @@
         },
         {
             "file": "src/gameobjects/tilemap/TileMapLayer.ts",
-            "line": 668,
+            "line": 667,
             "description": "Corner values used internally.",
             "itemtype": "property",
             "name": "corner2",
@@ -23879,7 +23879,7 @@
         },
         {
             "file": "src/gameobjects/tilemap/TileMapLayer.ts",
-            "line": 676,
+            "line": 675,
             "description": "Corner values used internally.",
             "itemtype": "property",
             "name": "corner3",
@@ -23894,7 +23894,7 @@
         },
         {
             "file": "src/gameobjects/tilemap/TileMapLayer.ts",
-            "line": 684,
+            "line": 683,
             "description": "Corner values used internally.",
             "itemtype": "property",
             "name": "corner4",
@@ -23909,7 +23909,7 @@
         },
         {
             "file": "src/gameobjects/tilemap/TileMapLayer.ts",
-            "line": 693,
+            "line": 692,
             "description": "Used to calculate the position of the tilemap on the stage as well as how many tiles can fit on the screen. \nAll coordinates calculated are stored as temporary properties (maxX/Y, startX/Y).",
             "itemtype": "method",
             "name": "_calculateBoundaries",
@@ -23934,7 +23934,7 @@
         },
         {
             "file": "src/gameobjects/tilemap/TileMapLayer.ts",
-            "line": 757,
+            "line": 756,
             "description": "ChartToScreen maps a point in the game tile coordinates into screen pixel\ncoordinates that indicate where the tile should be drawn.\nNote: This is for use in ISOMETRIC Tilemaps.",
             "itemtype": "method",
             "name": "chartToScreen",
@@ -23968,7 +23968,7 @@
         },
         {
             "file": "src/gameobjects/tilemap/TileMapLayer.ts",
-            "line": 774,
+            "line": 773,
             "description": "ScreenToChart maps a point in screen coordinates into the game tile chart\ncoordinates for the tile on which the screen point falls on.\nThis is for use in ISOMETRIC Tilemaps.",
             "itemtype": "method",
             "name": "screenToChart",
@@ -24002,7 +24002,7 @@
         },
         {
             "file": "src/gameobjects/tilemap/TileMapLayer.ts",
-            "line": 792,
+            "line": 791,
             "description": "The render loop which is used when using the Canvas renderer.",
             "itemtype": "method",
             "name": "render",
@@ -24022,7 +24022,7 @@
         },
         {
             "file": "src/gameobjects/tilemap/TileType.ts",
-            "line": 34,
+            "line": 33,
             "description": "The collision information for this type of tile. \nIt's values are the same as the Static properties inside of the ArcadePhysics Component.",
             "itemtype": "property",
             "name": "allowCollisions",
@@ -24037,7 +24037,7 @@
         },
         {
             "file": "src/gameobjects/tilemap/TileType.ts",
-            "line": 44,
+            "line": 43,
             "description": "The properties associated with this type of tile. \nThese are set when loading a JSON file that had properties associated with a TileType.",
             "itemtype": "property",
             "name": "properties",
@@ -24051,7 +24051,7 @@
         },
         {
             "file": "src/gameobjects/tilemap/TileType.ts",
-            "line": 53,
+            "line": 52,
             "description": "The offset of this tile for rendering purposes. \nDoes not affect regular collision detection.",
             "itemtype": "property",
             "name": "offset",
@@ -24065,7 +24065,7 @@
         },
         {
             "file": "src/gameobjects/tilemap/TileType.ts",
-            "line": 63,
+            "line": 62,
             "description": "A reference to the tilemap this tile object belongs to.",
             "itemtype": "property",
             "name": "tilemap",
@@ -24079,7 +24079,7 @@
         },
         {
             "file": "src/gameobjects/tilemap/TileType.ts",
-            "line": 71,
+            "line": 70,
             "description": "The index of this tile type in the core map data.\nFor example, if your map only has 16 different types of tiles in it, this will be one of those tiles and thus a number between 1 and 16.",
             "itemtype": "property",
             "name": "index",
@@ -24093,7 +24093,7 @@
         },
         {
             "file": "src/gameobjects/tilemap/TileType.ts",
-            "line": 80,
+            "line": 79,
             "description": "A number relating to the cell that should be when rendering a Tile that uses this TileType.\nA cellIndex of -1 means this type of tile will not be rendered.",
             "itemtype": "property",
             "name": "cellIndex",
@@ -24107,7 +24107,7 @@
         },
         {
             "file": "src/gameobjects/tilemap/TileType.ts",
-            "line": 89,
+            "line": 88,
             "description": "The type of object that it is.",
             "itemtype": "method",
             "name": "objType",
@@ -24230,7 +24230,7 @@
         },
         {
             "file": "src/gameobjects/Sprite.ts",
-            "line": 164,
+            "line": 162,
             "description": "Renders the GameObject using WebGL.",
             "itemtype": "method",
             "name": "renderGL",
@@ -24532,7 +24532,7 @@
         },
         {
             "file": "src/gameobjects/Textfield.ts",
-            "line": 212,
+            "line": 211,
             "description": "The font family that is being used to render the text.",
             "itemtype": "property",
             "name": "fontFamily",
@@ -24546,7 +24546,7 @@
         },
         {
             "file": "src/gameobjects/Textfield.ts",
-            "line": 227,
+            "line": 225,
             "description": "A static property that contains the string to center align the text.",
             "itemtype": "property",
             "name": "TEXT_ALIGN_CENTER",
@@ -24562,7 +24562,7 @@
         },
         {
             "file": "src/gameobjects/Textfield.ts",
-            "line": 237,
+            "line": 235,
             "description": "A static property that contains the string to right align the text.",
             "itemtype": "property",
             "name": "TEXT_ALIGN_RIGHT",
@@ -24578,7 +24578,7 @@
         },
         {
             "file": "src/gameobjects/Textfield.ts",
-            "line": 247,
+            "line": 245,
             "description": "A static property that contains the string to left align the text.",
             "itemtype": "property",
             "name": "TEXT_ALIGN_LEFT",
@@ -24594,7 +24594,7 @@
         },
         {
             "file": "src/gameobjects/Textfield.ts",
-            "line": 257,
+            "line": 255,
             "description": "Alignment of the text. You can either use the static TEXT_ALIGN constants or pass a string.",
             "itemtype": "property",
             "name": "textAlign",
@@ -24608,7 +24608,7 @@
         },
         {
             "file": "src/gameobjects/Textfield.ts",
-            "line": 272,
+            "line": 270,
             "description": "The canvas element which the text is rendered onto.",
             "itemtype": "property",
             "name": "_canvas",
@@ -24622,7 +24622,7 @@
         },
         {
             "file": "src/gameobjects/Textfield.ts",
-            "line": 280,
+            "line": 278,
             "description": "The context for the canvas element. Used whilst rendering text.",
             "itemtype": "property",
             "name": "_ctx",
@@ -24636,7 +24636,7 @@
         },
         {
             "file": "src/gameobjects/Textfield.ts",
-            "line": 288,
+            "line": 286,
             "description": "If the temporary canvas is dirty and needs to be re-rendered. Only used when the text field rendering is being optimised.",
             "itemtype": "property",
             "name": "_tempDirty",
@@ -24650,7 +24650,7 @@
         },
         {
             "file": "src/gameobjects/Textfield.ts",
-            "line": 296,
+            "line": 294,
             "description": "Hitbox component",
             "itemtype": "property",
             "name": "box",
@@ -24665,7 +24665,7 @@
         },
         {
             "file": "src/gameobjects/Textfield.ts",
-            "line": 306,
+            "line": 304,
             "description": "This method is used to render the text to an offscreen-canvas which is held in a TextureAtlas (which is generated upon the instanitation of this class). \nThis is so that the canvas doesn't render it every frame as it can be costly and so that it can be used in WebGL with the TextureAtlasRenderer.",
             "itemtype": "method",
             "name": "_renderText",
@@ -24678,7 +24678,7 @@
         },
         {
             "file": "src/gameobjects/Textfield.ts",
-            "line": 379,
+            "line": 377,
             "description": "Called by the Layer to which this Game Object is attached",
             "itemtype": "method",
             "name": "render",
@@ -24698,7 +24698,7 @@
         },
         {
             "file": "src/gameobjects/Textfield.ts",
-            "line": 429,
+            "line": 425,
             "description": "Renders the GameObject using WebGL.",
             "itemtype": "method",
             "name": "renderGL",
@@ -28592,7 +28592,7 @@
         },
         {
             "file": "src/geom/Ray.ts",
-            "line": 200,
+            "line": 197,
             "description": "Get a string representation of the ray.",
             "itemtype": "method",
             "name": "toString",
@@ -37921,7 +37921,7 @@
         },
         {
             "file": "src/input/Touch.ts",
-            "line": 468,
+            "line": 467,
             "description": "This method is in charge of cancelling (removing) a \"finger\".\nYou have to pass this method a id which is used to idenfied the finger that was cancelled.",
             "itemtype": "method",
             "name": "_cancelFinger",
@@ -37946,7 +37946,7 @@
         },
         {
             "file": "src/input/Touch.ts",
-            "line": 495,
+            "line": 493,
             "description": "This method is in charge of creating and assigning (removing) a \"finger\" when it has entered the dom element.\nYou have to pass this method a id which is used to idenfied the finger that was cancelled.",
             "itemtype": "method",
             "name": "_enterFinger",
@@ -37971,7 +37971,7 @@
         },
         {
             "file": "src/input/Touch.ts",
-            "line": 516,
+            "line": 514,
             "description": "This method is in charge of removing an assigned \"finger\" when it has left the DOM Elemetn.\nYou have to pass this method a id which is used to idenfied the finger that left.",
             "itemtype": "method",
             "name": "_leaveFinger",
@@ -37996,7 +37996,7 @@
         },
         {
             "file": "src/input/Touch.ts",
-            "line": 533,
+            "line": 531,
             "description": "This method is in charge of updating the coordinates of a \"finger\" when it has moved..\nYou have to pass this method a id which is used to idenfied the finger that moved.",
             "itemtype": "method",
             "name": "_moveFinger",
@@ -38021,7 +38021,7 @@
         },
         {
             "file": "src/input/Touch.ts",
-            "line": 552,
+            "line": 550,
             "description": "-------------------\n Touch Events\n-------------------",
             "class": "Kiwi.Input.Touch",
             "module": "Kiwi",
@@ -38030,7 +38030,7 @@
         },
         {
             "file": "src/input/Touch.ts",
-            "line": 559,
+            "line": 557,
             "description": "This method runs when the a touch start event is fired by the browser and then assigns the event to a pointer that is currently not active.\nhttps://developer.mozilla.org/en-US/docs/DOM/TouchList",
             "itemtype": "method",
             "name": "onTouchStart",
@@ -38050,7 +38050,7 @@
         },
         {
             "file": "src/input/Touch.ts",
-            "line": 577,
+            "line": 575,
             "description": "Doesn't appear to be supported by most browsers yet but if it was it would fire events when a touch is canceled.\nhttp://www.w3.org/TR/touch-events/#dfn-touchcancel",
             "itemtype": "method",
             "name": "onTouchCancel",
@@ -38070,7 +38070,7 @@
         },
         {
             "file": "src/input/Touch.ts",
-            "line": 594,
+            "line": 592,
             "description": "Doesn't appear to be supported by most browsers yet. But if it was would fire events when touch events enter an element.",
             "itemtype": "method",
             "name": "onTouchEnter",
@@ -38090,7 +38090,7 @@
         },
         {
             "file": "src/input/Touch.ts",
-            "line": 612,
+            "line": 610,
             "description": "Doesn't appear to be supported by most browsers yet. Would fire events when a 'finger' leaves an element.     \nWould be handly for when an finger 'leaves' the stage.",
             "itemtype": "method",
             "name": "onTouchLeave",
@@ -38110,7 +38110,7 @@
         },
         {
             "file": "src/input/Touch.ts",
-            "line": 631,
+            "line": 629,
             "description": "When a touch pointer moves. This method updates the appropriate pointer.",
             "itemtype": "method",
             "name": "onTouchMove",
@@ -38130,7 +38130,7 @@
         },
         {
             "file": "src/input/Touch.ts",
-            "line": 648,
+            "line": 646,
             "description": "When a touch event gets released.\nhttps://developer.mozilla.org/en-US/docs/DOM/TouchList",
             "itemtype": "method",
             "name": "onTouchEnd",
@@ -38150,7 +38150,7 @@
         },
         {
             "file": "src/input/Touch.ts",
-            "line": 667,
+            "line": 664,
             "description": "-------------------\n Pointer Events\n-------------------",
             "class": "Kiwi.Input.Touch",
             "module": "Kiwi",
@@ -38159,7 +38159,7 @@
         },
         {
             "file": "src/input/Touch.ts",
-            "line": 674,
+            "line": 671,
             "description": "Event that is fired when a pointer is initially pressed.",
             "itemtype": "method",
             "name": "onPointerStart",
@@ -38179,7 +38179,7 @@
         },
         {
             "file": "src/input/Touch.ts",
-            "line": 686,
+            "line": 683,
             "description": "Event that is fired by a pointer event listener upon a pointer canceling for some reason.",
             "itemtype": "method",
             "name": "onPointerCancel",
@@ -38199,7 +38199,7 @@
         },
         {
             "file": "src/input/Touch.ts",
-            "line": 698,
+            "line": 695,
             "description": "Event that is fired by a pointer event listener upon a pointer entering the DOM Element the event listener is attached to.",
             "itemtype": "method",
             "name": "onPointerEnter",
@@ -38219,7 +38219,7 @@
         },
         {
             "file": "src/input/Touch.ts",
-            "line": 710,
+            "line": 707,
             "description": "Event that is fired by a pointer event listener upon a pointer being leaving the DOM Element the event listener is attached to.",
             "itemtype": "method",
             "name": "onPointerLeave",
@@ -38239,7 +38239,7 @@
         },
         {
             "file": "src/input/Touch.ts",
-            "line": 722,
+            "line": 719,
             "description": "Event that is fired by a pointer event listener upon a pointer moving.",
             "itemtype": "method",
             "name": "onPointerMove",
@@ -38257,7 +38257,7 @@
         },
         {
             "file": "src/input/Touch.ts",
-            "line": 733,
+            "line": 730,
             "description": "Event that is fired by a pointer event listener upon a pointer being released.",
             "itemtype": "method",
             "name": "onPointerEnd",
@@ -38277,7 +38277,7 @@
         },
         {
             "file": "src/input/Touch.ts",
-            "line": 746,
+            "line": 743,
             "description": "-----------------\n Normal Methods \n-----------------",
             "class": "Kiwi.Input.Touch",
             "module": "Kiwi",
@@ -38286,7 +38286,7 @@
         },
         {
             "file": "src/input/Touch.ts",
-            "line": 753,
+            "line": 750,
             "description": "The update loop fro the touch manager.",
             "itemtype": "method",
             "name": "update",
@@ -38299,7 +38299,7 @@
         },
         {
             "file": "src/input/Touch.ts",
-            "line": 771,
+            "line": 768,
             "description": "This method removes all of the event listeners and thus 'stops' the touch manager.",
             "itemtype": "method",
             "name": "stop",
@@ -38312,7 +38312,7 @@
         },
         {
             "file": "src/input/Touch.ts",
-            "line": 800,
+            "line": 797,
             "description": "Resets all of the fingers/pointers to their default states.",
             "itemtype": "method",
             "name": "reset",
@@ -38325,7 +38325,7 @@
         },
         {
             "file": "src/render/renderers/Renderer.ts",
-            "line": 31,
+            "line": 30,
             "description": "Identifier for this renderer",
             "itemtype": "property",
             "name": "RENDERER_ID",
@@ -38340,7 +38340,7 @@
         },
         {
             "file": "src/render/renderers/Renderer.ts",
-            "line": 40,
+            "line": 39,
             "description": "The camera matrix",
             "itemtype": "property",
             "name": "camMatrix",
@@ -38354,7 +38354,7 @@
         },
         {
             "file": "src/render/renderers/Renderer.ts",
-            "line": 48,
+            "line": 47,
             "itemtype": "property",
             "name": "loaded",
             "type": "Array",
@@ -38367,7 +38367,7 @@
         },
         {
             "file": "src/render/renderers/Renderer.ts",
-            "line": 56,
+            "line": 55,
             "description": "Reference to the shaderManager - used for requesting shaders.",
             "itemtype": "property",
             "name": "shaderManager",
@@ -38381,7 +38381,7 @@
         },
         {
             "file": "src/render/renderers/Renderer.ts",
-            "line": 64,
+            "line": 63,
             "description": "Enables the renderer (for override)",
             "itemtype": "method",
             "name": "enable",
@@ -38408,7 +38408,7 @@
         },
         {
             "file": "src/render/renderers/Renderer.ts",
-            "line": 75,
+            "line": 74,
             "description": "Enables the renderer (for override)",
             "itemtype": "method",
             "name": "disable",
@@ -38435,7 +38435,7 @@
         },
         {
             "file": "src/render/renderers/Renderer.ts",
-            "line": 86,
+            "line": 85,
             "description": "Enables the renderer (for override)",
             "itemtype": "method",
             "name": "clear",
@@ -38462,7 +38462,7 @@
         },
         {
             "file": "src/render/renderers/Renderer.ts",
-            "line": 96,
+            "line": 95,
             "description": "Draw to the draw or frame buffer (for override)",
             "itemtype": "method",
             "name": "draw",
@@ -38482,7 +38482,7 @@
         },
         {
             "file": "src/render/renderers/Renderer.ts",
-            "line": 105,
+            "line": 104,
             "description": "Updates the stage resolution uniforms (for override)",
             "itemtype": "method",
             "name": "updateStageResolution",
@@ -38507,7 +38507,7 @@
         },
         {
             "file": "src/render/renderers/Renderer.ts",
-            "line": 115,
+            "line": 114,
             "description": "Updates the texture size uniforms (for override)",
             "itemtype": "method",
             "name": "updateTextureSize",
@@ -38532,7 +38532,7 @@
         },
         {
             "file": "src/render/renderers/Renderer.ts",
-            "line": 126,
+            "line": 125,
             "description": "The shader pair used by the renderer",
             "itemtype": "property",
             "name": "shaderPair",
@@ -38546,7 +38546,7 @@
         },
         {
             "file": "src/render/renderers/Renderer.ts",
-            "line": 135,
+            "line": 134,
             "description": "This renderer's blend mode data.",
             "itemtype": "property",
             "name": "blendMode",
@@ -38561,7 +38561,7 @@
         },
         {
             "file": "src/render/renderers/Renderer.ts",
-            "line": 145,
+            "line": 144,
             "description": "Returns whether this is a batch renderer.",
             "itemtype": "property",
             "name": "isBatchRenderer",
@@ -38575,7 +38575,7 @@
         },
         {
             "file": "src/render/renderers/TextureAtlasRenderer.ts",
-            "line": 34,
+            "line": 33,
             "description": "The identifier for this renderer.",
             "itemtype": "property",
             "name": "RENDERER_ID",
@@ -38590,7 +38590,7 @@
         },
         {
             "file": "src/render/renderers/TextureAtlasRenderer.ts",
-            "line": 43,
+            "line": 42,
             "description": "The shaderPair that this renderer uses.",
             "itemtype": "property",
             "name": "shaderPair",
@@ -38604,7 +38604,7 @@
         },
         {
             "file": "src/render/renderers/TextureAtlasRenderer.ts",
-            "line": 51,
+            "line": 50,
             "description": "The reference to the shaderPair.",
             "itemtype": "property",
             "name": "_shaderPairName",
@@ -38619,7 +38619,7 @@
         },
         {
             "file": "src/render/renderers/TextureAtlasRenderer.ts",
-            "line": 60,
+            "line": 59,
             "description": "The maximum number of items that can be rendered by the renderer (not enforced)",
             "itemtype": "property",
             "name": "_maxItems",
@@ -38633,7 +38633,7 @@
         },
         {
             "file": "src/render/renderers/TextureAtlasRenderer.ts",
-            "line": 68,
+            "line": 67,
             "description": "The Vertex Buffer",
             "itemtype": "property",
             "name": "_vertexBuffer",
@@ -38647,7 +38647,7 @@
         },
         {
             "file": "src/render/renderers/TextureAtlasRenderer.ts",
-            "line": 76,
+            "line": 75,
             "description": "The Index Buffer",
             "itemtype": "property",
             "name": "_indexBuffer",
@@ -38661,7 +38661,7 @@
         },
         {
             "file": "src/render/renderers/TextureAtlasRenderer.ts",
-            "line": 84,
+            "line": 83,
             "description": "Enables the renderer ready for drawing",
             "itemtype": "method",
             "name": "enable",
@@ -38688,7 +38688,7 @@
         },
         {
             "file": "src/render/renderers/TextureAtlasRenderer.ts",
-            "line": 104,
+            "line": 103,
             "description": "Disables the renderer",
             "itemtype": "method",
             "name": "disable",
@@ -38708,7 +38708,7 @@
         },
         {
             "file": "src/render/renderers/TextureAtlasRenderer.ts",
-            "line": 115,
+            "line": 114,
             "description": "Clears the vertex buffer.",
             "itemtype": "method",
             "name": "clear",
@@ -38728,7 +38728,7 @@
         },
         {
             "file": "src/render/renderers/TextureAtlasRenderer.ts",
-            "line": 126,
+            "line": 125,
             "description": "Makes a draw call, this is where things actually get rendered to the draw buffer (or a framebuffer).",
             "itemtype": "method",
             "name": "draw",
@@ -38748,7 +38748,7 @@
         },
         {
             "file": "src/render/renderers/TextureAtlasRenderer.ts",
-            "line": 146,
+            "line": 144,
             "description": "Generates quad indices",
             "itemtype": "method",
             "name": "_generateIndices",
@@ -38768,7 +38768,7 @@
         },
         {
             "file": "src/render/renderers/TextureAtlasRenderer.ts",
-            "line": 161,
+            "line": 159,
             "description": "Updates the stage resolution uniforms",
             "itemtype": "method",
             "name": "updateStageResolution",
@@ -38793,7 +38793,7 @@
         },
         {
             "file": "src/render/renderers/TextureAtlasRenderer.ts",
-            "line": 172,
+            "line": 170,
             "description": "Updates the texture size uniforms",
             "itemtype": "method",
             "name": "updateTextureSize",
@@ -38818,7 +38818,7 @@
         },
         {
             "file": "src/render/renderers/TextureAtlasRenderer.ts",
-            "line": 183,
+            "line": 181,
             "description": "Sets shader pair by name",
             "itemtype": "method",
             "name": "setShaderPair",
@@ -38839,7 +38839,7 @@
         },
         {
             "file": "src/render/renderers/TextureAtlasRenderer.ts",
-            "line": 195,
+            "line": 193,
             "description": "Collates all xy and uv coordinates into a buffer ready for upload to video memory",
             "itemtype": "method",
             "name": "addToBatch",
@@ -38869,7 +38869,7 @@
         },
         {
             "file": "src/render/renderers/TextureAtlasRenderer.ts",
-            "line": 230,
+            "line": 228,
             "description": "Adds an array of precalculated xyuv values to the item array",
             "itemtype": "method",
             "name": "concatBatch",
@@ -38889,7 +38889,7 @@
         },
         {
             "file": "src/render/shaders/ShaderPair.ts",
-            "line": 24,
+            "line": 22,
             "itemtype": "property",
             "name": "RENDERER_ID",
             "type": "string",
@@ -38903,7 +38903,7 @@
         },
         {
             "file": "src/render/shaders/ShaderPair.ts",
-            "line": 33,
+            "line": 31,
             "description": "Initialise the shader pair.",
             "itemtype": "method",
             "name": "init",
@@ -38923,7 +38923,7 @@
         },
         {
             "file": "src/render/shaders/ShaderPair.ts",
-            "line": 47,
+            "line": 44,
             "description": "Returns whether the shader pair has been loaded and compiled.",
             "itemtype": "property",
             "name": "loaded",
@@ -38937,7 +38937,7 @@
         },
         {
             "file": "src/render/shaders/ShaderPair.ts",
-            "line": 55,
+            "line": 52,
             "description": "Vertex shader",
             "itemtype": "property",
             "name": "vertShader",
@@ -38951,7 +38951,7 @@
         },
         {
             "file": "src/render/shaders/ShaderPair.ts",
-            "line": 63,
+            "line": 60,
             "description": "Fragment shader",
             "itemtype": "property",
             "name": "fragShader",
@@ -38965,7 +38965,7 @@
         },
         {
             "file": "src/render/shaders/ShaderPair.ts",
-            "line": 71,
+            "line": 68,
             "description": "The WebGl shader program",
             "itemtype": "property",
             "name": "shaderProgram",
@@ -38979,7 +38979,7 @@
         },
         {
             "file": "src/render/shaders/ShaderPair.ts",
-            "line": 79,
+            "line": 76,
             "description": "Attaches the shaders to the program and links them",
             "itemtype": "method",
             "name": "attach",
@@ -39013,7 +39013,7 @@
         },
         {
             "file": "src/render/shaders/ShaderPair.ts",
-            "line": 96,
+            "line": 93,
             "description": "Compiles the shaders",
             "itemtype": "method",
             "name": "compile",
@@ -39047,7 +39047,7 @@
         },
         {
             "file": "src/render/shaders/ShaderPair.ts",
-            "line": 116,
+            "line": 113,
             "description": "Uniform descriptors",
             "itemtype": "property",
             "name": "uniforms",
@@ -39061,7 +39061,7 @@
         },
         {
             "file": "src/render/shaders/ShaderPair.ts",
-            "line": 124,
+            "line": 121,
             "description": "Attribute descriptors",
             "itemtype": "property",
             "name": "attributes",
@@ -39075,7 +39075,7 @@
         },
         {
             "file": "src/render/shaders/ShaderPair.ts",
-            "line": 133,
+            "line": 130,
             "description": "Shader frag source (for override)",
             "itemtype": "property",
             "name": "texture2DFrag",
@@ -39089,7 +39089,7 @@
         },
         {
             "file": "src/render/shaders/ShaderPair.ts",
-            "line": 141,
+            "line": 138,
             "description": "Shader vert source (for override)",
             "itemtype": "property",
             "name": "texture2DVert",
@@ -39103,7 +39103,7 @@
         },
         {
             "file": "src/render/shaders/ShaderPair.ts",
-            "line": 149,
+            "line": 146,
             "description": "Sets a single uniform value and marks it as dirty.",
             "itemtype": "method",
             "name": "setParam",
@@ -39128,7 +39128,7 @@
         },
         {
             "file": "src/render/shaders/ShaderPair.ts",
-            "line": 161,
+            "line": 158,
             "description": "Applies all uniforms to the uploaded program",
             "itemtype": "method",
             "name": "applyUniforms",
@@ -39148,7 +39148,7 @@
         },
         {
             "file": "src/render/shaders/ShaderPair.ts",
-            "line": 173,
+            "line": 170,
             "description": "Applies a single uniforms to the uploaded program",
             "itemtype": "method",
             "name": "applyUniform",
@@ -39173,7 +39173,7 @@
         },
         {
             "file": "src/render/shaders/ShaderPair.ts",
-            "line": 188,
+            "line": 185,
             "description": "Initialises all uniforms",
             "itemtype": "method",
             "name": "initUniforms",
@@ -39950,7 +39950,7 @@
         },
         {
             "file": "src/render/GLRenderManager.ts",
-            "line": 41,
+            "line": 35,
             "description": "Initialises all WebGL rendering services",
             "itemtype": "method",
             "name": "boot",
@@ -39963,7 +39963,7 @@
         },
         {
             "file": "src/render/GLRenderManager.ts",
-            "line": 54,
+            "line": 48,
             "description": "The type of object that this is.",
             "itemtype": "method",
             "name": "objType",
@@ -39980,7 +39980,7 @@
         },
         {
             "file": "src/render/GLRenderManager.ts",
-            "line": 64,
+            "line": 58,
             "description": "The game that this renderer is used with.",
             "itemtype": "property",
             "name": "_game",
@@ -39994,7 +39994,7 @@
         },
         {
             "file": "src/render/GLRenderManager.ts",
-            "line": 72,
+            "line": 66,
             "description": "The texture manager object used to allocate GL Textures.",
             "itemtype": "property",
             "name": "_textureManager",
@@ -40008,7 +40008,7 @@
         },
         {
             "file": "src/render/GLRenderManager.ts",
-            "line": 80,
+            "line": 74,
             "description": "The shader manager object used to allocate GL Shaders.",
             "itemtype": "property",
             "name": "_shaderManager",
@@ -40022,7 +40022,7 @@
         },
         {
             "file": "src/render/GLRenderManager.ts",
-            "line": 91,
+            "line": 85,
             "description": "The stage resolution in pixels",
             "itemtype": "property",
             "name": "_stageResolution",
@@ -40036,7 +40036,7 @@
         },
         {
             "file": "src/render/GLRenderManager.ts",
-            "line": 99,
+            "line": 93,
             "description": "The renderer object that is in use during a rendering batch.",
             "itemtype": "property",
             "name": "_currentRenderer",
@@ -40050,7 +40050,7 @@
         },
         {
             "file": "src/render/GLRenderManager.ts",
-            "line": 107,
+            "line": 101,
             "description": "The current blend mode.",
             "itemtype": "property",
             "name": "_currentBlendMode",
@@ -40065,7 +40065,7 @@
         },
         {
             "file": "src/render/GLRenderManager.ts",
-            "line": 116,
+            "line": 110,
             "description": "Tally of number of entities rendered per frame",
             "itemtype": "property",
             "name": "_entityCount",
@@ -40080,7 +40080,7 @@
         },
         {
             "file": "src/render/GLRenderManager.ts",
-            "line": 125,
+            "line": 119,
             "description": "Tally of number of draw calls per frame",
             "itemtype": "property",
             "name": "numDrawCalls",
@@ -40095,7 +40095,7 @@
         },
         {
             "file": "src/render/GLRenderManager.ts",
-            "line": 134,
+            "line": 128,
             "description": "Maximum allowable sprites to render per frame\nNote:Not currently used  - candidate for deletion",
             "itemtype": "property",
             "name": "_maxItems",
@@ -40110,7 +40110,21 @@
         },
         {
             "file": "src/render/GLRenderManager.ts",
-            "line": 148,
+            "line": 138,
+            "description": "Camera matrix used on graphics card",
+            "itemtype": "property",
+            "name": "camMatrix",
+            "type": "Float32Array",
+            "access": "public",
+            "tagname": "",
+            "class": "Kiwi.Renderers.GLRenderManager",
+            "module": "Kiwi",
+            "submodule": "Renderers",
+            "namespace": "Kiwi.Renderers"
+        },
+        {
+            "file": "src/render/GLRenderManager.ts",
+            "line": 146,
             "description": "The most recently bound texture atlas.",
             "itemtype": "property",
             "name": "_currentTextureAtlas",
@@ -40124,7 +40138,7 @@
         },
         {
             "file": "src/render/GLRenderManager.ts",
-            "line": 156,
+            "line": 154,
             "description": "Adds a texture to the Texture Manager.",
             "itemtype": "method",
             "name": "addTexture",
@@ -40149,7 +40163,7 @@
         },
         {
             "file": "src/render/GLRenderManager.ts",
-            "line": 167,
+            "line": 165,
             "description": "An array of renderers. Shared renderers are used for batch rendering. Multiple gameobjects can use the same renderer\ninstance and add rendering info to a batch rather than rendering individually. \nThis means only one draw call is necessary to render a number of objects. The most common use of this is standard 2d sprite rendering,\nand the TextureAtlasRenderer is added by default as a shared renderer. Sprites, StaticImages and Tilemaps (core gameobjects) can all use the\nsame renderer/shader combination and be drawn as part of the same batch.\nCustom gameobjects can also choose to use a shared renderer, fo example in the case that a custom gameobject's rendering requirements matched the TextureAtlasRenderer\ncapabilities.",
             "itemtype": "property",
             "name": "_sharedRenderers",
@@ -40163,7 +40177,7 @@
         },
         {
             "file": "src/render/GLRenderManager.ts",
-            "line": 182,
+            "line": 180,
             "description": "Adds a renderer to the sharedRenderer array. The rendererID is a string that must match a renderer property of the Kiwi.Renderers object. \nIf a match is found and an instance does not already exist, then a renderer is instantiated and added to the array.",
             "itemtype": "method",
             "name": "addSharedRenderer",
@@ -40192,7 +40206,7 @@
         },
         {
             "file": "src/render/GLRenderManager.ts",
-            "line": 206,
+            "line": 204,
             "description": "Adds a cloned renderer to the sharedRenderer array. The rendererID is a string that must match a renderer property of the Kiwi.Renderers object. The cloneID is the name for the cloned renderer.\n\nIf a match is found and an instance does not already exist, then a renderer is instantiated and added to the array.\n\nCloned shared renderers are useful if some items in your scene will use a special shader or blend mode, but others will not. You can subsequently access the clones with a normal requestSharedRenderer() call. You should use this instead of requestRendererInstance() whenever possible, because shared renderers are more efficient than instances.",
             "itemtype": "method",
             "name": "addSharedRendererClone",
@@ -40227,7 +40241,7 @@
         },
         {
             "file": "src/render/GLRenderManager.ts",
-            "line": 235,
+            "line": 233,
             "description": "Requests a shared renderer. A game object that wants to use a shared renderer uses this method to obtain a reference to the shared renderer instance.",
             "itemtype": "method",
             "name": "requestSharedRenderer",
@@ -40256,7 +40270,7 @@
         },
         {
             "file": "src/render/GLRenderManager.ts",
-            "line": 261,
+            "line": 259,
             "description": "Requests a new renderer instance. This factory method is the only way gameobjects should instantiate their own renderer. \nThe rendererID is a string that must match a renderer property of the Kiwi.Renderers object. \nIf a match is found then a renderer is instantiated and returned. Gameobjects which have rendering requirements that do not suit\nbatch rendering use this technique.",
             "itemtype": "method",
             "name": "requestRendererInstance",
@@ -40285,7 +40299,7 @@
         },
         {
             "file": "src/render/GLRenderManager.ts",
-            "line": 294,
+            "line": 292,
             "description": "Performs initialisation required for single game instance - happens once, at bootup\nSets global GL state.\nInitialises managers for shaders and textures.\nInstantiates the default shared renderer (TextureAtlasRenderer)",
             "itemtype": "method",
             "name": "_init",
@@ -40298,7 +40312,7 @@
         },
         {
             "file": "src/render/GLRenderManager.ts",
-            "line": 347,
+            "line": 345,
             "description": "Scales the viewport according to a scale mode and space dimensions.\n\nThis is used internally for compatibility with CocoonJS and should not be called.",
             "itemtype": "method",
             "name": "scaleViewport",
@@ -40334,7 +40348,7 @@
         },
         {
             "file": "src/render/GLRenderManager.ts",
-            "line": 395,
+            "line": 393,
             "description": "Performs initialisation required when switching to a different state. Called when a state has been switched to.\nThe textureManager is told to clear its contents from video memory, then rebuild its cache of textures from the state's texture library.",
             "itemtype": "method",
             "name": "initState",
@@ -40347,7 +40361,7 @@
         },
         {
             "file": "src/render/GLRenderManager.ts",
-            "line": 407,
+            "line": 405,
             "description": "Performs cleanup required before switching to a different state. Called whwn a state is about to be switched from. The textureManager is told to empty its cache.",
             "itemtype": "method",
             "name": "endState",
@@ -40367,7 +40381,7 @@
         },
         {
             "file": "src/render/GLRenderManager.ts",
-            "line": 419,
+            "line": 417,
             "description": "Manages rendering of the scene graph - called once per frame.\nSets up per frame gl uniforms such as the view matrix and camera offset.\nClears the current renderer ready for a new batch. \nInitiates recursive render of scene graph starting at the root.",
             "itemtype": "method",
             "name": "render",
@@ -40387,7 +40401,7 @@
         },
         {
             "file": "src/render/GLRenderManager.ts",
-            "line": 492,
+            "line": 490,
             "description": "Creates a new render sequence",
             "itemtype": "method",
             "name": "collateRenderSequence",
@@ -40400,7 +40414,7 @@
         },
         {
             "file": "src/render/GLRenderManager.ts",
-            "line": 503,
+            "line": 501,
             "description": "Adds a child to the render sequence (may be a group with children of it's own)",
             "itemtype": "method",
             "name": "collateChild",
@@ -40413,7 +40427,7 @@
         },
         {
             "file": "src/render/GLRenderManager.ts",
-            "line": 528,
+            "line": 526,
             "description": "Sorts the render sequence into batches. Each batch requires the same renderer/shader/texture combination.",
             "itemtype": "method",
             "name": "collateBatches",
@@ -40426,7 +40440,7 @@
         },
         {
             "file": "src/render/GLRenderManager.ts",
-            "line": 557,
+            "line": 555,
             "description": "Renders all the batches",
             "itemtype": "method",
             "name": "renderBatches",
@@ -40451,7 +40465,7 @@
         },
         {
             "file": "src/render/GLRenderManager.ts",
-            "line": 569,
+            "line": 567,
             "description": "Renders a single batch",
             "itemtype": "method",
             "name": "renderBatch",
@@ -40481,7 +40495,7 @@
         },
         {
             "file": "src/render/GLRenderManager.ts",
-            "line": 605,
+            "line": 603,
             "description": "Calls the render function on a single entity",
             "itemtype": "method",
             "name": "renderEntity",
@@ -40513,7 +40527,7 @@
         },
         {
             "file": "src/render/GLRenderManager.ts",
-            "line": 618,
+            "line": 616,
             "description": "Ensures the atlas and renderer needed for a batch is setup",
             "itemtype": "method",
             "name": "setupGLState",
@@ -40535,7 +40549,7 @@
         },
         {
             "file": "src/render/GLRenderManager.ts",
-            "line": 630,
+            "line": 628,
             "description": "Switch renderer to the one needed by the entity that needs rendering",
             "itemtype": "method",
             "name": "_switchRenderer",
@@ -40560,7 +40574,7 @@
         },
         {
             "file": "src/render/GLRenderManager.ts",
-            "line": 643,
+            "line": 641,
             "description": "Switch texture to the one needed by the entity that needs rendering",
             "itemtype": "method",
             "name": "_switchTexture",
@@ -40585,7 +40599,7 @@
         },
         {
             "file": "src/render/GLRenderManager.ts",
-            "line": 655,
+            "line": 653,
             "description": "Switch blend mode to a new set of constants",
             "itemtype": "method",
             "name": "_switchBlendMode",
@@ -40611,7 +40625,7 @@
         },
         {
             "file": "src/render/GLShaderManager.ts",
-            "line": 43,
+            "line": 40,
             "description": "An object containing a set of properties each of which references a ShaderPair.",
             "itemtype": "property",
             "name": "_shaderPairs",
@@ -40625,7 +40639,7 @@
         },
         {
             "file": "src/render/GLShaderManager.ts",
-            "line": 51,
+            "line": 48,
             "description": "The shader program that is currently set to be used useing gl.useProgram.",
             "itemtype": "property",
             "name": "currentShader",
@@ -40639,7 +40653,7 @@
         },
         {
             "file": "src/render/GLShaderManager.ts",
-            "line": 64,
+            "line": 61,
             "description": "Sets up a default shaderPair.",
             "itemtype": "method",
             "name": "init",
@@ -40664,7 +40678,7 @@
         },
         {
             "file": "src/render/GLShaderManager.ts",
-            "line": 76,
+            "line": 73,
             "description": "Provides a reference to a ShaderPair. If the requested ShaderPair exists as a property on the _shaderPairs object it will be returned if already loaded,\notherwise it will be loaded, then returned.\n\nIf the request is not on the list, the Kiwi.Shaders object will  be checked for a property name that matches shaderID and a new ShaderPair\nwill be instantiated, loaded, and set for use.",
             "itemtype": "method",
             "name": "requestShader",
@@ -40698,7 +40712,7 @@
         },
         {
             "file": "src/render/GLShaderManager.ts",
-            "line": 118,
+            "line": 115,
             "description": "Tests to see if a ShaderPair property named ShaderID exists on Kiwi.Shaders. Can be used to test for the availability of specific shaders (for fallback)",
             "itemtype": "method",
             "name": "shaderExists",
@@ -40727,7 +40741,7 @@
         },
         {
             "file": "src/render/GLShaderManager.ts",
-            "line": 130,
+            "line": 127,
             "description": "Creates a new instance of a ShaderPair and adds a reference to the _shaderPairs object",
             "itemtype": "method",
             "name": "_addShader",
@@ -40756,7 +40770,7 @@
         },
         {
             "file": "src/render/GLShaderManager.ts",
-            "line": 143,
+            "line": 140,
             "description": "Tells a ShaderPair to load (compile and link)",
             "itemtype": "method",
             "name": "_loadShader",
@@ -40781,7 +40795,7 @@
         },
         {
             "file": "src/render/GLShaderManager.ts",
-            "line": 154,
+            "line": 151,
             "description": "Changes gl state so that the shaderProgram contined in a ShaderPir is bound for use",
             "itemtype": "method",
             "name": "_useShader",
@@ -40806,7 +40820,7 @@
         },
         {
             "file": "src/render/GLTextureManager.ts",
-            "line": 28,
+            "line": 27,
             "description": "The default maximum amount of texture memory to use before swapping textures",
             "itemtype": "property",
             "name": "DEFAULT_MAX_TEX_MEM_MB",
@@ -40821,7 +40835,7 @@
         },
         {
             "file": "src/render/GLTextureManager.ts",
-            "line": 37,
+            "line": 36,
             "description": "The maximum amount of texture memory to use before swapping textures, initialised from DEFAULT_MAX_TEX_MEM_MB",
             "itemtype": "property",
             "name": "maxTextureMem",
@@ -40835,7 +40849,7 @@
         },
         {
             "file": "src/render/GLTextureManager.ts",
-            "line": 45,
+            "line": 44,
             "description": "The amount of texture memory currently uplaoded",
             "itemtype": "property",
             "name": "usedTextureMem",
@@ -40849,7 +40863,7 @@
         },
         {
             "file": "src/render/GLTextureManager.ts",
-            "line": 56,
+            "line": 55,
             "description": "The number of textures currently uplaoded",
             "itemtype": "property",
             "name": "usedTextureMem",
@@ -40863,7 +40877,7 @@
         },
         {
             "file": "src/render/GLTextureManager.ts",
-            "line": 67,
+            "line": 66,
             "description": "The number of textures uploads in the last frame",
             "itemtype": "property",
             "name": "numTextureWrites",
@@ -40877,7 +40891,7 @@
         },
         {
             "file": "src/render/GLTextureManager.ts",
-            "line": 76,
+            "line": 75,
             "description": "An array of references to all texture wrappers",
             "itemtype": "property",
             "name": "_textureWrapperCache",
@@ -40891,7 +40905,7 @@
         },
         {
             "file": "src/render/GLTextureManager.ts",
-            "line": 84,
+            "line": 83,
             "description": "Adds a texture wrapper to the cache",
             "itemtype": "method",
             "name": "_addTextureToCache",
@@ -40911,7 +40925,7 @@
         },
         {
             "file": "src/render/GLTextureManager.ts",
-            "line": 94,
+            "line": 93,
             "description": "Deletes a texture from memory and removes the wrapper from the cache",
             "itemtype": "method",
             "name": "_deleteTexture",
@@ -40936,7 +40950,7 @@
         },
         {
             "file": "src/render/GLTextureManager.ts",
-            "line": 108,
+            "line": 107,
             "description": "Uploads a texture to video memory",
             "itemtype": "method",
             "name": "_uploadTexture",
@@ -40964,7 +40978,7 @@
         },
         {
             "file": "src/render/GLTextureManager.ts",
-            "line": 129,
+            "line": 128,
             "description": "Uploads a texture library to video memory",
             "itemtype": "method",
             "name": "uploadTextureLibrary",
@@ -40989,7 +41003,7 @@
         },
         {
             "file": "src/render/GLTextureManager.ts",
-            "line": 144,
+            "line": 143,
             "description": "Uploads a single texture to video memory",
             "itemtype": "method",
             "name": "uploadTexture",
@@ -41014,7 +41028,7 @@
         },
         {
             "file": "src/render/GLTextureManager.ts",
-            "line": 155,
+            "line": 154,
             "description": "Adds a texture wrapper to the manager. This both adds the wrapper to the manager cache, and attempts to upload the attached texture to video memory.",
             "itemtype": "method",
             "name": "registerTextureWrapper",
@@ -41040,7 +41054,7 @@
         },
         {
             "file": "src/render/GLTextureManager.ts",
-            "line": 171,
+            "line": 170,
             "description": "Removes all textures from video memory and clears the wrapper cache",
             "itemtype": "method",
             "name": "clearTextures",
@@ -41060,7 +41074,7 @@
         },
         {
             "file": "src/render/GLTextureManager.ts",
-            "line": 189,
+            "line": 187,
             "description": "Binds the texture ready for use, uploads it if it isn't already",
             "itemtype": "method",
             "name": "useTexture",
@@ -41095,7 +41109,7 @@
         },
         {
             "file": "src/render/GLTextureManager.ts",
-            "line": 230,
+            "line": 228,
             "description": "Attempts to free space in video memory.\n\nThis removes textures sequentially, starting from the first cached texture. This may remove textures that are in use. These should automatically re-upload into the last position. After a few frames, this will push in-use textures to the safe end of the queue.\n\nIf there are too many textures in use to fit in memory, they will all be cycled every frame, even if it would be more efficient to swap out one or two very large textures and preserve several smaller ones. This is an issue with this implementation and should be fixed.\n\nThis behaviour was changed in v1.1.0. Previous versions used a different memory freeing algorithm.",
             "itemtype": "method",
             "name": "_freeSpace",
@@ -41123,7 +41137,7 @@
         },
         {
             "file": "src/render/GLTextureWrapper.ts",
-            "line": 32,
+            "line": 30,
             "description": "The textureAtlas used by the GLTexture",
             "itemtype": "property",
             "name": "textureAtlas",
@@ -41135,7 +41149,7 @@
         },
         {
             "file": "src/render/GLTextureWrapper.ts",
-            "line": 40,
+            "line": 38,
             "description": "The number of bytes in the texture",
             "itemtype": "property",
             "name": "numBytes",
@@ -41147,7 +41161,7 @@
         },
         {
             "file": "src/render/GLTextureWrapper.ts",
-            "line": 51,
+            "line": 49,
             "description": "Returns whether the texture has been created",
             "itemtype": "property",
             "name": "created",
@@ -41159,7 +41173,7 @@
         },
         {
             "file": "src/render/GLTextureWrapper.ts",
-            "line": 61,
+            "line": 59,
             "description": "Returns whether the texture has been uploaded to video memory",
             "itemtype": "property",
             "name": "uploaded",
@@ -41171,7 +41185,7 @@
         },
         {
             "file": "src/render/GLTextureWrapper.ts",
-            "line": 71,
+            "line": 69,
             "itemtype": "property",
             "name": "texture",
             "type": "WebGLTexture",
@@ -41184,7 +41198,21 @@
         },
         {
             "file": "src/render/GLTextureWrapper.ts",
-            "line": 79,
+            "line": 77,
+            "description": "The image wrapped by this wrapper.",
+            "itemtype": "property",
+            "name": "_image",
+            "type": "HTMLImageElement",
+            "access": "private",
+            "tagname": "",
+            "class": "Kiwi.Renderers.GLTextureWrapper",
+            "module": "Kiwi",
+            "submodule": "Renderers",
+            "namespace": "Kiwi.Renderers"
+        },
+        {
+            "file": "src/render/GLTextureWrapper.ts",
+            "line": 85,
             "description": "The image wrapped by this wrapper.",
             "itemtype": "property",
             "name": "image",
@@ -41198,7 +41226,7 @@
         },
         {
             "file": "src/render/GLTextureWrapper.ts",
-            "line": 98,
+            "line": 101,
             "description": "Creates a webgl texture object",
             "itemtype": "method",
             "name": "createTexture",
@@ -41218,7 +41246,7 @@
         },
         {
             "file": "src/render/GLTextureWrapper.ts",
-            "line": 111,
+            "line": 114,
             "description": "Uploads a webgl texture object to video memory",
             "itemtype": "method",
             "name": "uploadTexture",
@@ -41238,7 +41266,7 @@
         },
         {
             "file": "src/render/GLTextureWrapper.ts",
-            "line": 145,
+            "line": 148,
             "description": "Re-uploads a webgl texture object to video memory",
             "itemtype": "method",
             "name": "refreshTexture",
@@ -41258,7 +41286,7 @@
         },
         {
             "file": "src/render/GLTextureWrapper.ts",
-            "line": 156,
+            "line": 159,
             "description": "Deletes a webgl texture",
             "itemtype": "method",
             "name": "deleteTexture",
@@ -41846,7 +41874,7 @@
         },
         {
             "file": "src/sound/Audio.ts",
-            "line": 523,
+            "line": 522,
             "description": "Mutes the sound and makes it 'silent'. \nThis will not stop the sound from playing, or events from being dispatched due when the sound has finished/is looping.",
             "itemtype": "property",
             "name": "mute",
@@ -41860,7 +41888,7 @@
         },
         {
             "file": "src/sound/Audio.ts",
-            "line": 553,
+            "line": 552,
             "description": "Adds a new marker to the audio which will then allow for that section of audio to be played.",
             "itemtype": "method",
             "name": "addMarker",
@@ -41897,7 +41925,7 @@
         },
         {
             "file": "src/sound/Audio.ts",
-            "line": 567,
+            "line": 566,
             "description": "Removes a currently existing marker from this audio.",
             "itemtype": "method",
             "name": "removeMarker",
@@ -41917,7 +41945,7 @@
         },
         {
             "file": "src/sound/Audio.ts",
-            "line": 585,
+            "line": 584,
             "description": "Plays the current sound/audio from the start.",
             "itemtype": "method",
             "name": "play",
@@ -41945,7 +41973,7 @@
         },
         {
             "file": "src/sound/Audio.ts",
-            "line": 669,
+            "line": 668,
             "description": "Stop the sound from playing.",
             "itemtype": "method",
             "name": "stop",
@@ -41958,7 +41986,7 @@
         },
         {
             "file": "src/sound/Audio.ts",
-            "line": 697,
+            "line": 696,
             "description": "Pauses the sound so that you can resume it from at point to paused it at.",
             "itemtype": "method",
             "name": "pause",
@@ -41971,7 +41999,7 @@
         },
         {
             "file": "src/sound/Audio.ts",
-            "line": 710,
+            "line": 709,
             "description": "Plays the sound from when you paused the sound.",
             "itemtype": "method",
             "name": "resume",
@@ -41984,7 +42012,7 @@
         },
         {
             "file": "src/sound/Audio.ts",
-            "line": 747,
+            "line": 746,
             "description": "The update loop that gets executed every frame.",
             "itemtype": "method",
             "name": "update",
@@ -41997,7 +42025,7 @@
         },
         {
             "file": "src/sound/Audio.ts",
-            "line": 814,
+            "line": 813,
             "description": "This method handles the destruction of all of the properties when this audio is not longer needed. \nYou call this method when you want this method to be removed on the next garbage collection cycle.",
             "itemtype": "method",
             "name": "destroy",
@@ -42300,7 +42328,21 @@
         },
         {
             "file": "src/sound/AudioManager.ts",
-            "line": 142,
+            "line": 141,
+            "description": "Sound buffer",
+            "itemtype": "property",
+            "name": "_unlockedSource",
+            "type": "{any}",
+            "access": "private",
+            "tagname": "",
+            "class": "Kiwi.Sound.AudioManager",
+            "module": "Kiwi",
+            "submodule": "Sound",
+            "namespace": "Kiwi.Sound"
+        },
+        {
+            "file": "src/sound/AudioManager.ts",
+            "line": 149,
             "description": "Returns a boolean indicating whether the device has been touched or not. READ ONLY.",
             "itemtype": "property",
             "name": "locked",
@@ -42314,7 +42356,7 @@
         },
         {
             "file": "src/sound/AudioManager.ts",
-            "line": 152,
+            "line": 159,
             "description": "The boot method is executed when all of the DOM elements needed for the game are loaded and the game is ready to 'start' up.",
             "itemtype": "method",
             "name": "boot",
@@ -42327,7 +42369,7 @@
         },
         {
             "file": "src/sound/AudioManager.ts",
-            "line": 211,
+            "line": 218,
             "description": "Is executed when a mouse event is fired on the device. This is used to enabled playback of sounds on the current device if they were awaiting for a user event.",
             "itemtype": "method",
             "name": "_unlocked",
@@ -42340,7 +42382,7 @@
         },
         {
             "file": "src/sound/AudioManager.ts",
-            "line": 234,
+            "line": 241,
             "description": "Used to mute the audio on the device, or to check to see if the device is muted.\nThis will not stop audio from being played, will just mean that the audio is silent.",
             "itemtype": "property",
             "name": "mute",
@@ -42355,7 +42397,7 @@
         },
         {
             "file": "src/sound/AudioManager.ts",
-            "line": 281,
+            "line": 287,
             "description": "Global setting and getting of the volume.\nA number between 0 (silence) and 1 (full volume).",
             "itemtype": "property",
             "name": "volume",
@@ -42370,7 +42412,7 @@
         },
         {
             "file": "src/sound/AudioManager.ts",
-            "line": 319,
+            "line": 325,
             "description": "Indicates whether or not an Audio Object is registered with this Audio Manager or not. For Kiwi Internal use only.",
             "itemtype": "method",
             "name": "isRegistered",
@@ -42394,7 +42436,7 @@
         },
         {
             "file": "src/sound/AudioManager.ts",
-            "line": 336,
+            "line": 342,
             "description": "Registers an Audio Object with this audio manager. Also assign's the audio piece a unique ID to identify it by. Internal Kiwi use only.",
             "itemtype": "method",
             "name": "registerSound",
@@ -42418,7 +42460,7 @@
         },
         {
             "file": "src/sound/AudioManager.ts",
-            "line": 352,
+            "line": 358,
             "description": "Used to create a new sound on the audio manager. Returns the newly created sound.",
             "itemtype": "method",
             "name": "add",
@@ -42456,7 +42498,7 @@
         },
         {
             "file": "src/sound/AudioManager.ts",
-            "line": 371,
+            "line": 377,
             "description": "Removes the passed sound from the AudioManager.\nIf you remove a Audio Object from the AudioManager, then that Audio Object will not have a update loop.",
             "itemtype": "method",
             "name": "remove",
@@ -42482,7 +42524,7 @@
         },
         {
             "file": "src/sound/AudioManager.ts",
-            "line": 400,
+            "line": 406,
             "description": "Plays all of the sounds listed in the AudioManager.",
             "itemtype": "method",
             "name": "playAll",
@@ -42495,7 +42537,7 @@
         },
         {
             "file": "src/sound/AudioManager.ts",
-            "line": 415,
+            "line": 421,
             "description": "Stops all of the sounds that are listed in the AudioManager from playing.",
             "itemtype": "method",
             "name": "stopAll",
@@ -42508,7 +42550,7 @@
         },
         {
             "file": "src/sound/AudioManager.ts",
-            "line": 432,
+            "line": 438,
             "description": "Pauses all of the sounds listed in the AudioManager.",
             "itemtype": "method",
             "name": "pauseAll",
@@ -42521,7 +42563,7 @@
         },
         {
             "file": "src/sound/AudioManager.ts",
-            "line": 450,
+            "line": 455,
             "description": "Resumes all of the sounds listed in the AudioManager.",
             "itemtype": "method",
             "name": "resumeAll",
@@ -42534,7 +42576,7 @@
         },
         {
             "file": "src/sound/AudioManager.ts",
-            "line": 468,
+            "line": 472,
             "description": "The update loop that is executed every frame.",
             "itemtype": "method",
             "name": "update",
@@ -51243,7 +51285,7 @@
         },
         {
             "file": "src/Kiwi.ts",
-            "line": 316,
+            "line": 315,
             "description": "The type of object that this is.",
             "itemtype": "method",
             "name": "objType",
@@ -51259,7 +51301,7 @@
         },
         {
             "file": "src/Kiwi.ts",
-            "line": 326,
+            "line": 325,
             "description": "A list of all of the games that are currently on this document.",
             "itemtype": "property",
             "name": "_games",
@@ -51273,7 +51315,7 @@
         },
         {
             "file": "src/Kiwi.ts",
-            "line": 335,
+            "line": 334,
             "description": "Used to register a new Game with this manager. Returns the new number of games that have been registered.",
             "itemtype": "method",
             "name": "register",
@@ -51295,7 +51337,7 @@
         },
         {
             "file": "src/Kiwi.ts",
-            "line": 348,
+            "line": 347,
             "description": "Returns the total number of game that are currently registered with this GameManager.",
             "itemtype": "method",
             "name": "total",
@@ -51325,7 +51367,7 @@
         },
         {
             "message": "param name missing: {Kiwi.Camera}",
-            "line": " src/gameobjects/Textfield.ts:379"
+            "line": " src/gameobjects/Textfield.ts:377"
         },
         {
             "message": "replacing incorrect tag: propery with property",
@@ -51357,7 +51399,7 @@
         },
         {
             "message": "Missing item type\nCreates a new Camera and adds it to the collection of cameras.",
-            "line": " src/core/CameraManager.ts:83"
+            "line": " src/core/CameraManager.ts:82"
         },
         {
             "message": "Missing item type\nReturns the type of child that this is.",
@@ -51453,19 +51495,19 @@
         },
         {
             "message": "Missing item type\n-----------------------\n Creation of Tile Types\n-----------------------",
-            "line": " src/gameobjects/tilemap/TileMap.ts:306"
+            "line": " src/gameobjects/tilemap/TileMap.ts:305"
         },
         {
             "message": "Missing item type\n-----------------------\n Cell Modifications\n-----------------------",
-            "line": " src/gameobjects/tilemap/TileMap.ts:361"
+            "line": " src/gameobjects/tilemap/TileMap.ts:360"
         },
         {
             "message": "Missing item type\n-----------------------\n Creation of Tilemap Layers\n-----------------------",
-            "line": " src/gameobjects/tilemap/TileMap.ts:395"
+            "line": " src/gameobjects/tilemap/TileMap.ts:394"
         },
         {
             "message": "Missing item type\n-----------------------\n TileMapLayer Management Functions\n-----------------------",
-            "line": " src/gameobjects/tilemap/TileMap.ts:460"
+            "line": " src/gameobjects/tilemap/TileMap.ts:459"
         },
         {
             "message": "Missing item type\nReturns the type of child that this is.",
@@ -51485,7 +51527,7 @@
         },
         {
             "message": "Missing item type\n-----------------------\n Temp Properties used During Rendering\n-----------------------",
-            "line": " src/gameobjects/tilemap/TileMapLayer.ts:610"
+            "line": " src/gameobjects/tilemap/TileMapLayer.ts:609"
         },
         {
             "message": "Missing item type\n-------------------------------------------------------------------------------------------\nDistance\n-------------------------------------------------------------------------------------------",
@@ -51533,15 +51575,15 @@
         },
         {
             "message": "Missing item type\n-------------------\n Touch Events\n-------------------",
-            "line": " src/input/Touch.ts:552"
+            "line": " src/input/Touch.ts:550"
         },
         {
             "message": "Missing item type\n-------------------\n Pointer Events\n-------------------",
-            "line": " src/input/Touch.ts:667"
+            "line": " src/input/Touch.ts:664"
         },
         {
             "message": "Missing item type\n-----------------\n Normal Methods \n-----------------",
-            "line": " src/input/Touch.ts:746"
+            "line": " src/input/Touch.ts:743"
         },
         {
             "message": "Missing item type\nGet the number of rows.",
diff --git a/docs/files/src_Kiwi.ts.html b/docs/files/src_Kiwi.ts.html
index 02431b2..67bf84f 100644
--- a/docs/files/src_Kiwi.ts.html
+++ b/docs/files/src_Kiwi.ts.html
@@ -506,235 +506,233 @@ <h1 class="file-heading">File: src/Kiwi.ts</h1>
 */
 
 module Kiwi {
-    
-    /**
-    * 
-    * @property Log
-    * @static
-    * @type Kiwi.Utils.Log
-    * @public
-    */
-    export var Log: Kiwi.Utils.Log = new Kiwi.Utils.Log();
-    
-    /**
-    * The version of Kiwi that is currently being used.
-    * @property VERSION
-    * @static
-    * @type string
-    * @public
-    */
-    export var VERSION: string = &quot;1.2.0&quot;;
-    
-    //DIFFERENT RENDERER STATIC VARIABLES
-    /**
-    * A Static property that contains the number associated with the CANVAS RENDERER.
-    * @property RENDERER_CANVAS
-    * @static
-    * @type number
-    * @default 0
-    * @public
-    */
-    export var RENDERER_CANVAS: number = 0;
-    
-    /**
-    * A Static property that contains the number associated with the WEBGL RENDERER.
-    * @property RENDERER_WEBGL
-    * @static 
-    * @type number
-    * @default 1
-    * @public
-    */
-    export var RENDERER_WEBGL: number = 1;
-
-    /**
-    * A Static property that contains the number associated with RENDERER AUTODETECTION
-    * @property RENDERER_AUTO
-    * @static
-    * @type number
-    * @default 2
-    * @public
-    * @since 1.1.0
-    */
-    export var RENDERER_AUTO: number = 2;
-    
-    // DEVICE TARGET STATIC VARIABLES
-    /**
-    * Contains the number associated with the targetting of browsers. 
-    * @property TARGET_BROWSER
-    * @static
-    * @type number
-    * @default 0
-    * @public
-    */
-    export var TARGET_BROWSER: number = 0;
-    
-    /**
-    * Contains the number associated with the targetting of CocoonJS.
-    * @property TARGET_COCOON
-    * @static
-    * @type number
-    * @default 1
-    * @public
-    */
-    export var TARGET_COCOON: number = 1;
-    
-    //DEBUG OPTION STATIC VARIABLES
-    /**
-    * Contains the number that is used to turn the Debug options on.
-    * @property DEBUG_ON
-    * @static
-    * @type number
-    * @default 0
-    * @public
-    */
-    export var DEBUG_ON: number = 0;
-    
-    /**
-    * Contains the number that is used to turn the Debug options off.
-    * @property DEBUG_OFF
-    * @static
-    * @type number
-    * @default 1
-    * @public
-    */
-    export var DEBUG_OFF: number = 1;
-    
-    /**
-    * Contains the Device class that is used to determine which features are supported by the users browser.
-    * @property DEVICE
-    * @static
-    * @type Device
-    * @public
-    */
-    export var DEVICE: Kiwi.System.Device = null;
-    
-    //STATIC PROPERTIES FOR GENERAL OBJECT TYPE DETECTION
-    /**
-    * Contains a number that is used to identify objects that are a State.
-    * @property STATE
-    * @static
-    * @type number
-    * @default 0
-    * @public
-    */
-    export var STATE: number = 0;
- 
-    /**
-    * Contains a number that is used to identify objects that are a Group.
-    * @property GROUP
-    * @static
-    * @type number
-    * @default 2
-    * @public
-    */
-    export var GROUP: number = 2;
-    
-    /**
-    * Contains a number that is used to identify objects that are a Entity.
-    * @property ENTITY
-    * @static
-    * @type number
-    * @default 3
-    * @public
-    */
-    export var ENTITY: number = 3;
-    
-    /**
-    * Contains a number that is used to identify objects that are a Camera.
-    * @property CAMERA
-    * @static
-    * @type number 
-    * @default 4
-    * @public
-    */
-    export var CAMERA: number = 4;
-
-    /**
-    * Contains a number that is used to identify objects that are a HUD Widget.
-    * @property HUD_WIDGET
-    * @static
-    * @type number
-    * @default 5
-    * @public
-    */
-    export var HUD_WIDGET: number = 5;
-
-    /**
-    * Contains a number that is used to identify objects that are a TILE_LAYER.
-    * @property TILE_LAYER
-    * @static
-    * @type number
-    * @default 6
-    * @public
-    */
-    export var TILE_LAYER: number = 6;
-
-    
-    /**
-    * The GameManager is used to maintain mulitple instances of Kiwi games within a single document.
-    *  
-    * @class GameManager
-    * @namespace Kiwi
-    * @static
-    */
-    export class GameManager {
-
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} &quot;GameManager&quot;
-        * @public
-        */
-        public objType() {
-            return &quot;GameManager&quot;;
-        }
-
-        /**
-        * A list of all of the games that are currently on this document.
-        * @property _games
-        * @static
-        * @type Game[]
-        * @private
-        */
-        private static _games: Kiwi.Game[] = [];
-
-        /**
-        * Used to register a new Game with this manager. Returns the new number of games that have been registered.
-        * @method register
-        * @param game {Game} The game you are wanting to register.
-        * @return {Number] The new number of games registered.
-        * @public
-        */
-        public static register(game: Kiwi.Game): number {
-
-            return Kiwi.GameManager._games.push(game);
-
-        }
-
-        /**
-        * Returns the total number of game that are currently registered with this GameManager.
-        * @method total
-        * @return {Number} Total number of registered games.
-        * @public
-        */
-        public static total(): number {
-            return Kiwi.GameManager._games.length;
-        }
-
-    }
-
-
-    export var Plugins = {};
-
-    export var extend:Function = function (d, b) {
-        for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
-        function __() { this.constructor = d; }
-        __.prototype = b.prototype;
-        d.prototype = new __();
-    };
-    
-}
 
+	/**
+	* 
+	* @property Log
+	* @static
+	* @type Kiwi.Utils.Log
+	* @public
+	*/
+	export var Log: Kiwi.Utils.Log = new Kiwi.Utils.Log();
+
+	/**
+	* The version of Kiwi that is currently being used.
+	* @property VERSION
+	* @static
+	* @type string
+	* @public
+	*/
+	export var VERSION: string = &quot;1.2.0&quot;;
+
+	//DIFFERENT RENDERER STATIC VARIABLES
+	/**
+	* A Static property that contains the number associated with the CANVAS RENDERER.
+	* @property RENDERER_CANVAS
+	* @static
+	* @type number
+	* @default 0
+	* @public
+	*/
+	export var RENDERER_CANVAS: number = 0;
+
+	/**
+	* A Static property that contains the number associated with the WEBGL RENDERER.
+	* @property RENDERER_WEBGL
+	* @static 
+	* @type number
+	* @default 1
+	* @public
+	*/
+	export var RENDERER_WEBGL: number = 1;
+
+	/**
+	* A Static property that contains the number associated with RENDERER AUTODETECTION
+	* @property RENDERER_AUTO
+	* @static
+	* @type number
+	* @default 2
+	* @public
+	* @since 1.1.0
+	*/
+	export var RENDERER_AUTO: number = 2;
+	
+	// DEVICE TARGET STATIC VARIABLES
+	/**
+	* Contains the number associated with the targetting of browsers. 
+	* @property TARGET_BROWSER
+	* @static
+	* @type number
+	* @default 0
+	* @public
+	*/
+	export var TARGET_BROWSER: number = 0;
+
+	/**
+	* Contains the number associated with the targetting of CocoonJS.
+	* @property TARGET_COCOON
+	* @static
+	* @type number
+	* @default 1
+	* @public
+	*/
+	export var TARGET_COCOON: number = 1;
+
+	//DEBUG OPTION STATIC VARIABLES
+	/**
+	* Contains the number that is used to turn the Debug options on.
+	* @property DEBUG_ON
+	* @static
+	* @type number
+	* @default 0
+	* @public
+	*/
+	export var DEBUG_ON: number = 0;
+
+	/**
+	* Contains the number that is used to turn the Debug options off.
+	* @property DEBUG_OFF
+	* @static
+	* @type number
+	* @default 1
+	* @public
+	*/
+	export var DEBUG_OFF: number = 1;
+
+	/**
+	* Contains the Device class that is used to determine which features are supported by the users browser.
+	* @property DEVICE
+	* @static
+	* @type Device
+	* @public
+	*/
+	export var DEVICE: Kiwi.System.Device = null;
+
+	//STATIC PROPERTIES FOR GENERAL OBJECT TYPE DETECTION
+	/**
+	* Contains a number that is used to identify objects that are a State.
+	* @property STATE
+	* @static
+	* @type number
+	* @default 0
+	* @public
+	*/
+	export var STATE: number = 0;
+
+	/**
+	* Contains a number that is used to identify objects that are a Group.
+	* @property GROUP
+	* @static
+	* @type number
+	* @default 2
+	* @public
+	*/
+	export var GROUP: number = 2;
+
+	/**
+	* Contains a number that is used to identify objects that are a Entity.
+	* @property ENTITY
+	* @static
+	* @type number
+	* @default 3
+	* @public
+	*/
+	export var ENTITY: number = 3;
+
+	/**
+	* Contains a number that is used to identify objects that are a Camera.
+	* @property CAMERA
+	* @static
+	* @type number 
+	* @default 4
+	* @public
+	*/
+	export var CAMERA: number = 4;
+
+	/**
+	* Contains a number that is used to identify objects that are a HUD Widget.
+	* @property HUD_WIDGET
+	* @static
+	* @type number
+	* @default 5
+	* @public
+	*/
+	export var HUD_WIDGET: number = 5;
+
+	/**
+	* Contains a number that is used to identify objects that are a TILE_LAYER.
+	* @property TILE_LAYER
+	* @static
+	* @type number
+	* @default 6
+	* @public
+	*/
+	export var TILE_LAYER: number = 6;
+
+	/**
+	* The GameManager is used to maintain mulitple instances of Kiwi games within a single document.
+	*  
+	* @class GameManager
+	* @namespace Kiwi
+	* @static
+	*/
+	export class GameManager {
+
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} &quot;GameManager&quot;
+		* @public
+		*/
+		public objType() {
+			return &quot;GameManager&quot;;
+		}
+
+		/**
+		* A list of all of the games that are currently on this document.
+		* @property _games
+		* @static
+		* @type Game[]
+		* @private
+		*/
+		private static _games: Kiwi.Game[] = [];
+
+		/**
+		* Used to register a new Game with this manager. Returns the new number of games that have been registered.
+		* @method register
+		* @param game {Game} The game you are wanting to register.
+		* @return {Number] The new number of games registered.
+		* @public
+		*/
+		public static register(game: Kiwi.Game): number {
+
+			return Kiwi.GameManager._games.push(game);
+
+		}
+
+		/**
+		* Returns the total number of game that are currently registered with this GameManager.
+		* @method total
+		* @return {Number} Total number of registered games.
+		* @public
+		*/
+		public static total(): number {
+			return Kiwi.GameManager._games.length;
+		}
+
+	}
+
+
+	export var Plugins = {};
+
+	export var extend:Function = function (d, b) {
+		for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
+		function __() { this.constructor = d; }
+		__.prototype = b.prototype;
+		d.prototype = new __();
+	};
+
+}
 
     </pre>
 </div>
diff --git a/docs/files/src_animations_Animation.ts.html b/docs/files/src_animations_Animation.ts.html
index 6c59703..393872d 100644
--- a/docs/files/src_animations_Animation.ts.html
+++ b/docs/files/src_animations_Animation.ts.html
@@ -374,500 +374,500 @@ <h1 class="file-heading">File: src/animations/Animation.ts</h1>
 
 module Kiwi.Animations {
 
-    /**
-    * An Animation contains information about a single animation that is held on a AnimationManager. 
-    * The information that is held is unique to this individual animation and will initially be the same as a Sequence,
-    * but if you do ever modify the information held in this Animation the corresponding Sequence will not be updated.
-    * 
-    * @class Animation
-    * @namespace Kiwi.Animations
-    * @constructor
-    * @param name {string} The name of this anim.
-    * @param sequences {Kiwi.Animations.Sequences} The sequence that this anim will be using to animate.
-    * @param clock {Kiwi.Time.Clock} A game clock that this anim will be using to keep record of the time between frames. (Deprecated in v1.2.0, because there is no way to control it.)
-    * @param parent {Kiwi.Components.AnimationManager} The animation manager that this animation belongs to.
-    * @return {Kiwi.Animations.Animation} 
-    * 
-    */
-    export class Animation {
-         
-        constructor(name: string, sequence: Kiwi.Animations.Sequence, clock: Kiwi.Time.Clock, parent: Kiwi.Components.AnimationManager) {
-            
-            this.name = name;
-            this._sequence = sequence;
-            this._speed = sequence.speed;
-            this._loop = sequence.loop;
-            this._parent = parent;
-
-            this._clock = clock;
-
-            this._lastFrameElapsed = this.clock.elapsed();
-        }
-
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} &quot;Animation&quot;
-        * @public
-        */
-        public objType(): string {
-            return &quot;Animation&quot;;
-        }
-
-        /**
-        * The AnimationManager that this animation is a child of.
-        * @property _parent
-        * @type Kiwi.Components.AnimationManager
-        * @private
-        */
-        private _parent: Kiwi.Components.AnimationManager;
-
-        /**
-        * The name of this animation.
-        * @property name
-        * @type string
-        * @public
-        */
-        public name: string;
-        
-        /**
-        * The sequence on the texture atlas that this animation is based off.
-        * @property _sequence
-        * @type Kiwi.Animations.Sequence
-        * @private
-        */
-        private _sequence: Kiwi.Animations.Sequence;
-
-        /**
-        * If this animation should loop or not.
-        * @property _loop
-        * @type boolean
-        * @private
-        */
-        private _loop: boolean;
-
-        /**
-        * If once the animation reaches the end, it should start again from the first cell in the sequence or not.
-        * @property loop
-        * @type boolean
-        * @public
-        */
-        public get loop(): boolean {
-            return this._loop;
-        }
-        public set loop(value: boolean) {
-            this._loop = value;
-        }
-
-        /**
-        * The current frame index that the animation is currently upto.
-        * Note: A frame index is the index of a particular cell in the Sequence.
-        * @property _frameIndex
-        * @type number
-        * @private
-        */
-        private _frameIndex: number = 0;
-
-        /**
-        * The current frame index that the animation is currently upto.
-        * Note: A frame index is the index of a particular cell in the Sequence.
-        * @property frameIndex
-        * @type number
-        * @public
-        */
-        public get frameIndex(): number {
-            return this._frameIndex;
-        }
-        public set frameIndex(val: number) {
-            if (this._validateFrame(val)) {
-                this._frameIndex = val;
-            }
-        }
-
-        /**
-        * Returns the current cell that the animation is up to. This is READ ONLY.
-        * @property currentCell
-        * @type number
-        * @public
-        */
-        public get currentCell(): number {
-            return this._sequence.cells[ this.frameIndex ];
-        }
-
-        /**
-        * How fast the transition is between cells. Perhaps change to frames per second to reflect actual game speed?
-        * @property _speed
-        * @type number
-        * @private
-        */
-        private _speed: number;
-
-        /**
-        * How long the each cell should stay on screen for. In seconds.
-        * @property speed
-        * @type number
-        * @public
-        */
-        public get speed(): number {
-            return this._speed;
-        }
-        public set speed(value: number) {
-            this._speed = value;
-        }
-
-        /**
-        * The clock that is to be used to calculate the animations.
-        * @property _clock
-        * @type Kiwi.Time.Clock
-        * @private
-        */
-        private _clock: Kiwi.Time.Clock;
-
-        /**
-        * Clock used by this Animation. If it was not set on creation,
-        * the Animation will use its parent&#x27;s entity&#x27;s clock.
-        * @property clock
-        * @type Kiwi.Time.Clock
-        * @public
-        * @since 1.2.0
-        */
-        public get clock(): Kiwi.Time.Clock {
-            if ( this._clock ) {
-                return this._clock;
-            }
-            return this._parent.entity.clock;
-        }
-
-        /**
-        * The starting time of the animation from when it was played. Internal use only.
-        * @property _startTime
-        * @type number
-        * @private
-        */
-        private _startTime: number = null;
-        
-        /**
-        * Indicates whether the animation is playing in reverse or not.
-        * @property _reverse
-        * @type boolean
-        * @private
-        */
-        private _reverse: boolean = false;
-
-        /**
-        * Whether the animation is to be played in reverse.
-        * @property reverse
-        * @type boolean
-        * @public
-        */
-        public set reverse(value: boolean) {
-            this._reverse = value;
-        }
-        public get reverse(): boolean {
-            return this._reverse;
-        }
-
-        /**
-        * The time at which the animation should change to the next cell 
-        * @property _tick
-        * @type number
-        * @private
-        */ 
-        private _tick: number;
-
-        /**
-        * Whether the animation is currently playing or not.
-        * @property _isPlaying
-        * @type boolean
-        * @default false
-        * @private
-        */
-        private _isPlaying: boolean = false;
-
-        /**
-        * Whether the animation is currently playing or not. Read-only.
-        * @property isPlaying
-        * @type boolean
-        * @public
-        */
-        public get isPlaying(): boolean {
-            return this._isPlaying;
-        }
-
-        /**
-        * A Kiwi.Signal that dispatches an event when the animation has stopped playing.
-        * @property _onStop
-        * @type Signal
-        * @public
-        */
-        private _onStop: Kiwi.Signal = null;
-        
-        public get onStop(): Kiwi.Signal {
-            if (this._onStop == null) this._onStop = new Kiwi.Signal; 
-            return this._onStop;
-        }
-
-        /**
-        * A Kiwi.Signal that dispatches an event when the animation has started playing.
-        * @property _onPlay
-        * @type Kiwi.Signal
-        * @public
-        */
-        private _onPlay: Kiwi.Signal = null;
-        
-        public get onPlay(): Kiwi.Signal {
-            if (this._onPlay == null) this._onPlay = new Kiwi.Signal;
-            return this._onPlay;
-        }
-
-        /**
-        * A Kiwi.Signal that dispatches an event when the animation has updated/changed frameIndexs.
-        * @property _onUpdate
-        * @type Kiwi.Signal
-        * @public
-        */
-        private _onUpdate: Kiwi.Signal = null;
-        
-        public get onUpdate(): Kiwi.Signal {
-            if (this._onUpdate == null) this._onUpdate = new Kiwi.Signal;
-            return this._onUpdate;
-        }
-
-        /**
-        * A Kiwi.Signal that dispatches an event when the animation has come to the end of the animation and is going to play again.
-        * @property _onLoop
-        * @type Kiwi.Signal
-        * @public
-        */
-        private _onLoop: Kiwi.Signal = null;
-        
-        public get onLoop(): Kiwi.Signal {
-            if (this._onLoop == null) this._onLoop = new Kiwi.Signal;
-            return this._onLoop;
-        }
-
-        /**
-        * A Kiwi.Signal that dispatches an event when the animation has come to the end of the animation but is not going to play again.
-        * @property _onComplete
-        * @type Kiwi.Signal
-        * @public
-        * @since 1.2.0
-        */
-        private _onComplete: Kiwi.Signal = null;
-        
-        public get onComplete(): Kiwi.Signal {
-            if (this._onComplete == null) this._onComplete = new Kiwi.Signal;
-            return this._onComplete;
-        }
-
-        /**
-        * Clock time on last frame, used to compute current animation frame.
-        * @property _lastFrameElapsed
-        * @type number
-        * @private
-        * @since 1.2.0
-        */
-        private _lastFrameElapsed: number;
-
-        /**
-        * An Internal method used to start the animation.
-        * @method _start
-        * @param [index=null] {number} The index of the frame in the sequence that is to play. If left as null if just starts from where it left off.
-        * @private
-        */
-        private _start(index: number = null) {
-            if (index !== null) {
-                this.frameIndex = index;
-            }
-
-            this._isPlaying = true;
-            this._startTime = this.clock.elapsed();
-            this._tick = this._startTime + this._speed;
-            if(this._onPlay !== null) this._onPlay.dispatch();
-        }
-
-        /**
-        * Plays the animation.
-        * @method play
-        * @public
-        */
-        public play() {
-            //if the animation is at the last frame then start it at the beginning
-            if (this._frameIndex === this.length - 1) this.frameIndex = 0; 
-            
-            this.playAt(this._frameIndex);
-        }
-
-        /**
-        * Plays the animation at a particular frame
-        * @method playAt
-        * @param index {Number} The index of the cell in the sequence that the animation is to start at.
-        * @public
-        */
-        public playAt(index: number) {  
-            this._start(index);
-        }
-
-        /**
-        * Pauses the current animation.
-        * @method pause
-        * @public
-        */
-        public pause() {
-            this.stop();
-        }
-
-        /**
-        * Resumes the current animation after stopping.
-        * @method resume
-        * @public
-        */
-        public resume() {
-            if (this._startTime !== null) { 
-                this._isPlaying = true;
-            }
-        }
-
-        /**
-        * Stops the current animation from playing.
-        * @method stop
-        * @public
-        */
-        public stop() {
-            if (this._isPlaying) {
-                this._isPlaying = false; 
-                if(this._onStop !== null) this._onStop.dispatch();
-            }
-        }
-
-        /**
-        * Makes the animation go to the next frame. If the animation is at the end it goes back to the start.
-        * @method nextFrame
-        * @public
-        */
-        public nextFrame() {
-            this._frameIndex++;
-            if (this._frameIndex &gt;= this.length) this.frameIndex = 0;
-        }
-        
-        /**
-        * Makes the animation go to the previous frame. If the animation is at the first frame it goes to the end.
-        * @method prevFrame
-        * @public
-        */
-        public prevFrame() {
-            this._frameIndex--;
-            if (this._frameIndex &lt; 0) this.frameIndex = this.length - 1;
-        }
-
-        /**
-        * The update loop.
-        * 
-        * @method update
-        * @public
-        */
-        public update() {
-            var frameDelta;
-
-            if ( this._isPlaying ) {
-
-                // How many frames do we move, ahead or behind?
-                frameDelta = ( this.clock.elapsed() -
-                    this._lastFrameElapsed ) / this._speed;
-                if ( this._reverse ) {
-                    frameDelta *= -1;
-                }
-
-                // Round delta, towards zero
-                if ( frameDelta &gt; 0 ) {
-                    frameDelta = Math.floor( frameDelta );
-                } else {
-                    frameDelta = Math.ceil( frameDelta );
-                }
-
-                if ( frameDelta !== 0 ) {
-                    this._frameIndex += frameDelta;
-                    this._lastFrameElapsed = this.clock.elapsed();
-
-                    // Loop check
-                    if ( this._loop ) {
-                        if ( this._frameIndex &gt; this.length - 1 ) {
-                            while ( this._frameIndex &gt; this.length - 1 ) {
-                                this._frameIndex -= this.length;
-                                if ( this._onLoop != null ) {
-                                    this._onLoop.dispatch();
-                                }
-                            }
-                        } else if ( this._frameIndex &lt; 0 ) {
-                            while ( this._frameIndex &lt; 0 ) {
-                                this._frameIndex += this.length;
-                                if ( this._onLoop != null ) {
-                                    this._onLoop.dispatch();
-                                }
-                            }
-                        }
-                    } else if ( this._frameIndex &lt; 0 || this._frameIndex &gt;= this.length ) {
-                        if ( this._onComplete != null ) {
-                            this._onComplete.dispatch();
-                        }
-                        // Execute the stop on the parent 
-                        // to allow the isPlaying boolean to remain consistent
-                        this._parent.stop();
-                        return;
-                    }
-
-                    this._parent.updateCellIndex();
-                    if ( this._onUpdate !== null ) {
-                        this._onUpdate.dispatch();
-                    }
-                }
-            }
-        }
-
-        /**
-        * An internal method used to check to see if frame passed is valid or not
-        * @method _validateFrame
-        * @param frame {Number} The index of the frame that is to be validated.
-        * @private
-        */
-        private _validateFrame(frame: number) {
-            return (frame &lt; this.length &amp;&amp; frame &gt;= 0);
-        }
-        
-        /**
-        * Returns the number of frames that in the animation. Thus the animations &#x27;length&#x27;. Note this is READ ONLY.
-        * @property length
-        * @type number
-        * @public
-        */
-        public get length():number {
-            return this._sequence.cells.length;
-        }
-
-        /**
-        * Destroys the anim and all of the properties that exist on it.
-        * @method destroy
-        * @public
-        */
-        public destroy() {
-            this._isPlaying = false;
-            delete this._clock;
-            delete this._sequence;
-            delete this._parent;
-            if(this._onLoop) this._onLoop.dispose();
-            if(this._onStop) this._onStop.dispose();
-            if(this._onPlay) this._onPlay.dispose();
-            if(this._onUpdate) this._onUpdate.dispose();
-            delete this._onLoop;
-            delete this._onStop ;
-            delete this._onPlay ;
-            delete this._onUpdate ;
-            delete this.frameIndex ;
-            delete this.loop;
-            delete this._reverse;
-            delete this._tick;
-        }
-    }
+	/**
+	* An Animation contains information about a single animation that is held on a AnimationManager. 
+	* The information that is held is unique to this individual animation and will initially be the same as a Sequence,
+	* but if you do ever modify the information held in this Animation the corresponding Sequence will not be updated.
+	* 
+	* @class Animation
+	* @namespace Kiwi.Animations
+	* @constructor
+	* @param name {string} The name of this anim.
+	* @param sequences {Kiwi.Animations.Sequences} The sequence that this anim will be using to animate.
+	* @param clock {Kiwi.Time.Clock} A game clock that this anim will be using to keep record of the time between frames. (Deprecated in v1.2.0, because there is no way to control it.)
+	* @param parent {Kiwi.Components.AnimationManager} The animation manager that this animation belongs to.
+	* @return {Kiwi.Animations.Animation} 
+	* 
+	*/
+	export class Animation {
+
+		constructor(name: string, sequence: Kiwi.Animations.Sequence, clock: Kiwi.Time.Clock, parent: Kiwi.Components.AnimationManager) {
+			
+			this.name = name;
+			this._sequence = sequence;
+			this._speed = sequence.speed;
+			this._loop = sequence.loop;
+			this._parent = parent;
+
+			this._clock = clock;
+
+			this._lastFrameElapsed = this.clock.elapsed();
+		}
+
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} &quot;Animation&quot;
+		* @public
+		*/
+		public objType(): string {
+			return &quot;Animation&quot;;
+		}
+
+		/**
+		* The AnimationManager that this animation is a child of.
+		* @property _parent
+		* @type Kiwi.Components.AnimationManager
+		* @private
+		*/
+		private _parent: Kiwi.Components.AnimationManager;
+
+		/**
+		* The name of this animation.
+		* @property name
+		* @type string
+		* @public
+		*/
+		public name: string;
+
+		/**
+		* The sequence on the texture atlas that this animation is based off.
+		* @property _sequence
+		* @type Kiwi.Animations.Sequence
+		* @private
+		*/
+		private _sequence: Kiwi.Animations.Sequence;
+
+		/**
+		* If this animation should loop or not.
+		* @property _loop
+		* @type boolean
+		* @private
+		*/
+		private _loop: boolean;
+
+		/**
+		* If once the animation reaches the end, it should start again from the first cell in the sequence or not.
+		* @property loop
+		* @type boolean
+		* @public
+		*/
+		public get loop(): boolean {
+			return this._loop;
+		}
+		public set loop(value: boolean) {
+			this._loop = value;
+		}
+
+		/**
+		* The current frame index that the animation is currently upto.
+		* Note: A frame index is the index of a particular cell in the Sequence.
+		* @property _frameIndex
+		* @type number
+		* @private
+		*/
+		private _frameIndex: number = 0;
+
+		/**
+		* The current frame index that the animation is currently upto.
+		* Note: A frame index is the index of a particular cell in the Sequence.
+		* @property frameIndex
+		* @type number
+		* @public
+		*/
+		public get frameIndex(): number {
+			return this._frameIndex;
+		}
+		public set frameIndex(val: number) {
+			if (this._validateFrame(val)) {
+				this._frameIndex = val;
+			}
+		}
+
+		/**
+		* Returns the current cell that the animation is up to. This is READ ONLY.
+		* @property currentCell
+		* @type number
+		* @public
+		*/
+		public get currentCell(): number {
+			return this._sequence.cells[ this.frameIndex ];
+		}
+
+		/**
+		* How fast the transition is between cells. Perhaps change to frames per second to reflect actual game speed?
+		* @property _speed
+		* @type number
+		* @private
+		*/
+		private _speed: number;
+
+		/**
+		* How long the each cell should stay on screen for. In seconds.
+		* @property speed
+		* @type number
+		* @public
+		*/
+		public get speed(): number {
+			return this._speed;
+		}
+		public set speed(value: number) {
+			this._speed = value;
+		}
+
+		/**
+		* The clock that is to be used to calculate the animations.
+		* @property _clock
+		* @type Kiwi.Time.Clock
+		* @private
+		*/
+		private _clock: Kiwi.Time.Clock;
+
+		/**
+		* Clock used by this Animation. If it was not set on creation,
+		* the Animation will use its parent&#x27;s entity&#x27;s clock.
+		* @property clock
+		* @type Kiwi.Time.Clock
+		* @public
+		* @since 1.2.0
+		*/
+		public get clock(): Kiwi.Time.Clock {
+			if ( this._clock ) {
+				return this._clock;
+			}
+			return this._parent.entity.clock;
+		}
+
+		/**
+		* The starting time of the animation from when it was played. Internal use only.
+		* @property _startTime
+		* @type number
+		* @private
+		*/
+		private _startTime: number = null;
+		
+		/**
+		* Indicates whether the animation is playing in reverse or not.
+		* @property _reverse
+		* @type boolean
+		* @private
+		*/
+		private _reverse: boolean = false;
+
+		/**
+		* Whether the animation is to be played in reverse.
+		* @property reverse
+		* @type boolean
+		* @public
+		*/
+		public set reverse(value: boolean) {
+			this._reverse = value;
+		}
+		public get reverse(): boolean {
+			return this._reverse;
+		}
+
+		/**
+		* The time at which the animation should change to the next cell 
+		* @property _tick
+		* @type number
+		* @private
+		*/ 
+		private _tick: number;
+
+		/**
+		* Whether the animation is currently playing or not.
+		* @property _isPlaying
+		* @type boolean
+		* @default false
+		* @private
+		*/
+		private _isPlaying: boolean = false;
+
+		/**
+		* Whether the animation is currently playing or not. Read-only.
+		* @property isPlaying
+		* @type boolean
+		* @public
+		*/
+		public get isPlaying(): boolean {
+			return this._isPlaying;
+		}
+
+		/**
+		* A Kiwi.Signal that dispatches an event when the animation has stopped playing.
+		* @property _onStop
+		* @type Signal
+		* @public
+		*/
+		private _onStop: Kiwi.Signal = null;
+		
+		public get onStop(): Kiwi.Signal {
+			if (this._onStop == null) this._onStop = new Kiwi.Signal; 
+			return this._onStop;
+		}
+
+		/**
+		* A Kiwi.Signal that dispatches an event when the animation has started playing.
+		* @property _onPlay
+		* @type Kiwi.Signal
+		* @public
+		*/
+		private _onPlay: Kiwi.Signal = null;
+		
+		public get onPlay(): Kiwi.Signal {
+			if (this._onPlay == null) this._onPlay = new Kiwi.Signal;
+			return this._onPlay;
+		}
+
+		/**
+		* A Kiwi.Signal that dispatches an event when the animation has updated/changed frameIndexs.
+		* @property _onUpdate
+		* @type Kiwi.Signal
+		* @public
+		*/
+		private _onUpdate: Kiwi.Signal = null;
+		
+		public get onUpdate(): Kiwi.Signal {
+			if (this._onUpdate == null) this._onUpdate = new Kiwi.Signal;
+			return this._onUpdate;
+		}
+
+		/**
+		* A Kiwi.Signal that dispatches an event when the animation has come to the end of the animation and is going to play again.
+		* @property _onLoop
+		* @type Kiwi.Signal
+		* @public
+		*/
+		private _onLoop: Kiwi.Signal = null;
+		
+		public get onLoop(): Kiwi.Signal {
+			if (this._onLoop == null) this._onLoop = new Kiwi.Signal;
+			return this._onLoop;
+		}
+
+		/**
+		* A Kiwi.Signal that dispatches an event when the animation has come to the end of the animation but is not going to play again.
+		* @property _onComplete
+		* @type Kiwi.Signal
+		* @public
+		* @since 1.2.0
+		*/
+		private _onComplete: Kiwi.Signal = null;
+		
+		public get onComplete(): Kiwi.Signal {
+			if (this._onComplete == null) this._onComplete = new Kiwi.Signal;
+			return this._onComplete;
+		}
+
+		/**
+		* Clock time on last frame, used to compute current animation frame.
+		* @property _lastFrameElapsed
+		* @type number
+		* @private
+		* @since 1.2.0
+		*/
+		private _lastFrameElapsed: number;
+
+		/**
+		* An Internal method used to start the animation.
+		* @method _start
+		* @param [index=null] {number} The index of the frame in the sequence that is to play. If left as null if just starts from where it left off.
+		* @private
+		*/
+		private _start(index: number = null) {
+			if (index !== null) {
+				this.frameIndex = index;
+			}
+
+			this._isPlaying = true;
+			this._startTime = this.clock.elapsed();
+			this._tick = this._startTime + this._speed;
+			if(this._onPlay !== null) this._onPlay.dispatch();
+		}
+
+		/**
+		* Plays the animation.
+		* @method play
+		* @public
+		*/
+		public play() {
+			//if the animation is at the last frame then start it at the beginning
+			if (this._frameIndex === this.length - 1) this.frameIndex = 0; 
+			
+			this.playAt(this._frameIndex);
+		}
+
+		/**
+		* Plays the animation at a particular frame
+		* @method playAt
+		* @param index {Number} The index of the cell in the sequence that the animation is to start at.
+		* @public
+		*/
+		public playAt(index: number) {  
+			this._start(index);
+		}
+
+		/**
+		* Pauses the current animation.
+		* @method pause
+		* @public
+		*/
+		public pause() {
+			this.stop();
+		}
+
+		/**
+		* Resumes the current animation after stopping.
+		* @method resume
+		* @public
+		*/
+		public resume() {
+			if (this._startTime !== null) { 
+				this._isPlaying = true;
+			}
+		}
+
+		/**
+		* Stops the current animation from playing.
+		* @method stop
+		* @public
+		*/
+		public stop() {
+			if (this._isPlaying) {
+				this._isPlaying = false; 
+				if(this._onStop !== null) this._onStop.dispatch();
+			}
+		}
+
+		/**
+		* Makes the animation go to the next frame. If the animation is at the end it goes back to the start.
+		* @method nextFrame
+		* @public
+		*/
+		public nextFrame() {
+			this._frameIndex++;
+			if (this._frameIndex &gt;= this.length) this.frameIndex = 0;
+		}
+
+		/**
+		* Makes the animation go to the previous frame. If the animation is at the first frame it goes to the end.
+		* @method prevFrame
+		* @public
+		*/
+		public prevFrame() {
+			this._frameIndex--;
+			if (this._frameIndex &lt; 0) this.frameIndex = this.length - 1;
+		}
+
+		/**
+		* The update loop.
+		* 
+		* @method update
+		* @public
+		*/
+		public update() {
+			var frameDelta;
+
+			if ( this._isPlaying ) {
+
+				// How many frames do we move, ahead or behind?
+				frameDelta = ( this.clock.elapsed() -
+					this._lastFrameElapsed ) / this._speed;
+				if ( this._reverse ) {
+					frameDelta *= -1;
+				}
+
+				// Round delta, towards zero
+				if ( frameDelta &gt; 0 ) {
+					frameDelta = Math.floor( frameDelta );
+				} else {
+					frameDelta = Math.ceil( frameDelta );
+				}
+
+				if ( frameDelta !== 0 ) {
+					this._frameIndex += frameDelta;
+					this._lastFrameElapsed = this.clock.elapsed();
+
+					// Loop check
+					if ( this._loop ) {
+						if ( this._frameIndex &gt; this.length - 1 ) {
+							while ( this._frameIndex &gt; this.length - 1 ) {
+								this._frameIndex -= this.length;
+								if ( this._onLoop != null ) {
+									this._onLoop.dispatch();
+								}
+							}
+						} else if ( this._frameIndex &lt; 0 ) {
+							while ( this._frameIndex &lt; 0 ) {
+								this._frameIndex += this.length;
+								if ( this._onLoop != null ) {
+									this._onLoop.dispatch();
+								}
+							}
+						}
+					} else if ( this._frameIndex &lt; 0 || this._frameIndex &gt;= this.length ) {
+						if ( this._onComplete != null ) {
+							this._onComplete.dispatch();
+						}
+						// Execute the stop on the parent 
+						// to allow the isPlaying boolean to remain consistent
+						this._parent.stop();
+						return;
+					}
+
+					this._parent.updateCellIndex();
+					if ( this._onUpdate !== null ) {
+						this._onUpdate.dispatch();
+					}
+				}
+			}
+		}
+
+		/**
+		* An internal method used to check to see if frame passed is valid or not
+		* @method _validateFrame
+		* @param frame {Number} The index of the frame that is to be validated.
+		* @private
+		*/
+		private _validateFrame(frame: number) {
+			return (frame &lt; this.length &amp;&amp; frame &gt;= 0);
+		}
+		
+		/**
+		* Returns the number of frames that in the animation. Thus the animations &#x27;length&#x27;. Note this is READ ONLY.
+		* @property length
+		* @type number
+		* @public
+		*/
+		public get length():number {
+			return this._sequence.cells.length;
+		}
+
+		/**
+		* Destroys the anim and all of the properties that exist on it.
+		* @method destroy
+		* @public
+		*/
+		public destroy() {
+			this._isPlaying = false;
+			delete this._clock;
+			delete this._sequence;
+			delete this._parent;
+			if(this._onLoop) this._onLoop.dispose();
+			if(this._onStop) this._onStop.dispose();
+			if(this._onPlay) this._onPlay.dispose();
+			if(this._onUpdate) this._onUpdate.dispose();
+			delete this._onLoop;
+			delete this._onStop ;
+			delete this._onPlay ;
+			delete this._onUpdate ;
+			delete this.frameIndex ;
+			delete this.loop;
+			delete this._reverse;
+			delete this._tick;
+		}
+	}
 }
 
     </pre>
diff --git a/docs/files/src_animations_Sequence.ts.html b/docs/files/src_animations_Sequence.ts.html
index 19cc81c..6acd719 100644
--- a/docs/files/src_animations_Sequence.ts.html
+++ b/docs/files/src_animations_Sequence.ts.html
@@ -370,67 +370,68 @@ <h1 class="file-heading">File: src/animations/Sequence.ts</h1>
 * @submodule Animations
 * 
 */
- 
+
 module Kiwi.Animations {
 
-    /**
-    * A Sequence is a series of cells that are held on a SpriteSheet/TextureAtlas.
-    * Sequences are generally used with the AnimationManager/Animation sections as a way to initially create Animations on GameObjects that use the same TextureAtlas.
-    * 
-    * @class Sequence
-    * @namespace Kiwi.Animations
-    * @constructor
-    * @param name {String} The name of this sequence. This is not unique.
-    * @param cells {Number[]} The cells that are in this animation.
-    * @param [speed=0.1] {Number} The time an animation should spend on each frame.
-    * @param [loop=true] {boolean} If the sequence should play again if it was animating and the animation reaches the last frame.
-    * @return {Kiwi.Animations.Sequence}
-    * 
-    */
-    export class Sequence {
-        
-        constructor(name:string,cells:number[],speed:number=0.1,loop:boolean=true) {
-            this.name = name;
-            this.cells = cells;
-            this.speed = speed;
-            this.loop = loop;
-        }
+	/**
+	* A Sequence is a series of cells that are held on a SpriteSheet/TextureAtlas.
+	* Sequences are generally used with the AnimationManager/Animation sections as a way to initially create Animations on GameObjects that use the same TextureAtlas.
+	* 
+	* @class Sequence
+	* @namespace Kiwi.Animations
+	* @constructor
+	* @param name {String} The name of this sequence. This is not unique.
+	* @param cells {Number[]} The cells that are in this animation.
+	* @param [speed=0.1] {Number} The time an animation should spend on each frame.
+	* @param [loop=true] {boolean} If the sequence should play again if it was animating and the animation reaches the last frame.
+	* @return {Kiwi.Animations.Sequence}
+	* 
+	*/
+	export class Sequence {
+
+		constructor(name:string,cells:number[],speed:number=0.1,loop:boolean=true) {
+			this.name = name;
+			this.cells = cells;
+			this.speed = speed;
+			this.loop = loop;
+		}
 
-        /**
-        * The name of this sequence.
-        * @property name
-        * @type string
-        * @public
-        */
-        public name: string;
+		/**
+		* The name of this sequence.
+		* @property name
+		* @type string
+		* @public
+		*/
+		public name: string;
 
-        /**
-        * The cells that are in this animation.
-        * These are a reference to the cells that are contained in a texture atlas that this sequence should be a part of.
-        * @property cells
-        * @type number[]
-        * @public
-        */
-        public cells: number[];
+		/**
+		* The cells that are in this animation.
+		* These are a reference to the cells that are contained in a texture atlas that this sequence should be a part of.
+		* @property cells
+		* @type number[]
+		* @public
+		*/
+		public cells: number[];
 
-        /**
-        * The time an animation should spend on each cell.
-        * @property speed
-        * @type boolean
-        * @public
-        */
-        public speed: number;
-        
-        /**
-        * If the sequence should play again if it was animating and the animation reaches the last frame.
-        * @property loop
-        * @type boolean
-        * @public
-        */
-        public loop: boolean;
+		/**
+		* The time an animation should spend on each cell.
+		* @property speed
+		* @type boolean
+		* @public
+		*/
+		public speed: number;
 
-    }
+		/**
+		* If the sequence should play again if it was animating and the animation reaches the last frame.
+		* @property loop
+		* @type boolean
+		* @public
+		*/
+		public loop: boolean;
+
+	}
 }
+
     </pre>
 </div>
 
diff --git a/docs/files/src_animations_tweens_Tween.ts.html b/docs/files/src_animations_tweens_Tween.ts.html
index cae9463..5676fc8 100644
--- a/docs/files/src_animations_tweens_Tween.ts.html
+++ b/docs/files/src_animations_tweens_Tween.ts.html
@@ -370,567 +370,567 @@ <h1 class="file-heading">File: src/animations/tweens/Tween.ts</h1>
 * @submodule Tweens 
 * 
 */
- 
+
 module Kiwi.Animations {
 
-    /**
-    * Manages the tweening of properties/values on a single object. A Tween is the animation of a number between an initially value to and final value (that you specify). 
-    * Note: When using a Tween you need to make sure that the Tween has been added to a TweenManager. You can either do this by creating the Tween via the Manager or alternatively using the &#x27;add&#x27; method on the TweenManager. Otherwise the tween will not work.
-    *
-    * Based on tween.js by sole. Converted to TypeScript and integrated into Kiwi.
-    * https://github.com/sole/tween.js
-    *
-    * @class Tween
-    * @constructor
-    * @namespace Kiwi.Animations
-    * @param object {Any} The object that this tween is taking affect on.
-    * @param game {Kiwi.Game} The game that this tween is for.
-    * @return {Kiwi.Animations.Tween} This tween.
-    *
-    * @author     sole / http://soledadpenades.com
-    * @author     mrdoob / http://mrdoob.com
-    * @author     Robert Eisele / http://www.xarg.org
-    * @author     Philippe / http://philippe.elsass.me
-    * @author     Robert Penner / http://www.robertpenner.com/easing_terms_of_use.html
-    * @author     Paul Lewis / http://www.aerotwist.com/
-    * @author     lechecacharro
-    * @author     Josh Faul / http://jocafa.com/
-    * @author     egraether / http://egraether.com/
-    *
-    */
-    export class Tween {
- 
-        constructor(object, game:Kiwi.Game = null) {
-
-            this._object = object;
-
-            if (game !== null)
-            {
-                this._game = game;
-                this._manager = this._game.tweens;
-            }
-
-            this.isRunning = false;
-
-        }
-
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} &quot;Tween&quot;
-        * @public
-        */
-        public objType() {
-            return &quot;Tween&quot;;
-        }
-
-        /** 
-        * The game that this tween belongs to.
-        * @property _game
-        * @type Kiwi.Game
-        * @private
-        */
-        private _game: Kiwi.Game = null;
-
-        /** 
-        * The manager that this tween belongs to. 
-        * @property _manager
-        * @type Kiwi.Animations.Tweens.TweenManager
-        * @private
-        */
-        private _manager: Kiwi.Animations.Tweens.TweenManager = null;
-
-        /**
-        * The manager that this tween belongs to.
-        * @property manager
-        * @type Kiwi.Animations.Tweens.TweenManager
-        * @private
-        * @since 1.2.0
-        */
-        public get manager(): Kiwi.Animations.Tweens.TweenManager {
-            return this._manager;
-        }
-
-        public set manager( value: Kiwi.Animations.Tweens.TweenManager ) {
-            this._manager = value;
-        }
-
-        /** 
-        * The object that this tween is affecting.
-        * @property _object
-        * @type Any
-        * @private
-        */
-	    private _object = null;
-
-        /**
-        * The object that this tween is affecting.
-        * If you change this, it will continue to tween,
-        * but any properties that are not on the new object
-        * will be discarded from the tween.
-        * @property object
-        * @type any
-        * @public
-        */
-        public get object(): any {
-            return this._object;
-        }
-
-        public set object( value: any ) {
-            var i,
-                newValues = {};
-
-            this._object = value;
-
-            for ( i in this._valuesEnd ) {
-                if ( value[ i ] ) {
-                    newValues[ i ] = this._valuesEnd[ i ];
-                }
-            }
-
-            this._valuesEnd = newValues;
-        }
-
-        /** 
-        * The starting values of the properties that the tween is animating.
-        * @property _valuesStart
-        * @type Object
-        * @private
-        */
-	    private _valuesStart = {};
-
-        /** 
-        * The end values of the properties that the tween is animating.
-        * @property _valuesEnd
-        * @type Object
-        * @private
-        */
-	    private _valuesEnd = {};
-
-        /** 
-        * The duration of the tween, in milliseconds.
-        * @property _duration
-        * @type Number
-        * @private
-        */
-	    private _duration = 1000;
-
-        /** 
-        * The amount of time to delay the tween by. In Milliseconds.
-        * @property _delayTime
-        * @type Number
-        * @private
-        */
-	    private _delayTime:number = 0;
-
-        /** 
-        * The time at which the tween started.
-        * @property _startTime
-        * @type Number
-        * @private
-        */
-	    private _startTime:number = null;
-
-        /** 
-        * The easing function that is to be used while tweening.
-        * @property _easingFunction
-        * @type Function
-        * @default Kiwi.Tweens.Easing.Linear.None
-        * @private
-        */
-        private _easingFunction = Kiwi.Animations.Tweens.Easing.Linear.None;
-
-        /** 
-        * [NEEDS DESCRIPTION]
-        * @property _interpolationFunction
-        * @type Function
-        * @default Kiwi.Utils.Interpolation.Linear
-        * @private
-        */
-	    private _interpolationFunction = Kiwi.Utils.GameMath.linearInterpolation;
-
-        /** 
-        * An array containing all of the tweens that are to be played when this one finishes.
-        * @property _chainedTweens
-        * @type Tween[]
-        * @private
-        */
-	    private _chainedTweens = [];
-
-        /** 
-        * The method that is to be called when the tween starts playing.
-        * @property _onStartCallback
-        * @type Function
-        * @default null
-        * @private
-        */
-	    private _onStartCallback = null;
-        
-        /**
-        * The context that the _onStartCallback method is to be called in. 
-        * @property _onStartContext
-        * @type Any
-        * @default null
-        * @private
-        */
-        private _onStartContext:any = null;
-
-        /** 
-        * A boolean indicating if the starting callback has been called or not.
-        * @property _onStartCallbackFired
-        * @type boolean
-        * @default false
-        * @private
-        */
-	    private _onStartCallbackFired:boolean = false;
-
-        /** 
-        * A callback method that will be called each time the tween updates.
-        * @property _onUpdateCallback
-        * @type Function
-        * @default null
-        * @private
-        */
-	    private _onUpdateCallback = null;
-        
-        /**
-        * The context that the update callback has when called.
-        * @property _onUpdateContext
-        * @type any
-        * @default null
-        * @private
-        */
-        private _onUpdateContext:any = null;
-
-        /** 
-        * A method to be called when the tween finish&#x27;s tweening.
-        * @property _onCompleteCallback
-        * @type function
-        * @default null
-        * @private
-        */
-	    private _onCompleteCallback = null;
-
-        /*
-        * A boolean indicating whether or not the _onCompleteCallback has been called.
-        * Is reset each time you tell the tween to start.
-        * @property _onCompleteCalled
-        * @type boolean
-        * @default false
-        * @private
-        */
-	    private _onCompleteCalled: boolean = false;
-
-        /** 
-        * The context that the onCompleteCallback should have when called.
-        * @property _onCompleteContext
-        * @type any
-        * @default null
-        * @private
-        */
-	    private _onCompleteContext: any = null;
-
-        /**
-        * An indication of whether or not this tween is currently running.
-        * @property isRunning.
-        * @type boolean
-        * @default false
-        * @public
-        */
-        public isRunning: boolean = false;
-
-        /** 
-        * Sets up the various properties that define this tween.
-        * The ending position/properties for this tween, how long the tween should go for, easing method to use and if should start right way.
-        *
-        * @method to
-        * @param properties {Object} The ending location of the properties that you want to tween. 
-        * @param [duration=1000] {Number} The duration of the tween.
-        * @param [ease=null] {Any} The easing method to be used. If not specifed then this will default to LINEAR.
-        * @param [autoStart=false] {boolean} If the tween should start right away.
-        * @return {Kiwi.Animations.Tween}
-        * @public
-        */
-        public to(properties, duration: number = 1000, ease: any = null, autoStart: boolean = false):Tween {
-
-	        this._duration = duration;
-
-	        //  If properties isn&#x27;t an object this will fail, sanity check it here somehow?
-	        this._valuesEnd = properties;
-
-	        if (ease !== null) {
-	            this._easingFunction = ease;
-	        }
-
-	        if (autoStart === true) {
-                return this.start();
-
-	        } else {
-	            return this;
-	        }
-
-	    }
-
-        /** 
-        * Gets the initial values for the properties that it is to animate and starts the tween process.
-        * @method start
-        * @public
-        */
-	    public start() {
-            var property;
-
-            if (this._game === null || this._object === null)
-	        {
-	            return;
-	        }
-
-	        this.isRunning = true;
-
-	        this._manager.add(this);
-
-            this._onStartCallbackFired = false;
-
-            this._onCompleteCalled = false;
-
-	        this._startTime = this._manager.clock.elapsed() * 1000 + this._delayTime;
-
-	        for ( var property in this._valuesEnd ) {
-	            // This prevents the interpolation of null values or of non-existing properties
-	            if ( this._object[ property ] === null || !( property in this._object ) ) {
-	                continue;
-	            }
-
-	            // check if an Array was provided as property value
-	            if ( this._valuesEnd[ property ] instanceof Array ) {
-	                if ( this._valuesEnd[ property ].length === 0 ) {
-	                    continue;
-	                }
-
-	                // create a local copy of the Array with the start value at the front
-	                this._valuesEnd[ property ] = [ this._object[ property ] ].concat(this._valuesEnd[ property ]);
-	            }
-
-                //  Check if property is a function
-	            if ( typeof this._object[ property ] === &quot;function&quot; ) {
-	                this._valuesStart[ property ] = this._object[ property ]();
-	            } else {
-	                this._valuesStart[ property ] = this._object[ property ];
-	            }
-
-	        }
-
-	        return this;
-
-	    }
-
-        /** 
-        * Stops the Tween from running and removes it from the manager.
-        * @method stop
-        * @public
-        */
-	    public stop() {
-
-	        if (this._manager !== null)
-	        {
-	            this._manager.remove(this);
-	        }
-
-	        this.isRunning = false;
-
-	        return this;
-
-	    }
-
-        /** 
-        * Sets the game and the manager of this tween.
-        * @method setParent
-        * @param {Kiwi.Game} value
-        * @public
-        */
-	    public setParent(value:Kiwi.Game) {
-
-	        this._game = value;
-            this._manager = this._game.tweens;
-
-	    }
-
-        /** 
-        * Sets the amount of delay that the tween is to have before it starts playing.
-        * @method delay
-        * @param amount {Number} The amount of time to delay the tween by.
-        * @return {Kiwi.Animations.Tween}
-        * @public
-        */
-	    public delay(amount:number):Tween {
-
-	        this._delayTime = amount;
-	        return this;
-
-	    }
-
-        /** 
-        * Sets the easing method that is to be used when animating this tween.
-        * @method easing
-        * @param easing {Function} The easing function to use.
-        * @return {Kiwi.Animations.Tween} 
-        * @public
-        */
-	    public easing(easing):Tween {
-
-	        this._easingFunction = easing;
-	        return this;
-
-	    }
-
-        /** 
-        * [REQUIRES DESCRIPTION]
-        * @method interpolation
-        * @param {Any} interpolation
-        * @return {Kiwi.Animations.Tween}
-        * @public
-        */
-	    public interpolation(interpolation):Tween {
-
-	        this._interpolationFunction = interpolation;
-
-	        return this;
-
-	    }
-
-        /** 
-        * Adds another tween that should start playing once tween has completed.
-        * @method chain
-        * @param tween {Kiwi.Animations.Tween}
-        * @return {Kiwi.Animations.Tween}
-        * @public
-        */
-	    public chain(tween:Kiwi.Animations.Tween):Tween {
-
-	        this._chainedTweens.push(tween);
-	        return this;
-
-	    }
-
-        /** 
-        * Adds a function that is to be executed when the tween start playing.
-        * @method onStart
-        * @param callback {Function} The function that is to be executed on tween start.
-        * @param context {any} The context that function is to have when called.
-        * @return {Kiwi.Animations.Tween}
-        * @public
-        */
-	    public onStart(callback, context):Tween {
-
-	        this._onStartCallback = callback;
-            this._onStartContext = context;
-            return this;
-
-	    }
-
-        /** 
-        * Adds a function that is to be executed when this tween updates while it is playing.
-        * @method onUpdate
-        * @param callback {Function} The method that is to be executed.
-        * @param context {Any} The context the method is to have when called.
-        * @public
-        */
-	    public onUpdate(callback, context) {
-
-            this._onUpdateCallback = callback;
-            this._onUpdateContext = context;
-	        return this;
-
-	    }
-
-        /** 
-        * Defines a method that is to be called when this tween is finished.
-        * @method onComplete
-        * @param callback {Function} The method that is to be executed.
-        * @param context {Any} The context the method is to have when called.
-        * @public
-        */
-	    public onComplete(callback, context) {
-
-	        this._onCompleteCallback = callback;
-	        this._onCompleteContext = context;
-
-	        return this;
-
-	    }
-
-        /** 
-        * The update loop is executed every frame whilst the tween is running.
-        * @method update
-        * @param time {Number}
-        * @return {boolean} Whether the Tween is still running
-        * @public
-        */
-	    public update( time: number ) {
-
-            if ( time &lt; this._startTime - this._delayTime ) {
-                return false;
-            }
-
-            if ( this._onStartCallbackFired === false ) {
-                if ( this._onStartCallback !== null ) {
-                    this._onStartCallback.call( this._onStartContext,
-                        this._object );
-                }
-
-                this._onStartCallbackFired = true;
-            }
-
-            var elapsed = ( time - this._startTime ) / this._duration;
-            elapsed = elapsed &gt; 1 ? 1 :
-                elapsed &lt; 0 ? 0 :
-                elapsed;
-
-            var value = this._easingFunction( elapsed );
-
-            for ( var property in this._valuesStart ) {
-                var start = this._valuesStart[ property ];
-                var end = this._valuesEnd[ property ];
-
-                //  Add checks for object, array, numeric up front
-                if ( end instanceof Array ) {
-                    this._object[ property ] =
-                        this._interpolationFunction( end, value );
-                } else {
-                    if ( typeof this._object[ property ] === &quot;function&quot; ) {
-                        this._object[ property ]( start + ( end - start ) * value );
-                    } else {
-                        this._object[ property ] = start + ( end - start ) * value;
-                    }
-                }
-            }
-
-            if ( this._onUpdateCallback !== null ) {
-                this._onUpdateCallback.call( this._onUpdateContext,
-                    this._object, value );
-            }
-
-            if ( elapsed === 1 ) {
-                this.isRunning = false;
-
-                if ( this._onCompleteCallback !== null &amp;&amp;
-                        this._onCompleteCalled === false ) {
-                    this._onCompleteCalled = true;
-                    this._onCompleteCallback.call(
-                        this._onCompleteContext, this._object );
-                }
-
-                for ( var i = 0; i &lt; this._chainedTweens.length; i++ ) {
-                    this._chainedTweens[ i ].start();
-                }
-
-                return false;
-            }
-
-            return true;
-
-	    }
-
-    }
+	/**
+	* Manages the tweening of properties/values on a single object. A Tween is the animation of a number between an initially value to and final value (that you specify). 
+	* Note: When using a Tween you need to make sure that the Tween has been added to a TweenManager. You can either do this by creating the Tween via the Manager or alternatively using the &#x27;add&#x27; method on the TweenManager. Otherwise the tween will not work.
+	*
+	* Based on tween.js by sole. Converted to TypeScript and integrated into Kiwi.
+	* https://github.com/sole/tween.js
+	*
+	* @class Tween
+	* @constructor
+	* @namespace Kiwi.Animations
+	* @param object {Any} The object that this tween is taking affect on.
+	* @param game {Kiwi.Game} The game that this tween is for.
+	* @return {Kiwi.Animations.Tween} This tween.
+	*
+	* @author     sole / http://soledadpenades.com
+	* @author     mrdoob / http://mrdoob.com
+	* @author     Robert Eisele / http://www.xarg.org
+	* @author     Philippe / http://philippe.elsass.me
+	* @author     Robert Penner / http://www.robertpenner.com/easing_terms_of_use.html
+	* @author     Paul Lewis / http://www.aerotwist.com/
+	* @author     lechecacharro
+	* @author     Josh Faul / http://jocafa.com/
+	* @author     egraether / http://egraether.com/
+	*
+	*/
+	export class Tween {
+
+		constructor(object, game:Kiwi.Game = null) {
+
+			this._object = object;
+
+			if (game !== null)
+			{
+				this._game = game;
+				this._manager = this._game.tweens;
+			}
+
+			this.isRunning = false;
+
+		}
+
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} &quot;Tween&quot;
+		* @public
+		*/
+		public objType() {
+			return &quot;Tween&quot;;
+		}
+
+		/** 
+		* The game that this tween belongs to.
+		* @property _game
+		* @type Kiwi.Game
+		* @private
+		*/
+		private _game: Kiwi.Game = null;
+
+		/** 
+		* The manager that this tween belongs to. 
+		* @property _manager
+		* @type Kiwi.Animations.Tweens.TweenManager
+		* @private
+		*/
+		private _manager: Kiwi.Animations.Tweens.TweenManager = null;
+
+		/**
+		* The manager that this tween belongs to.
+		* @property manager
+		* @type Kiwi.Animations.Tweens.TweenManager
+		* @private
+		* @since 1.2.0
+		*/
+		public get manager(): Kiwi.Animations.Tweens.TweenManager {
+			return this._manager;
+		}
+
+		public set manager( value: Kiwi.Animations.Tweens.TweenManager ) {
+			this._manager = value;
+		}
+
+		/** 
+		* The object that this tween is affecting.
+		* @property _object
+		* @type Any
+		* @private
+		*/
+		private _object = null;
+
+		/**
+		* The object that this tween is affecting.
+		* If you change this, it will continue to tween,
+		* but any properties that are not on the new object
+		* will be discarded from the tween.
+		* @property object
+		* @type any
+		* @public
+		*/
+		public get object(): any {
+			return this._object;
+		}
+
+		public set object( value: any ) {
+			var i,
+				newValues = {};
+
+			this._object = value;
+
+			for ( i in this._valuesEnd ) {
+				if ( value[ i ] ) {
+					newValues[ i ] = this._valuesEnd[ i ];
+				}
+			}
+
+			this._valuesEnd = newValues;
+		}
+
+		/** 
+		* The starting values of the properties that the tween is animating.
+		* @property _valuesStart
+		* @type Object
+		* @private
+		*/
+		private _valuesStart = {};
+
+		/** 
+		* The end values of the properties that the tween is animating.
+		* @property _valuesEnd
+		* @type Object
+		* @private
+		*/
+		private _valuesEnd = {};
+
+		/** 
+		* The duration of the tween, in milliseconds.
+		* @property _duration
+		* @type Number
+		* @private
+		*/
+		private _duration = 1000;
+
+		/** 
+		* The amount of time to delay the tween by. In Milliseconds.
+		* @property _delayTime
+		* @type Number
+		* @private
+		*/
+		private _delayTime:number = 0;
+
+		/** 
+		* The time at which the tween started.
+		* @property _startTime
+		* @type Number
+		* @private
+		*/
+		private _startTime:number = null;
+
+		/** 
+		* The easing function that is to be used while tweening.
+		* @property _easingFunction
+		* @type Function
+		* @default Kiwi.Tweens.Easing.Linear.None
+		* @private
+		*/
+		private _easingFunction = Kiwi.Animations.Tweens.Easing.Linear.None;
+
+		/** 
+		* [NEEDS DESCRIPTION]
+		* @property _interpolationFunction
+		* @type Function
+		* @default Kiwi.Utils.Interpolation.Linear
+		* @private
+		*/
+		private _interpolationFunction = Kiwi.Utils.GameMath.linearInterpolation;
+
+		/** 
+		* An array containing all of the tweens that are to be played when this one finishes.
+		* @property _chainedTweens
+		* @type Tween[]
+		* @private
+		*/
+		private _chainedTweens = [];
+
+		/** 
+		* The method that is to be called when the tween starts playing.
+		* @property _onStartCallback
+		* @type Function
+		* @default null
+		* @private
+		*/
+		private _onStartCallback = null;
+
+		/**
+		* The context that the _onStartCallback method is to be called in. 
+		* @property _onStartContext
+		* @type Any
+		* @default null
+		* @private
+		*/
+		private _onStartContext:any = null;
+
+		/** 
+		* A boolean indicating if the starting callback has been called or not.
+		* @property _onStartCallbackFired
+		* @type boolean
+		* @default false
+		* @private
+		*/
+		private _onStartCallbackFired:boolean = false;
+
+		/** 
+		* A callback method that will be called each time the tween updates.
+		* @property _onUpdateCallback
+		* @type Function
+		* @default null
+		* @private
+		*/
+		private _onUpdateCallback = null;
+
+		/**
+		* The context that the update callback has when called.
+		* @property _onUpdateContext
+		* @type any
+		* @default null
+		* @private
+		*/
+		private _onUpdateContext:any = null;
+
+		/** 
+		* A method to be called when the tween finish&#x27;s tweening.
+		* @property _onCompleteCallback
+		* @type function
+		* @default null
+		* @private
+		*/
+		private _onCompleteCallback = null;
+
+		/*
+		* A boolean indicating whether or not the _onCompleteCallback has been called.
+		* Is reset each time you tell the tween to start.
+		* @property _onCompleteCalled
+		* @type boolean
+		* @default false
+		* @private
+		*/
+		private _onCompleteCalled: boolean = false;
+
+		/** 
+		* The context that the onCompleteCallback should have when called.
+		* @property _onCompleteContext
+		* @type any
+		* @default null
+		* @private
+		*/
+		private _onCompleteContext: any = null;
+
+		/**
+		* An indication of whether or not this tween is currently running.
+		* @property isRunning.
+		* @type boolean
+		* @default false
+		* @public
+		*/
+		public isRunning: boolean = false;
+
+		/** 
+		* Sets up the various properties that define this tween.
+		* The ending position/properties for this tween, how long the tween should go for, easing method to use and if should start right way.
+		*
+		* @method to
+		* @param properties {Object} The ending location of the properties that you want to tween. 
+		* @param [duration=1000] {Number} The duration of the tween.
+		* @param [ease=null] {Any} The easing method to be used. If not specifed then this will default to LINEAR.
+		* @param [autoStart=false] {boolean} If the tween should start right away.
+		* @return {Kiwi.Animations.Tween}
+		* @public
+		*/
+		public to(properties, duration: number = 1000, ease: any = null, autoStart: boolean = false):Tween {
+
+			this._duration = duration;
+
+			//  If properties isn&#x27;t an object this will fail, sanity check it here somehow?
+			this._valuesEnd = properties;
+
+			if (ease !== null) {
+				this._easingFunction = ease;
+			}
+
+			if (autoStart === true) {
+				return this.start();
+
+			} else {
+				return this;
+			}
+
+		}
+
+		/** 
+		* Gets the initial values for the properties that it is to animate and starts the tween process.
+		* @method start
+		* @public
+		*/
+		public start() {
+			var property;
+
+			if (this._game === null || this._object === null)
+			{
+				return;
+			}
+
+			this.isRunning = true;
+
+			this._manager.add(this);
+
+			this._onStartCallbackFired = false;
+
+			this._onCompleteCalled = false;
+
+			this._startTime = this._manager.clock.elapsed() * 1000 + this._delayTime;
+
+			for ( var property in this._valuesEnd ) {
+				// This prevents the interpolation of null values or of non-existing properties
+				if ( this._object[ property ] === null || !( property in this._object ) ) {
+					continue;
+				}
+
+				// check if an Array was provided as property value
+				if ( this._valuesEnd[ property ] instanceof Array ) {
+					if ( this._valuesEnd[ property ].length === 0 ) {
+						continue;
+					}
+
+					// create a local copy of the Array with the start value at the front
+					this._valuesEnd[ property ] = [ this._object[ property ] ].concat(this._valuesEnd[ property ]);
+				}
+
+				//  Check if property is a function
+				if ( typeof this._object[ property ] === &quot;function&quot; ) {
+					this._valuesStart[ property ] = this._object[ property ]();
+				} else {
+					this._valuesStart[ property ] = this._object[ property ];
+				}
+
+			}
+
+			return this;
+
+		}
+
+		/** 
+		* Stops the Tween from running and removes it from the manager.
+		* @method stop
+		* @public
+		*/
+		public stop() {
+
+			if (this._manager !== null)
+			{
+				this._manager.remove(this);
+			}
+
+			this.isRunning = false;
+
+			return this;
+
+		}
+
+		/** 
+		* Sets the game and the manager of this tween.
+		* @method setParent
+		* @param {Kiwi.Game} value
+		* @public
+		*/
+		public setParent(value:Kiwi.Game) {
+
+			this._game = value;
+			this._manager = this._game.tweens;
+
+		}
+
+		/** 
+		* Sets the amount of delay that the tween is to have before it starts playing.
+		* @method delay
+		* @param amount {Number} The amount of time to delay the tween by.
+		* @return {Kiwi.Animations.Tween}
+		* @public
+		*/
+		public delay(amount:number):Tween {
+
+			this._delayTime = amount;
+			return this;
+
+		}
+
+		/** 
+		* Sets the easing method that is to be used when animating this tween.
+		* @method easing
+		* @param easing {Function} The easing function to use.
+		* @return {Kiwi.Animations.Tween} 
+		* @public
+		*/
+		public easing(easing):Tween {
+
+			this._easingFunction = easing;
+			return this;
+
+		}
+
+		/** 
+		* [REQUIRES DESCRIPTION]
+		* @method interpolation
+		* @param {Any} interpolation
+		* @return {Kiwi.Animations.Tween}
+		* @public
+		*/
+		public interpolation(interpolation):Tween {
+
+			this._interpolationFunction = interpolation;
+
+			return this;
+
+		}
+
+		/** 
+		* Adds another tween that should start playing once tween has completed.
+		* @method chain
+		* @param tween {Kiwi.Animations.Tween}
+		* @return {Kiwi.Animations.Tween}
+		* @public
+		*/
+		public chain(tween:Kiwi.Animations.Tween):Tween {
+
+			this._chainedTweens.push(tween);
+			return this;
+
+		}
+
+		/** 
+		* Adds a function that is to be executed when the tween start playing.
+		* @method onStart
+		* @param callback {Function} The function that is to be executed on tween start.
+		* @param context {any} The context that function is to have when called.
+		* @return {Kiwi.Animations.Tween}
+		* @public
+		*/
+		public onStart(callback, context):Tween {
+
+			this._onStartCallback = callback;
+			this._onStartContext = context;
+			return this;
+
+		}
+
+		/** 
+		* Adds a function that is to be executed when this tween updates while it is playing.
+		* @method onUpdate
+		* @param callback {Function} The method that is to be executed.
+		* @param context {Any} The context the method is to have when called.
+		* @public
+		*/
+		public onUpdate(callback, context) {
+
+			this._onUpdateCallback = callback;
+			this._onUpdateContext = context;
+			return this;
+
+		}
+
+		/** 
+		* Defines a method that is to be called when this tween is finished.
+		* @method onComplete
+		* @param callback {Function} The method that is to be executed.
+		* @param context {Any} The context the method is to have when called.
+		* @public
+		*/
+		public onComplete(callback, context) {
+
+			this._onCompleteCallback = callback;
+			this._onCompleteContext = context;
+
+			return this;
+
+		}
+
+		/** 
+		* The update loop is executed every frame whilst the tween is running.
+		* @method update
+		* @param time {Number}
+		* @return {boolean} Whether the Tween is still running
+		* @public
+		*/
+		public update( time: number ) {
+
+			if ( time &lt; this._startTime - this._delayTime ) {
+				return false;
+			}
+
+			if ( this._onStartCallbackFired === false ) {
+				if ( this._onStartCallback !== null ) {
+					this._onStartCallback.call( this._onStartContext,
+						this._object );
+				}
+
+				this._onStartCallbackFired = true;
+			}
+
+			var elapsed = ( time - this._startTime ) / this._duration;
+			elapsed = elapsed &gt; 1 ? 1 :
+				elapsed &lt; 0 ? 0 :
+				elapsed;
+
+			var value = this._easingFunction( elapsed );
+
+			for ( var property in this._valuesStart ) {
+				var start = this._valuesStart[ property ];
+				var end = this._valuesEnd[ property ];
+
+				//  Add checks for object, array, numeric up front
+				if ( end instanceof Array ) {
+					this._object[ property ] =
+						this._interpolationFunction( end, value );
+				} else {
+					if ( typeof this._object[ property ] === &quot;function&quot; ) {
+						this._object[ property ]( start + ( end - start ) * value );
+					} else {
+						this._object[ property ] = start + ( end - start ) * value;
+					}
+				}
+			}
+
+			if ( this._onUpdateCallback !== null ) {
+				this._onUpdateCallback.call( this._onUpdateContext,
+					this._object, value );
+			}
+
+			if ( elapsed === 1 ) {
+				this.isRunning = false;
+
+				if ( this._onCompleteCallback !== null &amp;&amp;
+						this._onCompleteCalled === false ) {
+					this._onCompleteCalled = true;
+					this._onCompleteCallback.call(
+						this._onCompleteContext, this._object );
+				}
+
+				for ( var i = 0; i &lt; this._chainedTweens.length; i++ ) {
+					this._chainedTweens[ i ].start();
+				}
+
+				return false;
+			}
+
+			return true;
+
+		}
+
+	}
 }
 
     </pre>
diff --git a/docs/files/src_animations_tweens_TweenManager.ts.html b/docs/files/src_animations_tweens_TweenManager.ts.html
index 1c9d2fd..ad3c4dd 100644
--- a/docs/files/src_animations_tweens_TweenManager.ts.html
+++ b/docs/files/src_animations_tweens_TweenManager.ts.html
@@ -374,190 +374,190 @@ <h1 class="file-heading">File: src/animations/tweens/TweenManager.ts</h1>
 
 module Kiwi.Animations.Tweens {
 
-    /** 
-    * The TweenManager is automatically created on every game. This class is responsible for the creation and management of tweens for the game.
-    *  
-    * Based on tween.js by sole. Converted to TypeScript and integrated into Kiwi.
-    * https://github.com/sole/tween.js
-    *
-    * @class TweenManager
-    * @namespace Kiwi.Animations.Tweens
-    * @constructor
-    * @param game {Kiwi.Game} Current game
-    * @param [clock] {Kiwi.Time.Clock} Clock to use for tweens.
-    *   Defaults to game.time.clock.
-    * @return {Kiwi.Animations.TweenManager}
-    * 
-    * @author     sole / http://soledadpenades.com
-    * @author     mrdoob / http://mrdoob.com
-    * @author     Robert Eisele / http://www.xarg.org
-    * @author     Philippe / http://philippe.elsass.me
-    * @author     Robert Penner / http://www.robertpenner.com/easing_terms_of_use.html
-    * @author     Paul Lewis / http://www.aerotwist.com/
-    * @author     lechecacharro
-    * @author     Josh Faul / http://jocafa.com/
-    * @author     egraether / http://egraether.com/
-    * 
-    */
-    export class TweenManager {
-         
-        constructor( game: Kiwi.Game, clock?: Kiwi.Time.Clock ) {
-             
-            this._game = game;
-            this._tweens = [];
-            this.clock = clock || this._game.time.clock;
-
-        }
-
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} &quot;TweenManager&quot;
-        * @public
-        */
-        public objType() {
-            return &quot;TweenManager&quot;;
-        }
-
-        /** 
-        * The game that this manager belongs to.
-        * @property _game
-        * @type Kiwi.Game
-        * @private
-        */
-        private _game: Kiwi.Game;
-
-        /** 
-        * An array of all of the tweens on the manager.
-        * @property _tweens
-        * @type Kiwi.Animations.Tween[]
-        * @private
-        */
-        private _tweens: Kiwi.Animations.Tween[];
-
-        /**
-        * Clock used by tweens
-        * @property clock
-        * @type Kiwi.Time.Clock
-        * @public
-        * @since 1.2.0
-        */
-        public clock: Kiwi.Time.Clock;
-
-        /** 
-        * Returns all of tweens that are on the manager.
-        * @method getAll
-        * @return Kiwi.Animations.Tween[]
-        * @public
-        */
-        public getAll() {
-
-            return this._tweens;
-
-        }
-
-        /** 
-        * Removes all of the tweens on the manager.
-        * @method removeAll
-        * @public
-        */
-        public removeAll() {
-
-            this._tweens.length = 0;
-
-        }
-
-        /** 
-        * Creates a new Tween. 
-        * @method create
-        * @param object {Any} The object that this tween is to apply.
-        * @return {Kiwi.Animations.Tween} The tween that was created.
-        * @public
-        */
-        public create(object:any): Kiwi.Animations.Tween {
-            var tween = new Kiwi.Animations.Tween(object, this._game);
-            this.validateClock();
-            tween.manager = this;
-            return tween;
-        }
-
-        /** 
-        * Adds a tween to the manager. 
-        * @method add 
-        * @param tween {Kiwi.Animations.Tween} The tween that you want to add to the manager.
-        * @return {Kiwi.Animations.Tween} 
-        * @public
-        */
-        public add(tween: Kiwi.Animations.Tween): Kiwi.Animations.Tween {
-            tween.setParent(this._game);
-            tween.manager = this;
-            this.validateClock();
-            this._tweens.push(tween);
-            return tween;
-
-        }
-
-        /** 
-        * Removes a tween from this manager.
-        * @method remove
-        * @param tween {Kiwi.Animations.Tween} The tween that you would like to remove.
-        * @return {Kiwi.Animations.Tween} The tween passed in.
-        * @public
-        */
-        public remove(tween: Kiwi.Animations.Tween) {
-
-            var i = this._tweens.indexOf(tween);
-
-            if (i !== -1)
-            {
-                this._tweens.splice(i, 1);
-            }
-
-            return tween;
-        }
-
-        /** 
-        * The update loop.
-        * @method update
-        * @return {boolean} Whether anything was updated
-        * @public
-        */
-        public update() {
-            var i = 0,
-                numTweens = this._tweens.length;
-
-            if ( this._tweens.length === 0 ) {
-                return false;
-            }
-
-            while ( i &lt; numTweens ) {
-                if ( this._tweens[ i ].update( this.clock.elapsed() * 1000 ) ) {
-                    i++;
-                } else {
-                    this._tweens.splice( i, 1 );
-                    numTweens--;
-                }
-            }
-
-            return true;
-        }
-
-        /**
-        * Validate clock; if no valid clock is found, set one from game
-        * @method validateClock
-        * @public
-        * @since 1.2.0
-        */
-        public validateClock() {
-            if ( !this.clock ) {
-                this.clock = this._game.time.clock;
-                if ( !this.clock ) {
-                    Kiwi.Log.error( &quot;Tween manager could not find valid clock!&quot; );
-                }
-            }
-        }
-
-    }
+	/** 
+	* The TweenManager is automatically created on every game. This class is responsible for the creation and management of tweens for the game.
+	*  
+	* Based on tween.js by sole. Converted to TypeScript and integrated into Kiwi.
+	* https://github.com/sole/tween.js
+	*
+	* @class TweenManager
+	* @namespace Kiwi.Animations.Tweens
+	* @constructor
+	* @param game {Kiwi.Game} Current game
+	* @param [clock] {Kiwi.Time.Clock} Clock to use for tweens.
+	*   Defaults to game.time.clock.
+	* @return {Kiwi.Animations.TweenManager}
+	* 
+	* @author     sole / http://soledadpenades.com
+	* @author     mrdoob / http://mrdoob.com
+	* @author     Robert Eisele / http://www.xarg.org
+	* @author     Philippe / http://philippe.elsass.me
+	* @author     Robert Penner / http://www.robertpenner.com/easing_terms_of_use.html
+	* @author     Paul Lewis / http://www.aerotwist.com/
+	* @author     lechecacharro
+	* @author     Josh Faul / http://jocafa.com/
+	* @author     egraether / http://egraether.com/
+	* 
+	*/
+	export class TweenManager {
+
+		constructor( game: Kiwi.Game, clock?: Kiwi.Time.Clock ) {
+			 
+			this._game = game;
+			this._tweens = [];
+			this.clock = clock || this._game.time.clock;
+
+		}
+
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} &quot;TweenManager&quot;
+		* @public
+		*/
+		public objType() {
+			return &quot;TweenManager&quot;;
+		}
+
+		/** 
+		* The game that this manager belongs to.
+		* @property _game
+		* @type Kiwi.Game
+		* @private
+		*/
+		private _game: Kiwi.Game;
+
+		/** 
+		* An array of all of the tweens on the manager.
+		* @property _tweens
+		* @type Kiwi.Animations.Tween[]
+		* @private
+		*/
+		private _tweens: Kiwi.Animations.Tween[];
+
+		/**
+		* Clock used by tweens
+		* @property clock
+		* @type Kiwi.Time.Clock
+		* @public
+		* @since 1.2.0
+		*/
+		public clock: Kiwi.Time.Clock;
+
+		/** 
+		* Returns all of tweens that are on the manager.
+		* @method getAll
+		* @return Kiwi.Animations.Tween[]
+		* @public
+		*/
+		public getAll() {
+
+			return this._tweens;
+
+		}
+
+		/** 
+		* Removes all of the tweens on the manager.
+		* @method removeAll
+		* @public
+		*/
+		public removeAll() {
+
+			this._tweens.length = 0;
+
+		}
+
+		/** 
+		* Creates a new Tween. 
+		* @method create
+		* @param object {Any} The object that this tween is to apply.
+		* @return {Kiwi.Animations.Tween} The tween that was created.
+		* @public
+		*/
+		public create(object:any): Kiwi.Animations.Tween {
+			var tween = new Kiwi.Animations.Tween(object, this._game);
+			this.validateClock();
+			tween.manager = this;
+			return tween;
+		}
+
+		/** 
+		* Adds a tween to the manager. 
+		* @method add 
+		* @param tween {Kiwi.Animations.Tween} The tween that you want to add to the manager.
+		* @return {Kiwi.Animations.Tween} 
+		* @public
+		*/
+		public add(tween: Kiwi.Animations.Tween): Kiwi.Animations.Tween {
+			tween.setParent(this._game);
+			tween.manager = this;
+			this.validateClock();
+			this._tweens.push(tween);
+			return tween;
+
+		}
+
+		/** 
+		* Removes a tween from this manager.
+		* @method remove
+		* @param tween {Kiwi.Animations.Tween} The tween that you would like to remove.
+		* @return {Kiwi.Animations.Tween} The tween passed in.
+		* @public
+		*/
+		public remove(tween: Kiwi.Animations.Tween) {
+
+			var i = this._tweens.indexOf(tween);
+
+			if (i !== -1)
+			{
+				this._tweens.splice(i, 1);
+			}
+
+			return tween;
+		}
+
+		/** 
+		* The update loop.
+		* @method update
+		* @return {boolean} Whether anything was updated
+		* @public
+		*/
+		public update() {
+			var i = 0,
+				numTweens = this._tweens.length;
+
+			if ( this._tweens.length === 0 ) {
+				return false;
+			}
+
+			while ( i &lt; numTweens ) {
+				if ( this._tweens[ i ].update( this.clock.elapsed() * 1000 ) ) {
+					i++;
+				} else {
+					this._tweens.splice( i, 1 );
+					numTweens--;
+				}
+			}
+
+			return true;
+		}
+
+		/**
+		* Validate clock; if no valid clock is found, set one from game
+		* @method validateClock
+		* @public
+		* @since 1.2.0
+		*/
+		public validateClock() {
+			if ( !this.clock ) {
+				this.clock = this._game.time.clock;
+				if ( !this.clock ) {
+					Kiwi.Log.error( &quot;Tween manager could not find valid clock!&quot; );
+				}
+			}
+		}
+
+	}
 }
 
     </pre>
diff --git a/docs/files/src_animations_tweens_easing_Back.ts.html b/docs/files/src_animations_tweens_easing_Back.ts.html
index 357d289..fd2fae5 100644
--- a/docs/files/src_animations_tweens_easing_Back.ts.html
+++ b/docs/files/src_animations_tweens_easing_Back.ts.html
@@ -374,71 +374,71 @@ <h1 class="file-heading">File: src/animations/tweens/easing/Back.ts</h1>
 
 module Kiwi.Animations.Tweens.Easing {
 
-    /**
-    * 
-    * @class Back
-    * @namespace Kiwi.Animations.Tweens.Easing
-    * 
-    */
-    export class Back {
+	/**
+	* 
+	* @class Back
+	* @namespace Kiwi.Animations.Tweens.Easing
+	* 
+	*/
+	export class Back {
 
-        /**
-        * The type of object this is.
-        * @method objType
-        * @return {String} &quot;Back&quot;
-        * @public
-        */
-        public objType() {
-            return &quot;Back&quot;;
-        }
+		/**
+		* The type of object this is.
+		* @method objType
+		* @return {String} &quot;Back&quot;
+		* @public
+		*/
+		public objType() {
+			return &quot;Back&quot;;
+		}
 
-        /** 
-        * 
-        * @method In
-        * @param k {Any}
-        * @return {Number}
-        * @static
-        * @public
-        */
-        public static In(k) {
+		/** 
+		* 
+		* @method In
+		* @param k {Any}
+		* @return {Number}
+		* @static
+		* @public
+		*/
+		public static In(k) {
 
-            var s = 1.70158;
-            return k * k * ((s + 1) * k - s);
+			var s = 1.70158;
+			return k * k * ((s + 1) * k - s);
 
-        }
+		}
 
-        /** 
-        * 
-        * @method Out
-        * @param {Any} k
-        * @return {Number}
-        * @static
-        * @public
-        */
-        public static Out(k) {
+		/** 
+		* 
+		* @method Out
+		* @param {Any} k
+		* @return {Number}
+		* @static
+		* @public
+		*/
+		public static Out(k) {
 
-            var s = 1.70158;
-            return --k * k * ((s + 1) * k + s) + 1;
+			var s = 1.70158;
+			return --k * k * ((s + 1) * k + s) + 1;
 
-        }
+		}
 
-        /** 
-        * 
-        * @method InOut
-        * @param k {Any}
-        * @return {Number}
-        * @static
-        * @public
-        */
-        public static InOut(k) {
+		/** 
+		* 
+		* @method InOut
+		* @param k {Any}
+		* @return {Number}
+		* @static
+		* @public
+		*/
+		public static InOut(k) {
 
-            var s = 1.70158 * 1.525;
-            if ((k *= 2) &lt; 1) return 0.5 * (k * k * ((s + 1) * k - s));
-            return 0.5 * ((k -= 2) * k * ((s + 1) * k + s) + 2);
+			var s = 1.70158 * 1.525;
+			if ((k *= 2) &lt; 1) return 0.5 * (k * k * ((s + 1) * k - s));
+			return 0.5 * ((k -= 2) * k * ((s + 1) * k + s) + 2);
 
-        }
+		}
 
-    }
+	}
 
 }
 
diff --git a/docs/files/src_animations_tweens_easing_Bounce.ts.html b/docs/files/src_animations_tweens_easing_Bounce.ts.html
index d0c03e8..e1fd018 100644
--- a/docs/files/src_animations_tweens_easing_Bounce.ts.html
+++ b/docs/files/src_animations_tweens_easing_Bounce.ts.html
@@ -373,83 +373,83 @@ <h1 class="file-heading">File: src/animations/tweens/easing/Bounce.ts</h1>
 
 module Kiwi.Animations.Tweens.Easing {
 
-    /**
-    *
-    * @class Bounce
-    * @namespace Kiwi.Animations.Tweens.Easing
-    *
-    */
-    export class Bounce {
+	/**
+	*
+	* @class Bounce
+	* @namespace Kiwi.Animations.Tweens.Easing
+	*
+	*/
+	export class Bounce {
 
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} &quot;Bounce&quot;
-        * @public
-        */
-        public objType() {
-            return &quot;Bounce&quot;;
-        }
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} &quot;Bounce&quot;
+		* @public
+		*/
+		public objType() {
+			return &quot;Bounce&quot;;
+		}
 
-        /** 
-        * 
-        * @method In
-        * @param k {Any}
-        * @return {Number} 
-        * @static
-        * @public
-        */
-        public static In(k) {
+		/** 
+		* 
+		* @method In
+		* @param k {Any}
+		* @return {Number} 
+		* @static
+		* @public
+		*/
+		public static In(k) {
 
-            return 1 - Kiwi.Animations.Tweens.Easing.Bounce.Out(1 - k);
+			return 1 - Kiwi.Animations.Tweens.Easing.Bounce.Out(1 - k);
 
-        }
+		}
 
-        /** 
-        * 
-        * @method Out
-        * @param k {Any}
-        * @return {Number}
-        * @static
-        * @public
-        */
-        public static Out(k) {
+		/** 
+		* 
+		* @method Out
+		* @param k {Any}
+		* @return {Number}
+		* @static
+		* @public
+		*/
+		public static Out(k) {
 
-            if (k &lt; (1 / 2.75))
-            {
-                return 7.5625 * k * k;
-            }
-            else if (k &lt; (2 / 2.75))
-            {
-                return 7.5625 * (k -= (1.5 / 2.75)) * k + 0.75;
-            }
-            else if (k &lt; (2.5 / 2.75))
-            {
-                return 7.5625 * (k -= (2.25 / 2.75)) * k + 0.9375;
-            }
-            else
-            {
-                return 7.5625 * (k -= (2.625 / 2.75)) * k + 0.984375;
-            }
+			if (k &lt; (1 / 2.75))
+			{
+				return 7.5625 * k * k;
+			}
+			else if (k &lt; (2 / 2.75))
+			{
+				return 7.5625 * (k -= (1.5 / 2.75)) * k + 0.75;
+			}
+			else if (k &lt; (2.5 / 2.75))
+			{
+				return 7.5625 * (k -= (2.25 / 2.75)) * k + 0.9375;
+			}
+			else
+			{
+				return 7.5625 * (k -= (2.625 / 2.75)) * k + 0.984375;
+			}
 
-        }
+		}
 
-        /** 
-        * 
-        * @method InOut
-        * @param {Any} k
-        * @return {Number}
-        * @static
-        * @public
-        */
-        public static InOut(k) {
+		/** 
+		* 
+		* @method InOut
+		* @param {Any} k
+		* @return {Number}
+		* @static
+		* @public
+		*/
+		public static InOut(k) {
 
-            if (k &lt; 0.5) return Kiwi.Animations.Tweens.Easing.Bounce.In(k * 2) * 0.5;
-            return Kiwi.Animations.Tweens.Easing.Bounce.Out(k * 2 - 1) * 0.5 + 0.5;
+			if (k &lt; 0.5) return Kiwi.Animations.Tweens.Easing.Bounce.In(k * 2) * 0.5;
+			return Kiwi.Animations.Tweens.Easing.Bounce.Out(k * 2 - 1) * 0.5 + 0.5;
 
-        }
+		}
 
-    }
+	}
 
 }
 
diff --git a/docs/files/src_animations_tweens_easing_Circular.ts.html b/docs/files/src_animations_tweens_easing_Circular.ts.html
index 2dc253d..3029a22 100644
--- a/docs/files/src_animations_tweens_easing_Circular.ts.html
+++ b/docs/files/src_animations_tweens_easing_Circular.ts.html
@@ -372,66 +372,66 @@ <h1 class="file-heading">File: src/animations/tweens/easing/Circular.ts</h1>
 */
 module Kiwi.Animations.Tweens.Easing {
 
-    /**
-    *
-    *
-    * @class Circular
-    * @namespace Kiwi.Animations.Tweens.Easing
-    *
-    */
-    export class Circular {
+	/**
+	*
+	*
+	* @class Circular
+	* @namespace Kiwi.Animations.Tweens.Easing
+	*
+	*/
+	export class Circular {
 
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} &quot;Circular&quot;
-        * @public
-        */
-        public objType() {
-            return &quot;Circular&quot;;
-        }
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} &quot;Circular&quot;
+		* @public
+		*/
+		public objType() {
+			return &quot;Circular&quot;;
+		}
 
-        /** 
-        * 
-        * @method In
-        * @param k {Any}
-        * @return {Number}
-        * @static
-        */
-        public static In(k) {
+		/** 
+		* 
+		* @method In
+		* @param k {Any}
+		* @return {Number}
+		* @static
+		*/
+		public static In(k) {
 
-            return 1 - Math.sqrt(1 - k * k);
+			return 1 - Math.sqrt(1 - k * k);
 
-        }
+		}
 
-        /** 
-        * 
-        * @method Out
-        * @param k {Any}
-        * @return {Number}
-        * @static
-        */
-        public static Out(k) {
+		/** 
+		* 
+		* @method Out
+		* @param k {Any}
+		* @return {Number}
+		* @static
+		*/
+		public static Out(k) {
 
-            return Math.sqrt(1 - (--k * k));
+			return Math.sqrt(1 - (--k * k));
 
-        }
+		}
 
-        /** 
-        * 
-        * @method InOut
-        * @param k {Any}
-        * @return {Number}
-        * @static
-        */
-        public static InOut(k) {
+		/** 
+		* 
+		* @method InOut
+		* @param k {Any}
+		* @return {Number}
+		* @static
+		*/
+		public static InOut(k) {
 
-            if ((k *= 2) &lt; 1) return -0.5 * (Math.sqrt(1 - k * k) - 1);
-            return 0.5 * (Math.sqrt(1 - (k -= 2) * k) + 1);
+			if ((k *= 2) &lt; 1) return -0.5 * (Math.sqrt(1 - k * k) - 1);
+			return 0.5 * (Math.sqrt(1 - (k -= 2) * k) + 1);
 
-        }
+		}
 
-    }
+	}
 
 }
 
diff --git a/docs/files/src_animations_tweens_easing_Cubic.ts.html b/docs/files/src_animations_tweens_easing_Cubic.ts.html
index 975946a..f3905b3 100644
--- a/docs/files/src_animations_tweens_easing_Cubic.ts.html
+++ b/docs/files/src_animations_tweens_easing_Cubic.ts.html
@@ -372,68 +372,68 @@ <h1 class="file-heading">File: src/animations/tweens/easing/Cubic.ts</h1>
 */
 
 module Kiwi.Animations.Tweens.Easing {
-    
-    /**
-    * 
-    * @class Cubic
-    * @namespace Kiwi.Animations.Tweens.Easing
-    *
-    */
-    export class Cubic {
 
-        /**
-        * The type of object that this is.
-        * @method objType 
-        * @return {String} &quot;Cubic&quot;
-        * @public
-        */
-        public objType() {
-            return &quot;Cubic&quot;;
-        }
+	/**
+	* 
+	* @class Cubic
+	* @namespace Kiwi.Animations.Tweens.Easing
+	*
+	*/
+	export class Cubic {
 
-        /** 
-        * 
-        * @method In
-        * @param k {Any}
-        * @return {Number}
-        * @static
-        * @public
-        */
-        public static In(k) {
+		/**
+		* The type of object that this is.
+		* @method objType 
+		* @return {String} &quot;Cubic&quot;
+		* @public
+		*/
+		public objType() {
+			return &quot;Cubic&quot;;
+		}
 
-            return k * k * k;
+		/** 
+		* 
+		* @method In
+		* @param k {Any}
+		* @return {Number}
+		* @static
+		* @public
+		*/
+		public static In(k) {
 
-        }
+			return k * k * k;
 
-        /** 
-        * 
-        * @method Out
-        * @param k {Any}
-        * @return {Number}
-        * @static
-        * @public
-        */
-        public static Out(k) {
+		}
 
-            return --k * k * k + 1;
+		/** 
+		* 
+		* @method Out
+		* @param k {Any}
+		* @return {Number}
+		* @static
+		* @public
+		*/
+		public static Out(k) {
 
-        }
+			return --k * k * k + 1;
 
-        /** 
-        * 
-        * @method InOut
-        * @param k {Any}
-        * @static
-        * @public
-        */
-        public static InOut(k) {
+		}
 
-            if ((k *= 2) &lt; 1) return 0.5 * k * k * k;
-            return 0.5 * ((k -= 2) * k * k + 2);
+		/** 
+		* 
+		* @method InOut
+		* @param k {Any}
+		* @static
+		* @public
+		*/
+		public static InOut(k) {
 
-        }
+			if ((k *= 2) &lt; 1) return 0.5 * k * k * k;
+			return 0.5 * ((k -= 2) * k * k + 2);
 
-    }
+		}
+
+	}
 
 }
 
diff --git a/docs/files/src_animations_tweens_easing_Elastic.ts.html b/docs/files/src_animations_tweens_easing_Elastic.ts.html
index 62017a0..e57b317 100644
--- a/docs/files/src_animations_tweens_easing_Elastic.ts.html
+++ b/docs/files/src_animations_tweens_easing_Elastic.ts.html
@@ -372,83 +372,83 @@ <h1 class="file-heading">File: src/animations/tweens/easing/Elastic.ts</h1>
 */
 
 module Kiwi.Animations.Tweens.Easing {
-    
-    /**
-    *
-    *
-    * @class Elastic
-    * @namespace Kiwi.Animations.Tweens.Easing
-    *
-    */
-    export class Elastic {
 
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} &quot;Elastic&quot;
-        * @public
-        */
-        public objType() {
-            return &quot;Elastic&quot;;
-        }
+	/**
+	*
+	*
+	* @class Elastic
+	* @namespace Kiwi.Animations.Tweens.Easing
+	*
+	*/
+	export class Elastic {
 
-        /** 
-        * 
-        * @method In
-        * @param k {Any}
-        * @return {Number}
-        * @static
-        * @public
-        */
-        public static In(k) {
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} &quot;Elastic&quot;
+		* @public
+		*/
+		public objType() {
+			return &quot;Elastic&quot;;
+		}
 
-            var s, a = 0.1, p = 0.4;
-            if (k === 0) return 0;
-            if (k === 1) return 1;
-            if (!a || a &lt; 1) { a = 1; s = p / 4; }
-            else s = p * Math.asin(1 / a) / (2 * Math.PI);
-            return -(a * Math.pow(2, 10 * (k -= 1)) * Math.sin((k - s) * (2 * Math.PI) / p));
+		/** 
+		* 
+		* @method In
+		* @param k {Any}
+		* @return {Number}
+		* @static
+		* @public
+		*/
+		public static In(k) {
 
-        }
+			var s, a = 0.1, p = 0.4;
+			if (k === 0) return 0;
+			if (k === 1) return 1;
+			if (!a || a &lt; 1) { a = 1; s = p / 4; }
+			else s = p * Math.asin(1 / a) / (2 * Math.PI);
+			return -(a * Math.pow(2, 10 * (k -= 1)) * Math.sin((k - s) * (2 * Math.PI) / p));
 
-        /** 
-        * 
-        * @method Out
-        * @param {Any} k
-        * @static
-        * @public
-        */
-        public static Out(k) {
+		}
 
-            var s, a = 0.1, p = 0.4;
-            if (k === 0) return 0;
-            if (k === 1) return 1;
-            if (!a || a &lt; 1) { a = 1; s = p / 4; }
-            else s = p * Math.asin(1 / a) / (2 * Math.PI);
-            return (a * Math.pow(2, -10 * k) * Math.sin((k - s) * (2 * Math.PI) / p) + 1);
+		/** 
+		* 
+		* @method Out
+		* @param {Any} k
+		* @static
+		* @public
+		*/
+		public static Out(k) {
 
-        }
+			var s, a = 0.1, p = 0.4;
+			if (k === 0) return 0;
+			if (k === 1) return 1;
+			if (!a || a &lt; 1) { a = 1; s = p / 4; }
+			else s = p * Math.asin(1 / a) / (2 * Math.PI);
+			return (a * Math.pow(2, -10 * k) * Math.sin((k - s) * (2 * Math.PI) / p) + 1);
 
-        /** 
-        * 
-        * @method InOut
-        * @param k {Any}
-        * @static
-        * @public
-        */
-        public static InOut(k) {
+		}
 
-            var s, a = 0.1, p = 0.4;
-            if (k === 0) return 0;
-            if (k === 1) return 1;
-            if (!a || a &lt; 1) { a = 1; s = p / 4; }
-            else s = p * Math.asin(1 / a) / (2 * Math.PI);
-            if ((k *= 2) &lt; 1) return -0.5 * (a * Math.pow(2, 10 * (k -= 1)) * Math.sin((k - s) * (2 * Math.PI) / p));
-            return a * Math.pow(2, -10 * (k -= 1)) * Math.sin((k - s) * (2 * Math.PI) / p) * 0.5 + 1;
+		/** 
+		* 
+		* @method InOut
+		* @param k {Any}
+		* @static
+		* @public
+		*/
+		public static InOut(k) {
 
-        }
+			var s, a = 0.1, p = 0.4;
+			if (k === 0) return 0;
+			if (k === 1) return 1;
+			if (!a || a &lt; 1) { a = 1; s = p / 4; }
+			else s = p * Math.asin(1 / a) / (2 * Math.PI);
+			if ((k *= 2) &lt; 1) return -0.5 * (a * Math.pow(2, 10 * (k -= 1)) * Math.sin((k - s) * (2 * Math.PI) / p));
+			return a * Math.pow(2, -10 * (k -= 1)) * Math.sin((k - s) * (2 * Math.PI) / p) * 0.5 + 1;
 
-    }
+		}
+
+	}
 
 }
 
diff --git a/docs/files/src_animations_tweens_easing_Exponential.ts.html b/docs/files/src_animations_tweens_easing_Exponential.ts.html
index af08012..2ecbbad 100644
--- a/docs/files/src_animations_tweens_easing_Exponential.ts.html
+++ b/docs/files/src_animations_tweens_easing_Exponential.ts.html
@@ -373,71 +373,71 @@ <h1 class="file-heading">File: src/animations/tweens/easing/Exponential.ts</h1>
 
 module Kiwi.Animations.Tweens.Easing {
 
-    /**
-    *
-    *
-    * @class Exponential
-    * @namespace Kiwi.Animations.Tweens.Easing
-    *
-    */
-    export class Exponential {
+	/**
+	*
+	*
+	* @class Exponential
+	* @namespace Kiwi.Animations.Tweens.Easing
+	*
+	*/
+	export class Exponential {
 
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} &quot;Exponential&quot;
-        * @public
-        */
-        public objType() {
-            return &quot;Exponential&quot;;
-        }
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} &quot;Exponential&quot;
+		* @public
+		*/
+		public objType() {
+			return &quot;Exponential&quot;;
+		}
 
-        /** 
-        * 
-        * @method In
-        * @param k {Any}
-        * @return {String}
-        * @static
-        * @public
-        */
-        public static In(k) {
+		/** 
+		* 
+		* @method In
+		* @param k {Any}
+		* @return {String}
+		* @static
+		* @public
+		*/
+		public static In(k) {
 
-            return k === 0 ? 0 : Math.pow(1024, k - 1);
+			return k === 0 ? 0 : Math.pow(1024, k - 1);
 
-        }
+		}
 
-        /** 
-        * 
-        * @method Out
-        * @param k {Any}
-        * @return {String}
-        * @static
-        * @public
-        */
-        public static Out(k) {
+		/** 
+		* 
+		* @method Out
+		* @param k {Any}
+		* @return {String}
+		* @static
+		* @public
+		*/
+		public static Out(k) {
 
-            return k === 1 ? 1 : 1 - Math.pow(2, -10 * k);
+			return k === 1 ? 1 : 1 - Math.pow(2, -10 * k);
 
-        }
+		}
 
-        /** 
-        * 
-        * @method InOut
-        * @param k {Any}
-        * @return {String}
-        * @static
-        * @public
-        */
-        public static InOut(k) {
+		/** 
+		* 
+		* @method InOut
+		* @param k {Any}
+		* @return {String}
+		* @static
+		* @public
+		*/
+		public static InOut(k) {
 
-            if (k === 0) return 0;
-            if (k === 1) return 1;
-            if ((k *= 2) &lt; 1) return 0.5 * Math.pow(1024, k - 1);
-            return 0.5 * (-Math.pow(2, -10 * (k - 1)) + 2);
+			if (k === 0) return 0;
+			if (k === 1) return 1;
+			if ((k *= 2) &lt; 1) return 0.5 * Math.pow(1024, k - 1);
+			return 0.5 * (-Math.pow(2, -10 * (k - 1)) + 2);
 
-        }
+		}
 
-    }
+	}
 
 }
 
diff --git a/docs/files/src_animations_tweens_easing_Linear.ts.html b/docs/files/src_animations_tweens_easing_Linear.ts.html
index caf1378..06a4f9e 100644
--- a/docs/files/src_animations_tweens_easing_Linear.ts.html
+++ b/docs/files/src_animations_tweens_easing_Linear.ts.html
@@ -373,38 +373,38 @@ <h1 class="file-heading">File: src/animations/tweens/easing/Linear.ts</h1>
 
 module Kiwi.Animations.Tweens.Easing {
 
-    /**
-    *
-    * @class Linear
-    * @namespace Kiwi.Animations.Tweens.Easing
-    *
-    */
-    export class Linear {
+	/**
+	*
+	* @class Linear
+	* @namespace Kiwi.Animations.Tweens.Easing
+	*
+	*/
+	export class Linear {
 
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} &quot;Linear&quot;
-        * @public
-        */
-        public objType() {
-            return &quot;Linear&quot;;
-        }
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} &quot;Linear&quot;
+		* @public
+		*/
+		public objType() {
+			return &quot;Linear&quot;;
+		}
 
-        /** 
-        * 
-        * @method None
-        * @param {Any} k
-        * @return {Number}
-        * @static
-        */
-        public static None(k) {
+		/** 
+		* 
+		* @method None
+		* @param {Any} k
+		* @return {Number}
+		* @static
+		*/
+		public static None(k) {
 
-            return k;
+			return k;
 
-        }
+		}
 
-    }
+	}
 
 }
 
diff --git a/docs/files/src_animations_tweens_easing_Quadratic.ts.html b/docs/files/src_animations_tweens_easing_Quadratic.ts.html
index d380b8b..7cedd26 100644
--- a/docs/files/src_animations_tweens_easing_Quadratic.ts.html
+++ b/docs/files/src_animations_tweens_easing_Quadratic.ts.html
@@ -374,69 +374,69 @@ <h1 class="file-heading">File: src/animations/tweens/easing/Quadratic.ts</h1>
 
 module Kiwi.Animations.Tweens.Easing {
 
-    /**
-    *
-    *
-    * @class Quadratic
-    * @namespace Kiwi.Animations.Tweens.Easing
-    *
-    */
-    export class Quadratic {
+	/**
+	*
+	*
+	* @class Quadratic
+	* @namespace Kiwi.Animations.Tweens.Easing
+	*
+	*/
+	export class Quadratic {
 
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} &quot;Quadratic&quot;
-        * @public
-        */
-        public objType() {
-            return &quot;Quadratic&quot;;
-        }
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} &quot;Quadratic&quot;
+		* @public
+		*/
+		public objType() {
+			return &quot;Quadratic&quot;;
+		}
 
-        /** 
-        * 
-        * @method In
-        * @param k {Any}
-        * @return {Number}
-        * @static
-        * @public
-        */
-        public static In(k) {
+		/** 
+		* 
+		* @method In
+		* @param k {Any}
+		* @return {Number}
+		* @static
+		* @public
+		*/
+		public static In(k) {
 
-            return k * k;
+			return k * k;
 
-        }
+		}
 
-        /** 
-        * 
-        * @method Out
-        * @param k {Any}
-        * @return {Number}
-        * @static
-        * @public
-        */
-        public static Out(k) {
+		/** 
+		* 
+		* @method Out
+		* @param k {Any}
+		* @return {Number}
+		* @static
+		* @public
+		*/
+		public static Out(k) {
 
-            return k * (2 - k);
+			return k * (2 - k);
 
-        }
+		}
 
-        /** 
-        * 
-        * @method InOut
-        * @param k {Any}
-        * @return {Number}
-        * @static
-        * @public
-        */
-        public static InOut(k) {
+		/** 
+		* 
+		* @method InOut
+		* @param k {Any}
+		* @return {Number}
+		* @static
+		* @public
+		*/
+		public static InOut(k) {
 
-            if ((k *= 2) &lt; 1) return 0.5 * k * k;
-            return -0.5 * (--k * (k - 2) - 1);
+			if ((k *= 2) &lt; 1) return 0.5 * k * k;
+			return -0.5 * (--k * (k - 2) - 1);
 
-        }
+		}
 
-    }
+	}
 
 }
 
diff --git a/docs/files/src_animations_tweens_easing_Quartic.ts.html b/docs/files/src_animations_tweens_easing_Quartic.ts.html
index 8c4761d..de835e9 100644
--- a/docs/files/src_animations_tweens_easing_Quartic.ts.html
+++ b/docs/files/src_animations_tweens_easing_Quartic.ts.html
@@ -374,68 +374,68 @@ <h1 class="file-heading">File: src/animations/tweens/easing/Quartic.ts</h1>
 
 module Kiwi.Animations.Tweens.Easing {
 
-    /**
-    *
-    * @class Quartic
-    * @namespace Kiwi.Animations.Tweens.Easing
-    *
-    */
-    export class Quartic {
+	/**
+	*
+	* @class Quartic
+	* @namespace Kiwi.Animations.Tweens.Easing
+	*
+	*/
+	export class Quartic {
 
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} &quot;Quartic&quot;
-        * @public
-        */
-        public objType() {
-            return &quot;Quartic&quot;;
-        }
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} &quot;Quartic&quot;
+		* @public
+		*/
+		public objType() {
+			return &quot;Quartic&quot;;
+		}
 
-        /** 
-        * 
-        * @method In
-        * @param k {Any}
-        * @return {String}
-        * @static
-        * @public
-        */
-        public static In(k) {
+		/** 
+		* 
+		* @method In
+		* @param k {Any}
+		* @return {String}
+		* @static
+		* @public
+		*/
+		public static In(k) {
 
-            return k * k * k * k;
+			return k * k * k * k;
 
-        }
+		}
 
-        /** 
-        * 
-        * @method Out
-        * @param k {Any}
-        * @return {String}
-        * @static
-        * @public
-        */
-        public static Out(k) {
+		/** 
+		* 
+		* @method Out
+		* @param k {Any}
+		* @return {String}
+		* @static
+		* @public
+		*/
+		public static Out(k) {
 
-            return 1 - (--k * k * k * k);
+			return 1 - (--k * k * k * k);
 
-        }
+		}
 
-        /** 
-        * 
-        * @method InOut
-        * @param k {Any}
-        * @return {String}
-        * @static
-        * @public
-        */
-        public static InOut(k) {
+		/** 
+		* 
+		* @method InOut
+		* @param k {Any}
+		* @return {String}
+		* @static
+		* @public
+		*/
+		public static InOut(k) {
 
-            if ((k *= 2) &lt; 1) return 0.5 * k * k * k * k;
-            return -0.5 * ((k -= 2) * k * k * k - 2);
+			if ((k *= 2) &lt; 1) return 0.5 * k * k * k * k;
+			return -0.5 * ((k -= 2) * k * k * k - 2);
 
-        }
+		}
 
-    }
+	}
 
 }
 
diff --git a/docs/files/src_animations_tweens_easing_Quintic.ts.html b/docs/files/src_animations_tweens_easing_Quintic.ts.html
index af267b6..67642c2 100644
--- a/docs/files/src_animations_tweens_easing_Quintic.ts.html
+++ b/docs/files/src_animations_tweens_easing_Quintic.ts.html
@@ -373,68 +373,68 @@ <h1 class="file-heading">File: src/animations/tweens/easing/Quintic.ts</h1>
 
 module Kiwi.Animations.Tweens.Easing {
 
-    /**
-    * 
-    * @class Quintic
-    * @namespace Kiwi.Animations.Tweens.Easing
-    * 
-    */
-    export class Quintic {
+	/**
+	* 
+	* @class Quintic
+	* @namespace Kiwi.Animations.Tweens.Easing
+	* 
+	*/
+	export class Quintic {
 
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} &quot;Quintic&quot;
-        * @public
-        */
-        public objType() {
-            return &quot;Quintic&quot;;
-        }
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} &quot;Quintic&quot;
+		* @public
+		*/
+		public objType() {
+			return &quot;Quintic&quot;;
+		}
 
-        /** 
-        * 
-        * @method In
-        * @param k {Any}
-        * @return {Number}
-        * @static
-        * @public
-        */
-        public static In(k) {
+		/** 
+		* 
+		* @method In
+		* @param k {Any}
+		* @return {Number}
+		* @static
+		* @public
+		*/
+		public static In(k) {
 
-            return k * k * k * k * k;
+			return k * k * k * k * k;
 
-        }
+		}
 
-        /** 
-        * 
-        * @method Out
-        * @param k {Any}
-        * @return {Number}
-        * @static
-        * @public
-        */
-        public static Out(k) {
+		/** 
+		* 
+		* @method Out
+		* @param k {Any}
+		* @return {Number}
+		* @static
+		* @public
+		*/
+		public static Out(k) {
 
-            return --k * k * k * k * k + 1;
+			return --k * k * k * k * k + 1;
 
-        }
+		}
 
-        /** 
-        * 
-        * @method InOut
-        * @param k {Any}
-        * @return {Number}
-        * @static
-        * @public
-        */
-        public static InOut(k) {
+		/** 
+		* 
+		* @method InOut
+		* @param k {Any}
+		* @return {Number}
+		* @static
+		* @public
+		*/
+		public static InOut(k) {
 
-            if ((k *= 2) &lt; 1) return 0.5 * k * k * k * k * k;
-            return 0.5 * ((k -= 2) * k * k * k * k + 2);
+			if ((k *= 2) &lt; 1) return 0.5 * k * k * k * k * k;
+			return 0.5 * ((k -= 2) * k * k * k * k + 2);
 
-        }
+		}
 
-    }
+	}
 
 }
 
diff --git a/docs/files/src_animations_tweens_easing_Sinusoidal.ts.html b/docs/files/src_animations_tweens_easing_Sinusoidal.ts.html
index 0b1550c..af575ad 100644
--- a/docs/files/src_animations_tweens_easing_Sinusoidal.ts.html
+++ b/docs/files/src_animations_tweens_easing_Sinusoidal.ts.html
@@ -373,67 +373,67 @@ <h1 class="file-heading">File: src/animations/tweens/easing/Sinusoidal.ts</h1>
 
 module Kiwi.Animations.Tweens.Easing {
 
-    /**
-    *
-    * @class Sinusoidal
-    * @namespace Kiwi.Animations.Tweens.Easing
-    *
-    */
-    export class Sinusoidal {
+	/**
+	*
+	* @class Sinusoidal
+	* @namespace Kiwi.Animations.Tweens.Easing
+	*
+	*/
+	export class Sinusoidal {
 
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} &quot;Sinusoidal&quot;
-        * @public
-        */
-        public objType() {
-            return &quot;Sinusoidal&quot;;
-        }
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} &quot;Sinusoidal&quot;
+		* @public
+		*/
+		public objType() {
+			return &quot;Sinusoidal&quot;;
+		}
 
-        /** 
-        * 
-        * @method In
-        * @param k {Any}
-        * @return {Number}
-        * @static
-        * @public
-        */
-        public static In(k) {
+		/** 
+		* 
+		* @method In
+		* @param k {Any}
+		* @return {Number}
+		* @static
+		* @public
+		*/
+		public static In(k) {
 
-            return 1 - Math.cos(k * Math.PI / 2);
+			return 1 - Math.cos(k * Math.PI / 2);
 
-        }
+		}
 
-        /** 
-        * 
-        * @method Out
-        * @param k {Any}
-        * @return {Number}
-        * @static
-        * @public
-        */
-        public static Out(k) {
+		/** 
+		* 
+		* @method Out
+		* @param k {Any}
+		* @return {Number}
+		* @static
+		* @public
+		*/
+		public static Out(k) {
 
-            return Math.sin(k * Math.PI / 2);
+			return Math.sin(k * Math.PI / 2);
 
-        }
+		}
 
-        /** 
-        * 
-        * @method InOut
-        * @param {Any} k
-        * @return {Number}
-        * @static
-        * @public
-        */
-        public static InOut(k) {
+		/** 
+		* 
+		* @method InOut
+		* @param {Any} k
+		* @return {Number}
+		* @static
+		* @public
+		*/
+		public static InOut(k) {
 
-            return 0.5 * (1 - Math.cos(Math.PI * k));
+			return 0.5 * (1 - Math.cos(Math.PI * k));
 
-        }
+		}
 
-    }
+	}
 
 }
 
diff --git a/docs/files/src_components_AnimationManager.ts.html b/docs/files/src_components_AnimationManager.ts.html
index dc7dd28..741fed9 100644
--- a/docs/files/src_components_AnimationManager.ts.html
+++ b/docs/files/src_components_AnimationManager.ts.html
@@ -370,456 +370,454 @@ <h1 class="file-heading">File: src/components/AnimationManager.ts</h1>
 * @module Kiwi
 * @submodule Components 
 * @main Components
-*/ 
- 
+*/
+
 module Kiwi.Components {
 
-    /**
-    * The AnimationManager is used to handle the creation and use of spritesheet Animations on a GameObject based on the TextureAtlas it has. 
-    * If the When the AnimationManager is instantiated it will loop through all of the Sequences on the TextureAtlas of the GameObject being used and will create a new Animation for each one.
-    * Now when you create a new Animation that animation will automatically be added as a new Sequence to the corresponding Texture. 
-    * This way you don&#x27;t need to create new Animations for a each Sprite that use&#x27;s the same Texture.
-    *
-    * @class AnimationManager
-    * @extends Kiwi.Component
-    * @namespace Kiwi.Components
-    * @constructor
-    * @param entity {Kiwi.Entity} The entity that this animation component belongs to.
-    * @param [inheritSequences=true] {Boolean} If a new Animation should be created for each Sequence on the Entities TextureAtlas it is a part of or not. 
-    * @return {Kiwi.Components.AnimationManager}
-    */
-    export class AnimationManager extends Component {
-         
-        constructor(entity: Kiwi.Entity, inheritSequences: boolean = true) {
-            super(entity, &#x27;Animation&#x27;);
-
-            //Get the entity and the animation.
-            this.entity = entity;
-            this._atlas = this.entity.atlas; 
-            this._animations = {};
-
-            //Create all of the default animations.
-            if (inheritSequences == true) {
-
-                for (var i = 0; i &lt; this._atlas.sequences.length; i++) {
-                    this.createFromSequence(this._atlas.sequences[i], false);
-                }
-
-            }
-
-            //If a default animation already exists
-            if (this._animations[&#x27;default&#x27;]) {
-                this.currentAnimation = this._animations[&#x27;default&#x27;];
-
-            //Otherwise create one.
-            } else {
-                var defaultCells = [];
-                for (var i = 0; i &lt; this._atlas.cells.length; i++) {
-                    defaultCells.push(i);
-                }
-                this.currentAnimation = this.add(&#x27;default&#x27;, defaultCells, 0.1, true, false);
-            }
-
-            //Signals
-            this.onChange = new Kiwi.Signal;
-            this.onPlay = new Kiwi.Signal;
-            this.onStop = new Kiwi.Signal;
-            this.onUpdate = new Kiwi.Signal;
-        }
-
-        /**
-        * Dispatches callbacks each time an animation is told to play through this AnimationManager.
-        * Functions dispatched from this signal have ONE Parameter.
-        * One - The Animation object of that is now playing.
-        * @property onPlay
-        * @type Kiwi.Signal
-        * @public
-        */
-        public onPlay: Kiwi.Signal;
-        
-        /**
-        * Dispatches callbacks each time an animation stops. 
-        * Functions dispatched from this signal have ONE parameter.
-        * One - The current animation.
-        * @property onStop
-        * @type Kiwi.Signal
-        * @public
-        */
-        public onStop: Kiwi.Signal;
-
-        /**
-        * Dispatches callbacks each time the cell of the Sprite this AnimationManager belongs to updates/changes.
-        * Note: This method will be dispatching events EVERY time the cell changes, so this will include when changing/switching animations.
-        * @property onUpdate
-        * @type Kiwi.Signal
-        * @public
-        */
-        public onUpdate: Kiwi.Signal
-
-        /**
-        * Dispatches callbacks each time the current animation is switched NOT when the cells of a animation change.
-        * Function&#x27;s dispatched from this event have TWO parameters, 
-        * One - Name of the animation switched to.
-        * Two - The Animation object that is now the current.
-        * @property onChange
-        * @type Kiwi.Signal
-        * @public
-        */
-        public onChange: Kiwi.Signal;
-
-        /**
-        * The entity that this animation belongs to and thus is effecting.
-        * @property entity
-        * @type Kiwi.Entity
-        * @public
-        */
-        public entity: Kiwi.Entity;
-
-        /**
-        * The texture atlas that this animation is taking effect on.
-        * The value of this should be the same as the Entity.
-        * @property _atlas
-        * @type Kiwi.Textures.TextureAtlas
-        * @private
-        */
-        private _atlas: Kiwi.Textures.TextureAtlas;
-        
-        /**
-        * A Object containing all of the animations that are avaiable to be used.
-        * @property _animations
-        * @type Object
-        * @private
-        */
-        private _animations: {};
-
-        /**
-        * A reference to the animation that is currently being played.
-        * @property currentAnimation
-        * @type Kiwi.Animations.Animation
-        * @public
-        */
-        public currentAnimation: Kiwi.Animations.Animation = null;
-        
-        /**
-        * Returns a boolean indicating whether or not the current animation is playing. This is READ ONLY.
-        * @property isPlaying
-        * @type boolean
-        * @public
-        */
-        public get isPlaying(): boolean {
-            return this.currentAnimation.isPlaying;
-        }
-        
-        /**
-        * Returns a string indicating the type of object that this is.
-        * @method objType
-        * @return {String} &quot;AnimationManager&quot;
-        * @public
-        */
-        public objType() {
-            return &quot;AnimationManager&quot;;
-        }
-
-        /**
-        * Creates a new Animation (by creating a Sequence) that can then be played on this AnimationManager. 
-        * If you pass to this the name of a Animation that already exists, then the previous Animation will be overridden by this new one. 
-        * Note: If the Animation you have overridden was the currentAnimation, then the previous Animation will keep playing until a different Animation is switched to.
-        * By default new Animation Sequences are also added to the TextureAtlas, which can then be inherited.
-        * Returns the Animation that was created.
-        *
-        * @method add
-        * @param name {string} The name of the animation that is to be created. 
-        * @param cells {Array} An array of numbers, which are reference to each cell that is to be played in the Animation in order. 
-        * @param speed {number} The amount of time that each cell in the Animation should stay on screen for. In seconds.
-        * @param [loop=false] {boolean} If when the Animation reaches the last frame, it should go back to the start again.
-        * @param [play=false] {boolean} If once created the animation should played right away.
-        * @param [addToAtlas=true] {boolean} If the new Sequence created should be added to the TextureAtlas or not.
-        * @return {Kiwi.Animations.Animation} The Animation that was created.
-        * @public
-        */
-        public add(name: string, cells: number[], speed: number, loop: boolean= false, play: boolean= false, addToAtlas:boolean=true): Kiwi.Animations.Animation {
-            var newSequence = new Kiwi.Animations.Sequence(name, cells, speed, loop);
-            if(addToAtlas == true) this._atlas.sequences.push(newSequence);
-            
-            return this.createFromSequence(newSequence, play);
-        }
-
-        /**
-        * Creates a new Animation based on a Sequence that is passed. 
-        * If you pass to this the name of a Animation that already exists, then the previous Animation will be overridden by this new one. 
-        * Note: If the Animation you have overridden was the currentAnimation, then the previous Animation will keep playing until a different Animation is switched to.
-        * Returns the Animation that was created.
-        *
-        * @method createFromSequence
-        * @param sequence {Kiwi.Sequence} The sequence that the Animation is based on.
-        * @param [play=false] {boolean} If the Animation should played once it has been created
-        * @return {Kiwi.Animations.Animation} The Animation that was created.
-        * @public
-        */
-        public createFromSequence(sequence: Kiwi.Animations.Sequence, play: boolean= false): Kiwi.Animations.Animation {
-            this._animations[sequence.name] = new Kiwi.Animations.Animation(sequence.name, sequence, null, this);
-
-            if (play) this.play(sequence.name);
-            
-            return this._animations[sequence.name];
-        }
-
-        /**
-        * Plays either the current animation or the name of the animation that you pass.
-        * 
-        * @method play
-        * @param [name] {String} The name of the animation that you want to play. If not passed it plays the current animation.
-        * @param [resetTime=true] {Boolean} When set to false, this will prevent a new Animation from playing if it is already the currentAnimation that is already playing.
-        * @return {Kiwi.Animations.Animation} Returns the current Animation that is now playing.
-        * @public
-        */
-        public play(name: string = this.currentAnimation.name, resetTime: boolean = true): Kiwi.Animations.Animation {
-
-            //If the current animation playing 
-            if (resetTime == false &amp;&amp; this.currentAnimation.name === name &amp;&amp; this.currentAnimation.isPlaying == true) {
-                return this.currentAnimation;
-
-            } else {
-                return this._play(name);
-            }
-
-        }
-        
-        /**
-        * Plays an Animation at a particular frameIndex.
-        * Note: The frameIndex is a particular index of a cell in the Sequence of the Animation you would like to play. 
-        * Example: If you had a Animation with a Sequence [0, 1, 2, 3] and you told it to play at index &#x27;2&#x27;, then the cell that it would be at is &#x27;3&#x27;.
-        * 
-        * @method playAt
-        * @param index {Number} The index of the frame in the Sequence that you would like to play.
-        * @param [name] {String} The name of the animation that you want to play. If not passed, it attempts to play it on the current animation.
-        * @return {Kiwi.Animations.Animation} Returns the current Animation that is now playing.
-        * @public
-        */
-        public playAt(index: number, name: string = this.currentAnimation.name): Kiwi.Animations.Animation {
-            
-            return this._play(name, index);
-        } 
-
-        /**
-        * An internal method used to actually play a Animation at a Index.
-        * 
-        * @method _play
-        * @param name {string} The name of the animation that is to be switched to.
-        * @param [index=null] {number} The index of the frame in the Sequence that is to play. If null, then it restarts the animation at the cell it currently is at.
-        * @return {Kiwi.Animations.Animation} Returns the current Animation that is now playing.
-        * @private
-        */
-        private _play(name: string, index: number=null): Kiwi.Animations.Animation {
-            
-            this._setCurrentAnimation(name); 
-            
-            if (index !== null)
-                this.currentAnimation.playAt(index);
-            else
-                this.currentAnimation.play();
-            
-            this.onPlay.dispatch(this.currentAnimation);
-            this.updateCellIndex();
-            return this.currentAnimation;
-        }
-
-        /**
-        * Stops the current animation from playing.
-        *
-        * @method stop
-        * @public
-        */
-        public stop() {
-            if (this.isPlaying === true) {
-                this.currentAnimation.stop();
-                this.onStop.dispatch(this.currentAnimation);
-            }
-        }
-
-        /**
-        * Pauses the current animation.
-        * @method pause
-        * @public
-        */ 
-        public pause() {
-            this.currentAnimation.pause();
-        }
-
-        /**
-        * Resumes the current animation.
-        * The animation should have already been paused.
-        *
-        * @method resume
-        * @public
-        */
-        public resume() {
-            this.currentAnimation.resume();
-        }
-
-        /**
-        * Either switches to a particular animation OR a particular frame in the current animation depending on if you pass the name of an animation that exists on this Manager (as a string) or a number refering to a frame index on the Animation. 
-        * When you switch to a particular animation then 
-        * You can also force the animation to play or to stop by passing a boolean in. But if left as null, the state of the Animation will based off what is currently happening.
-        * So if the animation is currently &#x27;playing&#x27; then once switched to the animation will play. If not currently playing it will switch to and stop.
-        * If the previous animation played is non-looping and has reached its final frame, it is no longer considered playing, and as such, switching to another animation will not play unless the argument to the play parameter is true.
-        *
-        * @method switchTo
-        * @param val {string|number}
-        * @param [play=null] {boolean} Force the animation to play or stop. If null the animation base&#x27;s it off what is currently happening.
-        * @public
-        */
-        public switchTo(val: any, play:boolean=null) { 
-            var switched = false;
-            switch (typeof val) {
-                case &quot;string&quot;:
-                    if (this.currentAnimation.name !== val) {
-                        this._setCurrentAnimation(val);
-                        switched = true;
-                    }
-                    break;
-                case &quot;number&quot;:
-                    this.currentAnimation.frameIndex = val;
-                    switched = true;
-                    break;
-            }
-            
-            //Play if the dev forced it to OR if the animation was already playing
-            if (play || play === null &amp;&amp; this.isPlaying &amp;&amp; switched) this.play();
-            if (play == false &amp;&amp; this.isPlaying) this.stop();
-
-            this.updateCellIndex();
-        }
-
-        /**
-        * Makes the current animation go to the next frame. If the animation is at the end of the sequence it then goes back to the start.
-        * @method nextFrame
-        * @public
-        */
-        public nextFrame() {
-            this.currentAnimation.nextFrame();
-            this.updateCellIndex();
-        }
-        
-        /**
-        * Makes the current animation go to the prev frame. If the animation is at the start, the animation will go the end of the sequence.
-        * @method prevFrame
-        * @public
-        */
-        public prevFrame() {
-            this.currentAnimation.prevFrame();
-            this.updateCellIndex();
-        }
-
-        /**
-        * Internal method that sets the current animation to a Animation passed.
-        *
-        * @method _setCurrentAnimation
-        * @param name {string} Name of the Animation that is to be switched to.
-        * @private
-        */
-        private _setCurrentAnimation(name: string) {
-            if (this.currentAnimation.name !== name) {
-                if (this.currentAnimation !== null) this.currentAnimation.stop();
-
-                if (this._animations[name]) {
-                    this.currentAnimation = this._animations[name];
-                    this.onChange.dispatch(name, this.currentAnimation);
-                }
-            }
-        }
-
-        /**
-        * The update loop for this component. 
-        * Only updates the currentAnimation and only if it is playing.
-        *
-        * @method update 
-        * @public
-        */
-        public update() { 
-            if (this.currentAnimation) {
-                this.currentAnimation.update();
-            }
-        }
-        
-        /**
-        * Gets the cell that the current Animation is current at. This is READ ONLY.
-        * @property currentCell
-        * @type number
-        * @public
-        */
-        public get currentCell():number {
-            return this.currentAnimation.currentCell;
-        }
-
-        /**
-        * Gets the current frame index of the cell in the Sequence that is currently playing. This is READ ONLY.
-        * @property frameIndex 
-        * @type number
-        * @public
-        */
-        public get frameIndex():number {
-            return this.currentAnimation.frameIndex;
-        }
-
-        /**
-        * Returns the length (Number of cells) of the current Animation that is playing. This is READ ONLY.
-        * @property length
-        * @type number
-        * @public
-        */
-        public get length(): number {
-            return this.currentAnimation.length;
-        }
-
-        /**
-        * Returns a Animation that is on this AnimationComponent
-        * Does not check to see if that Animation exists or not.
-        * 
-        * @method getAnimation
-        * @param name {string} The name of the Animation you would like to get.
-        * @return {Kiwi.Animations.Animation} The Animation that is found. Will be &#x27;undefined&#x27; if a Animation with that name did not exist.
-        * @public
-        */
-        public getAnimation(name: string): Kiwi.Animations.Animation {
-            return this._animations[name];
-        }
-        
-        /**
-        * An internal method that is used to update the cell index of an entity when an animation says it needs to update.
-        * @method updateCellIndex
-        * @protected
-        */
-        public updateCellIndex() {
-            if (typeof this.currentAnimation !== &quot;undefined&quot;) {
-                this.entity.cellIndex = this.currentAnimation.currentCell;
-                this.onUpdate.dispatch(this.currentAnimation);
-            }
-        }
-        
-        /**
-        * Destroys the animation component and runs the destroy method on all of the anims that it has.
-        * @method destroy
-        * @public
-        */
-        public destroy() {
-            super.destroy();
-
-            for (var key in this._animations) {
-                this._animations[key].destroy();
-                delete this._animations[key];
-            }
-            delete this._animations;
-            delete this.currentAnimation;
-            delete this._atlas;
-        }
-
-    }
+	/**
+	* The AnimationManager is used to handle the creation and use of spritesheet Animations on a GameObject based on the TextureAtlas it has. 
+	* If the When the AnimationManager is instantiated it will loop through all of the Sequences on the TextureAtlas of the GameObject being used and will create a new Animation for each one.
+	* Now when you create a new Animation that animation will automatically be added as a new Sequence to the corresponding Texture. 
+	* This way you don&#x27;t need to create new Animations for a each Sprite that use&#x27;s the same Texture.
+	*
+	* @class AnimationManager
+	* @extends Kiwi.Component
+	* @namespace Kiwi.Components
+	* @constructor
+	* @param entity {Kiwi.Entity} The entity that this animation component belongs to.
+	* @param [inheritSequences=true] {Boolean} If a new Animation should be created for each Sequence on the Entities TextureAtlas it is a part of or not. 
+	* @return {Kiwi.Components.AnimationManager}
+	*/
+	export class AnimationManager extends Component {
+
+		constructor(entity: Kiwi.Entity, inheritSequences: boolean = true) {
+			super(entity, &#x27;Animation&#x27;);
+
+			//Get the entity and the animation.
+			this.entity = entity;
+			this._atlas = this.entity.atlas; 
+			this._animations = {};
+
+			//Create all of the default animations.
+			if (inheritSequences == true) {
+
+				for (var i = 0; i &lt; this._atlas.sequences.length; i++) {
+					this.createFromSequence(this._atlas.sequences[i], false);
+				}
+
+			}
+
+			//If a default animation already exists
+			if (this._animations[&#x27;default&#x27;]) {
+				this.currentAnimation = this._animations[&#x27;default&#x27;];
+
+			//Otherwise create one.
+			} else {
+				var defaultCells = [];
+				for (var i = 0; i &lt; this._atlas.cells.length; i++) {
+					defaultCells.push(i);
+				}
+				this.currentAnimation = this.add(&#x27;default&#x27;, defaultCells, 0.1, true, false);
+			}
+
+			//Signals
+			this.onChange = new Kiwi.Signal;
+			this.onPlay = new Kiwi.Signal;
+			this.onStop = new Kiwi.Signal;
+			this.onUpdate = new Kiwi.Signal;
+		}
+
+		/**
+		* Dispatches callbacks each time an animation is told to play through this AnimationManager.
+		* Functions dispatched from this signal have ONE Parameter.
+		* One - The Animation object of that is now playing.
+		* @property onPlay
+		* @type Kiwi.Signal
+		* @public
+		*/
+		public onPlay: Kiwi.Signal;
+
+		/**
+		* Dispatches callbacks each time an animation stops. 
+		* Functions dispatched from this signal have ONE parameter.
+		* One - The current animation.
+		* @property onStop
+		* @type Kiwi.Signal
+		* @public
+		*/
+		public onStop: Kiwi.Signal;
+
+		/**
+		* Dispatches callbacks each time the cell of the Sprite this AnimationManager belongs to updates/changes.
+		* Note: This method will be dispatching events EVERY time the cell changes, so this will include when changing/switching animations.
+		* @property onUpdate
+		* @type Kiwi.Signal
+		* @public
+		*/
+		public onUpdate: Kiwi.Signal
+
+		/**
+		* Dispatches callbacks each time the current animation is switched NOT when the cells of a animation change.
+		* Function&#x27;s dispatched from this event have TWO parameters, 
+		* One - Name of the animation switched to.
+		* Two - The Animation object that is now the current.
+		* @property onChange
+		* @type Kiwi.Signal
+		* @public
+		*/
+		public onChange: Kiwi.Signal;
+
+		/**
+		* The entity that this animation belongs to and thus is effecting.
+		* @property entity
+		* @type Kiwi.Entity
+		* @public
+		*/
+		public entity: Kiwi.Entity;
+
+		/**
+		* The texture atlas that this animation is taking effect on.
+		* The value of this should be the same as the Entity.
+		* @property _atlas
+		* @type Kiwi.Textures.TextureAtlas
+		* @private
+		*/
+		private _atlas: Kiwi.Textures.TextureAtlas;
+
+		/**
+		* A Object containing all of the animations that are avaiable to be used.
+		* @property _animations
+		* @type Object
+		* @private
+		*/
+		private _animations: {};
+
+		/**
+		* A reference to the animation that is currently being played.
+		* @property currentAnimation
+		* @type Kiwi.Animations.Animation
+		* @public
+		*/
+		public currentAnimation: Kiwi.Animations.Animation = null;
+
+		/**
+		* Returns a boolean indicating whether or not the current animation is playing. This is READ ONLY.
+		* @property isPlaying
+		* @type boolean
+		* @public
+		*/
+		public get isPlaying(): boolean {
+			return this.currentAnimation.isPlaying;
+		}
+
+		/**
+		* Returns a string indicating the type of object that this is.
+		* @method objType
+		* @return {String} &quot;AnimationManager&quot;
+		* @public
+		*/
+		public objType() {
+			return &quot;AnimationManager&quot;;
+		}
+
+		/**
+		* Creates a new Animation (by creating a Sequence) that can then be played on this AnimationManager. 
+		* If you pass to this the name of a Animation that already exists, then the previous Animation will be overridden by this new one. 
+		* Note: If the Animation you have overridden was the currentAnimation, then the previous Animation will keep playing until a different Animation is switched to.
+		* By default new Animation Sequences are also added to the TextureAtlas, which can then be inherited.
+		* Returns the Animation that was created.
+		*
+		* @method add
+		* @param name {string} The name of the animation that is to be created. 
+		* @param cells {Array} An array of numbers, which are reference to each cell that is to be played in the Animation in order. 
+		* @param speed {number} The amount of time that each cell in the Animation should stay on screen for. In seconds.
+		* @param [loop=false] {boolean} If when the Animation reaches the last frame, it should go back to the start again.
+		* @param [play=false] {boolean} If once created the animation should played right away.
+		* @param [addToAtlas=true] {boolean} If the new Sequence created should be added to the TextureAtlas or not.
+		* @return {Kiwi.Animations.Animation} The Animation that was created.
+		* @public
+		*/
+		public add(name: string, cells: number[], speed: number, loop: boolean= false, play: boolean= false, addToAtlas:boolean=true): Kiwi.Animations.Animation {
+			var newSequence = new Kiwi.Animations.Sequence(name, cells, speed, loop);
+			if(addToAtlas == true) this._atlas.sequences.push(newSequence);
+			
+			return this.createFromSequence(newSequence, play);
+		}
+
+		/**
+		* Creates a new Animation based on a Sequence that is passed. 
+		* If you pass to this the name of a Animation that already exists, then the previous Animation will be overridden by this new one. 
+		* Note: If the Animation you have overridden was the currentAnimation, then the previous Animation will keep playing until a different Animation is switched to.
+		* Returns the Animation that was created.
+		*
+		* @method createFromSequence
+		* @param sequence {Kiwi.Sequence} The sequence that the Animation is based on.
+		* @param [play=false] {boolean} If the Animation should played once it has been created
+		* @return {Kiwi.Animations.Animation} The Animation that was created.
+		* @public
+		*/
+		public createFromSequence(sequence: Kiwi.Animations.Sequence, play: boolean= false): Kiwi.Animations.Animation {
+			this._animations[sequence.name] = new Kiwi.Animations.Animation(sequence.name, sequence, null, this);
+
+			if (play) this.play(sequence.name);
+			
+			return this._animations[sequence.name];
+		}
+
+		/**
+		* Plays either the current animation or the name of the animation that you pass.
+		* 
+		* @method play
+		* @param [name] {String} The name of the animation that you want to play. If not passed it plays the current animation.
+		* @param [resetTime=true] {Boolean} When set to false, this will prevent a new Animation from playing if it is already the currentAnimation that is already playing.
+		* @return {Kiwi.Animations.Animation} Returns the current Animation that is now playing.
+		* @public
+		*/
+		public play(name: string = this.currentAnimation.name, resetTime: boolean = true): Kiwi.Animations.Animation {
+
+			//If the current animation playing 
+			if (resetTime == false &amp;&amp; this.currentAnimation.name === name &amp;&amp; this.currentAnimation.isPlaying == true) {
+				return this.currentAnimation;
+
+			} else {
+				return this._play(name);
+			}
+
+		}
+
+		/**
+		* Plays an Animation at a particular frameIndex.
+		* Note: The frameIndex is a particular index of a cell in the Sequence of the Animation you would like to play. 
+		* Example: If you had a Animation with a Sequence [0, 1, 2, 3] and you told it to play at index &#x27;2&#x27;, then the cell that it would be at is &#x27;3&#x27;.
+		* 
+		* @method playAt
+		* @param index {Number} The index of the frame in the Sequence that you would like to play.
+		* @param [name] {String} The name of the animation that you want to play. If not passed, it attempts to play it on the current animation.
+		* @return {Kiwi.Animations.Animation} Returns the current Animation that is now playing.
+		* @public
+		*/
+		public playAt(index: number, name: string = this.currentAnimation.name): Kiwi.Animations.Animation {
+			
+			return this._play(name, index);
+		}
+
+		/**
+		* An internal method used to actually play a Animation at a Index.
+		* 
+		* @method _play
+		* @param name {string} The name of the animation that is to be switched to.
+		* @param [index=null] {number} The index of the frame in the Sequence that is to play. If null, then it restarts the animation at the cell it currently is at.
+		* @return {Kiwi.Animations.Animation} Returns the current Animation that is now playing.
+		* @private
+		*/
+		private _play(name: string, index: number=null): Kiwi.Animations.Animation {
+
+			this._setCurrentAnimation(name); 
+
+			if (index !== null)
+				this.currentAnimation.playAt(index);
+			else
+				this.currentAnimation.play();
+
+			this.onPlay.dispatch(this.currentAnimation);
+			this.updateCellIndex();
+			return this.currentAnimation;
+		}
+
+		/**
+		* Stops the current animation from playing.
+		*
+		* @method stop
+		* @public
+		*/
+		public stop() {
+			if (this.isPlaying === true) {
+				this.currentAnimation.stop();
+				this.onStop.dispatch(this.currentAnimation);
+			}
+		}
+
+		/**
+		* Pauses the current animation.
+		* @method pause
+		* @public
+		*/
+		public pause() {
+			this.currentAnimation.pause();
+		}
+
+		/**
+		* Resumes the current animation.
+		* The animation should have already been paused.
+		*
+		* @method resume
+		* @public
+		*/
+		public resume() {
+			this.currentAnimation.resume();
+		}
+
+		/**
+		* Either switches to a particular animation OR a particular frame in the current animation depending on if you pass the name of an animation that exists on this Manager (as a string) or a number refering to a frame index on the Animation. 
+		* When you switch to a particular animation then 
+		* You can also force the animation to play or to stop by passing a boolean in. But if left as null, the state of the Animation will based off what is currently happening.
+		* So if the animation is currently &#x27;playing&#x27; then once switched to the animation will play. If not currently playing it will switch to and stop.
+		* If the previous animation played is non-looping and has reached its final frame, it is no longer considered playing, and as such, switching to another animation will not play unless the argument to the play parameter is true.
+		*
+		* @method switchTo
+		* @param val {string|number}
+		* @param [play=null] {boolean} Force the animation to play or stop. If null the animation base&#x27;s it off what is currently happening.
+		* @public
+		*/
+		public switchTo(val: any, play:boolean=null) { 
+			var switched = false;
+			switch (typeof val) {
+				case &quot;string&quot;:
+					if (this.currentAnimation.name !== val) {
+						this._setCurrentAnimation(val);
+						switched = true;
+					}
+					break;
+				case &quot;number&quot;:
+					this.currentAnimation.frameIndex = val;
+					switched = true;
+					break;
+			}
+			
+			//Play if the dev forced it to OR if the animation was already playing
+			if (play || play === null &amp;&amp; this.isPlaying &amp;&amp; switched) this.play();
+			if (play == false &amp;&amp; this.isPlaying) this.stop();
+
+			this.updateCellIndex();
+		}
+
+		/**
+		* Makes the current animation go to the next frame. If the animation is at the end of the sequence it then goes back to the start.
+		* @method nextFrame
+		* @public
+		*/
+		public nextFrame() {
+			this.currentAnimation.nextFrame();
+			this.updateCellIndex();
+		}
+
+		/**
+		* Makes the current animation go to the prev frame. If the animation is at the start, the animation will go the end of the sequence.
+		* @method prevFrame
+		* @public
+		*/
+		public prevFrame() {
+			this.currentAnimation.prevFrame();
+			this.updateCellIndex();
+		}
+
+		/**
+		* Internal method that sets the current animation to a Animation passed.
+		*
+		* @method _setCurrentAnimation
+		* @param name {string} Name of the Animation that is to be switched to.
+		* @private
+		*/
+		private _setCurrentAnimation(name: string) {
+			if (this.currentAnimation.name !== name) {
+				if (this.currentAnimation !== null) this.currentAnimation.stop();
+
+				if (this._animations[name]) {
+					this.currentAnimation = this._animations[name];
+					this.onChange.dispatch(name, this.currentAnimation);
+				}
+			}
+		}
+
+		/**
+		* The update loop for this component. 
+		* Only updates the currentAnimation and only if it is playing.
+		*
+		* @method update 
+		* @public
+		*/
+		public update() { 
+			if (this.currentAnimation) {
+				this.currentAnimation.update();
+			}
+		}
+
+		/**
+		* Gets the cell that the current Animation is current at. This is READ ONLY.
+		* @property currentCell
+		* @type number
+		* @public
+		*/
+		public get currentCell():number {
+			return this.currentAnimation.currentCell;
+		}
+
+		/**
+		* Gets the current frame index of the cell in the Sequence that is currently playing. This is READ ONLY.
+		* @property frameIndex 
+		* @type number
+		* @public
+		*/
+		public get frameIndex():number {
+			return this.currentAnimation.frameIndex;
+		}
+
+		/**
+		* Returns the length (Number of cells) of the current Animation that is playing. This is READ ONLY.
+		* @property length
+		* @type number
+		* @public
+		*/
+		public get length(): number {
+			return this.currentAnimation.length;
+		}
+
+		/**
+		* Returns a Animation that is on this AnimationComponent
+		* Does not check to see if that Animation exists or not.
+		* 
+		* @method getAnimation
+		* @param name {string} The name of the Animation you would like to get.
+		* @return {Kiwi.Animations.Animation} The Animation that is found. Will be &#x27;undefined&#x27; if a Animation with that name did not exist.
+		* @public
+		*/
+		public getAnimation(name: string): Kiwi.Animations.Animation {
+			return this._animations[name];
+		}
+
+		/**
+		* An internal method that is used to update the cell index of an entity when an animation says it needs to update.
+		* @method updateCellIndex
+		* @protected
+		*/
+		public updateCellIndex() {
+			if (typeof this.currentAnimation !== &quot;undefined&quot;) {
+				this.entity.cellIndex = this.currentAnimation.currentCell;
+				this.onUpdate.dispatch(this.currentAnimation);
+			}
+		}
+
+		/**
+		* Destroys the animation component and runs the destroy method on all of the anims that it has.
+		* @method destroy
+		* @public
+		*/
+		public destroy() {
+			super.destroy();
+
+			for (var key in this._animations) {
+				this._animations[key].destroy();
+				delete this._animations[key];
+			}
+			delete this._animations;
+			delete this.currentAnimation;
+			delete this._atlas;
+		}
+
+	}
 
 }
 
-
-
     </pre>
 </div>
 
diff --git a/docs/files/src_components_ArcadePhysics.ts.html b/docs/files/src_components_ArcadePhysics.ts.html
index a409b04..0eabb8d 100644
--- a/docs/files/src_components_ArcadePhysics.ts.html
+++ b/docs/files/src_components_ArcadePhysics.ts.html
@@ -369,1405 +369,1402 @@ <h1 class="file-heading">File: src/components/ArcadePhysics.ts</h1>
 * @module Kiwi
 * @submodule Components 
 * 
-*/ 
+*/
 
 module Kiwi.Components {
-     
-    /**
-    * Arcade Physics is an Optional Component that can be used when you are wanting to do basic physics collisions. 
-    * These have been ported from Flixel, so most function operate identically to the original flixel functions, though some
-    * have been split into multiple functions. Generally where functions originally accepted
-    * either groups or gameobjects within the same argument, the ported functions one or the other.
-    * http://www.flixel.org/
-    * http://www.adamatomic.com/
-    *
-    * @class ArcadePhysics
-    * @constructor
-    * @namespace Kiwi.Components
-    * @param entity {Kiwi.Entity} The Entity that this ArcadePhysics should be used on.
-    * @param box {Kiwi.Components.Box} The box component that holds the hitbox that should be used when resolving and calculating collisions.
-    * @return {Kiwi.Components.ArcadePhysics}
-    * @extends Kiwi.Component
-    *
-    * @author Adam &#x27;Atomic&#x27; Saltsman, Flixel
-    *
-    */
-    export class ArcadePhysics extends Kiwi.Component {
-
-        constructor(entity:Kiwi.Entity, box?: Kiwi.Components.Box) {
-            super(entity,&#x27;ArcadePhysics&#x27;);
-
-            this.parent = entity;
-            this.box = box;
-            this.transform = this.parent.transform;
-
-            this.last = new Kiwi.Geom.Point(this.transform.worldX, this.transform.worldY);
-            this.mass = 1.0;
-            this.elasticity = 0.0;
-
-            this.immovable = false;
-            this.moves = true;
-
-            this.touching = ArcadePhysics.NONE;
-            this.wasTouching = ArcadePhysics.NONE;
-            this.allowCollisions = ArcadePhysics.ANY;
-
-            this.velocity = new Kiwi.Geom.Point();
-            this.acceleration = new Kiwi.Geom.Point();
-            this.drag = new Kiwi.Geom.Point();
-            this.maxVelocity = new Kiwi.Geom.Point(10000, 10000);
-
-            this.angularVelocity = 0;
-            this.angularAcceleration = 0;
-            this.angularDrag = 0;
-            this.maxAngular = 10000;
-        }
-
-
-        /**
-        * The transform component of the entity that the ArcadePhysics is a part of.
-        * @property transform
-        * @type Kiwi.Geom.Transform
-        * @public
-        */
-        public transform: Kiwi.Geom.Transform;
-
-
-        /**
-        * The bounding box component that the collisions are going to be based off.
-        * You can modify the &#x27;hitbox&#x27; of that component to modify the collision area.
-        *
-        * @property box
-        * @type Kiwi.Components.Box
-        * @public
-        */
-        public box: Kiwi.Components.Box;
-
-
-        /**
+
+	/**
+	* Arcade Physics is an Optional Component that can be used when you are wanting to do basic physics collisions. 
+	* These have been ported from Flixel, so most function operate identically to the original flixel functions, though some
+	* have been split into multiple functions. Generally where functions originally accepted
+	* either groups or gameobjects within the same argument, the ported functions one or the other.
+	* http://www.flixel.org/
+	* http://www.adamatomic.com/
+	*
+	* @class ArcadePhysics
+	* @constructor
+	* @namespace Kiwi.Components
+	* @param entity {Kiwi.Entity} The Entity that this ArcadePhysics should be used on.
+	* @param box {Kiwi.Components.Box} The box component that holds the hitbox that should be used when resolving and calculating collisions.
+	* @return {Kiwi.Components.ArcadePhysics}
+	* @extends Kiwi.Component
+	*
+	* @author Adam &#x27;Atomic&#x27; Saltsman, Flixel
+	*
+	*/
+	export class ArcadePhysics extends Kiwi.Component {
+
+		constructor(entity:Kiwi.Entity, box?: Kiwi.Components.Box) {
+			super(entity,&#x27;ArcadePhysics&#x27;);
+
+			this.parent = entity;
+			this.box = box;
+			this.transform = this.parent.transform;
+
+			this.last = new Kiwi.Geom.Point(this.transform.worldX, this.transform.worldY);
+			this.mass = 1.0;
+			this.elasticity = 0.0;
+
+			this.immovable = false;
+			this.moves = true;
+
+			this.touching = ArcadePhysics.NONE;
+			this.wasTouching = ArcadePhysics.NONE;
+			this.allowCollisions = ArcadePhysics.ANY;
+
+			this.velocity = new Kiwi.Geom.Point();
+			this.acceleration = new Kiwi.Geom.Point();
+			this.drag = new Kiwi.Geom.Point();
+			this.maxVelocity = new Kiwi.Geom.Point(10000, 10000);
+
+			this.angularVelocity = 0;
+			this.angularAcceleration = 0;
+			this.angularDrag = 0;
+			this.maxAngular = 10000;
+		}
+
+
+		/**
+		* The transform component of the entity that the ArcadePhysics is a part of.
+		* @property transform
+		* @type Kiwi.Geom.Transform
+		* @public
+		*/
+		public transform: Kiwi.Geom.Transform;
+
+
+		/**
+		* The bounding box component that the collisions are going to be based off.
+		* You can modify the &#x27;hitbox&#x27; of that component to modify the collision area.
+		*
+		* @property box
+		* @type Kiwi.Components.Box
+		* @public
+		*/
+		public box: Kiwi.Components.Box;
+
+
+		/**
 		* Whether an object will move/alter position after a collision.
-        * @property immovable
-        * @type boolean
-        * @public
+		* @property immovable
+		* @type boolean
+		* @public
 		*/
-        public immovable: boolean;
+		public immovable: boolean;
 
 
-        /**
-        * The basic speed of this object.
-        * You can modify the values contained inside this Object to change the speed.
-        *
-        * @property velocity
-        * @type Kiwi.Geom.Point
-        * @public
-        */
-        public velocity: Kiwi.Geom.Point;
+		/**
+		* The basic speed of this object.
+		* You can modify the values contained inside this Object to change the speed.
+		*
+		* @property velocity
+		* @type Kiwi.Geom.Point
+		* @public
+		*/
+		public velocity: Kiwi.Geom.Point;
 
 
-        /**
+		/**
 		* The virtual mass of the object. Default value is 1.
 		* Currently only used with &lt;code&gt;elasticity&lt;/code&gt; during collision resolution.
 		* Change at your own risk; effects seem crazy unpredictable so far!
-        * @property mass
-        * @type number
-        * @public
-		*/
-        public mass: number;
-        
-
-        /**
-        * The bounciness of this object.  Only affects collisions.  Default value is 0, or &quot;not bouncy at all.&quot;
-        * @property elasticity
-        * @type number
-        * @public
-        */
-        public elasticity: number;
-
-
-        /**
-        * How fast the speed of this object is changing.
-        * Useful for smooth movement and gravity.
-        *
-        * @property acceleration
-        * @type Kiwi.Geom.Point
-        * @public
-        */
-        public acceleration: Kiwi.Geom.Point;
-
-
-        /**
-        * This isn&#x27;t drag exactly, more like deceleration that is only applied
-        * when acceleration is not affecting the sprite.
-        * @property drag
-        * @type Kiwi.Geom.Point
-        * @public
-        */
-        public drag: Kiwi.Geom.Point;
-
-
-        /**
-        * If you are using &lt;code&gt;acceleration&lt;/code&gt;, you can use &lt;code&gt;maxVelocity&lt;/code&gt; with it
-        * to cap the speed automatically (very useful!).
-        * @property maxVelocity
-        * @type Kiwi.Geom.Point
-        * @public
-        */
-        public maxVelocity: Kiwi.Geom.Point;
-
-
-        /**
+		* @property mass
+		* @type number
+		* @public
+		*/
+		public mass: number;
+
+
+		/**
+		* The bounciness of this object.  Only affects collisions.  Default value is 0, or &quot;not bouncy at all.&quot;
+		* @property elasticity
+		* @type number
+		* @public
+		*/
+		public elasticity: number;
+
+
+		/**
+		* How fast the speed of this object is changing.
+		* Useful for smooth movement and gravity.
+		*
+		* @property acceleration
+		* @type Kiwi.Geom.Point
+		* @public
+		*/
+		public acceleration: Kiwi.Geom.Point;
+
+
+		/**
+		* This isn&#x27;t drag exactly, more like deceleration that is only applied
+		* when acceleration is not affecting the sprite.
+		* @property drag
+		* @type Kiwi.Geom.Point
+		* @public
+		*/
+		public drag: Kiwi.Geom.Point;
+
+
+		/**
+		* If you are using &lt;code&gt;acceleration&lt;/code&gt;, you can use &lt;code&gt;maxVelocity&lt;/code&gt; with it
+		* to cap the speed automatically (very useful!).
+		* @property maxVelocity
+		* @type Kiwi.Geom.Point
+		* @public
+		*/
+		public maxVelocity: Kiwi.Geom.Point;
+
+
+		/**
 		* This is how fast you want this sprite to spin.
 		* @property angularVelocity
-        * @type number
-        * @public
-        */
-        public angularVelocity: number;
-        
+		* @type number
+		* @public
+		*/
+		public angularVelocity: number;
 
-        /**
+
+		/**
 		* How fast the spin speed should change.
-        * @property angularAcceleration
-        * @type number
-        * @public
+		* @property angularAcceleration
+		* @type number
+		* @public
 		*/
-        public angularAcceleration: number;
-        
+		public angularAcceleration: number;
+
 
-        /**
+		/**
 		* Like &lt;code&gt;drag&lt;/code&gt; but for spinning.
-        * @property angularDrag
-        * @type number
-        * @public
-		*/
-        public angularDrag: number;
-        
-
-        /**
-        * Use in conjunction with &lt;code&gt;angularAcceleration&lt;/code&gt; for fluid spin speed control.
-        * @property maxAngular
-        * @type number
-        * @public
-        */
-        public maxAngular: number;
-
-
-        /**
-        * If the Entity that this component is a part of &#x27;moves&#x27; or not, and thus if the physics should update the motion should update each frame.
-        * @property moves
-        * @type boolean
-        * @default true
-        * @public
-        */
-        public moves: boolean;
-
-
-        /**
-        * Bit field of flags (use with UP, DOWN, LEFT, RIGHT, etc) indicating surface contacts.
-        * Use bitwise operators to check the values stored here, or use touching(), justStartedTouching(), etc.
-        * You can even use them broadly as boolean values if you&#x27;re feeling saucy!
-        * @property touching
-        * @type number
-        * @public
-        */
-        public touching: number;
-
-
-        /**
-        * Bit field of flags (use with UP, DOWN, LEFT, RIGHT, etc) indicating surface contacts from the previous game loop step.
-        * Use bitwise operators to check the values stored here, or use isTouching().
-        * You can even use them broadly as boolean values if you&#x27;re feeling saucy!
-        * @property wasTouching
-        * @type number
-        * @public
-        */
-        public wasTouching: number;
-
-
-        /**
+		* @property angularDrag
+		* @type number
+		* @public
+		*/
+		public angularDrag: number;
+
+
+		/**
+		* Use in conjunction with &lt;code&gt;angularAcceleration&lt;/code&gt; for fluid spin speed control.
+		* @property maxAngular
+		* @type number
+		* @public
+		*/
+		public maxAngular: number;
+
+
+		/**
+		* If the Entity that this component is a part of &#x27;moves&#x27; or not, and thus if the physics should update the motion should update each frame.
+		* @property moves
+		* @type boolean
+		* @default true
+		* @public
+		*/
+		public moves: boolean;
+
+
+		/**
+		* Bit field of flags (use with UP, DOWN, LEFT, RIGHT, etc) indicating surface contacts.
+		* Use bitwise operators to check the values stored here, or use touching(), justStartedTouching(), etc.
+		* You can even use them broadly as boolean values if you&#x27;re feeling saucy!
+		* @property touching
+		* @type number
+		* @public
+		*/
+		public touching: number;
+
+
+		/**
+		* Bit field of flags (use with UP, DOWN, LEFT, RIGHT, etc) indicating surface contacts from the previous game loop step.
+		* Use bitwise operators to check the values stored here, or use isTouching().
+		* You can even use them broadly as boolean values if you&#x27;re feeling saucy!
+		* @property wasTouching
+		* @type number
+		* @public
+		*/
+		public wasTouching: number;
+
+
+		/**
 		* Bit field of flags (use with UP, DOWN, LEFT, RIGHT, etc) indicating collision directions.
 		* Use bitwise operators to check the values stored here.
 		* Useful for things like one-way platforms (e.g. allowCollisions = UP)
 		* The accessor &quot;solid&quot; just flips this variable between NONE and ANY.
 		* @property allowCollisions
-        * @type number
-        * @public
-        */
-        public allowCollisions: number;
+		* @type number
+		* @public
+		*/
+		public allowCollisions: number;
 
 
-        /**
+		/**
 		* Important variable for collision processing.
 		* Tracks the last location of the Entity. This is set during the time this method &#x27;updates&#x27;.
 		* @property last
-        * @type Kiwi.Geom.Point
-        * @public
-        */
-        public last: Kiwi.Geom.Point;
-
-
-        /**
-        * A boolean to indicate if this object is solid or not.
-        * @property _solid
-        * @type boolean
-        * @private
-        */
-        private _solid: boolean;
-
-
-        /**
-        * A function that is to execute when this object overlaps with another.
-        * @property _callbackFunction
-        * @type Function
-        * @default null
-        * @private
-        */
-        private _callbackFunction: any = null;
-
-
-        /**
-        * The context that the callback method should have when it executes.
-        * @property _callbackContext
-        * @type Any
-        * @private
-        */
-        private _callbackContext: any = null;
-
-
-        /**
-        * Returns a boolean indicating whether the or not the object is currently colliding on a particular side that is passed.
-        * Use the collision constants (like LEFT, FLOOR, e.t.c) when passing sides.
-        * @method touching
-        * @param value [number] The collision constant of the side you want to check against.
-        * @return {boolean} If the Object is currently colliding on that side or not.
-        * @public
-        */
-        public isTouching(value: number): boolean {
-            return (this.touching &amp; value) == value;
-        }
-
-
-        /**
+		* @type Kiwi.Geom.Point
+		* @public
+		*/
+		public last: Kiwi.Geom.Point;
+
+
+		/**
+		* A boolean to indicate if this object is solid or not.
+		* @property _solid
+		* @type boolean
+		* @private
+		*/
+		private _solid: boolean;
+
+
+		/**
+		* A function that is to execute when this object overlaps with another.
+		* @property _callbackFunction
+		* @type Function
+		* @default null
+		* @private
+		*/
+		private _callbackFunction: any = null;
+
+
+		/**
+		* The context that the callback method should have when it executes.
+		* @property _callbackContext
+		* @type Any
+		* @private
+		*/
+		private _callbackContext: any = null;
+
+
+		/**
+		* Returns a boolean indicating whether the or not the object is currently colliding on a particular side that is passed.
+		* Use the collision constants (like LEFT, FLOOR, e.t.c) when passing sides.
+		* @method touching
+		* @param value [number] The collision constant of the side you want to check against.
+		* @return {boolean} If the Object is currently colliding on that side or not.
+		* @public
+		*/
+		public isTouching(value: number): boolean {
+			return (this.touching &amp; value) == value;
+		}
+
+
+		/**
 		* Whether the object should collide with other objects or not.  
-        * For more control over what directions the object will collide from, use collision constants (like LEFT, FLOOR, etc)
+		* For more control over what directions the object will collide from, use collision constants (like LEFT, FLOOR, etc)
 		* and set the value of allowCollisions directly.
-        * @method solid
-        * @param [value] {boolean} If left empty, this will then just toggle between ANY and NONE.
-        * @return {boolean} If Object is currently solid or not.
-        * @public
-		*/
-        public solid(value?: boolean): boolean {
-            if (value !== undefined) {
-                if (value)
-                    this.allowCollisions = ArcadePhysics.ANY;
-                else
-                    this.allowCollisions = ArcadePhysics.NONE;
-            }
-
-             return (this.allowCollisions &amp; ArcadePhysics.ANY) &gt; ArcadePhysics.NONE;
-        }
-
-
-        /**
-        * Sets up a callback function that will run when this object overlaps with another.
-        * When the method is dispatched it will have TWO arguments.
-        * One - The parent / entity of this ArcadePhysics.
-        * Two - The GameObject that the collision occured with.
-        * 
-        * @method setCallback
-        * @param callbackFunction {Function} The method that is to be executed whe a overlap occurs.
-        * @param callbackContext {Any} The context that the method is to be called in.
-        * @public
-        */
-        public setCallback(callbackFunction, callbackContext) {
-            this._callbackFunction = callbackFunction;
-            this._callbackContext = callbackContext;
-        }
-
-
-        /**
-        * Returns the parent of this entity. Mainly used for executing callbacks.
-        * @property parent
-        * @type Kiwi.Entity
-        * @public
-        */
-        public parent: Kiwi.Entity;
-
-
-        /*
-        *---------------
-        * Seperation Code
-        *---------------
-        */
-
-
-        /**
-        * A static method for seperating two normal GameObjects on both the X and Y Axis&#x27;s. 
-        * Both objects need to have both an ArcadePhysics Component and a Box component in order for the separate process to succeed.
-        * This method is not recommended to be directly used but instead use a &#x27;collide/overlaps&#x27; method instead.
-        * 
-        * @method seperate
-        * @static
-        * @param object1 {Kiwi.Entity} The first GameObject you would like to seperate.
-        * @param object2 {Kiwi.Entity} The second GameObject you would like to seperate from the first. 
-        * @return {boolean}
-        * @public
-        */
-        public static separate(object1: Kiwi.Entity, object2: Kiwi.Entity): boolean {
-            
-            var separatedX: boolean = this.separateX(object1, object2);
-            var separatedY: boolean = this.separateY(object1, object2);
-            return separatedX || separatedY;
-        }
-
-
-        /**
+		* @method solid
+		* @param [value] {boolean} If left empty, this will then just toggle between ANY and NONE.
+		* @return {boolean} If Object is currently solid or not.
+		* @public
+		*/
+		public solid(value?: boolean): boolean {
+			if (value !== undefined) {
+				if (value)
+					this.allowCollisions = ArcadePhysics.ANY;
+				else
+					this.allowCollisions = ArcadePhysics.NONE;
+			}
+
+			 return (this.allowCollisions &amp; ArcadePhysics.ANY) &gt; ArcadePhysics.NONE;
+		}
+
+
+		/**
+		* Sets up a callback function that will run when this object overlaps with another.
+		* When the method is dispatched it will have TWO arguments.
+		* One - The parent / entity of this ArcadePhysics.
+		* Two - The GameObject that the collision occured with.
+		* 
+		* @method setCallback
+		* @param callbackFunction {Function} The method that is to be executed whe a overlap occurs.
+		* @param callbackContext {Any} The context that the method is to be called in.
+		* @public
+		*/
+		public setCallback(callbackFunction, callbackContext) {
+			this._callbackFunction = callbackFunction;
+			this._callbackContext = callbackContext;
+		}
+
+
+		/**
+		* Returns the parent of this entity. Mainly used for executing callbacks.
+		* @property parent
+		* @type Kiwi.Entity
+		* @public
+		*/
+		public parent: Kiwi.Entity;
+
+
+		/*
+		*---------------
+		* Seperation Code
+		*---------------
+		*/
+
+
+		/**
+		* A static method for seperating two normal GameObjects on both the X and Y Axis&#x27;s. 
+		* Both objects need to have both an ArcadePhysics Component and a Box component in order for the separate process to succeed.
+		* This method is not recommended to be directly used but instead use a &#x27;collide/overlaps&#x27; method instead.
+		* 
+		* @method seperate
+		* @static
+		* @param object1 {Kiwi.Entity} The first GameObject you would like to seperate.
+		* @param object2 {Kiwi.Entity} The second GameObject you would like to seperate from the first. 
+		* @return {boolean}
+		* @public
+		*/
+		public static separate(object1: Kiwi.Entity, object2: Kiwi.Entity): boolean {
+			
+			var separatedX: boolean = this.separateX(object1, object2);
+			var separatedY: boolean = this.separateY(object1, object2);
+			return separatedX || separatedY;
+		}
+
+
+		/**
 		* Separates two passed GameObjects on the x-axis.
-        * Both objects need to have both an ArcadePhysics Component and a Box component in order for the separate process to succeed.
-        * This method is not recommended to be directly used but instead use a &#x27;collide/overlaps&#x27; method instead.
-        *
-        * @method seperateX
+		* Both objects need to have both an ArcadePhysics Component and a Box component in order for the separate process to succeed.
+		* This method is not recommended to be directly used but instead use a &#x27;collide/overlaps&#x27; method instead.
+		*
+		* @method seperateX
 		* @param object1 {Kiwi.Entity} The first GameObject.
 		* @param object2 {Kiwi.Entity} The second GameObject.
 		* @return {boolean} Whether the objects in fact touched and were separated along the X axis.
-        * @static
-        * @public
+		* @static
+		* @public
 		*/
-        public static separateX(object1: Kiwi.Entity, object2: Kiwi.Entity): boolean {
+		public static separateX(object1: Kiwi.Entity, object2: Kiwi.Entity): boolean {
 
-            //Get the Physics Components.
-            var phys1: ArcadePhysics = &lt;ArcadePhysics&gt;object1.components.getComponent(&quot;ArcadePhysics&quot;);
-            var phys2: ArcadePhysics = &lt;ArcadePhysics&gt;object2.components.getComponent(&quot;ArcadePhysics&quot;);
+			//Get the Physics Components.
+			var phys1: ArcadePhysics = &lt;ArcadePhysics&gt;object1.components.getComponent(&quot;ArcadePhysics&quot;);
+			var phys2: ArcadePhysics = &lt;ArcadePhysics&gt;object2.components.getComponent(&quot;ArcadePhysics&quot;);
 
 
-            //Can they even be sseparatated? two immovable objects
-            if (phys1.immovable &amp;&amp; phys2.immovable)
-                return false;
+			//Can they even be sseparatated? two immovable objects
+			if (phys1.immovable &amp;&amp; phys2.immovable)
+				return false;
 
 
-            //First, get the two object deltas
-            var overlap: number = 0;
-            var obj1delta: number = phys1.transform.worldX - phys1.last.x;
-            var obj2delta: number = phys2.transform.worldX - phys2.last.x;
+			//First, get the two object deltas
+			var overlap: number = 0;
+			var obj1delta: number = phys1.transform.worldX - phys1.last.x;
+			var obj2delta: number = phys2.transform.worldX - phys2.last.x;
 
 
-            //Are they the same?
-            if (obj1delta == obj2delta) return false;
+			//Are they the same?
+			if (obj1delta == obj2delta) return false;
 
 
-            //Check if the X hulls actually overlap
-            var obj1deltaAbs: number = (obj1delta &gt; 0) ? obj1delta : -obj1delta;
-            var obj2deltaAbs: number = (obj2delta &gt; 0) ? obj2delta : -obj2delta;
-                
+			//Check if the X hulls actually overlap
+			var obj1deltaAbs: number = (obj1delta &gt; 0) ? obj1delta : -obj1delta;
+			var obj2deltaAbs: number = (obj2delta &gt; 0) ? obj2delta : -obj2delta;
+				
 
-            //Get the world hitboxes.
-            var box1 = phys1.box.worldHitbox;
-            var box2 = phys2.box.worldHitbox;
+			//Get the world hitboxes.
+			var box1 = phys1.box.worldHitbox;
+			var box2 = phys2.box.worldHitbox;
 
 
-            //Where they are now using previous y axis&#x27;s.
-            var obj1rect: Kiwi.Geom.Rectangle = new Kiwi.Geom.Rectangle(box1.x - ((obj1delta &gt; 0) ? obj1delta : 0), phys1.last.y + phys1.box.hitboxOffset.y, box1.width + ((obj1delta &gt; 0) ? obj1delta : -obj1delta), box1.height);
-            var obj2rect: Kiwi.Geom.Rectangle = new Kiwi.Geom.Rectangle(box2.x - ((obj2delta &gt; 0) ? obj2delta : 0), phys2.last.y + phys2.box.hitboxOffset.y, box2.width + ((obj2delta &gt; 0) ? obj2delta : -obj2delta), box2.height);
+			//Where they are now using previous y axis&#x27;s.
+			var obj1rect: Kiwi.Geom.Rectangle = new Kiwi.Geom.Rectangle(box1.x - ((obj1delta &gt; 0) ? obj1delta : 0), phys1.last.y + phys1.box.hitboxOffset.y, box1.width + ((obj1delta &gt; 0) ? obj1delta : -obj1delta), box1.height);
+			var obj2rect: Kiwi.Geom.Rectangle = new Kiwi.Geom.Rectangle(box2.x - ((obj2delta &gt; 0) ? obj2delta : 0), phys2.last.y + phys2.box.hitboxOffset.y, box2.width + ((obj2delta &gt; 0) ? obj2delta : -obj2delta), box2.height);
 
 
-            //Could also use Kiwi.Geom.Intersect.rectangleToRectangle here...
-            if ((obj1rect.x + obj1rect.width &gt; obj2rect.x) &amp;&amp; (obj1rect.x &lt; obj2rect.x + obj2rect.width) &amp;&amp; (obj1rect.y + obj1rect.height &gt; obj2rect.y) &amp;&amp; (obj1rect.y &lt; obj2rect.y + obj2rect.height)) {
+			//Could also use Kiwi.Geom.Intersect.rectangleToRectangle here...
+			if ((obj1rect.x + obj1rect.width &gt; obj2rect.x) &amp;&amp; (obj1rect.x &lt; obj2rect.x + obj2rect.width) &amp;&amp; (obj1rect.y + obj1rect.height &gt; obj2rect.y) &amp;&amp; (obj1rect.y &lt; obj2rect.y + obj2rect.height)) {
 
 
-                var maxOverlap: number = obj1deltaAbs + obj2deltaAbs + ArcadePhysics.OVERLAP_BIAS;
+				var maxOverlap: number = obj1deltaAbs + obj2deltaAbs + ArcadePhysics.OVERLAP_BIAS;
 
 
-                if (obj1delta &gt; obj2delta) {
+				if (obj1delta &gt; obj2delta) {
 
-                    overlap = box1.x + box1.width - box2.x;
-                    if ((overlap &gt; maxOverlap) || !(phys1.allowCollisions &amp; ArcadePhysics.RIGHT) || !(phys2.allowCollisions &amp; ArcadePhysics.LEFT)) {
-                        overlap = 0;
-                    } else {
-                        phys1.touching |= ArcadePhysics.RIGHT;
-                        phys2.touching |= ArcadePhysics.LEFT;
-                    }
+					overlap = box1.x + box1.width - box2.x;
+					if ((overlap &gt; maxOverlap) || !(phys1.allowCollisions &amp; ArcadePhysics.RIGHT) || !(phys2.allowCollisions &amp; ArcadePhysics.LEFT)) {
+						overlap = 0;
+					} else {
+						phys1.touching |= ArcadePhysics.RIGHT;
+						phys2.touching |= ArcadePhysics.LEFT;
+					}
 
-                } else {
+				} else {
 
-                    overlap = box1.x - box2.width - box2.x;
-                    if ((-overlap &gt; maxOverlap) || !(phys1.allowCollisions &amp; ArcadePhysics.LEFT) || !(phys2.allowCollisions &amp; ArcadePhysics.RIGHT)) {
-                        overlap = 0;
-                    } else {
-                        phys1.touching |= ArcadePhysics.LEFT;
-                        phys2.touching |= ArcadePhysics.RIGHT;
-                    }
+					overlap = box1.x - box2.width - box2.x;
+					if ((-overlap &gt; maxOverlap) || !(phys1.allowCollisions &amp; ArcadePhysics.LEFT) || !(phys2.allowCollisions &amp; ArcadePhysics.RIGHT)) {
+						overlap = 0;
+					} else {
+						phys1.touching |= ArcadePhysics.LEFT;
+						phys2.touching |= ArcadePhysics.RIGHT;
+					}
 
-                }
+				}
 
 
-            }
+			}
 
 
-            if (overlap != 0) {
+			if (overlap != 0) {
 
 
-                //Get the average velocity
-                var obj1v: number = phys1.velocity.x;
-                var obj2v: number = phys2.velocity.x;
+				//Get the average velocity
+				var obj1v: number = phys1.velocity.x;
+				var obj2v: number = phys2.velocity.x;
 
 
-                if (!phys1.immovable &amp;&amp; !phys2.immovable) { 
-                    overlap *= 0.5;
-                    phys1.transform.x = phys1.transform.x - overlap;
-                    phys2.transform.x = phys2.transform.x + overlap;
+				if (!phys1.immovable &amp;&amp; !phys2.immovable) { 
+					overlap *= 0.5;
+					phys1.transform.x = phys1.transform.x - overlap;
+					phys2.transform.x = phys2.transform.x + overlap;
 
-                    var obj1velocity: number = Math.sqrt((obj2v * obj2v * phys2.mass) / phys1.mass) * ((obj2v &gt; 0) ? 1 : -1);
-                    var obj2velocity: number = Math.sqrt((obj1v * obj1v * phys1.mass) / phys2.mass) * ((obj1v &gt; 0) ? 1 : -1);
-                    var average: number = (obj1velocity + obj2velocity) * 0.5;
-                    obj1velocity -= average;
-                    obj2velocity -= average;
-                    phys1.velocity.x = average + obj1velocity * phys1.elasticity;
-                    phys2.velocity.x = average + obj2velocity * phys2.elasticity;
+					var obj1velocity: number = Math.sqrt((obj2v * obj2v * phys2.mass) / phys1.mass) * ((obj2v &gt; 0) ? 1 : -1);
+					var obj2velocity: number = Math.sqrt((obj1v * obj1v * phys1.mass) / phys2.mass) * ((obj1v &gt; 0) ? 1 : -1);
+					var average: number = (obj1velocity + obj2velocity) * 0.5;
+					obj1velocity -= average;
+					obj2velocity -= average;
+					phys1.velocity.x = average + obj1velocity * phys1.elasticity;
+					phys2.velocity.x = average + obj2velocity * phys2.elasticity;
 
 
-                } else if (!phys1.immovable) {
-                    phys1.transform.x = phys1.transform.x - overlap;
-                    phys1.velocity.x = obj2v - obj1v * phys1.elasticity;
+				} else if (!phys1.immovable) {
+					phys1.transform.x = phys1.transform.x - overlap;
+					phys1.velocity.x = obj2v - obj1v * phys1.elasticity;
 
 
-                } else if (!phys2.immovable) {
-                    phys2.transform.x = phys2.transform.x + overlap;
-                    phys2.velocity.x = obj1v - obj2v * phys2.elasticity;
+				} else if (!phys2.immovable) {
+					phys2.transform.x = phys2.transform.x + overlap;
+					phys2.velocity.x = obj1v - obj2v * phys2.elasticity;
 
-                }
-                return true;
+				}
+				return true;
 
-            }
+			}
 
-            return false;
-        }
+			return false;
+		}
 
 
-        /**
+		/**
 		* Separates two GameObject on the y-axis. This method is executed from the &#x27;separate&#x27; method.
-        * Both objects need to have both an ArcadePhysics Component and a Box component in order for the separate process to succeed.
-        * This method is not recommended to be directly used but instead use a &#x27;collide/overlaps&#x27; method instead.
+		* Both objects need to have both an ArcadePhysics Component and a Box component in order for the separate process to succeed.
+		* This method is not recommended to be directly used but instead use a &#x27;collide/overlaps&#x27; method instead.
 		*
-        * @method seperateY 
+		* @method seperateY 
 		* @param object1 {Kiwi.Entity} The first GameObject.
 		* @param object2 {Kiwi.Entity} The second GameObject.
 		* @return {boolean} Whether the objects in fact touched and were separated along the Y axis.
 		* @static
-        * @public
-        */
-        public static separateY(object1: Kiwi.Entity, object2: Kiwi.Entity): boolean {
+		* @public
+		*/
+		public static separateY(object1: Kiwi.Entity, object2: Kiwi.Entity): boolean {
 
 
-            //Get the Arcade Physics Components
-            var phys1: ArcadePhysics = &lt;ArcadePhysics&gt;object1.components.getComponent(&quot;ArcadePhysics&quot;);
-            var phys2: ArcadePhysics = &lt;ArcadePhysics&gt;object2.components.getComponent(&quot;ArcadePhysics&quot;); 
+			//Get the Arcade Physics Components
+			var phys1: ArcadePhysics = &lt;ArcadePhysics&gt;object1.components.getComponent(&quot;ArcadePhysics&quot;);
+			var phys2: ArcadePhysics = &lt;ArcadePhysics&gt;object2.components.getComponent(&quot;ArcadePhysics&quot;); 
 
 
-            //Can&#x27;t separate two immovable objects
-            if (phys1.immovable &amp;&amp; phys2.immovable) return false;
+			//Can&#x27;t separate two immovable objects
+			if (phys1.immovable &amp;&amp; phys2.immovable) return false;
 
 
-            var overlap: number = 0;
-            var obj1delta: number = phys1.transform.worldY - phys1.last.y;
-            var obj2delta: number = phys2.transform.worldY - phys2.last.y;
+			var overlap: number = 0;
+			var obj1delta: number = phys1.transform.worldY - phys1.last.y;
+			var obj2delta: number = phys2.transform.worldY - phys2.last.y;
 
 
-            //Do the deltas match?
-            if (obj1delta == obj2delta) return false;
+			//Do the deltas match?
+			if (obj1delta == obj2delta) return false;
 
 
-            //Absolute Deltas
-            var obj1deltaAbs: number = (obj1delta &gt; 0) ? obj1delta : -obj1delta;
-            var obj2deltaAbs: number = (obj2delta &gt; 0) ? obj2delta : -obj2delta;
+			//Absolute Deltas
+			var obj1deltaAbs: number = (obj1delta &gt; 0) ? obj1delta : -obj1delta;
+			var obj2deltaAbs: number = (obj2delta &gt; 0) ? obj2delta : -obj2delta;
 
 
-            //Hitboxes
-            var box1 = phys1.box.worldHitbox;
-            var box2 = phys2.box.worldHitbox;
+			//Hitboxes
+			var box1 = phys1.box.worldHitbox;
+			var box2 = phys2.box.worldHitbox;
 
 
-            //Rectangles
-            var obj1rect: Kiwi.Geom.Rectangle = new Kiwi.Geom.Rectangle(box1.x, box1.y - ((obj1delta &gt; 0) ? obj1delta : 0), box1.width, box1.height + obj1deltaAbs);
-            var obj2rect: Kiwi.Geom.Rectangle = new Kiwi.Geom.Rectangle(box2.x, box2.y - ((obj2delta &gt; 0) ? obj2delta : 0), box2.width, box2.height + obj2deltaAbs);
+			//Rectangles
+			var obj1rect: Kiwi.Geom.Rectangle = new Kiwi.Geom.Rectangle(box1.x, box1.y - ((obj1delta &gt; 0) ? obj1delta : 0), box1.width, box1.height + obj1deltaAbs);
+			var obj2rect: Kiwi.Geom.Rectangle = new Kiwi.Geom.Rectangle(box2.x, box2.y - ((obj2delta &gt; 0) ? obj2delta : 0), box2.width, box2.height + obj2deltaAbs);
 
 
-            //Check for overlap
-            if ((obj1rect.x + obj1rect.width &gt; obj2rect.x) &amp;&amp; (obj1rect.x &lt; obj2rect.x + obj2rect.width) &amp;&amp; (obj1rect.y + obj1rect.height &gt; obj2rect.y) &amp;&amp; (obj1rect.y &lt; obj2rect.y + obj2rect.height)) {
+			//Check for overlap
+			if ((obj1rect.x + obj1rect.width &gt; obj2rect.x) &amp;&amp; (obj1rect.x &lt; obj2rect.x + obj2rect.width) &amp;&amp; (obj1rect.y + obj1rect.height &gt; obj2rect.y) &amp;&amp; (obj1rect.y &lt; obj2rect.y + obj2rect.height)) {
 
-                var maxOverlap: number = obj1deltaAbs + obj2deltaAbs + ArcadePhysics.OVERLAP_BIAS;
+				var maxOverlap: number = obj1deltaAbs + obj2deltaAbs + ArcadePhysics.OVERLAP_BIAS;
 
-                if (obj1delta &gt; obj2delta) {
+				if (obj1delta &gt; obj2delta) {
 
-                    overlap = box1.y + box1.height - box2.y;
-                    if ((overlap &gt; maxOverlap) || !(phys1.allowCollisions &amp; ArcadePhysics.DOWN) || !(phys2.allowCollisions &amp; ArcadePhysics.UP)) {
-                        overlap = 0;
-                    } else {
-                        phys1.touching |= ArcadePhysics.DOWN;
-                        phys2.touching |= ArcadePhysics.UP;
-                    }
+					overlap = box1.y + box1.height - box2.y;
+					if ((overlap &gt; maxOverlap) || !(phys1.allowCollisions &amp; ArcadePhysics.DOWN) || !(phys2.allowCollisions &amp; ArcadePhysics.UP)) {
+						overlap = 0;
+					} else {
+						phys1.touching |= ArcadePhysics.DOWN;
+						phys2.touching |= ArcadePhysics.UP;
+					}
 
-                } else {
+				} else {
 
-                    overlap = box1.y - box2.height - box2.y;
-                    if ((-overlap &gt; maxOverlap) || !(phys1.allowCollisions &amp; ArcadePhysics.UP) || !(phys2.allowCollisions &amp; ArcadePhysics.DOWN)) {
-                        overlap = 0;
-                    } else {
-                        phys1.touching |= ArcadePhysics.UP;
-                        phys2.touching |= ArcadePhysics.DOWN;
-                    }
+					overlap = box1.y - box2.height - box2.y;
+					if ((-overlap &gt; maxOverlap) || !(phys1.allowCollisions &amp; ArcadePhysics.UP) || !(phys2.allowCollisions &amp; ArcadePhysics.DOWN)) {
+						overlap = 0;
+					} else {
+						phys1.touching |= ArcadePhysics.UP;
+						phys2.touching |= ArcadePhysics.DOWN;
+					}
 
-                }
+				}
 
 
-                //Then adjust their positions and velocities accordingly (if there was any overlap)
-                if (overlap != 0) {
+				//Then adjust their positions and velocities accordingly (if there was any overlap)
+				if (overlap != 0) {
 
-                    var obj1v: number = phys1.velocity.y;
-                    var obj2v: number = phys2.velocity.y;
+					var obj1v: number = phys1.velocity.y;
+					var obj2v: number = phys2.velocity.y;
 
-                    if (!phys1.immovable &amp;&amp; !phys2.immovable) {
+					if (!phys1.immovable &amp;&amp; !phys2.immovable) {
 
-                        overlap *= 0.5;
+						overlap *= 0.5;
 
-                        phys1.transform.y = phys1.transform.y - overlap;
-                        phys2.transform.y = phys2.transform.y + overlap;
+						phys1.transform.y = phys1.transform.y - overlap;
+						phys2.transform.y = phys2.transform.y + overlap;
 
-                        var obj1velocity: number = Math.sqrt((obj2v * obj2v * phys2.mass) / phys1.mass) * ((obj2v &gt; 0) ? 1 : -1);
-                        var obj2velocity: number = Math.sqrt((obj1v * obj1v * phys1.mass) / phys2.mass) * ((obj1v &gt; 0) ? 1 : -1);
-                        var average: number = (obj1velocity + obj2velocity) * 0.5;
+						var obj1velocity: number = Math.sqrt((obj2v * obj2v * phys2.mass) / phys1.mass) * ((obj2v &gt; 0) ? 1 : -1);
+						var obj2velocity: number = Math.sqrt((obj1v * obj1v * phys1.mass) / phys2.mass) * ((obj1v &gt; 0) ? 1 : -1);
+						var average: number = (obj1velocity + obj2velocity) * 0.5;
 
-                        obj1velocity -= average;
-                        obj2velocity -= average;
+						obj1velocity -= average;
+						obj2velocity -= average;
 
-                        phys1.velocity.y = average + obj1velocity * phys1.elasticity;
-                        phys2.velocity.y = average + obj2velocity * phys2.elasticity;
+						phys1.velocity.y = average + obj1velocity * phys1.elasticity;
+						phys2.velocity.y = average + obj2velocity * phys2.elasticity;
 
-                    }
-                    else if (!phys1.immovable) {
-                        phys1.transform.y = phys1.transform.y - overlap;
-                        phys1.velocity.y = obj2v - obj1v * phys1.elasticity;
+					}
+					else if (!phys1.immovable) {
+						phys1.transform.y = phys1.transform.y - overlap;
+						phys1.velocity.y = obj2v - obj1v * phys1.elasticity;
 
-                        //This is special case code that handles cases like horizontal moving platforms you can ride
-                        if (object2.active &amp;&amp; phys2.moves &amp;&amp; (obj1delta &gt; obj2delta))
-                            phys1.transform.x = phys1.transform.worldX + object2.transform.worldX - phys2.last.x;
+						//This is special case code that handles cases like horizontal moving platforms you can ride
+						if (object2.active &amp;&amp; phys2.moves &amp;&amp; (obj1delta &gt; obj2delta))
+							phys1.transform.x = phys1.transform.worldX + object2.transform.worldX - phys2.last.x;
 
-                    } else if (!phys2.immovable) {
-                        phys2.transform.y = phys2.transform.y + overlap;
-                        phys2.velocity.y = obj1v - obj2v * phys2.elasticity;
+					} else if (!phys2.immovable) {
+						phys2.transform.y = phys2.transform.y + overlap;
+						phys2.velocity.y = obj1v - obj2v * phys2.elasticity;
 
-                        //This is special case code that handles cases like horizontal moving platforms you can ride
-                        if (object1.active &amp;&amp; phys1.moves &amp;&amp; (obj1delta &lt; obj2delta))
-                            phys2.transform.x = phys2.transform.worldX + object1.transform.worldX - phys1.last.x;
+						//This is special case code that handles cases like horizontal moving platforms you can ride
+						if (object1.active &amp;&amp; phys1.moves &amp;&amp; (obj1delta &lt; obj2delta))
+							phys2.transform.x = phys2.transform.worldX + object1.transform.worldX - phys1.last.x;
 
-                    }
+					}
 
-                    return true;
-                }
+					return true;
+				}
 
 
-            }
+			}
 
 
-            return false;
-        }
+			return false;
+		}
 
 
-        /*
-        *---------------
-        * Seperation of Tiles Methods
-        *---------------
-        */
+		/*
+		*---------------
+		* Seperation of Tiles Methods
+		*---------------
+		*/
 
 
-        /**
-        * Separates a GameObject from a series of passed Tiles that lie on a TileMapLayer. 
-        * The gameobject needs to have a Box Component and an ArcadePhysics Component. 
-        * This method is not recommended to be directly used but instead use the &#x27;overlapsTiles&#x27; method instead.
-        *
-        * @method separateTiles
-        * @param object {Kiwi.Entity} The GameObject you are wanting to separate from a tile.
-        * @param layer {Kiwi.GameObjects.Tilemap.TileMapLayer} The TileMapLayer that the tiles belong on.
-        * @param tiles {Array} 
-        * @return {Boolean} If any separation occured.
-        * @public
-        * @static
-        */
-        public static separateTiles(object:Entity, layer:Kiwi.GameObjects.Tilemap.TileMapLayer, tiles:any):boolean {
+		/**
+		* Separates a GameObject from a series of passed Tiles that lie on a TileMapLayer. 
+		* The gameobject needs to have a Box Component and an ArcadePhysics Component. 
+		* This method is not recommended to be directly used but instead use the &#x27;overlapsTiles&#x27; method instead.
+		*
+		* @method separateTiles
+		* @param object {Kiwi.Entity} The GameObject you are wanting to separate from a tile.
+		* @param layer {Kiwi.GameObjects.Tilemap.TileMapLayer} The TileMapLayer that the tiles belong on.
+		* @param tiles {Array} 
+		* @return {Boolean} If any separation occured.
+		* @public
+		* @static
+		*/
+		public static separateTiles(object:Entity, layer:Kiwi.GameObjects.Tilemap.TileMapLayer, tiles:any):boolean {
 
-            //Physics Component Found?
-            if (object.components.hasComponent(&quot;ArcadePhysics&quot;) == false) return false;
+			//Physics Component Found?
+			if (object.components.hasComponent(&quot;ArcadePhysics&quot;) == false) return false;
 
+			//Immovable?
+			if (object.components.getComponent(&quot;ArcadePhysics&quot;).immovable) return false;
 
-            //Immovable?
-            if (object.components.getComponent(&quot;ArcadePhysics&quot;).immovable) return false;
+			var sepX = false;
+			var sepY = false;
 
-            
-            var sepX = false;
-            var sepY = false;
+			for (var i = 0; i &lt; tiles.length; i++) {
 
-            for (var i = 0; i &lt; tiles.length; i++) {
+				var tile = tiles[i];
 
-                var tile = tiles[i];
+				if(!sepX) sepX = this.separateTilesX(object, layer, tile);
+				if(!sepY) sepY = this.separateTilesY(object, layer, tile);
+			}
 
-                if(!sepX) sepX = this.separateTilesX(object, layer, tile);
-                if(!sepY) sepY = this.separateTilesY(object, layer, tile);
-            }
-            
-            return  sepX || sepY;
-            
-        }
+			return  sepX || sepY;
 
+		}
 
-        /**
-        * Separates a GameObjects from an Array of Tiles on the x-axis. 
-        * @method separateTilesX
-        * @param object {Kiwi.Entity} The GameObject you are wanting to separate from a tile.
-        * @param layer {Kiwi.GameObjects.Tilemap.TileMapLayer} The TileMapLayer that the tiles belong on.
-        * @param tile {Object} An Object containing the information (x/y/tiletypr) about the tile that is being overlapped.
-        * @return {Boolean} If any separation occured.
-        * @public
-        * @static
-        */
-        public static separateTilesX(object:Entity, layer:Kiwi.GameObjects.Tilemap.TileMapLayer, tile):boolean {
 
+		/**
+		* Separates a GameObjects from an Array of Tiles on the x-axis. 
+		* @method separateTilesX
+		* @param object {Kiwi.Entity} The GameObject you are wanting to separate from a tile.
+		* @param layer {Kiwi.GameObjects.Tilemap.TileMapLayer} The TileMapLayer that the tiles belong on.
+		* @param tile {Object} An Object containing the information (x/y/tiletypr) about the tile that is being overlapped.
+		* @return {Boolean} If any separation occured.
+		* @public
+		* @static
+		*/
+		public static separateTilesX(object:Entity, layer:Kiwi.GameObjects.Tilemap.TileMapLayer, tile):boolean {
 
-            //Get Physics
-            var phys1: ArcadePhysics = &lt;ArcadePhysics&gt;object.components.getComponent(&quot;ArcadePhysics&quot;);
-            var phys2: ArcadePhysics = &lt;ArcadePhysics&gt;layer.components.getComponent(&quot;ArcadePhysics&quot;);
 
+			//Get Physics
+			var phys1: ArcadePhysics = &lt;ArcadePhysics&gt;object.components.getComponent(&quot;ArcadePhysics&quot;);
+			var phys2: ArcadePhysics = &lt;ArcadePhysics&gt;layer.components.getComponent(&quot;ArcadePhysics&quot;);
 
-            //First, get the two object deltas
-            var obj1delta: number = phys1.transform.worldX - phys1.last.x;
-            var obj2delta: number = phys2.transform.worldX - phys2.last.x;
 
+			//First, get the two object deltas
+			var obj1delta: number = phys1.transform.worldX - phys1.last.x;
+			var obj2delta: number = phys2.transform.worldX - phys2.last.x;
 
-            //If they moved the same amount.
-            if (obj1delta == obj2delta) return false;
-            
 
-            //Absolute Delta and Overlap
-            var obj1deltaAbs: number = (obj1delta &gt; 0) ? obj1delta : -obj1delta;
-            var obj2deltaAbs: number = (obj2delta &gt; 0) ? obj2delta : -obj2delta;
-            var overlap = 0;
-            var maxOverlap: number = obj1deltaAbs + obj2deltaAbs + ArcadePhysics.OVERLAP_BIAS;
+			//If they moved the same amount.
+			if (obj1delta == obj2delta) return false;
+			
 
+			//Absolute Delta and Overlap
+			var obj1deltaAbs: number = (obj1delta &gt; 0) ? obj1delta : -obj1delta;
+			var obj2deltaAbs: number = (obj2delta &gt; 0) ? obj2delta : -obj2delta;
+			var overlap = 0;
+			var maxOverlap: number = obj1deltaAbs + obj2deltaAbs + ArcadePhysics.OVERLAP_BIAS;
 
-            //Quick References
-            var box1 = phys1.box.worldHitbox;
-            var tileTypes = layer.tilemap.tileTypes;
-            var tData = layer.tileData;
 
+			//Quick References
+			var box1 = phys1.box.worldHitbox;
+			var tileTypes = layer.tilemap.tileTypes;
+			var tData = layer.tileData;
 
-            //Box of the GameObject
-            var x = phys2.transform.worldX + tile.x;
-            var obj1rect: Kiwi.Geom.Rectangle = new Kiwi.Geom.Rectangle(box1.x - ((obj1delta &gt; 0) ? obj1delta : 0), phys1.last.y + phys1.box.hitboxOffset.y, box1.width + ((obj1delta &gt; 0) ? obj1delta : -obj1delta), box1.height);
-            var obj2rect: Kiwi.Geom.Rectangle = new Kiwi.Geom.Rectangle(x - ((obj2delta &gt; 0) ? obj2delta : 0), phys2.last.y + tile.y, layer.tileWidth + ((obj2delta &gt; 0) ? obj2delta : -obj2delta), layer.tileHeight);
 
+			//Box of the GameObject
+			var x = phys2.transform.worldX + tile.x;
+			var obj1rect: Kiwi.Geom.Rectangle = new Kiwi.Geom.Rectangle(box1.x - ((obj1delta &gt; 0) ? obj1delta : 0), phys1.last.y + phys1.box.hitboxOffset.y, box1.width + ((obj1delta &gt; 0) ? obj1delta : -obj1delta), box1.height);
+			var obj2rect: Kiwi.Geom.Rectangle = new Kiwi.Geom.Rectangle(x - ((obj2delta &gt; 0) ? obj2delta : 0), phys2.last.y + tile.y, layer.tileWidth + ((obj2delta &gt; 0) ? obj2delta : -obj2delta), layer.tileHeight);
 
-            //Check to see if they overlap
-            if ((obj1rect.x + obj1rect.width &gt; obj2rect.x) &amp;&amp; (obj1rect.x &lt; obj2rect.x + obj2rect.width) &amp;&amp; (obj1rect.y + obj1rect.height &gt; obj2rect.y) &amp;&amp; (obj1rect.y &lt; obj2rect.y + obj2rect.height)) {
 
-                //Which way the delta is going
-                if (obj1delta &gt; obj2delta) {
+			//Check to see if they overlap
+			if ((obj1rect.x + obj1rect.width &gt; obj2rect.x) &amp;&amp; (obj1rect.x &lt; obj2rect.x + obj2rect.width) &amp;&amp; (obj1rect.y + obj1rect.height &gt; obj2rect.y) &amp;&amp; (obj1rect.y &lt; obj2rect.y + obj2rect.height)) {
 
-                    overlap = box1.x + box1.width - x;
-                    if ((overlap &gt; maxOverlap) || !(phys1.allowCollisions &amp; ArcadePhysics.RIGHT) || !(tileTypes[tData[tile.index]].allowCollisions &amp; ArcadePhysics.LEFT)) {
-                        overlap = 0;
-                    } else {
-                        phys1.touching |= ArcadePhysics.RIGHT;
-                    }
+				//Which way the delta is going
+				if (obj1delta &gt; obj2delta) {
 
-                } else {
+					overlap = box1.x + box1.width - x;
+					if ((overlap &gt; maxOverlap) || !(phys1.allowCollisions &amp; ArcadePhysics.RIGHT) || !(tileTypes[tData[tile.index]].allowCollisions &amp; ArcadePhysics.LEFT)) {
+						overlap = 0;
+					} else {
+						phys1.touching |= ArcadePhysics.RIGHT;
+					}
 
-                    overlap = box1.x - layer.tileWidth - x;
-                    if ((-overlap &gt; maxOverlap) || !(phys1.allowCollisions &amp; ArcadePhysics.LEFT) || !(tileTypes[tData[tile.index]].allowCollisions &amp; ArcadePhysics.RIGHT)) {
-                        overlap = 0;
-                    } else {
-                        phys1.touching |= ArcadePhysics.LEFT;
-                    }
+				} else {
 
-                }
+					overlap = box1.x - layer.tileWidth - x;
+					if ((-overlap &gt; maxOverlap) || !(phys1.allowCollisions &amp; ArcadePhysics.LEFT) || !(tileTypes[tData[tile.index]].allowCollisions &amp; ArcadePhysics.RIGHT)) {
+						overlap = 0;
+					} else {
+						phys1.touching |= ArcadePhysics.LEFT;
+					}
 
-                //Resolve the Collision
-                if (overlap != 0) {
+				}
 
-                    var obj1v: number = phys1.velocity.x;
-                    var obj2v: number = phys2.velocity.x;
+				//Resolve the Collision
+				if (overlap != 0) {
 
-                    phys1.transform.x = phys1.transform.x - overlap;
-                    phys1.velocity.x = obj2v - obj1v * phys1.elasticity;
+					var obj1v: number = phys1.velocity.x;
+					var obj2v: number = phys2.velocity.x;
 
-                    return true;
-                }
+					phys1.transform.x = phys1.transform.x - overlap;
+					phys1.velocity.x = obj2v - obj1v * phys1.elasticity;
 
-            }
+					return true;
+				}
 
-            return false;
-        }
+			}
 
+			return false;
+		}
 
-        /**
-        * Separates a GameObject from a tiles on the y-axis. 
-        * @method separateTilesY
-        * @param object {Kiwi.Entity} The GameObject you are wanting to separate from a tile.
-        * @param layer {Kiwi.GameObjects.Tilemap.TileMapLayer} The TileMapLayer that the tiles belong on.
-        * @param tiles {Object} An Object representing the Tile which we are checking to see any overlaps occurs.
-        * @return {Boolean} If any separation occured.
-        * @public
-        * @static
-        */
-        public static separateTilesY(object:Entity, layer, tile):boolean {
 
-            //Get the physics.
-            var phys1: ArcadePhysics = &lt;ArcadePhysics&gt;object.components.getComponent(&quot;ArcadePhysics&quot;);
-            var phys2: ArcadePhysics = &lt;ArcadePhysics&gt;layer.components.getComponent(&quot;ArcadePhysics&quot;);
+		/**
+		* Separates a GameObject from a tiles on the y-axis. 
+		* @method separateTilesY
+		* @param object {Kiwi.Entity} The GameObject you are wanting to separate from a tile.
+		* @param layer {Kiwi.GameObjects.Tilemap.TileMapLayer} The TileMapLayer that the tiles belong on.
+		* @param tiles {Object} An Object representing the Tile which we are checking to see any overlaps occurs.
+		* @return {Boolean} If any separation occured.
+		* @public
+		* @static
+		*/
+		public static separateTilesY(object:Entity, layer, tile):boolean {
 
+			//Get the physics.
+			var phys1: ArcadePhysics = &lt;ArcadePhysics&gt;object.components.getComponent(&quot;ArcadePhysics&quot;);
+			var phys2: ArcadePhysics = &lt;ArcadePhysics&gt;layer.components.getComponent(&quot;ArcadePhysics&quot;);
 
-            //First, get the two object deltas
-            var obj1delta: number = phys1.transform.worldY - phys1.last.y;
-            var obj2delta: number = phys2.transform.worldY - phys2.last.y;
 
+			//First, get the two object deltas
+			var obj1delta: number = phys1.transform.worldY - phys1.last.y;
+			var obj2delta: number = phys2.transform.worldY - phys2.last.y;
 
-            //Have they moved the same amount?
-            if (obj1delta == obj2delta) return false;
 
+			//Have they moved the same amount?
+			if (obj1delta == obj2delta) return false;
 
-            //Absolute Delta and Max Overlap
-            var obj1deltaAbs: number = (obj1delta &gt; 0) ? obj1delta : -obj1delta;
-            var obj2deltaAbs: number = (obj2delta &gt; 0) ? obj2delta : -obj2delta;
-            var overlap: number = 0;
-            var maxOverlap: number = obj1deltaAbs + obj2deltaAbs + ArcadePhysics.OVERLAP_BIAS;
 
-            
-            var box1 = phys1.box.worldHitbox;
-            var tileTypes = layer.tilemap.tileTypes;
-            var tData = layer.tileData;
-            var y = layer.transform.worldY + tile.y;
+			//Absolute Delta and Max Overlap
+			var obj1deltaAbs: number = (obj1delta &gt; 0) ? obj1delta : -obj1delta;
+			var obj2deltaAbs: number = (obj2delta &gt; 0) ? obj2delta : -obj2delta;
+			var overlap: number = 0;
+			var maxOverlap: number = obj1deltaAbs + obj2deltaAbs + ArcadePhysics.OVERLAP_BIAS;
 
+			
+			var box1 = phys1.box.worldHitbox;
+			var tileTypes = layer.tilemap.tileTypes;
+			var tData = layer.tileData;
+			var y = layer.transform.worldY + tile.y;
 
-            //Rectangles 
-            var obj1rect: Kiwi.Geom.Rectangle = new Kiwi.Geom.Rectangle(box1.x, box1.y - ((obj1delta &gt; 0) ? obj1delta : 0), box1.width, box1.height + obj1deltaAbs);
-            var obj2rect: Kiwi.Geom.Rectangle = new Kiwi.Geom.Rectangle(phys2.transform.worldX + tile.x, y - ((obj2delta &gt; 0) ? obj2delta : 0), layer.tileWidth, layer.tileHeight + obj2deltaAbs);
 
+			//Rectangles 
+			var obj1rect: Kiwi.Geom.Rectangle = new Kiwi.Geom.Rectangle(box1.x, box1.y - ((obj1delta &gt; 0) ? obj1delta : 0), box1.width, box1.height + obj1deltaAbs);
+			var obj2rect: Kiwi.Geom.Rectangle = new Kiwi.Geom.Rectangle(phys2.transform.worldX + tile.x, y - ((obj2delta &gt; 0) ? obj2delta : 0), layer.tileWidth, layer.tileHeight + obj2deltaAbs);
 
-            //Check if they overlap
-            if ((obj1rect.x + obj1rect.width &gt; obj2rect.x) &amp;&amp; (obj1rect.x &lt; obj2rect.x + obj2rect.width) &amp;&amp; (obj1rect.y + obj1rect.height &gt; obj2rect.y) &amp;&amp; (obj1rect.y &lt; obj2rect.y + obj2rect.height)) {
-                
-                if (obj1delta &gt; obj2delta) {
 
-                    overlap = box1.y + box1.height - y;
-                    if ((overlap &gt; maxOverlap) || !(phys1.allowCollisions &amp; ArcadePhysics.DOWN) || !(tileTypes[tData[tile.index]].allowCollisions &amp; ArcadePhysics.UP)) {
-                        overlap = 0;
-                    } else {
-                        phys1.touching |= ArcadePhysics.DOWN;
-                    }
+			//Check if they overlap
+			if ((obj1rect.x + obj1rect.width &gt; obj2rect.x) &amp;&amp; (obj1rect.x &lt; obj2rect.x + obj2rect.width) &amp;&amp; (obj1rect.y + obj1rect.height &gt; obj2rect.y) &amp;&amp; (obj1rect.y &lt; obj2rect.y + obj2rect.height)) {
+				
+				if (obj1delta &gt; obj2delta) {
 
-                } else {
+					overlap = box1.y + box1.height - y;
+					if ((overlap &gt; maxOverlap) || !(phys1.allowCollisions &amp; ArcadePhysics.DOWN) || !(tileTypes[tData[tile.index]].allowCollisions &amp; ArcadePhysics.UP)) {
+						overlap = 0;
+					} else {
+						phys1.touching |= ArcadePhysics.DOWN;
+					}
 
-                    overlap = box1.y - layer.tileHeight - y;
-                    if ((-overlap &gt; maxOverlap) || !(phys1.allowCollisions &amp; ArcadePhysics.UP) || !(tileTypes[tData[tile.index]].allowCollisions &amp; ArcadePhysics.DOWN)) {
-                        overlap = 0;
-                    } else {
-                        phys1.touching |= ArcadePhysics.UP;
-                    }
+				} else {
 
-                }
+					overlap = box1.y - layer.tileHeight - y;
+					if ((-overlap &gt; maxOverlap) || !(phys1.allowCollisions &amp; ArcadePhysics.UP) || !(tileTypes[tData[tile.index]].allowCollisions &amp; ArcadePhysics.DOWN)) {
+						overlap = 0;
+					} else {
+						phys1.touching |= ArcadePhysics.UP;
+					}
 
+				}
 
-                //Resolve the Collision
-                if (overlap != 0) {
 
-                    var obj1v: number = phys1.velocity.y;
-                    var obj2v: number = phys2.velocity.y;
+				//Resolve the Collision
+				if (overlap != 0) {
 
-                    phys1.transform.y = phys1.transform.y - overlap;
-                    phys1.velocity.y = obj2v - obj1v * phys1.elasticity;
+					var obj1v: number = phys1.velocity.y;
+					var obj2v: number = phys2.velocity.y;
 
-                    return true;
-                }
+					phys1.transform.y = phys1.transform.y - overlap;
+					phys1.velocity.y = obj2v - obj1v * phys1.elasticity;
 
-            }
+					return true;
+				}
 
-            return false;
-        }
+			}
 
+			return false;
+		}
 
-        /* 
-        *---------------
-        * Instance Functions
-        *---------------
-        */
 
+		/* 
+		*---------------
+		* Instance Functions
+		*---------------
+		*/
+
+
+		/**
+		* A method to check to see if any Tiles with in this parent TileMapLayer overlaps with a GameObject passed.
+		* If seperateObjects is true it will seperate the two entities based on their bounding box.
+		* ONLY works if the parent of the ArcadePhysics component which is calling this method is a TileMapLayer.
+		* Note: The GameObject passed must contain a box component and only if you want to separate the two objects must is ALSO contain an ArcadePhysics component.
+		*
+		* @method overlapsTiles
+		* @param gameObject {Kiwi.Entity} The GameObject you would like to separate with this one.
+		* @param [separateObjects=false] {Boolean} If you want the GameObject to be separated from any tile it collides with.
+		* @param [collisionType=ANY] {Number} If you want the GameObject to only check for collisions from a particular side of tiles. ANY by default.
+		* @return {Boolean} If any gameobject overlapped.
+		* @public
+		*/
+		public overlapsTiles(gameObject:Entity, separateObjects:boolean = false, collisionType:number = Kiwi.Components.ArcadePhysics.ANY):boolean {
+
+			//Are we a tilemaplayer?
+			if (this.parent.childType() !== Kiwi.TILE_LAYER) return false; 
+
+			var tiles = (&lt;Kiwi.GameObjects.Tilemap.TileMapLayer&gt;this.parent).getOverlappingTiles(gameObject, collisionType);
+
+			if (tiles.length &gt; 0) {
+				if (separateObjects) ArcadePhysics.separateTiles(gameObject, &lt;Kiwi.GameObjects.Tilemap.TileMapLayer&gt;this.parent, tiles);
+
+				return true;
+			} else {
+				return false;
+			}
+		}
+
+
+		/**
+		* A method to check to see if the parent of this physics component overlaps with another Kiwi.Entity.
+		* If seperateObjects is true it will seperate the two entities based on their bounding box.
+		* Note: The GameObject passed must contain a box component and only if you want to separate the two objects must is ALSO contain an ArcadePhysics component. 
+		* Also: Not to be used for separation from tiles.
+		* 
+		* @method overlaps
+		* @param gameObject {Kiwi.Entity}
+		* @param [seperateObjects=false] {boolean}
+		* @return {boolean}
+		* @public
+		*/
+		public overlaps(gameObject: Entity, separateObjects: boolean = false): boolean {
 
-        /**
-        * A method to check to see if any Tiles with in this parent TileMapLayer overlaps with a GameObject passed.
-        * If seperateObjects is true it will seperate the two entities based on their bounding box.
-        * ONLY works if the parent of the ArcadePhysics component which is calling this method is a TileMapLayer.
-        * Note: The GameObject passed must contain a box component and only if you want to separate the two objects must is ALSO contain an ArcadePhysics component.
-        *
-        * @method overlapsTiles
-        * @param gameObject {Kiwi.Entity} The GameObject you would like to separate with this one.
-        * @param [separateObjects=false] {Boolean} If you want the GameObject to be separated from any tile it collides with.
-        * @param [collisionType=ANY] {Number} If you want the GameObject to only check for collisions from a particular side of tiles. ANY by default.
-        * @return {Boolean} If any gameobject overlapped.
-        * @public
-        */
-        public overlapsTiles(gameObject:Entity, separateObjects:boolean = false, collisionType:number = Kiwi.Components.ArcadePhysics.ANY):boolean {
+			if (gameObject.components.hasComponent(&#x27;Box&#x27;) == false) return;
 
-            //Are we a tilemaplayer?
-            if (this.parent.childType() !== Kiwi.TILE_LAYER) return false; 
+			var box: Kiwi.Components.Box = gameObject.components.getComponent(&#x27;Box&#x27;);
 
-            var tiles = (&lt;Kiwi.GameObjects.Tilemap.TileMapLayer&gt;this.parent).getOverlappingTiles(gameObject, collisionType);
+			var result: boolean = (box.worldHitbox.x + box.worldHitbox.width &gt; this.box.worldHitbox.x) &amp;&amp; (box.worldHitbox.x &lt; this.box.worldHitbox.x + this.box.worldHitbox.width) &amp;&amp;
+				(box.worldHitbox.y + box.worldHitbox.height &gt; this.box.worldHitbox.y) &amp;&amp; (box.worldHitbox.y &lt; this.box.worldHitbox.y + this.box.worldHitbox.height);
 
-            if (tiles.length &gt; 0) {
-                if (separateObjects) ArcadePhysics.separateTiles(gameObject, &lt;Kiwi.GameObjects.Tilemap.TileMapLayer&gt;this.parent, tiles);
+			if (result) {
+				if (separateObjects)
+					ArcadePhysics.separate(&lt;Kiwi.Entity&gt;this.owner, gameObject);
 
-                return true;
-            } else {
-                return false;
-            }
-        }
+				if (this._callbackFunction !== null &amp;&amp; this._callbackContext !== null) {
+					this._callbackFunction.call(this._callbackContext, this.owner, gameObject);
+				}
+			}
 
+			return result;
 
-        /**
-        * A method to check to see if the parent of this physics component overlaps with another Kiwi.Entity.
-        * If seperateObjects is true it will seperate the two entities based on their bounding box.
-        * Note: The GameObject passed must contain a box component and only if you want to separate the two objects must is ALSO contain an ArcadePhysics component. 
-        * Also: Not to be used for separation from tiles.
-        * 
-        * @method overlaps
-        * @param gameObject {Kiwi.Entity}
-        * @param [seperateObjects=false] {boolean}
-        * @return {boolean}
-        * @public
-        */
-        public overlaps(gameObject: Entity, separateObjects: boolean = false): boolean {
+		}
 
-            if (gameObject.components.hasComponent(&#x27;Box&#x27;) == false) return;
 
-            var box: Kiwi.Components.Box = gameObject.components.getComponent(&#x27;Box&#x27;);
+		/**
+		* A method to check to see if the parent of this physics component overlaps with another individual in a Kiwi Group.
+		* 
+		* @method overlapsGroup
+		* @param group {Kiwi.Group}
+		* @param [seperateObjects=false] {boolean} 
+		* @return { boolean } If any object in the group overlapped with the GameObject or not.
+		* @public
+		*/
+		public overlapsGroup(group: Kiwi.Group, separateObjects: boolean = false): boolean {
 
-            var result: boolean = (box.worldHitbox.x + box.worldHitbox.width &gt; this.box.worldHitbox.x) &amp;&amp; (box.worldHitbox.x &lt; this.box.worldHitbox.x + this.box.worldHitbox.width) &amp;&amp;
-                (box.worldHitbox.y + box.worldHitbox.height &gt; this.box.worldHitbox.y) &amp;&amp; (box.worldHitbox.y &lt; this.box.worldHitbox.y + this.box.worldHitbox.height);
+			var results: boolean = false;
 
-            if (result) {
-                if (separateObjects)
-                    ArcadePhysics.separate(&lt;Kiwi.Entity&gt;this.owner, gameObject);
+			for (var i = 0; i &lt; group.members.length; i++) {
 
-                if (this._callbackFunction !== null &amp;&amp; this._callbackContext !== null) {
-                    this._callbackFunction.call(this._callbackContext, this.owner, gameObject);
-                }
-            }
+				if (group.members[i].childType() === Kiwi.GROUP) {
+					//recursively check overlap
+					this.overlapsGroup(&lt;Kiwi.Group&gt;group.members[i], separateObjects);
 
-            return result;
+				} else {
+					//otherwise its an entity
 
-        }
+					if (this.overlaps(&lt;Kiwi.Entity&gt;group.members[i], separateObjects)) {
+						if (this._callbackContext !== null &amp;&amp; this._callbackFunction !== null)
+							this._callbackFunction.call(this._callbackContext, this.owner, group.members[i]);
+						results = true;
+					}
 
+				}
+			}
 
-        /**
-        * A method to check to see if the parent of this physics component overlaps with another individual in a Kiwi Group.
-        * 
-        * @method overlapsGroup
-        * @param group {Kiwi.Group}
-        * @param [seperateObjects=false] {boolean} 
-        * @return { boolean } If any object in the group overlapped with the GameObject or not.
-        * @public
-        */
-        public overlapsGroup(group: Kiwi.Group, separateObjects: boolean = false): boolean {
-
-            var results: boolean = false;
-
-            for (var i = 0; i &lt; group.members.length; i++) {
-
-                if (group.members[i].childType() === Kiwi.GROUP) {
-                    //recursively check overlap
-                    this.overlapsGroup(&lt;Kiwi.Group&gt;group.members[i], separateObjects);
-
-                } else {
-                    //otherwise its an entity
-
-                    if (this.overlaps(&lt;Kiwi.Entity&gt;group.members[i], separateObjects)) {
-                        if (this._callbackContext !== null &amp;&amp; this._callbackFunction !== null)
-                            this._callbackFunction.call(this._callbackContext, this.owner, group.members[i]);
-                        results = true;
-                    }
-
-                }
-            }
-
-            return results;
-        }
-
-
-        /**
-        * A method to check to see if the parent of this physics component overlaps with any Entities that are held in an Array which is passed.
-        *
-        * @method overlapsArray
-        * @param array {Array} The array of GameObjects you want to check.
-        * @param [separateObjects=false] {boolean} If when the objects collide you want them to seperate outwards.
-        * @return {boolean} If any overlapping occured or not.
-        * @public
-        */ 
-        public overlapsArray(array: Array&lt;any&gt;, separateObjects: boolean = false): boolean {
-            
-            var results: boolean = false;
-
-            for (var i = 0; i &lt; array.length; i++) {
-
-                if (typeof array[i].childType !== &quot;undefined&quot;) {
-
-                    if (array[i].childType() == Kiwi.GROUP) {
-
-                        this.overlapsGroup(&lt;Kiwi.Group&gt;array[i], separateObjects);
-                        
-                    } else {
-
-                        if (this.overlaps(&lt;Kiwi.Entity&gt;array[i], separateObjects)) {
-                            if (this._callbackFunction !== null &amp;&amp; this._callbackContext !== null) {
-                                this._callbackFunction.call(this._callbackContext, this.owner, array[i]);
-                            }
-                            results = true;
-                        }
-
-                    }
-
-                }
-
-            }
-            
-            return results;
-        }
-
-
-        /*
-        *-------------
-        * Motion Methods
-        *-------------
-        */
-
-
-        /**
-        * Computes the velocity based on the parameters passed.  
-        * @method computeVelocity
-        * @static
-        * @param velocity {number} The currently velocity.
-        * @param [acceleration=0] {number} The acceleration of the item.
-        * @param [drag=0] {number} The amount of drag effecting the item.
-        * @param [max=10000] {number} The maximum velocity.
-        * @return {Number} The new velocity
-        * @public
-        */
-        public static computeVelocity(velocity: number, acceleration: number = 0, drag: number = 0, max: number = 10000): number {
-
-            if (acceleration != 0)
-                velocity += acceleration * ArcadePhysics.updateInterval;
-            else if (drag != 0) {
-                drag = drag * ArcadePhysics.updateInterval;
-                if (velocity - drag &gt; 0)
-                    velocity = velocity - drag;
-                else if (velocity + drag &lt; 0)
-                    velocity += drag;
-                else
-                    velocity = 0;
-            }
-            if ((velocity != 0) &amp;&amp; (max != 10000)) {
-                if (velocity &gt; max)
-                    velocity = max;
-                else if (velocity &lt; -max)
-                    velocity = -max;
-            }
-            return velocity;
-        }
-
-
-        /**
-        * Updates the position of this object. Automatically called if the &#x27;moves&#x27; parameter is true.  
-        * This called each frame during the update method.
-        * 
-        * @method updateMotion
-        * @private
-        */
-        public updateMotion() {
-            
-            var delta: number;
-            var velocityDelta: number;
-            
-            //Update the motion calculated from rotation.
-            velocityDelta = (ArcadePhysics.computeVelocity(this.angularVelocity, this.angularAcceleration, this.angularDrag, this.maxAngular) - this.angularVelocity) / 2;
-            this.angularVelocity += velocityDelta;
-            this.transform.rotation += this.angularVelocity * ArcadePhysics.updateInterval;
-            this.angularVelocity += velocityDelta;
-           
-            //Update the motion on the x-axis.
-            velocityDelta = (ArcadePhysics.computeVelocity(this.velocity.x, this.acceleration.x, this.drag.x, this.maxVelocity.x) - this.velocity.x) / 2;
-            this.velocity.x += velocityDelta;
-            delta = this.velocity.x * ArcadePhysics.updateInterval;
-            this.velocity.x += velocityDelta;
-            this.transform.x = this.transform.x + delta;
-
-            //Update the motion on the y-axis.
-            velocityDelta = (ArcadePhysics.computeVelocity(this.velocity.y, this.acceleration.y, this.drag.y, this.maxVelocity.y) - this.velocity.y) / 2;
-            this.velocity.y += velocityDelta;
-            delta = this.velocity.y * ArcadePhysics.updateInterval;
-            this.velocity.y += velocityDelta;
-            this.transform.y = this.transform.y + delta;
-        
-        }
-    
-
-        /**
-        * The Update loop of the physics component
-        * @method update
-        * @public
-        */
-        public update() {
-
-            //Flixel preupdate
-            this.last.x = this.transform.worldX;
-            this.last.y = this.transform.worldY;
-
-            //Flixel postupdate
-            if (this.moves)
-                this.updateMotion();
-
-            this.wasTouching = this.touching;
-            this.touching = ArcadePhysics.NONE;
-
-
-        }
-
-
-        /**
-        * Removes all properties that refer to other objects or outside of this class in order to flag this object for garbage collection.
-        * @method destroy
-        * @public
-        */
-        public destroy() {
-            super.destroy();
-
-            delete this.transform;
-            delete this.owner;
-            delete this._callbackContext;
-            delete this._callbackFunction;
-        }
-
-
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {string} &quot;ArcadePhysics&quot;
-        * @public
-        */
-        public objType() {
-            return &quot;ArcadePhysics&quot;;
-        }
-
-
-        /*
-        *----------------
-        * Static Functions
-        *----------------
-        */
-
-
-        /*
-        *----------------
-        * Collide Functions - Maps to Overlaps
-        *----------------
-        */
-
-
-        /**
-        * A Static method to check to see if two objects collide or not. Returns a boolean indicating whether they overlaped or not.
-        *
-        * @method collide
-        * @static
-        * @public
-        * @param gameObject1 {Kiwi.Entity} The first game object.
-        * @param gameObject2 {Kiwi.Entity} The second game object.
-        * @param [seperate=true] {boolean} If the two gameobjects should seperated when they collide.
-        * @return {boolean}
-        */
-        public static collide(gameObject1: Entity, gameObject2: Entity, seperate: boolean = true): boolean {
-            return ArcadePhysics.overlaps(gameObject1, gameObject2, seperate);
-        }
-
-
-        /**
-        * A Static method to check to see if a single entity collides with a group of entities. Returns a boolean indicating whether they overlaped or not.
-        *
-        * @method collideGroup
-        * @static
-        * @public
-        * @param gameObject {Kiwi.Entity} The entity you would like to check against.
-        * @param group {Kiwi.Group} The Kiwi Group that you want to check the entity against. 
-        * @param [seperate=true] {boolean} 
-        * @return {boolean}
-        * @public
-        */
-        public static collideGroup(gameObject: Entity, group: Kiwi.Group, seperate: boolean = true): boolean {
-
-            return ArcadePhysics.overlapsObjectGroup(gameObject, group, seperate);
-        }
-
-
-        /**
-        * A Static method to check to see if a group of entities overlap with another group of entities. Returns a boolean indicating whether they overlaped or not.
-        *
-        * @method collideGroupGroup
-        * @static
-        * @public
-        * @param group1 {Kiwi.Group} The first Kiwi Group that you want to check the entity against. 
-        * @param group2 {Kiwi.Group} The second Kiwi Group that you want to check the entity against. 
-        * @param [seperate=true] {boolean}
-        * @return {boolean}
-        */
-        public static collideGroupGroup(group1: Kiwi.Group, group2: Kiwi.Group, seperate: boolean = true): boolean {
-
-            return ArcadePhysics.overlapsGroupGroup(group1, group2, seperate);
-        }
-
-
-        /*
-        *-------------
-        * Overlap Static Method - Use&#x27;s the Arcade Physics of one of the gameobjects passed.
-        *-------------
-        */
-
-
-        /**
-        * A Static method to that checks to see if two objects overlap. Returns a boolean indicating whether they did or not.
-        *
-        * @method overlaps
-        * @static
-        * @public
-        * @param gameObject1 {Kiwi.Entity} The first game object.
-        * @param gameObject2 {Kiwi.Entity} The second gameobject you are testing the first against.
-        * @param [separateObjects=true] {boolean} 
-        * @return {boolean}
-        */
-        public static overlaps(gameObject1: Entity, gameObject2: Entity, separateObjects: boolean = true): boolean {
-
-            var obj1Physics: ArcadePhysics = gameObject1.components.getComponent(&quot;ArcadePhysics&quot;);
-            return obj1Physics.overlaps(gameObject2, separateObjects);
-        }
-
-
-        /**
-        * A Static method to that checks to see if a single object overlaps with a group of entities. Returns a boolean indicating whether they did or not.
-        *
-        * @method overlapsObjectGroup
-        * @static
-        * @param gameObject {Kiwi.Entity}
-        * @param group {Kiwi.Group} 
-        * @param [seperateObjects=true] {boolean} If they overlap should the seperate or not
-        * @return {boolean}
-        * @public
-        */
-        public static overlapsObjectGroup(gameObject: Entity, group: Kiwi.Group, separateObjects: boolean = true): boolean {
-
-            var objPhysics: ArcadePhysics = gameObject.components.getComponent(&quot;ArcadePhysics&quot;);
-            return objPhysics.overlapsGroup(group, separateObjects);
-        }
-
-
-        /**
-        * A Static method that checks to see if any objects in one group overlap with objects in another group.
-        *
-        * @method overlaps
-        * @static
-        * @param group1 {Kiwi.Group} The first group you would like to check against.
-        * @param group2 {Kiwi.Group} The second group you would like to check against.
-        * @param [seperate=true] {boolean} If they overlap should the seperate or not
-        * @return {boolean}
-        * @public
-        */
-        public static overlapsGroupGroup(group1: Kiwi.Group, group2: Kiwi.Group, separateObjects: boolean = true): boolean {
-
-            var result: boolean = false;
-
-            var members: IChild[] = group1.members;
-            var i: number = 0;
-
-            while (i &lt; group1.members.length) {
-                if (members[i].childType() == Kiwi.GROUP) {
-                    if (ArcadePhysics.overlapsGroupGroup(&lt;Kiwi.Group&gt;members[i++], group2, separateObjects)) result = true;
-
-                } else {
-                    if (ArcadePhysics.overlapsObjectGroup(&lt;Kiwi.Entity&gt;members[i++], group2, separateObjects)) result = true;
-
-                }
-            }
-
-            return result;
-        }
-
-
-        /**
-        * A Static method that checks to see if any objects from an Array collide with a Kiwi Group members.
-        * 
-        * @method overlapsArrayGroup
-        * @param array {Array} An array you want to check collide.
-        * @param group {Kiwi.Group} A group of objects you want to check overlaps.
-        * @param [seperateObjects=true] {Boolean} If when a collision is found the objects should seperate out.
-        * @return {Boolean} 
-        * @static
-        */
-        public static overlapsArrayGroup(array: Array&lt;any&gt;, group: Kiwi.Group, separateObjects: boolean = true) {
-
-            var result: boolean = false;
-
-            //loop through the array 
-            for (var i = 0; i &lt; array.length; i++) {
-                if (typeof array[i].childType !== &quot;undefined&quot;) {
-
-                    if (array[i].childType() === Kiwi.GROUP) {
-                        if (ArcadePhysics.overlapsGroupGroup(&lt;Kiwi.Group&gt;array[i], group, separateObjects))
-                            result = true;
-
-                    } else {
-                        if (ArcadePhysics.overlapsObjectGroup(&lt;Kiwi.Entity&gt;array[i], group, separateObjects))
-                            result = true;
-                    }
-
-                }
-            }
-
-            return result;
-        }
-
-
-        /*
-        *---------------
-        * Static Constants 
-        *---------------
-        */
-
-
-        /**
-        * How often the motion should be updated.
-        * @property updateInterval
-        * @static
-        * @default 1 / 10
-        * @type number
-        * @public
-        */
-        public static updateInterval: number = 1 / 10;
-
-
-        /**
-        * Generic value for &quot;left&quot; Used by &lt;code&gt;facing&lt;/code&gt;, &lt;code&gt;allowCollisions&lt;/code&gt;, and &lt;code&gt;touching&lt;/code&gt;.
-        * @property LEFT
-        * @type number
-        * @default 0x0001
-        * @public
-        * @static
-        */
-        public static LEFT: number = 0x0001;
-
-
-        /**
-        * Generic value for &quot;right&quot; Used by &lt;code&gt;facing&lt;/code&gt;, &lt;code&gt;allowCollisions&lt;/code&gt;, and &lt;code&gt;touching&lt;/code&gt;.
-        * @property RIGHT
-        * @type number
-        * @default 0x0010
-        * @public
-        * @static
-        */
-        public static RIGHT: number = 0x0010;
-
-
-        /**
-        * Generic value for &quot;up&quot; Used by &lt;code&gt;facing&lt;/code&gt;, &lt;code&gt;allowCollisions&lt;/code&gt;, and &lt;code&gt;touching&lt;/code&gt;.
-        * @property UP
-        * @type number
-        * @default 0x0100
-        * @public
-        * @static
-        */
-        public static UP: number = 0x0100;
-
-
-        /**
-        * Generic value for &quot;down&quot; Used by &lt;code&gt;facing&lt;/code&gt;, &lt;code&gt;allowCollisions&lt;/code&gt;, and &lt;code&gt;touching&lt;/code&gt;.
-        * @property DOWN
-        * @type number
-        * @default 0x1000
-        * @public
-        * @static
-        */
-        public static DOWN: number = 0x1000;
-
-
-        /**
-        * Special-case constant meaning no collisions, used mainly by &lt;code&gt;allowCollisions&lt;/code&gt; and &lt;code&gt;touching&lt;/code&gt;.
-        * @property NONE
-        * @type number
-        * @default 0
-        * @public
-        * @static
-        */
-        public static NONE: number = 0;
-
-
-        /**
-        * Special-case constant meaning up, used mainly by &lt;code&gt;allowCollisions&lt;/code&gt; and &lt;code&gt;touching&lt;/code&gt;.
-        * @property CEILING
-        * @type number
-        * @default 0x0100
-        * @public
-        * @static
-        */
-        public static CEILING: number = ArcadePhysics.UP;
-
-
-        /**
-        * Special-case constant meaning down, used mainly by &lt;code&gt;allowCollisions&lt;/code&gt; and &lt;code&gt;touching&lt;/code&gt;.
-        * @property FLOOR
-        * @type number
-        * @default 0x1000
-        * @public
-        * @static
-        */
-        public static FLOOR: number = ArcadePhysics.DOWN;
-
-
-        /**
-        * Special-case constant meaning only the left and right sides, used mainly by &lt;code&gt;allowCollisions&lt;/code&gt; and &lt;code&gt;touching&lt;/code&gt;.
-        * @property WALL
-        * @type number
-        * @default 0x0011
-        * @public
-        * @static
-        */
-        public static WALL: number = ArcadePhysics.LEFT | ArcadePhysics.RIGHT;
-
-
-        /**
-        * Special-case constant meaning any direction, used mainly by &lt;code&gt;allowCollisions&lt;/code&gt; and &lt;code&gt;touching&lt;/code&gt;.
-        * @property ANY
-        * @type number
-        * @default 0x1111
-        * @public
-        * @static
-        */
-        public static ANY: number = ArcadePhysics.LEFT | ArcadePhysics.RIGHT | ArcadePhysics.UP | ArcadePhysics.DOWN;
-
-
-        /**
-        * Handy constant used during collision resolution (see &lt;code&gt;separateX()&lt;/code&gt; and &lt;code&gt;separateY()&lt;/code&gt;).
-        * @property OVERLAP_BIAS
-        * @type number
-        * @default 4
-        * @public
-        * @static
-        */
-        public static OVERLAP_BIAS: number = 4;
-
-
-    }
+			return results;
+		}
 
-}
 
+		/**
+		* A method to check to see if the parent of this physics component overlaps with any Entities that are held in an Array which is passed.
+		*
+		* @method overlapsArray
+		* @param array {Array} The array of GameObjects you want to check.
+		* @param [separateObjects=false] {boolean} If when the objects collide you want them to seperate outwards.
+		* @return {boolean} If any overlapping occured or not.
+		* @public
+		*/ 
+		public overlapsArray(array: Array&lt;any&gt;, separateObjects: boolean = false): boolean {
+			
+			var results: boolean = false;
+
+			for (var i = 0; i &lt; array.length; i++) {
+
+				if (typeof array[i].childType !== &quot;undefined&quot;) {
+
+					if (array[i].childType() == Kiwi.GROUP) {
+
+						this.overlapsGroup(&lt;Kiwi.Group&gt;array[i], separateObjects);
+						
+					} else {
+
+						if (this.overlaps(&lt;Kiwi.Entity&gt;array[i], separateObjects)) {
+							if (this._callbackFunction !== null &amp;&amp; this._callbackContext !== null) {
+								this._callbackFunction.call(this._callbackContext, this.owner, array[i]);
+							}
+							results = true;
+						}
+
+					}
+
+				}
+
+			}
+			
+			return results;
+		}
+
+
+		/*
+		*-------------
+		* Motion Methods
+		*-------------
+		*/
+
+
+		/**
+		* Computes the velocity based on the parameters passed.  
+		* @method computeVelocity
+		* @static
+		* @param velocity {number} The currently velocity.
+		* @param [acceleration=0] {number} The acceleration of the item.
+		* @param [drag=0] {number} The amount of drag effecting the item.
+		* @param [max=10000] {number} The maximum velocity.
+		* @return {Number} The new velocity
+		* @public
+		*/
+		public static computeVelocity(velocity: number, acceleration: number = 0, drag: number = 0, max: number = 10000): number {
+
+			if (acceleration != 0)
+				velocity += acceleration * ArcadePhysics.updateInterval;
+			else if (drag != 0) {
+				drag = drag * ArcadePhysics.updateInterval;
+				if (velocity - drag &gt; 0)
+					velocity = velocity - drag;
+				else if (velocity + drag &lt; 0)
+					velocity += drag;
+				else
+					velocity = 0;
+			}
+			if ((velocity != 0) &amp;&amp; (max != 10000)) {
+				if (velocity &gt; max)
+					velocity = max;
+				else if (velocity &lt; -max)
+					velocity = -max;
+			}
+			return velocity;
+		}
+
+
+		/**
+		* Updates the position of this object. Automatically called if the &#x27;moves&#x27; parameter is true.  
+		* This called each frame during the update method.
+		* 
+		* @method updateMotion
+		* @private
+		*/
+		public updateMotion() {
+			
+			var delta: number;
+			var velocityDelta: number;
+			
+			//Update the motion calculated from rotation.
+			velocityDelta = (ArcadePhysics.computeVelocity(this.angularVelocity, this.angularAcceleration, this.angularDrag, this.maxAngular) - this.angularVelocity) / 2;
+			this.angularVelocity += velocityDelta;
+			this.transform.rotation += this.angularVelocity * ArcadePhysics.updateInterval;
+			this.angularVelocity += velocityDelta;
+		   
+			//Update the motion on the x-axis.
+			velocityDelta = (ArcadePhysics.computeVelocity(this.velocity.x, this.acceleration.x, this.drag.x, this.maxVelocity.x) - this.velocity.x) / 2;
+			this.velocity.x += velocityDelta;
+			delta = this.velocity.x * ArcadePhysics.updateInterval;
+			this.velocity.x += velocityDelta;
+			this.transform.x = this.transform.x + delta;
+
+			//Update the motion on the y-axis.
+			velocityDelta = (ArcadePhysics.computeVelocity(this.velocity.y, this.acceleration.y, this.drag.y, this.maxVelocity.y) - this.velocity.y) / 2;
+			this.velocity.y += velocityDelta;
+			delta = this.velocity.y * ArcadePhysics.updateInterval;
+			this.velocity.y += velocityDelta;
+			this.transform.y = this.transform.y + delta;
+		
+		}
+
+
+		/**
+		* The Update loop of the physics component
+		* @method update
+		* @public
+		*/
+		public update() {
+
+			//Flixel preupdate
+			this.last.x = this.transform.worldX;
+			this.last.y = this.transform.worldY;
+
+			//Flixel postupdate
+			if (this.moves)
+				this.updateMotion();
+
+			this.wasTouching = this.touching;
+			this.touching = ArcadePhysics.NONE;
+
+
+		}
+
+
+		/**
+		* Removes all properties that refer to other objects or outside of this class in order to flag this object for garbage collection.
+		* @method destroy
+		* @public
+		*/
+		public destroy() {
+			super.destroy();
+
+			delete this.transform;
+			delete this.owner;
+			delete this._callbackContext;
+			delete this._callbackFunction;
+		}
+
+
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {string} &quot;ArcadePhysics&quot;
+		* @public
+		*/
+		public objType() {
+			return &quot;ArcadePhysics&quot;;
+		}
+
+
+		/*
+		*----------------
+		* Static Functions
+		*----------------
+		*/
+
+
+		/*
+		*----------------
+		* Collide Functions - Maps to Overlaps
+		*----------------
+		*/
+
+
+		/**
+		* A Static method to check to see if two objects collide or not. Returns a boolean indicating whether they overlaped or not.
+		*
+		* @method collide
+		* @static
+		* @public
+		* @param gameObject1 {Kiwi.Entity} The first game object.
+		* @param gameObject2 {Kiwi.Entity} The second game object.
+		* @param [seperate=true] {boolean} If the two gameobjects should seperated when they collide.
+		* @return {boolean}
+		*/
+		public static collide(gameObject1: Entity, gameObject2: Entity, seperate: boolean = true): boolean {
+			return ArcadePhysics.overlaps(gameObject1, gameObject2, seperate);
+		}
+
+
+		/**
+		* A Static method to check to see if a single entity collides with a group of entities. Returns a boolean indicating whether they overlaped or not.
+		*
+		* @method collideGroup
+		* @static
+		* @public
+		* @param gameObject {Kiwi.Entity} The entity you would like to check against.
+		* @param group {Kiwi.Group} The Kiwi Group that you want to check the entity against. 
+		* @param [seperate=true] {boolean} 
+		* @return {boolean}
+		* @public
+		*/
+		public static collideGroup(gameObject: Entity, group: Kiwi.Group, seperate: boolean = true): boolean {
+
+			return ArcadePhysics.overlapsObjectGroup(gameObject, group, seperate);
+		}
+
+
+		/**
+		* A Static method to check to see if a group of entities overlap with another group of entities. Returns a boolean indicating whether they overlaped or not.
+		*
+		* @method collideGroupGroup
+		* @static
+		* @public
+		* @param group1 {Kiwi.Group} The first Kiwi Group that you want to check the entity against. 
+		* @param group2 {Kiwi.Group} The second Kiwi Group that you want to check the entity against. 
+		* @param [seperate=true] {boolean}
+		* @return {boolean}
+		*/
+		public static collideGroupGroup(group1: Kiwi.Group, group2: Kiwi.Group, seperate: boolean = true): boolean {
+
+			return ArcadePhysics.overlapsGroupGroup(group1, group2, seperate);
+		}
+
+
+		/*
+		*-------------
+		* Overlap Static Method - Use&#x27;s the Arcade Physics of one of the gameobjects passed.
+		*-------------
+		*/
+
+
+		/**
+		* A Static method to that checks to see if two objects overlap. Returns a boolean indicating whether they did or not.
+		*
+		* @method overlaps
+		* @static
+		* @public
+		* @param gameObject1 {Kiwi.Entity} The first game object.
+		* @param gameObject2 {Kiwi.Entity} The second gameobject you are testing the first against.
+		* @param [separateObjects=true] {boolean} 
+		* @return {boolean}
+		*/
+		public static overlaps(gameObject1: Entity, gameObject2: Entity, separateObjects: boolean = true): boolean {
+
+			var obj1Physics: ArcadePhysics = gameObject1.components.getComponent(&quot;ArcadePhysics&quot;);
+			return obj1Physics.overlaps(gameObject2, separateObjects);
+		}
+
+
+		/**
+		* A Static method to that checks to see if a single object overlaps with a group of entities. Returns a boolean indicating whether they did or not.
+		*
+		* @method overlapsObjectGroup
+		* @static
+		* @param gameObject {Kiwi.Entity}
+		* @param group {Kiwi.Group} 
+		* @param [seperateObjects=true] {boolean} If they overlap should the seperate or not
+		* @return {boolean}
+		* @public
+		*/
+		public static overlapsObjectGroup(gameObject: Entity, group: Kiwi.Group, separateObjects: boolean = true): boolean {
+
+			var objPhysics: ArcadePhysics = gameObject.components.getComponent(&quot;ArcadePhysics&quot;);
+			return objPhysics.overlapsGroup(group, separateObjects);
+		}
+
+
+		/**
+		* A Static method that checks to see if any objects in one group overlap with objects in another group.
+		*
+		* @method overlaps
+		* @static
+		* @param group1 {Kiwi.Group} The first group you would like to check against.
+		* @param group2 {Kiwi.Group} The second group you would like to check against.
+		* @param [seperate=true] {boolean} If they overlap should the seperate or not
+		* @return {boolean}
+		* @public
+		*/
+		public static overlapsGroupGroup(group1: Kiwi.Group, group2: Kiwi.Group, separateObjects: boolean = true): boolean {
+
+			var result: boolean = false;
+
+			var members: IChild[] = group1.members;
+			var i: number = 0;
+
+			while (i &lt; group1.members.length) {
+				if (members[i].childType() == Kiwi.GROUP) {
+					if (ArcadePhysics.overlapsGroupGroup(&lt;Kiwi.Group&gt;members[i++], group2, separateObjects)) result = true;
+
+				} else {
+					if (ArcadePhysics.overlapsObjectGroup(&lt;Kiwi.Entity&gt;members[i++], group2, separateObjects)) result = true;
+
+				}
+			}
+
+			return result;
+		}
+
+
+		/**
+		* A Static method that checks to see if any objects from an Array collide with a Kiwi Group members.
+		* 
+		* @method overlapsArrayGroup
+		* @param array {Array} An array you want to check collide.
+		* @param group {Kiwi.Group} A group of objects you want to check overlaps.
+		* @param [seperateObjects=true] {Boolean} If when a collision is found the objects should seperate out.
+		* @return {Boolean} 
+		* @static
+		*/
+		public static overlapsArrayGroup(array: Array&lt;any&gt;, group: Kiwi.Group, separateObjects: boolean = true) {
+
+			var result: boolean = false;
+
+			//loop through the array 
+			for (var i = 0; i &lt; array.length; i++) {
+				if (typeof array[i].childType !== &quot;undefined&quot;) {
+
+					if (array[i].childType() === Kiwi.GROUP) {
+						if (ArcadePhysics.overlapsGroupGroup(&lt;Kiwi.Group&gt;array[i], group, separateObjects))
+							result = true;
+
+					} else {
+						if (ArcadePhysics.overlapsObjectGroup(&lt;Kiwi.Entity&gt;array[i], group, separateObjects))
+							result = true;
+					}
+
+				}
+			}
+
+			return result;
+		}
+
+
+		/*
+		*---------------
+		* Static Constants 
+		*---------------
+		*/
+
+
+		/**
+		* How often the motion should be updated.
+		* @property updateInterval
+		* @static
+		* @default 1 / 10
+		* @type number
+		* @public
+		*/
+		public static updateInterval: number = 1 / 10;
+
+
+		/**
+		* Generic value for &quot;left&quot; Used by &lt;code&gt;facing&lt;/code&gt;, &lt;code&gt;allowCollisions&lt;/code&gt;, and &lt;code&gt;touching&lt;/code&gt;.
+		* @property LEFT
+		* @type number
+		* @default 0x0001
+		* @public
+		* @static
+		*/
+		public static LEFT: number = 0x0001;
+
+
+		/**
+		* Generic value for &quot;right&quot; Used by &lt;code&gt;facing&lt;/code&gt;, &lt;code&gt;allowCollisions&lt;/code&gt;, and &lt;code&gt;touching&lt;/code&gt;.
+		* @property RIGHT
+		* @type number
+		* @default 0x0010
+		* @public
+		* @static
+		*/
+		public static RIGHT: number = 0x0010;
+
+
+		/**
+		* Generic value for &quot;up&quot; Used by &lt;code&gt;facing&lt;/code&gt;, &lt;code&gt;allowCollisions&lt;/code&gt;, and &lt;code&gt;touching&lt;/code&gt;.
+		* @property UP
+		* @type number
+		* @default 0x0100
+		* @public
+		* @static
+		*/
+		public static UP: number = 0x0100;
+
+
+		/**
+		* Generic value for &quot;down&quot; Used by &lt;code&gt;facing&lt;/code&gt;, &lt;code&gt;allowCollisions&lt;/code&gt;, and &lt;code&gt;touching&lt;/code&gt;.
+		* @property DOWN
+		* @type number
+		* @default 0x1000
+		* @public
+		* @static
+		*/
+		public static DOWN: number = 0x1000;
+
+
+		/**
+		* Special-case constant meaning no collisions, used mainly by &lt;code&gt;allowCollisions&lt;/code&gt; and &lt;code&gt;touching&lt;/code&gt;.
+		* @property NONE
+		* @type number
+		* @default 0
+		* @public
+		* @static
+		*/
+		public static NONE: number = 0;
+
+
+		/**
+		* Special-case constant meaning up, used mainly by &lt;code&gt;allowCollisions&lt;/code&gt; and &lt;code&gt;touching&lt;/code&gt;.
+		* @property CEILING
+		* @type number
+		* @default 0x0100
+		* @public
+		* @static
+		*/
+		public static CEILING: number = ArcadePhysics.UP;
+
+
+		/**
+		* Special-case constant meaning down, used mainly by &lt;code&gt;allowCollisions&lt;/code&gt; and &lt;code&gt;touching&lt;/code&gt;.
+		* @property FLOOR
+		* @type number
+		* @default 0x1000
+		* @public
+		* @static
+		*/
+		public static FLOOR: number = ArcadePhysics.DOWN;
+
+
+		/**
+		* Special-case constant meaning only the left and right sides, used mainly by &lt;code&gt;allowCollisions&lt;/code&gt; and &lt;code&gt;touching&lt;/code&gt;.
+		* @property WALL
+		* @type number
+		* @default 0x0011
+		* @public
+		* @static
+		*/
+		public static WALL: number = ArcadePhysics.LEFT | ArcadePhysics.RIGHT;
+
+
+		/**
+		* Special-case constant meaning any direction, used mainly by &lt;code&gt;allowCollisions&lt;/code&gt; and &lt;code&gt;touching&lt;/code&gt;.
+		* @property ANY
+		* @type number
+		* @default 0x1111
+		* @public
+		* @static
+		*/
+		public static ANY: number = ArcadePhysics.LEFT | ArcadePhysics.RIGHT | ArcadePhysics.UP | ArcadePhysics.DOWN;
+
+
+		/**
+		* Handy constant used during collision resolution (see &lt;code&gt;separateX()&lt;/code&gt; and &lt;code&gt;separateY()&lt;/code&gt;).
+		* @property OVERLAP_BIAS
+		* @type number
+		* @default 4
+		* @public
+		* @static
+		*/
+		public static OVERLAP_BIAS: number = 4;
+
+
+	}
+
+}
 
     </pre>
 </div>
diff --git a/docs/files/src_components_Box.ts.html b/docs/files/src_components_Box.ts.html
index 4de0dbd..b380856 100644
--- a/docs/files/src_components_Box.ts.html
+++ b/docs/files/src_components_Box.ts.html
@@ -369,505 +369,501 @@ <h1 class="file-heading">File: src/components/Box.ts</h1>
 * @module Kiwi
 * @submodule Components 
 * 
-*/ 
+*/
 
 module Kiwi.Components {
 
-    /**
-    * The Box Component is used to handle the various &#x27;bounds&#x27; that each GameObject has. 
-    * There are two main different types of bounds (Bounds and Hitbox) with each one having three variants (each one is a rectangle) depending on what you are wanting:
-    *
-    * RawBounds: The bounding box of the GameObject before rotation/scale.
-    * 
-    * RawHitbox: The hitbox of the GameObject before rotation/scale. This can be modified to be different than the normal bounds but if not specified it will be the same as the raw bounds.
-    *
-    * Bounds: The bounding box of the GameObject after rotation/scale.
-    *
-    * Hitbox: The hitbox of the GameObject after rotation/scale. If you modified the raw hitbox then this one will be modified as well, otherwise it will be the same as the normal bounds.
-    *
-    * WorldBounds: The bounding box of the Entity using its world coordinates and after rotation/scale.
-    *
-    * WorldHitbox: The hitbox of the Entity using its world coordinates and after rotation/scale.
-    *
-    * @class Box
-    * @extends Kiwi.Component
-    * @namespace Kiwi.Components
-    * @constructor
-    * @param parent {Kiwi.Entity} The entity that this box belongs to.
-    * @param [x=0] {Number} Its position on the x axis
-    * @param [y=0] {Number} Its position on the y axis
-    * @param [width=0] {Number} The width of the box.
-    * @param [height=0] {Number} The height of the box.
-    * @return {Kiwi.Components.Box}
-    */
-    export class Box extends Component {
- 
-        constructor(parent: Entity, x: number = 0, y: number = 0, width: number = 0, height: number = 0) {
-            
-            super(parent, &#x27;Box&#x27;);
-            
-            this.entity = parent;
-
-            this._rawBounds = new Kiwi.Geom.Rectangle(x,y,width,height);
-            this._rawCenter = new Kiwi.Geom.Point(x + width / 2, y + height / 2);
-            this._rawHitbox = new Kiwi.Geom.Rectangle();
-
-            this._hitboxOffset = new Kiwi.Geom.Point();
-
-            this.hitbox = new Kiwi.Geom.Rectangle(0, 0, width, height); 
-            this.autoUpdate = true;
-        }
-
-
-        /**
-        * The entity that this box belongs to.
-        * @property entity
-        * @type Kiwi.Entity
-        * @public
-        */
-        public entity: Kiwi.Entity;
-
-
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {string} &quot;Box&quot;
-        * @public
-        */
-        public objType() {
-            return &quot;Box&quot;;
-        }
-
-
-        /**
-        * Controls whether the hitbox should update automatically to match the hitbox of the current cell on the entity this Box component is attached to (default behaviour).
-        * Or if the hitbox shouldn&#x27;t auto update. Which will mean it will stay the same as the last value it had. 
-        * This property is automatically set to &#x27;false&#x27; when you override the hitboxes width/height, but you can set this to true afterwards. 
-        * 
-        * @property autoUpdate
-        * @type boolean
-        * @default true
-        * @private
-        */
-        public autoUpdate: boolean = true;
-
-
-        /**
-        * Indicates whether or not this component needs re-rendering/updating or not.
-        * @property dirty
-        * @type boolean
-        * @public
-        * @deprecated in version 1.1.0 because the box always needed updating
-        */
-        public dirty: boolean;
-
-
-
-        /**
-        * Contains offset point for the hitbox 
-        * @property _hitboxOffset
-        * @type Kiwi.Geom.Point
-        * @private
-        */
-        private _hitboxOffset: Kiwi.Geom.Point;
-        
-
-
-        /**
-        * Returns the offset value of the hitbox as a point for the X/Y axis for the developer to use.
-        * This is without rotation or scaling.
-        * This is a READ ONLY property.
-        * @property hitboxOffset
-        * @type Kiwi.Geom.Point
-        * @public
-        */
-        public get hitboxOffset(): Kiwi.Geom.Point {
-
-            if ( this.autoUpdate == true &amp;&amp; this.entity.atlas !== null &amp;&amp; this.entity.atlas.cells &amp;&amp; this.entity.atlas.cells[ 0 ].hitboxes ) {
-                this._hitboxOffset.x =
-                    this.entity.atlas.cells[this.entity.cellIndex].hitboxes[0].x || 0;
-                this._hitboxOffset.y =
-                    this.entity.atlas.cells[this.entity.cellIndex].hitboxes[0].y || 0;
-
-            }
-
-            return this._hitboxOffset;
-        }
-
-
-
-        /**
-        * Contains the offset rectangle for the raw hitbox. 
-        * @property _rawHitbox
-        * @type Kiwi.Geom.Rectangle
-        * @private
-        */
-        private _rawHitbox: Kiwi.Geom.Rectangle;
-        
-
-        /**
-        * Returns the raw hitbox rectangle for the developer to use. 
-        * &#x27;Raw&#x27; means where it would be without rotation or scaling.
-        * This is READ ONLY.
-        * @property rawHitbox
-        * @type Kiwi.Geom.Rectangle
-        * @public
-        */
-        public get rawHitbox(): Kiwi.Geom.Rectangle {
-
-            this._rawHitbox.x = this.rawBounds.x + this.hitboxOffset.x;
-            this._rawHitbox.y = this.rawBounds.y + this.hitboxOffset.y;
-
-            //If the hitbox has not already been set, then update the width/height based upon the current cell that the entity has.
-            if (this.autoUpdate == true) {
-                var atlas = this.entity.atlas;
-
-                if ( atlas !== null &amp;&amp; atlas.cells &amp;&amp; atlas.cells[ 0 ].hitboxes ) {
-                    this._rawHitbox.width = atlas.cells[ this.entity.cellIndex ].hitboxes[ 0 ].w;
-                    this._rawHitbox.height = atlas.cells[ this.entity.cellIndex ].hitboxes[ 0 ].h;
-                } else {
-                    this._rawHitbox.width = this.entity.width;
-                    this._rawHitbox.height = this.entity.height;
-                }
-            }
-            
-            return this._rawHitbox;
-        }
-        
-
-
-        /**
-        * The transformed or &#x27;normal&#x27; hitbox for the entity. This is its box after rotation/scale.
-        * @property _transformedHitbox
-        * @type Kiwi.Geom.Rectangle
-        * @private
-        */
-        private _transformedHitbox: Kiwi.Geom.Rectangle;
-        
-
-        /** 
-        * The transformed &#x27;world&#x27; hitbox for the entity. This is its box after rotation/scale.
-        * @property _worldHitbox
-        * @type Kiwi.Geom.Rectangle
-        * @private
-        */
-        private _worldHitbox: Kiwi.Geom.Rectangle;
-
-
-        /**
-        * The &#x27;normal&#x27; or transformed hitbox for the entity. This is its box after rotation/Kiwi.Geom.Rectangle. 
-        * @property hitbox
-        * @type Kiwi.Geom.Rectangle
-        * @public
-        */
-        public get hitbox(): Kiwi.Geom.Rectangle {
-            this._transformedHitbox = this._rotateHitbox(this.rawHitbox.clone());
-
-            return this._transformedHitbox;
-        }
-        public set hitbox(value: Kiwi.Geom.Rectangle) {
-            
-            //Use custom hitbox defined by user.
-
-            this._hitboxOffset.x = value.x;
-            this._hitboxOffset.y = value.y;
-
-            this._rawHitbox = value;
-            
-            this._rawHitbox.x += this._rawBounds.x;
-            this._rawHitbox.y += this._rawBounds.y;
-
-            this.autoUpdate = false;
-
-        }
-
-
-
-        /**
-        * Returns the transformed hitbox for the entity using its &#x27;world&#x27; coordinates.
-        * This is READ ONLY.
-        * @property worldHitbox
-        * @type Kiwi.Geom.Rectangle
-        * @public
-        */
-        public get worldHitbox(): Kiwi.Geom.Rectangle {
-            this._worldHitbox = this._rotateHitbox(this.rawHitbox.clone(), true);
-
-            return this._worldHitbox;
-        }
-
-
-
-        /**
-        * The &#x27;raw&#x27; bounds of entity. This is its bounds before rotation/scale.
-        * This for property is only for storage of the values and should be accessed via the getter &#x27;rawBounds&#x27; so that it can update.
-        * 
-        * @property _rawBounds
-        * @type Kiwi.Geom.Rectangle
-        * @private
-        */
-        private _rawBounds: Kiwi.Geom.Rectangle;
-
-
-
-        /**
-        * Returns the &#x27;raw&#x27; bounds for this entity.
-        * This is READ ONLY.
-        * @property rawBounds
-        * @type Kiwi.Geom.Rectangle
-        * @public
-        */
-        public get rawBounds(): Kiwi.Geom.Rectangle {
-            this._rawBounds.x = this.entity.x;
-            this._rawBounds.y = this.entity.y;
-            this._rawBounds.width = this.entity.width;
-            this._rawBounds.height = this.entity.height;
-
-            return this._rawBounds;
-        }
-    
-
-
-        /**
-        * Contains the &#x27;raw&#x27; center point for the bounds.
-        * @property Kiwi.Geom.Point
-        * @type Kiwi.Geom.Point
-        * @private
-        */
-        private _rawCenter: Kiwi.Geom.Point;
-        
-
-
-        /**
-        * Returns the raw center point of the box.
-        * This is READ ONLY.
-        * @property rawCenter
-        * @type Kiwi.Geom.Point
-        * @public
-        */
-        public get rawCenter(): Kiwi.Geom.Point {
-            this._rawCenter.x = this.rawBounds.x + this.rawBounds.width / 2;
-            this._rawCenter.y = this.rawBounds.y + this.rawBounds.height / 2;
-
-            return this._rawCenter;
-        }
-
-
-        /**
-        * Contains the center point after the box has been transformed.
-        * @property _transformedCenter
-        * @type Kiwi.Geom.Point
-        * @private
-        */
-        private _transformedCenter: Kiwi.Geom.Point;
-
-
-        /**
-        * Returns the center point for the box after it has been transformed.
-        * World coordinates.
-        * This is READ ONLY.
-        * @property center
-        * @type Kiwi.Geom.Point
-        * @public
-        */
-        public get center(): Kiwi.Geom.Point {
-            var m: Kiwi.Geom.Matrix = this.entity.transform.getConcatenatedMatrix();
-
-            this._transformedCenter = m.transformPoint(
-                new Kiwi.Geom.Point(
-                    this.entity.width / 2 - this.entity.anchorPointX,
-                    this.entity.height / 2 - this.entity.anchorPointY ) );
-
-            return this._transformedCenter;
-        }
-
-
-
-        /**
-        * Contains the transformed or &#x27;normal&#x27; bounds for this entity.
-        * @property _transformedBounds
-        * @type Kiwi.Geom.Rectangle
-        * @private
-        */
-        private _transformedBounds: Kiwi.Geom.Rectangle;
-
-
-        /**
-        * The &#x27;world&#x27; transformed bounds for this entity. 
-        * @property _worldBounds
-        * @type Kiwi.Geom.Rectangle
-        * @private
-        */
-        private _worldBounds: Kiwi.Geom.Rectangle;
-
-
-        /**
-        * Returns the &#x27;transformed&#x27; or &#x27;normal&#x27; bounds for this box. 
-        * This is READ ONLY.
-        * @property bounds
-        * @type Kiwi.Geom.Rectangle
-        * @public
-        */
-        public get bounds(): Kiwi.Geom.Rectangle {
-            this._transformedBounds = this._rotateRect(this.rawBounds.clone()); 
-            
-            return this._transformedBounds;
-        }
-
-        /**
-        * Returns the &#x27;transformed&#x27; bounds for this entity using the world coodinates.
-        * This is READ ONLY.
-        * @property worldBounds
-        * @type Kiwi.Geom.Rectangle
-        * @public
-        */
-        public get worldBounds(): Kiwi.Geom.Rectangle {
-            this._worldBounds = this._rotateRect(this.rawBounds.clone(), true);
-
-            return this._worldBounds;
-        }
-
-        /**
-        * Private internal method only. Used to calculate the transformed bounds after rotation/scale.
-        * @method _rotateRect
-        * @param rect {Kiwi.Geom.Rectangle}
-        * @param [useWorldCoords=false] {Boolean}
-        * @return {Kiwi.Geom.Rectangle}
-        * @private
-        */
-        private _rotateRect(rect: Kiwi.Geom.Rectangle, useWorldCoords: boolean=false): Kiwi.Geom.Rectangle {
-            var out: Kiwi.Geom.Rectangle = new Kiwi.Geom.Rectangle();
-            var t: Kiwi.Geom.Transform = this.entity.transform;
-            var m: Kiwi.Geom.Matrix = t.getConcatenatedMatrix();
-            
-            //Use world coordinates?
-            if( !useWorldCoords )
-            {
-            	m.setTo(m.a, m.b, m.c, m.d, t.x + t.rotPointX, t.y + t.rotPointY);
-            }
-
-            out = this.extents(
-                m.transformPoint({ x: - t.rotPointX, y: - t.rotPointY }),
-                m.transformPoint({ x: - t.rotPointX + rect.width, y: - t.rotPointY }),
-                m.transformPoint({ x: - t.rotPointX + rect.width, y: - t.rotPointY + rect.height }),
-                m.transformPoint({ x: - t.rotPointX, y: - t.rotPointY + rect.height })
-                );
-            return out;
-        }
-
-
-
-        /**
-        * A private method that is used to calculate the transformed hitbox&#x27;s coordinates after rotation. 
-        * @method _rotateHitbox
-        * @param rect {Kiwi.Geom.Rectangle} 
-        * @param [useWorldCoords=false] {Boolean}
-        * @return {Kiwi.Geom.Rectangle}
-        * @private
-        */
-        private _rotateHitbox(rect: Kiwi.Geom.Rectangle, useWorldCoords: boolean=false): Kiwi.Geom.Rectangle {
-            var out: Kiwi.Geom.Rectangle = new Kiwi.Geom.Rectangle();
-            var t: Kiwi.Geom.Transform = this.entity.transform;
-            var m: Kiwi.Geom.Matrix = t.getConcatenatedMatrix();
-
-            //Use world coordinates?
-            if( !useWorldCoords )
-            {
-            	m.setTo(m.a, m.b, m.c, m.d, t.x + t.rotPointX, t.y + t.rotPointY);
-            }
-
-            out = this.extents(
-                m.transformPoint({ x: - t.rotPointX + this._hitboxOffset.x,              y: - t.rotPointY + this._hitboxOffset.y }),
-                m.transformPoint({ x: - t.rotPointX + rect.width + this._hitboxOffset.x, y: - t.rotPointY +  this._hitboxOffset.y }),
-                m.transformPoint({ x: - t.rotPointX + rect.width + this._hitboxOffset.x, y: - t.rotPointY + rect.height + this._hitboxOffset.y}),
-                m.transformPoint({ x: - t.rotPointX + this._hitboxOffset.x,              y: - t.rotPointY + rect.height + this._hitboxOffset.y })
-                );
-           
-            return out;
-        }
-
-
-
-        /**
-        * Draws the various bounds on a context that is passed. Useful for debugging and using in combination with the debug canvas.
-        * @method draw
-        * @param ctx {CanvasRenderingContext2D} Context of the canvas that this box component is to be rendered on top of.
-        * @param [camera] {Kiwi.Camera} A camera that should be taken into account before rendered. This is the default camera by default.
-        * @public
-        */
-        public draw(ctx: CanvasRenderingContext2D, camera: Kiwi.Camera = this.game.cameras.defaultCamera) {
-            var t: Kiwi.Geom.Transform = this.entity.transform;
-            var ct: Kiwi.Geom.Transform = camera.transform;
-            
-            // Draw raw bounds and raw center
-            ctx.strokeStyle = &quot;red&quot;;
-            ctx.fillRect(this.rawCenter.x + ct.x - 1, this.rawCenter.y + ct.y - 1, 3, 3);
-            ctx.strokeRect(t.x + ct.x + t.rotPointX - 3, t.y + ct.y + t.rotPointY - 3, 7, 7);
-            
-            // Draw bounds
-            ctx.strokeStyle = &quot;blue&quot;;
-            ctx.strokeRect(this.bounds.x + ct.x, this.bounds.y + ct.y, this.bounds.width, this.bounds.height);
-            
-            // Draw hitbox
-            ctx.strokeStyle = &quot;green&quot;;
-            ctx.strokeRect(this.hitbox.x + ct.x, this.hitbox.y + ct.y, this.hitbox.width, this.hitbox.height);
-            
-            // Draw raw hitbox
-            ctx.strokeStyle = &quot;white&quot;;
-            ctx.strokeRect(this.rawHitbox.x + ct.x, this.rawHitbox.y + ct.y, this.rawHitbox.width, this.rawHitbox.height);
-            
-            // Draw world bounds
+	/**
+	* The Box Component is used to handle the various &#x27;bounds&#x27; that each GameObject has. 
+	* There are two main different types of bounds (Bounds and Hitbox) with each one having three variants (each one is a rectangle) depending on what you are wanting:
+	*
+	* RawBounds: The bounding box of the GameObject before rotation/scale.
+	* 
+	* RawHitbox: The hitbox of the GameObject before rotation/scale. This can be modified to be different than the normal bounds but if not specified it will be the same as the raw bounds.
+	*
+	* Bounds: The bounding box of the GameObject after rotation/scale.
+	*
+	* Hitbox: The hitbox of the GameObject after rotation/scale. If you modified the raw hitbox then this one will be modified as well, otherwise it will be the same as the normal bounds.
+	*
+	* WorldBounds: The bounding box of the Entity using its world coordinates and after rotation/scale.
+	*
+	* WorldHitbox: The hitbox of the Entity using its world coordinates and after rotation/scale.
+	*
+	* @class Box
+	* @extends Kiwi.Component
+	* @namespace Kiwi.Components
+	* @constructor
+	* @param parent {Kiwi.Entity} The entity that this box belongs to.
+	* @param [x=0] {Number} Its position on the x axis
+	* @param [y=0] {Number} Its position on the y axis
+	* @param [width=0] {Number} The width of the box.
+	* @param [height=0] {Number} The height of the box.
+	* @return {Kiwi.Components.Box}
+	*/
+	export class Box extends Component {
+
+		constructor(parent: Entity, x: number = 0, y: number = 0, width: number = 0, height: number = 0) {
+			
+			super(parent, &#x27;Box&#x27;);
+			
+			this.entity = parent;
+
+			this._rawBounds = new Kiwi.Geom.Rectangle(x,y,width,height);
+			this._rawCenter = new Kiwi.Geom.Point(x + width / 2, y + height / 2);
+			this._rawHitbox = new Kiwi.Geom.Rectangle();
+
+			this._hitboxOffset = new Kiwi.Geom.Point();
+
+			this.hitbox = new Kiwi.Geom.Rectangle(0, 0, width, height); 
+			this.autoUpdate = true;
+		}
+
+
+		/**
+		* The entity that this box belongs to.
+		* @property entity
+		* @type Kiwi.Entity
+		* @public
+		*/
+		public entity: Kiwi.Entity;
+
+
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {string} &quot;Box&quot;
+		* @public
+		*/
+		public objType() {
+			return &quot;Box&quot;;
+		}
+
+
+		/**
+		* Controls whether the hitbox should update automatically to match the hitbox of the current cell on the entity this Box component is attached to (default behaviour).
+		* Or if the hitbox shouldn&#x27;t auto update. Which will mean it will stay the same as the last value it had. 
+		* This property is automatically set to &#x27;false&#x27; when you override the hitboxes width/height, but you can set this to true afterwards. 
+		* 
+		* @property autoUpdate
+		* @type boolean
+		* @default true
+		* @private
+		*/
+		public autoUpdate: boolean = true;
+
+
+		/**
+		* Indicates whether or not this component needs re-rendering/updating or not.
+		* @property dirty
+		* @type boolean
+		* @public
+		* @deprecated in version 1.1.0 because the box always needed updating
+		*/
+		public dirty: boolean;
+
+
+
+		/**
+		* Contains offset point for the hitbox 
+		* @property _hitboxOffset
+		* @type Kiwi.Geom.Point
+		* @private
+		*/
+		private _hitboxOffset: Kiwi.Geom.Point;
+
+
+
+		/**
+		* Returns the offset value of the hitbox as a point for the X/Y axis for the developer to use.
+		* This is without rotation or scaling.
+		* This is a READ ONLY property.
+		* @property hitboxOffset
+		* @type Kiwi.Geom.Point
+		* @public
+		*/
+		public get hitboxOffset(): Kiwi.Geom.Point {
+
+			if ( this.autoUpdate == true &amp;&amp; this.entity.atlas !== null &amp;&amp; this.entity.atlas.cells &amp;&amp; this.entity.atlas.cells[ 0 ].hitboxes ) {
+				this._hitboxOffset.x =
+					this.entity.atlas.cells[this.entity.cellIndex].hitboxes[0].x || 0;
+				this._hitboxOffset.y =
+					this.entity.atlas.cells[this.entity.cellIndex].hitboxes[0].y || 0;
+
+			}
+
+			return this._hitboxOffset;
+		}
+
+
+
+		/**
+		* Contains the offset rectangle for the raw hitbox. 
+		* @property _rawHitbox
+		* @type Kiwi.Geom.Rectangle
+		* @private
+		*/
+		private _rawHitbox: Kiwi.Geom.Rectangle;
+
+
+		/**
+		* Returns the raw hitbox rectangle for the developer to use. 
+		* &#x27;Raw&#x27; means where it would be without rotation or scaling.
+		* This is READ ONLY.
+		* @property rawHitbox
+		* @type Kiwi.Geom.Rectangle
+		* @public
+		*/
+		public get rawHitbox(): Kiwi.Geom.Rectangle {
+
+			this._rawHitbox.x = this.rawBounds.x + this.hitboxOffset.x;
+			this._rawHitbox.y = this.rawBounds.y + this.hitboxOffset.y;
+
+			//If the hitbox has not already been set, then update the width/height based upon the current cell that the entity has.
+			if (this.autoUpdate == true) {
+				var atlas = this.entity.atlas;
+
+				if ( atlas !== null &amp;&amp; atlas.cells &amp;&amp; atlas.cells[ 0 ].hitboxes ) {
+					this._rawHitbox.width = atlas.cells[ this.entity.cellIndex ].hitboxes[ 0 ].w;
+					this._rawHitbox.height = atlas.cells[ this.entity.cellIndex ].hitboxes[ 0 ].h;
+				} else {
+					this._rawHitbox.width = this.entity.width;
+					this._rawHitbox.height = this.entity.height;
+				}
+			}
+
+			return this._rawHitbox;
+		}
+
+
+
+		/**
+		* The transformed or &#x27;normal&#x27; hitbox for the entity. This is its box after rotation/scale.
+		* @property _transformedHitbox
+		* @type Kiwi.Geom.Rectangle
+		* @private
+		*/
+		private _transformedHitbox: Kiwi.Geom.Rectangle;
+
+
+		/** 
+		* The transformed &#x27;world&#x27; hitbox for the entity. This is its box after rotation/scale.
+		* @property _worldHitbox
+		* @type Kiwi.Geom.Rectangle
+		* @private
+		*/
+		private _worldHitbox: Kiwi.Geom.Rectangle;
+
+
+		/**
+		* The &#x27;normal&#x27; or transformed hitbox for the entity. This is its box after rotation/Kiwi.Geom.Rectangle. 
+		* @property hitbox
+		* @type Kiwi.Geom.Rectangle
+		* @public
+		*/
+		public get hitbox(): Kiwi.Geom.Rectangle {
+			this._transformedHitbox = this._rotateHitbox(this.rawHitbox.clone());
+
+			return this._transformedHitbox;
+		}
+		public set hitbox(value: Kiwi.Geom.Rectangle) {
+
+			//Use custom hitbox defined by user.
+
+			this._hitboxOffset.x = value.x;
+			this._hitboxOffset.y = value.y;
+
+			this._rawHitbox = value;
+
+			this._rawHitbox.x += this._rawBounds.x;
+			this._rawHitbox.y += this._rawBounds.y;
+
+			this.autoUpdate = false;
+
+		}
+
+
+
+		/**
+		* Returns the transformed hitbox for the entity using its &#x27;world&#x27; coordinates.
+		* This is READ ONLY.
+		* @property worldHitbox
+		* @type Kiwi.Geom.Rectangle
+		* @public
+		*/
+		public get worldHitbox(): Kiwi.Geom.Rectangle {
+			this._worldHitbox = this._rotateHitbox(this.rawHitbox.clone(), true);
+
+			return this._worldHitbox;
+		}
+
+
+
+		/**
+		* The &#x27;raw&#x27; bounds of entity. This is its bounds before rotation/scale.
+		* This for property is only for storage of the values and should be accessed via the getter &#x27;rawBounds&#x27; so that it can update.
+		* 
+		* @property _rawBounds
+		* @type Kiwi.Geom.Rectangle
+		* @private
+		*/
+		private _rawBounds: Kiwi.Geom.Rectangle;
+
+
+
+		/**
+		* Returns the &#x27;raw&#x27; bounds for this entity.
+		* This is READ ONLY.
+		* @property rawBounds
+		* @type Kiwi.Geom.Rectangle
+		* @public
+		*/
+		public get rawBounds(): Kiwi.Geom.Rectangle {
+			this._rawBounds.x = this.entity.x;
+			this._rawBounds.y = this.entity.y;
+			this._rawBounds.width = this.entity.width;
+			this._rawBounds.height = this.entity.height;
+
+			return this._rawBounds;
+		}
+
+
+
+		/**
+		* Contains the &#x27;raw&#x27; center point for the bounds.
+		* @property Kiwi.Geom.Point
+		* @type Kiwi.Geom.Point
+		* @private
+		*/
+		private _rawCenter: Kiwi.Geom.Point;
+
+
+		/**
+		* Returns the raw center point of the box.
+		* This is READ ONLY.
+		* @property rawCenter
+		* @type Kiwi.Geom.Point
+		* @public
+		*/
+		public get rawCenter(): Kiwi.Geom.Point {
+			this._rawCenter.x = this.rawBounds.x + this.rawBounds.width / 2;
+			this._rawCenter.y = this.rawBounds.y + this.rawBounds.height / 2;
+
+			return this._rawCenter;
+		}
+
+
+		/**
+		* Contains the center point after the box has been transformed.
+		* @property _transformedCenter
+		* @type Kiwi.Geom.Point
+		* @private
+		*/
+		private _transformedCenter: Kiwi.Geom.Point;
+
+
+		/**
+		* Returns the center point for the box after it has been transformed.
+		* World coordinates.
+		* This is READ ONLY.
+		* @property center
+		* @type Kiwi.Geom.Point
+		* @public
+		*/
+		public get center(): Kiwi.Geom.Point {
+			var m: Kiwi.Geom.Matrix = this.entity.transform.getConcatenatedMatrix();
+
+			this._transformedCenter = m.transformPoint(
+				new Kiwi.Geom.Point(
+					this.entity.width / 2 - this.entity.anchorPointX,
+					this.entity.height / 2 - this.entity.anchorPointY ) );
+
+			return this._transformedCenter;
+		}
+
+
+
+		/**
+		* Contains the transformed or &#x27;normal&#x27; bounds for this entity.
+		* @property _transformedBounds
+		* @type Kiwi.Geom.Rectangle
+		* @private
+		*/
+		private _transformedBounds: Kiwi.Geom.Rectangle;
+
+
+		/**
+		* The &#x27;world&#x27; transformed bounds for this entity. 
+		* @property _worldBounds
+		* @type Kiwi.Geom.Rectangle
+		* @private
+		*/
+		private _worldBounds: Kiwi.Geom.Rectangle;
+
+
+		/**
+		* Returns the &#x27;transformed&#x27; or &#x27;normal&#x27; bounds for this box. 
+		* This is READ ONLY.
+		* @property bounds
+		* @type Kiwi.Geom.Rectangle
+		* @public
+		*/
+		public get bounds(): Kiwi.Geom.Rectangle {
+			this._transformedBounds = this._rotateRect(this.rawBounds.clone()); 
+
+			return this._transformedBounds;
+		}
+
+		/**
+		* Returns the &#x27;transformed&#x27; bounds for this entity using the world coodinates.
+		* This is READ ONLY.
+		* @property worldBounds
+		* @type Kiwi.Geom.Rectangle
+		* @public
+		*/
+		public get worldBounds(): Kiwi.Geom.Rectangle {
+			this._worldBounds = this._rotateRect(this.rawBounds.clone(), true);
+
+			return this._worldBounds;
+		}
+
+		/**
+		* Private internal method only. Used to calculate the transformed bounds after rotation/scale.
+		* @method _rotateRect
+		* @param rect {Kiwi.Geom.Rectangle}
+		* @param [useWorldCoords=false] {Boolean}
+		* @return {Kiwi.Geom.Rectangle}
+		* @private
+		*/
+		private _rotateRect(rect: Kiwi.Geom.Rectangle, useWorldCoords: boolean=false): Kiwi.Geom.Rectangle {
+			var out: Kiwi.Geom.Rectangle = new Kiwi.Geom.Rectangle();
+			var t: Kiwi.Geom.Transform = this.entity.transform;
+			var m: Kiwi.Geom.Matrix = t.getConcatenatedMatrix();
+			
+			//Use world coordinates?
+			if( !useWorldCoords )
+			{
+				m.setTo(m.a, m.b, m.c, m.d, t.x + t.rotPointX, t.y + t.rotPointY);
+			}
+
+			out = this.extents(
+				m.transformPoint({ x: - t.rotPointX, y: - t.rotPointY }),
+				m.transformPoint({ x: - t.rotPointX + rect.width, y: - t.rotPointY }),
+				m.transformPoint({ x: - t.rotPointX + rect.width, y: - t.rotPointY + rect.height }),
+				m.transformPoint({ x: - t.rotPointX, y: - t.rotPointY + rect.height })
+				);
+			return out;
+		}
+
+
+
+		/**
+		* A private method that is used to calculate the transformed hitbox&#x27;s coordinates after rotation. 
+		* @method _rotateHitbox
+		* @param rect {Kiwi.Geom.Rectangle} 
+		* @param [useWorldCoords=false] {Boolean}
+		* @return {Kiwi.Geom.Rectangle}
+		* @private
+		*/
+		private _rotateHitbox(rect: Kiwi.Geom.Rectangle, useWorldCoords: boolean=false): Kiwi.Geom.Rectangle {
+			var out: Kiwi.Geom.Rectangle = new Kiwi.Geom.Rectangle();
+			var t: Kiwi.Geom.Transform = this.entity.transform;
+			var m: Kiwi.Geom.Matrix = t.getConcatenatedMatrix();
+
+			//Use world coordinates?
+			if( !useWorldCoords )
+			{
+				m.setTo(m.a, m.b, m.c, m.d, t.x + t.rotPointX, t.y + t.rotPointY);
+			}
+
+			out = this.extents(
+				m.transformPoint({ x: - t.rotPointX + this._hitboxOffset.x,              y: - t.rotPointY + this._hitboxOffset.y }),
+				m.transformPoint({ x: - t.rotPointX + rect.width + this._hitboxOffset.x, y: - t.rotPointY +  this._hitboxOffset.y }),
+				m.transformPoint({ x: - t.rotPointX + rect.width + this._hitboxOffset.x, y: - t.rotPointY + rect.height + this._hitboxOffset.y}),
+				m.transformPoint({ x: - t.rotPointX + this._hitboxOffset.x,              y: - t.rotPointY + rect.height + this._hitboxOffset.y })
+				);
+
+			return out;
+		}
+
+
+
+		/**
+		* Draws the various bounds on a context that is passed. Useful for debugging and using in combination with the debug canvas.
+		* @method draw
+		* @param ctx {CanvasRenderingContext2D} Context of the canvas that this box component is to be rendered on top of.
+		* @param [camera] {Kiwi.Camera} A camera that should be taken into account before rendered. This is the default camera by default.
+		* @public
+		*/
+		public draw(ctx: CanvasRenderingContext2D, camera: Kiwi.Camera = this.game.cameras.defaultCamera) {
+			var t: Kiwi.Geom.Transform = this.entity.transform;
+			var ct: Kiwi.Geom.Transform = camera.transform;
+
+			// Draw raw bounds and raw center
+			ctx.strokeStyle = &quot;red&quot;;
+			ctx.fillRect(this.rawCenter.x + ct.x - 1, this.rawCenter.y + ct.y - 1, 3, 3);
+			ctx.strokeRect(t.x + ct.x + t.rotPointX - 3, t.y + ct.y + t.rotPointY - 3, 7, 7);
+
+			// Draw bounds
+			ctx.strokeStyle = &quot;blue&quot;;
+			ctx.strokeRect(this.bounds.x + ct.x, this.bounds.y + ct.y, this.bounds.width, this.bounds.height);
+
+			// Draw hitbox
+			ctx.strokeStyle = &quot;green&quot;;
+			ctx.strokeRect(this.hitbox.x + ct.x, this.hitbox.y + ct.y, this.hitbox.width, this.hitbox.height);
+
+			// Draw raw hitbox
+			ctx.strokeStyle = &quot;white&quot;;
+			ctx.strokeRect(this.rawHitbox.x + ct.x, this.rawHitbox.y + ct.y, this.rawHitbox.width, this.rawHitbox.height);
+
+			// Draw world bounds
 			ctx.strokeStyle = &quot;purple&quot;;
 			ctx.strokeRect(this.worldBounds.x, this.worldBounds.y, this.worldBounds.width, this.worldBounds.height);
-			
+
 			// Draw world hitbox
 			ctx.strokeStyle = &quot;cyan&quot;;
 			ctx.strokeRect(this.worldHitbox.x, this.worldHitbox.y, this.worldHitbox.width, this.worldHitbox.height);
-        }
+		}
 
 
 
-        /** 
-        * Method which takes four Points and then converts it into a Rectangle, which represents the area those points covered.
-        * The points passed can be maybe in any order, as the are checked for validity first. 
-        *
-        * @method extents
-        * @param topLeftPoint {Kiwi.Geom.Point} The top left Point that the Rectangle should have.
-        * @param topRightPoint {Kiwi.Geom.Point} The top right Point that the Rectangle should have.
-        * @param bottomRightPoint {Kiwi.Geom.Point} The bottom right Point that the Rectangle should have.
-        * @param bottomLeftPoint {Kiwi.Geom.Point} The bottom left Point that the Rectangle should have.
-        * @return {Kiwi.Geom.Rectangle} The new Rectangle that represents the area the points covered.
-        * @return Rectangle
-        */
-        public extents(topLeftPoint:Kiwi.Geom.Point, topRightPoint:Kiwi.Geom.Point, bottomRightPoint:Kiwi.Geom.Point, bottomLeftPoint:Kiwi.Geom.Point):Kiwi.Geom.Rectangle {
-            var left: number = Math.min(topLeftPoint.x, topRightPoint.x, bottomRightPoint.x, bottomLeftPoint.x);
-            var right: number = Math.max(topLeftPoint.x, topRightPoint.x, bottomRightPoint.x, bottomLeftPoint.x);
-            var top: number = Math.min(topLeftPoint.y, topRightPoint.y, bottomRightPoint.y, bottomLeftPoint.y);
-            var bottom: number = Math.max(topLeftPoint.y, topRightPoint.y, bottomRightPoint.y, bottomLeftPoint.y);
+		/** 
+		* Method which takes four Points and then converts it into a Rectangle, which represents the area those points covered.
+		* The points passed can be maybe in any order, as the are checked for validity first. 
+		*
+		* @method extents
+		* @param topLeftPoint {Kiwi.Geom.Point} The top left Point that the Rectangle should have.
+		* @param topRightPoint {Kiwi.Geom.Point} The top right Point that the Rectangle should have.
+		* @param bottomRightPoint {Kiwi.Geom.Point} The bottom right Point that the Rectangle should have.
+		* @param bottomLeftPoint {Kiwi.Geom.Point} The bottom left Point that the Rectangle should have.
+		* @return {Kiwi.Geom.Rectangle} The new Rectangle that represents the area the points covered.
+		* @return Rectangle
+		*/
+		public extents(topLeftPoint:Kiwi.Geom.Point, topRightPoint:Kiwi.Geom.Point, bottomRightPoint:Kiwi.Geom.Point, bottomLeftPoint:Kiwi.Geom.Point):Kiwi.Geom.Rectangle {
+			var left: number = Math.min(topLeftPoint.x, topRightPoint.x, bottomRightPoint.x, bottomLeftPoint.x);
+			var right: number = Math.max(topLeftPoint.x, topRightPoint.x, bottomRightPoint.x, bottomLeftPoint.x);
+			var top: number = Math.min(topLeftPoint.y, topRightPoint.y, bottomRightPoint.y, bottomLeftPoint.y);
+			var bottom: number = Math.max(topLeftPoint.y, topRightPoint.y, bottomRightPoint.y, bottomLeftPoint.y);
 
-            return new Kiwi.Geom.Rectangle(left, top, right - left, bottom - top);
+			return new Kiwi.Geom.Rectangle(left, top, right - left, bottom - top);
 
-        }
+		}
 
 
 
-        /**
-        * Destroys this component and all of the links it may have to other objects.
-        * @method destroy
-        * @public
-        */
-        public destroy() {
-            super.destroy();
-            delete this.entity;
-        }
-	
+		/**
+		* Destroys this component and all of the links it may have to other objects.
+		* @method destroy
+		* @public
+		*/
+		public destroy() {
+			super.destroy();
+			delete this.entity;
+		}
 
-    }
+	}
 
 }
 
-
-
     </pre>
 </div>
 
diff --git a/docs/files/src_components_Input.ts.html b/docs/files/src_components_Input.ts.html
index a4f61da..4400c44 100644
--- a/docs/files/src_components_Input.ts.html
+++ b/docs/files/src_components_Input.ts.html
@@ -369,793 +369,790 @@ <h1 class="file-heading">File: src/components/Input.ts</h1>
 * @module Kiwi
 * @submodule Components 
 * 
-*/ 
- 
+*/
+
 module Kiwi.Components {
 
-    /**
-    * The Input Component is used on GameObjects in which the user may interactive with via a Mouse or Touch 
-    * and as such this class contains useful methods and callbacks you can subscribe to. 
-    * By default the Input component is disabled (this is because when enabled the input component can be process intensive) 
-    * but you can enabled it yourself (which is recommened) BUT in case you forget the input component will automagically 
-    * be enabled once you access a Signal on this class.
-    *
-    * @class Input
-    * @extends Kiwi.Component
-    * @namespace Kiwi.Components
-    * @constructor
-    * @param owner {Object} The Object that this Component is on. Generally this will be a Entity. 
-    * @param box {Kiwi.Components.Box} The box which contains the worldHitbox that is to be used for the event firing.
-    * @param [enabled=false] {boolean} If this input component should be enabled or not. 
-    * @return {Kiwi.Components.Input}
-    */
-    export class Input extends Component {
- 
-        constructor(owner: Kiwi.IChild, box:Kiwi.Components.Box, enabled:boolean=false) {
-
-            super(owner,&#x27;Input&#x27;);
-            
-            //  Signals
-            this._onEntered = new Kiwi.Signal();
-            this._onLeft = new Kiwi.Signal();
-            this._onDown = new Kiwi.Signal();
-            this._onUp = new Kiwi.Signal();
-            this._onDragStarted = new Kiwi.Signal();
-            this._onDragStopped = new Kiwi.Signal();
-
-            //  Properties
-            this._box = box;
-
-            this._distance = new Kiwi.Geom.Point();
-             
-            this._withinBounds = null;
-            this._outsideBounds = true;
-
-            this._isUp = true;
-            this._isDown = null;
-            this._isDragging = null;
-            this._justEntered = false;
-            this._tempDragDisabled = false;
-
-            this._tempPoint = new Kiwi.Geom.Point();
-            this._tempCircle = new Kiwi.Geom.Circle(0, 0, 0);
-
-            this.enabled = enabled;
-        }
-
-        /**
-        * The type of object this input is.
-        * @method objType
-        * @return {string} &quot;Input&quot;
-        * @public
-        */
-        public objType() {
-            return &quot;Input&quot;;
-        }
-        
-        /**
-        * The bounding box that is being used for the &#x27;hitarea&#x27;.
-        * @property _box
-        * @type Kiwi.Components.Box
-        * @private
-        */
-        private _box: Kiwi.Components.Box;
-
-        /**
-        * Kiwi Signal for firing callbacks when a pointer is active and has entered the entities hitbox.
-        * @property _onEntered
-        * @type Kiwi.Signal
-        * @private
-        */
-        private _onEntered: Kiwi.Signal;
-        
-        /**
-        * Kiwi Signal for firing callbacks when a pointer is active and has left the entities hit box.
-        * @property _onLeft
-        * @type Kiwi.Signal
-        * @private
-        */
-        private _onLeft: Kiwi.Signal;
-        
-        /**
-        * Kiwi Signal for firing callbacks when a pointer is active and has pressed down on the entity.
-        * @property _onDown
-        * @type Kiwi.Signal
-        * @private
-        */
-        private _onDown: Kiwi.Signal;
-        
-        /**
-        * Kiwi Signal for firing callbacks when a pointer just released from either being above the entity or the pointer was initally pressed on it.
-        * @property _onUp
-        * @type Kiwi.Signal
-        * @private
-        */
-        private _onUp: Kiwi.Signal;
-        
-        /**
-        * Kiwi Signal for firing callbacks a entity starts being dragged.
-        * @property _onDragStarted
-        * @type Kiwi.Signal
-        * @private
-        */
-        private _onDragStarted: Kiwi.Signal;
-        
-        /**
-        * Kiwi Signal for firing callbacks a entity stops being dragged. Like on release.
-        * @property _onDragStopped
-        * @type Kiwi.Signal
-        * @private
-        */
-        private _onDragStopped: Kiwi.Signal;
-
-        /**
-        * A Temporary Point object which is used whilst checking to see if there is any overlap.
-        * @property _tempPoint
-        * @type Kiwi.Geom.Point
-        * @private
-        */
-        private _tempPoint: Kiwi.Geom.Point;
-        
-        /**
-        * A Temporary Circle object which is used whilst checking to see if there is any overlap.
-        * @property _tempCircle
-        * @type Kiwi.Geom.Circle
-        * @private
-        */
-        private _tempCircle: Kiwi.Geom.Circle;
-
-
-        /**
-        * Returns the onEntered Signal, that fires events when a pointer enters the hitbox of a entity.
-        * Note: Accessing this signal enables the input.
-        * This is READ ONLY.
-        * @property onEntered
-        * @type Kiwi.Signal
-        * @public
-        */
-        public get onEntered(): Kiwi.Signal {
-            if (this.enabled == false) this.enabled = true;
-            return this._onEntered;
-        }
-        
-        /**
-        * Returns the onLeft Signal, that fires events when a pointer leaves the hitbox of a entity.
-        * Note: Accessing this signal enables the input.
-        * This is READ ONLY.
-        * @property onLeft
-        * @type Kiwi.Signal
-        * @public
-        */
-        public get onLeft(): Kiwi.Signal {
-            if (this.enabled == false) this.enabled = true;
-            return this._onLeft;
-        }
-        
-        /**
-        * Returns the onDown Signal, that fires events when a pointer is pressed within the bounds of the signal.
-        * Note: Accessing this signal enables the input.
-        * This is READ ONLY.
-        * @property onDown
-        * @type Kiwi.Signal
-        * @public
-        */
-        public get onDown(): Kiwi.Signal {
-            if (this.enabled == false) this.enabled = true;
-            return this._onDown;
-        }
-        
-        /**
-        * Returns the onUp Signal, that fires events when a pointer is released either within the bounds or was pressed initially within the bounds..
-        * Note: Accessing this signal enables the input.
-        * This is READ ONLY.
-        * @property onUp
-        * @type Kiwi.Signal
-        * @public
-        */
-        public get onUp(): Kiwi.Signal {
-            if (this.enabled == false) this.enabled = true;
-            return this._onUp;
-        }
-    
-        /**
-        * Returns the onDragStarted Signal.
-        * This is READ ONLY.
-        * @property onDragStarted
-        * @type Kiwi.Signal
-        * @public
-        */
-        public get onDragStarted(): Kiwi.Signal { return this._onDragStarted; }
-
-        /**
-        * Returns the onDragStopped Signal.
-        * This is READ ONLY.
-        * @property onDragStopped
-        * @type Kiwi.Signal
-        * @public
-        */
-        public get onDragStopped(): Kiwi.Signal { return this._onDragStopped; }
-
-        /**
-        * A alias for the on release signal.
-        * This is READ ONLY.
-        * @property onRelease
-        * @type Kiwi.Signal
-        * @public
-        */
-        public get onRelease():Kiwi.Signal {
-            return this.onUp;
-        }
-        
-        /**
-        * A alias for the on press signal.
-        * This is READ ONLY.
-        * @property onPress
-        * @type Kiwi.Signal
-        * @public
-        */
-        public get onPress(): Kiwi.Signal {
-            return this.onDown;
-        }
-
-        /**
-        * If this input is enabled or not. 
-        * @property _enabled
-        * @type boolean
-        * @default false
-        * @private
-        */
-        private _enabled: boolean;
-
-        /**
-        * Get if the input is enabled or not. Note: Inputs should only be enabled when needed, otherwise unnecessary processing does occur which can result in a slower game.
-        * @property enabled
-        * @type boolean
-        * @public
-        */
-        public get enabled(): boolean {
-            return this._enabled;
-        }
-        public set enabled(val: boolean) {//perhaps later the signals should only be set if the input is enabled.
-            this._enabled = val; 
-        }
-        
-        /**
-        * If a pointer is current pressing down on the input, this will be a reference to that pointer. Otherwise it will be null.
-        * @property _isDown
-        * @type Kiwi.Input.Pointer
-        * @private
-        */
-        private _isDown: Kiwi.Input.Pointer;    
-
-        /**
-        * A boolean that indicates if no pointer is currently on the pointer
-        * @property _isUp
-        * @type boolean
-        * @default true
-        * @private
-        */
-        private _isUp: boolean;
-
-        /**
-        * Indicates if a pointer is within the bounds or not. If one is then it referers to the pointer that is. Other it will be null.
-        * @property _withinBounds
-        * @type Kiwi.Input.Pointer
-        * @private
-        */
-        private _withinBounds: Kiwi.Input.Pointer;
-
-        /**
-        * boolean indicating if every pointer is currently outside of the bounds.
-        * @property _outsideBounds
-        * @type boolean
-        * @default true
-        * @private
-        */
-        private _outsideBounds: boolean;
-        
-        /**
-        * If a pointer just entered the input. Used for mouse&#x27;s to indicate when to appropriately fire the down event.
-        * Note: Could be removed once mouse version of update gets updated.
-        * @property _justEntered
-        * @type boolean
-        * @default false
-        * @private
-        */
-        private _justEntered: boolean;
-        
-        /**
-        * Used to see if a pointer is currently on this input. Returns a boolean indicating either true or false.
-        * This is READ ONLY.
-        * @property isDown
-        * @type boolean
-        * @public
-        */
-        public get isDown(): boolean {
-            return (this._isDown !== null);
-        }
-        
-        /**
-        * Used to see if no pointer is on this input (so it is up).
-        * This is READ ONLY.
-        * @property isUp
-        * @type boolean
-        * @public
-        */
-        public get isUp(): boolean {
-            return this._isUp;
-        }
-        
-        /**
-        * Check to see if any pointer is within the bounds of this input.
-        * This is READ ONLY.
-        * @property withinBounds
-        * @type boolean
-        * @public
-        */
-        public get withinBounds(): boolean {
-            return (this._withinBounds !== null);
-        }
-        
-        /**
-        * See if no pointers are within the bounds of this entity.
-        * This is READ ONLY.
-        * @property outsideBounds
-        * @type boolean
-        * @public
-        */
-        public get outsideBounds(): boolean {
-            return this._outsideBounds;
-        }
-        
-        /**
-        * A reference to the pointer that is currently &#x27;dragging&#x27; this Object. 
-        * If not dragging then this is null.
-        * @property _isDragging
-        * @type Kiwi.Input.Pointer
-        * @default null
-        * @private
-        */
-        private _isDragging: Kiwi.Input.Pointer = null;
-        
-        /**
-        * The distance between the top left corner of this Objects parent and the coordinates of a Pointer.
-        * @property _distance
-        * @type Kiwi.Geom.Point
-        * @private
-        */
-        private _distance: Kiwi.Geom.Point;
-
-        /**
-        * A boolean indicating if dragging is temporarly disabled. Internal use only to stop events from misfiring.
-        * @property _tempDragDisabled
-        * @type boolean
-        * @private
-        */
-        private _tempDragDisabled: boolean;
-
-        /**
-        * Indicates if dragging is currently enabled.
-        * @property _dragEnabled
-        * @type boolean
-        * @default false
-        * @private
-        */
-        private _dragEnabled: boolean = false;
-        
-        /**
-        * This is used while dragging so that you can make the IChild &#x27;snap&#x27; to specific numbers to give a &#x27;grid like&#x27; effect. 
-        * E.g. If you had a 32 by 32 grid down and you wanted to make an element draggable but snap to the grid you can set this to 32. 
-        * Default value is one.
-        * @property _dragDistance
-        * @type number
-        * @default 1
-        * @private
-        */
-        private _dragDistance: number;
-
-        /**
-        * If when dragging, the IChild should snap to the center of the pointer it is being dragged by.
-        * @property _dragSnapToCenter
-        * @type boolean
-        * @default false
-        * @private 
-        */
-        private _dragSnapToCenter: boolean = false;
-
-        /**
-        * Returns a boolean indicating if this is currently dragging something.
-        * This is READ ONLY.
-        * @property isDragging
-        * @type boolean
-        * @public
-        */
-        public get isDragging(): boolean { return (this._isDragging !== null); }
-
-        /**
-        * The drag distance that is used when dragging this object. See _dragDistance for more information.
-        * @property dragDistance
-        * @type number
-        * @public
-        */
-        public get dragDistance(): number {
-            return this._dragDistance; 
-        }
-        public set dragDistance(val: number) { 
-            this._dragDistance = val;
-        }
-
-        /**
-        * Temporary property that gets updated everyframe with the pointer that is currently &#x27;down&#x27; on this entity.
-        * @property _nowDown
-        * @type Kiwi.Input.Pointer
-        * @default null
-        * @private
-        */
-        private _nowDown: Kiwi.Input.Pointer = null;
-        
-        /**
-        * Temporary property that gets updated everyframe with the pointer that was just &#x27;released&#x27; from being down on this entity
-        * @property _nowUp
-        * @type Kiwi.Input.Pointer
-        * @default null
-        * @private
-        */
-        private _nowUp: Kiwi.Input.Pointer = null;
-        
-        /**
-        * Temporary property of the pointer that is now within the bounds of the entity
-        * @property _nowEntered
-        * @type Kiwi.Input.Pointer
-        * @default null
-        * @private
-        */
-        private _nowEntered: Kiwi.Input.Pointer = null;
-        
-        /**
-        * Temporary property of the pointer that just left the bounds of the entity.
-        * @property _nowLeft
-        * @type Kiwi.Input.Pointer
-        * @default null
-        * @private
-        */
-        private _nowLeft: Kiwi.Input.Pointer = null;
-        
-        /**
-        * Temporary property of the pointer that just started draggging the entity.
-        * @property _nowDragging
-        * @type Kiwi.Input.Pointer
-        * @default null
-        * @private
-        */
-        private _nowDragging: Kiwi.Input.Pointer = null;
-
-        /**
-        * Enables the dragging of this entity. 
-        * @method enableDrag
-        * @param [snapToCenter=false] {boolean} If when dragging the Entity should snap to the center of the pointer.
-        * @param [distance=1] {number} If when dragging the Entity should snap to numbers divisible by this amount.
-        * @public
-        */
-        public enableDrag(snapToCenter:boolean = false, distance:number = 1) {
-            
-            if (this.enabled == false) this.enabled = true;
-            this._dragEnabled = true;
-            this._dragSnapToCenter = snapToCenter;
-            this._dragDistance = distance;
-            this._isDragging = null;
-
-        }
-        
-        /**
-        * Disables the dragging of this entity. 
-        * @method disableDrag
-        * @public
-        */
-        public disableDrag() {
-            this._dragEnabled = false;
-            this._isDragging = null;
-        }
-        
-        /**
-        * The update loop for the input. 
-        * @method update
-        * @protected
-        */
-        public update() {
-
-            if (this.enabled === false  ||  !this.game || this.owner.active === false) {
-                return;
-            }
-            
-            // Reset the temporary properties
-            this._nowDown = null;
-            this._nowUp = null;
-            this._nowEntered = null;
-            this._nowLeft = null;
-            this._nowDragging = null;
-
-            //Use the appropriate method of checking.
-            if (Kiwi.DEVICE.touch) {
-                this._updateTouch();
-            } else {
-                this._updateMouse();
-            }
-            
-            //If the entity is dragging.
-            if (this.isDragging) { 
-
-                this._tempPoint = this.game.cameras.defaultCamera.transformPoint(this._isDragging.point);
-
-                if (this._dragSnapToCenter === false) {
-                    this.owner.transform.x = Kiwi.Utils.GameMath.snapTo((this._tempPoint.x - this._box.hitboxOffset.x - this._distance.x), this._dragDistance);
-                    this.owner.transform.y = Kiwi.Utils.GameMath.snapTo((this._tempPoint.y - this._box.hitboxOffset.y - this._distance.y), this._dragDistance);
-                } else {
-                    this.owner.transform.x = Kiwi.Utils.GameMath.snapTo((this._tempPoint.x - this._box.hitboxOffset.x - this._box.worldHitbox.width / 2), this._dragDistance);
-                    this.owner.transform.y = Kiwi.Utils.GameMath.snapTo((this._tempPoint.y - this._box.hitboxOffset.y - this._box.worldHitbox.height / 2), this._dragDistance);
-                }
-            }
-        }
-
-        /**
-        * The update loop that gets executed when the game is using the touch manager.
-        * @method _updateTouch
-        * @private
-        */
-        private _updateTouch() {
-        
-            for (var i = 0; i &lt; this.game.input.touch.maximumPointers; i++) {
-
-                //if that pointer is active then see where it is
-                if (this.game.input.touch.fingers[i].active === true) {
-                    this._evaluateTouchPointer(this.game.input.touch.fingers[i]);
-                }
-                //if the pointer is inactive check to see if it was just down
-                else if (this.isDown === true &amp;&amp; this._isDown.id === this.game.input.touch.fingers[i].id) {
-                    this._nowUp = this.game.input.touch.fingers[i];
-                }
-                //if the pointer is not active but was within the bounds check to see if it is now outside
-                else if (this.isDown === false &amp;&amp; this._nowUp === null &amp;&amp; this.withinBounds === true &amp;&amp; this._withinBounds.id === this.game.input.touch.fingers[i].id) {
-                    this._nowUp = this.game.input.touch.fingers[i];
-                }
-                 
-            }
-    
-            //Fire the events. LOTS OF CONDITIONS
-            if (this._nowEntered !== null &amp;&amp; this.withinBounds === false) { 
-                this._withinBounds = this._nowEntered;
-                this._outsideBounds = false;
-                this._onEntered.dispatch(this.owner, this._nowEntered);
-            }
-
-            if (this._nowLeft !== null &amp;&amp; this.withinBounds === true) { 
-                this._withinBounds = null;
-                this._outsideBounds = true;
-                this._onLeft.dispatch(this.owner, this._nowLeft);
-            }
-
-            if (this._nowDown !== null &amp;&amp; this.isDown === false) { 
-                this._onDown.dispatch(this.owner, this._nowDown);
-                this._isDown = this._nowDown;
-                this._isUp = false;
-                this._withinBounds = this._nowDown;
-                this._outsideBounds = false;
-            }
-            
-            if (this._dragEnabled == true &amp;&amp; this.isDragging === false &amp;&amp; this._nowDragging !== null) {
-                this._onDragStarted.dispatch(this.owner, this._nowDragging);
-                this._isDragging = this._nowDragging;
-            }
-
-            if (this._nowUp !== null) { 
-                this._onUp.dispatch(this.owner, this._nowUp);
-                this._isDown = null;
-                this._isUp = true;
-                this._withinBounds = null;
-                this._outsideBounds = true;
-
-                //dispatch drag event
-                if (this.isDragging === true &amp;&amp; this._isDragging.id == this._nowUp.id) {
-                    this._isDragging = null;
-                    this._onDragStopped.dispatch(this.owner, this._nowUp);
-                }
-            }
-
-        }
-        
-        /**
-        * A private method for checking to see if a touch pointer should activate any events.
-        * @method _evaluateTouchPointer
-        * @param pointer {Kiwi.Input.Finger} The pointer you are checking against.
-        * @private
-        */
-        private _evaluateTouchPointer(pointer:Kiwi.Input.Finger) {
-            
-            //if nothing isdown or what is down is the current pointer
-            if (this.isDown === false || this._isDown.id === pointer.id) {
-
-                this._tempPoint = this.game.cameras.defaultCamera.transformPoint( pointer.point );
-                this._tempCircle.setTo(this._tempPoint.x, this._tempPoint.y, pointer.circle.diameter);
-
-                if (Kiwi.Geom.Intersect.circleToRectangle(this._tempCircle, this._box.worldHitbox).result) {
-                    if (this.isDown === true &amp;&amp; this._isDown.id === pointer.id || this.isDown === false &amp;&amp; pointer.duration &gt; 1) {
-                        this._nowEntered = pointer;
-                    }
-
-                    if (this.isDown === false &amp;&amp; pointer.frameDuration &lt; 2) {
-                        this._nowDown = pointer;
-                    }
-
-                    if (this._dragEnabled &amp;&amp; this.isDragging == false &amp;&amp; this.isDown == true) {
-                        this._distance.x = this._tempPoint.x - this._box.worldHitbox.left;
-                        this._distance.y = this._tempPoint.y - this._box.worldHitbox.top;
-                        this._nowDragging = pointer; 
-                    }
-                } else {
-                    if (this.isDown === true) {
-                        this._nowLeft = pointer;
-                    } else if(this.withinBounds === true &amp;&amp; this._withinBounds.id == pointer.id) {
-                        this._nowLeft = pointer;
-                    }
-                }
-
-            }
-
-        }
-
-        /**
-        * The update loop that runs when the mouse manager is the method for interacting with the screen.
-        * @method _updateMouse
-        * @private
-        */
-        private _updateMouse() {
-
-            this._evaluateMousePointer(this.game.input.mouse.cursor);
-
-            //dispatch the events
-            if (this._nowLeft !== null) {
-                this._onLeft.dispatch(this.owner, this._nowLeft);
-            }
-
-            if (this._nowEntered !== null) {
-                this._onEntered.dispatch(this.owner, this._nowEntered);
-            }
-            
-            if (this._nowDown !== null &amp;&amp; this.isDown === false) {
-                this._onDown.dispatch(this.owner, this._nowDown);
-                this._isDown = this._nowDown;
-                this._isUp = false;
-            }
-
-            if (this._dragEnabled == true &amp;&amp; this.isDragging === false &amp;&amp; this._nowDragging !== null) {
-                this._onDragStarted.dispatch(this.owner, this._nowDragging);
-                this._isDragging = this._nowDragging;
-            }
-
-            if (this.isDown === true &amp;&amp; this._nowUp !== null &amp;&amp; this._isDown.id === this._nowUp.id) {
-                this._onUp.dispatch(this.owner, this._nowUp);
-                
-                // Dispatch drag event
-                if (this.isDragging === true &amp;&amp; this._isDragging.id == this._nowUp.id) {
-                    this._isDragging = null;
-                    this._onDragStopped.dispatch(this.owner, this._nowUp);
-                }
-
-                this._isDown = null;
-                this._isUp = true;
-            }
-
-        }
-
-        /**
-        * Evaluates where and what the mouse cursor is doing in relation to this box. Needs a little bit more love.
-        * @method _evaluateMousePointer
-        * @param pointer {Kiwi.Input.MouseCursor}
-        * @private
-        */
-        private _evaluateMousePointer(pointer:Kiwi.Input.MouseCursor) {
-
-            this._tempPoint = this.game.cameras.defaultCamera.transformPoint(pointer.point);
-
-            if (Kiwi.Geom.Intersect.pointToRectangle(this._tempPoint, this._box.worldHitbox).result) {
-                
-                if (this._dragEnabled &amp;&amp; this.isDragging === false) {
-                    this._distance.x = this._tempPoint.x - this._box.worldHitbox.left;
-                    this._distance.y = this._tempPoint.y - this._box.worldHitbox.top;
-                }
-
-                //  Has it just moved inside?
-                if (this.withinBounds === false) {
-                    this._nowEntered = pointer;
-                    this._withinBounds = pointer;
-                    this._outsideBounds = false;
-                    this._justEntered = true;
-                }
-
-            } else {
-                
-                //  It&#x27;s outside the bounds now, was it previously in?
-                if (this.withinBounds === true &amp;&amp; this.isDragging === false) {
-                    this._nowLeft = pointer;
-                    this._withinBounds = null;
-                    this._outsideBounds = true;
-                }
-
-            }
-
-            //  Input is down (click/touch)
-            if (pointer.isDown === true) {
-
-                //if is was a mouse, did it just enter?
-                if (this._justEntered) {
-                    this._isDown = pointer;
-                    this._isUp = false;
-                    this._tempDragDisabled = true;
-                }
-
-                //  Within bounds? 
-                if (this.withinBounds === true &amp;&amp; this.isDown === false &amp;&amp; this._nowDown === null) {
-                    this._nowDown = pointer;
-                } 
-
-                if (this._dragEnabled === true &amp;&amp; this.isDragging == false &amp;&amp; this._tempDragDisabled === false) {
-
-                    if(this.isDown == true) {
-                        this._nowDragging = pointer;
-
-                    }
-                }
-
-            } else { 
-                
-                if (this._tempDragDisabled === true) this._tempDragDisabled = false;
-
-                if (this.isDown === true) {
-                    this._nowUp = pointer;
-
-                }    
-            }
-
-            if (this._justEntered) this._justEntered = false;
-        }
-
-        /**
-        * Destroys the input.
-        * @method destory
-        * @public
-        */
-        public destroy() {
-            
-            super.destroy();
-            
-            this.enabled = false;
-            delete this._box;
-            delete this._isDown;
-            delete this._isUp;
-            delete this._isDragging;
-            delete this._dragEnabled;
-            if(this._onDown) this._onDown.dispose();
-            delete this._onDown;
-            if(this._onDragStarted) this._onDragStarted.dispose();
-            delete this._onDragStarted;
-            if (this._onUp) this._onUp.dispose();
-            delete this._onUp;
-            if (this._onLeft) this._onLeft.dispose();
-            delete this._onLeft;
-            if (this._onEntered) this._onEntered.dispose();
-            delete this._onEntered;
-            if (this._onDragStopped) this._onDragStopped.dispose();
-            delete this._onDragStopped;
-            delete this._dragDistance;
-
-        }
-
-    }
+	/**
+	* The Input Component is used on GameObjects in which the user may interactive with via a Mouse or Touch 
+	* and as such this class contains useful methods and callbacks you can subscribe to. 
+	* By default the Input component is disabled (this is because when enabled the input component can be process intensive) 
+	* but you can enabled it yourself (which is recommened) BUT in case you forget the input component will automagically 
+	* be enabled once you access a Signal on this class.
+	*
+	* @class Input
+	* @extends Kiwi.Component
+	* @namespace Kiwi.Components
+	* @constructor
+	* @param owner {Object} The Object that this Component is on. Generally this will be a Entity. 
+	* @param box {Kiwi.Components.Box} The box which contains the worldHitbox that is to be used for the event firing.
+	* @param [enabled=false] {boolean} If this input component should be enabled or not. 
+	* @return {Kiwi.Components.Input}
+	*/
+	export class Input extends Component {
+
+		constructor(owner: Kiwi.IChild, box:Kiwi.Components.Box, enabled:boolean=false) {
+
+			super(owner,&#x27;Input&#x27;);
+
+			//  Signals
+			this._onEntered = new Kiwi.Signal();
+			this._onLeft = new Kiwi.Signal();
+			this._onDown = new Kiwi.Signal();
+			this._onUp = new Kiwi.Signal();
+			this._onDragStarted = new Kiwi.Signal();
+			this._onDragStopped = new Kiwi.Signal();
+
+			//  Properties
+			this._box = box;
+
+			this._distance = new Kiwi.Geom.Point();
+
+			this._withinBounds = null;
+			this._outsideBounds = true;
+
+			this._isUp = true;
+			this._isDown = null;
+			this._isDragging = null;
+			this._justEntered = false;
+			this._tempDragDisabled = false;
+
+			this._tempPoint = new Kiwi.Geom.Point();
+			this._tempCircle = new Kiwi.Geom.Circle(0, 0, 0);
+
+			this.enabled = enabled;
+		}
+
+		/**
+		* The type of object this input is.
+		* @method objType
+		* @return {string} &quot;Input&quot;
+		* @public
+		*/
+		public objType() {
+			return &quot;Input&quot;;
+		}
+
+		/**
+		* The bounding box that is being used for the &#x27;hitarea&#x27;.
+		* @property _box
+		* @type Kiwi.Components.Box
+		* @private
+		*/
+		private _box: Kiwi.Components.Box;
+
+		/**
+		* Kiwi Signal for firing callbacks when a pointer is active and has entered the entities hitbox.
+		* @property _onEntered
+		* @type Kiwi.Signal
+		* @private
+		*/
+		private _onEntered: Kiwi.Signal;
+
+		/**
+		* Kiwi Signal for firing callbacks when a pointer is active and has left the entities hit box.
+		* @property _onLeft
+		* @type Kiwi.Signal
+		* @private
+		*/
+		private _onLeft: Kiwi.Signal;
+
+		/**
+		* Kiwi Signal for firing callbacks when a pointer is active and has pressed down on the entity.
+		* @property _onDown
+		* @type Kiwi.Signal
+		* @private
+		*/
+		private _onDown: Kiwi.Signal;
+
+		/**
+		* Kiwi Signal for firing callbacks when a pointer just released from either being above the entity or the pointer was initally pressed on it.
+		* @property _onUp
+		* @type Kiwi.Signal
+		* @private
+		*/
+		private _onUp: Kiwi.Signal;
+
+		/**
+		* Kiwi Signal for firing callbacks a entity starts being dragged.
+		* @property _onDragStarted
+		* @type Kiwi.Signal
+		* @private
+		*/
+		private _onDragStarted: Kiwi.Signal;
+
+		/**
+		* Kiwi Signal for firing callbacks a entity stops being dragged. Like on release.
+		* @property _onDragStopped
+		* @type Kiwi.Signal
+		* @private
+		*/
+		private _onDragStopped: Kiwi.Signal;
+
+		/**
+		* A Temporary Point object which is used whilst checking to see if there is any overlap.
+		* @property _tempPoint
+		* @type Kiwi.Geom.Point
+		* @private
+		*/
+		private _tempPoint: Kiwi.Geom.Point;
+
+		/**
+		* A Temporary Circle object which is used whilst checking to see if there is any overlap.
+		* @property _tempCircle
+		* @type Kiwi.Geom.Circle
+		* @private
+		*/
+		private _tempCircle: Kiwi.Geom.Circle;
+
+
+		/**
+		* Returns the onEntered Signal, that fires events when a pointer enters the hitbox of a entity.
+		* Note: Accessing this signal enables the input.
+		* This is READ ONLY.
+		* @property onEntered
+		* @type Kiwi.Signal
+		* @public
+		*/
+		public get onEntered(): Kiwi.Signal {
+			if (this.enabled == false) this.enabled = true;
+			return this._onEntered;
+		}
+
+		/**
+		* Returns the onLeft Signal, that fires events when a pointer leaves the hitbox of a entity.
+		* Note: Accessing this signal enables the input.
+		* This is READ ONLY.
+		* @property onLeft
+		* @type Kiwi.Signal
+		* @public
+		*/
+		public get onLeft(): Kiwi.Signal {
+			if (this.enabled == false) this.enabled = true;
+			return this._onLeft;
+		}
+
+		/**
+		* Returns the onDown Signal, that fires events when a pointer is pressed within the bounds of the signal.
+		* Note: Accessing this signal enables the input.
+		* This is READ ONLY.
+		* @property onDown
+		* @type Kiwi.Signal
+		* @public
+		*/
+		public get onDown(): Kiwi.Signal {
+			if (this.enabled == false) this.enabled = true;
+			return this._onDown;
+		}
+
+		/**
+		* Returns the onUp Signal, that fires events when a pointer is released either within the bounds or was pressed initially within the bounds..
+		* Note: Accessing this signal enables the input.
+		* This is READ ONLY.
+		* @property onUp
+		* @type Kiwi.Signal
+		* @public
+		*/
+		public get onUp(): Kiwi.Signal {
+			if (this.enabled == false) this.enabled = true;
+			return this._onUp;
+		}
+
+		/**
+		* Returns the onDragStarted Signal.
+		* This is READ ONLY.
+		* @property onDragStarted
+		* @type Kiwi.Signal
+		* @public
+		*/
+		public get onDragStarted(): Kiwi.Signal { return this._onDragStarted; }
+
+		/**
+		* Returns the onDragStopped Signal.
+		* This is READ ONLY.
+		* @property onDragStopped
+		* @type Kiwi.Signal
+		* @public
+		*/
+		public get onDragStopped(): Kiwi.Signal { return this._onDragStopped; }
+
+		/**
+		* A alias for the on release signal.
+		* This is READ ONLY.
+		* @property onRelease
+		* @type Kiwi.Signal
+		* @public
+		*/
+		public get onRelease():Kiwi.Signal {
+			return this.onUp;
+		}
+
+		/**
+		* A alias for the on press signal.
+		* This is READ ONLY.
+		* @property onPress
+		* @type Kiwi.Signal
+		* @public
+		*/
+		public get onPress(): Kiwi.Signal {
+			return this.onDown;
+		}
+
+		/**
+		* If this input is enabled or not. 
+		* @property _enabled
+		* @type boolean
+		* @default false
+		* @private
+		*/
+		private _enabled: boolean;
+
+		/**
+		* Get if the input is enabled or not. Note: Inputs should only be enabled when needed, otherwise unnecessary processing does occur which can result in a slower game.
+		* @property enabled
+		* @type boolean
+		* @public
+		*/
+		public get enabled(): boolean {
+			return this._enabled;
+		}
+		public set enabled(val: boolean) {//perhaps later the signals should only be set if the input is enabled.
+			this._enabled = val; 
+		}
+
+		/**
+		* If a pointer is current pressing down on the input, this will be a reference to that pointer. Otherwise it will be null.
+		* @property _isDown
+		* @type Kiwi.Input.Pointer
+		* @private
+		*/
+		private _isDown: Kiwi.Input.Pointer;    
+
+		/**
+		* A boolean that indicates if no pointer is currently on the pointer
+		* @property _isUp
+		* @type boolean
+		* @default true
+		* @private
+		*/
+		private _isUp: boolean;
+
+		/**
+		* Indicates if a pointer is within the bounds or not. If one is then it referers to the pointer that is. Other it will be null.
+		* @property _withinBounds
+		* @type Kiwi.Input.Pointer
+		* @private
+		*/
+		private _withinBounds: Kiwi.Input.Pointer;
+
+		/**
+		* boolean indicating if every pointer is currently outside of the bounds.
+		* @property _outsideBounds
+		* @type boolean
+		* @default true
+		* @private
+		*/
+		private _outsideBounds: boolean;
+
+		/**
+		* If a pointer just entered the input. Used for mouse&#x27;s to indicate when to appropriately fire the down event.
+		* Note: Could be removed once mouse version of update gets updated.
+		* @property _justEntered
+		* @type boolean
+		* @default false
+		* @private
+		*/
+		private _justEntered: boolean;
+
+		/**
+		* Used to see if a pointer is currently on this input. Returns a boolean indicating either true or false.
+		* This is READ ONLY.
+		* @property isDown
+		* @type boolean
+		* @public
+		*/
+		public get isDown(): boolean {
+			return (this._isDown !== null);
+		}
+
+		/**
+		* Used to see if no pointer is on this input (so it is up).
+		* This is READ ONLY.
+		* @property isUp
+		* @type boolean
+		* @public
+		*/
+		public get isUp(): boolean {
+			return this._isUp;
+		}
+
+		/**
+		* Check to see if any pointer is within the bounds of this input.
+		* This is READ ONLY.
+		* @property withinBounds
+		* @type boolean
+		* @public
+		*/
+		public get withinBounds(): boolean {
+			return (this._withinBounds !== null);
+		}
+
+		/**
+		* See if no pointers are within the bounds of this entity.
+		* This is READ ONLY.
+		* @property outsideBounds
+		* @type boolean
+		* @public
+		*/
+		public get outsideBounds(): boolean {
+			return this._outsideBounds;
+		}
+
+		/**
+		* A reference to the pointer that is currently &#x27;dragging&#x27; this Object. 
+		* If not dragging then this is null.
+		* @property _isDragging
+		* @type Kiwi.Input.Pointer
+		* @default null
+		* @private
+		*/
+		private _isDragging: Kiwi.Input.Pointer = null;
+
+		/**
+		* The distance between the top left corner of this Objects parent and the coordinates of a Pointer.
+		* @property _distance
+		* @type Kiwi.Geom.Point
+		* @private
+		*/
+		private _distance: Kiwi.Geom.Point;
+
+		/**
+		* A boolean indicating if dragging is temporarly disabled. Internal use only to stop events from misfiring.
+		* @property _tempDragDisabled
+		* @type boolean
+		* @private
+		*/
+		private _tempDragDisabled: boolean;
+
+		/**
+		* Indicates if dragging is currently enabled.
+		* @property _dragEnabled
+		* @type boolean
+		* @default false
+		* @private
+		*/
+		private _dragEnabled: boolean = false;
+
+		/**
+		* This is used while dragging so that you can make the IChild &#x27;snap&#x27; to specific numbers to give a &#x27;grid like&#x27; effect. 
+		* E.g. If you had a 32 by 32 grid down and you wanted to make an element draggable but snap to the grid you can set this to 32. 
+		* Default value is one.
+		* @property _dragDistance
+		* @type number
+		* @default 1
+		* @private
+		*/
+		private _dragDistance: number;
+
+		/**
+		* If when dragging, the IChild should snap to the center of the pointer it is being dragged by.
+		* @property _dragSnapToCenter
+		* @type boolean
+		* @default false
+		* @private 
+		*/
+		private _dragSnapToCenter: boolean = false;
+
+		/**
+		* Returns a boolean indicating if this is currently dragging something.
+		* This is READ ONLY.
+		* @property isDragging
+		* @type boolean
+		* @public
+		*/
+		public get isDragging(): boolean { return (this._isDragging !== null); }
+
+		/**
+		* The drag distance that is used when dragging this object. See _dragDistance for more information.
+		* @property dragDistance
+		* @type number
+		* @public
+		*/
+		public get dragDistance(): number {
+			return this._dragDistance; 
+		}
+		public set dragDistance(val: number) { 
+			this._dragDistance = val;
+		}
+
+		/**
+		* Temporary property that gets updated everyframe with the pointer that is currently &#x27;down&#x27; on this entity.
+		* @property _nowDown
+		* @type Kiwi.Input.Pointer
+		* @default null
+		* @private
+		*/
+		private _nowDown: Kiwi.Input.Pointer = null;
+
+		/**
+		* Temporary property that gets updated everyframe with the pointer that was just &#x27;released&#x27; from being down on this entity
+		* @property _nowUp
+		* @type Kiwi.Input.Pointer
+		* @default null
+		* @private
+		*/
+		private _nowUp: Kiwi.Input.Pointer = null;
+
+		/**
+		* Temporary property of the pointer that is now within the bounds of the entity
+		* @property _nowEntered
+		* @type Kiwi.Input.Pointer
+		* @default null
+		* @private
+		*/
+		private _nowEntered: Kiwi.Input.Pointer = null;
+
+		/**
+		* Temporary property of the pointer that just left the bounds of the entity.
+		* @property _nowLeft
+		* @type Kiwi.Input.Pointer
+		* @default null
+		* @private
+		*/
+		private _nowLeft: Kiwi.Input.Pointer = null;
+
+		/**
+		* Temporary property of the pointer that just started draggging the entity.
+		* @property _nowDragging
+		* @type Kiwi.Input.Pointer
+		* @default null
+		* @private
+		*/
+		private _nowDragging: Kiwi.Input.Pointer = null;
+
+		/**
+		* Enables the dragging of this entity. 
+		* @method enableDrag
+		* @param [snapToCenter=false] {boolean} If when dragging the Entity should snap to the center of the pointer.
+		* @param [distance=1] {number} If when dragging the Entity should snap to numbers divisible by this amount.
+		* @public
+		*/
+		public enableDrag(snapToCenter:boolean = false, distance:number = 1) {
+
+			if (this.enabled == false) this.enabled = true;
+			this._dragEnabled = true;
+			this._dragSnapToCenter = snapToCenter;
+			this._dragDistance = distance;
+			this._isDragging = null;
+
+		}
+
+		/**
+		* Disables the dragging of this entity. 
+		* @method disableDrag
+		* @public
+		*/
+		public disableDrag() {
+			this._dragEnabled = false;
+			this._isDragging = null;
+		}
+
+		/**
+		* The update loop for the input. 
+		* @method update
+		* @protected
+		*/
+		public update() {
+
+			if (this.enabled === false  ||  !this.game || this.owner.active === false) {
+				return;
+			}
+
+			// Reset the temporary properties
+			this._nowDown = null;
+			this._nowUp = null;
+			this._nowEntered = null;
+			this._nowLeft = null;
+			this._nowDragging = null;
+
+			//Use the appropriate method of checking.
+			if (Kiwi.DEVICE.touch) {
+				this._updateTouch();
+			} else {
+				this._updateMouse();
+			}
+			
+			//If the entity is dragging.
+			if (this.isDragging) { 
+
+				this._tempPoint = this.game.cameras.defaultCamera.transformPoint(this._isDragging.point);
+
+				if (this._dragSnapToCenter === false) {
+					this.owner.transform.x = Kiwi.Utils.GameMath.snapTo((this._tempPoint.x - this._box.hitboxOffset.x - this._distance.x), this._dragDistance);
+					this.owner.transform.y = Kiwi.Utils.GameMath.snapTo((this._tempPoint.y - this._box.hitboxOffset.y - this._distance.y), this._dragDistance);
+				} else {
+					this.owner.transform.x = Kiwi.Utils.GameMath.snapTo((this._tempPoint.x - this._box.hitboxOffset.x - this._box.worldHitbox.width / 2), this._dragDistance);
+					this.owner.transform.y = Kiwi.Utils.GameMath.snapTo((this._tempPoint.y - this._box.hitboxOffset.y - this._box.worldHitbox.height / 2), this._dragDistance);
+				}
+			}
+		}
+
+		/**
+		* The update loop that gets executed when the game is using the touch manager.
+		* @method _updateTouch
+		* @private
+		*/
+		private _updateTouch() {
+
+			for (var i = 0; i &lt; this.game.input.touch.maximumPointers; i++) {
+
+				//if that pointer is active then see where it is
+				if (this.game.input.touch.fingers[i].active === true) {
+					this._evaluateTouchPointer(this.game.input.touch.fingers[i]);
+				}
+				//if the pointer is inactive check to see if it was just down
+				else if (this.isDown === true &amp;&amp; this._isDown.id === this.game.input.touch.fingers[i].id) {
+					this._nowUp = this.game.input.touch.fingers[i];
+				}
+				//if the pointer is not active but was within the bounds check to see if it is now outside
+				else if (this.isDown === false &amp;&amp; this._nowUp === null &amp;&amp; this.withinBounds === true &amp;&amp; this._withinBounds.id === this.game.input.touch.fingers[i].id) {
+					this._nowUp = this.game.input.touch.fingers[i];
+				}
+
+			}
+
+			//Fire the events. LOTS OF CONDITIONS
+			if (this._nowEntered !== null &amp;&amp; this.withinBounds === false) { 
+				this._withinBounds = this._nowEntered;
+				this._outsideBounds = false;
+				this._onEntered.dispatch(this.owner, this._nowEntered);
+			}
+
+			if (this._nowLeft !== null &amp;&amp; this.withinBounds === true) { 
+				this._withinBounds = null;
+				this._outsideBounds = true;
+				this._onLeft.dispatch(this.owner, this._nowLeft);
+			}
+
+			if (this._nowDown !== null &amp;&amp; this.isDown === false) { 
+				this._onDown.dispatch(this.owner, this._nowDown);
+				this._isDown = this._nowDown;
+				this._isUp = false;
+				this._withinBounds = this._nowDown;
+				this._outsideBounds = false;
+			}
+
+			if (this._dragEnabled == true &amp;&amp; this.isDragging === false &amp;&amp; this._nowDragging !== null) {
+				this._onDragStarted.dispatch(this.owner, this._nowDragging);
+				this._isDragging = this._nowDragging;
+			}
+
+			if (this._nowUp !== null) { 
+				this._onUp.dispatch(this.owner, this._nowUp);
+				this._isDown = null;
+				this._isUp = true;
+				this._withinBounds = null;
+				this._outsideBounds = true;
+
+				//dispatch drag event
+				if (this.isDragging === true &amp;&amp; this._isDragging.id == this._nowUp.id) {
+					this._isDragging = null;
+					this._onDragStopped.dispatch(this.owner, this._nowUp);
+				}
+			}
+
+		}
+
+		/**
+		* A private method for checking to see if a touch pointer should activate any events.
+		* @method _evaluateTouchPointer
+		* @param pointer {Kiwi.Input.Finger} The pointer you are checking against.
+		* @private
+		*/
+		private _evaluateTouchPointer(pointer:Kiwi.Input.Finger) {
+
+			//if nothing isdown or what is down is the current pointer
+			if (this.isDown === false || this._isDown.id === pointer.id) {
+
+				this._tempPoint = this.game.cameras.defaultCamera.transformPoint( pointer.point );
+				this._tempCircle.setTo(this._tempPoint.x, this._tempPoint.y, pointer.circle.diameter);
+
+				if (Kiwi.Geom.Intersect.circleToRectangle(this._tempCircle, this._box.worldHitbox).result) {
+					if (this.isDown === true &amp;&amp; this._isDown.id === pointer.id || this.isDown === false &amp;&amp; pointer.duration &gt; 1) {
+						this._nowEntered = pointer;
+					}
+
+					if (this.isDown === false &amp;&amp; pointer.frameDuration &lt; 2) {
+						this._nowDown = pointer;
+					}
+
+					if (this._dragEnabled &amp;&amp; this.isDragging == false &amp;&amp; this.isDown == true) {
+						this._distance.x = this._tempPoint.x - this._box.worldHitbox.left;
+						this._distance.y = this._tempPoint.y - this._box.worldHitbox.top;
+						this._nowDragging = pointer; 
+					}
+				} else {
+					if (this.isDown === true) {
+						this._nowLeft = pointer;
+					} else if(this.withinBounds === true &amp;&amp; this._withinBounds.id == pointer.id) {
+						this._nowLeft = pointer;
+					}
+				}
+
+			}
+
+		}
+
+		/**
+		* The update loop that runs when the mouse manager is the method for interacting with the screen.
+		* @method _updateMouse
+		* @private
+		*/
+		private _updateMouse() {
+
+			this._evaluateMousePointer(this.game.input.mouse.cursor);
+
+			//dispatch the events
+			if (this._nowLeft !== null) {
+				this._onLeft.dispatch(this.owner, this._nowLeft);
+			}
+
+			if (this._nowEntered !== null) {
+				this._onEntered.dispatch(this.owner, this._nowEntered);
+			}
+			
+			if (this._nowDown !== null &amp;&amp; this.isDown === false) {
+				this._onDown.dispatch(this.owner, this._nowDown);
+				this._isDown = this._nowDown;
+				this._isUp = false;
+			}
+
+			if (this._dragEnabled == true &amp;&amp; this.isDragging === false &amp;&amp; this._nowDragging !== null) {
+				this._onDragStarted.dispatch(this.owner, this._nowDragging);
+				this._isDragging = this._nowDragging;
+			}
+
+			if (this.isDown === true &amp;&amp; this._nowUp !== null &amp;&amp; this._isDown.id === this._nowUp.id) {
+				this._onUp.dispatch(this.owner, this._nowUp);
+				
+				// Dispatch drag event
+				if (this.isDragging === true &amp;&amp; this._isDragging.id == this._nowUp.id) {
+					this._isDragging = null;
+					this._onDragStopped.dispatch(this.owner, this._nowUp);
+				}
+
+				this._isDown = null;
+				this._isUp = true;
+			}
+
+		}
+
+		/**
+		* Evaluates where and what the mouse cursor is doing in relation to this box. Needs a little bit more love.
+		* @method _evaluateMousePointer
+		* @param pointer {Kiwi.Input.MouseCursor}
+		* @private
+		*/
+		private _evaluateMousePointer(pointer:Kiwi.Input.MouseCursor) {
+
+			this._tempPoint = this.game.cameras.defaultCamera.transformPoint(pointer.point);
+
+			if (Kiwi.Geom.Intersect.pointToRectangle(this._tempPoint, this._box.worldHitbox).result) {
+				
+				if (this._dragEnabled &amp;&amp; this.isDragging === false) {
+					this._distance.x = this._tempPoint.x - this._box.worldHitbox.left;
+					this._distance.y = this._tempPoint.y - this._box.worldHitbox.top;
+				}
+
+				//  Has it just moved inside?
+				if (this.withinBounds === false) {
+					this._nowEntered = pointer;
+					this._withinBounds = pointer;
+					this._outsideBounds = false;
+					this._justEntered = true;
+				}
+
+			} else {
+				
+				//  It&#x27;s outside the bounds now, was it previously in?
+				if (this.withinBounds === true &amp;&amp; this.isDragging === false) {
+					this._nowLeft = pointer;
+					this._withinBounds = null;
+					this._outsideBounds = true;
+				}
+
+			}
+
+			//  Input is down (click/touch)
+			if (pointer.isDown === true) {
+
+				//if is was a mouse, did it just enter?
+				if (this._justEntered) {
+					this._isDown = pointer;
+					this._isUp = false;
+					this._tempDragDisabled = true;
+				}
+
+				//  Within bounds? 
+				if (this.withinBounds === true &amp;&amp; this.isDown === false &amp;&amp; this._nowDown === null) {
+					this._nowDown = pointer;
+				} 
+
+				if (this._dragEnabled === true &amp;&amp; this.isDragging == false &amp;&amp; this._tempDragDisabled === false) {
+
+					if(this.isDown == true) {
+						this._nowDragging = pointer;
+
+					}
+				}
+
+			} else { 
+				
+				if (this._tempDragDisabled === true) this._tempDragDisabled = false;
+
+				if (this.isDown === true) {
+					this._nowUp = pointer;
+				}
+			}
+
+			if (this._justEntered) this._justEntered = false;
+		}
+
+		/**
+		* Destroys the input.
+		* @method destory
+		* @public
+		*/
+		public destroy() {
+
+			super.destroy();
+
+			this.enabled = false;
+			delete this._box;
+			delete this._isDown;
+			delete this._isUp;
+			delete this._isDragging;
+			delete this._dragEnabled;
+			if(this._onDown) this._onDown.dispose();
+			delete this._onDown;
+			if(this._onDragStarted) this._onDragStarted.dispose();
+			delete this._onDragStarted;
+			if (this._onUp) this._onUp.dispose();
+			delete this._onUp;
+			if (this._onLeft) this._onLeft.dispose();
+			delete this._onLeft;
+			if (this._onEntered) this._onEntered.dispose();
+			delete this._onEntered;
+			if (this._onDragStopped) this._onDragStopped.dispose();
+			delete this._onDragStopped;
+			delete this._dragDistance;
+
+		}
+
+	}
 
 }
 
-
-
     </pre>
 </div>
 
diff --git a/docs/files/src_components_Sound.ts.html b/docs/files/src_components_Sound.ts.html
index 10c01d3..e6e15ec 100644
--- a/docs/files/src_components_Sound.ts.html
+++ b/docs/files/src_components_Sound.ts.html
@@ -369,192 +369,193 @@ <h1 class="file-heading">File: src/components/Sound.ts</h1>
 * @module Kiwi
 * @submodule Components 
 * 
-*/ 
+*/
 
 module Kiwi.Components {
-    
-    /**
-    * The Sound Component is a class to assist with the creation and management of multiple pieces of audio that may exist on a single Entity. 
-    * This class is NOT needed when dealing with audio but is instead can be used to assist in dealing with audio.
-    * 
-    * @class Sound
-    * @extends Kiwi.Component
-    * @namespace Kiwi.Components
-    * @constructor
-    * @param parent {Any} Who the owner of the sound component is.
-    * @return {Kiwi.Components.Sound}
-    */
-    export class Sound extends Component {
- 
-        constructor(parent) {
-
-            super(parent, &#x27;Sound&#x27;);
-
-            this._audio = [];
-        }
-
-        /**
-        * Returns the type of object that this is.
-        * @method objType 
-        * @return {String} &quot;Sound&quot;
-        * @public
-        */
-        public objType():string {
-            return &#x27;Sound&#x27;;
-        }
-
-        /**
-        * Contains a list of all of the Audio objects that are on this component.
-        * @private
-        * @type Array 
-        * @private
-        */
-        private _audio: Kiwi.Sound.Audio[];
-
-        /**
-        * Creates a new audio segment on this component.
-        *
-        * @method addSound
-        * @param name {string} The name for this audio file. This is how you will access the audio from this component and so it should be unique.
-        * @param key {string} The piece of audio that you want to use. 
-        * @param [volume=1] {number} The volume that the audio should be set to.
-        * @param [loop=false] {boolean} If the audio should keep play again when it finishes playing.
-        * @return {Kiwi.Sound.Audio}
-        * @public 
-        */
-        public addSound(name: string, key: string, volume: number=1, loop: boolean=false): Kiwi.Sound.Audio {
-
-            if (this._validate(name) == true) return;
-
-            var audio = this.game.audio.add(key, volume, loop);
-            this._audio[name] = audio;
-
-            return audio;
-        }
-
-        /**
-        * Removes the audio sementment with the name you have given.
-        *
-        * @method removeSound
-        * @param name {string} The piece of audio you would like to remove.
-        * @public
-        */
-        public removeSound(name: string) {
-
-            if (this._validate(name) == false) return;
-
-            this._audio[name].stop();
-            this._audio[name].destroy();
-            delete this._audio[name];
-
-        }
-
-        /**
-        * Returns the Audio object for the sound that you pass. 
-        *
-        * @method getSound
-        * @param name {string} The piece of audio you would like to grab.
-        * @return {Kiwi.Sound.Audio}
-        * @public
-        */
-        public getSound(name: string): Kiwi.Sound.Audio {
-            if (this._validate(name) == false) return;
-
-            return this._audio[name];
-        }
-
-        /**
-        * This method is used to check to see if an audio segment with the name that is specified is on this component.
-        * 
-        * @method _validate
-        * @param name {string} The name of the audio segment you want to check exists.
-        * @return {boolean}
-        * @private
-        */
-        
-        private _validate(name:string) {
-            if (this._audio[name] === undefined) {
-                return false;
-            } else {
-                return true;
-            }
-        }
-
-        /**
-        * Plays the audio that you specify.
-        * 
-        * @method play
-        * @param name {string} The name of the audio file you would like to play.
-        * @public
-        */
-        public play(name:string) {
-
-            if (this._validate(name) == false) return;
-            
-            this._audio[name].play();
-
-        }
-
-        /**
-        * Stops the audio that you specify from playing.
-        * 
-        * @method play
-        * @param name {string} Name of the audio file you would like to stop.
-        * @public
-        */
-        public stop(name:string) {
-            
-            if (this._validate(name) == false) return;
-
-            this._audio[name].stop();
-
-        }
-        
-        /**
-        * Pauses the audio that you specify. 
-        * 
-        * @method play
-        * @param name {string} The name of the audio you would like to pause.
-        * @public
-        */
-        public pause(name: string) {
-            if (this._validate(name) == false) return;
-
-            this._audio[name].pause();
-        }
-
-        /**
-        * Resumes the audio that you specify. Note: Audio can only resume if it was paused initially.
-        * 
-        * @method play
-        * @param name {string} The name of the audio you would like to resume.
-        * @public
-        */
-        public resume(name: string) {
-            
-            if (this._validate(name) == false) return;
-
-            this._audio[name].resume();
-        }
-
-        /**
-        * Destroys this AudioComponent and all of the Audio objects it has.
-        * @method destroy
-        * @public
-        */
-        public destroy() {
-            super.destroy();
-            for (var key in this._audio) {
-                this._audio[key].stop();
-                this._audio[key].destroy();
-                delete this._audio[key];
-            }
-            delete this._audio;
-        }
-
-    }
+
+	/**
+	* The Sound Component is a class to assist with the creation and management of multiple pieces of audio that may exist on a single Entity. 
+	* This class is NOT needed when dealing with audio but is instead can be used to assist in dealing with audio.
+	* 
+	* @class Sound
+	* @extends Kiwi.Component
+	* @namespace Kiwi.Components
+	* @constructor
+	* @param parent {Any} Who the owner of the sound component is.
+	* @return {Kiwi.Components.Sound}
+	*/
+	export class Sound extends Component {
+
+		constructor(parent) {
+
+			super(parent, &#x27;Sound&#x27;);
+
+			this._audio = [];
+		}
+
+		/**
+		* Returns the type of object that this is.
+		* @method objType 
+		* @return {String} &quot;Sound&quot;
+		* @public
+		*/
+		public objType():string {
+			return &#x27;Sound&#x27;;
+		}
+
+		/**
+		* Contains a list of all of the Audio objects that are on this component.
+		* @private
+		* @type Array 
+		* @private
+		*/
+		private _audio: Kiwi.Sound.Audio[];
+
+		/**
+		* Creates a new audio segment on this component.
+		*
+		* @method addSound
+		* @param name {string} The name for this audio file. This is how you will access the audio from this component and so it should be unique.
+		* @param key {string} The piece of audio that you want to use. 
+		* @param [volume=1] {number} The volume that the audio should be set to.
+		* @param [loop=false] {boolean} If the audio should keep play again when it finishes playing.
+		* @return {Kiwi.Sound.Audio}
+		* @public 
+		*/
+		public addSound(name: string, key: string, volume: number=1, loop: boolean=false): Kiwi.Sound.Audio {
+
+			if (this._validate(name) == true) return;
+
+			var audio = this.game.audio.add(key, volume, loop);
+			this._audio[name] = audio;
+
+			return audio;
+		}
+
+		/**
+		* Removes the audio sementment with the name you have given.
+		*
+		* @method removeSound
+		* @param name {string} The piece of audio you would like to remove.
+		* @public
+		*/
+		public removeSound(name: string) {
+
+			if (this._validate(name) == false) return;
+
+			this._audio[name].stop();
+			this._audio[name].destroy();
+			delete this._audio[name];
+
+		}
+
+		/**
+		* Returns the Audio object for the sound that you pass. 
+		*
+		* @method getSound
+		* @param name {string} The piece of audio you would like to grab.
+		* @return {Kiwi.Sound.Audio}
+		* @public
+		*/
+		public getSound(name: string): Kiwi.Sound.Audio {
+			if (this._validate(name) == false) return;
+
+			return this._audio[name];
+		}
+
+		/**
+		* This method is used to check to see if an audio segment with the name that is specified is on this component.
+		* 
+		* @method _validate
+		* @param name {string} The name of the audio segment you want to check exists.
+		* @return {boolean}
+		* @private
+		*/
+		
+		private _validate(name:string) {
+			if (this._audio[name] === undefined) {
+				return false;
+			} else {
+				return true;
+			}
+		}
+
+		/**
+		* Plays the audio that you specify.
+		* 
+		* @method play
+		* @param name {string} The name of the audio file you would like to play.
+		* @public
+		*/
+		public play(name:string) {
+
+			if (this._validate(name) == false) return;
+			
+			this._audio[name].play();
+
+		}
+
+		/**
+		* Stops the audio that you specify from playing.
+		* 
+		* @method play
+		* @param name {string} Name of the audio file you would like to stop.
+		* @public
+		*/
+		public stop(name:string) {
+			
+			if (this._validate(name) == false) return;
+
+			this._audio[name].stop();
+
+		}
+		
+		/**
+		* Pauses the audio that you specify. 
+		* 
+		* @method play
+		* @param name {string} The name of the audio you would like to pause.
+		* @public
+		*/
+		public pause(name: string) {
+			if (this._validate(name) == false) return;
+
+			this._audio[name].pause();
+		}
+
+		/**
+		* Resumes the audio that you specify. Note: Audio can only resume if it was paused initially.
+		* 
+		* @method play
+		* @param name {string} The name of the audio you would like to resume.
+		* @public
+		*/
+		public resume(name: string) {
+			
+			if (this._validate(name) == false) return;
+
+			this._audio[name].resume();
+		}
+
+		/**
+		* Destroys this AudioComponent and all of the Audio objects it has.
+		* @method destroy
+		* @public
+		*/
+		public destroy() {
+			super.destroy();
+			for (var key in this._audio) {
+				this._audio[key].stop();
+				this._audio[key].destroy();
+				delete this._audio[key];
+			}
+			delete this._audio;
+		}
+
+	}
 
 }
+
     </pre>
 </div>
 
diff --git a/docs/files/src_core_Camera.ts.html b/docs/files/src_core_Camera.ts.html
index 618ea23..4524a6f 100644
--- a/docs/files/src_core_Camera.ts.html
+++ b/docs/files/src_core_Camera.ts.html
@@ -372,229 +372,228 @@ <h1 class="file-heading">File: src/core/Camera.ts</h1>
 
 module Kiwi {
 
-    /**
-    * A Camera is used to render a particular section of the game world on the stage. Each Camera has a coordinates which are held in the transform property, and a width/height. Note: This class should never be directly instantiated but instead should be made through a CameraManager&#x27;s &#x27;create&#x27; method.
-    *
-    * @class Camera
-    * @namespace Kiwi
-    * @constructor
-    * @param game {Kiwi.Game} The game that this camera belongs to.
-    * @param id {Number} A unique ID for this camera 
-    * @param name {String} The name this camera goes by
-    * @param x {Number} The x coordinate of the camera
-    * @param y {Number} The y coordinate of the camera
-    * @param width {Number} The width of the camera
-    * @param height {Number} The cameras height
-    * @return {Kiwi.Camera}
-    * 
-    */
-    export class Camera {
-         
-        constructor(game: Kiwi.Game, id: number, name: string,x:number,y:number,width:number,height:number) {
-
-            this._game = game;
-            this.id = id;
-            this.name = name;
-            
-            //size could autoresize to fit stage
-            this.width = width;
-            this.height = height;
-            this.transform = new Kiwi.Geom.Transform(x, y);
-            this.transform.rotPointX = x + width / 2;
-            this.transform.rotPointY = y + height / 2;
-
-            this._game.stage.onResize.add(this._updatedStageSize, this);
-        }
-
-        /**
-        * The width of this camara.
-        * @property width
-        * @type Number
-        * @public
-        */
-        public width: number;
-        
-        /**
-        * The height of this camera.
-        * @property height
-        * @type Number
-        * @public
-        */
-        public height: number;
-
-        /**
-        * The type of object this is.
-        * @method objType
-        * @return {String} &quot;Camera&quot;
-        * @public
-        */
-        public objType() {
-            return &quot;Camera&quot;;
-        }
-
-        /**
-        * If true then the camera will be resized to fit the stage when the stage is resized
-        * @property fitToStage
-        * @type boolean
-        * @default true
-        * @public
-        */
-        public fitToStage: boolean = true;
-
-        /** 
-	    * The Transform controls the location of the camera within the game world. Also controls the cameras scale and rotation.
-	    * @property transform
-	    * @type Kiwi.Geom.Transform
-        * @public
-	    */
-        public transform: Kiwi.Geom.Transform;
-
-        /**
+	/**
+	* A Camera is used to render a particular section of the game world on the stage. Each Camera has a coordinates which are held in the transform property, and a width/height. Note: This class should never be directly instantiated but instead should be made through a CameraManager&#x27;s &#x27;create&#x27; method.
+	*
+	* @class Camera
+	* @namespace Kiwi
+	* @constructor
+	* @param game {Kiwi.Game} The game that this camera belongs to.
+	* @param id {Number} A unique ID for this camera 
+	* @param name {String} The name this camera goes by
+	* @param x {Number} The x coordinate of the camera
+	* @param y {Number} The y coordinate of the camera
+	* @param width {Number} The width of the camera
+	* @param height {Number} The cameras height
+	* @return {Kiwi.Camera}
+	* 
+	*/
+	export class Camera {
+
+		constructor(game: Kiwi.Game, id: number, name: string,x:number,y:number,width:number,height:number) {
+
+			this._game = game;
+			this.id = id;
+			this.name = name;
+			
+			//size could autoresize to fit stage
+			this.width = width;
+			this.height = height;
+			this.transform = new Kiwi.Geom.Transform(x, y);
+			this.transform.rotPointX = x + width / 2;
+			this.transform.rotPointY = y + height / 2;
+
+			this._game.stage.onResize.add(this._updatedStageSize, this);
+		}
+
+		/**
+		* The width of this camara.
+		* @property width
+		* @type Number
+		* @public
+		*/
+		public width: number;
+
+		/**
+		* The height of this camera.
+		* @property height
+		* @type Number
+		* @public
+		*/
+		public height: number;
+
+		/**
+		* The type of object this is.
+		* @method objType
+		* @return {String} &quot;Camera&quot;
+		* @public
+		*/
+		public objType() {
+			return &quot;Camera&quot;;
+		}
+
+		/**
+		* If true then the camera will be resized to fit the stage when the stage is resized
+		* @property fitToStage
+		* @type boolean
+		* @default true
+		* @public
+		*/
+		public fitToStage: boolean = true;
+
+		/** 
+		* The Transform controls the location of the camera within the game world. Also controls the cameras scale and rotation.
+		* @property transform
+		* @type Kiwi.Geom.Transform
+		* @public
+		*/
+		public transform: Kiwi.Geom.Transform;
+
+		/**
 		* Updates the width/height of this camera. Is used when the stage resizes.
-        * @method _updatedStageSize
-        * @param width {Number} The new width of the camera.
-        * @param height {Number} The new height of the camera.
-        * @private
+		* @method _updatedStageSize
+		* @param width {Number} The new width of the camera.
+		* @param height {Number} The new height of the camera.
+		* @private
+		*/
+		private _updatedStageSize(width: number, height: number) {
+
+			this.width = width;
+			this.height = height;
+
+		}
+
+		/**
+		* The game this Group belongs to
+		* @property game
+		* @type Kiwi.Game
+		* @private
+		*/
+		private _game: Kiwi.Game;
+
+		/**
+		* A unique identifier for this Layer within the game used internally by the framework. See the name property for a friendly version.
+		* @property id
+		* @type number
+		* @public
+		*/
+		public id: number;
+
+		/**
+		* A name for this Camera. This is not checked for uniqueness within the Game, but is very useful for debugging.
+		* @property name
+		* @type string
+		* @public
 		*/
-        private _updatedStageSize(width: number, height: number) {
- 
-            this.width = width;
-            this.height = height;
-          
-        }
-
-        /**
-        * The game this Group belongs to
-        * @property game
-        * @type Kiwi.Game
-        * @private
-	    */
-        private _game: Kiwi.Game;
-
-        /**
-        * A unique identifier for this Layer within the game used internally by the framework. See the name property for a friendly version.
-        * @property id
-        * @type number
-    	* @public
-        */
-        public id: number;
-
-        /**
-        * A name for this Camera. This is not checked for uniqueness within the Game, but is very useful for debugging.
-        * @property name
-        * @type string
-    	* @public
-        */
-        public name: string;
-
-        /**
+		public name: string;
+
+		/**
 		* Controls whether this Camera is rendered
-        * @property _visible
-        * @type boolean
-        * @private
+		* @property _visible
+		* @type boolean
+		* @private
+		*/
+		private _visible: boolean;
+
+		/**
+		* Controls whether this Camera is rendered.
+		* @property visible
+		* @type boolean
+		* @public
 		*/
-        private _visible: boolean;
-
-        /**
-        * Controls whether this Camera is rendered.
-        * @property visible
-        * @type boolean
-        * @public
-        */
-        public get visible(): boolean {
-            return this._visible;
-        }
-        public set visible(val: boolean) {
-            this._visible = val;
-        }
-
-        /**
+		public get visible(): boolean {
+			return this._visible;
+		}
+		public set visible(val: boolean) {
+			this._visible = val;
+		}
+
+		/**
 		* A flag that indicates whether this camera needs to be rendered again at the next update loop, or if nothing has changed so it doesn&#x27;t.
-        * @property _dirty
-        * @type boolean
-        * @private
-        * @deprecated As of 1.1.0, no use has been found for this property.
+		* @property _dirty
+		* @type boolean
+		* @private
+		* @deprecated As of 1.1.0, no use has been found for this property.
+		*/
+		private _dirty: boolean;
+
+		/**
+		* A value used by components to control if the camera needs re-rendering.
+		* @property dirty
+		* @type boolean
+		* @public
+		* @deprecated As of 1.1.0, no use has been found for this property.
+		*/
+		public get dirty(): boolean {
+			return this._dirty;
+		}
+		public set dirty(val: boolean) {
+			this._dirty = val;
+		}
+
+		/**
+		* Convert from screen coordinates to world coordinates.
+		* Apply this camera&#x27;s inverted matrix to an object with x and y
+		* properties representing a point and return the transformed point.
+		* Useful for calculating coordinates with the mouse.
+		* @method transformPoint
+		* @param point {Kiwi.Geom.Point} 
+		* @return {Kiwi.Geom.Point} Transformed clone of the original Point.
+		* @public
 		*/
-        private _dirty: boolean;
-
-        /**
-        * A value used by components to control if the camera needs re-rendering.
-        * @property dirty
-        * @type boolean
-        * @public
-        * @deprecated As of 1.1.0, no use has been found for this property.
-        */
-        public get dirty(): boolean {
-            return this._dirty;
-        }
-        public set dirty(val: boolean) {
-            this._dirty = val;
-        }
-
-        /**
-        * Convert from screen coordinates to world coordinates.
-	    * Apply this camera&#x27;s inverted matrix to an object with x and y
-        * properties representing a point and return the transformed point.
-        * Useful for calculating coordinates with the mouse.
-        * @method transformPoint
-        * @param point {Kiwi.Geom.Point} 
-        * @return {Kiwi.Geom.Point} Transformed clone of the original Point.
-        * @public
-        */
-        public transformPoint(point: Kiwi.Geom.Point): Kiwi.Geom.Point {
-
-            var np = point.clone();
-
-            var m = this.transform.getConcatenatedMatrix();
-            m.append( 1,0,0,1, -this.transform.rotPointX, -this.transform.rotPointY );
-            m.invert();
-
-            return m.transformPoint(np);
-        }
-
-        /**
-        * Convert from world coordinates to screen coordinates.
-        * Useful for assessing visibility.
-        * Similar to &quot;transformPoint&quot;, but in reverse.
-        * @method transformPointToScreen
-        * @param point {Kiwi.Geom.Point}
-        * @return {Kiwi.Geom.Point} Transformed clone of the original Point.
-        * @public
-        * @since 1.2.0
-        */
-        public transformPointToScreen( point: Kiwi.Geom.Point ): Kiwi.Geom.Point {
-            var np = point.clone();
-
-            var m = this.transform.getConcatenatedMatrix();
-            m.append( 1,0,0,1, -this.transform.rotPointX, -this.transform.rotPointY );
-
-            return m.transformPoint(np);
-        }
-
-        /**
-        * The update loop that is executed every frame.
-        * @method update
-        * @public
-        */
-        public update() {
-            
-        }
-
-        /**
-        * The render loop that is executed whilst the game is playing.
-        * @method render
-        * @public
-        */
-        public render() {
-            
-            this._game.renderer.render(this);
-
-        }
-
-    }
+		public transformPoint(point: Kiwi.Geom.Point): Kiwi.Geom.Point {
+
+			var np = point.clone();
+
+			var m = this.transform.getConcatenatedMatrix();
+			m.append( 1,0,0,1, -this.transform.rotPointX, -this.transform.rotPointY );
+			m.invert();
+
+			return m.transformPoint(np);
+		}
+
+		/**
+		* Convert from world coordinates to screen coordinates.
+		* Useful for assessing visibility.
+		* Similar to &quot;transformPoint&quot;, but in reverse.
+		* @method transformPointToScreen
+		* @param point {Kiwi.Geom.Point}
+		* @return {Kiwi.Geom.Point} Transformed clone of the original Point.
+		* @public
+		* @since 1.2.0
+		*/
+		public transformPointToScreen( point: Kiwi.Geom.Point ): Kiwi.Geom.Point {
+			var np = point.clone();
 
-}
+			var m = this.transform.getConcatenatedMatrix();
+			m.append( 1,0,0,1, -this.transform.rotPointX, -this.transform.rotPointY );
 
+			return m.transformPoint(np);
+		}
+
+		/**
+		* The update loop that is executed every frame.
+		* @method update
+		* @public
+		*/
+		public update() {
+
+		}
+
+		/**
+		* The render loop that is executed whilst the game is playing.
+		* @method render
+		* @public
+		*/
+		public render() {
+
+			this._game.renderer.render(this);
+
+		}
+
+	}
+
+}
 
     </pre>
 </div>
diff --git a/docs/files/src_core_CameraManager.ts.html b/docs/files/src_core_CameraManager.ts.html
index 5ce93c2..711e440 100644
--- a/docs/files/src_core_CameraManager.ts.html
+++ b/docs/files/src_core_CameraManager.ts.html
@@ -372,199 +372,196 @@ <h1 class="file-heading">File: src/core/CameraManager.ts</h1>
 
 module Kiwi {
 
-    /**
-    * Used to handle the creation and management of Cameras on a Game. Each Game will always have created for it a CameraManager and a default Camera on the manager. 
-    * Games currently only usupport the use of a single camera, the default camera. Much of this class has been written with future multiple camera support in mind. 
-    * 
-    * @class CameraManager
-    * @namespace Kiwi
-    * @constructor
-    * @param {Kiwi.Game} game
-    * @return {Kiwi.CameraManager} 
-    */
-    export class CameraManager {
-         
-        constructor(game: Kiwi.Game) {
-             
-            this._game = game;
-            this._cameras = [];
-            this._nextCameraID = 0;
-
-        }
-
-        /**
-        * Returns the type of this object
-        * @method objType
-        * @return {String} &quot;CameraManager&quot;
-        * @public
-        */
-        public objType():string {
-            return &quot;CameraManager&quot;;
-        }
-
-        /**
+	/**
+	* Used to handle the creation and management of Cameras on a Game. Each Game will always have created for it a CameraManager and a default Camera on the manager. 
+	* Games currently only usupport the use of a single camera, the default camera. Much of this class has been written with future multiple camera support in mind. 
+	* 
+	* @class CameraManager
+	* @namespace Kiwi
+	* @constructor
+	* @param {Kiwi.Game} game
+	* @return {Kiwi.CameraManager} 
+	*/
+	export class CameraManager {
+
+		constructor(game: Kiwi.Game) {
+
+			this._game = game;
+			this._cameras = [];
+			this._nextCameraID = 0;
+
+		}
+
+		/**
+		* Returns the type of this object
+		* @method objType
+		* @return {String} &quot;CameraManager&quot;
+		* @public
+		*/
+		public objType():string {
+			return &quot;CameraManager&quot;;
+		}
+
+		/**
 		* The game this object belongs to
-        * @property _game
-        * @type Kiwi.Game
-        * @private
-    	*/
-        private _game: Kiwi.Game;
-         
-        /**
+		* @property _game
+		* @type Kiwi.Game
+		* @private
+		*/
+		private _game: Kiwi.Game;
+
+		/**
 		* A collection of cameras
-        * @property _cameras
-        * @type Array
-        * @private
-    	*/
-        private _cameras: Kiwi.Camera[];
+		* @property _cameras
+		* @type Array
+		* @private
+		*/
+		private _cameras: Kiwi.Camera[];
 
-        /**
+		/**
 		* The id which will be used when next creating a camera
-        * @property _nextCameraID
-        * @type Number
-        * @private
-    	*/
-        private _nextCameraID: number;
+		* @property _nextCameraID
+		* @type Number
+		* @private
+		*/
+		private _nextCameraID: number;
 
-        /**
+		/**
 		* The default camera that is on this manager.
-        * @property defaultCamera
-        * @type Kiwi.Camara
-        * @public
-    	*/
-        public defaultCamera: Kiwi.Camera;
+		* @property defaultCamera
+		* @type Kiwi.Camara
+		* @public
+		*/
+		public defaultCamera: Kiwi.Camera;
 
-        /**
+		/**
 		* Initializes the CameraManager, creates a new camera and assigns it to the defaultCamera
-        * @method boot
-        * @public
-    	*/
-        public boot() {
+		* @method boot
+		* @public
+		*/
+		public boot() {
 
-            this.create(&quot;defaultCamera&quot;, 0, 0, this._game.stage.width, this._game.stage.height);
-            this.defaultCamera = this._cameras[0];
-        
-        }
+			this.create(&quot;defaultCamera&quot;, 0, 0, this._game.stage.width, this._game.stage.height);
+			this.defaultCamera = this._cameras[0];
+		}
 
-        /**
-        * Creates a new Camera and adds it to the collection of cameras.
-        * @param {String} name. The name of the new camera.
-        * @param {Number} x. The x position of the new camera.
-        * @param {Number} y. The y position of the new camera.
-        * @param {Number} width. The width of the new camera.
-        * @param {Number} height. The height of the new camera.
-        * @return {Kiwi.Camera} The new camera object.
-        * @public
-        */
-        public create(name: string, x: number, y: number, width: number, height: number): Kiwi.Camera {
-            
-            var newCamera: Kiwi.Camera = new Kiwi.Camera(this._game, this._nextCameraID++,name,x,y,width,height);
-            
-            //newCamera.parent = state;
+		/**
+		* Creates a new Camera and adds it to the collection of cameras.
+		* @param {String} name. The name of the new camera.
+		* @param {Number} x. The x position of the new camera.
+		* @param {Number} y. The y position of the new camera.
+		* @param {Number} width. The width of the new camera.
+		* @param {Number} height. The height of the new camera.
+		* @return {Kiwi.Camera} The new camera object.
+		* @public
+		*/
+		public create(name: string, x: number, y: number, width: number, height: number): Kiwi.Camera {
+			var newCamera: Kiwi.Camera = new Kiwi.Camera(this._game, this._nextCameraID++,name,x,y,width,height);
+
+			//newCamera.parent = state;
 
-            this._cameras.push(newCamera);
+			this._cameras.push(newCamera);
 
-            return newCamera;
+			return newCamera;
 
-        }
+		}
 
-        /**
+		/**
 		* Removes the given camera, if it is present in the camera managers camera collection.
-        * @method remove
-        * @param camera {Kiwi.Camera}
-        * @return {boolean} True if the camera was removed, false otherwise.
-        * @public
-    	*/
-        public remove(camera: Kiwi.Camera):boolean {
-             
-            var i = this._cameras.indexOf(camera); //what if it was the default one! :(
-
-            if (i !== -1) {
-                //  Send Layer a killed call
-                this._cameras.splice(i, 1);
-                return true;
-            }
-
-            return false;
-        }
-
-        /**
+		* @method remove
+		* @param camera {Kiwi.Camera}
+		* @return {boolean} True if the camera was removed, false otherwise.
+		* @public
+		*/
+		public remove(camera: Kiwi.Camera):boolean {
+			var i = this._cameras.indexOf(camera); //what if it was the default one! :(
+
+			if (i !== -1) {
+				//  Send Layer a killed call
+				this._cameras.splice(i, 1);
+				return true;
+			}
+
+			return false;
+		}
+
+		/**
 		* Calls update on all the cameras.
-        * @method update
-        * @public
-    	*/
-        public update() {
-
-            if (this._cameras.length === 0) {
-                return false;
-            }
-
-            for (var i = 0; i &lt; this._cameras.length; i++) {
-                this._cameras[i].update();
-            }
-        
-        }
-
-        /**
+		* @method update
+		* @public
+		*/
+		public update() {
+
+			if (this._cameras.length === 0) {
+				return false;
+			}
+
+			for (var i = 0; i &lt; this._cameras.length; i++) {
+				this._cameras[i].update();
+			}
+
+		}
+
+		/**
 		* Calls the render method on all the cameras
-        * @method render
-        * @public
-    	*/
-        public render() {
+		* @method render
+		* @public
+		*/
+		public render() {
 
-            if (this._cameras.length === 0) {
-                return false;
-            }
+			if (this._cameras.length === 0) {
+				return false;
+			}
 
-            //render each camera
-            for (var i = 0; i &lt; this._cameras.length; i++) {
-                this._cameras[i].render();
-            }
+			//render each camera
+			for (var i = 0; i &lt; this._cameras.length; i++) {
+				this._cameras[i].render();
+			}
 
-        }
+		}
 
-        /**
+		/**
 		* Removes all cameras in the camera Manager except the default camera. Does nothing if in multi camera mode.
-        * @method removeAll
-        * @public
-    	*/
-        public removeAll() {
-            this._cameras = []; 
-        }
-
-        /**
-        * Returns all cameras to origin. Called when starting a new state.
-        * @method zeroAllCameras
-        * @public
-        * @since 1.1.0
-        */
-        public zeroAllCameras() {
-            for( var i = 0;  i &lt; this._cameras.length;  i++ )
-            {
-                this.zeroCamera( this._cameras[i] );
-            }
-            this.zeroCamera( this.defaultCamera );
-        }
-
-        /**
-        * Returns camera to origin.
-        * @method zeroCamera
-        * @param camera {Kiwi.Camera}
-        * @public
-        * @since 1.1.0
-        */
-        public zeroCamera(camera:Kiwi.Camera)
-        {
-            camera.transform.x = 0;
-            camera.transform.y = 0;
-            camera.transform.rotation = 0;
-            camera.transform.scaleX = 1;
-            camera.transform.scaleY = 1;
-            camera.transform.rotPointX = camera.width / 2;
-            camera.transform.rotPointY = camera.height / 2;
-        }
-
-    }
+		* @method removeAll
+		* @public
+		*/
+		public removeAll() {
+			this._cameras = []; 
+		}
+
+		/**
+		* Returns all cameras to origin. Called when starting a new state.
+		* @method zeroAllCameras
+		* @public
+		* @since 1.1.0
+		*/
+		public zeroAllCameras() {
+			for( var i = 0;  i &lt; this._cameras.length;  i++ )
+			{
+				this.zeroCamera( this._cameras[i] );
+			}
+			this.zeroCamera( this.defaultCamera );
+		}
+
+		/**
+		* Returns camera to origin.
+		* @method zeroCamera
+		* @param camera {Kiwi.Camera}
+		* @public
+		* @since 1.1.0
+		*/
+		public zeroCamera(camera:Kiwi.Camera)
+		{
+			camera.transform.x = 0;
+			camera.transform.y = 0;
+			camera.transform.rotation = 0;
+			camera.transform.scaleX = 1;
+			camera.transform.scaleY = 1;
+			camera.transform.rotPointX = camera.width / 2;
+			camera.transform.rotPointY = camera.height / 2;
+		}
+
+	}
 }
 
     </pre>
diff --git a/docs/files/src_core_Component.ts.html b/docs/files/src_core_Component.ts.html
index f475bdc..1c12e3f 100644
--- a/docs/files/src_core_Component.ts.html
+++ b/docs/files/src_core_Component.ts.html
@@ -372,119 +372,117 @@ <h1 class="file-heading">File: src/core/Component.ts</h1>
 
 module Kiwi {
 
-    /**
-    * The base class that all components extend from. It contains all of the common functionality that is required of every Component.
-    * Any object  
-    *
-    * @class Component
-    * @namespace Kiwi
-    * @constructor
-    * @param owner {Object} The object that this component belongs to. 
-    * @param componentName {String} The name of this component.
-    * @return {Kiwi.Component}
-    */ 
-    export class Component {
-         
-        constructor (owner:Kiwi.IChild, name:string) {
-
-            this.owner = owner; 
-            this.game = this.owner.game;
-            this.name = name;
-            this.active = true;
-
-        }
-
-        /**
-        * Returns the type of this object
-        * @method objType
-        * @return {String} &quot;Component&quot;
-        * @public
-        */
-        public objType():string {
-            return &quot;Component&quot;;
-        }
-        
-        /**
-        * The object that owns this entity
-        * @property owner
-        * @type Object
-        * @public
-        */
-        public owner: Kiwi.IChild;
-
-        /**
-        * The game this Component belongs to
-        * @property game
-        * @type Game
-        * @public
-	    */
-        public game: Kiwi.Game;
-
-        /**
-        * The name of this component.
-        * @property name
-        * @type string
-        * @public 
-        */
-        public name: string;
-         
-        /**
+	/**
+	* The base class that all components extend from. It contains all of the common functionality that is required of every Component.
+	* Any object  
+	*
+	* @class Component
+	* @namespace Kiwi
+	* @constructor
+	* @param owner {Object} The object that this component belongs to. 
+	* @param componentName {String} The name of this component.
+	* @return {Kiwi.Component}
+	*/
+	export class Component {
+
+		constructor (owner:Kiwi.IChild, name:string) {
+
+			this.owner = owner; 
+			this.game = this.owner.game;
+			this.name = name;
+			this.active = true;
+
+		}
+
+		/**
+		* Returns the type of this object
+		* @method objType
+		* @return {String} &quot;Component&quot;
+		* @public
+		*/
+		public objType():string {
+			return &quot;Component&quot;;
+		}
+
+		/**
+		* The object that owns this entity
+		* @property owner
+		* @type Object
+		* @public
+		*/
+		public owner: Kiwi.IChild;
+
+		/**
+		* The game this Component belongs to
+		* @property game
+		* @type Game
+		* @public
+		*/
+		public game: Kiwi.Game;
+
+		/**
+		* The name of this component.
+		* @property name
+		* @type string
+		* @public 
+		*/
+		public name: string;
+
+		/**
 		* An active Component is one that has its update method called by its parent.
-        * @property active
-        * @type boolean
-        * @default true
+		* @property active
+		* @type boolean
+		* @default true
 		* @public
-        */
-        public active: boolean = true;
-
-        /**
-        * The state of this component. 
-        * @property dirty
-        * @type boolean
-        * @default false
-        * @deprecated
-        * @public
-        */
-        public dirty: boolean = false;
-
-        /**
-        * Components can preUpdate, that is update before the parent updates. This is to be overriden by subclasses.
-        * @method preUpdate
-        * @public
-        */
-        public preUpdate() { }
-
-        /**
-        * If the component is being added to a State rather than a Game Object then over-ride its update method to perform required tasks.
-        * @method update
-        * @public
-        */
-        public update() { }
-
-        /**
-        * Components can postUpdate, that is run an update after the parent has updated. This is to be overriden by subclasses.
-        * @method postUpdate
-        * @public
-        */
-        public postUpdate() { }
-
-        /**
-        * Destroys this component and all of the properties that exist on it.
-        * @method destroy
-        * @public
-        */
-        public destroy() {
-
-            this.active = false;
-            delete this.game;
-            delete this.owner;
-
-            this.name = &#x27;&#x27;;
-
-        }
-        
-    }
+		*/
+		public active: boolean = true;
+
+		/**
+		* The state of this component. 
+		* @property dirty
+		* @type boolean
+		* @default false
+		* @deprecated
+		* @public
+		*/
+		public dirty: boolean = false;
+
+		/**
+		* Components can preUpdate, that is update before the parent updates. This is to be overriden by subclasses.
+		* @method preUpdate
+		* @public
+		*/
+		public preUpdate() { }
+
+		/**
+		* If the component is being added to a State rather than a Game Object then over-ride its update method to perform required tasks.
+		* @method update
+		* @public
+		*/
+		public update() { }
+
+		/**
+		* Components can postUpdate, that is run an update after the parent has updated. This is to be overriden by subclasses.
+		* @method postUpdate
+		* @public
+		*/
+		public postUpdate() { }
+
+		/**
+		* Destroys this component and all of the properties that exist on it.
+		* @method destroy
+		* @public
+		*/
+		public destroy() {
+
+			this.active = false;
+			delete this.game;
+			delete this.owner;
+
+			this.name = &#x27;&#x27;;
 
+		}
+	}
 }
 
     </pre>
diff --git a/docs/files/src_core_ComponentManager.ts.html b/docs/files/src_core_ComponentManager.ts.html
index 7cddb65..1b6a385 100644
--- a/docs/files/src_core_ComponentManager.ts.html
+++ b/docs/files/src_core_ComponentManager.ts.html
@@ -372,299 +372,294 @@ <h1 class="file-heading">File: src/core/ComponentManager.ts</h1>
 
 module Kiwi {
 
-    /**
-    * The component manager is a class that is used to handle components that
-    * are active on a particular object. Any object that has a component
-    * manager attached to it can use components. If you want to check to see if
-    * a particular component is on an object you can ask the component manager.
-    *
-    * The component manager is updated once per frame (as part of its owner&#x27;s
-    * update), and updates all active components. This is very useful for
-    * creating modular, customised behaviors on entities.
-    *
-    * @class ComponentManager
-    * @namespace Kiwi
-    * @constructor
-    * @param type {number} - The type of object that this component manager&#x27;s owner is.
-    * @param owner {Object} - The owner of this component manager.
-    * @return {ComponentManager} 
-    * 
-    */
-    export class ComponentManager {
-         
-        constructor(type: number, owner:any) {
-
-            this._components = {};
-
-            this._type = type;
-            this._owner = owner;
-
-        }
-
-        /**
-        * Returns the type of this object
-        * @method objType
-        * @return {string} &quot;ComponentManager&quot;
-        * @public
-        */
-        public objType():string {
-            return &quot;ComponentManager&quot;;
-        }
-
-        /**
-        * The owner of this Component Manager
-        * @property _owner
-        * @type {object}
-        * @private
-        */
-        private _owner: any;
-
-        /**
-        * The type of this object.
-        * @property _type
-        * @type number
-        * @private
-        */
-        private _type: number;
-
-        /**
-        * A list of all components that are currently on the ComponentManager
-        * @property _components
-        * @type Kiwi.Component 
-        * @private
-        */
-        public _components;
-
-        /**
-        * Returns true if this contains the component given, false otherwise.
-        * @method hasComponent
-        * @param value {String} the name of the component
-        * @return {boolean} True if this component manager contains the given component, false otherwise.
-        * @public
-        */
-        public hasComponent(value: string): boolean {
-
-            if (this._components[value]) {
-                return true;
-            }
-
-            return false; 
-        }
-
-        /**
-        * Returns true if this contains the component given and the component is active, false otherwise.
-        * @method hasActiveComponent
-        * @param value {String} The name of the component.
-        * @return {boolean} true if this manager contains the component and it is active, false otherwise.
-        * @public
-        */
-        public hasActiveComponent(value: string): boolean {
-
-            if (this._components[value] &amp;&amp; this._components[value].active === true)
-            {
-                return true;
-            }
-
-            return false;
-
-        }
-
-        /**
-        * Get an existing component that has been added to the layer by its name
-        * @method getComponent
-        * @param value {String} The component name
-        * @return {Kiwi.Component} The component, if found, otherwise null
-        * @public
-        */
-        public getComponent(value: string): any {
-
-            if (this._components[value]) {
-                return this._components[value];
-            }
-
-            return null; 
-        }
-
-        /**
-        * Adds a Component to the manager.
-        * @method add
-        * @param component {Kiwi.Component} The component to add
-        * @return {Kiwi.Component} The component that was added
-        * @public
-        */
-        public add(component: Kiwi.Component): any {
-
-            this._components[component.name] = component;
-
-            return component; 
-        }
-
-        /** 
-        * Adds a batch of components to the manager at a single time. 
-        * @method addBatch
-        * @param value* {Kiwi.Component} The component/s that you would like to add.
-        * @public
-        */
-        public addBatch(...paramsArr: any[]) {
-
-            for (var i = 0; i &lt; paramsArr.length; i++) {
-                this.add(paramsArr[i]);
-            }
-
-        }
-
-        /**
-        * Removes a component from the component manager
-        * @method removeComponent
-        * @param component {Kiwi.Component} The component to be removed.
-        * @param [destroy=true] {boolean} If the destroy method is to be called on the component when it is removed.
-        * @return {boolean} true if the component was removed successfully
-        * @public
-        */
-        public removeComponent(component: Kiwi.Component, destroy: boolean = true): boolean {
-
-            var name = component.name;
-
-            if (this._components[name]) {
-                if (destroy) {
-                    this._components[name].destroy();
-                }
-                
-                delete this._components[name];
-
-                return true; 
-            }
-
-            return false; 
-        }
-
-        /**
-        * Removes a component based on its name
-        * @method removeComponentByName
-        * @param name {String} The name of the component to be removed
-        * @param [destroy=true] {boolean} If the destroy method is to be called on the component when it is removed.
-        * @return {boolean} true if the component was removed successfully
-        * @public
-        */
-        public removeComponentByName(name: string, destroy: boolean = true): boolean {
-
-            if (this._components[name]) {
-                if (destroy) {
-                    this._components[name].destroy();
-                }
-                
-                delete this._components[name];
-
-                return true; 
-            }
-
-            return false; 
-        }
-
-        /**
-        * Removes all of the components from the component manager. 
-        * @method removeAll
-        * @param [destroy=true] {boolean} If true will destroy all components
-        * @public
-        */
-        public removeAll(destroy: boolean = true) {
-            for (var key in this._components) { 
-                this.removeComponent(this._components[key], destroy);
-            }
-        }
-
-        /**
+	/**
+	* The component manager is a class that is used to handle components that
+	* are active on a particular object. Any object that has a component
+	* manager attached to it can use components. If you want to check to see if
+	* a particular component is on an object you can ask the component manager.
+	*
+	* The component manager is updated once per frame (as part of its owner&#x27;s
+	* update), and updates all active components. This is very useful for
+	* creating modular, customised behaviors on entities.
+	*
+	* @class ComponentManager
+	* @namespace Kiwi
+	* @constructor
+	* @param type {number} - The type of object that this component manager&#x27;s owner is.
+	* @param owner {Object} - The owner of this component manager.
+	* @return {ComponentManager} 
+	* 
+	*/
+	export class ComponentManager {
+
+		constructor(type: number, owner:any) {
+
+			this._components = {};
+
+			this._type = type;
+			this._owner = owner;
+
+		}
+
+		/**
+		* Returns the type of this object
+		* @method objType
+		* @return {string} &quot;ComponentManager&quot;
+		* @public
+		*/
+		public objType():string {
+			return &quot;ComponentManager&quot;;
+		}
+
+		/**
+		* The owner of this Component Manager
+		* @property _owner
+		* @type {object}
+		* @private
+		*/
+		private _owner: any;
+
+		/**
+		* The type of this object.
+		* @property _type
+		* @type number
+		* @private
+		*/
+		private _type: number;
+
+		/**
+		* A list of all components that are currently on the ComponentManager
+		* @property _components
+		* @type Kiwi.Component 
+		* @private
+		*/
+		public _components;
+
+		/**
+		* Returns true if this contains the component given, false otherwise.
+		* @method hasComponent
+		* @param value {String} the name of the component
+		* @return {boolean} True if this component manager contains the given component, false otherwise.
+		* @public
+		*/
+		public hasComponent(value: string): boolean {
+
+			if (this._components[value]) {
+				return true;
+			}
+
+			return false; 
+		}
+
+		/**
+		* Returns true if this contains the component given and the component is active, false otherwise.
+		* @method hasActiveComponent
+		* @param value {String} The name of the component.
+		* @return {boolean} true if this manager contains the component and it is active, false otherwise.
+		* @public
+		*/
+		public hasActiveComponent(value: string): boolean {
+
+			if (this._components[value] &amp;&amp; this._components[value].active === true)
+			{
+				return true;
+			}
+
+			return false;
+
+		}
+
+		/**
+		* Get an existing component that has been added to the layer by its name
+		* @method getComponent
+		* @param value {String} The component name
+		* @return {Kiwi.Component} The component, if found, otherwise null
+		* @public
+		*/
+		public getComponent(value: string): any {
+
+			if (this._components[value]) {
+				return this._components[value];
+			}
+
+			return null; 
+		}
+
+		/**
+		* Adds a Component to the manager.
+		* @method add
+		* @param component {Kiwi.Component} The component to add
+		* @return {Kiwi.Component} The component that was added
+		* @public
+		*/
+		public add(component: Kiwi.Component): any {
+
+			this._components[component.name] = component;
+
+			return component; 
+		}
+
+		/** 
+		* Adds a batch of components to the manager at a single time. 
+		* @method addBatch
+		* @param value* {Kiwi.Component} The component/s that you would like to add.
+		* @public
+		*/
+		public addBatch(...paramsArr: any[]) {
+
+			for (var i = 0; i &lt; paramsArr.length; i++) {
+				this.add(paramsArr[i]);
+			}
+
+		}
+
+		/**
+		* Removes a component from the component manager
+		* @method removeComponent
+		* @param component {Kiwi.Component} The component to be removed.
+		* @param [destroy=true] {boolean} If the destroy method is to be called on the component when it is removed.
+		* @return {boolean} true if the component was removed successfully
+		* @public
+		*/
+		public removeComponent(component: Kiwi.Component, destroy: boolean = true): boolean {
+
+			var name = component.name;
+
+			if (this._components[name]) {
+				if (destroy) {
+					this._components[name].destroy();
+				}
+				
+				delete this._components[name];
+
+				return true; 
+			}
+
+			return false; 
+		}
+
+		/**
+		* Removes a component based on its name
+		* @method removeComponentByName
+		* @param name {String} The name of the component to be removed
+		* @param [destroy=true] {boolean} If the destroy method is to be called on the component when it is removed.
+		* @return {boolean} true if the component was removed successfully
+		* @public
+		*/
+		public removeComponentByName(name: string, destroy: boolean = true): boolean {
+
+			if (this._components[name]) {
+				if (destroy) {
+					this._components[name].destroy();
+				}
+				
+				delete this._components[name];
+
+				return true; 
+			}
+
+			return false; 
+		}
+
+		/**
+		* Removes all of the components from the component manager. 
+		* @method removeAll
+		* @param [destroy=true] {boolean} If true will destroy all components
+		* @public
+		*/
+		public removeAll(destroy: boolean = true) {
+			for (var key in this._components) { 
+				this.removeComponent(this._components[key], destroy);
+			}
+		}
+
+		/**
 		* Calls preUpdate on all active Components
-        * @method preUpdate
-        * @public
-    	*/
-        public preUpdate() {
-
-            for (var name in this._components) {
-                if (this._components[name].active) {
-                    this._components[name].preUpdate();
-                }
-            }
-        
-        }
-
-        /**
+		* @method preUpdate
+		* @public
+		*/
+		public preUpdate() {
+
+			for (var name in this._components) {
+				if (this._components[name].active) {
+					this._components[name].preUpdate();
+				}
+			}
+		
+		}
+
+		/**
 		* Calls update on all active Components
-        * @method update
-        * @public
-    	*/
-        public update() {
-        
-            for (var name in this._components) {
-                if (this._components[name].active) {
-                    this._components[name].update();
-                }
-            }
-        
-        }
-
-        /**
+		* @method update
+		* @public
+		*/
+		public update() {
+		
+			for (var name in this._components) {
+				if (this._components[name].active) {
+					this._components[name].update();
+				}
+			}
+		
+		}
+
+		/**
 		* Calls postUpdate on all active Components
-        * @method postUpdate
-        * @public
-    	*/
-        public postUpdate() {
-        
-            for (var name in this._components) {
-                if (this._components[name].active) {
-                    this._components[name].postUpdate();
-                }
-            }
-        
-        }
-
-        /**
+		* @method postUpdate
+		* @public
+		*/
+		public postUpdate() {
+		
+			for (var name in this._components) {
+				if (this._components[name].active) {
+					this._components[name].postUpdate();
+				}
+			}
+		
+		}
+
+		/**
 		* Calls preRender on all active Components
-        * @method preRender
-        * @public
-    	*/
-        public preRender() {
-        
-            for (var name in this._components) {
-                if (this._components[name].active) {
-                    this._components[name].preRender();
-                }
-            }
-        
-        }
-
-        /**
+		* @method preRender
+		* @public
+		*/
+		public preRender() {
+		
+			for (var name in this._components) {
+				if (this._components[name].active) {
+					this._components[name].preRender();
+				}
+			}
+		}
+
+		/**
 		* Renders all active Components
-        * @method render
-        * @public
-    	*/
-        public render() {
-        
-            for (var name in this._components) {
-                if (this._components[name].active) {
-                    this._components[name].render();
-                }
-            }
-        
-        }
-
-        /**
+		* @method render
+		* @public
+		*/
+		public render() {
+		
+			for (var name in this._components) {
+				if (this._components[name].active) {
+					this._components[name].render();
+				}
+			}
+		}
+
+		/**
 		* Calls postRender on all active Components
-        * @method postRender
-        * @public
-    	*/
-        public postRender() {
-        
-            for (var name in this._components) {
-                if (this._components[name].active) {
-                    this._components[name].postRender();
-                }
-            }
-        
-        }
-         
-    }
-
+		* @method postRender
+		* @public
+		*/
+		public postRender() {
+		
+			for (var name in this._components) {
+				if (this._components[name].active) {
+					this._components[name].postRender();
+				}
+			}
+		}
+	}
 }
 
     </pre>
diff --git a/docs/files/src_core_Entity.ts.html b/docs/files/src_core_Entity.ts.html
index f3d0dc5..7d3158e 100644
--- a/docs/files/src_core_Entity.ts.html
+++ b/docs/files/src_core_Entity.ts.html
@@ -372,714 +372,714 @@ <h1 class="file-heading">File: src/core/Entity.ts</h1>
 
 module Kiwi {
 
-    /**
-    * An Entity is a base class for game objects to extend from and thus you should never directly instantiate this class.
-    * Every entity requires that you pass to it the state to which it belongs, so that when you switch states the appropriate entities can be deleted.
-    * 
-    * @class Entity
-    * @namespace Kiwi
-    * @constructor
-    * @param state {State} The state that this entity belongs to. Used to generate the Unique ID and for garbage collection.
-    * @param x {Number} The entities position on the x axis.
-    * @param y {Number} The entities position on the y axis.
-    * @return {Kiwi.Entity} This entity.
-    *
-    */
-    export class Entity implements Kiwi.IChild {
-         
-        constructor(state: Kiwi.State, x:number, y: number) {
-            
-            //  Properties
-            this.state = state;
-            this.game = state.game;
-            this.id = this.game.rnd.uuid();
-            this.state.addToTrackingList(this);
-            this._clock = this.game.time.clock;
-             
-            this._exists = true;
-            this._active = true;
-            this._visible = true;
-            this.components = new Kiwi.ComponentManager(Kiwi.ENTITY, this); 
-            this.transform = new Kiwi.Geom.Transform();
-            this.transform.x = x;
-            this.transform.y = y; 
-
-        }
-
-        public glRenderer: Kiwi.Renderers.Renderer;
-
-
-        /**
-        * Represents the position, scale, rotation and registration of this Entity.
-        * @property transform
-        * @type Kiwi.Geom.Transform
-        * @public
-        */
-        public transform: Kiwi.Geom.Transform;
-
-        /**
-        * The group that this entity belongs to. If added onto the state then this is the state.
-        * @property _parent
-        * @type Kiwi.Group
-        * @private
-        */
-        private _parent: Kiwi.Group = null;
-
-        /**
-        * The group that this entity belongs to/is a child of once added to one. If added onto the state then this is the state.
-        * @property parent
-        * @type Group
-        * @param val {Kiwi.Group}
-        * @public
-        */
-        public set parent(val: Kiwi.Group) {
-            this.transform.parent = (val !== null) ? val.transform : null ;
-            this._parent = val;
-        }
-        public get parent(): Kiwi.Group {
-            return this._parent;
-        }
-
-        /**
-        * X coordinate of this Entity. This is just aliased to the transform property.
-        * @property x
-        * @type Number
-        * @public
-        */
-        public get x(): number {
-            return this.transform.x;
-        }
-        public set x(value: number) {
-            this.transform.x = value;
-        }
-        
-        /**
-        * Y coordinate of this Entity. This is just aliased to the transform property.
-        * @property y
-        * @type Number
-        * @public
-        */
-        public get y(): number {
-            return this.transform.y;
-        }
-        
-        public set y(value: number) {
-            this.transform.y = value;
-        }
-
-        /**
-        * X coordinate of this Entity in world space; that is, after inheriting parent transforms. This is just aliased to the transform property. Property is READ-ONLY.
-        * @property worldX
-        * @type number
-        * @public
-        * @since 1.1.0
-        */
-        public get worldX(): number {
-            return( this.transform.worldX );
-        }
-
-        /**
-        * Y coordinate of this Entity in world space; that is, after inheriting parent transforms. This is just aliased to the transform property. Property is READ-ONLY.
-        * @property worldY
-        * @type number
-        * @public
-        * @since 1.1.0
-        */
-        public get worldY(): number {
-            return( this.transform.worldY );
-        }
-        
-        /**
-        * Scale X of this Entity. This is just aliased to the transform property.
-        * @property scaleX
-        * @type Number
-        * @public
-        */
-        public get scaleX():number {
-            return this.transform.scaleX;
-        }
-        public set scaleX(value:number) {
-            this.transform.scaleX = value;
-        }
-
-        /**
-        * Scale Y coordinate of this Entity. This is just aliased to the transform property.
-        * @property scaleY
-        * @type Number
-        * @public
-        */
-        public get scaleY(): number {
-            return this.transform.scaleY;
-        }
-        
-        public set scaleY(value: number) {
-            this.transform.scaleY = value;
-        }
-
-        /**
-        * Scale both axes of this Entity. This is just aliased to the transform property. This is WRITE-ONLY.
-        * @property scale
-        * @type number
-        * @public
-        * @since 1.1.0
-        */
-        public set scale(value: number) {
-            this.transform.scale = value;
-        }
-        
-        /**
-        * Rotation of this Entity. This is just aliased to the transform property.
-        * @property rotation
-        * @type Number
-        * @public
-        */
-        public get rotation(): number {
-            return this.transform.rotation;
-        }
-        public set rotation(value: number) {
-            this.transform.rotation = value;
-        }
-        
-        /**
-        * The rotation point on the x-axis. This is just aliased to the rotPointX on the transform object.
-        * @property rotPointX
-        * @type number
-        * @public
-        */
-        public get rotPointX(): number {
-            return this.transform.rotPointX;
-        }
-        public set rotPointX(value: number) {
-            this.transform.rotPointX = value;
-        }
-        
-        /**
-        * The rotation point on the y-axis. This is just aliased to the rotPointY on the transform object.
-        * @property rotPointY
-        * @type number
-        * @public
-        */
-        public get rotPointY(): number {
-            return this.transform.rotPointY;
-        }
-        public set rotPointY(value: number) {
-            this.transform.rotPointY = value;
-        }
-
-        /**
-        * The anchor point on the x-axis. This is just aliased to the rotPointX on the transform object.
-        * @property anchorPointX
-        * @type number
-        * @public
-        * @since 1.1.0
-        */
-        public get anchorPointX(): number {
-            return this.transform.anchorPointX;
-        }
-        public set anchorPointX(value: number) {
-            this.transform.anchorPointX = value;
-        }
-
-        /**
-        * The anchor point on the y-axis. This is just aliased to the rotPointY on the transform object.
-        * @property anchorPointY
-        * @type number
-        * @public
-        * @since 1.1.0
-        */
-        public get anchorPointY(): number {
-            return this.transform.anchorPointY;
-        }
-        public set anchorPointY(value: number) {
-            this.transform.anchorPointY = value;
-        }
-
-        /**
-        * Returns the type of child that this is. 
-        * @type Number
-        * @return {Number} returns the type of child that the entity is
-        * @public
-        */
-        public childType():number {
-            return Kiwi.ENTITY;
-        }
-
-        /**
-        * The alpha of this entity.
-        * @property _alpha
-        * @type Number
-        * @private
-        */
-        private _alpha: number = 1;
-
-        /**
-        * Alpha of this entity. A number between 0 (invisible) and 1 (completely visible).
-        * @property alpha
-        * @type Number
-        * @public
-        */
-        public set alpha(value: number) {
-            if (value &lt;= 0) value = 0;
-            if (value &gt; 1) value = 1;
-            this._alpha = value;
-        }
-        
-        public get alpha(): number {
-            return this._alpha;
-        }
-
-        /**
-        * A boolean that indicates whether or not this entity is visible or not. Note that is does not get set to false if the alpha is 0.
-        * @property _visible
-        * @type boolean
-        * @default true
-        * @private
-        */
-        private _visible: boolean;
-        
-        /**
-        * Set the visibility of this entity. True or False.
-        * @property visible
-        * @type boolean
-        * @default true
-        * @public
-        */
-        public set visible(value: boolean) {
-            this._visible = value;
-        }
-        public get visible(): boolean {
-            return this._visible;
-        }
-        
-        /**
-        * The width of the entity in pixels, pre-transform.
-        *
-        * To obtain the actual width, multiply width by scaleX.
-        * @property width
-        * @type number
-        * @default 0 
-        * @public
-        */
-        public width: number = 0;   //If bounds are implemented then getters and setters here would be nice.
-        
-        /**
-        * The height of the entity in pixels, pre-transform.
-        *
-        * To obtain the actual height, multiply height by scaleY.
-        * @property height
-        * @type number
-        * @default 0
-        * @public
-        */
-        public height: number = 0;
-
-        /**
-        * Scale to desired width, preserving aspect ratio. This function changes the scale, not the width. If the width changes, for example, as part of an animation sequence, the Entity will retain the new scale.
-        * @method scaleToWidth
-        * @param value {Number} The desired width in pixels.
-        * @public
-        * @since 1.1.0
-        */
-        public scaleToWidth(value: number) {
-            this.scale = value / this.width;
-        }
-
-        /**
-        * Scale to desired height, preserving aspect ratio. This function changes the scale, not the height. If the height changes, for example, as part of an animation sequence, the Entity will retain the new scale.
-        * @method scaleToHeight
-        * @param value {Number} The desired height in pixels.
-        * @public
-        * @since 1.1.0
-        */
-        public scaleToHeight(value: number) {
-            this.scale = value / this.height;
-        }
-
-        /**
-        * Center the anchor point. Moves the anchor point (rotPointX and Y) to precisely halfway along the width and height properties of this Entity.
-        * @method centerAnchorPoint
-        * @public
-        * @since 1.1.0
-        */
-        public centerAnchorPoint() {
-            this.anchorPointX = this.width * 0.5;
-            this.anchorPointY = this.height * 0.5;
-        }
-        
-        /**
-        * The texture atlas that is to be used on this entity.
-        * @property atlas
-        * @type Kiwi.Textures.TextureAtlas
-        * @public
-        */
-        public atlas: Kiwi.Textures.TextureAtlas = null;
-        
-        /**
-        * Holds the current cell that is being used by the entity.
-        * @property _cellIndex
-        * @type number
-        * @default 0
-        * @private
-        */
-        private _cellIndex: number = 0; 
-        
-        /**
-        * Used as a reference to a single Cell in the atlas that is to be rendered. 
-        * 
-        * E.g. If you had a spritesheet with 3 frames/cells and you wanted the second frame to be displayed you would change this value to 1
-        * @property cellIndex
-        * @type number
-        * @default 0
-        * @public
-        */
-        public get cellIndex():number {
-            return this._cellIndex;
-        }
-
-        public set cellIndex(val: number) {
-            //If the entity has a texture atlas
-            if (this.atlas !== null) {
-                var cell = this.atlas.cells[val];
-
-                if (cell !== undefined) {
-                    //Update the width/height of the GameObject to be the same as the width/height
-                    this._cellIndex = val;
-                    this.width = cell.w;
-                    this.height = cell.h;
-
-                } else {
-
-                    Kiwi.Log.error(&#x27;Could not the set the cellIndex of a Entity, to cell that does not exist on its TextureAtlas.&#x27;, &#x27;#entity&#x27;, &quot;#cellIndex&quot;);
-
-                }
-            }
-        }
-
-        /**
-        * The Component Manager
-        * @property components
-        * @type Kiwi.ComponentManager
-        * @public
-	    */
-        public components: Kiwi.ComponentManager;
-
-        /**
-        * The game this Entity belongs to
-        * @property game
-        * @type Game
-        * @public
-	    */
-        public game: Kiwi.Game;
-
-        /**
-        * The state this Entity belongs to (either the current game state or a persistent world state)
-        * @property state
-        * @type State
-        * @public
-    	*/
-        public state: Kiwi.State;
-
-        /**
-        * A unique identifier for this Entity within the game used internally by the framework. See the name property for a friendly version.
-        * @property id
-        * @type string
-        * @public
-    	*/
-        public id: string;
-
-        /**
-        * A name for this Entity. This is not checked for uniqueness within the Game, but is very useful for debugging
-        * @property name
-        * @type string
-        * @default &#x27;&#x27;
-        * @public
-    	*/
-        public name: string = &#x27;&#x27;;
-
-        /**
+	/**
+	* An Entity is a base class for game objects to extend from and thus you should never directly instantiate this class.
+	* Every entity requires that you pass to it the state to which it belongs, so that when you switch states the appropriate entities can be deleted.
+	* 
+	* @class Entity
+	* @namespace Kiwi
+	* @constructor
+	* @param state {State} The state that this entity belongs to. Used to generate the Unique ID and for garbage collection.
+	* @param x {Number} The entities position on the x axis.
+	* @param y {Number} The entities position on the y axis.
+	* @return {Kiwi.Entity} This entity.
+	*
+	*/
+	export class Entity implements Kiwi.IChild {
+
+		constructor(state: Kiwi.State, x:number, y: number) {
+			
+			//  Properties
+			this.state = state;
+			this.game = state.game;
+			this.id = this.game.rnd.uuid();
+			this.state.addToTrackingList(this);
+			this._clock = this.game.time.clock;
+			 
+			this._exists = true;
+			this._active = true;
+			this._visible = true;
+			this.components = new Kiwi.ComponentManager(Kiwi.ENTITY, this); 
+			this.transform = new Kiwi.Geom.Transform();
+			this.transform.x = x;
+			this.transform.y = y; 
+
+		}
+
+		public glRenderer: Kiwi.Renderers.Renderer;
+
+
+		/**
+		* Represents the position, scale, rotation and registration of this Entity.
+		* @property transform
+		* @type Kiwi.Geom.Transform
+		* @public
+		*/
+		public transform: Kiwi.Geom.Transform;
+
+		/**
+		* The group that this entity belongs to. If added onto the state then this is the state.
+		* @property _parent
+		* @type Kiwi.Group
+		* @private
+		*/
+		private _parent: Kiwi.Group = null;
+
+		/**
+		* The group that this entity belongs to/is a child of once added to one. If added onto the state then this is the state.
+		* @property parent
+		* @type Group
+		* @param val {Kiwi.Group}
+		* @public
+		*/
+		public set parent(val: Kiwi.Group) {
+			this.transform.parent = (val !== null) ? val.transform : null ;
+			this._parent = val;
+		}
+		public get parent(): Kiwi.Group {
+			return this._parent;
+		}
+
+		/**
+		* X coordinate of this Entity. This is just aliased to the transform property.
+		* @property x
+		* @type Number
+		* @public
+		*/
+		public get x(): number {
+			return this.transform.x;
+		}
+		public set x(value: number) {
+			this.transform.x = value;
+		}
+
+		/**
+		* Y coordinate of this Entity. This is just aliased to the transform property.
+		* @property y
+		* @type Number
+		* @public
+		*/
+		public get y(): number {
+			return this.transform.y;
+		}
+
+		public set y(value: number) {
+			this.transform.y = value;
+		}
+
+		/**
+		* X coordinate of this Entity in world space; that is, after inheriting parent transforms. This is just aliased to the transform property. Property is READ-ONLY.
+		* @property worldX
+		* @type number
+		* @public
+		* @since 1.1.0
+		*/
+		public get worldX(): number {
+			return( this.transform.worldX );
+		}
+
+		/**
+		* Y coordinate of this Entity in world space; that is, after inheriting parent transforms. This is just aliased to the transform property. Property is READ-ONLY.
+		* @property worldY
+		* @type number
+		* @public
+		* @since 1.1.0
+		*/
+		public get worldY(): number {
+			return( this.transform.worldY );
+		}
+
+		/**
+		* Scale X of this Entity. This is just aliased to the transform property.
+		* @property scaleX
+		* @type Number
+		* @public
+		*/
+		public get scaleX():number {
+			return this.transform.scaleX;
+		}
+		public set scaleX(value:number) {
+			this.transform.scaleX = value;
+		}
+
+		/**
+		* Scale Y coordinate of this Entity. This is just aliased to the transform property.
+		* @property scaleY
+		* @type Number
+		* @public
+		*/
+		public get scaleY(): number {
+			return this.transform.scaleY;
+		}
+		
+		public set scaleY(value: number) {
+			this.transform.scaleY = value;
+		}
+
+		/**
+		* Scale both axes of this Entity. This is just aliased to the transform property. This is WRITE-ONLY.
+		* @property scale
+		* @type number
+		* @public
+		* @since 1.1.0
+		*/
+		public set scale(value: number) {
+			this.transform.scale = value;
+		}
+
+		/**
+		* Rotation of this Entity. This is just aliased to the transform property.
+		* @property rotation
+		* @type Number
+		* @public
+		*/
+		public get rotation(): number {
+			return this.transform.rotation;
+		}
+		public set rotation(value: number) {
+			this.transform.rotation = value;
+		}
+
+		/**
+		* The rotation point on the x-axis. This is just aliased to the rotPointX on the transform object.
+		* @property rotPointX
+		* @type number
+		* @public
+		*/
+		public get rotPointX(): number {
+			return this.transform.rotPointX;
+		}
+		public set rotPointX(value: number) {
+			this.transform.rotPointX = value;
+		}
+
+		/**
+		* The rotation point on the y-axis. This is just aliased to the rotPointY on the transform object.
+		* @property rotPointY
+		* @type number
+		* @public
+		*/
+		public get rotPointY(): number {
+			return this.transform.rotPointY;
+		}
+		public set rotPointY(value: number) {
+			this.transform.rotPointY = value;
+		}
+
+		/**
+		* The anchor point on the x-axis. This is just aliased to the rotPointX on the transform object.
+		* @property anchorPointX
+		* @type number
+		* @public
+		* @since 1.1.0
+		*/
+		public get anchorPointX(): number {
+			return this.transform.anchorPointX;
+		}
+		public set anchorPointX(value: number) {
+			this.transform.anchorPointX = value;
+		}
+
+		/**
+		* The anchor point on the y-axis. This is just aliased to the rotPointY on the transform object.
+		* @property anchorPointY
+		* @type number
+		* @public
+		* @since 1.1.0
+		*/
+		public get anchorPointY(): number {
+			return this.transform.anchorPointY;
+		}
+		public set anchorPointY(value: number) {
+			this.transform.anchorPointY = value;
+		}
+
+		/**
+		* Returns the type of child that this is. 
+		* @type Number
+		* @return {Number} returns the type of child that the entity is
+		* @public
+		*/
+		public childType():number {
+			return Kiwi.ENTITY;
+		}
+
+		/**
+		* The alpha of this entity.
+		* @property _alpha
+		* @type Number
+		* @private
+		*/
+		private _alpha: number = 1;
+
+		/**
+		* Alpha of this entity. A number between 0 (invisible) and 1 (completely visible).
+		* @property alpha
+		* @type Number
+		* @public
+		*/
+		public set alpha(value: number) {
+			if (value &lt;= 0) value = 0;
+			if (value &gt; 1) value = 1;
+			this._alpha = value;
+		}
+		
+		public get alpha(): number {
+			return this._alpha;
+		}
+
+		/**
+		* A boolean that indicates whether or not this entity is visible or not. Note that is does not get set to false if the alpha is 0.
+		* @property _visible
+		* @type boolean
+		* @default true
+		* @private
+		*/
+		private _visible: boolean;
+
+		/**
+		* Set the visibility of this entity. True or False.
+		* @property visible
+		* @type boolean
+		* @default true
+		* @public
+		*/
+		public set visible(value: boolean) {
+			this._visible = value;
+		}
+		public get visible(): boolean {
+			return this._visible;
+		}
+
+		/**
+		* The width of the entity in pixels, pre-transform.
+		*
+		* To obtain the actual width, multiply width by scaleX.
+		* @property width
+		* @type number
+		* @default 0 
+		* @public
+		*/
+		public width: number = 0;   //If bounds are implemented then getters and setters here would be nice.
+
+		/**
+		* The height of the entity in pixels, pre-transform.
+		*
+		* To obtain the actual height, multiply height by scaleY.
+		* @property height
+		* @type number
+		* @default 0
+		* @public
+		*/
+		public height: number = 0;
+
+		/**
+		* Scale to desired width, preserving aspect ratio. This function changes the scale, not the width. If the width changes, for example, as part of an animation sequence, the Entity will retain the new scale.
+		* @method scaleToWidth
+		* @param value {Number} The desired width in pixels.
+		* @public
+		* @since 1.1.0
+		*/
+		public scaleToWidth(value: number) {
+			this.scale = value / this.width;
+		}
+
+		/**
+		* Scale to desired height, preserving aspect ratio. This function changes the scale, not the height. If the height changes, for example, as part of an animation sequence, the Entity will retain the new scale.
+		* @method scaleToHeight
+		* @param value {Number} The desired height in pixels.
+		* @public
+		* @since 1.1.0
+		*/
+		public scaleToHeight(value: number) {
+			this.scale = value / this.height;
+		}
+
+		/**
+		* Center the anchor point. Moves the anchor point (rotPointX and Y) to precisely halfway along the width and height properties of this Entity.
+		* @method centerAnchorPoint
+		* @public
+		* @since 1.1.0
+		*/
+		public centerAnchorPoint() {
+			this.anchorPointX = this.width * 0.5;
+			this.anchorPointY = this.height * 0.5;
+		}
+
+		/**
+		* The texture atlas that is to be used on this entity.
+		* @property atlas
+		* @type Kiwi.Textures.TextureAtlas
+		* @public
+		*/
+		public atlas: Kiwi.Textures.TextureAtlas = null;
+		
+		/**
+		* Holds the current cell that is being used by the entity.
+		* @property _cellIndex
+		* @type number
+		* @default 0
+		* @private
+		*/
+		private _cellIndex: number = 0; 
+
+		/**
+		* Used as a reference to a single Cell in the atlas that is to be rendered. 
+		* 
+		* E.g. If you had a spritesheet with 3 frames/cells and you wanted the second frame to be displayed you would change this value to 1
+		* @property cellIndex
+		* @type number
+		* @default 0
+		* @public
+		*/
+		public get cellIndex():number {
+			return this._cellIndex;
+		}
+
+		public set cellIndex(val: number) {
+			//If the entity has a texture atlas
+			if (this.atlas !== null) {
+				var cell = this.atlas.cells[val];
+
+				if (cell !== undefined) {
+					//Update the width/height of the GameObject to be the same as the width/height
+					this._cellIndex = val;
+					this.width = cell.w;
+					this.height = cell.h;
+
+				} else {
+
+					Kiwi.Log.error(&#x27;Could not the set the cellIndex of a Entity, to cell that does not exist on its TextureAtlas.&#x27;, &#x27;#entity&#x27;, &quot;#cellIndex&quot;);
+
+				}
+			}
+		}
+
+		/**
+		* The Component Manager
+		* @property components
+		* @type Kiwi.ComponentManager
+		* @public
+		*/
+		public components: Kiwi.ComponentManager;
+
+		/**
+		* The game this Entity belongs to
+		* @property game
+		* @type Game
+		* @public
+		*/
+		public game: Kiwi.Game;
+
+		/**
+		* The state this Entity belongs to (either the current game state or a persistent world state)
+		* @property state
+		* @type State
+		* @public
+		*/
+		public state: Kiwi.State;
+
+		/**
+		* A unique identifier for this Entity within the game used internally by the framework. See the name property for a friendly version.
+		* @property id
+		* @type string
+		* @public
+		*/
+		public id: string;
+
+		/**
+		* A name for this Entity. This is not checked for uniqueness within the Game, but is very useful for debugging
+		* @property name
+		* @type string
+		* @default &#x27;&#x27;
+		* @public
+		*/
+		public name: string = &#x27;&#x27;;
+
+		/**
 		* If an Entity no longer exists it is cleared for garbage collection or pool re-allocation
-        * @property _exists 
-        * @type boolean
-        * @private
+		* @property _exists 
+		* @type boolean
+		* @private
 		*/
-        private _exists: boolean;
+		private _exists: boolean;
 
-        /**
+		/**
 		* Toggles the existence of this Entity. An Entity that no longer exists can be garbage collected or re-allocated in a pool.
-        * @property exists
-        * @type boolean
-        * @public
+		* @property exists
+		* @type boolean
+		* @public
+		*/
+		public set exists(value: boolean) {
+			this._exists = value;
+		}
+		public get exists():boolean {
+			return this._exists;
+		}
+
+		/**
+		* Any tags that are on this Entity. This can be used to grab GameObjects or Groups on the whole game which have these particular tags.
+		* By default Entitys contain no tags.
+		* @property _tags
+		* @type Array
+		* @since 1.1.0
+		* @private
 		*/
-        public set exists(value: boolean) {
-            this._exists = value;
-        }
-        public get exists():boolean {
-            return this._exists;
-        }
-
-        /**
-        * Any tags that are on this Entity. This can be used to grab GameObjects or Groups on the whole game which have these particular tags.
-        * By default Entitys contain no tags.
-        * @property _tags
-        * @type Array
-        * @since 1.1.0
-        * @private
-        */
-        private _tags: string[] = [];
-
-        /**
-        * Adds a new Tag to this Entity. Useful for identifying large amounts of the same type of GameObjects.
-        * You can pass multiple strings to add multiple tags.
-        * @method addTag
-        * @param tag {string} The tag that you would like to add to this Entity.
-        * @since 1.1.0
-        * @public
-        */
-        public addTag(...args: any[]) {
-
-            //Loop through the arguments
-            for (var i = 0; i &lt; args.length; i++) {
-                if (this._tags.indexOf(args[i]) == -1) {
-                    this._tags.push(args[i]);
-                }
-            }
-            
-        }
-
-        /**
-        * Removes a Tag from this Entity.
-        * @method removeTag
-        * @param tag {string} The tag that you would like to remove from this Entity.
-        * @since 1.1.0
-        * @public
-        */
-        public removeTag(...args: any[]) {
-
-            for (var i = 0; i &lt; args.length; i++) {
-                var index = this._tags.indexOf(args[i]);
-                if (index !== -1) this._tags.splice(index, 1);
-            }
-
-        }
-
-        /**
-        * Checks to see if this Entity has a Tag based upon a string which you pass.
-        * @method hasTag
-        * @param tag {string} 
-        * @since 1.1.0
-        * @return {boolean}
-        * @public 
-        */
-        public hasTag(tag: string): boolean {
-
-            var len = this._tags.length;
-            while (len--) {
-                if (this._tags[len] === tag) {
-                    return true;
-                }
-            }
-
-            return false;
-        }
-
-
-        /**
+		private _tags: string[] = [];
+
+		/**
+		* Adds a new Tag to this Entity. Useful for identifying large amounts of the same type of GameObjects.
+		* You can pass multiple strings to add multiple tags.
+		* @method addTag
+		* @param tag {string} The tag that you would like to add to this Entity.
+		* @since 1.1.0
+		* @public
+		*/
+		public addTag(...args: any[]) {
+
+			//Loop through the arguments
+			for (var i = 0; i &lt; args.length; i++) {
+				if (this._tags.indexOf(args[i]) == -1) {
+					this._tags.push(args[i]);
+				}
+			}
+			
+		}
+
+		/**
+		* Removes a Tag from this Entity.
+		* @method removeTag
+		* @param tag {string} The tag that you would like to remove from this Entity.
+		* @since 1.1.0
+		* @public
+		*/
+		public removeTag(...args: any[]) {
+
+			for (var i = 0; i &lt; args.length; i++) {
+				var index = this._tags.indexOf(args[i]);
+				if (index !== -1) this._tags.splice(index, 1);
+			}
+
+		}
+
+		/**
+		* Checks to see if this Entity has a Tag based upon a string which you pass.
+		* @method hasTag
+		* @param tag {string} 
+		* @since 1.1.0
+		* @return {boolean}
+		* @public 
+		*/
+		public hasTag(tag: string): boolean {
+
+			var len = this._tags.length;
+			while (len--) {
+				if (this._tags[len] === tag) {
+					return true;
+				}
+			}
+
+			return false;
+		}
+
+
+		/**
 		* An active Entity is one that has its update method called by its parent. 
-        * @property _active
-        * @type boolean
-        * @default true
-        * @private
+		* @property _active
+		* @type boolean
+		* @default true
+		* @private
 		*/
-        private _active: boolean;
+		private _active: boolean;
 
-        /**
+		/**
 		* Toggles the active state of this Entity. An Entity that is active has its update method called by its parent.
-        * This method should be over-ridden to handle specific dom/canvas/webgl implementations.
-        * @property active
-        * @type boolean
-        * @public
+		* This method should be over-ridden to handle specific dom/canvas/webgl implementations.
+		* @property active
+		* @type boolean
+		* @public
 		*/
-        public set active(value: boolean) {
-            this._active = value;
-        }
-        public get active():boolean {
-            return this._active;
-        }
-
-        /**
+		public set active(value: boolean) {
+			this._active = value;
+		}
+		public get active():boolean {
+			return this._active;
+		}
+
+		/**
 		* Controls whether render is automatically called by the parent. 
-        * @property _willRender
-        * @type boolean
-        * @default true
-        * @private
-        * @deprecated Use _visible instead
+		* @property _willRender
+		* @type boolean
+		* @default true
+		* @private
+		* @deprecated Use _visible instead
 		*/
 		private _willRender: boolean;
 
-        /**
+		/**
 		* Toggles if this Entity will be rendered.
-        * @property willRender
-        * @type boolean
-        * @default true
-        * @public
-        * @deprecated Use visible instead
+		* @property willRender
+		* @type boolean
+		* @default true
+		* @public
+		* @deprecated Use visible instead
 		*/
-        public set willRender(value: boolean) {
-            this._willRender = value;
-        }
-        public get willRender():boolean {
-            return this._willRender;
-        }
-
-        /**
+		public set willRender(value: boolean) {
+			this._willRender = value;
+		}
+		public get willRender():boolean {
+			return this._willRender;
+		}
+
+		/**
 		* Controls if this Entity is input enabled or not (i.e. responds to touch/mouse events)
-        * @property _inputEnabled
-        * @type boolean
-        * @private
+		* @property _inputEnabled
+		* @type boolean
+		* @private
 		*/
-        private _inputEnabled: boolean;
+		private _inputEnabled: boolean;
 
-        /**
+		/**
 		* Controls if this Entity is input enabled or not (i.e. responds to touch/mouse events)
-        * This method should be over-ridden to handle specific game object implementations.
-        * @property inputEnabled
-        * @type boolean
-        * @public
+		* This method should be over-ridden to handle specific game object implementations.
+		* @property inputEnabled
+		* @type boolean
+		* @public
 		*/
-        public set inputEnabled(value: boolean) {
-            this._inputEnabled = value;
-        }
-        public get inputEnabled():boolean {
-            return this._inputEnabled;
-        }
-        
-        /**
+		public set inputEnabled(value: boolean) {
+			this._inputEnabled = value;
+		}
+		public get inputEnabled():boolean {
+			return this._inputEnabled;
+		}
+		
+		/**
 		* The clock that this entity use&#x27;s for time based calculations. This generated by the state on instatiation.
-        * @property _clock
-        * @type Kiwi.Clock
-        * @private
+		* @property _clock
+		* @type Kiwi.Clock
+		* @private
 		*/
-        private _clock: Kiwi.Time.Clock = null;
+		private _clock: Kiwi.Time.Clock = null;
 
-        /**
+		/**
 		* The Clock used to update this all of this Entities components (defaults to the Game MasterClock)
-        * @property clock 
-        * @type Kiwi.Time.Clock
-        * @public
+		* @property clock 
+		* @type Kiwi.Time.Clock
+		* @public
 		*/
-        public set clock(value: Kiwi.Time.Clock) {
-            this._clock = value;
-        }
-        public get clock(): Kiwi.Time.Clock {
-            return this._clock;
-        }
-
-        /**
+		public set clock(value: Kiwi.Time.Clock) {
+			this._clock = value;
+		}
+		public get clock(): Kiwi.Time.Clock {
+			return this._clock;
+		}
+
+		/**
 		* A value used by components to control if the Entity needs re-rendering
-        * @property _dirty
-        * @type boolean
-        * @private
-    	*/
-        private _dirty: boolean;
-        
-        /**
+		* @property _dirty
+		* @type boolean
+		* @private
+		*/
+		private _dirty: boolean;
+
+		/**
 		* A value used by components to control if the Entity needs re-rendering
-        * @property dirty
-        * @type boolean
-        * @public
-    	*/
-        public set dirty(value: boolean) {
-            this._dirty = value;
-        }
-        public get dirty():boolean {
-            return this._dirty;
-        }
-
-        //  Both of these methods can and often should be over-ridden by classes extending Entity to handle specific implementations
-
-        /**
-        * The type of this object.
-        * @method objType
-        * @return {String} &quot;Entity&quot;
-        * @public
-        */
-        public objType() {
-            return &quot;Entity&quot;;
-        }
-
-        /**
-        * This isn&#x27;t called until the Entity has been added to a Group or a State.
-        * Note: If added to a Group, who is not &#x27;active&#x27; (so the Groups update loop doesn&#x27;t run) then each member will not execute either.
-        * @method update
-        * @public
-        */
-        public update() {
-
-            this.components.preUpdate();
-            this.components.update();
-            this.components.postUpdate();
-
-        }
-
-        /**
-        * Renders the entity using the canvas renderer. 
-        * This isn&#x27;t called until the Entity has been added to a Group/State which is active.
-        * This functionality is handled by the sub classes. 
-        * @method render
-        * @param {Camera} camera
-        * @public
-        */
-        public render(camera:Kiwi.Camera) {
-        
-        }
-
-        /**
-        * Renders the entity using the canvas renderer. 
-        * This isn&#x27;t called until the Entity has been added to a Group/State which is active.
-        * This functionality is handled by the sub classes. 
-        * @method renderGL
-        * @param {Kiwi.Camera} camera
-        * @param {WebGLRenderingContext} gl
-        * @param [params=null] {object} params
-        * @public
-        */
-        public renderGL(gl: WebGLRenderingContext, camera: Kiwi.Camera, params: any = null) {
-        
-        }
-
-        /**
-        * Used to completely destroy this entity and of its components.
-        * Used for garbage collection and developers can also use it as needed.
-        * It is more reliable to use &quot;exists = false&quot;, as this will ensure
-        * that &quot;destroy&quot; is called at a convenient time.
-        * @method destroy
-        * @param [immediate=false] {boolean} If the object should be immediately removed or if it should be removed at the end of the next update loop.
-        * @public
-        */
-        public destroy(immediate: boolean = false) {
-            
-            this._exists = false;
-            this._active = false;
-            this._visible = false;
-
-            if (immediate === true) {
-                
-                if (this.parent !== null &amp;&amp; typeof this.parent !== &quot;undefined&quot;) this.parent.removeChild(this);
-                if (this.state) this.state.removeFromTrackingList(this);
-                delete this._parent;
-                delete this.transform;
-                delete this._clock;
-                delete this.state;
-                delete this.game;
-                delete this.atlas;
-
-                if (this.components) this.components.removeAll(true);
-                delete this.components;
-
-            }
-        }
-
-    }
+		* @property dirty
+		* @type boolean
+		* @public
+		*/
+		public set dirty(value: boolean) {
+			this._dirty = value;
+		}
+		public get dirty():boolean {
+			return this._dirty;
+		}
+
+		//  Both of these methods can and often should be over-ridden by classes extending Entity to handle specific implementations
+
+		/**
+		* The type of this object.
+		* @method objType
+		* @return {String} &quot;Entity&quot;
+		* @public
+		*/
+		public objType() {
+			return &quot;Entity&quot;;
+		}
+
+		/**
+		* This isn&#x27;t called until the Entity has been added to a Group or a State.
+		* Note: If added to a Group, who is not &#x27;active&#x27; (so the Groups update loop doesn&#x27;t run) then each member will not execute either.
+		* @method update
+		* @public
+		*/
+		public update() {
+
+			this.components.preUpdate();
+			this.components.update();
+			this.components.postUpdate();
+
+		}
+
+		/**
+		* Renders the entity using the canvas renderer. 
+		* This isn&#x27;t called until the Entity has been added to a Group/State which is active.
+		* This functionality is handled by the sub classes. 
+		* @method render
+		* @param {Camera} camera
+		* @public
+		*/
+		public render(camera:Kiwi.Camera) {
+		
+		}
+
+		/**
+		* Renders the entity using the canvas renderer. 
+		* This isn&#x27;t called until the Entity has been added to a Group/State which is active.
+		* This functionality is handled by the sub classes. 
+		* @method renderGL
+		* @param {Kiwi.Camera} camera
+		* @param {WebGLRenderingContext} gl
+		* @param [params=null] {object} params
+		* @public
+		*/
+		public renderGL(gl: WebGLRenderingContext, camera: Kiwi.Camera, params: any = null) {
+
+		}
+
+		/**
+		* Used to completely destroy this entity and of its components.
+		* Used for garbage collection and developers can also use it as needed.
+		* It is more reliable to use &quot;exists = false&quot;, as this will ensure
+		* that &quot;destroy&quot; is called at a convenient time.
+		* @method destroy
+		* @param [immediate=false] {boolean} If the object should be immediately removed or if it should be removed at the end of the next update loop.
+		* @public
+		*/
+		public destroy(immediate: boolean = false) {
+
+			this._exists = false;
+			this._active = false;
+			this._visible = false;
+
+			if (immediate === true) {
+
+				if (this.parent !== null &amp;&amp; typeof this.parent !== &quot;undefined&quot;) this.parent.removeChild(this);
+				if (this.state) this.state.removeFromTrackingList(this);
+				delete this._parent;
+				delete this.transform;
+				delete this._clock;
+				delete this.state;
+				delete this.game;
+				delete this.atlas;
+
+				if (this.components) this.components.removeAll(true);
+				delete this.components;
+
+			}
+		}
+
+	}
 
 }
 
diff --git a/docs/files/src_core_Game.ts.html b/docs/files/src_core_Game.ts.html
index 3d9a6d6..5ff7cbf 100644
--- a/docs/files/src_core_Game.ts.html
+++ b/docs/files/src_core_Game.ts.html
@@ -372,597 +372,598 @@ <h1 class="file-heading">File: src/core/Game.ts</h1>
 
 module Kiwi {
 
-    /**
-    * The base class that is used when you create a new Game. Handles the initialisation of all of the various individual game managers and holds the RAF (RequestAnimationFrame object) which is used for the game loop.
-    *
-    * @class Game
-    * @namespace Kiwi
-    * @constructor
-    * @param [domParent=&#x27;&#x27;] {String} The ID of a DOM element that the game should use as its &#x27;container&#x27;. If you are targeting Cocoon then you don&#x27;t need to worry about this and can leave it blank.
-    * @param [name=&#x27;KiwiGame&#x27;] {String} The name of the game that is being created. 
-    * @param [state=null] {Any} The state to load initially. This can either be the name of a state, but preferably this would be the state object itself.
-    * @param [options] {Object} Any special options for the game. E.g. Is DEBUG_ON or DEBUG_OFF, RENDERER_CANVAS or RENDERER_WEBGL, TARGET_BROWSER or TARGET_COCOON
-    *   @param [options.debug=Kiwi.DEBUG_ON] {Number} If debugging is enabled or not.
-    *   @param [options.bootCallback=null] {Function} A callback to be executed when the game reaches the boot stage.
-    *   @param [options.deviceTarget=Kiwi.TARGET_BROWSER] {Number} The type of device Kiwi is being used on.
-    *   @param [options.renderer=Kiwi.RENDERER_AUTO] {Number} The renderer Kiwi should use. 
-    *   @param [options.width=Kiwi.Stage.DEFAULT_WIDTH] {Number} The width of this instance of Kiwi.
-    *   @param [options.height=Kiwi.Stage.DEFAULT_HEIGHT] {Number} The height of this instance of Kiwi.
-    *   @param [options.scaleType=Kiwi.Stage.SCALE_NONE] {Number} The type of scaling that should be applied to Kiwi.
-    *   @param [options.plugins=[]] {Array} A list of the names of plugins that are to be used with this game.
-    *   @param [options.log] {Object} Default state of the Log properties
-    *       @param [options.log.recording=true] {Boolean} If the logs should be recorded.
-    *       @param [options.log.display=true] {Boolean} If the logs should be displayed or not.
-    *       @param [options.log.enabled=true] {Boolean} If the Logger is enabled at all.
-    *       @param [options.log.maxRecordings=Infinity] {Number} The maximum number of recordings to have at a single time.
-    * @return {Kiwi.Game}
-    * 
-    */
-    export class Game {
-         
-        constructor(domParent: string = &#x27;&#x27;, name: string = &#x27;KiwiGame&#x27;, state: any = null, options: any= {}) {
-
-            Kiwi.Log.setDefaultsFromParams(options.log); 
-            Kiwi.Log.log(&#x27;Kiwi.Game: &#x27; + name + &#x27; is booting using Kiwi.js &#x27; + Kiwi.VERSION, &#x27;#version&#x27;);
-      
-            if (Kiwi.DEVICE === null) { 
-                Kiwi.DEVICE = new Kiwi.System.Device();
-            }
-
-            if (options.debug !== &#x27;undefined&#x27; &amp;&amp; typeof options.debug === &#x27;number&#x27;) {
-                switch (options.debug) {
-                    case Kiwi.DEBUG_ON:
-                        this._debugOption = options.debug;
-                        Kiwi.Log.log(&#x27;  Kiwi.Game: Debugging turned ON.&#x27;, &#x27;#debugging&#x27; );
-                        break;
-                    case Kiwi.DEBUG_OFF:
-                        this._debugOption = options.debug;
-                        Kiwi.Log.log(&#x27;  Kiwi.Game: Debugging turned OFF.&#x27;, &#x27;#debugging&#x27; );
-                        break;
-                    default:
-                        this._debugOption = Kiwi.DEBUG_ON;
-                        Kiwi.Log.error(&#x27;  Kiwi.Game: Debug option passed, but is not a valid option. Turned ON by default.&#x27;, &#x27;#debugging&#x27; );
-                        break;
-                }
-            } else {
-                this._debugOption = Kiwi.DEBUG_ON;
-                Kiwi.Log.log(&#x27;  Kiwi.Game: Debug option not specified. Turned ON by default.&#x27;, &#x27;#debugging&#x27;);
-            }
-
-            if (options.bootCallback !== &#x27;undefined&#x27;) {
-                this.bootCallbackOption = options.bootCallback;
-            }
-
-            //Which device are they targetting
-            if (options.deviceTarget !== &#x27;undefined&#x27; &amp;&amp; typeof options.deviceTarget === &#x27;number&#x27;) {
-                switch (options.deviceTarget) {
-                    case Kiwi.TARGET_BROWSER:
-                        this._deviceTargetOption = options.deviceTarget;
-                        Kiwi.Log.log(&#x27;  Kiwi.Game: Targeting BROWSERS.&#x27;, &#x27;#target&#x27;);
-                        break;
-                    case Kiwi.TARGET_COCOON:
-                        this._deviceTargetOption = options.deviceTarget;
-                        Kiwi.Log.log(&#x27;  Kiwi.Game: Targeting COCOONJS.&#x27;, &#x27;#target&#x27;);
-                        break;
-                    default:
-                        this._deviceTargetOption = Kiwi.TARGET_BROWSER;
-                        Kiwi.Log.error(&#x27;  Kiwi.Game: Target device specified, but is not a valid option. Defaulting to BROWSER.&#x27;, &#x27;#target&#x27;);
-                        break;
-                }
-            } else {
-                this._deviceTargetOption = Kiwi.TARGET_BROWSER;
-                Kiwi.Log.log(&#x27;  Kiwi.Game: Targeted device not specified. Defaulting to BROWSER.&#x27;, &#x27;#target&#x27;); 
-            }
-
-            var renderDefault = Kiwi.RENDERER_WEBGL;
-            var renderFallback = Kiwi.RENDERER_CANVAS;
-            // Optimise renderer request
-            if (options.renderer !== &#x27;undefined&#x27; &amp;&amp; typeof options.renderer === &#x27;number&#x27;) {
-                switch (options.renderer) {
-                    case Kiwi.RENDERER_CANVAS:
-                        this._renderOption = options.renderer;
-                        Kiwi.Log.log(&#x27;  Kiwi.Game: Rendering using CANVAS.&#x27;, &#x27;#renderer&#x27;, &#x27;#canvas&#x27;);
-                        break;
-                    case Kiwi.RENDERER_WEBGL:
-                        if (Kiwi.DEVICE.webGL) {
-                            this._renderOption = options.renderer;
-                            Kiwi.Log.log(&#x27;  Kiwi.Game: Rendering using WEBGL.&#x27;, &#x27;#renderer&#x27;, &#x27;#webgl&#x27;);
-                        } else {
-                            this._renderOption = renderFallback;
-                            Kiwi.Log.log(&#x27;  Kiwi.Game: WEBGL renderer requested but device does not support WEBGL. Rendering using CANVAS.&#x27;, &#x27;#renderer&#x27;, &#x27;#canvas&#x27;);
-                        }
-                        break;
-                    case Kiwi.RENDERER_AUTO:
-                        if (Kiwi.DEVICE.webGL) {
-                            this._renderOption = renderDefault;
-                            Kiwi.Log.log(&#x27;  Kiwi.Game: Renderer auto-detected WEBGL.&#x27;, &#x27;#renderer&#x27;, &#x27;#webgl&#x27;);
-                        } else {
-                            this._renderOption = renderFallback;
-                            Kiwi.Log.log(&#x27;  Kiwi.Game: Renderer auto-detected CANVAS.&#x27;, &#x27;#renderer&#x27;, &#x27;#canvas&#x27;);
-                        }
-                        break;
-                    default:
-                        if (Kiwi.DEVICE.webGL) {
-                            this._renderOption = renderDefault;
-                            Kiwi.Log.log(&#x27;  Kiwi.Game: Renderer specified, but is not a valid option. Defaulting to WEBGL.&#x27;, &#x27;#renderer&#x27;, &#x27;#webgl&#x27;);
-                        } else {
-                            this._renderOption = renderFallback;
-                            Kiwi.Log.log(&#x27;  Kiwi.Game: Renderer specified, but is not a valid option. WEBGL renderer sought by default but device does not support WEBGL. Defaulting to CANVAS.&#x27;, &#x27;#renderer&#x27;, &#x27;#canvas&#x27;);
-                        }
-                        break;
-                }
-            } else {
-                if (Kiwi.DEVICE.webGL) {
-                    this._renderOption = renderDefault;
-                    Kiwi.Log.log(&#x27;  Kiwi.Game: Renderer not specified. Defaulting to WEBGL.&#x27;, &#x27;#renderer&#x27;, &#x27;#webgl&#x27;);
-                } else {
-                    this._renderOption = renderFallback;
-                    Kiwi.Log.log(&#x27;  Kiwi.Game: Renderer not specified. WEBGL renderer sought by default but device does not support WEBGL. Defaulting to CANVAS.&#x27;, &#x27;#renderer&#x27;, &#x27;#canvas&#x27;);
-                }
-            }
-            
-            
-            this.id = Kiwi.GameManager.register(this);
-            this._startup = new Kiwi.System.Bootstrap();
-
-            this.audio = new Kiwi.Sound.AudioManager(this);
-                
-            this.fileStore = new Kiwi.Files.FileStore(this);
-            this.input = new Kiwi.Input.InputManager(this);
-
-            // Width / Height
-            var width = Stage.DEFAULT_WIDTH;
-            var height = Stage.DEFAULT_HEIGHT;
-
-            if (options.width !== &#x27;undefined&#x27; &amp;&amp; typeof options.width === &#x27;number&#x27;) {
-                width = options.width;
-            }
-
-            if (options.height !== &#x27;undefined&#x27; &amp;&amp; typeof options.height === &#x27;number&#x27;) {
-                height = options.height;
-            }
-
-            Kiwi.Log.log(&#x27;  Kiwi.Game: Stage Dimensions: &#x27; + width + &#x27;x&#x27; + height, &#x27;#dimensions&#x27;);
-
-            
-            if ( !Kiwi.Utils.Common.isUndefined( options.scaleType ) ) {
-
-                switch (options.scaleType) {
-                    case Kiwi.Stage.SCALE_FIT:
-                        Kiwi.Log.log(&#x27;  Kiwi.Game: Stage scaling set to FIT.&#x27;, &#x27;#scaling&#x27;);
-                        break;
-                    case Kiwi.Stage.SCALE_STRETCH:
-                        Kiwi.Log.log(&#x27;  Kiwi.Game: Stage scaling set to STRETCH.&#x27;, &#x27;#scaling&#x27;);
-                        break;
-                    case Kiwi.Stage.SCALE_NONE:
-                        Kiwi.Log.log(&#x27;  Kiwi.Game: Stage scaling set to NONE.&#x27;, &#x27;#scaling&#x27;);
-                        break;
-                    default:
-                        Kiwi.Log.log(&#x27;  Kiwi.Game: Stage specified, but is not a valid option. Set to NONE.&#x27;, &#x27;#scaling&#x27;);
-                        options.scaleType = 0;
-                        break;
-                }
-
-            } else {
-                Kiwi.Log.log(&#x27;  Kiwi.Game: Stage scaling not specified, defaulting to NONE.&#x27;, &#x27;#scaling&#x27;);
-                options.scaleType = 0;
-            }
-
-
-            this.stage = new Kiwi.Stage(this, name, width, height, options.scaleType);
-
-            this.renderer = null;
-           
-            this.cameras = new Kiwi.CameraManager(this);
-
-            if (this._deviceTargetOption !== Kiwi.TARGET_COCOON) this.huds = new Kiwi.HUD.HUDManager(this);
-            this.loader = new Kiwi.Files.Loader(this);
-            
-            this.states = new Kiwi.StateManager(this);
-            this.rnd = new Kiwi.Utils.RandomDataGenerator([Date.now.toString()]);
-            this.time = new Kiwi.Time.ClockManager(this);
-            this.tweens = new Kiwi.Animations.Tweens.TweenManager(this);
-            
-            //  If we have a state then pass it to the StateManager
-            if (state !== null) {
-                this.states.addState(state, true);
-            } else {
-                Kiwi.Log.log(&#x27;  Kiwi.Game: Default State not passed.&#x27;, &#x27;#state&#x27;);
-            }
-
-            this.pluginManager = new Kiwi.PluginManager(this, options.plugins);
-
-            if (this.deviceTargetOption === Kiwi.TARGET_BROWSER) {
-
-                this._startup.boot( domParent, () =&gt; this._start() );
-            } else {
-                if (domParent !== &#x27;&#x27;) {
-                    Kiwi.Log.log(&#x27;  Kiwi.Game: Not Targetting a BROWSER. DOM Parent parameter ignored.&#x27;, &#x27;#dom&#x27;);
-                }
-                this._start();
-            }
-
-        }
-
-        /**
-        * The render mode of the game. This will be either set to CANVAS or WEBGL.
-        * @property _renderOption
-        * @type number
-        * @private
-        */
-        private _renderOption: number;
-
-        /**
-        * Returns the render mode of the game. This is READ ONLY and is decided once the game gets initialised.
-        * @property renderOption
-        * @type number
-        * @public
-        */
-        public get renderOption(): number {
-            return this._renderOption;
-        }
-
-        /**
-        * A callback function that can be passed in as an option in the conifugration object. Invoked after the boot process has completed.
-        * @property bootCallbackOption
-        * @type Function
-        * @private
-        */
-        public bootCallbackOption: Function;
-
-        /**
-        * The type of device that you are targeting. This is either set to COCOON or BROWSER
-        * @property _deviceTargetOption
-        * @type number
-        * @private
-        */
-        private _deviceTargetOption: number;
-
-        /**
-        * Returns the device target option for the game. This is READ ONLY and is decided once the game gets initialised.
-        * @property deviceTargetOption
-        * @type number
-        * @public
-        */
-        public get deviceTargetOption(): number {
-            return this._deviceTargetOption;
-        }
-
-        /**
-        * If when rendering, the game should render a new CANVAS which is above everything. This new canvas is for debugging purposes only.
-        * This gets set to either DEBUG_ON or DEBUG_OFF
-        * @property _debugOption
-        * @type number
-        * @private
-        */
-        private _debugOption: number;
-
-        /**
-        * Returns the debug option. This is READ ONLY and is decided once the game gets initialised.
-        * @property debugOption
-        * @type number
-        * @public
-        */
-        public get debugOption(): number {
-            return this._debugOption;
-        }
-
-        /**
-        * Returns true if debug option is set to Kiwi.DEBUG_ON
-        * @property debug
-        * @type boolean
-        * @public
-        */
-
-        public get debug(): boolean {
-            return this._debugOption === Kiwi.DEBUG_ON;
-        }
-
-        /**
-        * Holds the renderer that is being used. This is determined based on the _renderMode
-        * @property renderer
-        * @type IRenderManager
-        * @public
-        */
-        public renderer: IRenderManager;
-
-        /**
-        * Holds the hud manager.
-        * @property huds
-        * @type HUDManager
-        * @public
-        */
-        public huds: Kiwi.HUD.HUDManager;
-
-        /**
-        * The type of object that the game is.
-        * @method objType
-        * @return {String} &quot;Game&quot;
-        * @public
-        */
-        public objType() {
-            return &quot;Game&quot;;
-        }
-
-        /**
-        * The object that peforms DOM and device startup operations for browsers (ie not cocoon)
-        * @property _startup
-        * @type Kiwi.System.Bootstrap
-        * @private
-        */
-        private _startup: Kiwi.System.Bootstrap = null;
-
-        /*
-        * The unique id for the game. 
-        * @property id
-        * @type Number
-        * @public
-        */
-        public id: number;
-         
-        /**
-        * The audio manager that handles all of the audio in game. Inside you can globally mute the audio, create new sounds, e.t.c.
-        * @property audio
-        * @type Kiwi.Sound.AudioManager
-        * @public
-        */
-        public audio: Kiwi.Sound.AudioManager = null;
-
-        /**
-        * The global file store for this game. This handles the storage and access of information loaded, as well as tags that maybe set for them individual files.
-        * @property fileStore
-        * @type Kiwi.Files.FileStore
-        * @public
-        */
-        public fileStore: Kiwi.Files.FileStore = null;
-
-        /**
-        * Handles any user input with the game. These could via the users keyboard, mouse or touch events.
-        * @property input
-        * @type Kiwi.Input.InputManager
-        * @public
-        */
-        public input: Kiwi.Input.InputManager = null;
-         
-        /**
-        * Manages the cameras the are on the stage. Single default Camera only in this version.
-        * @property cameras
-        * @type Kiwi.CameraManager
-        * @public
-        */
-        public cameras: Kiwi.CameraManager = null;
-
-        /**
-        * Manages plugins registration and initialisation for the game instance.
-        * @property pluginManager
-        * @type Kiwi.PluginManager
-        * @public
-        */
-        public pluginManager: Kiwi.PluginManager = null;
-
-        /**
-        * Loads files from outside sources and checks to see that they have loaded correctly or not.
-        * @property loader
-        * @type Kiwi.Files.Loader
-        * @public
-        */
-        public loader: Kiwi.Files.Loader = null;
-
-        /**
-        * The Request Animation Frame that is being used for the update and render loops.
-        * @property raf
-        * @type Kiwi.Utils.RequestAnimationFrame
-        * @public
-        */
-        public raf: Kiwi.Utils.RequestAnimationFrame = null;
-
-        /**
-        * The ONLY stage that is being used for this game.
-        * @property stage
-        * @type Stage
-        * @public
-        */
-        public stage: Kiwi.Stage = null;
-
-        /**
-        * Manages all of the states that exist for this game. Via the manager you can create new states, switch states and do various other tasks.
-        * @property states
-        * @type Kiwi.StateManager
-        * @public
-        */
-        public states: Kiwi.StateManager = null;
-
-        /**
-        * Holds a reference to the clocks that are being used and has a MASTER clock that is being used for the game.
-        * @property time
-        * @type Kiwi.Time.ClockManager
-        * @public
-        */
-        public time: Kiwi.Time.ClockManager = null;
-
-        /**
-        * The tween manager holds a reference to all of the tweens that are created and currently being used. 
-        * @property tweens
-        * @type Kiwi.Animations.Tweens.TweenManager
-        * @public
-        */
-        public tweens: Kiwi.Animations.Tweens.TweenManager = null;
-
-        /**
-        * A Random Data Generator. This is useful for create unique ids and random information.
-        * @property rnd
-        * @type Kiwi.Utils.RandomDataGenerato
-        * @public
-        */
-        public rnd: Kiwi.Utils.RandomDataGenerator = null;
-        
-        /**
-        * The framerate at which the game will update at.
-        * @property _framerate
-        * @type Number
-        * @default 60
-        * @public
-        */
-        private _frameRate: number = 60;
-
-        /**
-        * The interval between frames.
-        * @property _interval
-        * @type Number
-        * @default 1000/60
-        * @private
-        */
-        private _interval: number = 1000 / 60;
-
-        /**
-        * The current interval between frames.
-        * @property _delta
-        * @type number
-        * @private
-        */
-        private _delta: number = 0;
-
-        /**
-        * The last time the game was updated
-        * @property _lastTime
-        * @type number
-        * @private
-        */
-        private _lastTime: number;
-
-        /**
-        * The number of frames since the game was launched.
-        * @property _frame
-        * @type number
-        * @private
-        * @since 1.1.0
-        */
-        private _frame: number = 0;
-
-        /**
-        * The number of frames since the game was launched.
-        * 
-        * Use this to drive cyclic animations. You may manually reset it in a Kiwi.State.create() function to restart the count from 0.
-        *
-        * The largest exact integer value of a JavaScript number is 2^53, or 9007199254740992. At 60 frames per second, this will take 4,760,273 years to become inaccurate.
-        * @property frame
-        * @type number
-        * @public
-        * @since 1.1.0
-        */
-        public get frame(): number {
-            return( this._frame );
-        }
-        public set frame( value: number ) {
-            this._frame = Kiwi.Utils.GameMath.truncate( value );
-        }
-
-        /**
-        * The number of ideal frames since the game was launched.
-        *
-        * Use this to drive cyclic animations. This will be smoother than using the frame parameter. It is derived from the total time elapsed since the game launched.
-        * @property idealFrame
-        * @type number
-        * @public
-        * @since 1.1.0
-        */
-        public get idealFrame(): number {
-            return (this.time.elapsed() / (1000 / this._frameRate) );
-        }
-
-
-        /**
-        * The current frameRate that the update/render loops are running at. Note that this may not be an  accurate representation.
-        * @property frameRate
-        * @return string
-        * @public
-        */
-        public get frameRate(): number {
-
-            return this._frameRate;
-        }
-        public set frameRate(value: number) {
-            if (value &gt; 0) {
-                this._frameRate = value;
-                this._interval = 1000 / this._frameRate;
-                this.time.setMasterInterval( this._interval );
-            }
-        }
-
-        /**
-        * The start method gets executed when the game is ready to be booted, and handles the start-up of the managers.
-        * Once the managers have started up the start loop will then begin to create the game loop.
-        * @method start
-        * @private
-        */
-        private _start() {
-
-     
-            this.stage.boot(this._startup);
-
-            if (!this.stage.renderer) Kiwi.Log.error( &quot;  Kiwi.Game: Could not create rendering context&quot;, &#x27;#renderer&#x27; );
-            if(this._renderOption === Kiwi.RENDERER_WEBGL  &amp;&amp;  this.stage.ctx)
-                this._renderOption = Kiwi.RENDERER_CANVAS;  // Adapt to fallback if WebGL failed
-            this.renderer = this.stage.renderer;
-            this.renderer.boot();
-            
-            this.cameras.boot();
-            if (this._deviceTargetOption !== Kiwi.TARGET_COCOON) this.huds.boot();
-            
-            this.time.boot();
-            this.input.boot();
-            this.audio.boot();
-          
-            this.fileStore.boot();
-            this.loader.boot();
-            this.states.boot();
-
-            this.pluginManager.boot();
-
-            this._lastTime = Date.now();
-            
-            this.raf = new Kiwi.Utils.RequestAnimationFrame( () =&gt; this._loop() );
-            this.raf.start();
-
-            if (this.bootCallbackOption) {
-                Kiwi.Log.log(&quot;  Kiwi.Game: invoked boot callback&quot;, &#x27;#boot&#x27;);
-                this.bootCallbackOption( this );
-            }
-        }
-        
-        /**
-        * The game loop. 
-        * @method _loop
-        * @private
-        */
-        private _loop() {
-            
-            this._delta = this.raf.currentTime - this._lastTime;
-            if (this._delta &gt; this._interval) {
-
-                //Only update if there is a current state
-                this.time.update();
-                this.audio.update();
-                this.input.update();
-                this.tweens.update();
-                this.cameras.update();
-                if (this._deviceTargetOption !== Kiwi.TARGET_COCOON) this.huds.update();
-                this.states.update();
-                this.pluginManager.update();
-                this._frame++;
-
-                if (this.states.current !== null) {
-                    this.cameras.render();
-                    this.states.postRender();
-                }
-
-                this._lastTime = this.raf.currentTime - (this._delta % this._interval);
-            }
-        }
-
-    }
+	/**
+	* The base class that is used when you create a new Game. Handles the initialisation of all of the various individual game managers and holds the RAF (RequestAnimationFrame object) which is used for the game loop.
+	*
+	* @class Game
+	* @namespace Kiwi
+	* @constructor
+	* @param [domParent=&#x27;&#x27;] {String} The ID of a DOM element that the game should use as its &#x27;container&#x27;. If you are targeting Cocoon then you don&#x27;t need to worry about this and can leave it blank.
+	* @param [name=&#x27;KiwiGame&#x27;] {String} The name of the game that is being created. 
+	* @param [state=null] {Any} The state to load initially. This can either be the name of a state, but preferably this would be the state object itself.
+	* @param [options] {Object} Any special options for the game. E.g. Is DEBUG_ON or DEBUG_OFF, RENDERER_CANVAS or RENDERER_WEBGL, TARGET_BROWSER or TARGET_COCOON
+	*   @param [options.debug=Kiwi.DEBUG_ON] {Number} If debugging is enabled or not.
+	*   @param [options.bootCallback=null] {Function} A callback to be executed when the game reaches the boot stage.
+	*   @param [options.deviceTarget=Kiwi.TARGET_BROWSER] {Number} The type of device Kiwi is being used on.
+	*   @param [options.renderer=Kiwi.RENDERER_AUTO] {Number} The renderer Kiwi should use. 
+	*   @param [options.width=Kiwi.Stage.DEFAULT_WIDTH] {Number} The width of this instance of Kiwi.
+	*   @param [options.height=Kiwi.Stage.DEFAULT_HEIGHT] {Number} The height of this instance of Kiwi.
+	*   @param [options.scaleType=Kiwi.Stage.SCALE_NONE] {Number} The type of scaling that should be applied to Kiwi.
+	*   @param [options.plugins=[]] {Array} A list of the names of plugins that are to be used with this game.
+	*   @param [options.log] {Object} Default state of the Log properties
+	*       @param [options.log.recording=true] {Boolean} If the logs should be recorded.
+	*       @param [options.log.display=true] {Boolean} If the logs should be displayed or not.
+	*       @param [options.log.enabled=true] {Boolean} If the Logger is enabled at all.
+	*       @param [options.log.maxRecordings=Infinity] {Number} The maximum number of recordings to have at a single time.
+	* @return {Kiwi.Game}
+	* 
+	*/
+	export class Game {
+
+		constructor(domParent: string = &#x27;&#x27;, name: string = &#x27;KiwiGame&#x27;, state: any = null, options: any= {}) {
+
+			Kiwi.Log.setDefaultsFromParams(options.log); 
+			Kiwi.Log.log(&#x27;Kiwi.Game: &#x27; + name + &#x27; is booting using Kiwi.js &#x27; + Kiwi.VERSION, &#x27;#version&#x27;);
+
+			if (Kiwi.DEVICE === null) { 
+				Kiwi.DEVICE = new Kiwi.System.Device();
+			}
+
+			if (options.debug !== &#x27;undefined&#x27; &amp;&amp; typeof options.debug === &#x27;number&#x27;) {
+				switch (options.debug) {
+					case Kiwi.DEBUG_ON:
+						this._debugOption = options.debug;
+						Kiwi.Log.log(&#x27;  Kiwi.Game: Debugging turned ON.&#x27;, &#x27;#debugging&#x27; );
+						break;
+					case Kiwi.DEBUG_OFF:
+						this._debugOption = options.debug;
+						Kiwi.Log.log(&#x27;  Kiwi.Game: Debugging turned OFF.&#x27;, &#x27;#debugging&#x27; );
+						break;
+					default:
+						this._debugOption = Kiwi.DEBUG_ON;
+						Kiwi.Log.error(&#x27;  Kiwi.Game: Debug option passed, but is not a valid option. Turned ON by default.&#x27;, &#x27;#debugging&#x27; );
+						break;
+				}
+			} else {
+				this._debugOption = Kiwi.DEBUG_ON;
+				Kiwi.Log.log(&#x27;  Kiwi.Game: Debug option not specified. Turned ON by default.&#x27;, &#x27;#debugging&#x27;);
+			}
+
+			if (options.bootCallback !== &#x27;undefined&#x27;) {
+				this.bootCallbackOption = options.bootCallback;
+			}
+
+			//Which device are they targetting
+			if (options.deviceTarget !== &#x27;undefined&#x27; &amp;&amp; typeof options.deviceTarget === &#x27;number&#x27;) {
+				switch (options.deviceTarget) {
+					case Kiwi.TARGET_BROWSER:
+						this._deviceTargetOption = options.deviceTarget;
+						Kiwi.Log.log(&#x27;  Kiwi.Game: Targeting BROWSERS.&#x27;, &#x27;#target&#x27;);
+						break;
+					case Kiwi.TARGET_COCOON:
+						this._deviceTargetOption = options.deviceTarget;
+						Kiwi.Log.log(&#x27;  Kiwi.Game: Targeting COCOONJS.&#x27;, &#x27;#target&#x27;);
+						break;
+					default:
+						this._deviceTargetOption = Kiwi.TARGET_BROWSER;
+						Kiwi.Log.error(&#x27;  Kiwi.Game: Target device specified, but is not a valid option. Defaulting to BROWSER.&#x27;, &#x27;#target&#x27;);
+						break;
+				}
+			} else {
+				this._deviceTargetOption = Kiwi.TARGET_BROWSER;
+				Kiwi.Log.log(&#x27;  Kiwi.Game: Targeted device not specified. Defaulting to BROWSER.&#x27;, &#x27;#target&#x27;); 
+			}
+
+			var renderDefault = Kiwi.RENDERER_WEBGL;
+			var renderFallback = Kiwi.RENDERER_CANVAS;
+			// Optimise renderer request
+			if (options.renderer !== &#x27;undefined&#x27; &amp;&amp; typeof options.renderer === &#x27;number&#x27;) {
+				switch (options.renderer) {
+					case Kiwi.RENDERER_CANVAS:
+						this._renderOption = options.renderer;
+						Kiwi.Log.log(&#x27;  Kiwi.Game: Rendering using CANVAS.&#x27;, &#x27;#renderer&#x27;, &#x27;#canvas&#x27;);
+						break;
+					case Kiwi.RENDERER_WEBGL:
+						if (Kiwi.DEVICE.webGL) {
+							this._renderOption = options.renderer;
+							Kiwi.Log.log(&#x27;  Kiwi.Game: Rendering using WEBGL.&#x27;, &#x27;#renderer&#x27;, &#x27;#webgl&#x27;);
+						} else {
+							this._renderOption = renderFallback;
+							Kiwi.Log.log(&#x27;  Kiwi.Game: WEBGL renderer requested but device does not support WEBGL. Rendering using CANVAS.&#x27;, &#x27;#renderer&#x27;, &#x27;#canvas&#x27;);
+						}
+						break;
+					case Kiwi.RENDERER_AUTO:
+						if (Kiwi.DEVICE.webGL) {
+							this._renderOption = renderDefault;
+							Kiwi.Log.log(&#x27;  Kiwi.Game: Renderer auto-detected WEBGL.&#x27;, &#x27;#renderer&#x27;, &#x27;#webgl&#x27;);
+						} else {
+							this._renderOption = renderFallback;
+							Kiwi.Log.log(&#x27;  Kiwi.Game: Renderer auto-detected CANVAS.&#x27;, &#x27;#renderer&#x27;, &#x27;#canvas&#x27;);
+						}
+						break;
+					default:
+						if (Kiwi.DEVICE.webGL) {
+							this._renderOption = renderDefault;
+							Kiwi.Log.log(&#x27;  Kiwi.Game: Renderer specified, but is not a valid option. Defaulting to WEBGL.&#x27;, &#x27;#renderer&#x27;, &#x27;#webgl&#x27;);
+						} else {
+							this._renderOption = renderFallback;
+							Kiwi.Log.log(&#x27;  Kiwi.Game: Renderer specified, but is not a valid option. WEBGL renderer sought by default but device does not support WEBGL. Defaulting to CANVAS.&#x27;, &#x27;#renderer&#x27;, &#x27;#canvas&#x27;);
+						}
+						break;
+				}
+			} else {
+				if (Kiwi.DEVICE.webGL) {
+					this._renderOption = renderDefault;
+					Kiwi.Log.log(&#x27;  Kiwi.Game: Renderer not specified. Defaulting to WEBGL.&#x27;, &#x27;#renderer&#x27;, &#x27;#webgl&#x27;);
+				} else {
+					this._renderOption = renderFallback;
+					Kiwi.Log.log(&#x27;  Kiwi.Game: Renderer not specified. WEBGL renderer sought by default but device does not support WEBGL. Defaulting to CANVAS.&#x27;, &#x27;#renderer&#x27;, &#x27;#canvas&#x27;);
+				}
+			}
+
+
+			this.id = Kiwi.GameManager.register(this);
+			this._startup = new Kiwi.System.Bootstrap();
+
+			this.audio = new Kiwi.Sound.AudioManager(this);
+
+			this.fileStore = new Kiwi.Files.FileStore(this);
+			this.input = new Kiwi.Input.InputManager(this);
+
+			// Width / Height
+			var width = Stage.DEFAULT_WIDTH;
+			var height = Stage.DEFAULT_HEIGHT;
+
+			if (options.width !== &#x27;undefined&#x27; &amp;&amp; typeof options.width === &#x27;number&#x27;) {
+				width = options.width;
+			}
+
+			if (options.height !== &#x27;undefined&#x27; &amp;&amp; typeof options.height === &#x27;number&#x27;) {
+				height = options.height;
+			}
+
+			Kiwi.Log.log(&#x27;  Kiwi.Game: Stage Dimensions: &#x27; + width + &#x27;x&#x27; + height, &#x27;#dimensions&#x27;);
+
+			
+			if ( !Kiwi.Utils.Common.isUndefined( options.scaleType ) ) {
+
+				switch (options.scaleType) {
+					case Kiwi.Stage.SCALE_FIT:
+						Kiwi.Log.log(&#x27;  Kiwi.Game: Stage scaling set to FIT.&#x27;, &#x27;#scaling&#x27;);
+						break;
+					case Kiwi.Stage.SCALE_STRETCH:
+						Kiwi.Log.log(&#x27;  Kiwi.Game: Stage scaling set to STRETCH.&#x27;, &#x27;#scaling&#x27;);
+						break;
+					case Kiwi.Stage.SCALE_NONE:
+						Kiwi.Log.log(&#x27;  Kiwi.Game: Stage scaling set to NONE.&#x27;, &#x27;#scaling&#x27;);
+						break;
+					default:
+						Kiwi.Log.log(&#x27;  Kiwi.Game: Stage specified, but is not a valid option. Set to NONE.&#x27;, &#x27;#scaling&#x27;);
+						options.scaleType = 0;
+						break;
+				}
+
+			} else {
+				Kiwi.Log.log(&#x27;  Kiwi.Game: Stage scaling not specified, defaulting to NONE.&#x27;, &#x27;#scaling&#x27;);
+				options.scaleType = 0;
+			}
+
+
+			this.stage = new Kiwi.Stage(this, name, width, height, options.scaleType);
+
+			this.renderer = null;
+
+			this.cameras = new Kiwi.CameraManager(this);
+
+			if (this._deviceTargetOption !== Kiwi.TARGET_COCOON) this.huds = new Kiwi.HUD.HUDManager(this);
+			this.loader = new Kiwi.Files.Loader(this);
+
+			this.states = new Kiwi.StateManager(this);
+			this.rnd = new Kiwi.Utils.RandomDataGenerator([Date.now.toString()]);
+			this.time = new Kiwi.Time.ClockManager(this);
+			this.tweens = new Kiwi.Animations.Tweens.TweenManager(this);
+
+			//  If we have a state then pass it to the StateManager
+			if (state !== null) {
+				this.states.addState(state, true);
+			} else {
+				Kiwi.Log.log(&#x27;  Kiwi.Game: Default State not passed.&#x27;, &#x27;#state&#x27;);
+			}
+
+			this.pluginManager = new Kiwi.PluginManager(this, options.plugins);
+
+			if (this.deviceTargetOption === Kiwi.TARGET_BROWSER) {
+
+				this._startup.boot( domParent, () =&gt; this._start() );
+			} else {
+				if (domParent !== &#x27;&#x27;) {
+					Kiwi.Log.log(&#x27;  Kiwi.Game: Not Targetting a BROWSER. DOM Parent parameter ignored.&#x27;, &#x27;#dom&#x27;);
+				}
+				this._start();
+			}
+
+		}
+
+		/**
+		* The render mode of the game. This will be either set to CANVAS or WEBGL.
+		* @property _renderOption
+		* @type number
+		* @private
+		*/
+		private _renderOption: number;
+
+		/**
+		* Returns the render mode of the game. This is READ ONLY and is decided once the game gets initialised.
+		* @property renderOption
+		* @type number
+		* @public
+		*/
+		public get renderOption(): number {
+			return this._renderOption;
+		}
+
+		/**
+		* A callback function that can be passed in as an option in the conifugration object. Invoked after the boot process has completed.
+		* @property bootCallbackOption
+		* @type Function
+		* @private
+		*/
+		public bootCallbackOption: Function;
+
+		/**
+		* The type of device that you are targeting. This is either set to COCOON or BROWSER
+		* @property _deviceTargetOption
+		* @type number
+		* @private
+		*/
+		private _deviceTargetOption: number;
+
+		/**
+		* Returns the device target option for the game. This is READ ONLY and is decided once the game gets initialised.
+		* @property deviceTargetOption
+		* @type number
+		* @public
+		*/
+		public get deviceTargetOption(): number {
+			return this._deviceTargetOption;
+		}
+
+		/**
+		* If when rendering, the game should render a new CANVAS which is above everything. This new canvas is for debugging purposes only.
+		* This gets set to either DEBUG_ON or DEBUG_OFF
+		* @property _debugOption
+		* @type number
+		* @private
+		*/
+		private _debugOption: number;
+
+		/**
+		* Returns the debug option. This is READ ONLY and is decided once the game gets initialised.
+		* @property debugOption
+		* @type number
+		* @public
+		*/
+		public get debugOption(): number {
+			return this._debugOption;
+		}
+
+		/**
+		* Returns true if debug option is set to Kiwi.DEBUG_ON
+		* @property debug
+		* @type boolean
+		* @public
+		*/
+
+		public get debug(): boolean {
+			return this._debugOption === Kiwi.DEBUG_ON;
+		}
+
+		/**
+		* Holds the renderer that is being used. This is determined based on the _renderMode
+		* @property renderer
+		* @type IRenderManager
+		* @public
+		*/
+		public renderer: IRenderManager;
+
+		/**
+		* Holds the hud manager.
+		* @property huds
+		* @type HUDManager
+		* @public
+		*/
+		public huds: Kiwi.HUD.HUDManager;
+
+		/**
+		* The type of object that the game is.
+		* @method objType
+		* @return {String} &quot;Game&quot;
+		* @public
+		*/
+		public objType() {
+			return &quot;Game&quot;;
+		}
+
+		/**
+		* The object that peforms DOM and device startup operations for browsers (ie not cocoon)
+		* @property _startup
+		* @type Kiwi.System.Bootstrap
+		* @private
+		*/
+		private _startup: Kiwi.System.Bootstrap = null;
+
+		/*
+		* The unique id for the game. 
+		* @property id
+		* @type Number
+		* @public
+		*/
+		public id: number;
+
+		/**
+		* The audio manager that handles all of the audio in game. Inside you can globally mute the audio, create new sounds, e.t.c.
+		* @property audio
+		* @type Kiwi.Sound.AudioManager
+		* @public
+		*/
+		public audio: Kiwi.Sound.AudioManager = null;
+
+		/**
+		* The global file store for this game. This handles the storage and access of information loaded, as well as tags that maybe set for them individual files.
+		* @property fileStore
+		* @type Kiwi.Files.FileStore
+		* @public
+		*/
+		public fileStore: Kiwi.Files.FileStore = null;
+
+		/**
+		* Handles any user input with the game. These could via the users keyboard, mouse or touch events.
+		* @property input
+		* @type Kiwi.Input.InputManager
+		* @public
+		*/
+		public input: Kiwi.Input.InputManager = null;
+
+		/**
+		* Manages the cameras the are on the stage. Single default Camera only in this version.
+		* @property cameras
+		* @type Kiwi.CameraManager
+		* @public
+		*/
+		public cameras: Kiwi.CameraManager = null;
+
+		/**
+		* Manages plugins registration and initialisation for the game instance.
+		* @property pluginManager
+		* @type Kiwi.PluginManager
+		* @public
+		*/
+		public pluginManager: Kiwi.PluginManager = null;
+
+		/**
+		* Loads files from outside sources and checks to see that they have loaded correctly or not.
+		* @property loader
+		* @type Kiwi.Files.Loader
+		* @public
+		*/
+		public loader: Kiwi.Files.Loader = null;
+
+		/**
+		* The Request Animation Frame that is being used for the update and render loops.
+		* @property raf
+		* @type Kiwi.Utils.RequestAnimationFrame
+		* @public
+		*/
+		public raf: Kiwi.Utils.RequestAnimationFrame = null;
+
+		/**
+		* The ONLY stage that is being used for this game.
+		* @property stage
+		* @type Stage
+		* @public
+		*/
+		public stage: Kiwi.Stage = null;
+
+		/**
+		* Manages all of the states that exist for this game. Via the manager you can create new states, switch states and do various other tasks.
+		* @property states
+		* @type Kiwi.StateManager
+		* @public
+		*/
+		public states: Kiwi.StateManager = null;
+
+		/**
+		* Holds a reference to the clocks that are being used and has a MASTER clock that is being used for the game.
+		* @property time
+		* @type Kiwi.Time.ClockManager
+		* @public
+		*/
+		public time: Kiwi.Time.ClockManager = null;
+
+		/**
+		* The tween manager holds a reference to all of the tweens that are created and currently being used. 
+		* @property tweens
+		* @type Kiwi.Animations.Tweens.TweenManager
+		* @public
+		*/
+		public tweens: Kiwi.Animations.Tweens.TweenManager = null;
+
+		/**
+		* A Random Data Generator. This is useful for create unique ids and random information.
+		* @property rnd
+		* @type Kiwi.Utils.RandomDataGenerato
+		* @public
+		*/
+		public rnd: Kiwi.Utils.RandomDataGenerator = null;
+
+		/**
+		* The framerate at which the game will update at.
+		* @property _framerate
+		* @type Number
+		* @default 60
+		* @public
+		*/
+		private _frameRate: number = 60;
+
+		/**
+		* The interval between frames.
+		* @property _interval
+		* @type Number
+		* @default 1000/60
+		* @private
+		*/
+		private _interval: number = 1000 / 60;
+
+		/**
+		* The current interval between frames.
+		* @property _delta
+		* @type number
+		* @private
+		*/
+		private _delta: number = 0;
+
+		/**
+		* The last time the game was updated
+		* @property _lastTime
+		* @type number
+		* @private
+		*/
+		private _lastTime: number;
+
+		/**
+		* The number of frames since the game was launched.
+		* @property _frame
+		* @type number
+		* @private
+		* @since 1.1.0
+		*/
+		private _frame: number = 0;
+
+		/**
+		* The number of frames since the game was launched.
+		* 
+		* Use this to drive cyclic animations. You may manually reset it in a Kiwi.State.create() function to restart the count from 0.
+		*
+		* The largest exact integer value of a JavaScript number is 2^53, or 9007199254740992. At 60 frames per second, this will take 4,760,273 years to become inaccurate.
+		* @property frame
+		* @type number
+		* @public
+		* @since 1.1.0
+		*/
+		public get frame(): number {
+			return( this._frame );
+		}
+		public set frame( value: number ) {
+			this._frame = Kiwi.Utils.GameMath.truncate( value );
+		}
+
+		/**
+		* The number of ideal frames since the game was launched.
+		*
+		* Use this to drive cyclic animations. This will be smoother than using the frame parameter. It is derived from the total time elapsed since the game launched.
+		* @property idealFrame
+		* @type number
+		* @public
+		* @since 1.1.0
+		*/
+		public get idealFrame(): number {
+			return (this.time.elapsed() / (1000 / this._frameRate) );
+		}
+
+
+		/**
+		* The current frameRate that the update/render loops are running at. Note that this may not be an  accurate representation.
+		* @property frameRate
+		* @return string
+		* @public
+		*/
+		public get frameRate(): number {
+
+			return this._frameRate;
+		}
+		public set frameRate(value: number) {
+			if (value &gt; 0) {
+				this._frameRate = value;
+				this._interval = 1000 / this._frameRate;
+				this.time.setMasterInterval( this._interval );
+			}
+		}
+
+		/**
+		* The start method gets executed when the game is ready to be booted, and handles the start-up of the managers.
+		* Once the managers have started up the start loop will then begin to create the game loop.
+		* @method start
+		* @private
+		*/
+		private _start() {
+
+
+			this.stage.boot(this._startup);
+
+			if (!this.stage.renderer) Kiwi.Log.error( &quot;  Kiwi.Game: Could not create rendering context&quot;, &#x27;#renderer&#x27; );
+			if(this._renderOption === Kiwi.RENDERER_WEBGL  &amp;&amp;  this.stage.ctx)
+				this._renderOption = Kiwi.RENDERER_CANVAS;  // Adapt to fallback if WebGL failed
+			this.renderer = this.stage.renderer;
+			this.renderer.boot();
+
+			this.cameras.boot();
+			if (this._deviceTargetOption !== Kiwi.TARGET_COCOON) this.huds.boot();
+
+			this.time.boot();
+			this.input.boot();
+			this.audio.boot();
+
+			this.fileStore.boot();
+			this.loader.boot();
+			this.states.boot();
+
+			this.pluginManager.boot();
+
+			this._lastTime = Date.now();
+
+			this.raf = new Kiwi.Utils.RequestAnimationFrame( () =&gt; this._loop() );
+			this.raf.start();
+
+			if (this.bootCallbackOption) {
+				Kiwi.Log.log(&quot;  Kiwi.Game: invoked boot callback&quot;, &#x27;#boot&#x27;);
+				this.bootCallbackOption( this );
+			}
+		}
+
+		/**
+		* The game loop. 
+		* @method _loop
+		* @private
+		*/
+		private _loop() {
+			
+			this._delta = this.raf.currentTime - this._lastTime;
+			if (this._delta &gt; this._interval) {
+
+				//Only update if there is a current state
+				this.time.update();
+				this.audio.update();
+				this.input.update();
+				this.tweens.update();
+				this.cameras.update();
+				if (this._deviceTargetOption !== Kiwi.TARGET_COCOON) this.huds.update();
+				this.states.update();
+				this.pluginManager.update();
+				this._frame++;
+
+				if (this.states.current !== null) {
+					this.cameras.render();
+					this.states.postRender();
+				}
+
+				this._lastTime = this.raf.currentTime - (this._delta % this._interval);
+			}
+		}
+
+	}
 
 }
+
     </pre>
 </div>
 
diff --git a/docs/files/src_core_Group.ts.html b/docs/files/src_core_Group.ts.html
index 0b1e5ed..1d581f8 100644
--- a/docs/files/src_core_Group.ts.html
+++ b/docs/files/src_core_Group.ts.html
@@ -372,1308 +372,1307 @@ <h1 class="file-heading">File: src/core/Group.ts</h1>
 
 module Kiwi {
 
-    /**
-    * The group class is central to creating the scene graph that contains all objects in a state. A group can contain entities or other groups, thereby enabling a nested tree scene graph.
-    * The members of the Group&#x27;s coordinates are also in relation to the Group that they were added to. So if you moved an entire Group, each member of that Group would also &#x27;move&#x27;.
-    * 
-    * @class Group
-    * @namespace Kiwi
-    * @constructor
-    * @param state {Kiwi.State} The State that this Group is a part of.
-    * @param [name=&#x27;&#x27;] {String} The name of this group. 
-    * @return {Kiwi.Group}
-    * 
-    */
-    export class Group implements Kiwi.IChild {
-         
-        constructor(state: Kiwi.State, name: string = &#x27;&#x27;) {
-
-            //prevents the state going AHHH...since the state extends group.
-            if (state !== null) {
-                this.state = state;
-                this.game = this.state.game;
-                this.id = this.game.rnd.uuid();
-                this.state.addToTrackingList(this);
-            }
-
-            //  Properties
-            this.name = name;
-            this.components = new Kiwi.ComponentManager(Kiwi.GROUP, this);
-
-            this._exists = true;
-            this._active = true;
-            this._visible = true;
-
-            this.transform = new Kiwi.Geom.Transform();
-            this.members = [];
-        }
-
-        /**
-        * Returns the type of this object
-        * @method objType
-        * @return {String} &quot;Group&quot;
-        * @public
-        */
-        public objType(): string {
-            return &quot;Group&quot;;
-        }
-
-        /*
-        * Represents the type of child that this is. 
-        * @method childType
-        * @return number
-        * @public
-        */
-        public childType(): number {
-            return Kiwi.GROUP;
-        }
-
-        /**
-        * A name for this Group. This is not checked for uniqueness within the Game, but is very useful for debugging.
-        * @property name
-        * @type string
-        * @default &#x27;&#x27;
-        * @public
-        */
-        public name: string = &#x27;&#x27;;
-
-        /**
-        * The transform object for this group. 
-        * Transform handles the calculation of coordinates/rotation/scale e.t.c in the Game World.
-        * @property transform
-        * @type Kiwi.Geom.Transform
-        * @public
-        */
-        public transform: Kiwi.Geom.Transform;
-
-        /**
-        * The parent group of this group.
-        * @property _parent
-        * @type Kiwi.Group
-        * @private
-        */
-        private _parent: Kiwi.Group = null;
-
-        /**
-        * Set&#x27;s the parent of this entity. Note that this also sets the transforms parent of this entity to be the passed groups transform.
-        * @property parent
-        * @type Kiwi.Group
-        * @public
-        */
-        public set parent(val: Kiwi.Group) {
-            //check to see if the parent is not an descendor
-            //if (this.containsDescendant(val) === false) {
-                this.transform.parent = (val !== null) ? val.transform : null;
-                this._parent = val;
-            //}
-        }
-        public get parent(): Kiwi.Group {
-            return this._parent;
-        }
-
-        /**
-        * The X coordinate of this group. This is just aliased to the transform property.
-        * @property x
-        * @type Number
-        * @public
-        */
-        public get x(): number {
-            return this.transform.x;
-        }
-        public set x(value: number) {
-            this.transform.x = value;
-        }
-
-        /**
-        * The Y coordinate of this group. This is just aliased to the transform property.
-        * @property y
-        * @type Number
-        * @public
-        */
-        public get y(): number {
-            return this.transform.y;
-        }
-        public set y(value: number) {
-            this.transform.y = value;
-        }
-
-        /**
-        * The X coordinate of this group in world space; that is, after parent transforms. This is just aliased to the transform property. This is READ-ONLY.
-        * @property worldX
-        * @type number
-        * @public
-        * @since 1.1.0
-        */
-        public get worldX(): number {
-            return this.transform.worldX;
-        }
-
-        /**
-        * The Y coordinate of this group in world space; that is, after parent transforms. This is just aliased to the transform property. This is READ-ONLY.
-        * @property worldY
-        * @type number
-        * @public
-        * @since 1.1.0
-        */
-        public get worldY(): number {
-            return this.transform.worldY;
-        }
-
-        /*
-        * The Scale X of this group. This is just aliased to the transform property.
-        * @property scaleX
-        * @type Number
-        * @public
-        */
-        public get scaleX(): number {
-            return this.transform.scaleX;
-        }
-        public set scaleX(value: number) {
-            this.transform.scaleX = value;
-        }
-
-        /*
-        * The Scale Y coordinate of this group. This is just aliased to the transform property.
-        * @property scaleY
-        * @type Number
-        * @public
-        */
-        public get scaleY(): number {
-            return this.transform.scaleY;
-        }
-        public set scaleY(value: number) {
-            this.transform.scaleY = value;
-        }
-
-        /**
-        * The scale of this group. This is just aliased to the transform property. This is WRITE-ONLY.
-        * @property scale
-        * @type number
-        * @public
-        * @since 1.1.0
-        */
-        public set scale(value: number) {
-            this.transform.scale = value;
-        }
-
-        /*
-        * The rotation of this group. This is just aliased to the transform property.
-        * @property rotation
-        * @type Number
-        * @public
-        */
-        public get rotation(): number {
-            return this.transform.rotation;
-        }
-        public set rotation(value: number) {
-            this.transform.rotation = value;
-        }
-
-        /**
-        * The rotation offset of this group in the X axis. This is just aliased to the transform property.
-        * @property rotPointX
-        * @type number
-        * @public
-        * @since 1.1.0
-        */
-        public get rotPointX(): number {
-            return this.transform.rotPointX;
-        }
-        public set rotPointX(value: number) {
-            this.transform.rotPointX = value;
-        }
-
-        /**
-        * The rotation offset of this group in the Y axis. This is just aliased to the transform property.
-        * @property rotPointY
-        * @type number
-        * @public
-        * @since 1.1.0
-        */
-        public get rotPointY(): number {
-            return this.transform.rotPointY;
-        }
-        public set rotPointY(value: number) {
-            this.transform.rotPointY = value;
-        }
-
-        /**
-        * The anchor point offset of this group in the X axis. This is just aliased to the transform property, and is in turn an alias of rotPointX.
-        * @property anchorPointX
-        * @type number
-        * @public
-        * @since 1.1.0
-        */
-        public get anchorPointX(): number {
-            return this.transform.anchorPointX;
-        }
-        public set anchorPointX(value: number) {
-            this.transform.anchorPointX = value;
-        }
-
-        /**
-        * The anchor point offset of this group in the Y axis. This is just aliased to the transform property, and is in turn an alias of rotPointY.
-        * @property anchorPointY
-        * @type number
-        * @public
-        * @since 1.1.0
-        */
-        public get anchorPointY(): number {
-            return this.transform.anchorPointY;
-        }
-        public set anchorPointY(value: number) {
-            this.transform.anchorPointY = value;
-        }
-
-        /**
-        * The Component Manager
-        * @property components
-        * @type Kiwi.ComponentManager
-        * @public
-        */
-        public components: Kiwi.ComponentManager;
-
-        /**
-        * The game this Group belongs to
-        * @property game
-        * @type Kiwi.Game
-        * @public
-        */
-        public game: Kiwi.Game = null;
-
-        /**
-        * The State that this Group belongs to
-        * @property state
-        * @type Kiwi.State
-        * @public
-        **/
-        public state: Kiwi.State = null;
-
-        /**
-        * A unique identifier for this Group within the game used internally by the framework. See the name property for a friendly version.
-        * @property id
-        * @type string
-        * @public
-        */
-        public id: string;
-        
-        /**
-        * The collection of children belonging to this group 
-        * @property members
-        * @type Array
-        * @public
-        */
-        public members: Kiwi.IChild[];
-        
-        /** 
-        * Returns the total number of children in this Group. Doesn&#x27;t distinguish between alive and dead children.
-        * @method numChildren
-        * @return {Number} The number of children in this Group
-        * @public
-        */
-        public numChildren(): number {
-            return this.members.length;
-        }
-
-        /**
-        * An indication of whether or not this group is &#x27;dirty&#x27; and thus needs to be re-rendered or not.
-        * @property _dirty
-        * @type boolean
-        * @private
-        */
-        private _dirty: boolean = true;
-
-        /**
-        * Sets all children of the Group to be dirty.
-        * @property dirty
-        * @type boolean
-        * @public
-        */
-        public set dirty(value: boolean) {
-            if (value !== undefined) {
-                this._dirty = value;
-
-                for (var i = 0; i &lt; this.members.length; i++) {
-                    this.members[i].dirty = value;
-                }
-            }
-        }
-        public get dirty(): boolean {
-            return this._dirty;
-        }
-
-        /**
-        * Checks if the given entity is in this group
-        * @method contains
-        * @param child {IChild} The IChild that you want to checked.
-        * @return {boolean} true if entity exists in group.
-        * @public
-        */
-        public contains(child: Kiwi.IChild): boolean {                                         // MAKE RECURSIVE
-            return (this.members.indexOf(child) === -1) ? false : true;
-        }
-
-        /**
-        * Checks to see if the given object is contained in this group as a descendant
-        * @method containsDescendant
-        * @param child {object} The IChild that you want to check.
-        * @return {boolean}
-        * @public
-        */
-        public containsDescendant(child: Kiwi.IChild): boolean {
-            for (var i = 0; i &lt; this.members.length; i++) {
-                var curMember: any = this.members[i];
-                if (curMember.id == child.id || curMember.childType() == Kiwi.Group &amp;&amp; curMember.containsDesendant(child)) {
-                    return true;
-                }
-            }
-            return false;
-        }
-
-        /**
-        * Checks to see if one child is an ansector of another child.
-        * @method containsAncestor
-        * @param descendant {object} The object that you are checking.
-        * @param ancestor {Group} The parent (ancestor) that you are checking for.
-        * @return {boolean}
-        * @public
-        */ 
-        public containsAncestor(descendant: Kiwi.IChild, ancestor:Kiwi.Group): boolean {
-            if (descendant.parent === null || descendant.parent === undefined) {
-                return false;   
-            }
-            if (descendant.parent == ancestor) return true; //desendants parent is the same? 
-            return descendant.parent.containsAncestor(descendant.parent, ancestor); //keep going up the chain.
-        }
-
-
-        /**
-        * -------------------------
-        * Add Children methods
-        * -------------------------
-        **/
-
-
-        /**
-        * Adds an Entity to this Group. The Entity must not already be in this Group.
-        * @method addChild
-        * @param child {object} The child to be added.
-        * @return {object} The child that was added.
-        * @public
-        */
-        public addChild(child: Kiwi.IChild): Kiwi.IChild {              
-
-            //Implement feature where you can pass as many children to be added. Modify this script to work via the &#x27;arguments&#x27; property
-
-            //make sure you aren&#x27;t adding a state or itself
-            if (child.childType() === Kiwi.STATE || child == this) return;
-
-            //make sure it is not itself.
-            if (child.parent !== null) 
-                child.parent.removeChild(child);
-            
-            //check to see if the child is already part of a group.
-            this.members.push(child);
-            child.parent = this;
-            
-            return child;
-        }
-         
-        /**
-        * Adds an Entity to this Group in the specific location. The Entity must not already be in this Group and it must be supported by the Group.
-        * @method addChildAt
-        * @param child {object} The child to be added.
-        * @param index {Number} The index the child will be set at.
-        * @return {object} The child.
-        * @public
-        */
-        public addChildAt(child: Kiwi.IChild, index: number): Kiwi.IChild {
-
-            if (child.childType() === Kiwi.STATE || child == this) return;
-
-            if (child.parent !== null) child.parent.removeChild(child);
-
-            this.members.splice(index, 0, child);
-            child.parent = this;
-
-            return child;
-        }
-
-        /**
-        * Adds an Entity to this Group before another child. 
-        * @method addChildBefore
-        * @param child {object} The child to be added.
-        * @param beforeChild {Entity} The child before which the child will be added.
-        * @return {object} The child.
-        * @public
-        */
-        public addChildBefore(child: Kiwi.IChild, beforeChild: Kiwi.IChild): Kiwi.IChild {                      
-
-            if (beforeChild.transform.parent === this.transform) {
-
-                if (child.parent !== null) child.parent.removeChild(child);
-
-                var index: number = this.getChildIndex( beforeChild );
-
-                this.members.splice(index, 0, child);
-                child.parent = this;
-            }
-
-            return child;
-
-        }
-
-        /**
-        * Adds an Entity to this Group after another child. 
-        * @method addChildAfter
-        * @param child {object} The child to be added.
-        * @param beforeChild {object} The child after which the child will be added.
-        * @return {object} The child.
-        * @public
-        */
-        public addChildAfter(child: Kiwi.IChild, afterChild: Kiwi.IChild): Kiwi.IChild {
-           
-            if (afterChild.transform.parent === this.transform) {
-
-                if (child.parent !== null) child.parent.removeChild(child);
-
-                var index: number = this.getChildIndex(afterChild) + 1;
-
-                this.members.splice(index, 0, child);
-                child.parent = this;
-            }
+	/**
+	* The group class is central to creating the scene graph that contains all objects in a state. A group can contain entities or other groups, thereby enabling a nested tree scene graph.
+	* The members of the Group&#x27;s coordinates are also in relation to the Group that they were added to. So if you moved an entire Group, each member of that Group would also &#x27;move&#x27;.
+	* 
+	* @class Group
+	* @namespace Kiwi
+	* @constructor
+	* @param state {Kiwi.State} The State that this Group is a part of.
+	* @param [name=&#x27;&#x27;] {String} The name of this group. 
+	* @return {Kiwi.Group}
+	* 
+	*/
+	export class Group implements Kiwi.IChild {
+
+		constructor(state: Kiwi.State, name: string = &#x27;&#x27;) {
+
+			//prevents the state going AHHH...since the state extends group.
+			if (state !== null) {
+				this.state = state;
+				this.game = this.state.game;
+				this.id = this.game.rnd.uuid();
+				this.state.addToTrackingList(this);
+			}
+
+			//  Properties
+			this.name = name;
+			this.components = new Kiwi.ComponentManager(Kiwi.GROUP, this);
+
+			this._exists = true;
+			this._active = true;
+			this._visible = true;
+
+			this.transform = new Kiwi.Geom.Transform();
+			this.members = [];
+		}
+
+		/**
+		* Returns the type of this object
+		* @method objType
+		* @return {String} &quot;Group&quot;
+		* @public
+		*/
+		public objType(): string {
+			return &quot;Group&quot;;
+		}
+
+		/*
+		* Represents the type of child that this is. 
+		* @method childType
+		* @return number
+		* @public
+		*/
+		public childType(): number {
+			return Kiwi.GROUP;
+		}
+
+		/**
+		* A name for this Group. This is not checked for uniqueness within the Game, but is very useful for debugging.
+		* @property name
+		* @type string
+		* @default &#x27;&#x27;
+		* @public
+		*/
+		public name: string = &#x27;&#x27;;
+
+		/**
+		* The transform object for this group. 
+		* Transform handles the calculation of coordinates/rotation/scale e.t.c in the Game World.
+		* @property transform
+		* @type Kiwi.Geom.Transform
+		* @public
+		*/
+		public transform: Kiwi.Geom.Transform;
+
+		/**
+		* The parent group of this group.
+		* @property _parent
+		* @type Kiwi.Group
+		* @private
+		*/
+		private _parent: Kiwi.Group = null;
+
+		/**
+		* Set&#x27;s the parent of this entity. Note that this also sets the transforms parent of this entity to be the passed groups transform.
+		* @property parent
+		* @type Kiwi.Group
+		* @public
+		*/
+		public set parent(val: Kiwi.Group) {
+			//check to see if the parent is not an descendor
+			//if (this.containsDescendant(val) === false) {
+				this.transform.parent = (val !== null) ? val.transform : null;
+				this._parent = val;
+			//}
+		}
+		public get parent(): Kiwi.Group {
+			return this._parent;
+		}
+
+		/**
+		* The X coordinate of this group. This is just aliased to the transform property.
+		* @property x
+		* @type Number
+		* @public
+		*/
+		public get x(): number {
+			return this.transform.x;
+		}
+		public set x(value: number) {
+			this.transform.x = value;
+		}
+
+		/**
+		* The Y coordinate of this group. This is just aliased to the transform property.
+		* @property y
+		* @type Number
+		* @public
+		*/
+		public get y(): number {
+			return this.transform.y;
+		}
+		public set y(value: number) {
+			this.transform.y = value;
+		}
+
+		/**
+		* The X coordinate of this group in world space; that is, after parent transforms. This is just aliased to the transform property. This is READ-ONLY.
+		* @property worldX
+		* @type number
+		* @public
+		* @since 1.1.0
+		*/
+		public get worldX(): number {
+			return this.transform.worldX;
+		}
+
+		/**
+		* The Y coordinate of this group in world space; that is, after parent transforms. This is just aliased to the transform property. This is READ-ONLY.
+		* @property worldY
+		* @type number
+		* @public
+		* @since 1.1.0
+		*/
+		public get worldY(): number {
+			return this.transform.worldY;
+		}
+
+		/*
+		* The Scale X of this group. This is just aliased to the transform property.
+		* @property scaleX
+		* @type Number
+		* @public
+		*/
+		public get scaleX(): number {
+			return this.transform.scaleX;
+		}
+		public set scaleX(value: number) {
+			this.transform.scaleX = value;
+		}
+
+		/*
+		* The Scale Y coordinate of this group. This is just aliased to the transform property.
+		* @property scaleY
+		* @type Number
+		* @public
+		*/
+		public get scaleY(): number {
+			return this.transform.scaleY;
+		}
+		public set scaleY(value: number) {
+			this.transform.scaleY = value;
+		}
+
+		/**
+		* The scale of this group. This is just aliased to the transform property. This is WRITE-ONLY.
+		* @property scale
+		* @type number
+		* @public
+		* @since 1.1.0
+		*/
+		public set scale(value: number) {
+			this.transform.scale = value;
+		}
+
+		/*
+		* The rotation of this group. This is just aliased to the transform property.
+		* @property rotation
+		* @type Number
+		* @public
+		*/
+		public get rotation(): number {
+			return this.transform.rotation;
+		}
+		public set rotation(value: number) {
+			this.transform.rotation = value;
+		}
+
+		/**
+		* The rotation offset of this group in the X axis. This is just aliased to the transform property.
+		* @property rotPointX
+		* @type number
+		* @public
+		* @since 1.1.0
+		*/
+		public get rotPointX(): number {
+			return this.transform.rotPointX;
+		}
+		public set rotPointX(value: number) {
+			this.transform.rotPointX = value;
+		}
+
+		/**
+		* The rotation offset of this group in the Y axis. This is just aliased to the transform property.
+		* @property rotPointY
+		* @type number
+		* @public
+		* @since 1.1.0
+		*/
+		public get rotPointY(): number {
+			return this.transform.rotPointY;
+		}
+		public set rotPointY(value: number) {
+			this.transform.rotPointY = value;
+		}
+
+		/**
+		* The anchor point offset of this group in the X axis. This is just aliased to the transform property, and is in turn an alias of rotPointX.
+		* @property anchorPointX
+		* @type number
+		* @public
+		* @since 1.1.0
+		*/
+		public get anchorPointX(): number {
+			return this.transform.anchorPointX;
+		}
+		public set anchorPointX(value: number) {
+			this.transform.anchorPointX = value;
+		}
+
+		/**
+		* The anchor point offset of this group in the Y axis. This is just aliased to the transform property, and is in turn an alias of rotPointY.
+		* @property anchorPointY
+		* @type number
+		* @public
+		* @since 1.1.0
+		*/
+		public get anchorPointY(): number {
+			return this.transform.anchorPointY;
+		}
+		public set anchorPointY(value: number) {
+			this.transform.anchorPointY = value;
+		}
+
+		/**
+		* The Component Manager
+		* @property components
+		* @type Kiwi.ComponentManager
+		* @public
+		*/
+		public components: Kiwi.ComponentManager;
+
+		/**
+		* The game this Group belongs to
+		* @property game
+		* @type Kiwi.Game
+		* @public
+		*/
+		public game: Kiwi.Game = null;
+
+		/**
+		* The State that this Group belongs to
+		* @property state
+		* @type Kiwi.State
+		* @public
+		**/
+		public state: Kiwi.State = null;
+
+		/**
+		* A unique identifier for this Group within the game used internally by the framework. See the name property for a friendly version.
+		* @property id
+		* @type string
+		* @public
+		*/
+		public id: string;
+		
+		/**
+		* The collection of children belonging to this group 
+		* @property members
+		* @type Array
+		* @public
+		*/
+		public members: Kiwi.IChild[];
+		
+		/** 
+		* Returns the total number of children in this Group. Doesn&#x27;t distinguish between alive and dead children.
+		* @method numChildren
+		* @return {Number} The number of children in this Group
+		* @public
+		*/
+		public numChildren(): number {
+			return this.members.length;
+		}
+
+		/**
+		* An indication of whether or not this group is &#x27;dirty&#x27; and thus needs to be re-rendered or not.
+		* @property _dirty
+		* @type boolean
+		* @private
+		*/
+		private _dirty: boolean = true;
+
+		/**
+		* Sets all children of the Group to be dirty.
+		* @property dirty
+		* @type boolean
+		* @public
+		*/
+		public set dirty(value: boolean) {
+			if (value !== undefined) {
+				this._dirty = value;
+
+				for (var i = 0; i &lt; this.members.length; i++) {
+					this.members[i].dirty = value;
+				}
+			}
+		}
+		public get dirty(): boolean {
+			return this._dirty;
+		}
+
+		/**
+		* Checks if the given entity is in this group
+		* @method contains
+		* @param child {IChild} The IChild that you want to checked.
+		* @return {boolean} true if entity exists in group.
+		* @public
+		*/
+		public contains(child: Kiwi.IChild): boolean {                                         // MAKE RECURSIVE
+			return (this.members.indexOf(child) === -1) ? false : true;
+		}
+
+		/**
+		* Checks to see if the given object is contained in this group as a descendant
+		* @method containsDescendant
+		* @param child {object} The IChild that you want to check.
+		* @return {boolean}
+		* @public
+		*/
+		public containsDescendant(child: Kiwi.IChild): boolean {
+			for (var i = 0; i &lt; this.members.length; i++) {
+				var curMember: any = this.members[i];
+				if (curMember.id == child.id || curMember.childType() == Kiwi.Group &amp;&amp; curMember.containsDesendant(child)) {
+					return true;
+				}
+			}
+			return false;
+		}
+
+		/**
+		* Checks to see if one child is an ansector of another child.
+		* @method containsAncestor
+		* @param descendant {object} The object that you are checking.
+		* @param ancestor {Group} The parent (ancestor) that you are checking for.
+		* @return {boolean}
+		* @public
+		*/ 
+		public containsAncestor(descendant: Kiwi.IChild, ancestor:Kiwi.Group): boolean {
+			if (descendant.parent === null || descendant.parent === undefined) {
+				return false;   
+			}
+			if (descendant.parent == ancestor) return true; //desendants parent is the same? 
+			return descendant.parent.containsAncestor(descendant.parent, ancestor); //keep going up the chain.
+		}
+
+
+		/**
+		* -------------------------
+		* Add Children methods
+		* -------------------------
+		**/
+
+
+		/**
+		* Adds an Entity to this Group. The Entity must not already be in this Group.
+		* @method addChild
+		* @param child {object} The child to be added.
+		* @return {object} The child that was added.
+		* @public
+		*/
+		public addChild(child: Kiwi.IChild): Kiwi.IChild {              
+
+			//Implement feature where you can pass as many children to be added. Modify this script to work via the &#x27;arguments&#x27; property
+
+			//make sure you aren&#x27;t adding a state or itself
+			if (child.childType() === Kiwi.STATE || child == this) return;
+
+			//make sure it is not itself.
+			if (child.parent !== null) 
+				child.parent.removeChild(child);
+			
+			//check to see if the child is already part of a group.
+			this.members.push(child);
+			child.parent = this;
+			
+			return child;
+		}
+		 
+		/**
+		* Adds an Entity to this Group in the specific location. The Entity must not already be in this Group and it must be supported by the Group.
+		* @method addChildAt
+		* @param child {object} The child to be added.
+		* @param index {Number} The index the child will be set at.
+		* @return {object} The child.
+		* @public
+		*/
+		public addChildAt(child: Kiwi.IChild, index: number): Kiwi.IChild {
+
+			if (child.childType() === Kiwi.STATE || child == this) return;
+
+			if (child.parent !== null) child.parent.removeChild(child);
+
+			this.members.splice(index, 0, child);
+			child.parent = this;
 
-            return child;
+			return child;
+		}
 
-        }
+		/**
+		* Adds an Entity to this Group before another child. 
+		* @method addChildBefore
+		* @param child {object} The child to be added.
+		* @param beforeChild {Entity} The child before which the child will be added.
+		* @return {object} The child.
+		* @public
+		*/
+		public addChildBefore(child: Kiwi.IChild, beforeChild: Kiwi.IChild): Kiwi.IChild {                      
+
+			if (beforeChild.transform.parent === this.transform) {
+
+				if (child.parent !== null) child.parent.removeChild(child);
+
+				var index: number = this.getChildIndex( beforeChild );
+
+				this.members.splice(index, 0, child);
+				child.parent = this;
+			}
+
+			return child;
+
+		}
+
+		/**
+		* Adds an Entity to this Group after another child. 
+		* @method addChildAfter
+		* @param child {object} The child to be added.
+		* @param beforeChild {object} The child after which the child will be added.
+		* @return {object} The child.
+		* @public
+		*/
+		public addChildAfter(child: Kiwi.IChild, afterChild: Kiwi.IChild): Kiwi.IChild {
+		   
+			if (afterChild.transform.parent === this.transform) {
+
+				if (child.parent !== null) child.parent.removeChild(child);
+
+				var index: number = this.getChildIndex(afterChild) + 1;
+
+				this.members.splice(index, 0, child);
+				child.parent = this;
+			}
+
+			return child;
+
+		}
+
+
+		/**
+		* --------------------
+		* Remove Children Methods
+		* --------------------
+		**/
+
+
+		/**
+		* Removes an Entity from this Group if it is a child of it.
+		* @method removeChild
+		* @param child {object} The child to be removed.
+		* @param [destroy=false] {boolean} If the entity that gets removed should be destroyed as well.
+		* @return {object} The child.
+		* @public
+		*/
+		public removeChild(child: Kiwi.IChild, destroy:boolean=false): Kiwi.IChild {   
+
+			if (child.parent === this) {
+
+				var index: number = this.getChildIndex(child);
+
+				if (index &gt; -1) {
+					this.members.splice(index, 1);
+					child.parent = null;
+					
+					if (destroy) {
+						child.destroy();
+					}
+				}
+
+			} 
+
+			return child;
+		}
+
+		/**
+		* Removes the Entity from this Group at the given position.
+		* @method removeChildAt
+		* @param index {Number} The index of the child to be removed.
+		* @return {object} The child, or null.
+		*/
+		public removeChildAt(index: number): Kiwi.IChild {
+
+			if (this.members[index]) {
+				var child: Kiwi.IChild = this.members[index];
+
+				return this.removeChild(child);
+			} else {
+				return null;
+			}
+
+		}
+
+		/**
+		* Removes all Entities from this Group within the given range. 
+		* @method removeChildren
+		* @param begin {Number} The begining index.
+		* @param end {Number} The last index of the range.
+		* @param destroy {Number} If the children should be destroyed as well.
+		* @return {Number} The number of removed entities.
+		* @public
+		*/
+		public removeChildren(begin: number = 0, end: number = 0x7fffffff, destroy:boolean = false): number {
+
+			end -= begin;
+			
+			var removed: Kiwi.IChild[] = this.members.splice(begin, end);
+
+			for (var i = 0; i &lt; removed.length; i++) {
+				removed[i].parent = null;
+
+				if (destroy) {
+					removed[i].destroy();
+				}
+			}
+
+			return removed.length;
+		}
+
+		/**
+		* Removes the first Entity from this Group marked as &#x27;alive&#x27;
+		* @method removeFirstAlive
+		* @param [destroy=false] {boolean} If the entity should run the destroy method when it is removed.
+		* @return {object} The Entity that was removed from this Group if alive, otherwise null
+		* @public
+		* @deprecated in v1.1.0
+		*/
+		public removeFirstAlive(destroy: boolean = false): Kiwi.IChild {
+
+			return this.removeChild(this.getFirstAlive(), destroy);
+
+		}
 
 
-        /**
-        * --------------------
-        * Remove Children Methods
-        * --------------------
-        **/
-
-
-        /**
-        * Removes an Entity from this Group if it is a child of it.
-        * @method removeChild
-        * @param child {object} The child to be removed.
-        * @param [destroy=false] {boolean} If the entity that gets removed should be destroyed as well.
-        * @return {object} The child.
-        * @public
-        */
-        public removeChild(child: Kiwi.IChild, destroy:boolean=false): Kiwi.IChild {   
-
-            if (child.parent === this) {
-
-                var index: number = this.getChildIndex(child);
-
-                if (index &gt; -1) {
-                    this.members.splice(index, 1);
-                    child.parent = null;
-                    
-                    if (destroy) {
-                        child.destroy();
-                    }
-                }
-
-            } 
-
-            return child;
-        }
-
-        /**
-        * Removes the Entity from this Group at the given position.
-        * @method removeChildAt
-        * @param index {Number} The index of the child to be removed.
-        * @return {object} The child, or null.
-        */
-        public removeChildAt(index: number): Kiwi.IChild {
-
-            if (this.members[index]) {
-                var child: Kiwi.IChild = this.members[index];
-
-                return this.removeChild(child);
-            } else {
-                return null;
-            }
-
-        }
-
-        /**
-        * Removes all Entities from this Group within the given range. 
-        * @method removeChildren
-        * @param begin {Number} The begining index.
-        * @param end {Number} The last index of the range.
-        * @param destroy {Number} If the children should be destroyed as well.
-        * @return {Number} The number of removed entities.
-        * @public
-		*/
-        public removeChildren(begin: number = 0, end: number = 0x7fffffff, destroy:boolean = false): number {
-
-            end -= begin;
-            
-            var removed: Kiwi.IChild[] = this.members.splice(begin, end);
-
-            for (var i = 0; i &lt; removed.length; i++) {
-                removed[i].parent = null;
-
-                if (destroy) {
-                    removed[i].destroy();
-                }
-            }
-
-            return removed.length;
-        }
-
-        /**
-        * Removes the first Entity from this Group marked as &#x27;alive&#x27;
-        * @method removeFirstAlive
-        * @param [destroy=false] {boolean} If the entity should run the destroy method when it is removed.
-        * @return {object} The Entity that was removed from this Group if alive, otherwise null
-        * @public
-        * @deprecated in v1.1.0
-        */
-        public removeFirstAlive(destroy: boolean = false): Kiwi.IChild {
-
-            return this.removeChild(this.getFirstAlive(), destroy);
-
-        }
-
-
-        /**
-        * -------------------
-        * Get Children Methods
-        * -------------------
-        **/
-
-        /**
-        * Get all children of this Group. By default, this will search the entire sub-graph, including children of children etc.
-        * @method getAllChildren
-        * @param getGroups {boolean} Optional: Whether to include Groups in the results. When false, will only collect GameObjects.
-        * @param destinationArray {Array} Optional: The array in which to store the results.
-        * @return {Array}
-        * @since 1.1.0
-        */
-        public getAllChildren(getGroups: boolean = true, destinationArray: IChild[] = []): IChild[] {
-            for( var i = 0;  i &lt; this.members.length;  i++) {
-                if(this.members[i].objType() == &quot;Group&quot;) {
-                    if(getGroups) {
-                        destinationArray.push(this.members[i]);
-                    }
-                    (&lt;Kiwi.Group&gt;this.members[i]).getAllChildren(getGroups, destinationArray);
-                }
-                else {
-                    destinationArray.push(this.members[i]);
-                }
-            }
-            return destinationArray;
-        }
-
-
-        /**
-        * Get the child at a specific position in this Group by its index.
-        * @method getChildAt
-        * @param index {Number} The index of the child
-        * @return {object} The child, if found or null if not.
-        * @public
-        */
-        public getChildAt(index: number): Kiwi.IChild {
-
-            if (this.members[index]) {
-                return this.members[index];
-            } else {
-                return null;
-            }
-
-        }
-
-        /**
-        * Get a child from this Group by its name. By default this will not check sub-groups, but if you supply the correct flag it will check the entire scene graph under this object.
-        * @method getChildByName
-        * @param name {String} The name of the child.
-        * @param recurse {Boolean} Whether to search child groups for the child. Default FALSE.
-        * @return {object} The child, if found or null if not.
-        * @public
-        */
-        public getChildByName(name: string, recurse: boolean = false): Kiwi.IChild {
-            for (var i = 0; i &lt; this.members.length; i++) {
-                if (this.members[i].name === name) {
-                    return this.members[i];
-                }
-                else if(this.members[i].objType() == &quot;Group&quot;  &amp;&amp;  recurse) {
-                    var groupResponse = (&lt;Kiwi.Group&gt;this.members[i]).getChildByName( name, true );
-                    if(groupResponse !== null) {
-                        return groupResponse;
-                    }
-                }
-            }
-
-            return null;
-
-        }
-
-        /**
-        * Get a child from this Group by its UUID. By default this will not check sub-groups, but if you supply the correct flag it will check the entire scene graph under this object.
-        * @method getChildByID
-        * @param id {String} The ID of the child.
-        * @param recurse {Boolean} Whether to search child groups for the child. Default FALSE.
-        * @return {object} The child, if found or null if not.
-        * @public
-        */
-        public getChildByID(id: string, recurse: boolean = false): Kiwi.IChild {
-            for (var i = 0; i &lt; this.members.length; i++) {
-                if (this.members[i].id === id) {
-                    return this.members[i];
-                }
-                else if(this.members[i].objType() == &quot;Group&quot;  &amp;&amp;  recurse) {
-                    var groupResponse = (&lt;Kiwi.Group&gt;this.members[i]).getChildByID( id, true );
-                    if(groupResponse !== null) {
-                        return groupResponse;
-                    }
-                }
-            }
-
-            return null;
-
-        }
-
-        /**
-        * Returns the index position of the Entity or -1 if not found.
-        * @method getChildIndex
-        * @param child {object} The child.
-        * @return {Number} The index of the child or -1 if not found.
-        * @public
-        */
-        public getChildIndex(child: Kiwi.IChild): number {
-
-            return this.members.indexOf(child);
-
-        }
-
-        /**
-        * Returns the first Entity from this Group marked as &#x27;alive&#x27; or null if no members are alive
-        * @method getFirstAlive
-        * @return {object}
-        * @public
-        * @deprecated in v1.1.0
-        */
-        public getFirstAlive(): Kiwi.IChild {
-
-            for (var i = 0; i &lt; this.members.length; i++) {
-                if (this.members[i].exists === true) {
-                    return this.members[i];
-                }
-            }
-
-            return null;
-        }
-
-        /**
-        * Returns the first member of the Group which is not &#x27;alive&#x27;, returns null if all members are alive.
-        * @method getFirstDead
-        * @return {object}
-        * @public
-        * @deprecated in v1.1.0
-        */
-        public getFirstDead(): Kiwi.IChild {
-
-            for (var i = 0; i &lt; this.members.length; i++) {
-                if (this.members[i].exists === false) {
-                    return this.members[i];
-                }
-            }
-
-            return null;
-
-        }
-
-        /**
-        * Returns a member at random from the group.
-        * @param {Number}	StartIndex	Optional offset off the front of the array. Default value is 0, or the beginning of the array.
-        * @param {Number}	Length		Optional restriction on the number of values you want to randomly select from.
-        * @return {object}	A child from the members list.
-        * @public
-        */
-        public getRandom(start: number = 0, length: number = 0): Kiwi.IChild {
-
-            if (this.members.length === 0) {
-                return null;
-            }
-            /*
-            if (length === 0) {
-                length = this.members.length;
-            }
-
-            if (start &lt; 0 || start &gt; length) {
-                start = 0;
-            }
-
-            var rnd = start + (Math.random() * (start + length));
-
-            if (rnd &gt; this.members.length) {
-                return this.members[this.members.length - 1];
-
-            } else {
-                return this.members[rnd];
-            }
-            */
-
-            // Comply start to viable range
-            start = Kiwi.Utils.GameMath.clamp(start, this.members.length - 1);
-
-            // Comply length to fit
-            if(length === 0) {
-                length = this.members.length;
-            }
-            if(this.members.length &lt;= start + length) {
-                length = this.members.length - start - 1;
-            }
-
-            // Create and truncate random index
-            var rnd = start + Math.random() * length;
-            rnd = Math.floor(rnd);
-
-            // Return
-            return this.members[rnd];
-        }
-
-        /**
-        * Returns an array of children which contain the tag which is passed.
-        * @method getChildrenByTag
-        * @param tag {string}
-        * @return {Array}
-        * @public
-        * @since 1.1.0
-        */
-        public getChildrenByTag(tag: string): IChild[]{
-
-            var children = [];
-
-            for (var i = 0; i &lt; this.members.length; i++) {
-
-                if (this.members[i].hasTag(tag)) {
-                    children.push(this.members[i]);
-                }
-
-                if (this.members[i].childType() == Kiwi.GROUP) {
-                    children = children.concat( (&lt;Kiwi.Group&gt;this.members[i] ).getChildrenByTag(tag) );
-                } 
-                
-            }
-
-            return children;
-        }
-
-        
-        /**
-        * --------------------
-        * Child Depth Sorting Methods
-        * --------------------
-        **/
-
-        
-        /**
-        * Sets a new position of an existing Entity within the Group.
-        * @method setChildIndex
-        * @param child {object} The child in this Group to change.
-        * @param index {Number} The index for the child to be set at.
-        * @return {boolean} true if the Entity was moved to the new position, otherwise false.
-        * @public
-        */
-        public setChildIndex(child: Kiwi.IChild, index: number): boolean {
-        
-            //  If the Entity isn&#x27;t in this Group, or is already at that index then bail out
-            if (child.parent !== this || this.getChildIndex(child) === index) {
-                return false;
-            }
-
-            this.removeChild(child);
-            this.addChildAt(child, index);
-
-            return true;
-        }
-
-        /**
-        * Swaps the position of two existing Entities that are a direct child of this group.
-        * @method swapChildren
-        * @param child1 {object} The first child in this Group to swap.
-        * @param child2 {object} The second child in this Group to swap.
-        * @return {boolean} true if the Entities were swapped successfully, otherwise false.
-        * @public
-        */
-        public swapChildren(child1: Kiwi.IChild, child2: Kiwi.IChild):boolean {
-        
-            //  If either Entity isn&#x27;t in this Group, or is already at that index then bail out
-            if (child1.parent !== this || child2.parent !== this) {
-                return false;
-            }
-
-            var index1 = this.getChildIndex(child1);
-            var index2 = this.getChildIndex(child2);
-
-            if (index1 !== -1 &amp;&amp; index2 !== -1 &amp;&amp; index1 !== index2) {
-                this.members[index1] = child2;
-                this.members[index2] = child1;
-
-                return true;
-            }
-
-            return false;
-        }
-         
-        /**
-        * Swaps the position of two existing Entities within the Group based on their index.
-        * @method swapChildrenAt
-        * @param index1 {Number} The position of the first Entity in this Group to swap.
-        * @param index2 {Number} The position of the second Entity in this Group to swap.
-        * @return {boolean} true if the Entities were swapped successfully, otherwise false.
-        * @public
-        */
-        public swapChildrenAt(index1: number, index2: number): boolean {
-             
-            var child1: Kiwi.IChild = this.getChildAt(index1);
-            var child2: Kiwi.IChild = this.getChildAt(index2);
-
-            if (child1 !== null &amp;&amp; child2 !== null) {
-                //  If either Entity isn&#x27;t in this Group, or is already at that index then bail out
-                if (child1 == child2 || child1.parent !== this || child2.parent !== this) {
-                    return false;
-                }
-
-                this.members[index1] = child2;
-                this.members[index2] = child1;
-                     
-                return true;
-            }
-
-            return false;
-        }
-
-        /**
-        * Replaces a child Entity in this Group with a new one.
-        * @method replaceChild
-        * @param oldChild {object} The Entity in this Group to be removed.
-        * @param newChild {object} The new Entity to insert into this Group at the old Entities position.
-        * @return {boolean} true if the Entities were replaced successfully, otherwise false.
-        * @public
-        */
-        public replaceChild(oldChild: Kiwi.IChild, newChild: Kiwi.IChild): boolean {
-            
-            //fall through if replacing child with the same child
-            if (oldChild === newChild) return false;
-
-            // get the index of the existing child
-            var index: number = this.getChildIndex(oldChild);
-            
-            if (index &gt; -1) {
-                // remove the new child from the group if the group contains it, so it can be reinserted in new position
-                if (newChild.parent) {
-                    newChild.parent.removeChild(newChild);
-                }
-
-                this.removeChildAt(index);
-                
-                this.addChildAt(newChild, index); 
-                newChild.parent = null;
-                
-                return true;
-            }
-
-            return false;
-        }
-        
-        /**
-        * Loops through each member in the group and run a method on for each one.
-        * @method forEach
-        * @param context {any} The context that the callbacks are to have when called.
-        * @param callback {any} The callback method to execute on each member.
-        * @param [params]* {any} Any extra parameters.
-        * @public
-		*/
-        public forEach(context, callback, ...params: any[]) {
-
-            if (this.members.length &gt; 0) {
-                this.members.forEach((child) =&gt; callback.apply(context, [child].concat(params)));
-            }
-
-        }
-
-        /**
-        * Loop through each member of the groups that is alive. 
-        * @method forEachAlive
-        * @param context {any} The context that the callbacks are to have when called.
-        * @param callback {any} The callback method to execute on each member.
-        * @param [params]* {any} Any extra parameters.
-        * @public
-		*/
-        public forEachAlive(context, callback, ...params: any[]) {
-
-            if (this.members.length &gt; 0) {
-                
-                this.members.forEach((child) =&gt; {
-                    if (child.exists) callback.apply(context, [child].concat(params));
-                });
-                
-            }
-
-        }
-
-        /**
-        * Sets a property on every member. If componentName is null the property is set on the entity itself, otherwise it is set on the named component. Uses runtime string property lookups. Not optimal for large groups if speed is an issue.
-        * @method setAll
-        * @param componentName {string} The name of the component to set the property on - set to null to set a property on the entity.
-        * @param property {string} The name of the property to set.
-        * @param value {any} The value to set the property to.
-        * @public
-		*/
-        public setAll(componentName: string,property: string, value: any) {
-            if (componentName === null) {
-                for (var i: number = 0; i &lt; this.members.length; i++) {
-                    this.members[i][property] = value;
-                }
-            } else {
-                for (var i: number = 0; i &lt; this.members.length; i++) {
-                    this.members[i][componentName][property] = value;
-                }
-            }
-        }
-
-        /**
-        * Calls a function on every member. If componentName is null the function is called on the entity itself, otherwise it is called on the named component. Uses runtime string property lookups. Not optimal for large groups if speed is an issue.
-        * @method callAll
-        * @param componentName {string} The name of the component to call the function on - set to null to call a function on the entity.
-        * @param functionName {string} The name of the function to call.
-        * @param args {Array} An array of arguments to pas to the function.
-        * @public
-		*/
-        public callAll(componentName: string,functionName: string, args?: any[]) {
-            if (componentName === null) {
-                for (var i: number = 0; i &lt; this.members.length; i++) {
-                    this.members[i][functionName].apply(this.members[i], args);
-                }
-            } else {
-                for (var i: number = 0; i &lt; this.members.length; i++) {
-                    this.members[i][componentName][functionName].apply(this.members[i][componentName], args);
-                }
-            }
-        }
-
-        /**
-        * The update loop for this group.
-        * @method update
-        * @public
-		*/
-        public update() {
-
-            this.components.preUpdate();
-
-            this.components.update();
-            if (this.members.length &gt; 0) {
-
-                for (var i = 0; i &lt; this.members.length; i++) {
-                    if (this.members[i].active === true) {
-                        this.members[i].update();
-                    } 
-
-                    if(this.members[i].exists === false) {
-                        this.members[i].destroy( true );
-                    }
-                }
-                
-            }
-
-            this.components.postUpdate();
-
-        }
-
-        /**
-        * If an Entity no longer exists it is cleared for garbage collection or pool re-allocation
-        * @property exists 
-        * @type boolean
-        * @private
-        */
-        private _exists: boolean;
-
-        /**
-        * Toggles the exitence of this Group. An Entity that no longer exists can be garbage collected or re-allocated in a pool
-        * This method should be over-ridden to handle specific canvas/webgl implementations.
-        * @property exists
-        * @type boolean
-        * @public
-        */
-        public set exists(value: boolean) {
-            this._exists = value;
-        }
-
-        public get exists():boolean {
-            return this._exists;
-        }
-
-        /**
-        * An active Entity is one that has its update method called by its parent.
-        * @property _active
-        * @type boolean
-        * @default true
-        * @private
-        */
-        private _active: boolean;
-
-        /**
-        * Toggles the active state of this Entity. An Entity that is active has its update method called by its parent.
-        * This method should be over-ridden to handle specific dom/canvas/webgl implementations.
-        * @property active
-        * @type boolean
-        * @default true
-        * @public
-        */
-        public set active(value: boolean) {
-            this._active = value;
-        }
-
-        public get active():boolean {
-            return this._active;
-        }
-        
-        /**
-        * The render method that is required by the IChild. 
-        * This method never gets called as the render is only worried about rendering entities.
-        * @method render
-        * @param camera {Kiwi.Camera}
-        * @public
-        * @deprecated
-        */
-        public render(camera:Kiwi.Camera) {
-
-        }
-        
-        /**
-        * Returns the number of member which are marked as &#x27;alive&#x27;
-        * @method countLiving
-        * @return {Number} 
-        * @public
-		*/
-        public countLiving():number { 
-
-            var total: number = 0;
-
-            for (var i = 0; i &lt; this.members.length; i++) {
-                if (this.members[i].exists === true) {
-                    total++;
-                }
-            }
-
-            return total;
-        
-        }
-
-        /**
-        * Returns the number of member which are not marked as &#x27;alive&#x27;
-        * @method countDead
-        * @return {Number} 
-        * @public
-		*/
-        public countDead(): number { 
-        
-            var total: number = 0;
-
-            for (var i = 0; i &lt; this.members.length; i++) {
-                if (this.members[i].exists === false) {
-                    total++;
-                }
-            }
-
-            return total;
-        
-        }
-
-        /**
-	    * Clear all children from this Group
-        * @method clear
-        * @public
-		*/
-        public clear() {
-
-            this.members.length = 0;
-
-        }
+		/**
+		* -------------------
+		* Get Children Methods
+		* -------------------
+		**/
+
+		/**
+		* Get all children of this Group. By default, this will search the entire sub-graph, including children of children etc.
+		* @method getAllChildren
+		* @param getGroups {boolean} Optional: Whether to include Groups in the results. When false, will only collect GameObjects.
+		* @param destinationArray {Array} Optional: The array in which to store the results.
+		* @return {Array}
+		* @since 1.1.0
+		*/
+		public getAllChildren(getGroups: boolean = true, destinationArray: IChild[] = []): IChild[] {
+			for( var i = 0;  i &lt; this.members.length;  i++) {
+				if(this.members[i].objType() == &quot;Group&quot;) {
+					if(getGroups) {
+						destinationArray.push(this.members[i]);
+					}
+					(&lt;Kiwi.Group&gt;this.members[i]).getAllChildren(getGroups, destinationArray);
+				}
+				else {
+					destinationArray.push(this.members[i]);
+				}
+			}
+			return destinationArray;
+		}
+
+
+		/**
+		* Get the child at a specific position in this Group by its index.
+		* @method getChildAt
+		* @param index {Number} The index of the child
+		* @return {object} The child, if found or null if not.
+		* @public
+		*/
+		public getChildAt(index: number): Kiwi.IChild {
+
+			if (this.members[index]) {
+				return this.members[index];
+			} else {
+				return null;
+			}
+
+		}
+
+		/**
+		* Get a child from this Group by its name. By default this will not check sub-groups, but if you supply the correct flag it will check the entire scene graph under this object.
+		* @method getChildByName
+		* @param name {String} The name of the child.
+		* @param recurse {Boolean} Whether to search child groups for the child. Default FALSE.
+		* @return {object} The child, if found or null if not.
+		* @public
+		*/
+		public getChildByName(name: string, recurse: boolean = false): Kiwi.IChild {
+			for (var i = 0; i &lt; this.members.length; i++) {
+				if (this.members[i].name === name) {
+					return this.members[i];
+				}
+				else if(this.members[i].objType() == &quot;Group&quot;  &amp;&amp;  recurse) {
+					var groupResponse = (&lt;Kiwi.Group&gt;this.members[i]).getChildByName( name, true );
+					if(groupResponse !== null) {
+						return groupResponse;
+					}
+				}
+			}
+
+			return null;
+
+		}
+
+		/**
+		* Get a child from this Group by its UUID. By default this will not check sub-groups, but if you supply the correct flag it will check the entire scene graph under this object.
+		* @method getChildByID
+		* @param id {String} The ID of the child.
+		* @param recurse {Boolean} Whether to search child groups for the child. Default FALSE.
+		* @return {object} The child, if found or null if not.
+		* @public
+		*/
+		public getChildByID(id: string, recurse: boolean = false): Kiwi.IChild {
+			for (var i = 0; i &lt; this.members.length; i++) {
+				if (this.members[i].id === id) {
+					return this.members[i];
+				}
+				else if(this.members[i].objType() == &quot;Group&quot;  &amp;&amp;  recurse) {
+					var groupResponse = (&lt;Kiwi.Group&gt;this.members[i]).getChildByID( id, true );
+					if(groupResponse !== null) {
+						return groupResponse;
+					}
+				}
+			}
+
+			return null;
+
+		}
+
+		/**
+		* Returns the index position of the Entity or -1 if not found.
+		* @method getChildIndex
+		* @param child {object} The child.
+		* @return {Number} The index of the child or -1 if not found.
+		* @public
+		*/
+		public getChildIndex(child: Kiwi.IChild): number {
+
+			return this.members.indexOf(child);
+
+		}
+
+		/**
+		* Returns the first Entity from this Group marked as &#x27;alive&#x27; or null if no members are alive
+		* @method getFirstAlive
+		* @return {object}
+		* @public
+		* @deprecated in v1.1.0
+		*/
+		public getFirstAlive(): Kiwi.IChild {
+
+			for (var i = 0; i &lt; this.members.length; i++) {
+				if (this.members[i].exists === true) {
+					return this.members[i];
+				}
+			}
+
+			return null;
+		}
+
+		/**
+		* Returns the first member of the Group which is not &#x27;alive&#x27;, returns null if all members are alive.
+		* @method getFirstDead
+		* @return {object}
+		* @public
+		* @deprecated in v1.1.0
+		*/
+		public getFirstDead(): Kiwi.IChild {
+
+			for (var i = 0; i &lt; this.members.length; i++) {
+				if (this.members[i].exists === false) {
+					return this.members[i];
+				}
+			}
+
+			return null;
+
+		}
+
+		/**
+		* Returns a member at random from the group.
+		* @param {Number}	StartIndex	Optional offset off the front of the array. Default value is 0, or the beginning of the array.
+		* @param {Number}	Length		Optional restriction on the number of values you want to randomly select from.
+		* @return {object}	A child from the members list.
+		* @public
+		*/
+		public getRandom(start: number = 0, length: number = 0): Kiwi.IChild {
+
+			if (this.members.length === 0) {
+				return null;
+			}
+			/*
+			if (length === 0) {
+				length = this.members.length;
+			}
+
+			if (start &lt; 0 || start &gt; length) {
+				start = 0;
+			}
+
+			var rnd = start + (Math.random() * (start + length));
+
+			if (rnd &gt; this.members.length) {
+				return this.members[this.members.length - 1];
+
+			} else {
+				return this.members[rnd];
+			}
+			*/
+
+			// Comply start to viable range
+			start = Kiwi.Utils.GameMath.clamp(start, this.members.length - 1);
+
+			// Comply length to fit
+			if(length === 0) {
+				length = this.members.length;
+			}
+			if(this.members.length &lt;= start + length) {
+				length = this.members.length - start - 1;
+			}
+
+			// Create and truncate random index
+			var rnd = start + Math.random() * length;
+			rnd = Math.floor(rnd);
+
+			// Return
+			return this.members[rnd];
+		}
+
+		/**
+		* Returns an array of children which contain the tag which is passed.
+		* @method getChildrenByTag
+		* @param tag {string}
+		* @return {Array}
+		* @public
+		* @since 1.1.0
+		*/
+		public getChildrenByTag(tag: string): IChild[]{
+
+			var children = [];
+
+			for (var i = 0; i &lt; this.members.length; i++) {
+
+				if (this.members[i].hasTag(tag)) {
+					children.push(this.members[i]);
+				}
+
+				if (this.members[i].childType() == Kiwi.GROUP) {
+					children = children.concat( (&lt;Kiwi.Group&gt;this.members[i] ).getChildrenByTag(tag) );
+				}
+
+			}
+
+			return children;
+		}
+
+
+		/**
+		* --------------------
+		* Child Depth Sorting Methods
+		* --------------------
+		**/
+
+
+		/**
+		* Sets a new position of an existing Entity within the Group.
+		* @method setChildIndex
+		* @param child {object} The child in this Group to change.
+		* @param index {Number} The index for the child to be set at.
+		* @return {boolean} true if the Entity was moved to the new position, otherwise false.
+		* @public
+		*/
+		public setChildIndex(child: Kiwi.IChild, index: number): boolean {
+		
+			//  If the Entity isn&#x27;t in this Group, or is already at that index then bail out
+			if (child.parent !== this || this.getChildIndex(child) === index) {
+				return false;
+			}
+
+			this.removeChild(child);
+			this.addChildAt(child, index);
+
+			return true;
+		}
+
+		/**
+		* Swaps the position of two existing Entities that are a direct child of this group.
+		* @method swapChildren
+		* @param child1 {object} The first child in this Group to swap.
+		* @param child2 {object} The second child in this Group to swap.
+		* @return {boolean} true if the Entities were swapped successfully, otherwise false.
+		* @public
+		*/
+		public swapChildren(child1: Kiwi.IChild, child2: Kiwi.IChild):boolean {
+		
+			//  If either Entity isn&#x27;t in this Group, or is already at that index then bail out
+			if (child1.parent !== this || child2.parent !== this) {
+				return false;
+			}
+
+			var index1 = this.getChildIndex(child1);
+			var index2 = this.getChildIndex(child2);
+
+			if (index1 !== -1 &amp;&amp; index2 !== -1 &amp;&amp; index1 !== index2) {
+				this.members[index1] = child2;
+				this.members[index2] = child1;
+
+				return true;
+			}
+
+			return false;
+		}
+
+		/**
+		* Swaps the position of two existing Entities within the Group based on their index.
+		* @method swapChildrenAt
+		* @param index1 {Number} The position of the first Entity in this Group to swap.
+		* @param index2 {Number} The position of the second Entity in this Group to swap.
+		* @return {boolean} true if the Entities were swapped successfully, otherwise false.
+		* @public
+		*/
+		public swapChildrenAt(index1: number, index2: number): boolean {
+			 
+			var child1: Kiwi.IChild = this.getChildAt(index1);
+			var child2: Kiwi.IChild = this.getChildAt(index2);
+
+			if (child1 !== null &amp;&amp; child2 !== null) {
+				//  If either Entity isn&#x27;t in this Group, or is already at that index then bail out
+				if (child1 == child2 || child1.parent !== this || child2.parent !== this) {
+					return false;
+				}
+
+				this.members[index1] = child2;
+				this.members[index2] = child1;
+
+				return true;
+			}
+
+			return false;
+		}
+
+		/**
+		* Replaces a child Entity in this Group with a new one.
+		* @method replaceChild
+		* @param oldChild {object} The Entity in this Group to be removed.
+		* @param newChild {object} The new Entity to insert into this Group at the old Entities position.
+		* @return {boolean} true if the Entities were replaced successfully, otherwise false.
+		* @public
+		*/
+		public replaceChild(oldChild: Kiwi.IChild, newChild: Kiwi.IChild): boolean {
+			
+			//fall through if replacing child with the same child
+			if (oldChild === newChild) return false;
+
+			// get the index of the existing child
+			var index: number = this.getChildIndex(oldChild);
+
+			if (index &gt; -1) {
+				// remove the new child from the group if the group contains it, so it can be reinserted in new position
+				if (newChild.parent) {
+					newChild.parent.removeChild(newChild);
+				}
+
+				this.removeChildAt(index);
+
+				this.addChildAt(newChild, index); 
+				newChild.parent = null;
+
+				return true;
+			}
+
+			return false;
+		}
+
+		/**
+		* Loops through each member in the group and run a method on for each one.
+		* @method forEach
+		* @param context {any} The context that the callbacks are to have when called.
+		* @param callback {any} The callback method to execute on each member.
+		* @param [params]* {any} Any extra parameters.
+		* @public
+		*/
+		public forEach(context, callback, ...params: any[]) {
+
+			if (this.members.length &gt; 0) {
+				this.members.forEach((child) =&gt; callback.apply(context, [child].concat(params)));
+			}
+
+		}
+
+		/**
+		* Loop through each member of the groups that is alive. 
+		* @method forEachAlive
+		* @param context {any} The context that the callbacks are to have when called.
+		* @param callback {any} The callback method to execute on each member.
+		* @param [params]* {any} Any extra parameters.
+		* @public
+		*/
+		public forEachAlive(context, callback, ...params: any[]) {
+
+			if (this.members.length &gt; 0) {
+				
+				this.members.forEach((child) =&gt; {
+					if (child.exists) callback.apply(context, [child].concat(params));
+				});
+				
+			}
+
+		}
+
+		/**
+		* Sets a property on every member. If componentName is null the property is set on the entity itself, otherwise it is set on the named component. Uses runtime string property lookups. Not optimal for large groups if speed is an issue.
+		* @method setAll
+		* @param componentName {string} The name of the component to set the property on - set to null to set a property on the entity.
+		* @param property {string} The name of the property to set.
+		* @param value {any} The value to set the property to.
+		* @public
+		*/
+		public setAll(componentName: string,property: string, value: any) {
+			if (componentName === null) {
+				for (var i: number = 0; i &lt; this.members.length; i++) {
+					this.members[i][property] = value;
+				}
+			} else {
+				for (var i: number = 0; i &lt; this.members.length; i++) {
+					this.members[i][componentName][property] = value;
+				}
+			}
+		}
+
+		/**
+		* Calls a function on every member. If componentName is null the function is called on the entity itself, otherwise it is called on the named component. Uses runtime string property lookups. Not optimal for large groups if speed is an issue.
+		* @method callAll
+		* @param componentName {string} The name of the component to call the function on - set to null to call a function on the entity.
+		* @param functionName {string} The name of the function to call.
+		* @param args {Array} An array of arguments to pas to the function.
+		* @public
+		*/
+		public callAll(componentName: string,functionName: string, args?: any[]) {
+			if (componentName === null) {
+				for (var i: number = 0; i &lt; this.members.length; i++) {
+					this.members[i][functionName].apply(this.members[i], args);
+				}
+			} else {
+				for (var i: number = 0; i &lt; this.members.length; i++) {
+					this.members[i][componentName][functionName].apply(this.members[i][componentName], args);
+				}
+			}
+		}
+
+		/**
+		* The update loop for this group.
+		* @method update
+		* @public
+		*/
+		public update() {
+
+			this.components.preUpdate();
+
+			this.components.update();
+			if (this.members.length &gt; 0) {
+
+				for (var i = 0; i &lt; this.members.length; i++) {
+					if (this.members[i].active === true) {
+						this.members[i].update();
+					} 
+
+					if(this.members[i].exists === false) {
+						this.members[i].destroy( true );
+					}
+				}
+				
+			}
+
+			this.components.postUpdate();
+
+		}
+
+		/**
+		* If an Entity no longer exists it is cleared for garbage collection or pool re-allocation
+		* @property exists 
+		* @type boolean
+		* @private
+		*/
+		private _exists: boolean;
+
+		/**
+		* Toggles the exitence of this Group. An Entity that no longer exists can be garbage collected or re-allocated in a pool
+		* This method should be over-ridden to handle specific canvas/webgl implementations.
+		* @property exists
+		* @type boolean
+		* @public
+		*/
+		public set exists(value: boolean) {
+			this._exists = value;
+		}
+
+		public get exists():boolean {
+			return this._exists;
+		}
+
+		/**
+		* An active Entity is one that has its update method called by its parent.
+		* @property _active
+		* @type boolean
+		* @default true
+		* @private
+		*/
+		private _active: boolean;
+
+		/**
+		* Toggles the active state of this Entity. An Entity that is active has its update method called by its parent.
+		* This method should be over-ridden to handle specific dom/canvas/webgl implementations.
+		* @property active
+		* @type boolean
+		* @default true
+		* @public
+		*/
+		public set active(value: boolean) {
+			this._active = value;
+		}
+
+		public get active():boolean {
+			return this._active;
+		}
+
+		/**
+		* The render method that is required by the IChild. 
+		* This method never gets called as the render is only worried about rendering entities.
+		* @method render
+		* @param camera {Kiwi.Camera}
+		* @public
+		* @deprecated
+		*/
+		public render(camera:Kiwi.Camera) {
+
+		}
+
+		/**
+		* Returns the number of member which are marked as &#x27;alive&#x27;
+		* @method countLiving
+		* @return {Number} 
+		* @public
+		*/
+		public countLiving():number { 
+
+			var total: number = 0;
+
+			for (var i = 0; i &lt; this.members.length; i++) {
+				if (this.members[i].exists === true) {
+					total++;
+				}
+			}
+
+			return total;
+		
+		}
+
+		/**
+		* Returns the number of member which are not marked as &#x27;alive&#x27;
+		* @method countDead
+		* @return {Number} 
+		* @public
+		*/
+		public countDead(): number { 
+		
+			var total: number = 0;
+
+			for (var i = 0; i &lt; this.members.length; i++) {
+				if (this.members[i].exists === false) {
+					total++;
+				}
+			}
+
+			return total;
+		
+		}
+
+		/**
+		* Clear all children from this Group
+		* @method clear
+		* @public
+		*/
+		public clear() {
+
+			this.members.length = 0;
+
+		}
  
-        /**
+		/**
 		* Controls whether render is automatically called by the parent.
-        * @property _willRender
-        * @type Boolean
-        * @private
-        * @deprecated Use _visible instead
+		* @property _willRender
+		* @type Boolean
+		* @private
+		* @deprecated Use _visible instead
 		*/
 		private _willRender: boolean;
 
-        /**
-        * Controls whether render is automatically called by the parent.
-        * @property willRender
-        * @type boolean
-        * @return {boolean}
-        * @public
-        * @deprecated Use visible instead
-        */
-        public set willRender(value: boolean) {
-            this._willRender = value;
-        }
-        public get willRender():boolean {
-            return this._willRender;
-        }
-
-        /**
-        * A boolean that indicates whether or not this entity is visible or not. Note that is does not get set to false if the alpha is 0.
-        * @property _visible
-        * @type boolean
-        * @default true
-        * @private
-        * @since 1.0.1
-        */
-        private _visible: boolean;
-        
-        /**
-        * Set the visibility of this entity. True or False.
-        * @property visible
-        * @type boolean
-        * @default true
-        * @public
-        * @since 1.0.1
-        */
-        public set visible(value: boolean) {
-            this._visible = value;
-        }
-        public get visible(): boolean {
-            return this._visible;
-        }
-
-        
-        /**
-        * ---------------
-        * Tagging System
-        * ---------------
-        **/
-
-        
-        /**
-        * Any tags that are on this Entity. This can be used to grab GameObjects or Groups on the whole game which have these particular tags.
-        * By default Entitys contain no tags.
-        * @property _tags
-        * @type Array
-        * @since 1.1.0
-        * @private
-        */
-        private _tags: string[] = [];
-
-        /**
-        * Adds a new Tag to this Entity. Useful for identifying large amounts of the same type of GameObjects.
-        * You can pass multiple strings to add multiple tags.
-        * @method addTag
-        * @param tag {string} The tag that you would like to add to this Entity.
-        * @since 1.1.0
-        * @public
-        */
-        public addTag(...args: any[]) {
-
-            //Loop through the arguments
-            for (var i = 0; i &lt; args.length; i++) {
-                if (this._tags.indexOf(args[i]) == -1) {
-                    this._tags.push(args[i]);
-                }
-            }
-
-        }
-
-        /**
-        * Removes a Tag from this Entity.
-        * @method removeTag
-        * @param tag {string} The tag that you would like to remove from this Entity.
-        * @since 1.1.0
-        * @public
-        */
-        public removeTag(...args: any[]) {
-
-            for (var i = 0; i &lt; args.length; i++) {
-                var index = this._tags.indexOf(args[i]);
-                if (index !== -1) this._tags.splice(index, 1);
-            }
-
-        }
-
-        /**
-        * Checks to see if this Entity has a Tag based upon a string which you pass.
-        * @method hasTag
-        * @param tag {string} 
-        * @since 1.1.0
-        * @return {boolean}
-        * @public 
-        */
-        public hasTag(tag: string): boolean {
-
-            var len = this._tags.length;
-            while (len--) {
-                if (this._tags[len] === tag) {
-                    return true;
-                }
-            }
-
-            return false;
-        }
-
-
-        /**
+		/**
+		* Controls whether render is automatically called by the parent.
+		* @property willRender
+		* @type boolean
+		* @return {boolean}
+		* @public
+		* @deprecated Use visible instead
+		*/
+		public set willRender(value: boolean) {
+			this._willRender = value;
+		}
+		public get willRender():boolean {
+			return this._willRender;
+		}
+
+		/**
+		* A boolean that indicates whether or not this entity is visible or not. Note that is does not get set to false if the alpha is 0.
+		* @property _visible
+		* @type boolean
+		* @default true
+		* @private
+		* @since 1.0.1
+		*/
+		private _visible: boolean;
+
+		/**
+		* Set the visibility of this entity. True or False.
+		* @property visible
+		* @type boolean
+		* @default true
+		* @public
+		* @since 1.0.1
+		*/
+		public set visible(value: boolean) {
+			this._visible = value;
+		}
+		public get visible(): boolean {
+			return this._visible;
+		}
+
+
+		/**
+		* ---------------
+		* Tagging System
+		* ---------------
+		**/
+
+
+		/**
+		* Any tags that are on this Entity. This can be used to grab GameObjects or Groups on the whole game which have these particular tags.
+		* By default Entitys contain no tags.
+		* @property _tags
+		* @type Array
+		* @since 1.1.0
+		* @private
+		*/
+		private _tags: string[] = [];
+
+		/**
+		* Adds a new Tag to this Entity. Useful for identifying large amounts of the same type of GameObjects.
+		* You can pass multiple strings to add multiple tags.
+		* @method addTag
+		* @param tag {string} The tag that you would like to add to this Entity.
+		* @since 1.1.0
+		* @public
+		*/
+		public addTag(...args: any[]) {
+
+			//Loop through the arguments
+			for (var i = 0; i &lt; args.length; i++) {
+				if (this._tags.indexOf(args[i]) == -1) {
+					this._tags.push(args[i]);
+				}
+			}
+
+		}
+
+		/**
+		* Removes a Tag from this Entity.
+		* @method removeTag
+		* @param tag {string} The tag that you would like to remove from this Entity.
+		* @since 1.1.0
+		* @public
+		*/
+		public removeTag(...args: any[]) {
+
+			for (var i = 0; i &lt; args.length; i++) {
+				var index = this._tags.indexOf(args[i]);
+				if (index !== -1) this._tags.splice(index, 1);
+			}
+
+		}
+
+		/**
+		* Checks to see if this Entity has a Tag based upon a string which you pass.
+		* @method hasTag
+		* @param tag {string} 
+		* @since 1.1.0
+		* @return {boolean}
+		* @public 
+		*/
+		public hasTag(tag: string): boolean {
+
+			var len = this._tags.length;
+			while (len--) {
+				if (this._tags[len] === tag) {
+					return true;
+				}
+			}
+
+			return false;
+		}
+
+
+		/**
 		* Removes all children and destroys the Group. 
-        * @method destroy
-        * @param [immediate=false] {boolean} If the object should be immediately removed or if it should be removed at the end of the next update loop.
-        * @param [destroyChildren=true] {boolean} If all of the children on the group should also have their destroy methods called.
-        * @public
-		*/
-        public destroy(immediate:boolean = false, destroyChildren:boolean = true) {
-            
-            this._exists = false;
-            this._active = false
-            this._visible = false;
-
-            if (immediate === true) {
-
-                if (this._tempRemoveChildren !== null) destroyChildren = this._tempRemoveChildren;
-
-                if (destroyChildren == true) {
-
-                    //Remove all of the children.
-                    for (var i = 0; i &lt; this.members.length; i++) {
-                        this.members[i].destroy(true);
-                    }
-
-                } else {
-                    this.removeChildren();
-                
-                }
-
-                if (this.parent !== null) this.parent.removeChild(this);
-                if (this.state) this.state.removeFromTrackingList(this);
-                delete this.transform;
-                if (this.components) this.components.removeAll();
-                delete this.components;
-                delete this.game;
-                delete this.state;
-
-            } else {
-                this._tempRemoveChildren = destroyChildren;
-            }
-
-        }
-        
-        /**
-        * A temporary property that holds a boolean indicating whether or not the group&#x27;s children should be destroyed or not.
-        * @property _destroyRemoveChildren
-        * @type boolean
-        * @private
-        */
-        private _tempRemoveChildren: boolean = null;
-
-    }
+		* @method destroy
+		* @param [immediate=false] {boolean} If the object should be immediately removed or if it should be removed at the end of the next update loop.
+		* @param [destroyChildren=true] {boolean} If all of the children on the group should also have their destroy methods called.
+		* @public
+		*/
+		public destroy(immediate:boolean = false, destroyChildren:boolean = true) {
+			
+			this._exists = false;
+			this._active = false
+			this._visible = false;
+
+			if (immediate === true) {
+
+				if (this._tempRemoveChildren !== null) destroyChildren = this._tempRemoveChildren;
+
+				if (destroyChildren == true) {
+
+					//Remove all of the children.
+					for (var i = 0; i &lt; this.members.length; i++) {
+						this.members[i].destroy(true);
+					}
+
+				} else {
+					this.removeChildren();
+				}
+
+				if (this.parent !== null) this.parent.removeChild(this);
+				if (this.state) this.state.removeFromTrackingList(this);
+				delete this.transform;
+				if (this.components) this.components.removeAll();
+				delete this.components;
+				delete this.game;
+				delete this.state;
+
+			} else {
+				this._tempRemoveChildren = destroyChildren;
+			}
+
+		}
+
+		/**
+		* A temporary property that holds a boolean indicating whether or not the group&#x27;s children should be destroyed or not.
+		* @property _destroyRemoveChildren
+		* @type boolean
+		* @private
+		*/
+		private _tempRemoveChildren: boolean = null;
+
+	}
 
 }
 
diff --git a/docs/files/src_core_IChild.ts.html b/docs/files/src_core_IChild.ts.html
index cb0c4a8..07bf66d 100644
--- a/docs/files/src_core_IChild.ts.html
+++ b/docs/files/src_core_IChild.ts.html
@@ -371,305 +371,306 @@ <h1 class="file-heading">File: src/core/IChild.ts</h1>
 */
 
 module Kiwi {
-    
-    /**
-    * A IChild is an Interface (defined as a class as the documentation does not support Interfaces just yet),
-    * which outlines the methods/properties that objects which are intended to be added as a child of a Stage or Group must have in order to work.
-    * As Javascript does not use Interfaces, the IChild does not appear directly in the library. It describes common elements of Kiwi.Group and Kiwi.Entity.
-    * 
-    * @class IChild
-    * @namespace Kiwi
-    */
-    export interface IChild {
-
-        /**
-        * Renders the entity.
-        * 
-        * @method render
-        * @param camera {Kiwi.Camera}
-        * @public
-        * @deprecated Only Kiwi.Entity and inheritors are rendered.
-        */
-        render(camera: Kiwi.Camera);
-
-        /**
-        * Update the entity. Automatically called every frame.
-        *
-        * @method update
-        * @public
-        */
-        update();
-
-        /**
-        * Represents the type of child that this is.
-        * 
-        * @method childType
-        * @return number
-        * @public
-        */
-        childType(): number;
-
-        /**
-        * Unique identifier instantiated on creation.
-        * 
-        * @property id
-        * @type string
-        * @public
-        */
-        id: string;
-
-        /**
-        * A name for this object. This is not necessary or necessarily unique, but is handy for identifying objects.
-        *
-        * @property name
-        * @type string
-        * @public
-        */
-        name: string;
-
-        /**
-        * The game this object belongs to
-        *
-        * @property game
-        * @type Kiwi.Game
-        * @public
-        */
-        game: Kiwi.Game;
-
-        /**
-        * The State that this object belongs to
-        *
-        * @property state
-        * @type Kiwi.State
-        * @public
-        */
-        state: Kiwi.State;
-
-        /**
-        * The Component Manager
-        *
-        * @property components
-        * @type Kiwi.ComponentManager
-        * @public
-        */
-        components: Kiwi.ComponentManager;
-
-        /**
-        * An indication of whether or not this object is &#x27;dirty&#x27; and thus needs to be re-rendered in some manner.
-        *
-        * @property dirty
-        * @type boolean
-        * @public
-        */
-        dirty: boolean;
-
-        /**
-        * Toggles the active state. An active object has its update method called by its parent.
-        *
-        * @property active
-        * @type boolean
-        * @public
-        */
-        active: boolean;
-
-        /**
-        * Toggles the exitence of this object. An object that no longer exists can be garbage collected or re-allocated in a pool
-        * This method should be over-ridden to handle specific canvas/webgl implementations.
-        *
-        * @property exists
-        * @type boolean
-        * @public
-        */
-        exists: boolean;
-
-        /**
-        * Controls whether this object&#x27;s render methods are called by its parent.
-        *
-        * @property willRender
-        * @type boolean
-        * @public
-        * @deprecated Use visible instead
-        */
-        willRender: boolean;
-
-        /**
-        * Controls whether this object&#x27;s render methods are called by its parent.
-        *
-        * @property visible
-        * @type boolean
-        * @public
-        * @since 1.0.1
-        */
-        visible: boolean;
-
-        /**
-        * Sets the parent of this object. It is recommended to update transforms when you set this.
-        *
-        * @property parent
-        * @type Kiwi.Group
-        * @public
-        */
-        parent: Kiwi.Group;
-
-        /**
-        * The transform for this object. 
-        * Transform handles the calculation of coordinates/rotation/scale etc in the game world.
-        * @property transform
-        * @type Kiwi.Geom.Transform
-        * @public
-        */
-        transform: Kiwi.Geom.Transform;
-
-        /**
-        * The X coordinate of this object. This is just aliased to the transform property.
-        * @property x
-        * @type number
-        * @public
-        */
-        x: number;
-
-        /**
-        * The Y coordinate of this object. This is just aliased to the transform property.
-        * @property y
-        * @type number
-        * @public
-        */
-        y: number;
-
-        /**
-        * The X coordinate of this object in world space - that is, after inheriting transforms from parents. This is just aliased to the transform property.
-        * @property worldX
-        * @type number
-        * @public
-        * @since 1.1.0
-        */
-        worldX: number;
-
-        /**
-        * The Y coordinate of this object in world space - that is, after inheriting transforms from parents. This is just aliased to the transform property.
-        * @property worldY
-        * @type number
-        * @public
-        * @since 1.1.0
-        */
-        worldY: number;
-
-        /**
-        * The rotation of this object. This is just aliased to the transform property.
-        * @property rotation
-        * @type number
-        * @public
-        */
-        rotation: number;
-
-        /**
-        * The Scale X of this object. This is just aliased to the transform property.
-        * @property scaleX
-        * @type number
-        * @public
-        */
-        scaleX: number;
-
-        /**
-        * The Scale Y of this object. This is just aliased to the transform property.
-        * @property scaleY
-        * @type number
-        * @public
-        */
-        scaleY: number;
-
-        /**
-        * The scale of this object. This is just aliased to the transform property.
-        * @property scale
-        * @type number
-        * @public
-        * @since 1.1.0
-        */
-        scale: number;
-
-        /**
-        * The rotation offset of this object on the X axis. This is just aliased to the transform property.
-        * @property rotPointX
-        * @type number
-        * @public
-        * @since 1.1.0
-        */
-        rotPointX: number;
-
-        /**
-        * The rotation offset of this object on the Y axis. This is just aliased to the transform property.
-        * @property rotPointY
-        * @type number
-        * @public
-        * @since 1.1.0
-        */
-        rotPointY: number;
-
-        /**
-        * The anchor point offset of this object on the X axis. This is an alias of the rotPointX property on the transform.
-        * @property anchorPointX
-        * @type number
-        * @public
-        * @since 1.1.0
-        */
-        anchorPointX: number;
-
-        /**
-        * The anchor point offset of this object on the Y axis. This is an alias of the rotPointY property on the transform.
-        * @property anchorPointY
-        * @type number
-        * @public
-        * @since 1.1.0
-        */
-        anchorPointY: number;
-
-        /**
-        * Call this to clean up the object for deletion and garbage collection.
-        * @method destroy
-        * @param [immediate=false] {boolean} If the object should be immediately removed or if it should be removed at the end of the next update loop.
-        * @public
-        */
-        destroy(...params: any[]);
-
-        /**
-        * Adds a new Tag to this IChild. Useful for identifying large amounts of the same type of GameObjects.
-        * @method addTag
-        * @param tag {string}
-        * @since 1.1.0
-        * @public
-        */
-        addTag(...params: any[]);
-        
-        /**
-        * Removes a Tag from this IChild.
-        * @method removeTag
-        * @param tag {string}
-        * @since 1.1.0
-        * @public
-        */
-        removeTag(...params: any[]);
-        
-        /**
-        * Checks to see if this IChild has a Tag based upon a string which you pass.
-        * @method hasTag
-        * @param tag {string}
-        * @since 1.1.0
-        * @public
-        */
-        hasTag(tag: string): boolean;
-
-        /**
-        * Describes the type of this object.
-        * @method objType
-        * @returns string
-        * @public
-        * @since 1.1.0
-        */
-        objType(): string;
-
-    }
+
+	/**
+	* A IChild is an Interface (defined as a class as the documentation does not support Interfaces just yet),
+	* which outlines the methods/properties that objects which are intended to be added as a child of a Stage or Group must have in order to work.
+	* As Javascript does not use Interfaces, the IChild does not appear directly in the library. It describes common elements of Kiwi.Group and Kiwi.Entity.
+	* 
+	* @class IChild
+	* @namespace Kiwi
+	*/
+	export interface IChild {
+
+		/**
+		* Renders the entity.
+		* 
+		* @method render
+		* @param camera {Kiwi.Camera}
+		* @public
+		* @deprecated Only Kiwi.Entity and inheritors are rendered.
+		*/
+		render(camera: Kiwi.Camera);
+
+		/**
+		* Update the entity. Automatically called every frame.
+		*
+		* @method update
+		* @public
+		*/
+		update();
+
+		/**
+		* Represents the type of child that this is.
+		* 
+		* @method childType
+		* @return number
+		* @public
+		*/
+		childType(): number;
+
+		/**
+		* Unique identifier instantiated on creation.
+		* 
+		* @property id
+		* @type string
+		* @public
+		*/
+		id: string;
+
+		/**
+		* A name for this object. This is not necessary or necessarily unique, but is handy for identifying objects.
+		*
+		* @property name
+		* @type string
+		* @public
+		*/
+		name: string;
+
+		/**
+		* The game this object belongs to
+		*
+		* @property game
+		* @type Kiwi.Game
+		* @public
+		*/
+		game: Kiwi.Game;
+
+		/**
+		* The State that this object belongs to
+		*
+		* @property state
+		* @type Kiwi.State
+		* @public
+		*/
+		state: Kiwi.State;
+
+		/**
+		* The Component Manager
+		*
+		* @property components
+		* @type Kiwi.ComponentManager
+		* @public
+		*/
+		components: Kiwi.ComponentManager;
+
+		/**
+		* An indication of whether or not this object is &#x27;dirty&#x27; and thus needs to be re-rendered in some manner.
+		*
+		* @property dirty
+		* @type boolean
+		* @public
+		*/
+		dirty: boolean;
+
+		/**
+		* Toggles the active state. An active object has its update method called by its parent.
+		*
+		* @property active
+		* @type boolean
+		* @public
+		*/
+		active: boolean;
+
+		/**
+		* Toggles the exitence of this object. An object that no longer exists can be garbage collected or re-allocated in a pool
+		* This method should be over-ridden to handle specific canvas/webgl implementations.
+		*
+		* @property exists
+		* @type boolean
+		* @public
+		*/
+		exists: boolean;
+
+		/**
+		* Controls whether this object&#x27;s render methods are called by its parent.
+		*
+		* @property willRender
+		* @type boolean
+		* @public
+		* @deprecated Use visible instead
+		*/
+		willRender: boolean;
+
+		/**
+		* Controls whether this object&#x27;s render methods are called by its parent.
+		*
+		* @property visible
+		* @type boolean
+		* @public
+		* @since 1.0.1
+		*/
+		visible: boolean;
+
+		/**
+		* Sets the parent of this object. It is recommended to update transforms when you set this.
+		*
+		* @property parent
+		* @type Kiwi.Group
+		* @public
+		*/
+		parent: Kiwi.Group;
+
+		/**
+		* The transform for this object. 
+		* Transform handles the calculation of coordinates/rotation/scale etc in the game world.
+		* @property transform
+		* @type Kiwi.Geom.Transform
+		* @public
+		*/
+		transform: Kiwi.Geom.Transform;
+
+		/**
+		* The X coordinate of this object. This is just aliased to the transform property.
+		* @property x
+		* @type number
+		* @public
+		*/
+		x: number;
+
+		/**
+		* The Y coordinate of this object. This is just aliased to the transform property.
+		* @property y
+		* @type number
+		* @public
+		*/
+		y: number;
+
+		/**
+		* The X coordinate of this object in world space - that is, after inheriting transforms from parents. This is just aliased to the transform property.
+		* @property worldX
+		* @type number
+		* @public
+		* @since 1.1.0
+		*/
+		worldX: number;
+
+		/**
+		* The Y coordinate of this object in world space - that is, after inheriting transforms from parents. This is just aliased to the transform property.
+		* @property worldY
+		* @type number
+		* @public
+		* @since 1.1.0
+		*/
+		worldY: number;
+
+		/**
+		* The rotation of this object. This is just aliased to the transform property.
+		* @property rotation
+		* @type number
+		* @public
+		*/
+		rotation: number;
+
+		/**
+		* The Scale X of this object. This is just aliased to the transform property.
+		* @property scaleX
+		* @type number
+		* @public
+		*/
+		scaleX: number;
+
+		/**
+		* The Scale Y of this object. This is just aliased to the transform property.
+		* @property scaleY
+		* @type number
+		* @public
+		*/
+		scaleY: number;
+
+		/**
+		* The scale of this object. This is just aliased to the transform property.
+		* @property scale
+		* @type number
+		* @public
+		* @since 1.1.0
+		*/
+		scale: number;
+
+		/**
+		* The rotation offset of this object on the X axis. This is just aliased to the transform property.
+		* @property rotPointX
+		* @type number
+		* @public
+		* @since 1.1.0
+		*/
+		rotPointX: number;
+
+		/**
+		* The rotation offset of this object on the Y axis. This is just aliased to the transform property.
+		* @property rotPointY
+		* @type number
+		* @public
+		* @since 1.1.0
+		*/
+		rotPointY: number;
+
+		/**
+		* The anchor point offset of this object on the X axis. This is an alias of the rotPointX property on the transform.
+		* @property anchorPointX
+		* @type number
+		* @public
+		* @since 1.1.0
+		*/
+		anchorPointX: number;
+
+		/**
+		* The anchor point offset of this object on the Y axis. This is an alias of the rotPointY property on the transform.
+		* @property anchorPointY
+		* @type number
+		* @public
+		* @since 1.1.0
+		*/
+		anchorPointY: number;
+
+		/**
+		* Call this to clean up the object for deletion and garbage collection.
+		* @method destroy
+		* @param [immediate=false] {boolean} If the object should be immediately removed or if it should be removed at the end of the next update loop.
+		* @public
+		*/
+		destroy(...params: any[]);
+
+		/**
+		* Adds a new Tag to this IChild. Useful for identifying large amounts of the same type of GameObjects.
+		* @method addTag
+		* @param tag {string}
+		* @since 1.1.0
+		* @public
+		*/
+		addTag(...params: any[]);
+
+		/**
+		* Removes a Tag from this IChild.
+		* @method removeTag
+		* @param tag {string}
+		* @since 1.1.0
+		* @public
+		*/
+		removeTag(...params: any[]);
+
+		/**
+		* Checks to see if this IChild has a Tag based upon a string which you pass.
+		* @method hasTag
+		* @param tag {string}
+		* @since 1.1.0
+		* @public
+		*/
+		hasTag(tag: string): boolean;
+
+		/**
+		* Describes the type of this object.
+		* @method objType
+		* @returns string
+		* @public
+		* @since 1.1.0
+		*/
+		objType(): string;
+
+	}
 
 }
+
     </pre>
 </div>
 
diff --git a/docs/files/src_core_PluginManager.ts.html b/docs/files/src_core_PluginManager.ts.html
index c08dce1..69ffe7d 100644
--- a/docs/files/src_core_PluginManager.ts.html
+++ b/docs/files/src_core_PluginManager.ts.html
@@ -372,291 +372,285 @@ <h1 class="file-heading">File: src/core/PluginManager.ts</h1>
 
 module Kiwi {
 
-    /**
-    * The plugin manager registers plugins, checks plugin dependencies, and calls designated functions on each registered plugin at boot time, and during the update loop if required.
-    * Plugins are registered on the global Kiwi instance. Once a plugin in registered it is allocated a place on the Kiwi.Plugins name space.
-    * Eg. FooPlugin will be accessible at Kiwi.Plugins.FooPlugin.
-    * When a game instance is created, it can contain a list of required plugins in the configuration object. At this point the plugin manager will validate that the plugins
-    * exist, and that dependencies are met (both Kiwi version and versions of other required plugins).
-    * If the plugin has a &quot;create&quot; function, the plugin manager instance will call that function as part of the boot process. The create function may do anything, but usually it would create
-    * an instance of an object. 
-    * The plugin manager update function is called every update loop. If an object was created by the &quot;create&quot; function and it has an &quot;update&quot; function, that function will be called in turn.
-    * @class PluginManager
-    * @namespace Kiwi
-    * @constructor
-    * @param game {Kiwi.Game} The state that this entity belongs to. Used to generate the Unique ID and for garbage collection.
-    * @param plugins {string[]} The entities position on the x axis.
-    * @return {Kiwi.PluginManager} This PluginManager.
-    *
-    */
-    export class PluginManager {
-
-        constructor(game: Kiwi.Game,plugins:string[]) {
-            this._game = game;
-            this._plugins = plugins || new Array();
-            this._bootObjects = new Array();
-            this.validatePlugins();
-            this._createPlugins();
-        }
-
-        /**
-        * An array of plugins which have been included in the webpage and registered successfully.
-        * @property _availablePlugins
-        * @type Array
-        * @static
-        * @private
-        */
-        private static _availablePlugins = new Array();
-        
-
-        /**
-        * An array of objects represetning all available plugins, each containing the name and version number of an available plugin
-        * @property getAvailablePlugins
-        * @type Array
-        * @static
-        * @private
-        */
-        public static get availablePlugins():any {
-            var plugins = [];
-            for (var i = 0; i &lt; PluginManager._availablePlugins.length; i++) {
-                plugins.push({
-                    name: PluginManager._availablePlugins[i].name, version: PluginManager._availablePlugins[i].version});
-            }
-            return plugins;
-        }
-
-        
-        /**
-        * Registers a plugin object as available. Any game instance can choose to use the plugin.
-        * Plugins need only be registered once per webpage. If registered a second time it will be ignored.
-        * Two plugins with the same names cannot be reigstered simultaneously, even if different versions.
-        * @method register
-        * @param {object} plugin
-        * @public
-        * @static
-        */
-        public static register(plugin: any) {
-
-            Kiwi.Log.log(&quot;Kiwi.PluginManager: Attempting to register plugin : &quot; + plugin.name, &#x27;#plugin&#x27;);
-            if (this._availablePlugins.indexOf(plugin) == -1) {
-                //check if plugin with same name is registered
-                var uniqueName: boolean = true;
-                for (var i = 0; i &lt; this._availablePlugins.length; i++) {
-                    if (plugin.name === this._availablePlugins[i].name) {
-                        uniqueName = false;
-                    }
-                }
-
-                if (uniqueName) {
-                    this._availablePlugins.push(plugin);
-                    Kiwi.Log.log(&quot;  Kiwi.PluginManager: Registered plugin &quot; + plugin.name + &quot;: version &quot; + plugin.version, &#x27;#plugin&#x27;);
-                } else {
-                    Kiwi.Log.warn(&quot;  Kiwi.PluginManager: A plugin with the same name has already been registered. Ignoring this plugin.&quot;, &#x27;#plugin&#x27;);
-                
-                }
-            } else {
-                Kiwi.Log.warn(&quot;  Kiwi.PluginManager: This plugin has already been registered. Ignoring second registration.&quot;, &#x27;#plugin&#x27;);
-            }
-        }
-
-        /**
-        * Identifies the object as a PluginManager. 
-        * @property objType
-        * @type {string} &quot;PluginManager&quot;
-        * @public
-        */
-        public get objType(): string {
-            return &quot;PluginManager&quot;;
-        }
-
-        /**
-        * A reference to the game instance that owns the PluginManager. 
-        * @property objType
-        * @type Kiwi.Game
-        * @private
-        */
-        private _game: Kiwi.Game;
-
-        /**
-        * An array of plugin names which the game instance has been configured to use. Each name must match the constructor function for the plugin. 
-        * @property _plugins
-        * @type Array
-        * @private
-        */
-        private _plugins: string[];
-        
-        /**
-        * An array of objects that contain a boot function, each of which will be called when PluginManager.boot is invoked. 
-        * @property _bootObjects
-        * @type Array
-        * @private
-        */
-        private _bootObjects: any[];
-
-        /**
-        * Builds a list of valid plugins used by the game instance. Each plugin name that is supplied in the Kiwi.Game constructor configuration object  
-        * is checked against the Kiwi.Plugins namespace to ensure that a property of the same name exists.
-        * This will ignore plugin that are registered but not used by the game instance.
-        * @method validatePlugins
-        * @public
-        */
-        public validatePlugins() {
-            var validPlugins: string[] = new Array();
-            Kiwi.Log.log(&quot;Kiwi.PluginManager: Validating Plugins&quot;, &#x27;#plugins&#x27;);
-
-            for (var i = 0; i &lt; this._plugins.length; i++) {
-
-                var plugin: any = this._plugins[i];
-
-                if (typeof plugin == &#x27;string&#x27; || plugin instanceof String) {
-                    if (Kiwi.Plugins.hasOwnProperty(plugin) &amp;&amp; this.pluginIsRegistered(plugin)) {
-
-                        validPlugins.push(plugin);
-                        Kiwi.Log.log(&quot;  Kiwi.PluginManager: Plugin &#x27;&quot; + plugin + &quot;&#x27; appears to be valid.&quot;, &#x27;#plugin&#x27;);
-                        Kiwi.Log.log(&quot;  Kiwi.PluginManager: Name:&quot; + Kiwi.Plugins[plugin].name, &#x27;#plugin&#x27;);
-                        Kiwi.Log.log(&quot;  Kiwi.PluginManager: Version:&quot; + Kiwi.Plugins[plugin].version, &#x27;#plugin&#x27;);
-
-                        //test for kiwi version compatiblity
-                        if (typeof Kiwi.Plugins[plugin].minimumKiwiVersion !== &quot;undefined&quot;) {
-
-                            Kiwi.Log.log(&quot;  Kiwi.PluginManager: &quot; + plugin + &quot; requires minimum Kiwi version &quot; + Kiwi.Plugins[plugin].minimumKiwiVersion, &#x27;#plugin&#x27;);
-                            var parsedKiwiVersion = Utils.Version.parseVersion(Kiwi.VERSION);
-                            var parsedPluginMinVersion = Utils.Version.parseVersion(Kiwi.Plugins[plugin].minimumKiwiVersion);
-
-                            if (parsedKiwiVersion.majorVersion &gt; parsedPluginMinVersion.majorVersion) {
-                                Kiwi.Log.warn(&quot;  Kiwi.PluginManager: This major version of Kiwi is greater than that required by &#x27;&quot; + plugin + &quot;&#x27;. It is unknown whether this plugin will work with this version of Kiwi&quot;, &#x27;#plugin&#x27;); 
-                            } else {
-                                if (Utils.Version.greaterOrEqual(Kiwi.VERSION, Kiwi.Plugins[plugin].minimumKiwiVersion)) {
-                                    Kiwi.Log.log(&quot;  Kiwi.PluginManager: Kiwi version meets minimum version requirements for &#x27;&quot; + plugin + &quot;&#x27;.&quot;, &#x27;#plugin&#x27;);
-                                } else {
-                                    Kiwi.Log.warn(&quot;  Kiwi.PluginManager: Kiwi version (&quot; + Kiwi.VERSION + &quot;) does not meet minimum version requirements for the plugin (&quot; + Kiwi.Plugins[plugin].minimumKiwiVersion + &quot;).&quot;, &#x27;#plugin&#x27;);
-                                }
-                            }
-                        } else {
-                            Kiwi.Log.warn(&quot;  Kiwi.PluginManager: &#x27;&quot; + plugin + &quot;&#x27; is missing the minimumKiwiVersion property. It is unknown whether &#x27;&quot; + plugin + &quot;&#x27; will work with this version of Kiwi&quot;, &#x27;#plugin&#x27;);
-                        }
-                       
-
-                    } else {
-                        Kiwi.Log.log(&quot;  Kiwi.PluginManager: Plugin &#x27;&quot; + plugin + &quot;&#x27; appears to be invalid. No property with that name exists on the Kiwi.Plugins object or the Plugin is not registered. Check that the js file containing the plugin has been included. This plugin will be ignored&quot;, &#x27;#plugin&#x27;);
-                    }
-                } else {
-                    Kiwi.Log.log(&quot;  Kiwi.PluginManager: The supplied plugin name at index &quot; + i + &quot;is not a string and will be ignored&quot;, &#x27;#plugin&#x27;); 
-                }
-            }
-            this._plugins = validPlugins;
-
-            for (var i = 0; i &lt; this._plugins.length; i++) {
-                //test for plugin dependencies on other plugins
-                var pluginName: string = this._plugins[i];
-                var plugin = Kiwi.Plugins[pluginName];
-
-                if (typeof plugin.pluginDependencies !== &quot;undefined&quot;) {
-                    if (plugin.pluginDependencies.length === 0) {
-                        Kiwi.Log.log(&quot;  Kiwi.PluginManager: &#x27;&quot; + pluginName + &quot;&#x27; does not depend on any other plugins.&quot;, &#x27;#plugin&#x27;);
-                    } else {
-                        Kiwi.Log.log(&quot;  Kiwi.PluginManager: &#x27;&quot; + pluginName + &quot;&#x27; depends on the following plugins:&quot;, &#x27;#plugin&#x27;, &#x27;#dependencies&#x27;);
-                        for (var j = 0; j &lt; plugin.pluginDependencies.length; j++) {
-                            Kiwi.Log.log(plugin.pluginDependencies[j].name, plugin.pluginDependencies[j].minimumVersion, &#x27;#plugin&#x27;, &#x27;#dependencies&#x27; );
-                            if (!this.validMinimumPluginVersionExists(plugin.pluginDependencies[j].name, plugin.pluginDependencies[j].minimumVersion)) {
-                                Kiwi.Log.warn(&quot;  Kiwi.PluginManager: &#x27;&quot; + plugin.pluginDependencies[j].name + &quot; hasn&#x27;t been added to this game via the config, doesn&#x27;t exist, or does not meet minimum version requirement ( &quot; + plugin.pluginDependencies[j].minimumVersion + &quot;).&quot;, &#x27;#plugin&#x27;, &#x27;#dependencies&#x27;);   
-                            }
-                        }
-
-                    }
-                } else {
-                    Kiwi.Log.log(&quot;  Kiwi.PluginManager: &#x27;&quot; + pluginName + &quot;&#x27; does not depend on any other plugins.&quot;, &#x27;#plugin&#x27;, &#x27;#dependencies&#x27;);
-                }
-            }
-        }
-
-
-        /**
-        * Returns whether a valid minimum version of a plugin exists.
-        * @method validMinimumPluginVersionExists
-        * @param name {string} Name of plugin
-        * @param version {string} Minimum version
-        * @return boolean
-        * @public
-        */
-        public validMinimumPluginVersionExists( name: string, version: string ): boolean {
-            if ( this._plugins.indexOf( name ) !== -1 ) {
-                if ( Utils.Version.greaterOrEqual( Kiwi.Plugins[ name ].version, version ) ) {
-                    return true;
-                }
-            }
-            return false;
-        }
-
-        /**
-        * Returns true if a plugin identified by the supplied pluginName is registered.
-        * @method pluginIsRegistered
-        * @param {string} pluginName
-        * @public
-        */
-        public pluginIsRegistered(pluginName: string):boolean {
-            var isRegistered: boolean = false;
-            for (var i = 0; i &lt; Kiwi.PluginManager._availablePlugins.length; i++) {
-                if (Kiwi.PluginManager._availablePlugins[i].name === pluginName) {
-                    isRegistered = true;
-                }
-            }
-            return isRegistered;
-        }
-
-        /**
-        * Called after all other core objects and services created by the Kiwi.Game constructor are created.
-        * Attempts to find a &quot;create&quot; function on each plugin and calls it if it exists.
-        * The create function may return an object on which a boot function exists - to be called during boot process.
-        * @method _createPlugins
-        * @private
-        */
-        private _createPlugins() {
-            for (var i = 0; i &lt; this._plugins.length; i++) {
-                var plugin: string = this._plugins[i];
-                if (Kiwi.Plugins[plugin].hasOwnProperty(&quot;create&quot;)) {
-                    var bootObject = Kiwi.Plugins[plugin].create(this._game);
-                    if (bootObject) this._bootObjects.push(bootObject);
-                    
-                } 
-            }
-           
-           
-        }
-
-        /**
-        * Calls the boot functions on any objects that plugins used by the game instance have designated during creation. 
-        * @method boot
-        * @public
-        */
-        public boot() {
-            for (var i = 0; i &lt; this._bootObjects.length; i++) {
-                if (&quot;boot&quot; in this._bootObjects[i]) {
-                    this._bootObjects[i].boot.call(this._bootObjects[i]);
-                } else {
-                    Kiwi.Log.warn(&quot;Kiwi.PluginManager: Warning! No boot function found on boot object.&quot;, &#x27;#plugin&#x27;);
-                }
-            }
-
-        }
-
-        /**
-        * Calls the update functions on any objects that plugins used by the game instance have designated during creation. 
-        * @method update
-        * @public
-        */
-        
-        public update() {
-            for (var i = 0; i &lt; this._bootObjects.length; i++) {
-                if (&quot;update&quot; in this._bootObjects[i]) {
-                    this._bootObjects[i].update.call(this._bootObjects[i]);
-                }
-            }
-
-        }
-        
-    }
+	/**
+	* The plugin manager registers plugins, checks plugin dependencies, and calls designated functions on each registered plugin at boot time, and during the update loop if required.
+	* Plugins are registered on the global Kiwi instance. Once a plugin in registered it is allocated a place on the Kiwi.Plugins name space.
+	* Eg. FooPlugin will be accessible at Kiwi.Plugins.FooPlugin.
+	* When a game instance is created, it can contain a list of required plugins in the configuration object. At this point the plugin manager will validate that the plugins
+	* exist, and that dependencies are met (both Kiwi version and versions of other required plugins).
+	* If the plugin has a &quot;create&quot; function, the plugin manager instance will call that function as part of the boot process. The create function may do anything, but usually it would create
+	* an instance of an object. 
+	* The plugin manager update function is called every update loop. If an object was created by the &quot;create&quot; function and it has an &quot;update&quot; function, that function will be called in turn.
+	* @class PluginManager
+	* @namespace Kiwi
+	* @constructor
+	* @param game {Kiwi.Game} The state that this entity belongs to. Used to generate the Unique ID and for garbage collection.
+	* @param plugins {string[]} The entities position on the x axis.
+	* @return {Kiwi.PluginManager} This PluginManager.
+	*
+	*/
+	export class PluginManager {
+
+		constructor(game: Kiwi.Game,plugins:string[]) {
+			this._game = game;
+			this._plugins = plugins || new Array();
+			this._bootObjects = new Array();
+			this.validatePlugins();
+			this._createPlugins();
+		}
+
+		/**
+		* An array of plugins which have been included in the webpage and registered successfully.
+		* @property _availablePlugins
+		* @type Array
+		* @static
+		* @private
+		*/
+		private static _availablePlugins = new Array();
+
+		/**
+		* An array of objects represetning all available plugins, each containing the name and version number of an available plugin
+		* @property getAvailablePlugins
+		* @type Array
+		* @static
+		* @private
+		*/
+		public static get availablePlugins():any {
+			var plugins = [];
+			for (var i = 0; i &lt; PluginManager._availablePlugins.length; i++) {
+				plugins.push({
+					name: PluginManager._availablePlugins[i].name, version: PluginManager._availablePlugins[i].version});
+			}
+			return plugins;
+		}
+
+		/**
+		* Registers a plugin object as available. Any game instance can choose to use the plugin.
+		* Plugins need only be registered once per webpage. If registered a second time it will be ignored.
+		* Two plugins with the same names cannot be reigstered simultaneously, even if different versions.
+		* @method register
+		* @param {object} plugin
+		* @public
+		* @static
+		*/
+		public static register(plugin: any) {
+
+			Kiwi.Log.log(&quot;Kiwi.PluginManager: Attempting to register plugin : &quot; + plugin.name, &#x27;#plugin&#x27;);
+			if (this._availablePlugins.indexOf(plugin) == -1) {
+				//check if plugin with same name is registered
+				var uniqueName: boolean = true;
+				for (var i = 0; i &lt; this._availablePlugins.length; i++) {
+					if (plugin.name === this._availablePlugins[i].name) {
+						uniqueName = false;
+					}
+				}
+
+				if (uniqueName) {
+					this._availablePlugins.push(plugin);
+					Kiwi.Log.log(&quot;  Kiwi.PluginManager: Registered plugin &quot; + plugin.name + &quot;: version &quot; + plugin.version, &#x27;#plugin&#x27;);
+				} else {
+					Kiwi.Log.warn(&quot;  Kiwi.PluginManager: A plugin with the same name has already been registered. Ignoring this plugin.&quot;, &#x27;#plugin&#x27;);
+				
+				}
+			} else {
+				Kiwi.Log.warn(&quot;  Kiwi.PluginManager: This plugin has already been registered. Ignoring second registration.&quot;, &#x27;#plugin&#x27;);
+			}
+		}
+
+		/**
+		* Identifies the object as a PluginManager. 
+		* @property objType
+		* @type {string} &quot;PluginManager&quot;
+		* @public
+		*/
+		public get objType(): string {
+			return &quot;PluginManager&quot;;
+		}
+
+		/**
+		* A reference to the game instance that owns the PluginManager. 
+		* @property objType
+		* @type Kiwi.Game
+		* @private
+		*/
+		private _game: Kiwi.Game;
+
+		/**
+		* An array of plugin names which the game instance has been configured to use. Each name must match the constructor function for the plugin. 
+		* @property _plugins
+		* @type Array
+		* @private
+		*/
+		private _plugins: string[];
+
+		/**
+		* An array of objects that contain a boot function, each of which will be called when PluginManager.boot is invoked. 
+		* @property _bootObjects
+		* @type Array
+		* @private
+		*/
+		private _bootObjects: any[];
+
+		/**
+		* Builds a list of valid plugins used by the game instance. Each plugin name that is supplied in the Kiwi.Game constructor configuration object  
+		* is checked against the Kiwi.Plugins namespace to ensure that a property of the same name exists.
+		* This will ignore plugin that are registered but not used by the game instance.
+		* @method validatePlugins
+		* @public
+		*/
+		public validatePlugins() {
+			var validPlugins: string[] = new Array();
+			Kiwi.Log.log(&quot;Kiwi.PluginManager: Validating Plugins&quot;, &#x27;#plugins&#x27;);
+
+			for (var i = 0; i &lt; this._plugins.length; i++) {
+
+				var plugin: any = this._plugins[i];
+
+				if (typeof plugin == &#x27;string&#x27; || plugin instanceof String) {
+					if (Kiwi.Plugins.hasOwnProperty(plugin) &amp;&amp; this.pluginIsRegistered(plugin)) {
+
+						validPlugins.push(plugin);
+						Kiwi.Log.log(&quot;  Kiwi.PluginManager: Plugin &#x27;&quot; + plugin + &quot;&#x27; appears to be valid.&quot;, &#x27;#plugin&#x27;);
+						Kiwi.Log.log(&quot;  Kiwi.PluginManager: Name:&quot; + Kiwi.Plugins[plugin].name, &#x27;#plugin&#x27;);
+						Kiwi.Log.log(&quot;  Kiwi.PluginManager: Version:&quot; + Kiwi.Plugins[plugin].version, &#x27;#plugin&#x27;);
+
+						//test for kiwi version compatiblity
+						if (typeof Kiwi.Plugins[plugin].minimumKiwiVersion !== &quot;undefined&quot;) {
+
+							Kiwi.Log.log(&quot;  Kiwi.PluginManager: &quot; + plugin + &quot; requires minimum Kiwi version &quot; + Kiwi.Plugins[plugin].minimumKiwiVersion, &#x27;#plugin&#x27;);
+							var parsedKiwiVersion = Utils.Version.parseVersion(Kiwi.VERSION);
+							var parsedPluginMinVersion = Utils.Version.parseVersion(Kiwi.Plugins[plugin].minimumKiwiVersion);
+
+							if (parsedKiwiVersion.majorVersion &gt; parsedPluginMinVersion.majorVersion) {
+								Kiwi.Log.warn(&quot;  Kiwi.PluginManager: This major version of Kiwi is greater than that required by &#x27;&quot; + plugin + &quot;&#x27;. It is unknown whether this plugin will work with this version of Kiwi&quot;, &#x27;#plugin&#x27;); 
+							} else {
+								if (Utils.Version.greaterOrEqual(Kiwi.VERSION, Kiwi.Plugins[plugin].minimumKiwiVersion)) {
+									Kiwi.Log.log(&quot;  Kiwi.PluginManager: Kiwi version meets minimum version requirements for &#x27;&quot; + plugin + &quot;&#x27;.&quot;, &#x27;#plugin&#x27;);
+								} else {
+									Kiwi.Log.warn(&quot;  Kiwi.PluginManager: Kiwi version (&quot; + Kiwi.VERSION + &quot;) does not meet minimum version requirements for the plugin (&quot; + Kiwi.Plugins[plugin].minimumKiwiVersion + &quot;).&quot;, &#x27;#plugin&#x27;);
+								}
+							}
+						} else {
+							Kiwi.Log.warn(&quot;  Kiwi.PluginManager: &#x27;&quot; + plugin + &quot;&#x27; is missing the minimumKiwiVersion property. It is unknown whether &#x27;&quot; + plugin + &quot;&#x27; will work with this version of Kiwi&quot;, &#x27;#plugin&#x27;);
+						}
+
+
+					} else {
+						Kiwi.Log.log(&quot;  Kiwi.PluginManager: Plugin &#x27;&quot; + plugin + &quot;&#x27; appears to be invalid. No property with that name exists on the Kiwi.Plugins object or the Plugin is not registered. Check that the js file containing the plugin has been included. This plugin will be ignored&quot;, &#x27;#plugin&#x27;);
+					}
+				} else {
+					Kiwi.Log.log(&quot;  Kiwi.PluginManager: The supplied plugin name at index &quot; + i + &quot;is not a string and will be ignored&quot;, &#x27;#plugin&#x27;); 
+				}
+			}
+			this._plugins = validPlugins;
+
+			for (var i = 0; i &lt; this._plugins.length; i++) {
+				//test for plugin dependencies on other plugins
+				var pluginName: string = this._plugins[i];
+				var plugin = Kiwi.Plugins[pluginName];
+
+				if (typeof plugin.pluginDependencies !== &quot;undefined&quot;) {
+					if (plugin.pluginDependencies.length === 0) {
+						Kiwi.Log.log(&quot;  Kiwi.PluginManager: &#x27;&quot; + pluginName + &quot;&#x27; does not depend on any other plugins.&quot;, &#x27;#plugin&#x27;);
+					} else {
+						Kiwi.Log.log(&quot;  Kiwi.PluginManager: &#x27;&quot; + pluginName + &quot;&#x27; depends on the following plugins:&quot;, &#x27;#plugin&#x27;, &#x27;#dependencies&#x27;);
+						for (var j = 0; j &lt; plugin.pluginDependencies.length; j++) {
+							Kiwi.Log.log(plugin.pluginDependencies[j].name, plugin.pluginDependencies[j].minimumVersion, &#x27;#plugin&#x27;, &#x27;#dependencies&#x27; );
+							if (!this.validMinimumPluginVersionExists(plugin.pluginDependencies[j].name, plugin.pluginDependencies[j].minimumVersion)) {
+								Kiwi.Log.warn(&quot;  Kiwi.PluginManager: &#x27;&quot; + plugin.pluginDependencies[j].name + &quot; hasn&#x27;t been added to this game via the config, doesn&#x27;t exist, or does not meet minimum version requirement ( &quot; + plugin.pluginDependencies[j].minimumVersion + &quot;).&quot;, &#x27;#plugin&#x27;, &#x27;#dependencies&#x27;);   
+							}
+						}
+
+					}
+				} else {
+					Kiwi.Log.log(&quot;  Kiwi.PluginManager: &#x27;&quot; + pluginName + &quot;&#x27; does not depend on any other plugins.&quot;, &#x27;#plugin&#x27;, &#x27;#dependencies&#x27;);
+				}
+			}
+		}
+
+
+		/**
+		* Returns whether a valid minimum version of a plugin exists.
+		* @method validMinimumPluginVersionExists
+		* @param name {string} Name of plugin
+		* @param version {string} Minimum version
+		* @return boolean
+		* @public
+		*/
+		public validMinimumPluginVersionExists( name: string, version: string ): boolean {
+			if ( this._plugins.indexOf( name ) !== -1 ) {
+				if ( Utils.Version.greaterOrEqual( Kiwi.Plugins[ name ].version, version ) ) {
+					return true;
+				}
+			}
+			return false;
+		}
+
+		/**
+		* Returns true if a plugin identified by the supplied pluginName is registered.
+		* @method pluginIsRegistered
+		* @param {string} pluginName
+		* @public
+		*/
+		public pluginIsRegistered(pluginName: string):boolean {
+			var isRegistered: boolean = false;
+			for (var i = 0; i &lt; Kiwi.PluginManager._availablePlugins.length; i++) {
+				if (Kiwi.PluginManager._availablePlugins[i].name === pluginName) {
+					isRegistered = true;
+				}
+			}
+			return isRegistered;
+		}
+
+		/**
+		* Called after all other core objects and services created by the Kiwi.Game constructor are created.
+		* Attempts to find a &quot;create&quot; function on each plugin and calls it if it exists.
+		* The create function may return an object on which a boot function exists - to be called during boot process.
+		* @method _createPlugins
+		* @private
+		*/
+		private _createPlugins() {
+			for (var i = 0; i &lt; this._plugins.length; i++) {
+				var plugin: string = this._plugins[i];
+				if (Kiwi.Plugins[plugin].hasOwnProperty(&quot;create&quot;)) {
+					var bootObject = Kiwi.Plugins[plugin].create(this._game);
+					if (bootObject) this._bootObjects.push(bootObject);
+				}
+			}
+		}
+
+		/**
+		* Calls the boot functions on any objects that plugins used by the game instance have designated during creation. 
+		* @method boot
+		* @public
+		*/
+		public boot() {
+			for (var i = 0; i &lt; this._bootObjects.length; i++) {
+				if (&quot;boot&quot; in this._bootObjects[i]) {
+					this._bootObjects[i].boot.call(this._bootObjects[i]);
+				} else {
+					Kiwi.Log.warn(&quot;Kiwi.PluginManager: Warning! No boot function found on boot object.&quot;, &#x27;#plugin&#x27;);
+				}
+			}
+
+		}
+
+		/**
+		* Calls the update functions on any objects that plugins used by the game instance have designated during creation. 
+		* @method update
+		* @public
+		*/
+		
+		public update() {
+			for (var i = 0; i &lt; this._bootObjects.length; i++) {
+				if (&quot;update&quot; in this._bootObjects[i]) {
+					this._bootObjects[i].update.call(this._bootObjects[i]);
+				}
+			}
+		}
+	}
 }
+
     </pre>
 </div>
 
diff --git a/docs/files/src_core_Signal.ts.html b/docs/files/src_core_Signal.ts.html
index 6728b95..7e1b7d1 100644
--- a/docs/files/src_core_Signal.ts.html
+++ b/docs/files/src_core_Signal.ts.html
@@ -369,401 +369,401 @@ <h1 class="file-heading">File: src/core/Signal.ts</h1>
 * @module Kiwi
 * 
 */
- 
+
 module Kiwi {
 
-    /**
-    * A TypeScript conversion of JS Signals by Miller Medeiros.
-    * Released under the MIT license
-    * http://millermedeiros.github.com/js-signals/
-    *
-    * @class Signal
-    * @namespace Kiwi
-    * @constructor
-    * 
-    * @author Miller Medeiros, JS Signals
-    */
-    export class Signal {
-
-        /**
+	/**
+	* A TypeScript conversion of JS Signals by Miller Medeiros.
+	* Released under the MIT license
+	* http://millermedeiros.github.com/js-signals/
+	*
+	* @class Signal
+	* @namespace Kiwi
+	* @constructor
+	* 
+	* @author Miller Medeiros, JS Signals
+	*/
+	export class Signal {
+
+		/**
 		* A list of all of the signal bindings that have been attached.
-        * @property _bindings
-        * @type Array
-        * @private
-    	*/
-        private _bindings: SignalBinding[] = [];
+		* @property _bindings
+		* @type Array
+		* @private
+		*/
+		private _bindings: SignalBinding[] = [];
 
-        /**
+		/**
 		*  
-        * @property _prevParams
-        * @type Any
-        * @private
-    	*/
-        private _prevParams = null;
-
-        /**
-        * Signals Version Number
-        * @property VERSION
-        * @type String
-        * @default &#x27;1.0.0&#x27;
-        * @final
-        * @static
-        * @public
-        */
-        public static VERSION: string = &#x27;1.0.0&#x27;;
-
-        /**
-        * If Signal should keep record of previously dispatched parameters.
-        * @property memorize
-        * @type boolean
-        * @default false
-        * @public
-        */
-        public memorize: boolean = false;
-
-        /**
-        * If the callbacks should propagate or not. 
-        * @property _shouldPropagate
-        * @type boolean
-        * @default true
-        * @private
-        */
-        private _shouldPropagate: boolean = true;
-
-        /**
-        * If Signal is active and should broadcast events.
-        * Note: Setting this property during a dispatch will only affect the next dispatch, 
-        * if you want to stop the propagation of a signal use &#x60;halt()&#x60; instead.
-        * @property active
-        * @type boolean
-        * @default true
-        * @public
-        */
-        public active: boolean = true;
-
-
-        /**
-        * Returns the type of this object
-        * @method objType
-        * @return {String} &quot;Signal&quot;
-        * @public
-        */
-        public objType() {
-            return &quot;Signal&quot;;
-        }
-
-        /**
+		* @property _prevParams
+		* @type Any
+		* @private
+		*/
+		private _prevParams = null;
+
+		/**
+		* Signals Version Number
+		* @property VERSION
+		* @type String
+		* @default &#x27;1.0.0&#x27;
+		* @final
+		* @static
+		* @public
+		*/
+		public static VERSION: string = &#x27;1.0.0&#x27;;
+
+		/**
+		* If Signal should keep record of previously dispatched parameters.
+		* @property memorize
+		* @type boolean
+		* @default false
+		* @public
+		*/
+		public memorize: boolean = false;
+
+		/**
+		* If the callbacks should propagate or not. 
+		* @property _shouldPropagate
+		* @type boolean
+		* @default true
+		* @private
+		*/
+		private _shouldPropagate: boolean = true;
+
+		/**
+		* If Signal is active and should broadcast events.
+		* Note: Setting this property during a dispatch will only affect the next dispatch, 
+		* if you want to stop the propagation of a signal use &#x60;halt()&#x60; instead.
+		* @property active
+		* @type boolean
+		* @default true
+		* @public
+		*/
+		public active: boolean = true;
+
+
+		/**
+		* Returns the type of this object
+		* @method objType
+		* @return {String} &quot;Signal&quot;
+		* @public
+		*/
+		public objType() {
+			return &quot;Signal&quot;;
+		}
+
+		/**
 		* Validates a event listener an is used to check to see if it is valid or not.
-        * An event listener is not valid if it is not a function.
-        * If a event listener is not valid, then a Error is thrown. 
-        * 
-        * @method validateListener
-        * @param listener {Any} The event listener to be validated.
-        * @param fnName {Any} The name of the function. 
-        * @public
-    	*/
-        public validateListener(listener, fnName) {
-
-            if (typeof listener !== &#x27;function&#x27;)
-            {
-                throw new Error(&#x27;listener is a required param of {fn}() and should be a Function.&#x27;.replace(&#x27;{fn}&#x27;, fnName));
-            }
-
-        }
-
-        /**
-        * Internal Code which handles the registeration of a new callback (known as a &quot;listener&quot;).
-        * Creates a new SignalBinding for the Signal and then adds the binding to the list by its priority level.
-        * 
-        * @method _registerListener
-        * @param listener {Function} The method that is to be dispatched.
-        * @param isOnce {boolean} If the method should only be dispatched a single time or not.
-        * @param listenerContext {Object} The context that the callback should be executed with when called.
-        * @param priority {Number} The priority of this callback when Bindings are dispatched.
-        * @return {Kiwi.SignalBinding} The new SignalBinding that was created.
-        * @private
-        */
-        private _registerListener(listener, isOnce: boolean, listenerContext, priority: number): SignalBinding {
-
-            var prevIndex: number = this._indexOfListener(listener, listenerContext);
-            var binding: SignalBinding;
-
-            if (prevIndex !== -1)
-            {
-                binding = this._bindings[prevIndex];
-
-                if (binding.isOnce() !== isOnce)
-                {
-                    throw new Error(&#x27;You cannot add&#x27; + (isOnce ? &#x27;&#x27; : &#x27;Once&#x27;) + &#x27;() then add&#x27; + (!isOnce ? &#x27;&#x27; : &#x27;Once&#x27;) + &#x27;() the same listener without removing the relationship first.&#x27;);
-                }
-            }
-            else
-            {
-                binding = new SignalBinding(this, listener, isOnce, listenerContext, priority);
-
-                this._addBinding(binding);
-            }
-
-            if (this.memorize &amp;&amp; this._prevParams)
-            {
-                binding.execute(this._prevParams);
-            }
-
-            return binding;
-
-        }
-
-        /**
-        * Handles the process of adding a new SignalBinding to the bindings list by the new Bindings priority.
-        *
-        * @method _addBinding
-        * @param binding {Kiwi.SignalBinding}
-        * @private
-        */
-        private _addBinding(binding: SignalBinding) {
-
-            //simplified insertion sort
-
-            var n: number = this._bindings.length;
-
-            do { --n; } while (this._bindings[n] &amp;&amp; binding.priority &lt;= this._bindings[n].priority);
-
-            this._bindings.splice(n + 1, 0, binding);
-
-        }
-
-        /**
-        * Returns the index of any Binding which matches the listener and context that is passed.
-        * If none match then this method returns -1.
-        * 
-        * @method _indexOfListener
-        * @param listener {Function} The method that we are checking to see.
-        * @param context {any} The context of the method we are checking.
-        * @return {number} The index of listener/context.
-        * @private
-        */
-        private _indexOfListener(listener, context): number {
-
-            var n: number = this._bindings.length;
-            var cur: SignalBinding;
-
-            while (n--)
-            {
-                cur = this._bindings[n];
-
-                if (cur.getListener() === listener &amp;&amp; cur.context === context)
-                {
-                    return n;
-                }
-            }
-
-            return -1;
-
-        }
-
-        /**
-        * Accepts a function and returns a boolean indicating if the function 
-        * has already been attached to this Signal.
-        *
-        * @method has
-        * @param listener {Function} The method you are checking for.
-        * @param [context=null] {Any} The context of the listener.
-        * @return {boolean} If this Signal already has the specified listener.
-        * @public
-        */
-        public has(listener, context:any = null): boolean {
-
-            return this._indexOfListener(listener, context) !== -1;
-
-        }
-
-        /**
-        * Adds a new listener/callback to this Signal. 
-        * The listener attached will be executed whenever this Signal dispatches an event. 
-        * 
-        * @method add
-        * @param listener {Function} Signal handler function.
-        * @param [listenerContext=null] {Any} Context on which listener will be executed. (object that should represent the &#x60;this&#x60; variable inside listener function).
-        * @param [priority=0] {Number} The priority level of the event listener. Listeners with higher priority will be executed before listeners with lower priority. Listeners with same priority level will be executed at the same order as they were added. (default = 0)
-        * @return {Kiwi.SignalBinding} An Object representing the binding between the Signal and listener.
-        * @public
-        */
-        public add(listener, listenerContext:any = null, priority: number = 0): SignalBinding {
-
-            this.validateListener(listener, &#x27;add&#x27;);
-
-            return this._registerListener(listener, false, listenerContext, priority);
-
-        }
-
-        /**
-        * Add listener to the signal that should be removed after first execution (will be executed only once).
-        *
-        * @method addOnce
-        * @param listener {Function} Signal handler function.
-        * @param [listenerContext=null] {Any} Context on which listener will be executed (object that should represent the &#x60;this&#x60; variable inside listener function).
-        * @param [priority=0] {Number} The priority level of the event listener. Listeners with higher priority will be executed before listeners with lower priority. Listeners with same priority level will be executed at the same order as they were added. (default = 0)
-        * @return {Kiwi.SignalBinding} An Object representing the binding between the Signal and listener.
-        * @public
-        */
-        public addOnce(listener, listenerContext:any = null, priority: number = 0): SignalBinding {
-
-            this.validateListener(listener, &#x27;addOnce&#x27;);
-
-            return this._registerListener(listener, true, listenerContext, priority);
-
-        }
-
-        /**
-        * Remove a single listener from the dispatch queue.
-        *
-        * @method remove
-        * @param listener {Function} Handler function that should be removed.
-        * @param [context=null] {Any} Execution context (since you can add the same handler multiple times if executing in a different context).
-        * @return {Function} Listener handler function.
-        * @public
-        */
-        public remove(listener, context:any = null) {
-
-            this.validateListener(listener, &#x27;remove&#x27;);
-
-            var i: number = this._indexOfListener(listener, context);
-
-            if (i !== -1)
-            {
-                this._bindings[i]._destroy(); //no reason to a SignalBinding exist if it isn&#x27;t attached to a signal
-                this._bindings.splice(i, 1);
-            }
-
-            return listener;
-
-        }
-
-        /**
-        * Remove all listeners from the Signal.
-        * @method removeAll
-        * @public
-        */
-        public removeAll() {
-
-            var n: number = this._bindings.length;
-
-            while (n--)
-            {
-                this._bindings[n]._destroy();
-            }
-
-            this._bindings.length = 0;
-
-        }
-
-        /**
-        * Returns the number of listeners that have been attached to this Signal.
-        * 
-        * @method getNumListeners
-        * @return {number} Number of listeners attached to the Signal.
-        * @public
-        */
-        public getNumListeners(): number {
-
-            return this._bindings.length;
-
-        }
-
-        /**
-        * Stop propagation of the event, blocking the dispatch to next listeners on the queue.
-        * Note: should be called only during signal dispatch, calling it before/after dispatch won&#x27;t affect signal broadcast.
-        *
-        * @method halt
-        * @public
-        */
-        public halt() {
-
-            this._shouldPropagate = false;
-
-        }
-
-        /**
-        * Resume propagation of the event, resuming the dispatch to next listeners on the queue.
-        * Note: should be called only during signal dispatch, calling it before/after dispatch won&#x27;t affect signal broadcast.
-        *
-        * @method resume
-        * @public
-        */
-        public resume() {
+		* An event listener is not valid if it is not a function.
+		* If a event listener is not valid, then a Error is thrown. 
+		* 
+		* @method validateListener
+		* @param listener {Any} The event listener to be validated.
+		* @param fnName {Any} The name of the function. 
+		* @public
+		*/
+		public validateListener(listener, fnName) {
+
+			if (typeof listener !== &#x27;function&#x27;)
+			{
+				throw new Error(&#x27;listener is a required param of {fn}() and should be a Function.&#x27;.replace(&#x27;{fn}&#x27;, fnName));
+			}
+
+		}
+
+		/**
+		* Internal Code which handles the registeration of a new callback (known as a &quot;listener&quot;).
+		* Creates a new SignalBinding for the Signal and then adds the binding to the list by its priority level.
+		* 
+		* @method _registerListener
+		* @param listener {Function} The method that is to be dispatched.
+		* @param isOnce {boolean} If the method should only be dispatched a single time or not.
+		* @param listenerContext {Object} The context that the callback should be executed with when called.
+		* @param priority {Number} The priority of this callback when Bindings are dispatched.
+		* @return {Kiwi.SignalBinding} The new SignalBinding that was created.
+		* @private
+		*/
+		private _registerListener(listener, isOnce: boolean, listenerContext, priority: number): SignalBinding {
+
+			var prevIndex: number = this._indexOfListener(listener, listenerContext);
+			var binding: SignalBinding;
+
+			if (prevIndex !== -1)
+			{
+				binding = this._bindings[prevIndex];
+
+				if (binding.isOnce() !== isOnce)
+				{
+					throw new Error(&#x27;You cannot add&#x27; + (isOnce ? &#x27;&#x27; : &#x27;Once&#x27;) + &#x27;() then add&#x27; + (!isOnce ? &#x27;&#x27; : &#x27;Once&#x27;) + &#x27;() the same listener without removing the relationship first.&#x27;);
+				}
+			}
+			else
+			{
+				binding = new SignalBinding(this, listener, isOnce, listenerContext, priority);
+
+				this._addBinding(binding);
+			}
+
+			if (this.memorize &amp;&amp; this._prevParams)
+			{
+				binding.execute(this._prevParams);
+			}
+
+			return binding;
+
+		}
+
+		/**
+		* Handles the process of adding a new SignalBinding to the bindings list by the new Bindings priority.
+		*
+		* @method _addBinding
+		* @param binding {Kiwi.SignalBinding}
+		* @private
+		*/
+		private _addBinding(binding: SignalBinding) {
+
+			//simplified insertion sort
+
+			var n: number = this._bindings.length;
+
+			do { --n; } while (this._bindings[n] &amp;&amp; binding.priority &lt;= this._bindings[n].priority);
+
+			this._bindings.splice(n + 1, 0, binding);
+
+		}
+
+		/**
+		* Returns the index of any Binding which matches the listener and context that is passed.
+		* If none match then this method returns -1.
+		* 
+		* @method _indexOfListener
+		* @param listener {Function} The method that we are checking to see.
+		* @param context {any} The context of the method we are checking.
+		* @return {number} The index of listener/context.
+		* @private
+		*/
+		private _indexOfListener(listener, context): number {
+
+			var n: number = this._bindings.length;
+			var cur: SignalBinding;
+
+			while (n--)
+			{
+				cur = this._bindings[n];
+
+				if (cur.getListener() === listener &amp;&amp; cur.context === context)
+				{
+					return n;
+				}
+			}
+
+			return -1;
+
+		}
+
+		/**
+		* Accepts a function and returns a boolean indicating if the function 
+		* has already been attached to this Signal.
+		*
+		* @method has
+		* @param listener {Function} The method you are checking for.
+		* @param [context=null] {Any} The context of the listener.
+		* @return {boolean} If this Signal already has the specified listener.
+		* @public
+		*/
+		public has(listener, context:any = null): boolean {
+
+			return this._indexOfListener(listener, context) !== -1;
+
+		}
+
+		/**
+		* Adds a new listener/callback to this Signal. 
+		* The listener attached will be executed whenever this Signal dispatches an event. 
+		* 
+		* @method add
+		* @param listener {Function} Signal handler function.
+		* @param [listenerContext=null] {Any} Context on which listener will be executed. (object that should represent the &#x60;this&#x60; variable inside listener function).
+		* @param [priority=0] {Number} The priority level of the event listener. Listeners with higher priority will be executed before listeners with lower priority. Listeners with same priority level will be executed at the same order as they were added. (default = 0)
+		* @return {Kiwi.SignalBinding} An Object representing the binding between the Signal and listener.
+		* @public
+		*/
+		public add(listener, listenerContext:any = null, priority: number = 0): SignalBinding {
+
+			this.validateListener(listener, &#x27;add&#x27;);
+
+			return this._registerListener(listener, false, listenerContext, priority);
+
+		}
+
+		/**
+		* Add listener to the signal that should be removed after first execution (will be executed only once).
+		*
+		* @method addOnce
+		* @param listener {Function} Signal handler function.
+		* @param [listenerContext=null] {Any} Context on which listener will be executed (object that should represent the &#x60;this&#x60; variable inside listener function).
+		* @param [priority=0] {Number} The priority level of the event listener. Listeners with higher priority will be executed before listeners with lower priority. Listeners with same priority level will be executed at the same order as they were added. (default = 0)
+		* @return {Kiwi.SignalBinding} An Object representing the binding between the Signal and listener.
+		* @public
+		*/
+		public addOnce(listener, listenerContext:any = null, priority: number = 0): SignalBinding {
+
+			this.validateListener(listener, &#x27;addOnce&#x27;);
+
+			return this._registerListener(listener, true, listenerContext, priority);
+
+		}
+
+		/**
+		* Remove a single listener from the dispatch queue.
+		*
+		* @method remove
+		* @param listener {Function} Handler function that should be removed.
+		* @param [context=null] {Any} Execution context (since you can add the same handler multiple times if executing in a different context).
+		* @return {Function} Listener handler function.
+		* @public
+		*/
+		public remove(listener, context:any = null) {
+
+			this.validateListener(listener, &#x27;remove&#x27;);
+
+			var i: number = this._indexOfListener(listener, context);
+
+			if (i !== -1)
+			{
+				this._bindings[i]._destroy(); //no reason to a SignalBinding exist if it isn&#x27;t attached to a signal
+				this._bindings.splice(i, 1);
+			}
+
+			return listener;
+
+		}
+
+		/**
+		* Remove all listeners from the Signal.
+		* @method removeAll
+		* @public
+		*/
+		public removeAll() {
+
+			var n: number = this._bindings.length;
+
+			while (n--)
+			{
+				this._bindings[n]._destroy();
+			}
+
+			this._bindings.length = 0;
+
+		}
+
+		/**
+		* Returns the number of listeners that have been attached to this Signal.
+		* 
+		* @method getNumListeners
+		* @return {number} Number of listeners attached to the Signal.
+		* @public
+		*/
+		public getNumListeners(): number {
+
+			return this._bindings.length;
+
+		}
+
+		/**
+		* Stop propagation of the event, blocking the dispatch to next listeners on the queue.
+		* Note: should be called only during signal dispatch, calling it before/after dispatch won&#x27;t affect signal broadcast.
+		*
+		* @method halt
+		* @public
+		*/
+		public halt() {
+
+			this._shouldPropagate = false;
+
+		}
+
+		/**
+		* Resume propagation of the event, resuming the dispatch to next listeners on the queue.
+		* Note: should be called only during signal dispatch, calling it before/after dispatch won&#x27;t affect signal broadcast.
+		*
+		* @method resume
+		* @public
+		*/
+		public resume() {
 
-            this._shouldPropagate = true;
+			this._shouldPropagate = true;
 
-        }
-
-        /**
-        * Dispatch/Broadcast to all listeners added to this Signal.
-        * Parameters passed to this method will also be passed to each handler.
-        * 
-        * @method dispatch
-        * @param [params]* {any} Parameters that should be passed to each handler.
-        * @public
-        */
-        public dispatch(...paramsArr: any[]) {
+		}
+
+		/**
+		* Dispatch/Broadcast to all listeners added to this Signal.
+		* Parameters passed to this method will also be passed to each handler.
+		* 
+		* @method dispatch
+		* @param [params]* {any} Parameters that should be passed to each handler.
+		* @public
+		*/
+		public dispatch(...paramsArr: any[]) {
 
-            if (!this.active)
-            {
-                return;
-            }
+			if (!this.active)
+			{
+				return;
+			}
 
-            var n: number = this._bindings.length;
-            var bindings: SignalBinding[];
+			var n: number = this._bindings.length;
+			var bindings: SignalBinding[];
 
-            if (this.memorize)
-            {
-                this._prevParams = paramsArr;
-            }
+			if (this.memorize)
+			{
+				this._prevParams = paramsArr;
+			}
 
-            if (!n)
-            {
-                //should come after memorize
-                return;
-            }
+			if (!n)
+			{
+				//should come after memorize
+				return;
+			}
 
-            bindings = this._bindings.slice(0); //clone array in case add/remove items during dispatch
+			bindings = this._bindings.slice(0); //clone array in case add/remove items during dispatch
 
-            this._shouldPropagate = true; //in case &#x60;halt&#x60; was called before dispatch or during the previous dispatch.
+			this._shouldPropagate = true; //in case &#x60;halt&#x60; was called before dispatch or during the previous dispatch.
 
-            //execute all callbacks until end of the list or until a callback returns &#x60;false&#x60; or stops propagation
-            //reverse loop since listeners with higher priority will be added at the end of the list
-            do {
-                n--;
-            } while (bindings[n] &amp;&amp; this._shouldPropagate &amp;&amp; bindings[n].execute(paramsArr) !== false);
+			//execute all callbacks until end of the list or until a callback returns &#x60;false&#x60; or stops propagation
+			//reverse loop since listeners with higher priority will be added at the end of the list
+			do {
+				n--;
+			} while (bindings[n] &amp;&amp; this._shouldPropagate &amp;&amp; bindings[n].execute(paramsArr) !== false);
 
-        }
+		}
 
-        /**
-        * Forget memorized arguments. See the &#x27;memorize&#x27; property.
-        * @method forget
-        * @public
-        */
-        public forget() {
+		/**
+		* Forget memorized arguments. See the &#x27;memorize&#x27; property.
+		* @method forget
+		* @public
+		*/
+		public forget() {
 
-            this._prevParams = null;
+			this._prevParams = null;
 
-        }
+		}
 
-        /**
-        * Remove all bindings from signal and destroy any reference to external objects (destroy Signal object).
-        * Note: calling any method on the signal instance after calling dispose will throw errors.
-        * @method dispose
-        * @public
-        */
-        public dispose() {
-
-            this.removeAll();
-
-            delete this._bindings;
-            delete this._prevParams;
-
-        }
+		/**
+		* Remove all bindings from signal and destroy any reference to external objects (destroy Signal object).
+		* Note: calling any method on the signal instance after calling dispose will throw errors.
+		* @method dispose
+		* @public
+		*/
+		public dispose() {
+
+			this.removeAll();
+
+			delete this._bindings;
+			delete this._prevParams;
+
+		}
 
-    }
+	}
 
 }
 
diff --git a/docs/files/src_core_SignalBinding.ts.html b/docs/files/src_core_SignalBinding.ts.html
index a391399..afd3723 100644
--- a/docs/files/src_core_SignalBinding.ts.html
+++ b/docs/files/src_core_SignalBinding.ts.html
@@ -369,218 +369,218 @@ <h1 class="file-heading">File: src/core/SignalBinding.ts</h1>
 * @module Kiwi
 * 
 */
-  
+
 module Kiwi {
 
-    /**
-    * An object that represents a binding between a Signal and a listener function.
-    * &lt;br /&gt;- &lt;strong&gt;This is an internal constructor and shouldn&#x27;t be called by regular users.&lt;/strong&gt;
-    * &lt;br /&gt;- inspired by Joa Ebert AS3 SignalBinding and Robert Penner&#x27;s Slot classes.
-    * 
-    * Released under the MIT license
-    * http://millermedeiros.github.com/js-signals/
-    * 
-    * @class SignalBinding
-    * @namespace Kiwi
-    * 
-    * @author Miller Medeiros, JS Signals
-    * @constructor
-    * @internal
-    * @name SignalBinding
-    * @param signal {Kiwi.Signal} Reference to Signal object that listener is currently bound to.
-    * @param listener {Function} Handler function bound to the signal.
-    * @param isOnce {boolean} If binding should be executed just once.
-    * @param [listenerContext] {Object} Context on which listener will be executed (object that should represent the &#x60;this&#x60; variable inside listener function).
-    * @param [priority=0] {Number} The priority level of the event listener. (default = 0).
-    * @return {Kiwi.SignalBinding} 
-    */
-    export class SignalBinding {
-
-        constructor(signal: Signal, listener, isOnce: boolean, listenerContext, priority: number = 0) {
-
-            this._listener = listener;
-            this._isOnce = isOnce;
-            this.context = listenerContext;
-            this._signal = signal;
-            this.priority = priority || 0;
-
-        }
-
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} &quot;SignalBinding&quot;
-        * @public
-        */
-        public objType() {
-            return &quot;SignalBinding&quot;;
-        }
-
-        /**
-        * Handler function bound to the signal.
-        * @property _listener
-        * @type Function
-        * @private
-        */
-        private _listener;
-
-        /**
-        * If binding should be executed just once.
-        * @property _isOnce
-        * @type boolean
-        * @private
-        */
-        private _isOnce: boolean;
-
-        /**
-        * Context on which listener will be executed (object that should represent the &#x60;this&#x60; variable inside listener function).
-        * @property context
-        * @type any
-        * @public
-        */
-        public context;
-
-        /**
-        * Reference to Signal object that listener is currently bound to.
-        * @property _signal
-        * @type Kiwi.Signal
-        * @private
-        */
-        private _signal: Signal;
-
-        /**
-        * Listener priority
-        * @property priority
-        * @type Number
-        * @public
-        */
-        public priority: number;
-
-        /**
-        * If binding is active and should be executed.
-        * @property active
-        * @type boolean
-        * @default true
-        * @public
-        */
-        public active: boolean = true;
-
-        /**
-        * Default parameters passed to listener during &#x60;Signal.dispatch&#x60; and &#x60;SignalBinding.execute&#x60;. (curried parameters)
-        * @property params
-        * @type Any
-        * @default null
-        * @public
-        */
-        public params = null;
-
-        /**
-        * Call listener passing arbitrary parameters.
-        * If this binding was added using &#x60;Signal.addOnce()&#x60; it will be automatically removed from signal dispatch queue,
-        * this method is used internally for the signal dispatch.
-        *
-        * @method execute
-        * @param [paramsArr]* {Array} Array of parameters that should be passed to the listener
-        * @return {*} Value returned by the listener.
-        * @public
-        */
-        public execute(paramsArr?: any[]) {
-
-            var handlerReturn;
-            var params;
-
-            if (this.active &amp;&amp; !!this._listener)
-            {
-                params = this.params ? this.params.concat(paramsArr) : paramsArr;
-
-                handlerReturn = this._listener.apply(this.context, params);
-
-                if (this._isOnce)
-                {
-                    this.detach();
-                }
-            }
-
-            return handlerReturn;
-
-        }
-
-        /**
-        * Detach this binding from the Signal it is attached to. 
-        * Alias for &#x27;Signal.remove()&#x27;
-        * 
-        * @method detach
-        * @return {Function|null} Handler function bound to the signal or &#x60;null&#x60; if binding was previously detached.
-        * @public
-        */
-        public detach() {
-
-            return this.isBound() ? this._signal.remove(this._listener, this.context) : null;
-
-        }
-
-        /**
-        * Checks to see if this Binding is still bound to a Signal and contains a listener.
-        * @method isBound
-        * @return {boolean} &#x60;true&#x60; if binding is still bound to the signal and have a listener.
-        * @public
-        */
-        public isBound(): boolean {
-
-            return (!!this._signal &amp;&amp; !!this._listener);
-
-        }
-
-        /**
-        * Returns a boolean indicating whether this event will be exectued just once or not.
-        * @method isOnce
-        * @return {boolean} If SignalBinding will only be executed once.
-        * @public
-        */
-        public isOnce(): boolean {
-
-            return this._isOnce;
-
-        }
-
-        /**
-        * Returns the Handler function bound to the Signal.
-        * @method getListener
-        * @return {Function} Handler function bound to the signal.
-        * @public
-        */
-        public getListener() {
-
-            return this._listener;
-
-        }
-
-        /**
-        * Returns the signal which this Binding is currently attached to.
-        * @method getSignal
-        * @return {Kiwi.Signal} Signal that listener is currently bound to.
-        * @public
-        */
-        public getSignal() {
-
-            return this._signal;
-
-        }
-
-        /**
-        * Delete instance properties
-        * @method _destory
-        * @public
-        */
-        public _destroy() {
-
-            delete this._signal;
-            delete this._listener;
-            delete this.context;
-
-        }
+	/**
+	* An object that represents a binding between a Signal and a listener function.
+	* &lt;br /&gt;- &lt;strong&gt;This is an internal constructor and shouldn&#x27;t be called by regular users.&lt;/strong&gt;
+	* &lt;br /&gt;- inspired by Joa Ebert AS3 SignalBinding and Robert Penner&#x27;s Slot classes.
+	* 
+	* Released under the MIT license
+	* http://millermedeiros.github.com/js-signals/
+	* 
+	* @class SignalBinding
+	* @namespace Kiwi
+	* 
+	* @author Miller Medeiros, JS Signals
+	* @constructor
+	* @internal
+	* @name SignalBinding
+	* @param signal {Kiwi.Signal} Reference to Signal object that listener is currently bound to.
+	* @param listener {Function} Handler function bound to the signal.
+	* @param isOnce {boolean} If binding should be executed just once.
+	* @param [listenerContext] {Object} Context on which listener will be executed (object that should represent the &#x60;this&#x60; variable inside listener function).
+	* @param [priority=0] {Number} The priority level of the event listener. (default = 0).
+	* @return {Kiwi.SignalBinding} 
+	*/
+	export class SignalBinding {
+
+		constructor(signal: Signal, listener, isOnce: boolean, listenerContext, priority: number = 0) {
+
+			this._listener = listener;
+			this._isOnce = isOnce;
+			this.context = listenerContext;
+			this._signal = signal;
+			this.priority = priority || 0;
+
+		}
+
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} &quot;SignalBinding&quot;
+		* @public
+		*/
+		public objType() {
+			return &quot;SignalBinding&quot;;
+		}
+
+		/**
+		* Handler function bound to the signal.
+		* @property _listener
+		* @type Function
+		* @private
+		*/
+		private _listener;
+
+		/**
+		* If binding should be executed just once.
+		* @property _isOnce
+		* @type boolean
+		* @private
+		*/
+		private _isOnce: boolean;
+
+		/**
+		* Context on which listener will be executed (object that should represent the &#x60;this&#x60; variable inside listener function).
+		* @property context
+		* @type any
+		* @public
+		*/
+		public context;
+
+		/**
+		* Reference to Signal object that listener is currently bound to.
+		* @property _signal
+		* @type Kiwi.Signal
+		* @private
+		*/
+		private _signal: Signal;
+
+		/**
+		* Listener priority
+		* @property priority
+		* @type Number
+		* @public
+		*/
+		public priority: number;
+
+		/**
+		* If binding is active and should be executed.
+		* @property active
+		* @type boolean
+		* @default true
+		* @public
+		*/
+		public active: boolean = true;
+
+		/**
+		* Default parameters passed to listener during &#x60;Signal.dispatch&#x60; and &#x60;SignalBinding.execute&#x60;. (curried parameters)
+		* @property params
+		* @type Any
+		* @default null
+		* @public
+		*/
+		public params = null;
+
+		/**
+		* Call listener passing arbitrary parameters.
+		* If this binding was added using &#x60;Signal.addOnce()&#x60; it will be automatically removed from signal dispatch queue,
+		* this method is used internally for the signal dispatch.
+		*
+		* @method execute
+		* @param [paramsArr]* {Array} Array of parameters that should be passed to the listener
+		* @return {*} Value returned by the listener.
+		* @public
+		*/
+		public execute(paramsArr?: any[]) {
+
+			var handlerReturn;
+			var params;
+
+			if (this.active &amp;&amp; !!this._listener)
+			{
+				params = this.params ? this.params.concat(paramsArr) : paramsArr;
+
+				handlerReturn = this._listener.apply(this.context, params);
+
+				if (this._isOnce)
+				{
+					this.detach();
+				}
+			}
+
+			return handlerReturn;
+
+		}
+
+		/**
+		* Detach this binding from the Signal it is attached to. 
+		* Alias for &#x27;Signal.remove()&#x27;
+		* 
+		* @method detach
+		* @return {Function|null} Handler function bound to the signal or &#x60;null&#x60; if binding was previously detached.
+		* @public
+		*/
+		public detach() {
+
+			return this.isBound() ? this._signal.remove(this._listener, this.context) : null;
+
+		}
+
+		/**
+		* Checks to see if this Binding is still bound to a Signal and contains a listener.
+		* @method isBound
+		* @return {boolean} &#x60;true&#x60; if binding is still bound to the signal and have a listener.
+		* @public
+		*/
+		public isBound(): boolean {
+
+			return (!!this._signal &amp;&amp; !!this._listener);
+
+		}
+
+		/**
+		* Returns a boolean indicating whether this event will be exectued just once or not.
+		* @method isOnce
+		* @return {boolean} If SignalBinding will only be executed once.
+		* @public
+		*/
+		public isOnce(): boolean {
+
+			return this._isOnce;
+
+		}
+
+		/**
+		* Returns the Handler function bound to the Signal.
+		* @method getListener
+		* @return {Function} Handler function bound to the signal.
+		* @public
+		*/
+		public getListener() {
+
+			return this._listener;
+
+		}
+
+		/**
+		* Returns the signal which this Binding is currently attached to.
+		* @method getSignal
+		* @return {Kiwi.Signal} Signal that listener is currently bound to.
+		* @public
+		*/
+		public getSignal() {
+
+			return this._signal;
+
+		}
+
+		/**
+		* Delete instance properties
+		* @method _destory
+		* @public
+		*/
+		public _destroy() {
+
+			delete this._signal;
+			delete this._listener;
+			delete this.context;
+
+		}
 
-    }
+	}
 
 }
 
diff --git a/docs/files/src_core_Stage.ts.html b/docs/files/src_core_Stage.ts.html
index 1caa5e9..e4b848c 100644
--- a/docs/files/src_core_Stage.ts.html
+++ b/docs/files/src_core_Stage.ts.html
@@ -368,861 +368,857 @@ <h1 class="file-heading">File: src/core/Stage.ts</h1>
 * 
 * @module Kiwi
 * 
-*/ 
+*/
 
 module Kiwi {
 
-    /**
-    * Each game contains a single Stage which controls the creation and management of main domElements required for a Kiwi game to work. 
-    * Such as the Canvas and the rendering contexts, as well as the width/height of the game and the position it should be on the screen.
-    *
-    * @class Stage
-    * @namespace Kiwi
-    * @constructor
-    * @param game {Kiwi.Game} The game that this Stage belongs to. 
-    * @param name {String} The name of the kiwi game.
-    * @param width {Number} The initial width of the game. 
-    * @param height {Number} The initial heihgt of the game.
-    * @param scaleType {Number} The scale method that should be used for the game.
-    * @return {Kiwi.Stage}  
-    *
-    */
-    export class Stage {
-         
-        constructor(game: Kiwi.Game, name: string, width: number, height: number, scaleType:number) {
-
-            this._game = game;
-
-            this.name = name;
-
-            this.domReady = false;
-             
-            //  Properties
-            this._alpha = 1;
-            
-            this._x = 0;
-            this._y = 0;
-
-            this._width = width;
-            this._height = height;
-            this.color = &quot;ffffff&quot;;
-            // CocoonJS should be black instead
-            if(game.deviceTargetOption === Kiwi.TARGET_COCOON) {
-                this.color = &quot;000000&quot;;
-            }
-
-            this._scale = new Kiwi.Geom.Point(1, 1);
-            this._scaleType = scaleType;
-
-            this.onResize = new Kiwi.Signal();
-            this.onWindowResize = new Kiwi.Signal();
-
-            this._renderer = null;
-        }
-
-        /**
-        * Returns the type of this object.
-        * @method objType
-        * @return {string} &quot;Stage&quot;
-        * @public
-        */
-        public objType():string {
-            return &quot;Stage&quot;;
-        }
-
-        /**
-        * The default width of the stage.
-        * @property DEFAULT_WIDTH
-        * @type number
-        * @default 800
-        * @public
-        * @static
-        */
-        public static DEFAULT_WIDTH: number = 800;
-
-        /**
-        * The default height of the stage.
-        * @property DEFAULT_HEIGHT
-        * @type number
-        * @default 600
-        * @public
-        * @static
-        */
-        public static DEFAULT_HEIGHT: number = 600;
-
-
-        /**
-        * The default scaling method used on Kiwi Games. 
-        * This scaling method will set the containers width/height to static values.
-        * @property SCALE_NONE
-        * @type number
-        * @default 0 
-        * @public 
-        * @static
-        */
-        public static SCALE_NONE: number = 0;
-        
-        /**
-        * Scale Fit will scale the stages width to fit its parents width.
-        * The height is then calculated to maintain the aspect ratio of the width/height of the Stage.
-        * @property SCALE_FIT
-        * @type number
-        * @default 1 
-        * @public 
-        * @static
-        */
-        public static SCALE_FIT: number = 1;
-        
-        /**
-        * Stretch will make the stage scale to fit its parents width/height (by using max/min height of 100%).
-        * If the parent doesn&#x27;t have a height set then the height will be the height of the stage. 
-        * @property SCALE_STRETCH
-        * @type number
-        * @default 2 
-        * @public 
-        * @static
-        */
-        public static SCALE_STRETCH: number = 2;
-        
-        /**
-        * Private property that holds the scaling method that should be applied to the container element. 
-        * @property _scaleType
-        * @type number
-        * @default Kiwi.Stage.SCALE_NONE
-        * @private
-        */
-        private _scaleType: number = Kiwi.Stage.SCALE_NONE;
-        
-        /**
-        * Holds type of scaling that should be applied the container element. 
-        * @property scaleType
-        * @type number
-        * @default Kiwi.Stage.SCALE_NONE
-        * @public
-        */
-        public set scaleType(val: number) {
-            this._scaleType = val;
-            this._scaleContainer();
-        }
-
-        public get scaleType():number {
-            return this._scaleType;
-        }
-
-
-        /**
-        * The alpha of the stage. 
-        * @property _alpha
-        * @type number
-        * @default 1
-        * @private
-        */
-        private _alpha: number;
-
-        /**
-        * Sets the alpha of the container element. 0 = invisible, 1 = fully visible.
-        * Note: Because the alpha value is applied to the container, it will not work in CocoonJS.
-        *
-        * @property alpha
-        * @type number
-        * @default 1
-        * @public
-        */
-        public get alpha():number {
-            return this._alpha;
-        }
-        public set alpha(value: number) {
-            if (this._game.deviceTargetOption === Kiwi.TARGET_BROWSER) {
-                this.container.style.opacity = String(Kiwi.Utils.GameMath.clamp(value, 1, 0));
-            }
-            // Doesnt work in cocoon
-
-            this._alpha = value;
-        }
-
-        /**
-        * The X coordinate of the stage.
-        * @property _x
-        * @type number
-        * @private 
-        */
-        private _x: number;
-
-        /**
-        * The X coordinate of the stage. This number should be the same as the stages left property.
-        * @property x
-        * @type number
-        * @public
-        */
-        public get x(): number {
-            return this._x;
-        } 
-        public set x(value: number) {
-            if (this._game.deviceTargetOption === Kiwi.TARGET_BROWSER) {
-                this.container.style.left = String(value + &quot;px&quot;);
-            } else if (this._game.deviceTargetOption === Kiwi.TARGET_COCOON) {
-                this.canvas.style.left = String(value + &quot;px&quot;);
-            }
-            this._x = value;
-        }
-
-        /**
-        * The Y coordinate of the stage.
-        * @property _y
-        * @type number
-        * @private
-        */
-        private _y: number;
-
-        /**
-        * Get the Y coordinate of the stage. This number should be the same as the stages top property.
-        * @property y
-        * @type number
-        * @public
-        */
-        public get y(): number {
-            return this._y;
-        }
-        public set y(value: number) {
-            if (this._game.deviceTargetOption === Kiwi.TARGET_BROWSER) {
-                this.container.style.top = String(value + &quot;px&quot;);
-            } else if (this._game.deviceTargetOption === Kiwi.TARGET_COCOON) {
-                this.canvas.style.top = String(value + &quot;px&quot;);
-            }
-            this._y = value;
-        }
-
-        /**
-        * The width of the stage.
-        * @property _width
-        * @type number
-        * @private
-        */
-        private _width: number;
-        
-        /**
-        * The width of the stage. This is READ ONLY. See the &quot;resize&quot; method if you need to modify this value.
-        * @property width
-        * @type number
-        * @public 
-        * @readonly
-        */
-        public get width(): number {
-            return this._width;
-        }
-      
-        /**
-        * The height of the stage
-        * @property _height
-        * @type number
-        * @private
-        */
-        private _height: number;
-        
-        /**
-        * The height of the stage. This is READ ONLY. See the &quot;resize&quot; method if you need to modify this value.
-        * @property height
-        * @type number
-        * @public
-        * @readonly
-        */
-        public get height(): number {
-            return this._height;
-        }
-       
-        /**
-        * A Signal that dispatches an event when the stage gets resized.
-        * @property onResize
-        * @type Kiwi.Signal
-        * @public
-        */
-        public onResize: Kiwi.Signal;
-
-
-        /**
-        * A Signal which dispatches events when the window is resized. 
-        * Useful to detect if the screen is now in a &quot;landscape&quot; or &quot;portrait&quot; view on Mobile/Cocoon devices. 
-        * @property onWindowResize
-        * @type Kiwi.Signal
-        * @public
-        */
-        public onWindowResize: Kiwi.Signal;
-
-        /**
-        * Calculates and returns the amount that the container has been scale by.  
-        * Mainly used for re-calculating input coordinates. 
-        * Note: For COCOONJS this returns 1 since COCOONJS translates the scale itself.
-        * This property is READ ONLY.
-        * @property scale
-        * @type Kiwi.Geom.Point
-        * @default 1
-        * @public
-        */
-        private _scale: Kiwi.Geom.Point;
-
-        public get scale(): Kiwi.Geom.Point {
-            return this._scale;
-        }
-
-        /**
-        * Calculates and returns the amount that the container has been scale by on the X axis.  
-        * @property scaleX
-        * @type Number
-        * @default 1 
-        * @public
-        */
-        public get scaleX(): number {
-            return this._scale.x;
-        }
-
-        /**
-        * Calculates and returns the amount that the container has been scale by on the Y axis.
-        * @property scaleY
-        * @type Number
-        * @default 1
-        * @public
-        */
-        public get scaleY(): number {
-            return this._scale.y;
-        }
-
-        /**
+	/**
+	* Each game contains a single Stage which controls the creation and management of main domElements required for a Kiwi game to work. 
+	* Such as the Canvas and the rendering contexts, as well as the width/height of the game and the position it should be on the screen.
+	*
+	* @class Stage
+	* @namespace Kiwi
+	* @constructor
+	* @param game {Kiwi.Game} The game that this Stage belongs to. 
+	* @param name {String} The name of the kiwi game.
+	* @param width {Number} The initial width of the game. 
+	* @param height {Number} The initial heihgt of the game.
+	* @param scaleType {Number} The scale method that should be used for the game.
+	* @return {Kiwi.Stage}  
+	*
+	*/
+	export class Stage {
+
+		constructor(game: Kiwi.Game, name: string, width: number, height: number, scaleType:number) {
+
+			this._game = game;
+
+			this.name = name;
+
+			this.domReady = false;
+
+			//  Properties
+			this._alpha = 1;
+
+			this._x = 0;
+			this._y = 0;
+
+			this._width = width;
+			this._height = height;
+			this.color = &quot;ffffff&quot;;
+			// CocoonJS should be black instead
+			if(game.deviceTargetOption === Kiwi.TARGET_COCOON) {
+				this.color = &quot;000000&quot;;
+			}
+
+			this._scale = new Kiwi.Geom.Point(1, 1);
+			this._scaleType = scaleType;
+
+			this.onResize = new Kiwi.Signal();
+			this.onWindowResize = new Kiwi.Signal();
+
+			this._renderer = null;
+		}
+
+		/**
+		* Returns the type of this object.
+		* @method objType
+		* @return {string} &quot;Stage&quot;
+		* @public
+		*/
+		public objType():string {
+			return &quot;Stage&quot;;
+		}
+
+		/**
+		* The default width of the stage.
+		* @property DEFAULT_WIDTH
+		* @type number
+		* @default 800
+		* @public
+		* @static
+		*/
+		public static DEFAULT_WIDTH: number = 800;
+
+		/**
+		* The default height of the stage.
+		* @property DEFAULT_HEIGHT
+		* @type number
+		* @default 600
+		* @public
+		* @static
+		*/
+		public static DEFAULT_HEIGHT: number = 600;
+
+
+		/**
+		* The default scaling method used on Kiwi Games. 
+		* This scaling method will set the containers width/height to static values.
+		* @property SCALE_NONE
+		* @type number
+		* @default 0 
+		* @public 
+		* @static
+		*/
+		public static SCALE_NONE: number = 0;
+
+		/**
+		* Scale Fit will scale the stages width to fit its parents width.
+		* The height is then calculated to maintain the aspect ratio of the width/height of the Stage.
+		* @property SCALE_FIT
+		* @type number
+		* @default 1 
+		* @public 
+		* @static
+		*/
+		public static SCALE_FIT: number = 1;
+
+		/**
+		* Stretch will make the stage scale to fit its parents width/height (by using max/min height of 100%).
+		* If the parent doesn&#x27;t have a height set then the height will be the height of the stage. 
+		* @property SCALE_STRETCH
+		* @type number
+		* @default 2 
+		* @public 
+		* @static
+		*/
+		public static SCALE_STRETCH: number = 2;
+
+		/**
+		* Private property that holds the scaling method that should be applied to the container element. 
+		* @property _scaleType
+		* @type number
+		* @default Kiwi.Stage.SCALE_NONE
+		* @private
+		*/
+		private _scaleType: number = Kiwi.Stage.SCALE_NONE;
+
+		/**
+		* Holds type of scaling that should be applied the container element. 
+		* @property scaleType
+		* @type number
+		* @default Kiwi.Stage.SCALE_NONE
+		* @public
+		*/
+		public set scaleType(val: number) {
+			this._scaleType = val;
+			this._scaleContainer();
+		}
+
+		public get scaleType():number {
+			return this._scaleType;
+		}
+
+
+		/**
+		* The alpha of the stage. 
+		* @property _alpha
+		* @type number
+		* @default 1
+		* @private
+		*/
+		private _alpha: number;
+
+		/**
+		* Sets the alpha of the container element. 0 = invisible, 1 = fully visible.
+		* Note: Because the alpha value is applied to the container, it will not work in CocoonJS.
+		*
+		* @property alpha
+		* @type number
+		* @default 1
+		* @public
+		*/
+		public get alpha():number {
+			return this._alpha;
+		}
+		public set alpha(value: number) {
+			if (this._game.deviceTargetOption === Kiwi.TARGET_BROWSER) {
+				this.container.style.opacity = String(Kiwi.Utils.GameMath.clamp(value, 1, 0));
+			}
+			// Doesnt work in cocoon
+
+			this._alpha = value;
+		}
+
+		/**
+		* The X coordinate of the stage.
+		* @property _x
+		* @type number
+		* @private 
+		*/
+		private _x: number;
+
+		/**
+		* The X coordinate of the stage. This number should be the same as the stages left property.
+		* @property x
+		* @type number
+		* @public
+		*/
+		public get x(): number {
+			return this._x;
+		} 
+		public set x(value: number) {
+			if (this._game.deviceTargetOption === Kiwi.TARGET_BROWSER) {
+				this.container.style.left = String(value + &quot;px&quot;);
+			} else if (this._game.deviceTargetOption === Kiwi.TARGET_COCOON) {
+				this.canvas.style.left = String(value + &quot;px&quot;);
+			}
+			this._x = value;
+		}
+
+		/**
+		* The Y coordinate of the stage.
+		* @property _y
+		* @type number
+		* @private
+		*/
+		private _y: number;
+
+		/**
+		* Get the Y coordinate of the stage. This number should be the same as the stages top property.
+		* @property y
+		* @type number
+		* @public
+		*/
+		public get y(): number {
+			return this._y;
+		}
+		public set y(value: number) {
+			if (this._game.deviceTargetOption === Kiwi.TARGET_BROWSER) {
+				this.container.style.top = String(value + &quot;px&quot;);
+			} else if (this._game.deviceTargetOption === Kiwi.TARGET_COCOON) {
+				this.canvas.style.top = String(value + &quot;px&quot;);
+			}
+			this._y = value;
+		}
+
+		/**
+		* The width of the stage.
+		* @property _width
+		* @type number
+		* @private
+		*/
+		private _width: number;
+
+		/**
+		* The width of the stage. This is READ ONLY. See the &quot;resize&quot; method if you need to modify this value.
+		* @property width
+		* @type number
+		* @public 
+		* @readonly
+		*/
+		public get width(): number {
+			return this._width;
+		}
+
+		/**
+		* The height of the stage
+		* @property _height
+		* @type number
+		* @private
+		*/
+		private _height: number;
+
+		/**
+		* The height of the stage. This is READ ONLY. See the &quot;resize&quot; method if you need to modify this value.
+		* @property height
+		* @type number
+		* @public
+		* @readonly
+		*/
+		public get height(): number {
+			return this._height;
+		}
+
+		/**
+		* A Signal that dispatches an event when the stage gets resized.
+		* @property onResize
+		* @type Kiwi.Signal
+		* @public
+		*/
+		public onResize: Kiwi.Signal;
+
+
+		/**
+		* A Signal which dispatches events when the window is resized. 
+		* Useful to detect if the screen is now in a &quot;landscape&quot; or &quot;portrait&quot; view on Mobile/Cocoon devices. 
+		* @property onWindowResize
+		* @type Kiwi.Signal
+		* @public
+		*/
+		public onWindowResize: Kiwi.Signal;
+
+		/**
+		* Calculates and returns the amount that the container has been scale by.  
+		* Mainly used for re-calculating input coordinates. 
+		* Note: For COCOONJS this returns 1 since COCOONJS translates the scale itself.
+		* This property is READ ONLY.
+		* @property scale
+		* @type Kiwi.Geom.Point
+		* @default 1
+		* @public
+		*/
+		private _scale: Kiwi.Geom.Point;
+
+		public get scale(): Kiwi.Geom.Point {
+			return this._scale;
+		}
+
+		/**
+		* Calculates and returns the amount that the container has been scale by on the X axis.  
+		* @property scaleX
+		* @type Number
+		* @default 1 
+		* @public
+		*/
+		public get scaleX(): number {
+			return this._scale.x;
+		}
+
+		/**
+		* Calculates and returns the amount that the container has been scale by on the Y axis.
+		* @property scaleY
+		* @type Number
+		* @default 1
+		* @public
+		*/
+		public get scaleY(): number {
+			return this._scale.y;
+		}
+
+		/**
 		* A point which determines the offset of this Stage
-        * @property offset
-        * @type Kiwi.Geom.Point
-        * @public
-    	*/
-        public offset: Kiwi.Geom.Point = new Kiwi.Geom.Point();
-        
-        /**
-        * The game this Stage belongs to
-        * @property _game
-        * @type Kiwi.Game
-        * @private 
-        */
-        private _game: Kiwi.Game;
-
-        /**
-        * The title of your stage
-        * @property name
-        * @type string
-        * @public
-        */
-        public name: string;
-
-        /**
-        * Whether or not this Stage is DOM ready.
-        * @property domReady
-        * @type boolean
-        * @public
-        */
-        public domReady: boolean;
-
-        /**
-        * The background color of the stage. 
-        *
-        * @property _color
-        * @type Kiwi.Utils.Color
-        * @public
-        */
-        public _color: Kiwi.Utils.Color = new Kiwi.Utils.Color();
-        
-        /**
-        * Sets the background color of the stage.
-        *
-        * This can be any valid parameter for Kiwi.Utils.Color.
-        * If passing multiple parameters, do so in a single array.
-        *
-        * The default value is &quot;ffffff&quot; or pure white.
-        *
-        * Note for users of CocoonJS: When using the WebGL renderer,
-        * the stage color will fill all parts of the screen outside the canvas.
-        * Kiwi.js will automatically set the color to &quot;000000&quot; or pure black
-        * when using CocoonJS. If you change it, and your game does not fill
-        * the entire screen, the empty portions of the screen will also change
-        * color.
-        *
-        * @property color
-        * @type string
-        * @public
-        */
-        public get color(): any {
-            return this._color.getHex();
-        }
-
-        public set color( val: any ) {
-            if ( !Kiwi.Utils.Common.isArray( val ) ) {
-                val = [ val ];
-            }
-            this._color.set.apply( this._color, val );
-        }
-
-        /**
-        * Allows the setting of the background color of the stage through component RGB colour values.
-        *
-        * This property is an Object Literal with &quot;r&quot;, &quot;g&quot;, &quot;b&quot; colour streams of values between 0 and 255.
-        *
-        * @property rgbColor
-        * @type Object
-        * @public
-        */
-        public get rgbColor():any {
-            return { r: this._color.r * 255, g: this._color.g * 255, b: this._color.b * 255 };
-        }
-
-        public set rgbColor(val: any) {
-            this._color.set( val.r, val.g, val.b );
-        }
-
-        /**
-        * Allows the setting of the background color of the stage through component RGBA colour values.
-        *
-        * This property is an Object Literal with &quot;r&quot;, &quot;g&quot;, &quot;b&quot;, &quot;a&quot; colour streams of values between 0 and 255.
-        * 
-        * Note that the alpha value is from 0-255, not 0-1. This is to preserve compatibility with hex-style color values, e.g. &quot;ff0000ff&quot;.
-        *
-        * @property rgbaColor
-        * @type Object
-        * @public
-        * @since 1.1.0
-        */
-        public get rgbaColor():any {
-            return { r: this._color.r * 255, g: this._color.g * 255, b: this._color.b * 255, a: this._color.a * 255 };
-        }
-
-        public set rgbaColor(val: any) {
-            this._color.set( val.r, val.g, val.b, val.a );
-        }
-
-        /**
-        * Get the normalized background color of the stage.
-        * Returns an object with rgba values, each being between 0 and 1.
-        * This is READ ONLY.
-        * @property normalizedColor
-        * @type string
-        * @public
-        */
-        public get normalizedColor(): any {
-            return {
-                r: this._color.r,
-                g: this._color.g,
-                b: this._color.b,
-                a: this._color.a };
-            }
-
-        /**
-        * The webgl rendering context.
-        * @property gl
-        * @type WebGLRenderingContext
-        * @public
-        */
-        public gl: WebGLRenderingContext;
-
-
-        /**
-        * The canvas rendering context.
-        * @property ctx
-        * @type CanvasRenderingContext2D
-        * @public
-        */
-        public ctx: CanvasRenderingContext2D;
-
-
-        /**
-        * The canvas element that is being rendered on.
-        * @property canvas
-        * @type HTMLCanvasElement
-        * @public
-        */
-        public canvas: HTMLCanvasElement;
-        
-
-        /**
-        * The debugging canvas.
-        * @property debugCanvas
-        * @type HTMLCanvasElement
-        * @public
-        */
-        public debugCanvas: HTMLCanvasElement;
-
-
-        /**
-        * The debug canvas rendering context.
-        * @property dctx
-        * @type CanvasRenderingContext2D
-        * @public
-        */
-        public dctx: CanvasRenderingContext2D;
-
-
-        /**
-        * The parent div in which the layers and input live
-        * @property container
-        * @type HTMLDivElement
-        * @public
-        */
-        public container:HTMLDivElement = null;
-
-
-        /**
-        * Stores the renderer created after context detection.
-        * @property _renderer
-        * @type any
-        * @private
-        * @since 1.1.0
-        */
-        private _renderer: any;
-
-        /**
-        * Get the renderer associated with the canvas context. This is either a GLRenderManager or a CanvasRenderer. If the Kiwi.RENDERER_WEBGL renderer was requested but could not be created, it will fall back to CanvasRenderer.
-        * This is READ ONLY.
-        * @property renderer
-        * @type number
-        * @public
-        * @since 1.1.0
-        */
-        public get renderer(): any {
-            return this._renderer;
-        }
-         
-
-        /**
-        * Is executed when the DOM has loaded and the game is just starting. 
-        * This is a internal method used by the core of Kiwi itself. 
-        * @method boot
-        * @param dom {HTMLElement} The
-        * @public
-        */
-        public boot(dom: Kiwi.System.Bootstrap) {
-            var self = this;
-             
-            this.domReady = true;
-            this.container = dom.container;
-
-            if (this._game.deviceTargetOption === Kiwi.TARGET_BROWSER) {
-
-                this.offset = this.getOffsetPoint( this.container );
-
-                this._x = this.offset.x;
-                this._y = this.offset.y;
-
-                window.addEventListener(&quot;resize&quot;, (event: UIEvent) =&gt; this._windowResized(event), true);
-            }
-
-            
-            this._createCompositeCanvas();
-
-
-            if (this._game.deviceTargetOption === Kiwi.TARGET_COCOON) {
-                this._scaleContainer();
-                // Detect reorientation/resize
-                window.addEventListener(&quot;orientationchange&quot;, function( event:UIEvent ) {
-                    return self._orientationChanged(event);
-                }, true);
-            } else {
-                this._calculateContainerScale();
-            }
-        }
-        
-        /**
-        * Gets the x/y coordinate offset of any given valid DOM Element from the top/left position of the browser
-        * Based on jQuery offset https://github.com/jquery/jquery/blob/master/src/offset.js 
-        * @method getOffsetPoint
-        * @param {Any} element
-        * @param {Kiwi.Geom.Point} output
-        * @return {Kiwi.Geom.Point}
-        * @public
-        */
-        public getOffsetPoint(element, output: Kiwi.Geom.Point = new Kiwi.Geom.Point): Kiwi.Geom.Point {
-
-            var box = element.getBoundingClientRect();
-
-            var clientTop = element.clientTop || document.body.clientTop || 0;
-            var clientLeft = element.clientLeft || document.body.clientLeft || 0;
-            var scrollTop = window.pageYOffset || element.scrollTop || document.body.scrollTop;
-            var scrollLeft = window.pageXOffset || element.scrollLeft || document.body.scrollLeft;
-
-            return output.setTo(box.left + scrollLeft - clientLeft, box.top + scrollTop - clientTop);
-
-        }
-
-        /**
-        * Method that is fired when the window is resized. 
-        * @method _windowResized
-        * @param event {UIEvent}
-        * @private
-        */
-        private _windowResized(event:UIEvent) {
-            this._calculateContainerScale();
-
-            //Dispatch window resize event
-            this.onWindowResize.dispatch();
-        }
-
-        /**
-        * Method that is fired when the device is reoriented.
-        * @method _orientationChanged
-        * @param event {UIEvent}
-        * @private
-        * @since 1.1.1
-        */
-        private _orientationChanged(event:UIEvent) {
-            this.onResize.dispatch(window.innerWidth, window.innerHeight);
-        }
-
-        /**
-        * Used to calculate the new offset and the scale of the stage currently is at.
-        * @method _calculateContainerScale
-        * @private
-        */
-        private _calculateContainerScale() {
-
-            //Calculate the scale twice
-            //This will give the correct scale upon completion the second run
-            //Temporary fix until the Scale Manager is implemented
-            this._scaleContainer();
-            this._scaleContainer();
-
-            this.offset = this.getOffsetPoint(this.container);
-
-            this._scale.x = this._width / this.container.clientWidth;
-            this._scale.y = this._height / this.container.clientHeight;
-
-        }
-
-        /**
-        * Handles the creation of the canvas that the game will use and retrieves the context for the renderer. 
-        *
-        * @method _createComponsiteCanvas
-        * @private
-        */
-        private _createCompositeCanvas() {
-            
-            //If we are using cocoon then create a accelerated screen canvas
-            if (this._game.deviceTargetOption == Kiwi.TARGET_COCOON) {
-                this.canvas = &lt;HTMLCanvasElement&gt;document.createElement(navigator[&quot;isCocoonJS&quot;] ? &quot;screencanvas&quot; : &quot;canvas&quot;);
-            
-            //Otherwise default to normal canvas
-            } else {
-                this.canvas = &lt;HTMLCanvasElement&gt;document.createElement(&quot;canvas&quot;);
-                this.canvas.style.width = &quot;100%&quot;;
-                this.canvas.style.height = &quot;100%&quot;;
-
-            }
-
-            this.canvas.id = this._game.id + &quot;compositeCanvas&quot;;
-            this.canvas.style.position = &quot;absolute&quot;;
-            this.canvas.width = this.width;
-            this.canvas.height = this.height;
-            
-
-            //Get 2D or GL Context; do error detection and fallback to valid rendering context
-            if (this._game.renderOption === Kiwi.RENDERER_CANVAS) {
-                this.ctx = this.canvas.getContext(&quot;2d&quot;);
-                this.ctx.fillStyle = &quot;#fff&quot;;
-                this.gl = null;
-            } else if (this._game.renderOption === Kiwi.RENDERER_WEBGL) {
-                this.gl = this.canvas.getContext(&quot;webgl&quot;);
-                if (!this.gl) {
-                    this.gl = this.canvas.getContext(&quot;experimental-webgl&quot;);
-                    if (!this.gl) {
-                        Kiwi.Log.warn(&quot;Kiwi.Stage: WebGL rendering is not available despite the device apparently supporting it. Reverting to CANVAS.&quot;, &quot;#renderer&quot;);
-                        // Reset to canvas mode
-                        this.ctx = this.canvas.getContext(&quot;2d&quot;);
-                        this.ctx.fillStyle = &quot;#fff&quot;;
-                        this.gl = null;
-                    } else {
-                        Kiwi.Log.warn(&quot;Kiwi.Stage: &#x27;webgl&#x27; context is not available. Using &#x27;experimental-webgl&#x27;&quot;, &quot;#renderer&quot;);
-                    }
-                }
-                if ( this.gl ) {
-
-                    // That is, WebGL was properly supported and created
-                    this.gl.clearColor(1, 1, 1, 1);
-                    this.gl.clear(this.gl.COLOR_BUFFER_BIT | this.gl.DEPTH_BUFFER_BIT);
-                    this.ctx = null;
-                }
-            }
-
-            // Create render manager
-            // This is reported back to the Kiwi.Game that created the Stage.
-            if(this.ctx) {
-                this._renderer = new Kiwi.Renderers.CanvasRenderer(this._game);
-            } else if(this.gl) {
-                this._renderer = new Kiwi.Renderers.GLRenderManager(this._game);
-            }
-            
-
-            if (this._game.deviceTargetOption === Kiwi.TARGET_BROWSER) {
-                this.container.appendChild(this.canvas);
-            } else {
-                document.body.appendChild(this.canvas);
-            }
-        
-        }
-        
-
-        /**
-        * Set the stage width and height for rendering purposes.
-        * This will not effect that &quot;scaleType&quot; that it has been set to.
-        *
-        * @method resize
-        * @param width {number} The new Stage width.
-        * @param height {number} The new Stage height.
-        * @public
-        */
-        public resize(width: number, height: number) {
-
-            this.canvas.height = height;
-            this.canvas.width = width;
-            this._height = height;
-            this._width = width;
-
-            if (this._game.deviceTargetOption === Kiwi.TARGET_BROWSER) {
-                this._calculateContainerScale();
-            }
-
-            this.onResize.dispatch(this._width, this._height);
-        }
-
-        /**
-        * Sets the background color of the stage through component RGB colour values. 
-        * Each parameter is a number between 0 and 255.
-        * This method also returns an Object Literal with &quot;r&quot;, &quot;g&quot;, &quot;b&quot; properties.
-        *
-        * @method setRGBColor
-        * @param r {Number} The red component. A value between 0 and 255.
-        * @param g {Number} The green component. A value between 0 and 255.
-        * @param b {Number} The blue component. A value between 0 and 255.
-        * @return {Object} A Object literal containing the r,g,b properties. 
-        * @public
-        */
-        public setRGBColor(r: number, g: number, b: number):any {
-            this.rgbColor = { r: r, g: g, b: b };
-            return this.rgbColor;
-        }
-
-
-        /**
-        * Creates a debug canvas and adds it above the regular game canvas.
-        * The debug canvas is not created by default (even with debugging on) and rendering/clearing of the canvas is upto the developer. 
-        * The context for rendering can be access via the &quot;dctx&quot; property and you can use the &quot;clearDebugCanvas&quot; method to clear the canvas.
-        *
-        * @method createDebugCanvas
-        * @public
-        */
-        public createDebugCanvas() {
-
-            if( Kiwi.Utils.Common.isUndefined(this.debugCanvas) == false ) return;
-            
-            if (this._game.deviceTargetOption === Kiwi.TARGET_COCOON) {
-                //Not supported in CocoonJS only because we cannot add it to the container (as a container does not exist) and position will be hard.
-                Kiwi.Log.log(&quot;Debug canvas not supported in cocoon, creating canvas and context anyway&quot;, &quot;#debug-canvas&quot;);                
-            } 
-
-            this.debugCanvas = &lt;HTMLCanvasElement&gt;document.createElement(&quot;canvas&quot;);
-            this.debugCanvas.id = this._game.id + &quot;debugCanvas&quot;;
-            this.debugCanvas.style.position = &quot;absolute&quot;;
-            this.debugCanvas.width = this.width;
-            this.debugCanvas.height = this.height;
-            this.debugCanvas.style.width = &quot;100%&quot;;
-            this.debugCanvas.style.height = &quot;100%&quot;;
-            this.dctx = this.debugCanvas.getContext(&quot;2d&quot;);
-            this.clearDebugCanvas();
-
-            if (this._game.deviceTargetOption === Kiwi.TARGET_BROWSER) {
-                this.container.appendChild(this.debugCanvas);
-            }
-          
-        }
-        
-
-        /**
-        * Clears the debug canvas and fills with either the color passed. 
-        * If not colour is passed then Red at 20% opacity is used.
-        * 
-        * @method clearDebugCanvas
-        * @param [color=&quot;rgba(255,0,0,0.2)&quot;] {string} The debug color to rendering on the debug canvas.
-        * @public
-        */
-        public clearDebugCanvas( color?:string ) {
-            this.dctx.fillStyle = color || &quot;rgba(255,0,0,.2)&quot;;
-            this.dctx.clearRect(0, 0, this.width, this.height);
-            this.dctx.fillRect(0, 0, this.width, this.height)
-        }
-
-        /**
-        * Toggles the visibility of the debug canvas. 
-        * @method toggleDebugCanvas
-        * @public
-        */
-        public toggleDebugCanvas() {
-            this.debugCanvas.style.display = (this.debugCanvas.style.display === &quot;none&quot;) ? &quot;block&quot; : &quot;none&quot;;
-        }
-
-        /**
-        * Handles the scaling/sizing based upon the scaleType property.
-        * @method _scaleContainer
-        * @private
-        */
-        private _scaleContainer() {
-
-            if (this._game.deviceTargetOption == Kiwi.TARGET_BROWSER) {
-
-                var clientWidth = this.container.clientWidth;
-
-                this.container.style.width = String(this._width + &quot;px&quot;);
-                this.container.style.height = String(this._height + &quot;px&quot;);
-
-                if (this._scaleType == Kiwi.Stage.SCALE_NONE) {
-                    this.container.style.maxWidth = &quot;&quot;;
-                    this.container.style.minWidth = &quot;&quot;;
-                }
-
-                //To Fit or STRETCH 
-                if (this._scaleType == Kiwi.Stage.SCALE_STRETCH || this._scaleType == Kiwi.Stage.SCALE_FIT) {
-                    this.container.style.minWidth = &quot;100%&quot;;
-                    this.container.style.maxWidth = &quot;100%&quot;;
-                }
-
-                //If scale stretched then scale the containers height to 100% of its parents.
-                if (this._scaleType == Kiwi.Stage.SCALE_STRETCH) {
-                    this.container.style.minHeight = &quot;100%&quot;;
-                    this.container.style.maxHeight = &quot;100%&quot;;
-                } else {
-                    this.container.style.minHeight = &quot;&quot;;
-                    this.container.style.maxHeight = &quot;&quot;;
-                }
-
-                //If it is SCALE to FIT then scale the containers height in ratio with the containers width.
-                if (this._scaleType == Kiwi.Stage.SCALE_FIT) {
-                    this.container.style.height = String((clientWidth / this._width) * this._height) + &quot;px&quot;;
-                }
-
-            }
-
-            if (this._game.deviceTargetOption == Kiwi.TARGET_COCOON) {
-                // This has no effect in WebGL, and is thus handled separately.
-                switch (this._scaleType) {
-                    case Kiwi.Stage.SCALE_FIT:
-                        this.canvas.style.cssText = &quot;idtkscale:ScaleAspectFit&quot;;
-                        break;
-
-                    case Kiwi.Stage.SCALE_STRETCH:
-                        this.canvas.style.cssText = &quot;idtkscale:ScaleToFill&quot;;
-                        break;
-
-                    case Kiwi.Stage.SCALE_NONE:
-                        this.canvas.style.cssText = &quot;&quot;;
-                        break;
-                }
-
-            }
-
-        }
-
-
-    }
+		* @property offset
+		* @type Kiwi.Geom.Point
+		* @public
+		*/
+		public offset: Kiwi.Geom.Point = new Kiwi.Geom.Point();
+
+		/**
+		* The game this Stage belongs to
+		* @property _game
+		* @type Kiwi.Game
+		* @private 
+		*/
+		private _game: Kiwi.Game;
+
+		/**
+		* The title of your stage
+		* @property name
+		* @type string
+		* @public
+		*/
+		public name: string;
+
+		/**
+		* Whether or not this Stage is DOM ready.
+		* @property domReady
+		* @type boolean
+		* @public
+		*/
+		public domReady: boolean;
+
+		/**
+		* The background color of the stage. 
+		*
+		* @property _color
+		* @type Kiwi.Utils.Color
+		* @public
+		*/
+		public _color: Kiwi.Utils.Color = new Kiwi.Utils.Color();
+
+		/**
+		* Sets the background color of the stage.
+		*
+		* This can be any valid parameter for Kiwi.Utils.Color.
+		* If passing multiple parameters, do so in a single array.
+		*
+		* The default value is &quot;ffffff&quot; or pure white.
+		*
+		* Note for users of CocoonJS: When using the WebGL renderer,
+		* the stage color will fill all parts of the screen outside the canvas.
+		* Kiwi.js will automatically set the color to &quot;000000&quot; or pure black
+		* when using CocoonJS. If you change it, and your game does not fill
+		* the entire screen, the empty portions of the screen will also change
+		* color.
+		*
+		* @property color
+		* @type string
+		* @public
+		*/
+		public get color(): any {
+			return this._color.getHex();
+		}
+
+		public set color( val: any ) {
+			if ( !Kiwi.Utils.Common.isArray( val ) ) {
+				val = [ val ];
+			}
+			this._color.set.apply( this._color, val );
+		}
+
+		/**
+		* Allows the setting of the background color of the stage through component RGB colour values.
+		*
+		* This property is an Object Literal with &quot;r&quot;, &quot;g&quot;, &quot;b&quot; colour streams of values between 0 and 255.
+		*
+		* @property rgbColor
+		* @type Object
+		* @public
+		*/
+		public get rgbColor():any {
+			return { r: this._color.r * 255, g: this._color.g * 255, b: this._color.b * 255 };
+		}
+
+		public set rgbColor(val: any) {
+			this._color.set( val.r, val.g, val.b );
+		}
+
+		/**
+		* Allows the setting of the background color of the stage through component RGBA colour values.
+		*
+		* This property is an Object Literal with &quot;r&quot;, &quot;g&quot;, &quot;b&quot;, &quot;a&quot; colour streams of values between 0 and 255.
+		* 
+		* Note that the alpha value is from 0-255, not 0-1. This is to preserve compatibility with hex-style color values, e.g. &quot;ff0000ff&quot;.
+		*
+		* @property rgbaColor
+		* @type Object
+		* @public
+		* @since 1.1.0
+		*/
+		public get rgbaColor():any {
+			return { r: this._color.r * 255, g: this._color.g * 255, b: this._color.b * 255, a: this._color.a * 255 };
+		}
+
+		public set rgbaColor(val: any) {
+			this._color.set( val.r, val.g, val.b, val.a );
+		}
+
+		/**
+		* Get the normalized background color of the stage.
+		* Returns an object with rgba values, each being between 0 and 1.
+		* This is READ ONLY.
+		* @property normalizedColor
+		* @type string
+		* @public
+		*/
+		public get normalizedColor(): any {
+			return {
+				r: this._color.r,
+				g: this._color.g,
+				b: this._color.b,
+				a: this._color.a };
+			}
+
+		/**
+		* The webgl rendering context.
+		* @property gl
+		* @type WebGLRenderingContext
+		* @public
+		*/
+		public gl: WebGLRenderingContext;
+
+
+		/**
+		* The canvas rendering context.
+		* @property ctx
+		* @type CanvasRenderingContext2D
+		* @public
+		*/
+		public ctx: CanvasRenderingContext2D;
+
+
+		/**
+		* The canvas element that is being rendered on.
+		* @property canvas
+		* @type HTMLCanvasElement
+		* @public
+		*/
+		public canvas: HTMLCanvasElement;
+
+
+		/**
+		* The debugging canvas.
+		* @property debugCanvas
+		* @type HTMLCanvasElement
+		* @public
+		*/
+		public debugCanvas: HTMLCanvasElement;
+
+
+		/**
+		* The debug canvas rendering context.
+		* @property dctx
+		* @type CanvasRenderingContext2D
+		* @public
+		*/
+		public dctx: CanvasRenderingContext2D;
+
+
+		/**
+		* The parent div in which the layers and input live
+		* @property container
+		* @type HTMLDivElement
+		* @public
+		*/
+		public container:HTMLDivElement = null;
+
+
+		/**
+		* Stores the renderer created after context detection.
+		* @property _renderer
+		* @type any
+		* @private
+		* @since 1.1.0
+		*/
+		private _renderer: any;
+
+		/**
+		* Get the renderer associated with the canvas context. This is either a GLRenderManager or a CanvasRenderer. If the Kiwi.RENDERER_WEBGL renderer was requested but could not be created, it will fall back to CanvasRenderer.
+		* This is READ ONLY.
+		* @property renderer
+		* @type number
+		* @public
+		* @since 1.1.0
+		*/
+		public get renderer(): any {
+			return this._renderer;
+		}
+
+
+		/**
+		* Is executed when the DOM has loaded and the game is just starting. 
+		* This is a internal method used by the core of Kiwi itself. 
+		* @method boot
+		* @param dom {HTMLElement} The
+		* @public
+		*/
+		public boot(dom: Kiwi.System.Bootstrap) {
+			var self = this;
+			 
+			this.domReady = true;
+			this.container = dom.container;
+
+			if (this._game.deviceTargetOption === Kiwi.TARGET_BROWSER) {
+
+				this.offset = this.getOffsetPoint( this.container );
+
+				this._x = this.offset.x;
+				this._y = this.offset.y;
+
+				window.addEventListener(&quot;resize&quot;, (event: UIEvent) =&gt; this._windowResized(event), true);
+			}
+
+			
+			this._createCompositeCanvas();
+
+
+			if (this._game.deviceTargetOption === Kiwi.TARGET_COCOON) {
+				this._scaleContainer();
+				// Detect reorientation/resize
+				window.addEventListener(&quot;orientationchange&quot;, function( event:UIEvent ) {
+					return self._orientationChanged(event);
+				}, true);
+			} else {
+				this._calculateContainerScale();
+			}
+		}
+
+		/**
+		* Gets the x/y coordinate offset of any given valid DOM Element from the top/left position of the browser
+		* Based on jQuery offset https://github.com/jquery/jquery/blob/master/src/offset.js 
+		* @method getOffsetPoint
+		* @param {Any} element
+		* @param {Kiwi.Geom.Point} output
+		* @return {Kiwi.Geom.Point}
+		* @public
+		*/
+		public getOffsetPoint(element, output: Kiwi.Geom.Point = new Kiwi.Geom.Point): Kiwi.Geom.Point {
+
+			var box = element.getBoundingClientRect();
+
+			var clientTop = element.clientTop || document.body.clientTop || 0;
+			var clientLeft = element.clientLeft || document.body.clientLeft || 0;
+			var scrollTop = window.pageYOffset || element.scrollTop || document.body.scrollTop;
+			var scrollLeft = window.pageXOffset || element.scrollLeft || document.body.scrollLeft;
+
+			return output.setTo(box.left + scrollLeft - clientLeft, box.top + scrollTop - clientTop);
+
+		}
+
+		/**
+		* Method that is fired when the window is resized. 
+		* @method _windowResized
+		* @param event {UIEvent}
+		* @private
+		*/
+		private _windowResized(event:UIEvent) {
+			this._calculateContainerScale();
+
+			//Dispatch window resize event
+			this.onWindowResize.dispatch();
+		}
+
+		/**
+		* Method that is fired when the device is reoriented.
+		* @method _orientationChanged
+		* @param event {UIEvent}
+		* @private
+		* @since 1.1.1
+		*/
+		private _orientationChanged(event:UIEvent) {
+			this.onResize.dispatch(window.innerWidth, window.innerHeight);
+		}
+
+		/**
+		* Used to calculate the new offset and the scale of the stage currently is at.
+		* @method _calculateContainerScale
+		* @private
+		*/
+		private _calculateContainerScale() {
+
+			//Calculate the scale twice
+			//This will give the correct scale upon completion the second run
+			//Temporary fix until the Scale Manager is implemented
+			this._scaleContainer();
+			this._scaleContainer();
+
+			this.offset = this.getOffsetPoint(this.container);
+
+			this._scale.x = this._width / this.container.clientWidth;
+			this._scale.y = this._height / this.container.clientHeight;
+
+		}
+
+		/**
+		* Handles the creation of the canvas that the game will use and retrieves the context for the renderer. 
+		*
+		* @method _createComponsiteCanvas
+		* @private
+		*/
+		private _createCompositeCanvas() {
+			
+			//If we are using cocoon then create a accelerated screen canvas
+			if (this._game.deviceTargetOption == Kiwi.TARGET_COCOON) {
+				this.canvas = &lt;HTMLCanvasElement&gt;document.createElement(navigator[&quot;isCocoonJS&quot;] ? &quot;screencanvas&quot; : &quot;canvas&quot;);
+			
+			//Otherwise default to normal canvas
+			} else {
+				this.canvas = &lt;HTMLCanvasElement&gt;document.createElement(&quot;canvas&quot;);
+				this.canvas.style.width = &quot;100%&quot;;
+				this.canvas.style.height = &quot;100%&quot;;
+
+			}
+
+			this.canvas.id = this._game.id + &quot;compositeCanvas&quot;;
+			this.canvas.style.position = &quot;absolute&quot;;
+			this.canvas.width = this.width;
+			this.canvas.height = this.height;
+			
+
+			//Get 2D or GL Context; do error detection and fallback to valid rendering context
+			if (this._game.renderOption === Kiwi.RENDERER_CANVAS) {
+				this.ctx = this.canvas.getContext(&quot;2d&quot;);
+				this.ctx.fillStyle = &quot;#fff&quot;;
+				this.gl = null;
+			} else if (this._game.renderOption === Kiwi.RENDERER_WEBGL) {
+				this.gl = this.canvas.getContext(&quot;webgl&quot;);
+				if (!this.gl) {
+					this.gl = this.canvas.getContext(&quot;experimental-webgl&quot;);
+					if (!this.gl) {
+						Kiwi.Log.warn(&quot;Kiwi.Stage: WebGL rendering is not available despite the device apparently supporting it. Reverting to CANVAS.&quot;, &quot;#renderer&quot;);
+						// Reset to canvas mode
+						this.ctx = this.canvas.getContext(&quot;2d&quot;);
+						this.ctx.fillStyle = &quot;#fff&quot;;
+						this.gl = null;
+					} else {
+						Kiwi.Log.warn(&quot;Kiwi.Stage: &#x27;webgl&#x27; context is not available. Using &#x27;experimental-webgl&#x27;&quot;, &quot;#renderer&quot;);
+					}
+				}
+				if ( this.gl ) {
+
+					// That is, WebGL was properly supported and created
+					this.gl.clearColor(1, 1, 1, 1);
+					this.gl.clear(this.gl.COLOR_BUFFER_BIT | this.gl.DEPTH_BUFFER_BIT);
+					this.ctx = null;
+				}
+			}
+
+			// Create render manager
+			// This is reported back to the Kiwi.Game that created the Stage.
+			if(this.ctx) {
+				this._renderer = new Kiwi.Renderers.CanvasRenderer(this._game);
+			} else if(this.gl) {
+				this._renderer = new Kiwi.Renderers.GLRenderManager(this._game);
+			}
+
+
+			if (this._game.deviceTargetOption === Kiwi.TARGET_BROWSER) {
+				this.container.appendChild(this.canvas);
+			} else {
+				document.body.appendChild(this.canvas);
+			}
+		}
+
+		/**
+		* Set the stage width and height for rendering purposes.
+		* This will not effect that &quot;scaleType&quot; that it has been set to.
+		*
+		* @method resize
+		* @param width {number} The new Stage width.
+		* @param height {number} The new Stage height.
+		* @public
+		*/
+		public resize(width: number, height: number) {
+
+			this.canvas.height = height;
+			this.canvas.width = width;
+			this._height = height;
+			this._width = width;
+
+			if (this._game.deviceTargetOption === Kiwi.TARGET_BROWSER) {
+				this._calculateContainerScale();
+			}
+
+			this.onResize.dispatch(this._width, this._height);
+		}
+
+		/**
+		* Sets the background color of the stage through component RGB colour values. 
+		* Each parameter is a number between 0 and 255.
+		* This method also returns an Object Literal with &quot;r&quot;, &quot;g&quot;, &quot;b&quot; properties.
+		*
+		* @method setRGBColor
+		* @param r {Number} The red component. A value between 0 and 255.
+		* @param g {Number} The green component. A value between 0 and 255.
+		* @param b {Number} The blue component. A value between 0 and 255.
+		* @return {Object} A Object literal containing the r,g,b properties. 
+		* @public
+		*/
+		public setRGBColor(r: number, g: number, b: number):any {
+			this.rgbColor = { r: r, g: g, b: b };
+			return this.rgbColor;
+		}
+
+
+		/**
+		* Creates a debug canvas and adds it above the regular game canvas.
+		* The debug canvas is not created by default (even with debugging on) and rendering/clearing of the canvas is upto the developer. 
+		* The context for rendering can be access via the &quot;dctx&quot; property and you can use the &quot;clearDebugCanvas&quot; method to clear the canvas.
+		*
+		* @method createDebugCanvas
+		* @public
+		*/
+		public createDebugCanvas() {
+
+			if( Kiwi.Utils.Common.isUndefined(this.debugCanvas) == false ) return;
+			
+			if (this._game.deviceTargetOption === Kiwi.TARGET_COCOON) {
+				//Not supported in CocoonJS only because we cannot add it to the container (as a container does not exist) and position will be hard.
+				Kiwi.Log.log(&quot;Debug canvas not supported in cocoon, creating canvas and context anyway&quot;, &quot;#debug-canvas&quot;);                
+			}
+
+			this.debugCanvas = &lt;HTMLCanvasElement&gt;document.createElement(&quot;canvas&quot;);
+			this.debugCanvas.id = this._game.id + &quot;debugCanvas&quot;;
+			this.debugCanvas.style.position = &quot;absolute&quot;;
+			this.debugCanvas.width = this.width;
+			this.debugCanvas.height = this.height;
+			this.debugCanvas.style.width = &quot;100%&quot;;
+			this.debugCanvas.style.height = &quot;100%&quot;;
+			this.dctx = this.debugCanvas.getContext(&quot;2d&quot;);
+			this.clearDebugCanvas();
+
+			if (this._game.deviceTargetOption === Kiwi.TARGET_BROWSER) {
+				this.container.appendChild(this.debugCanvas);
+			}
+
+		}
+
+		/**
+		* Clears the debug canvas and fills with either the color passed. 
+		* If not colour is passed then Red at 20% opacity is used.
+		* 
+		* @method clearDebugCanvas
+		* @param [color=&quot;rgba(255,0,0,0.2)&quot;] {string} The debug color to rendering on the debug canvas.
+		* @public
+		*/
+		public clearDebugCanvas( color?:string ) {
+			this.dctx.fillStyle = color || &quot;rgba(255,0,0,.2)&quot;;
+			this.dctx.clearRect(0, 0, this.width, this.height);
+			this.dctx.fillRect(0, 0, this.width, this.height)
+		}
+
+		/**
+		* Toggles the visibility of the debug canvas. 
+		* @method toggleDebugCanvas
+		* @public
+		*/
+		public toggleDebugCanvas() {
+			this.debugCanvas.style.display = (this.debugCanvas.style.display === &quot;none&quot;) ? &quot;block&quot; : &quot;none&quot;;
+		}
+
+		/**
+		* Handles the scaling/sizing based upon the scaleType property.
+		* @method _scaleContainer
+		* @private
+		*/
+		private _scaleContainer() {
+
+			if (this._game.deviceTargetOption == Kiwi.TARGET_BROWSER) {
+
+				var clientWidth = this.container.clientWidth;
+
+				this.container.style.width = String(this._width + &quot;px&quot;);
+				this.container.style.height = String(this._height + &quot;px&quot;);
+
+				if (this._scaleType == Kiwi.Stage.SCALE_NONE) {
+					this.container.style.maxWidth = &quot;&quot;;
+					this.container.style.minWidth = &quot;&quot;;
+				}
+
+				//To Fit or STRETCH 
+				if (this._scaleType == Kiwi.Stage.SCALE_STRETCH || this._scaleType == Kiwi.Stage.SCALE_FIT) {
+					this.container.style.minWidth = &quot;100%&quot;;
+					this.container.style.maxWidth = &quot;100%&quot;;
+				}
+
+				//If scale stretched then scale the containers height to 100% of its parents.
+				if (this._scaleType == Kiwi.Stage.SCALE_STRETCH) {
+					this.container.style.minHeight = &quot;100%&quot;;
+					this.container.style.maxHeight = &quot;100%&quot;;
+				} else {
+					this.container.style.minHeight = &quot;&quot;;
+					this.container.style.maxHeight = &quot;&quot;;
+				}
+
+				//If it is SCALE to FIT then scale the containers height in ratio with the containers width.
+				if (this._scaleType == Kiwi.Stage.SCALE_FIT) {
+					this.container.style.height = String((clientWidth / this._width) * this._height) + &quot;px&quot;;
+				}
+
+			}
+
+			if (this._game.deviceTargetOption == Kiwi.TARGET_COCOON) {
+				// This has no effect in WebGL, and is thus handled separately.
+				switch (this._scaleType) {
+					case Kiwi.Stage.SCALE_FIT:
+						this.canvas.style.cssText = &quot;idtkscale:ScaleAspectFit&quot;;
+						break;
+
+					case Kiwi.Stage.SCALE_STRETCH:
+						this.canvas.style.cssText = &quot;idtkscale:ScaleToFill&quot;;
+						break;
+
+					case Kiwi.Stage.SCALE_NONE:
+						this.canvas.style.cssText = &quot;&quot;;
+						break;
+				}
+
+			}
+
+		}
+
+	}
 
 }
 
diff --git a/docs/files/src_core_State.ts.html b/docs/files/src_core_State.ts.html
index 3e05c17..9df3b26 100644
--- a/docs/files/src_core_State.ts.html
+++ b/docs/files/src_core_State.ts.html
@@ -368,485 +368,478 @@ <h1 class="file-heading">File: src/core/State.ts</h1>
 * 
 * @module Kiwi
 * 
-*/  
+*/
 
 module Kiwi {
 
-    /**
-    * A State in Kiwi.JS is the main class that developers use when wanting to create a Game. 
-    * States in Kiwi are used keep different sections of a game seperated. So a single game maybe comprised of many different States. 
-    * Such as one for the menu, in-game, leaderboard, e.t.c.
-    * There can only ever be a single State active at a given time.   
-    * 
-    * @class State
-    * @namespace Kiwi
-    * @extends Kiwi.Group
-    * @constructor
-    * @param name {String} Name of this State. Should be unique to differentiate itself from other States.
-    * @return {Kiwi.State} 
-    */ 
-    export class State extends Group {
-         
-        constructor(name: string) {
-            super(null, name);
-            
-            this.config = new Kiwi.StateConfig(this, name);
-            this.components = new Kiwi.ComponentManager(Kiwi.STATE, this);
-            this.transform.parent = null;
-            this._trackingList = [];
-        }
-
-        /**
-        * Returns the type of object this state is.
-        * @method objType
-        * @return {String} &quot;State&quot;
-        * @public
-        */
-        public objType() {
-            return &quot;State&quot;;
-        }
-
-        /**
-        * Returns the type of child this is. 
-        * @method childType
-        * @return {Number} Kiwi.GROUP
-        * @public
-        */
-        public childType() {
-            return Kiwi.GROUP;
-        }
-
-        /**
-        * The configuration object for this State.
-        * @property config
-        * @type Kiwi.StateConfig
-        * @public
-        */
-        public config: Kiwi.StateConfig;
-
-        /**
-        * A reference to the Kiwi.Game that this State belongs to.
-        * @property game
-        * @type Kiwi.Game
-        * @public
-        */
-        public game: Kiwi.Game = null;
-         
-        /**
-        * The library that this state use&#x27;s for the loading of textures.
-        * @property textureLibrary
-        * @type Kiwi.Textures.TextureLibrary
-        * @public
-        */
-        public textureLibrary: Kiwi.Textures.TextureLibrary;
-        
-        /**
-        * The library that this state use&#x27;s for the loading of audio.
-        * @property audioLibrary
-        * @type Kiwi.Sound.AudioLibrary
-        * @public
-        */
-        public audioLibrary: Kiwi.Sound.AudioLibrary;
-        
-        /**
-        * The library that this state use&#x27;s for the loading of data.
-        * @property dataLibrary
-        * @type Kiwi.Files.DataLibrary
-        * @public
-        */
-        public dataLibrary: Kiwi.Files.DataLibrary;
-
-        /**
-        * Holds all of the textures that are avaiable to be accessed once this state has been loaded.
-        * E.g. If you loaded a image and named it &#x27;flower&#x27;, once everything has loaded you can then access the flower image by saying this.textures.flower
-        * @property textures
-        * @type Object
-        * @public
-        */
-        public textures;
-
-        /**
-        * Holds all of the audio that are avaiable to be accessed once this state has been loaded.
-        * E.g. If you loaded a piece of audio and named it &#x27;lazerz&#x27;, once everything has loaded you can then access the lazers (pew pew) by saying this.audio.lazerz
-        * @property audio
-        * @type Object
-        * @public
-        */
-        public audio;
-
-        /**
-        * Holds all of the data that are avaiable to be accessed once this state has been loaded.
-        * E.g. If you loaded a piece of data and named it &#x27;cookieLocation&#x27;, once everything has loaded you can then access the cookies by saying this.data.cookieLocation
-        * @property data
-        * @type Object
-        * @public
-        */
-        public data;
-
-        /**
-        * This method is executed when this State is about to be switched too. This is the first method to be executed, and happens before the Init method.
-        * Is called each time a State is switched to.
-        * @method boot
-        * @public
-        */
-        public boot() {
-
-            this.textureLibrary = new Kiwi.Textures.TextureLibrary(this.game);
-            this.textures = this.textureLibrary.textures;
-            this.audioLibrary = new Kiwi.Sound.AudioLibrary(this.game);
-            this.audio = this.audioLibrary.audio;
-            this.dataLibrary = new Kiwi.Files.DataLibrary(this.game);
-            this.data = this.dataLibrary.data;
-                
-        }
-
-        /*
-        * Currently unused.
-        */
-        public setType(value: number) {
-
-            if (this.config.isInitialised === false) {
-                this.config.type = value;
-            }
-
-        }
-        
-         
-        /*
-        *--------------
-        * Methods that are to be Over-Ridden by Devs.
-        *--------------
-        */
-
-
-        /**
-        * Gets executed when the state has been initalised and gets switched to for the first time.
-        * This method only ever gets called once and it is before the preload method.
-        * Can have parameters passed to it by the previous state that switched to it.
-        * @method init
-        * @param [values] { Any } 
-        * @public
-        */
-        public init(...paramsArr: any[]) { }
-
-        /**
-        * This method is where you would load of all the assets that are requried for this state or in the entire game.
-        *
-        * @method preload
-        * @public
-        */
-        public preload() { }
-
-        /**
-        * This method is progressively called whilst loading files and is executed each time a file has been loaded.
-        * This can be used to create a &#x27;progress&#x27; bar during the loading stage of a game.
-        * @method loadProgress
-        * @param percent {Number} The percent of files that have been loaded so far. This is a number from 0 - 1.
-        * @param bytesLoaded {Number} The number of bytes that have been loaded so far.
-        * @param file {Kiwi.Files.File} The last file to have been loaded.
-        * @public
-        */
-        public loadProgress(percent: number, bytesLoaded: number, file: Kiwi.Files.File) { }
-
-        /**
-        * Gets executed when the game is finished loading and it is about to &#x27;create&#x27; the state. 
-        * @method loadComplete
-        * @public
-        */
-        public loadComplete() { }
-
-        /**
-        * The game loop that gets executed while the game is loading. 
-        * @method loadUpdate
-        * @public
-        */
-        public loadUpdate() {
-        
-            for (var i = 0; i &lt; this.members.length; i++) { 
-                if (this.members[i].active === true)
-                {
-                    this.members[i].update();
-                }
-            }
-        
-        }
-
-        /** 
-        * Is executed once all of the assets have loaded and the game is ready to be &#x27;created&#x27;.
-        * @method create
-        * @param [values]* {Any} 
-        * @public
-        */
-        public create(...paramsArr: any[]) { }
-
-        /**
-        * Is called every frame before the update loop. When overriding make sure you include a super call.
-        * @method preUpdate
-        * @public
-        */
-        public preUpdate() {
-
-            this.components.preUpdate();
-        
-        }
-
-        /**
-        * The update loop that is executed every frame while the game is &#x27;playing&#x27;. When overriding make sure you include a super call too.
-        * @method update
-        * @public
-        */
-        public update() {
-            
-            this.components.update();
-            
-            for (var i = 0; i &lt; this.members.length; i++) {
-
-                //Should the update loop be executed?
-                if (this.members[i].active === true) {
-                    this.members[i].update();
-                
-                }
-                
-                //Does the child need to be destroyed?
-                if (this.members[i].exists === false) {
-                    this.members[i].destroy( true );
-                }
-            }
-            
-        }
-
-        /**
-        * The post update loop is executed every frame after the update method. 
-        * When overriding make sure you include a super call at the end of the method.
-        * @method postUpdate
-        * @public
-        */
-        public postUpdate() {
-
-            this.components.postUpdate();
-        
-        }
-
-        /**
-        * Called after all of the layers have rendered themselves, useful for debugging.
-        * @method postRender
-        * @public
-        */
-        public postRender() { }
-
-        /**
-        * Called just before this State is going to be Shut Down and another one is going to be switched too. 
-        * @method shutDown
-        * @public
-        */
-        public shutDown() { }
-
-         
-        /*
-        *--------------
-        * Loading Methods
-        *--------------
-        */
-
-
-        /**
-        * Adds a new image file that is be loaded when the state gets up to the loading all of the assets.
-        *
-        * @method addImage
-        * @param key {String} A key for this image so that you can access it when the loading has finished.
-        * @param url {String} The location of the image.
-        * @param [storeAsGlobal=true] {boolean} If the image should be deleted when switching to another state or if the other states should still be able to access this image.
-        * @param [width] {Number} The width of the image. If not passed the width will be automatically calculated.
-        * @param [height] {Number} The height of the image. If not passed the height will be automatically calculated.
-        * @param [offsetX] {Number} The offset of the image when rendering on the x axis. 
-        * @param [offsetY] {Number} The offset of the image when rendering on the y axis.
-        * @public
-        */
-        public addImage(key: string, url: string, storeAsGlobal: boolean = true, width?: number, height?: number, offsetX?: number, offsetY?: number) {
-            return this.game.loader.addImage(key, url, width, height, offsetX, offsetY, storeAsGlobal);
-        }
-        
-        /**
-        * Adds a new spritesheet image file that is be loaded when the state gets up to the loading all of the assets.
-        *
-        * @method addSpriteSheet
-        * @param key {String} A key for this image so that you can access it when the loading has finished.
-        * @param url {String} The location of the image.
-        * @param frameWidth {Number} The width of a single frame in the spritesheet
-        * @param frameHeight {Number} The height of a single frame in the spritesheet
-        * @param [storeAsGlobal=true] {boolean} If the image should be deleted when switching to another state or if the other states should still be able to access this image.
-        * @param [numCells] {Number} The number of cells/frames that are in the spritesheet. If not specified will calculate this based of the width/height of the image.
-        * @param [rows] {Number} The number of cells that are in a row. If not specified will calculate this based of the width/height of the image. 
-        * @param [cols] {Number} The number of cells that are in a column. If not specified will calculate this based of the width/height of the image.
-        * @param [sheetOffsetX=0] {Number} The offset of the whole spritesheet on the x axis.
-        * @param [sheetOffsetY=0] {Number} The offset of the whole spritesheet on the y axis.
-        * @param [cellOffsetX=0] {Number} The spacing between cells on the x axis.
-        * @param [cellOffsetY=0] {Number} The spacing between cells on the y axis.
-        * @public 
-        */
-        public addSpriteSheet(key: string, url: string, frameWidth: number, frameHeight: number, storeAsGlobal: boolean = true, numCells?: number, rows?: number, cols?: number, sheetOffsetX?: number, sheetOffsetY?: number, cellOffsetX?: number, cellOffsetY?: number) {
-
-            return this.game.loader.addSpriteSheet(key, url, frameWidth, frameHeight, numCells, rows, cols, sheetOffsetX, sheetOffsetY, cellOffsetX, cellOffsetY, storeAsGlobal);
-            
-        }
-        
-        /**
-        * Adds a new texture atlas that is to be loaded when the states gets up to the stage of loading the assets.
-        *
-        * @method addTextureAtlas
-        * @param key {String} A key for this image so that you can access it when the loading has finished.
-        * @param imageURL {String} The location of the image.
-        * @param [jsonID] {String} The id for the json file that is to be loaded. So that you can access it outside of the texture atlas.
-        * @param [jsonURL] {String} The location of the json file you have loaded.
-        * @param [storeAsGlobal=true] {boolean} If the image should be delete when switching to another state or if the other states should still be able to access this image.
-        * @public
-        */
-        public addTextureAtlas(key: string, imageURL: string, jsonID?: string, jsonURL?: string, storeAsGlobal: boolean = true) {
-             
-            return this.game.loader.addTextureAtlas(key, imageURL, jsonID, jsonURL, storeAsGlobal);
-           
-        }
-
-        /**
-        * Adds a json file that is to be loaded when the state gets up to the stage of loading the assets.
-        * 
-        * @method addJSON
-        * @param key {string} A key for this json so that you can access it when the loading has finished
-        * @param url {string} The location of the JSON file.
-        * @param [storeAsGlobal=true] {boolean} If the json should be deleted when switching to another state or if the other states should still be able to access this json.
-        * @public
-        */
-        public addJSON(key: string, url: string, storeAsGlobal: boolean = true) {
-
-            return this.game.loader.addJSON(key, url, storeAsGlobal);
-        }
-        
-        /**
-        * Adds a new audio file that is to be loaded when the state gets up to the stage of loading the assets.
-        * 
-        * @method addAudio
-        * @param key {string} A key for this audio so that you can access it when the loading has finished
-        * @param url {string} The location of the audio file. You can pass a array of urls, in which case the first supported filetype will be used.
-        * @param [storeAsGlobal=true] {boolean} If the audio should be deleted when switching to another state or if the other states should still be able to access this audio.
-        */
-        public addAudio(key: string, url: any, storeAsGlobal: boolean = true) {
-             
-            return this.game.loader.addAudio(key, url, storeAsGlobal);
-          
-        }
-
-
-        /*
-        *----------------
-        * Garbage Collection 
-        *----------------
-        */
-
-
-        /**
-        * Contains a reference to all of the Objects that have ever been created for this state. Generally Kiwi.Entities or Kiwi.Groups.
-        * Useful for keeping track of sprites that are not used any more and need to be destroyed.
-        * @property trackingList
-        * @type Array
-        * @private
-        */
-        private _trackingList: Kiwi.IChild[];
-
-        /**
-        * Adds a new Objects to the tracking list. 
-        * This is an INTERNAL Kiwi method and DEVS shouldn&#x27;t need to worry about it.
-        * @method addToTrackingList
-        * @param child {Object} The Object which you are adding to the tracking list.
-        * @public
-        */
-        public addToTrackingList(child: Kiwi.IChild) {
-            //check to see that its not already in the tracking list.
-            if (this._trackingList.indexOf(child) !== -1) return;
-            //add to the list
-            this._trackingList.push(child);
-        }
-
-        /**
-        * Removes a Object from the tracking list. This should only need to happen when a child is being destroyed.
-        * This is an INTERNAL Kiwi method and DEVS shouldn&#x27;t really need to worry about it.
-        * @method removeFromTrackingList
-        * @param child {Object} The object which is being removed from the tracking list. 
-        * @public
-        */
-        public removeFromTrackingList(child:Kiwi.IChild) {
-            //check to see that it is in the tracking list.
-            var n = this._trackingList.indexOf(child);
-            if (n &gt; -1) {
-                this._trackingList.splice(n, 1);
-            } 
-        }
-
-        /**
-        * Destroys all of Objects in the tracking list that are not currently on stage. 
-        * All that currently don&#x27;t have this STATE as an ancestor.
-        * Returns the number of Objects removed.  
-        * @method destroyUnused
-        * @return {Number} The amount of objects removed.
-        * @public
-        */
-        public destroyUnused():number {
-
-            var d = 0; 
-            for (var i = 0; i &lt; this._trackingList.length; i++) {
-                if (this.containsAncestor(this._trackingList[i], this) === false) {
-                    this._trackingList[i].destroy();
-                    this._trackingList.splice(i, 1);
-                    i--;
-                    d++;
-                }
-            }
-
-            return d;
-        }
-
-        /**
-        * Used to mark all Entities that have been created for deletion, regardless of it they are on the stage or not.
-        * @method destroy
-        * @param [deleteAll=true] If all of the Objects ever created should have the destroy method executed also.
-        * @public
-        */
-        public destroy(deleteAll: boolean=true) {
-            
-            if (deleteAll == true) {
-
-                //destroy all of the tracking list
-                for (var i = 0; i &lt; this._trackingList.length; i++) {
-
-                    //If the item is a group then we don&#x27;t want it to destroy it&#x27;s children, as this method will do that eventually anyway.
-                    this._trackingList[i].destroy( true , false ); 
-                }
-                this._trackingList = [];
-                
-                // While it is possible to set a member on another state and push it to this state, thus avoiding the tracking list, that member will be destroyed when this state loads, so we do not need to destroy remaining members - simply clear the list.
-                this.members = [];    
-
-            }
-
-        }
-
-        /**
-        * Recursively goes through a child given and runs the destroy method on all that are passed.
-        * @method _destroyChildren
-        * @param child {Object}
-        * @private
-        */
-        private _destroyChildren(child: any) {
-            if (child.childType() == Kiwi.GROUP) {
-                for (var i = 0; i &lt; child.members.length; i++) {
-                    this._destroyChildren(child.members[i]);
-                }
-            } 
-            child.destroy( true );
-        }
-
-    }
+	/**
+	* A State in Kiwi.JS is the main class that developers use when wanting to create a Game. 
+	* States in Kiwi are used keep different sections of a game seperated. So a single game maybe comprised of many different States. 
+	* Such as one for the menu, in-game, leaderboard, e.t.c.
+	* There can only ever be a single State active at a given time.   
+	* 
+	* @class State
+	* @namespace Kiwi
+	* @extends Kiwi.Group
+	* @constructor
+	* @param name {String} Name of this State. Should be unique to differentiate itself from other States.
+	* @return {Kiwi.State} 
+	*/
+	export class State extends Group {
+
+		constructor(name: string) {
+			super(null, name);
+			
+			this.config = new Kiwi.StateConfig(this, name);
+			this.components = new Kiwi.ComponentManager(Kiwi.STATE, this);
+			this.transform.parent = null;
+			this._trackingList = [];
+		}
+
+		/**
+		* Returns the type of object this state is.
+		* @method objType
+		* @return {String} &quot;State&quot;
+		* @public
+		*/
+		public objType() {
+			return &quot;State&quot;;
+		}
+
+		/**
+		* Returns the type of child this is. 
+		* @method childType
+		* @return {Number} Kiwi.GROUP
+		* @public
+		*/
+		public childType() {
+			return Kiwi.GROUP;
+		}
+
+		/**
+		* The configuration object for this State.
+		* @property config
+		* @type Kiwi.StateConfig
+		* @public
+		*/
+		public config: Kiwi.StateConfig;
+
+		/**
+		* A reference to the Kiwi.Game that this State belongs to.
+		* @property game
+		* @type Kiwi.Game
+		* @public
+		*/
+		public game: Kiwi.Game = null;
+
+		/**
+		* The library that this state use&#x27;s for the loading of textures.
+		* @property textureLibrary
+		* @type Kiwi.Textures.TextureLibrary
+		* @public
+		*/
+		public textureLibrary: Kiwi.Textures.TextureLibrary;
+
+		/**
+		* The library that this state use&#x27;s for the loading of audio.
+		* @property audioLibrary
+		* @type Kiwi.Sound.AudioLibrary
+		* @public
+		*/
+		public audioLibrary: Kiwi.Sound.AudioLibrary;
+
+		/**
+		* The library that this state use&#x27;s for the loading of data.
+		* @property dataLibrary
+		* @type Kiwi.Files.DataLibrary
+		* @public
+		*/
+		public dataLibrary: Kiwi.Files.DataLibrary;
+
+		/**
+		* Holds all of the textures that are avaiable to be accessed once this state has been loaded.
+		* E.g. If you loaded a image and named it &#x27;flower&#x27;, once everything has loaded you can then access the flower image by saying this.textures.flower
+		* @property textures
+		* @type Object
+		* @public
+		*/
+		public textures;
+
+		/**
+		* Holds all of the audio that are avaiable to be accessed once this state has been loaded.
+		* E.g. If you loaded a piece of audio and named it &#x27;lazerz&#x27;, once everything has loaded you can then access the lazers (pew pew) by saying this.audio.lazerz
+		* @property audio
+		* @type Object
+		* @public
+		*/
+		public audio;
+
+		/**
+		* Holds all of the data that are avaiable to be accessed once this state has been loaded.
+		* E.g. If you loaded a piece of data and named it &#x27;cookieLocation&#x27;, once everything has loaded you can then access the cookies by saying this.data.cookieLocation
+		* @property data
+		* @type Object
+		* @public
+		*/
+		public data;
+
+		/**
+		* This method is executed when this State is about to be switched too. This is the first method to be executed, and happens before the Init method.
+		* Is called each time a State is switched to.
+		* @method boot
+		* @public
+		*/
+		public boot() {
+
+			this.textureLibrary = new Kiwi.Textures.TextureLibrary(this.game);
+			this.textures = this.textureLibrary.textures;
+			this.audioLibrary = new Kiwi.Sound.AudioLibrary(this.game);
+			this.audio = this.audioLibrary.audio;
+			this.dataLibrary = new Kiwi.Files.DataLibrary(this.game);
+			this.data = this.dataLibrary.data;
+		}
+
+		/*
+		* Currently unused.
+		*/
+		public setType(value: number) {
+
+			if (this.config.isInitialised === false) {
+				this.config.type = value;
+			}
+
+		}
+
+
+		/*
+		*--------------
+		* Methods that are to be Over-Ridden by Devs.
+		*--------------
+		*/
+
+
+		/**
+		* Gets executed when the state has been initalised and gets switched to for the first time.
+		* This method only ever gets called once and it is before the preload method.
+		* Can have parameters passed to it by the previous state that switched to it.
+		* @method init
+		* @param [values] { Any } 
+		* @public
+		*/
+		public init(...paramsArr: any[]) { }
+
+		/**
+		* This method is where you would load of all the assets that are requried for this state or in the entire game.
+		*
+		* @method preload
+		* @public
+		*/
+		public preload() { }
+
+		/**
+		* This method is progressively called whilst loading files and is executed each time a file has been loaded.
+		* This can be used to create a &#x27;progress&#x27; bar during the loading stage of a game.
+		* @method loadProgress
+		* @param percent {Number} The percent of files that have been loaded so far. This is a number from 0 - 1.
+		* @param bytesLoaded {Number} The number of bytes that have been loaded so far.
+		* @param file {Kiwi.Files.File} The last file to have been loaded.
+		* @public
+		*/
+		public loadProgress(percent: number, bytesLoaded: number, file: Kiwi.Files.File) { }
+
+		/**
+		* Gets executed when the game is finished loading and it is about to &#x27;create&#x27; the state. 
+		* @method loadComplete
+		* @public
+		*/
+		public loadComplete() { }
+
+		/**
+		* The game loop that gets executed while the game is loading. 
+		* @method loadUpdate
+		* @public
+		*/
+		public loadUpdate() {
+
+			for (var i = 0; i &lt; this.members.length; i++) { 
+				if (this.members[i].active === true)
+				{
+					this.members[i].update();
+				}
+			}
+		}
+
+		/** 
+		* Is executed once all of the assets have loaded and the game is ready to be &#x27;created&#x27;.
+		* @method create
+		* @param [values]* {Any} 
+		* @public
+		*/
+		public create(...paramsArr: any[]) { }
+
+		/**
+		* Is called every frame before the update loop. When overriding make sure you include a super call.
+		* @method preUpdate
+		* @public
+		*/
+		public preUpdate() {
+			this.components.preUpdate();
+		}
+
+		/**
+		* The update loop that is executed every frame while the game is &#x27;playing&#x27;. When overriding make sure you include a super call too.
+		* @method update
+		* @public
+		*/
+		public update() {
+			
+			this.components.update();
+			
+			for (var i = 0; i &lt; this.members.length; i++) {
+
+				//Should the update loop be executed?
+				if (this.members[i].active === true) {
+					this.members[i].update();
+				
+				}
+				
+				//Does the child need to be destroyed?
+				if (this.members[i].exists === false) {
+					this.members[i].destroy( true );
+				}
+			}
+		}
+
+		/**
+		* The post update loop is executed every frame after the update method. 
+		* When overriding make sure you include a super call at the end of the method.
+		* @method postUpdate
+		* @public
+		*/
+		public postUpdate() {
+			this.components.postUpdate();
+		}
+
+		/**
+		* Called after all of the layers have rendered themselves, useful for debugging.
+		* @method postRender
+		* @public
+		*/
+		public postRender() { }
+
+		/**
+		* Called just before this State is going to be Shut Down and another one is going to be switched too. 
+		* @method shutDown
+		* @public
+		*/
+		public shutDown() { }
+
+
+		/*
+		*--------------
+		* Loading Methods
+		*--------------
+		*/
+
+
+		/**
+		* Adds a new image file that is be loaded when the state gets up to the loading all of the assets.
+		*
+		* @method addImage
+		* @param key {String} A key for this image so that you can access it when the loading has finished.
+		* @param url {String} The location of the image.
+		* @param [storeAsGlobal=true] {boolean} If the image should be deleted when switching to another state or if the other states should still be able to access this image.
+		* @param [width] {Number} The width of the image. If not passed the width will be automatically calculated.
+		* @param [height] {Number} The height of the image. If not passed the height will be automatically calculated.
+		* @param [offsetX] {Number} The offset of the image when rendering on the x axis. 
+		* @param [offsetY] {Number} The offset of the image when rendering on the y axis.
+		* @public
+		*/
+		public addImage(key: string, url: string, storeAsGlobal: boolean = true, width?: number, height?: number, offsetX?: number, offsetY?: number) {
+			return this.game.loader.addImage(key, url, width, height, offsetX, offsetY, storeAsGlobal);
+		}
+
+		/**
+		* Adds a new spritesheet image file that is be loaded when the state gets up to the loading all of the assets.
+		*
+		* @method addSpriteSheet
+		* @param key {String} A key for this image so that you can access it when the loading has finished.
+		* @param url {String} The location of the image.
+		* @param frameWidth {Number} The width of a single frame in the spritesheet
+		* @param frameHeight {Number} The height of a single frame in the spritesheet
+		* @param [storeAsGlobal=true] {boolean} If the image should be deleted when switching to another state or if the other states should still be able to access this image.
+		* @param [numCells] {Number} The number of cells/frames that are in the spritesheet. If not specified will calculate this based of the width/height of the image.
+		* @param [rows] {Number} The number of cells that are in a row. If not specified will calculate this based of the width/height of the image. 
+		* @param [cols] {Number} The number of cells that are in a column. If not specified will calculate this based of the width/height of the image.
+		* @param [sheetOffsetX=0] {Number} The offset of the whole spritesheet on the x axis.
+		* @param [sheetOffsetY=0] {Number} The offset of the whole spritesheet on the y axis.
+		* @param [cellOffsetX=0] {Number} The spacing between cells on the x axis.
+		* @param [cellOffsetY=0] {Number} The spacing between cells on the y axis.
+		* @public 
+		*/
+		public addSpriteSheet(key: string, url: string, frameWidth: number, frameHeight: number, storeAsGlobal: boolean = true, numCells?: number, rows?: number, cols?: number, sheetOffsetX?: number, sheetOffsetY?: number, cellOffsetX?: number, cellOffsetY?: number) {
+
+			return this.game.loader.addSpriteSheet(key, url, frameWidth, frameHeight, numCells, rows, cols, sheetOffsetX, sheetOffsetY, cellOffsetX, cellOffsetY, storeAsGlobal);
+		}
+
+		/**
+		* Adds a new texture atlas that is to be loaded when the states gets up to the stage of loading the assets.
+		*
+		* @method addTextureAtlas
+		* @param key {String} A key for this image so that you can access it when the loading has finished.
+		* @param imageURL {String} The location of the image.
+		* @param [jsonID] {String} The id for the json file that is to be loaded. So that you can access it outside of the texture atlas.
+		* @param [jsonURL] {String} The location of the json file you have loaded.
+		* @param [storeAsGlobal=true] {boolean} If the image should be delete when switching to another state or if the other states should still be able to access this image.
+		* @public
+		*/
+		public addTextureAtlas(key: string, imageURL: string, jsonID?: string, jsonURL?: string, storeAsGlobal: boolean = true) {
+
+			return this.game.loader.addTextureAtlas(key, imageURL, jsonID, jsonURL, storeAsGlobal);
+
+		}
+
+		/**
+		* Adds a json file that is to be loaded when the state gets up to the stage of loading the assets.
+		* 
+		* @method addJSON
+		* @param key {string} A key for this json so that you can access it when the loading has finished
+		* @param url {string} The location of the JSON file.
+		* @param [storeAsGlobal=true] {boolean} If the json should be deleted when switching to another state or if the other states should still be able to access this json.
+		* @public
+		*/
+		public addJSON(key: string, url: string, storeAsGlobal: boolean = true) {
+
+			return this.game.loader.addJSON(key, url, storeAsGlobal);
+		}
+
+		/**
+		* Adds a new audio file that is to be loaded when the state gets up to the stage of loading the assets.
+		* 
+		* @method addAudio
+		* @param key {string} A key for this audio so that you can access it when the loading has finished
+		* @param url {string} The location of the audio file. You can pass a array of urls, in which case the first supported filetype will be used.
+		* @param [storeAsGlobal=true] {boolean} If the audio should be deleted when switching to another state or if the other states should still be able to access this audio.
+		*/
+		public addAudio(key: string, url: any, storeAsGlobal: boolean = true) {
+
+			return this.game.loader.addAudio(key, url, storeAsGlobal);
+
+		}
+
+
+		/*
+		*----------------
+		* Garbage Collection 
+		*----------------
+		*/
+
+
+		/**
+		* Contains a reference to all of the Objects that have ever been created for this state. Generally Kiwi.Entities or Kiwi.Groups.
+		* Useful for keeping track of sprites that are not used any more and need to be destroyed.
+		* @property trackingList
+		* @type Array
+		* @private
+		*/
+		private _trackingList: Kiwi.IChild[];
+
+		/**
+		* Adds a new Objects to the tracking list. 
+		* This is an INTERNAL Kiwi method and DEVS shouldn&#x27;t need to worry about it.
+		* @method addToTrackingList
+		* @param child {Object} The Object which you are adding to the tracking list.
+		* @public
+		*/
+		public addToTrackingList(child: Kiwi.IChild) {
+			//check to see that its not already in the tracking list.
+			if (this._trackingList.indexOf(child) !== -1) return;
+			//add to the list
+			this._trackingList.push(child);
+		}
+
+		/**
+		* Removes a Object from the tracking list. This should only need to happen when a child is being destroyed.
+		* This is an INTERNAL Kiwi method and DEVS shouldn&#x27;t really need to worry about it.
+		* @method removeFromTrackingList
+		* @param child {Object} The object which is being removed from the tracking list. 
+		* @public
+		*/
+		public removeFromTrackingList(child:Kiwi.IChild) {
+			//check to see that it is in the tracking list.
+			var n = this._trackingList.indexOf(child);
+			if (n &gt; -1) {
+				this._trackingList.splice(n, 1);
+			} 
+		}
+
+		/**
+		* Destroys all of Objects in the tracking list that are not currently on stage. 
+		* All that currently don&#x27;t have this STATE as an ancestor.
+		* Returns the number of Objects removed.  
+		* @method destroyUnused
+		* @return {Number} The amount of objects removed.
+		* @public
+		*/
+		public destroyUnused():number {
+
+			var d = 0; 
+			for (var i = 0; i &lt; this._trackingList.length; i++) {
+				if (this.containsAncestor(this._trackingList[i], this) === false) {
+					this._trackingList[i].destroy();
+					this._trackingList.splice(i, 1);
+					i--;
+					d++;
+				}
+			}
+
+			return d;
+		}
+
+		/**
+		* Used to mark all Entities that have been created for deletion, regardless of it they are on the stage or not.
+		* @method destroy
+		* @param [deleteAll=true] If all of the Objects ever created should have the destroy method executed also.
+		* @public
+		*/
+		public destroy(deleteAll: boolean=true) {
+
+			if (deleteAll == true) {
+
+				//destroy all of the tracking list
+				for (var i = 0; i &lt; this._trackingList.length; i++) {
+
+					//If the item is a group then we don&#x27;t want it to destroy it&#x27;s children, as this method will do that eventually anyway.
+					this._trackingList[i].destroy( true , false ); 
+				}
+				this._trackingList = [];
+				
+				// While it is possible to set a member on another state and push it to this state, thus avoiding the tracking list, that member will be destroyed when this state loads, so we do not need to destroy remaining members - simply clear the list.
+				this.members = [];    
+
+			}
+
+		}
+
+		/**
+		* Recursively goes through a child given and runs the destroy method on all that are passed.
+		* @method _destroyChildren
+		* @param child {Object}
+		* @private
+		*/
+		private _destroyChildren(child: any) {
+			if (child.childType() == Kiwi.GROUP) {
+				for (var i = 0; i &lt; child.members.length; i++) {
+					this._destroyChildren(child.members[i]);
+				}
+			}
+			child.destroy( true );
+		}
+
+	}
 
 }
+
     </pre>
 </div>
 
diff --git a/docs/files/src_core_StateConfig.ts.html b/docs/files/src_core_StateConfig.ts.html
index a15170f..0d908bd 100644
--- a/docs/files/src_core_StateConfig.ts.html
+++ b/docs/files/src_core_StateConfig.ts.html
@@ -368,151 +368,151 @@ <h1 class="file-heading">File: src/core/StateConfig.ts</h1>
 * 
 * @module Kiwi
 * 
-*/  
+*/
 
 module Kiwi {
 
-    /**
-    * A lightweight object that contains values relating to the configuration of a State in a Kiwi Game.
-    *
-    * @class StateConfig
-    * @namespace Kiwi
-    * @constructor
-    * @param parent {Kiwi.State} The State that this configuration object belongs to.
-    * @param name {String} The name of the state which was created.
-    * @return {Kiwi.StateConfig} 
-    * 
-    */ 
-    export class StateConfig {
- 
-        constructor(parent: Kiwi.State, name: string) {
-
-            this._state = parent;
-            this.name = name;
-
-            //If it has a preload method.
-            //*cough* of course it does.
-            if (typeof this._state[&#x27;preload&#x27;] === &#x27;function&#x27;) {
-                this.hasPreloader = true;
-            }
-        }
-
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} &quot;StateConfig&quot;
-        * @public
-        */
-        public objType() {
-            return &quot;StateConfig&quot;;
-        }
-
-        /**
-        * The state this StateConfig belongs to.
-        * @property _state
-        * @type Kiwi.State
-        * @private
-        */
-        private _state: Kiwi.State;
-
-        /**
-        * The name of the State, must be unique within your game.
-        * @property name
-        * @type String
-        * @public
-        */
-        public name: string = &#x27;&#x27;;
-
-        /**
-        * Currently unused.
-        */
-        public isPersistent: boolean = false;
-
-        /**
-        * If this State has been created (the create method has been executed). 
-        * Essentually has the same meaning as &#x27;isReady&#x27;.
-        * @property isCreated
-        * @type boolean
-        * @default false
-        * @public
-        */
-        public isCreated: boolean = false;
-
-        /**
-        * If the State has been initialised already (so the Boot and Init methods have been executed already). 
-        * A State only get Initialised once which is when it switched to for this first time.
-        * @property isInitialised
-        * @type boolean
-        * @default false
-        * @public
-        */
-        public isInitialised: boolean = false;
-
-        /**
-        * If the State that this config is on is &#x27;ready&#x27; to be used (e.g. all the assets have been loaded and libraries complied)
-        * or if it isn&#x27;t and so it is still at the &#x27;loading&#x27; stage.
-        * @property isReady
-        * @type boolean
-        * @default false
-        * @public
-        */
-        public isReady: boolean = false;
-
-        /**
-        * If the State that this config is on contains a Preloader Method.
-        * @property hasPreloader
-        * @type boolean
-        * @default false
-        * @public
-        */
-        public hasPreloader: boolean = false;
-
-        /**
-        * The number of times the State that this config belongs to has been active/used.
-        * @property runCount
-        * @type Number
-        * @default 0
-        * @public
-        */
-        public runCount: number = 0;
-
-        /*
-        * The type of State this is. Currently Unused.
-        */
-        public type: number = 0;
-
-        /**
-        * Stores any parameters that are to be passed to the init method when the State that this config is on is switched to.
-        * @property initParams
-        * @type Array
-        * @public
-        */
-        public initParams;
-
-        /**
-        * Stores any parameters that are to be passed to the create method when the State that this config is on is switched to.
-        * @property createParams
-        * @type Array
-        * @public
-        */
-        public createParams;
-
-        /**
-        * Resets the properties contained on this StateConfig object. 
-        * This is executed when a State is about to be destroyed as so reset&#x27;s it to be switched to again.
-        * @method reset
-        * @public
-        */
-        public reset() {
-
-            this.isReady = false;
-            this.isCreated = false;
-            this.createParams = [];
-            this.initParams = [];
-
-        }
-
-    }
+	/**
+	* A lightweight object that contains values relating to the configuration of a State in a Kiwi Game.
+	*
+	* @class StateConfig
+	* @namespace Kiwi
+	* @constructor
+	* @param parent {Kiwi.State} The State that this configuration object belongs to.
+	* @param name {String} The name of the state which was created.
+	* @return {Kiwi.StateConfig} 
+	* 
+	*/
+	export class StateConfig {
+
+		constructor(parent: Kiwi.State, name: string) {
+
+			this._state = parent;
+			this.name = name;
+
+			//If it has a preload method.
+			//*cough* of course it does.
+			if (typeof this._state[&#x27;preload&#x27;] === &#x27;function&#x27;) {
+				this.hasPreloader = true;
+			}
+		}
+
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} &quot;StateConfig&quot;
+		* @public
+		*/
+		public objType() {
+			return &quot;StateConfig&quot;;
+		}
+
+		/**
+		* The state this StateConfig belongs to.
+		* @property _state
+		* @type Kiwi.State
+		* @private
+		*/
+		private _state: Kiwi.State;
+
+		/**
+		* The name of the State, must be unique within your game.
+		* @property name
+		* @type String
+		* @public
+		*/
+		public name: string = &#x27;&#x27;;
+
+		/**
+		* Currently unused.
+		*/
+		public isPersistent: boolean = false;
+
+		/**
+		* If this State has been created (the create method has been executed). 
+		* Essentually has the same meaning as &#x27;isReady&#x27;.
+		* @property isCreated
+		* @type boolean
+		* @default false
+		* @public
+		*/
+		public isCreated: boolean = false;
+
+		/**
+		* If the State has been initialised already (so the Boot and Init methods have been executed already). 
+		* A State only get Initialised once which is when it switched to for this first time.
+		* @property isInitialised
+		* @type boolean
+		* @default false
+		* @public
+		*/
+		public isInitialised: boolean = false;
+
+		/**
+		* If the State that this config is on is &#x27;ready&#x27; to be used (e.g. all the assets have been loaded and libraries complied)
+		* or if it isn&#x27;t and so it is still at the &#x27;loading&#x27; stage.
+		* @property isReady
+		* @type boolean
+		* @default false
+		* @public
+		*/
+		public isReady: boolean = false;
+
+		/**
+		* If the State that this config is on contains a Preloader Method.
+		* @property hasPreloader
+		* @type boolean
+		* @default false
+		* @public
+		*/
+		public hasPreloader: boolean = false;
+
+		/**
+		* The number of times the State that this config belongs to has been active/used.
+		* @property runCount
+		* @type Number
+		* @default 0
+		* @public
+		*/
+		public runCount: number = 0;
+
+		/*
+		* The type of State this is. Currently Unused.
+		*/
+		public type: number = 0;
+
+		/**
+		* Stores any parameters that are to be passed to the init method when the State that this config is on is switched to.
+		* @property initParams
+		* @type Array
+		* @public
+		*/
+		public initParams;
+
+		/**
+		* Stores any parameters that are to be passed to the create method when the State that this config is on is switched to.
+		* @property createParams
+		* @type Array
+		* @public
+		*/
+		public createParams;
+
+		/**
+		* Resets the properties contained on this StateConfig object. 
+		* This is executed when a State is about to be destroyed as so reset&#x27;s it to be switched to again.
+		* @method reset
+		* @public
+		*/
+		public reset() {
+
+			this.isReady = false;
+			this.isCreated = false;
+			this.createParams = [];
+			this.initParams = [];
+
+		}
+
+	}
 }
 
     </pre>
diff --git a/docs/files/src_core_StateManager.ts.html b/docs/files/src_core_StateManager.ts.html
index 687ed94..f9c4851 100644
--- a/docs/files/src_core_StateManager.ts.html
+++ b/docs/files/src_core_StateManager.ts.html
@@ -368,476 +368,475 @@ <h1 class="file-heading">File: src/core/StateManager.ts</h1>
 * 
 * @module Kiwi
 * 
-*/  
+*/
 
 module Kiwi {
 
-    /**
-    * The State Manager handles the starting, parsing, looping and swapping of game States within a Kiwi Game
-    * There is only ever one State Manager per game, but a single Game can contain multiple States.
-    *
-    * @class StateManager
-    * @namespace Kiwi
-    * @constructor
-    * @param game {Kiwi.Game} The game that this statemanager belongs to.
-    * @return {Kiwi.StateMananger} 
-    *
-    */
-    export class StateManager {
-         
-        constructor(game: Kiwi.Game) {
-
-            this._game = game;
-
-            this._states = [];
-
-        }
-
-        /**
-        * The type of object this is.
-        * @method objType
-        * @return {string} &quot;StateManager&quot;
-        * @public
-        */
-        public objType() {
-            return &quot;StateManager&quot;;
-        }
-
-        /**
-        * The game that this manager belongs to.
-        * @property _game
-        * @type Kiwi.Game
-        * @private
-        */
-        private _game: Kiwi.Game;
-
-        /**
-        * An array of all of the states that are contained within this manager.
-        * @property _states
-        * @type Array
-        * @private
-        */
-        private _states: Kiwi.State[];
-
-        /**
-        * The current State that the game is at.
-        * @property current
-        * @type Kiwi.State
-        * @default null
-        * @public
-        */
-        public current: Kiwi.State = null;
-
-        /**
-        * The name of the new State that is to be switched to.
-        * @property _newStateKey
-        * @type string
-        * @default null
-        * @private
-        */
-        private _newStateKey: string = null;
-
-        /**
-        * Checks to see if a key exists. Internal use only.
-        * @method checkKeyExists
-        * @param key {String}
-        * @return {boolean}
-        * @private
-        */
-        private checkKeyExists(key: string): boolean {
-
-            for (var i = 0; i &lt; this._states.length; i++)
-            {
-                if (this._states[i].config.name === key)
-                {
-                    return true;
-                }
-            }
-
-            return false;
-
-        }
-
-        /**
-        * Checks to see if the State passed is valid or not.
-        * @method checkValidState
-        * @param state {Kiwi.State}
-        * @return {boolean}
-        * @private
-        */
-        private checkValidState(state: Kiwi.State): boolean {
-
-            if (!state[&#x27;game&#x27;] || !state[&#x27;config&#x27;]) {
-                return false;
-            }
-
-            return true;
-
-        }
-
-        /**
-        * Adds the given State to the StateManager.
-        * The State must have a unique key set on it, or it will fail to be added to the manager.
-        * Returns true if added successfully, otherwise false (can happen if State is already in the StateManager)
-        * 
-        * @method addState
-        * @param state {Any} The Kiwi.State instance to add.
-        * @param [switchTo=false] {boolean} If set to true automatically switch to the given state after adding it
-        * @return {boolean} true if the State was added successfully, otherwise false
-        * @public
-        */
-        public addState(state: any, switchTo:boolean = false): boolean {
-            Kiwi.Log.log(&#x27;Kiwi.StateManager: Adding state.&#x27;, &#x27;#state&#x27;);
-            var tempState;
-
-            //What type is the state that was passed.
-            if (typeof state === &#x27;function&#x27;) {
-                tempState = new state();
-
-            } else if (typeof state === &#x27;string&#x27;) {
-                tempState = window[state];  
-
-            } else {
-                tempState = state;
-            }
-
-            //Does a state with that name already exist?
-            if (tempState.config.name &amp;&amp; this.checkKeyExists(tempState.config.name) === true) {
-
-                Kiwi.Log.error(&#x27;  Kiwi.StateManager: Could not add &#x27; + tempState.config.name + &#x27; as a State with that name already exists.&#x27;, &#x27;#state&#x27;);
-                return false;
-            }
-
-            tempState.game = this._game;
-            
-            //Is it a valid state?
-            if (this.checkValidState(tempState) === false) {
-
-                Kiwi.Log.error(&#x27;  Kiwi.StateManager: &#x27; + tempState.config.name + &#x27; isn\&#x27;t a valid state. Make sure you are using the Kiwi.State class!&#x27;, &#x27;#state&#x27;);
-
-                return false;
-
-            } else {
-
-                this._states.push(tempState);
-                Kiwi.Log.log(&#x27;  Kiwi.StateManager: &#x27; + tempState.config.name + &#x27; was successfully added.&#x27;, &#x27;#state&#x27;);
-
-                if (switchTo === true) {
-                    this.switchState( tempState.config.name );
-                }
-
-                return true;
-
-            }
-
-        }
-
-        /**
-        * Is executed once the DOM has finished loading.
-        * This is an INTERNAL Kiwi method. 
-        * @method boot
-        * @public
-        */
-        boot() {                                         
-
-        }
-
-        /**
-        * Switches to the name (key) of the state that you pass. 
-        * Does not work if the state you are switching to is already the current state OR if that state does not exist yet.
-        * @method setCurrentState
-        * @param key {String}
-        * @return {boolean}
-        * @private
-        */
-        private setCurrentState(key: string): boolean {
+	/**
+	* The State Manager handles the starting, parsing, looping and swapping of game States within a Kiwi Game
+	* There is only ever one State Manager per game, but a single Game can contain multiple States.
+	*
+	* @class StateManager
+	* @namespace Kiwi
+	* @constructor
+	* @param game {Kiwi.Game} The game that this statemanager belongs to.
+	* @return {Kiwi.StateMananger} 
+	*
+	*/
+	export class StateManager {
+
+		constructor(game: Kiwi.Game) {
+
+			this._game = game;
+
+			this._states = [];
+
+		}
+
+		/**
+		* The type of object this is.
+		* @method objType
+		* @return {string} &quot;StateManager&quot;
+		* @public
+		*/
+		public objType() {
+			return &quot;StateManager&quot;;
+		}
+
+		/**
+		* The game that this manager belongs to.
+		* @property _game
+		* @type Kiwi.Game
+		* @private
+		*/
+		private _game: Kiwi.Game;
+
+		/**
+		* An array of all of the states that are contained within this manager.
+		* @property _states
+		* @type Array
+		* @private
+		*/
+		private _states: Kiwi.State[];
+
+		/**
+		* The current State that the game is at.
+		* @property current
+		* @type Kiwi.State
+		* @default null
+		* @public
+		*/
+		public current: Kiwi.State = null;
+
+		/**
+		* The name of the new State that is to be switched to.
+		* @property _newStateKey
+		* @type string
+		* @default null
+		* @private
+		*/
+		private _newStateKey: string = null;
+
+		/**
+		* Checks to see if a key exists. Internal use only.
+		* @method checkKeyExists
+		* @param key {String}
+		* @return {boolean}
+		* @private
+		*/
+		private checkKeyExists(key: string): boolean {
+
+			for (var i = 0; i &lt; this._states.length; i++)
+			{
+				if (this._states[i].config.name === key)
+				{
+					return true;
+				}
+			}
+
+			return false;
+
+		}
+
+		/**
+		* Checks to see if the State passed is valid or not.
+		* @method checkValidState
+		* @param state {Kiwi.State}
+		* @return {boolean}
+		* @private
+		*/
+		private checkValidState(state: Kiwi.State): boolean {
+
+			if (!state[&#x27;game&#x27;] || !state[&#x27;config&#x27;]) {
+				return false;
+			}
+
+			return true;
+
+		}
+
+		/**
+		* Adds the given State to the StateManager.
+		* The State must have a unique key set on it, or it will fail to be added to the manager.
+		* Returns true if added successfully, otherwise false (can happen if State is already in the StateManager)
+		* 
+		* @method addState
+		* @param state {Any} The Kiwi.State instance to add.
+		* @param [switchTo=false] {boolean} If set to true automatically switch to the given state after adding it
+		* @return {boolean} true if the State was added successfully, otherwise false
+		* @public
+		*/
+		public addState(state: any, switchTo:boolean = false): boolean {
+			Kiwi.Log.log(&#x27;Kiwi.StateManager: Adding state.&#x27;, &#x27;#state&#x27;);
+			var tempState;
+
+			//What type is the state that was passed.
+			if (typeof state === &#x27;function&#x27;) {
+				tempState = new state();
+
+			} else if (typeof state === &#x27;string&#x27;) {
+				tempState = window[state];  
+
+			} else {
+				tempState = state;
+			}
+
+			//Does a state with that name already exist?
+			if (tempState.config.name &amp;&amp; this.checkKeyExists(tempState.config.name) === true) {
+
+				Kiwi.Log.error(&#x27;  Kiwi.StateManager: Could not add &#x27; + tempState.config.name + &#x27; as a State with that name already exists.&#x27;, &#x27;#state&#x27;);
+				return false;
+			}
+
+			tempState.game = this._game;
+			
+			//Is it a valid state?
+			if (this.checkValidState(tempState) === false) {
+
+				Kiwi.Log.error(&#x27;  Kiwi.StateManager: &#x27; + tempState.config.name + &#x27; isn\&#x27;t a valid state. Make sure you are using the Kiwi.State class!&#x27;, &#x27;#state&#x27;);
+
+				return false;
+
+			} else {
+
+				this._states.push(tempState);
+				Kiwi.Log.log(&#x27;  Kiwi.StateManager: &#x27; + tempState.config.name + &#x27; was successfully added.&#x27;, &#x27;#state&#x27;);
+
+				if (switchTo === true) {
+					this.switchState( tempState.config.name );
+				}
+
+				return true;
+
+			}
+
+		}
+
+		/**
+		* Is executed once the DOM has finished loading.
+		* This is an INTERNAL Kiwi method. 
+		* @method boot
+		* @public
+		*/
+		boot() {
+
+		}
+
+		/**
+		* Switches to the name (key) of the state that you pass. 
+		* Does not work if the state you are switching to is already the current state OR if that state does not exist yet.
+		* @method setCurrentState
+		* @param key {String}
+		* @return {boolean}
+		* @private
+		*/
+		private setCurrentState(key: string): boolean {
+
+			//  Bail out if they are trying to switch to the already current state
+			if (this.current !== null &amp;&amp; this.current.config.name === key || this.checkKeyExists(key) === false) {
+				return false;
+			}
+
+			Kiwi.Log.log(&#x27;Kiwi.StateManager: Switching to &quot;&#x27; + key + &#x27;&quot; State.&#x27;, &#x27;#state&#x27;); 
+
+			this._newStateKey = key;
+			return true;
+		}
+
+		/**
+		* Actually switches to a state that is stored in the &#x27;newStateKey&#x27; property. This method is executed after the update loops have been executed to help prevent developer errors. 
+		* @method bootNewState
+		* @private
+		*/
+		private bootNewState() {
+			
+			// Destroy the current if there is one.
+			if (this.current !== null) {
+
+				this.current.shutDown();
+
+				
+				this._game.input.reset();   //Reset the input component
+				this.current.destroy(true); //Destroy ALL IChildren ever created on that state.
+				this._game.fileStore.removeStateFiles(this.current); //Clear the fileStore of not global files.
+				this.current.config.reset(); //Reset the config setting
+				this._game.cameras.zeroAllCameras(); // Reset cameras
+			} 
+
+
+			//Set the current state, reset the key
+			this.current = this.getState(this._newStateKey);
+			this._newStateKey = null;
 
-            //  Bail out if they are trying to switch to the already current state
-            if (this.current !== null &amp;&amp; this.current.config.name === key || this.checkKeyExists(key) === false) {
-                return false;
-            }
 
-            Kiwi.Log.log(&#x27;Kiwi.StateManager: Switching to &quot;&#x27; + key + &#x27;&quot; State.&#x27;, &#x27;#state&#x27;); 
-
-            this._newStateKey = key;
-            return true;
-        }
-
-        /**
-        * Actually switches to a state that is stored in the &#x27;newStateKey&#x27; property. This method is executed after the update loops have been executed to help prevent developer errors. 
-        * @method bootNewState
-        * @private
-        */
-        private bootNewState() {
-            
-            // Destroy the current if there is one.
-            if (this.current !== null) {
-
-                this.current.shutDown();
-
-                
-                this._game.input.reset();   //Reset the input component
-                this.current.destroy(true); //Destroy ALL IChildren ever created on that state.
-                this._game.fileStore.removeStateFiles(this.current); //Clear the fileStore of not global files.
-                this.current.config.reset(); //Reset the config setting
-                this._game.cameras.zeroAllCameras(); // Reset cameras
-            } 
-
-
-            //Set the current state, reset the key
-            this.current = this.getState(this._newStateKey);
-            this._newStateKey = null;
-
-
-            //Initalise the state and execute the preload method?
-            this.checkInit();
-            this.checkPreload();
-
-        }
-
-        /**
-        * Swaps the current state.
-        * If the state has already been loaded (via addState) then you can just pass the key.
-        * Otherwise you can pass the state object as well and it will load it then swap to it.
-        *
-        * @method switchState
-        * @param key {String} The name/key of the state you would like to switch to.
-        * @param [state=null] {Any} The state that you want to switch to. This is only used to create the state if it doesn&#x27;t exist already.
-        * @param [initParams=null] {Object} Any parameters that you would like to pass to the init method of that new state.
-        * @param [createParams=null] {Object} Any parameters that you would like to pass to the create method of that new state.
-        * @return {boolean} Whether the State is going to be switched to or not.
-        * @public
-        */
-        public switchState(key: string, state: any = null, initParams = null, createParams = null): boolean {
-
-            //  If we have a current state that isn&#x27;t yet ready (preload hasn&#x27;t finished) then abort now
-            if (this.current !== null &amp;&amp; this.current.config.isReady === false) {
-
-                Kiwi.Log.error(&#x27;Kiwi.StateManager: Cannot change to a new state till the current state has finished loading!&#x27;, &#x27;#state&#x27;);
+			//Initalise the state and execute the preload method?
+			this.checkInit();
+			this.checkPreload();
 
-                return false;
-            }
-
-            // If state key doesn&#x27;t exist then lets add it.
-            if (this.checkKeyExists(key) === false &amp;&amp; state !== null) {
-
-                if (this.addState(state, false) === false) {
-                    return false;
-                }
-            }
-
-            // Store the parameters (if any)
-            if (initParams !== null || createParams !== null) {
-
-                var newState = this.getState(key);
-                newState.config.initParams = [];
-                newState.config.createParams = [];
-
-                for (var initParameter in initParams) {
-                    newState.config.initParams.push(initParams[initParameter]);
-                }
-
-                for (var createParameter in createParams) {
-                    newState.config.createParams.push(createParams[createParameter]);
-                }
-
-            }
-            
-            return this.setCurrentState(key);
-
-        }
-
-        /**
-        * Gets a state by the key that is passed.
-        * @method getState
-        * @param key {String}
-        * @return {Kiwi.State}
-        * @private
-        */
-        private getState(key: string): Kiwi.State {
-
-            for (var i = 0; i &lt; this._states.length; i++)
-            {
-                if (this._states[i].config.name === key)
-                {
-                    return this._states[i];
-                }
-            }
-
-            return null;
-
-        }
-
-
-        /*
-        *----------------
-        * Check Methods 
-        *----------------
-        */
-
-
-        /**
-        * Checks to see if the state that is being switched to needs to load some files or not.
-        * If it does it loads the file, if it does not it runs the create method.
-        * @method checkPreload
-        * @private
-        */
-        private checkPreload() {
-
-            //Rebuild the Libraries before the preload is executed
-            this.rebuildLibraries();
-
-            this._game.loader.onQueueProgress.add(this.onLoadProgress, this);
-            this._game.loader.onQueueComplete.add(this.onLoadComplete, this);
-            this.current.preload();
-            this._game.loader.start();
-        }
-
-        /**
-        * Checks to see if the state being switched to contains a create method.
-        * If it does then it calls the create method.
-        * @method callCreate
-        * @private
-        */
-        private callCreate() {
-
-            Kiwi.Log.log(&quot;Kiwi.StateManager: Calling &quot; + this.current.name + &quot;:Create&quot;, &#x27;#state&#x27;);
-
-            //Execute the create with params if there are some there.
-            if (this.current.config.createParams) {
-                this.current.create.apply(this.current, this.current.config.createParams);
-
-            //Otherwise just execute the method.
-            } else {
-                this.current.create.call(this.current);
-            }
-
-            this.current.config.runCount++;
-            this.current.config.isCreated = true;
-        }
-
-        /**
-        * Checks to see if the state has a init method and then executes that method if it is found.
-        * @method checkInit
-        * @private
-        */
-        private checkInit() {
-            
-            //Has the state already been initialised?
-            if (this.current.config.isInitialised === false) {
-
-                //Boot the state.
-                this.current.boot();
-
-                //Execute the Init method with params
-                if (this.current.config.initParams) {
-                    this.current.init.apply(this.current, this.current.config.initParams);
-
-                //Execute the Init method with out params
-                } else {
-                    this.current.init.call(this.current);
-                }
-
-                
-                this.current.config.isInitialised = true;
-            }
-
-        }
-
-        /**
-        * Is execute whilst files are being loaded by the state.
-        * @method onLoadProgress
-        * @param percent {Number} The current percentage of files that have been loaded. Ranging from 0 - 1.
-        * @param bytesLoaded {Number} The number of bytes that have been loaded so far.
-        * @param file {Kiwi.Files.File} The last file that has been loaded.
-        * @private
-        */
-        private onLoadProgress(percent: number, bytesLoaded: number, file: Kiwi.Files.File) {
-
-            this.current.loadProgress(percent, bytesLoaded, file);
-            
-        }
-
-        /**
-        * Executed when the preloading has completed. Then executes the loadComplete and create methods of the new State.
-        * @method onLoadComplete
-        * @private
-        */
-        private onLoadComplete() {
-
-            this.current.loadComplete();
-            this._game.loader.onQueueProgress.remove(this.onLoadProgress, this);
-            this._game.loader.onQueueComplete.remove(this.onLoadComplete, this);
-            
-            //Rebuild the Libraries again to have access the new files that were loaded.
-            this.rebuildLibraries();
-            this.current.config.isReady = true;
-            this.callCreate();
-
-        }
-
-        /**
-        * Rebuilds the texture, audio and data libraries that are on the current state. Thus updating what files the user has access to.
-        * @method rebuildLibraries
-        * @public
-        */
-        public rebuildLibraries() {
-            
-            this.current.audioLibrary.rebuild(this._game.fileStore, this.current);
-            this.current.dataLibrary.rebuild(this._game.fileStore, this.current);
-            this.current.textureLibrary.rebuild(this._game.fileStore, this.current);
-            if (this._game.renderOption == Kiwi.RENDERER_WEBGL) {
-                this._game.renderer.initState(this.current);
-            }
-        }
-
-        /**
-        * The update loop that is accessible on the StateManager.
-        * @method update
-        * @public
-        */
-        public update() {
-
-            if (this.current !== null)
-            {
-                //Is the state ready?
-                if (this.current.config.isReady === true)
-                {
-                    this.current.preUpdate();
-                    this.current.update();
-                    this.current.postUpdate();
-                }
-                else
-                {
-                    this.current.loadUpdate();
-                }
-            }
-
-            //Do we need to switch states?
-            if (this._newStateKey !== null) {
-                this.bootNewState();
-            }
-
-        }
-
-        /**
-        * PostRender - Called after all of the rendering has been executed in a frame.
-        * @method postRender
-        * @public
-        */
-        public postRender() {
-
-            if (this.current !== null)
-            {
-                if (this.current.config.isReady === true)
-                {
-                    this.current.postRender();
-                }
-            }
-
-        }
-
-    }
+		}
+
+		/**
+		* Swaps the current state.
+		* If the state has already been loaded (via addState) then you can just pass the key.
+		* Otherwise you can pass the state object as well and it will load it then swap to it.
+		*
+		* @method switchState
+		* @param key {String} The name/key of the state you would like to switch to.
+		* @param [state=null] {Any} The state that you want to switch to. This is only used to create the state if it doesn&#x27;t exist already.
+		* @param [initParams=null] {Object} Any parameters that you would like to pass to the init method of that new state.
+		* @param [createParams=null] {Object} Any parameters that you would like to pass to the create method of that new state.
+		* @return {boolean} Whether the State is going to be switched to or not.
+		* @public
+		*/
+		public switchState(key: string, state: any = null, initParams = null, createParams = null): boolean {
+
+			//  If we have a current state that isn&#x27;t yet ready (preload hasn&#x27;t finished) then abort now
+			if (this.current !== null &amp;&amp; this.current.config.isReady === false) {
+
+				Kiwi.Log.error(&#x27;Kiwi.StateManager: Cannot change to a new state till the current state has finished loading!&#x27;, &#x27;#state&#x27;);
+
+				return false;
+			}
+
+			// If state key doesn&#x27;t exist then lets add it.
+			if (this.checkKeyExists(key) === false &amp;&amp; state !== null) {
+
+				if (this.addState(state, false) === false) {
+					return false;
+				}
+			}
+
+			// Store the parameters (if any)
+			if (initParams !== null || createParams !== null) {
+
+				var newState = this.getState(key);
+				newState.config.initParams = [];
+				newState.config.createParams = [];
+
+				for (var initParameter in initParams) {
+					newState.config.initParams.push(initParams[initParameter]);
+				}
+
+				for (var createParameter in createParams) {
+					newState.config.createParams.push(createParams[createParameter]);
+				}
+
+			}
+			
+			return this.setCurrentState(key);
+
+		}
+
+		/**
+		* Gets a state by the key that is passed.
+		* @method getState
+		* @param key {String}
+		* @return {Kiwi.State}
+		* @private
+		*/
+		private getState(key: string): Kiwi.State {
+
+			for (var i = 0; i &lt; this._states.length; i++)
+			{
+				if (this._states[i].config.name === key)
+				{
+					return this._states[i];
+				}
+			}
+
+			return null;
+
+		}
+
+
+		/*
+		*----------------
+		* Check Methods 
+		*----------------
+		*/
+
+
+		/**
+		* Checks to see if the state that is being switched to needs to load some files or not.
+		* If it does it loads the file, if it does not it runs the create method.
+		* @method checkPreload
+		* @private
+		*/
+		private checkPreload() {
+
+			//Rebuild the Libraries before the preload is executed
+			this.rebuildLibraries();
+
+			this._game.loader.onQueueProgress.add(this.onLoadProgress, this);
+			this._game.loader.onQueueComplete.add(this.onLoadComplete, this);
+			this.current.preload();
+			this._game.loader.start();
+		}
+
+		/**
+		* Checks to see if the state being switched to contains a create method.
+		* If it does then it calls the create method.
+		* @method callCreate
+		* @private
+		*/
+		private callCreate() {
+
+			Kiwi.Log.log(&quot;Kiwi.StateManager: Calling &quot; + this.current.name + &quot;:Create&quot;, &#x27;#state&#x27;);
+
+			//Execute the create with params if there are some there.
+			if (this.current.config.createParams) {
+				this.current.create.apply(this.current, this.current.config.createParams);
+
+			//Otherwise just execute the method.
+			} else {
+				this.current.create.call(this.current);
+			}
+
+			this.current.config.runCount++;
+			this.current.config.isCreated = true;
+		}
+
+		/**
+		* Checks to see if the state has a init method and then executes that method if it is found.
+		* @method checkInit
+		* @private
+		*/
+		private checkInit() {
+			
+			//Has the state already been initialised?
+			if (this.current.config.isInitialised === false) {
+
+				//Boot the state.
+				this.current.boot();
+
+				//Execute the Init method with params
+				if (this.current.config.initParams) {
+					this.current.init.apply(this.current, this.current.config.initParams);
+
+				//Execute the Init method with out params
+				} else {
+					this.current.init.call(this.current);
+				}
+
+				
+				this.current.config.isInitialised = true;
+			}
+
+		}
+
+		/**
+		* Is execute whilst files are being loaded by the state.
+		* @method onLoadProgress
+		* @param percent {Number} The current percentage of files that have been loaded. Ranging from 0 - 1.
+		* @param bytesLoaded {Number} The number of bytes that have been loaded so far.
+		* @param file {Kiwi.Files.File} The last file that has been loaded.
+		* @private
+		*/
+		private onLoadProgress(percent: number, bytesLoaded: number, file: Kiwi.Files.File) {
+
+			this.current.loadProgress(percent, bytesLoaded, file);
+		}
+
+		/**
+		* Executed when the preloading has completed. Then executes the loadComplete and create methods of the new State.
+		* @method onLoadComplete
+		* @private
+		*/
+		private onLoadComplete() {
+
+			this.current.loadComplete();
+			this._game.loader.onQueueProgress.remove(this.onLoadProgress, this);
+			this._game.loader.onQueueComplete.remove(this.onLoadComplete, this);
+			
+			//Rebuild the Libraries again to have access the new files that were loaded.
+			this.rebuildLibraries();
+			this.current.config.isReady = true;
+			this.callCreate();
+
+		}
+
+		/**
+		* Rebuilds the texture, audio and data libraries that are on the current state. Thus updating what files the user has access to.
+		* @method rebuildLibraries
+		* @public
+		*/
+		public rebuildLibraries() {
+			
+			this.current.audioLibrary.rebuild(this._game.fileStore, this.current);
+			this.current.dataLibrary.rebuild(this._game.fileStore, this.current);
+			this.current.textureLibrary.rebuild(this._game.fileStore, this.current);
+			if (this._game.renderOption == Kiwi.RENDERER_WEBGL) {
+				this._game.renderer.initState(this.current);
+			}
+		}
+
+		/**
+		* The update loop that is accessible on the StateManager.
+		* @method update
+		* @public
+		*/
+		public update() {
+
+			if (this.current !== null)
+			{
+				//Is the state ready?
+				if (this.current.config.isReady === true)
+				{
+					this.current.preUpdate();
+					this.current.update();
+					this.current.postUpdate();
+				}
+				else
+				{
+					this.current.loadUpdate();
+				}
+			}
+
+			//Do we need to switch states?
+			if (this._newStateKey !== null) {
+				this.bootNewState();
+			}
+
+		}
+
+		/**
+		* PostRender - Called after all of the rendering has been executed in a frame.
+		* @method postRender
+		* @public
+		*/
+		public postRender() {
+
+			if (this.current !== null)
+			{
+				if (this.current.config.isReady === true)
+				{
+					this.current.postRender();
+				}
+			}
+
+		}
+
+	}
 
 }
 
diff --git a/docs/files/src_file_AudioFile.ts.html b/docs/files/src_file_AudioFile.ts.html
index a64a188..9b55d82 100644
--- a/docs/files/src_file_AudioFile.ts.html
+++ b/docs/files/src_file_AudioFile.ts.html
@@ -373,165 +373,164 @@ <h1 class="file-heading">File: src/file/AudioFile.ts</h1>
 
 module Kiwi.Files {
 
-    /**
-    * AudioFile which contains settings, loading, and processing details for Audio files to be used. 
-    *
-    * Uses tag loading for devices not supporting the WebAudioAPI. Otherwise XHR + arraybuffer loading methods are used.
-    * 
-    * @class AudioFile
-    * @namespace Kiwi.Files
-    * @extends Kiwi.Files.File
-    * @since 1.2.0
-    * @constructor
-    * @param game {Kiwi.Game} The game that this file is for
-    * @param params {Object} Options for this file.
-    *   @param params.key {String} User defined name for this file. This would be how the user would access it in the file store.
-    *   @param params.url {String} Location of the file to be loaded.
-    *   @param {Object} [params.metadata={}] Any metadata to be associated with the file.
-    *   @param [params.state=null] {Kiwi.State} The state that this file belongs to. Used for defining global assets vs local assets.
-    *   @param [params.fileStore=null] {Kiwi.Files.FileStore} The filestore that this file should be save in automatically when loaded.
-    *   @param [params.type=UNKNOWN] {Number} The type of file this is.
-    *   @param [params.tags] {Array} Any tags to be associated with this file.
-    * @return {Kiwi.Files.AudioFile}
-    */
-    export class AudioFile extends Kiwi.Files.File {
-
-        constructor(game: Kiwi.Game, params: any = {}) {
-
-            //Add support detection here...
-
-            super(game, params);
-
-            if ( this.game.audio.usingAudioTag ) {
-                this.useTagLoader = true;
-                this._loadInParallel = true;
-            } else {
-                this.useTagLoader = false;
-            }
-
-            if (!Kiwi.Utils.Common.isUndefined(params.crossOrigin)) {
-                this.crossOrigin = params.crossOrigin;
-            }
-
-        }
-
-        //this.dataType === File.AUDIO
-
-        /**
-        * For tag loading only. The crossOrigin value applied to loaded images. Very often this needs to be set to &#x27;anonymous&#x27;
-        * @property crossOrigin
-        * @type String
-        * @default &#x27;&#x27;
-        * @public
-        */
-        public crossOrigin: string = &#x27;&#x27;;
-
-        /**
-        * Returns the type of this object
-        * @method objType
-        * @return {String} &quot;AudioFile&quot;
-        * @public
-        */
-        public objType() {
-            return &quot;AudioFile&quot;;
-        }
-
-        /**
-        * Initialises a loading method depending on detected device support.
-        * @method _load
-        * @protected
-        */
-        protected _load() {
-            this.attemptCounter++;
-
-            if (this.useTagLoader) {
-                this.tagLoader();
-            } else {
-                this.xhrLoader(&#x27;GET&#x27;, &#x27;arraybuffer&#x27;);
-            }
-
-        }
-
-        /**
-        * Handles loading audio in via an audio tag.
-        * @method tagLoader
-        * @public
-        */
-        public tagLoader() {
-
-            this.data = document.createElement(&#x27;audio&#x27;);
-            this.data.src = this.URL;
-            this.data.preload = &#x27;auto&#x27;;
-
-
-            if (this.crossOrigin) {
-                this.data.crossOrigin = this.crossOrigin;
-            }
-
-            if (this.game.audio.locked) {
-                //Nothing else to do...
-                this.loadSuccess();
-
-            } else {
-
-                var _this = this;
-                var func = function (event) {
-
-                    _this.data.removeEventListener(&#x27;canplaythrough&#x27;, func, false);
-                    _this.data.pause();
-                    _this.data.currentTime = 0;
-                    _this.data.volume = 1;
-                    _this.loadSuccess();
-
-                };
-
-                this.data.addEventListener(&#x27;canplaythrough&#x27;, func, false);
-
-                if (this.game.deviceTargetOption == Kiwi.TARGET_COCOON) {
-                    //If targetting Cocoon we can use the load method to force the audio loading.
-                    this.data.load();
+	/**
+	* AudioFile which contains settings, loading, and processing details for Audio files to be used. 
+	*
+	* Uses tag loading for devices not supporting the WebAudioAPI. Otherwise XHR + arraybuffer loading methods are used.
+	* 
+	* @class AudioFile
+	* @namespace Kiwi.Files
+	* @extends Kiwi.Files.File
+	* @since 1.2.0
+	* @constructor
+	* @param game {Kiwi.Game} The game that this file is for
+	* @param params {Object} Options for this file.
+	*   @param params.key {String} User defined name for this file. This would be how the user would access it in the file store.
+	*   @param params.url {String} Location of the file to be loaded.
+	*   @param {Object} [params.metadata={}] Any metadata to be associated with the file.
+	*   @param [params.state=null] {Kiwi.State} The state that this file belongs to. Used for defining global assets vs local assets.
+	*   @param [params.fileStore=null] {Kiwi.Files.FileStore} The filestore that this file should be save in automatically when loaded.
+	*   @param [params.type=UNKNOWN] {Number} The type of file this is.
+	*   @param [params.tags] {Array} Any tags to be associated with this file.
+	* @return {Kiwi.Files.AudioFile}
+	*/
+	export class AudioFile extends Kiwi.Files.File {
+
+		constructor(game: Kiwi.Game, params: any = {}) {
+
+			//Add support detection here...
+
+			super(game, params);
+
+			if ( this.game.audio.usingAudioTag ) {
+				this.useTagLoader = true;
+				this._loadInParallel = true;
+			} else {
+				this.useTagLoader = false;
+			}
+
+			if (!Kiwi.Utils.Common.isUndefined(params.crossOrigin)) {
+				this.crossOrigin = params.crossOrigin;
+			}
+
+		}
+
+		//this.dataType === File.AUDIO
+
+		/**
+		* For tag loading only. The crossOrigin value applied to loaded images. Very often this needs to be set to &#x27;anonymous&#x27;
+		* @property crossOrigin
+		* @type String
+		* @default &#x27;&#x27;
+		* @public
+		*/
+		public crossOrigin: string = &#x27;&#x27;;
+
+		/**
+		* Returns the type of this object
+		* @method objType
+		* @return {String} &quot;AudioFile&quot;
+		* @public
+		*/
+		public objType() {
+			return &quot;AudioFile&quot;;
+		}
+
+		/**
+		* Initialises a loading method depending on detected device support.
+		* @method _load
+		* @protected
+		*/
+		protected _load() {
+			this.attemptCounter++;
+
+			if (this.useTagLoader) {
+				this.tagLoader();
+			} else {
+				this.xhrLoader(&#x27;GET&#x27;, &#x27;arraybuffer&#x27;);
+			}
+
+		}
+
+		/**
+		* Handles loading audio in via an audio tag.
+		* @method tagLoader
+		* @public
+		*/
+		public tagLoader() {
+
+			this.data = document.createElement(&#x27;audio&#x27;);
+			this.data.src = this.URL;
+			this.data.preload = &#x27;auto&#x27;;
+
+
+			if (this.crossOrigin) {
+				this.data.crossOrigin = this.crossOrigin;
+			}
+
+			if (this.game.audio.locked) {
+				//Nothing else to do...
+				this.loadSuccess();
+
+			} else {
+
+				var _this = this;
+				var func = function (event) {
+
+					_this.data.removeEventListener(&#x27;canplaythrough&#x27;, func, false);
+					_this.data.pause();
+					_this.data.currentTime = 0;
+					_this.data.volume = 1;
+					_this.loadSuccess();
+
+				};
+
+				this.data.addEventListener(&#x27;canplaythrough&#x27;, func, false);
+
+				if (this.game.deviceTargetOption == Kiwi.TARGET_COCOON) {
+					//If targetting Cocoon we can use the load method to force the audio loading.
+					this.data.load();
+
+				} else {
+					//Otherwise we tell the browser to play the audio in &#x27;mute&#x27; to force loading. 
+					this.data.volume = 0;
+					this.data.play();
 
-                } else {
-                    //Otherwise we tell the browser to play the audio in &#x27;mute&#x27; to force loading. 
-                    this.data.volume = 0;
-                    this.data.play();
+				}
+			}
+
+		}
+
+		/**
+		* Handles decoding the arraybuffer into audio data.
+		* @method processXhr
+		* @param response
+		* @protected
+		*/
+		protected processXhr(response:any) {
 
-                }
-            }
+			this.data = {
+				raw: response,
+				decoded: false,
+				buffer: null
+			};
+
+			var _this: any = this;
+
+			this.game.audio.context.decodeAudioData(this.data.raw, function (buffer) {
+				if (buffer) {
+					_this.data.buffer = buffer;
+					_this.data.decoded = true;
+					_this.loadSuccess();
+				}
+			});
 
-        }
-
-        /**
-        * Handles decoding the arraybuffer into audio data.
-        * @method processXhr
-        * @param response
-        * @protected
-        */
-        protected processXhr(response:any) {
+		}
+
+	}
 
-            this.data = {
-                raw: response,
-                decoded: false,
-                buffer: null
-            };
+}
 
-            var _this: any = this;
-
-            this.game.audio.context.decodeAudioData(this.data.raw, function (buffer) {
-                if (buffer) {
-                    _this.data.buffer = buffer;
-                    _this.data.decoded = true;
-                    _this.loadSuccess();
-                }
-            });
-
-        }
-
-
-
-    }
-
-}  
     </pre>
 </div>
 
diff --git a/docs/files/src_file_DataFile.ts.html b/docs/files/src_file_DataFile.ts.html
index f2adf75..4ee4778 100644
--- a/docs/files/src_file_DataFile.ts.html
+++ b/docs/files/src_file_DataFile.ts.html
@@ -370,198 +370,199 @@ <h1 class="file-heading">File: src/file/DataFile.ts</h1>
 * @submodule Files 
 * 
 */
- 
+
 module Kiwi.Files {
-    
-    /**
-    * DataFile which contains settings, loading, and processing details for Data files to be used. 
-    * There is no tag loader support for this method of loading.
-    * 
-    * @class DataFile
-    * @namespace Kiwi.Files
-    * @extends Kiwi.Files.File
-    * @since 1.2.0
-    * @constructor
-    * @param game {Kiwi.Game} The game that this file is for
-    * @param params {Object} Options for this file.
-    *   @param params.key {String} User defined name for this file. This would be how the user would access it in the file store. 
-    *   @param params.url {String} Location of the file to be loaded.
-    *   @param {Object} [params.metadata={}] Any metadata to be associated with the file. 
-    *   @param [params.state=null] {Kiwi.State} The state that this file belongs to. Used for defining global assets vs local assets.
-    *   @param [params.fileStore=null] {Kiwi.Files.FileStore} The filestore that this file should be save in automatically when loaded.
-    *   @param [params.type=UNKNOWN] {Number} The type of file this is. 
-    *   @param [params.tags] {Array} Any tags to be associated with this file.
-    *   @param [params.parse] {Boolean} If the response should be parsed after the file is loaded. Only used with JSON and XML types of Data files.
-    * @return {Kiwi.Files.DataFile} 
-    *
-    */
-    export class DataFile extends Kiwi.Files.File {
-
-        constructor(game: Kiwi.Game, params: {} = {}) {
-            super(game, params);
-
-            this.useTagLoader = false;
-            this._loadInParallel = false;
-
-        }
-        
-        /**
-        * Sets properties for this instance based on an object literal passed. Used when the class is being created.
-        *
-        * @method parseParams
-        * @param [params] {Object}
-        *   @param [params.metadata={}] {Object} Any metadata to be associated with the file. 
-        *   @param [params.state=null] {Kiwi.State} The state that this file belongs to. Used for defining global assets vs local assets.
-        *   @param [params.fileStore=null] {Kiwi.Files.FileStore} The filestore that this file should be save in automatically when loaded.
-        *   @param [params.type=UNKNOWN] {Number} The type of file this is. 
-        *   @param [params.tags] {Array} Any tags to be associated with this file.
-        *   @param [params.parse] {Boolean} If the response should be parsed after the file is loaded. 
-        * @protected 
-        */
-        protected parseParams(params: any) {
-            super.parseParams(params);
-
-            if (!Kiwi.Utils.Common.isUndefined(params.parse)) {
-                this.parse = params.parse;
-            }
-
-        }
-
-
-        /**
-        * If the response should be parsed (using the appropriate method) after loading.
-        * Example: If set to the true and the dataType set is json, then the response will be sent through a JSON.parse call. 
-        *
-        * @property parse
-        * @type boolean
-        * @default false
-        * @public
-        */
-        public parse: boolean = false;
-
-        //this.dataType === File.XML || this.dataType === File.JSON || this.dataType === File.TEXT_DATA || this.dataType === File.BINARY_DATA
-
-        /**
-        * Returns the type of this object
-        * @method objType
-        * @return {String} &quot;DataFile&quot;
-        * @public
-        */
-        public objType() {
-            return &quot;DataFile&quot;;
-        }
-
-
-        /**
-        * Increments the counter, and calls the approprate loading method.
-        * @method _load
-        * @protected
-        */
-        protected _load() {
-
-            this.attemptCounter++;
-
-            //Special check for binary data. Change the loading type
-            if ( this.dataType === Kiwi.Files.File.BINARY_DATA ) {
-                this.xhrLoader(&#x27;GET&#x27;, &#x27;arraybuffer&#x27;);
-            } else {
-                this.xhrLoader(&#x27;GET&#x27;, &#x27;text&#x27;);
-            }
-
-        }
-
-        /**
-        * Handles decoding the arraybuffer into audio data.
-        * @method processXhr
-        * @param response
-        * @protected
-        */
-        protected processXhr(response: any) {
-
-            if (!this.parse) {
-                this.data = response;
-                this.loadSuccess();
-                return;
-            }
-
-            switch (this.dataType) {
-
-                case Kiwi.Files.File.JSON:
-                    this.processJSON(response);
-                    break;
-
-                case Kiwi.Files.File.XML:
-                    this.parseXML(response);
-                    break;
-
-                case Kiwi.Files.File.TEXT_DATA:
-                case Kiwi.Files.File.BINARY_DATA:
-                default:
-                    this.data = response;
-                    break;
-            }
-
-
-        }
-
-        /**
-        * Attempts to parse a string which is assumed to be XML. Called when &#x27;parse&#x27; is set to true. 
-        * If valid &#x27;loadSuccess&#x27; is called, otherwise &#x27;loadError&#x27; is executed
-        *  
-        * @method parseXML
-        * @param data {String}
-        * @private 
-        */
-        private parseXML(data: string) {
-
-            Kiwi.Log.log(&#x27;Kiwi.Files.DataFile: Data loaded is being parsed as XML.&#x27;, &#x27;#loading&#x27;, &#x27;#parsing&#x27;);
-
-            if (window[&#x27;DOMParser&#x27;]) {
-
-                var parser = new DOMParser();
-                this.data = parser.parseFromString(data, &quot;text/xml&quot;);
-
-            } else {
-
-                this.data = new ActiveXObject(&quot;Microsoft.XMLDOM&quot;);
-                this.data.async = &quot;false&quot;;
-                this.data.loadXML(data);
-
-            }
-
-            if (!this.data || !this.data.documentElement || this.data.getElementsByTagName(&quot;parsererror&quot;).length) {
-                this.loadError(&#x27;XML parse error.&#x27;);
-            } else {
-                this.loadSuccess();
-            }
-        }
-        
-        /**
-        * Attempts to parse a string which is assumed to be JSON. Called when &#x27;parse&#x27; is set to true. 
-        * If valid &#x27;loadSuccess&#x27; is called, otherwise &#x27;loadError&#x27; is executed
-        *  
-        * @method processJSON
-        * @param data {String}
-        * @private 
-        */
-        private processJSON( data:string ) {
-
-            Kiwi.Log.log(&#x27;Kiwi.Files.DataFile: Data loaded is being parsed as JSON.&#x27;, &#x27;#loading&#x27;, &#x27;#parsing&#x27;);
 
-            try {
-                this.data = JSON.parse(data);
-                this.loadSuccess();
+	/**
+	* DataFile which contains settings, loading, and processing details for Data files to be used. 
+	* There is no tag loader support for this method of loading.
+	* 
+	* @class DataFile
+	* @namespace Kiwi.Files
+	* @extends Kiwi.Files.File
+	* @since 1.2.0
+	* @constructor
+	* @param game {Kiwi.Game} The game that this file is for
+	* @param params {Object} Options for this file.
+	*   @param params.key {String} User defined name for this file. This would be how the user would access it in the file store. 
+	*   @param params.url {String} Location of the file to be loaded.
+	*   @param {Object} [params.metadata={}] Any metadata to be associated with the file. 
+	*   @param [params.state=null] {Kiwi.State} The state that this file belongs to. Used for defining global assets vs local assets.
+	*   @param [params.fileStore=null] {Kiwi.Files.FileStore} The filestore that this file should be save in automatically when loaded.
+	*   @param [params.type=UNKNOWN] {Number} The type of file this is. 
+	*   @param [params.tags] {Array} Any tags to be associated with this file.
+	*   @param [params.parse] {Boolean} If the response should be parsed after the file is loaded. Only used with JSON and XML types of Data files.
+	* @return {Kiwi.Files.DataFile} 
+	*
+	*/
+	export class DataFile extends Kiwi.Files.File {
+
+		constructor(game: Kiwi.Game, params: {} = {}) {
+			super(game, params);
+
+			this.useTagLoader = false;
+			this._loadInParallel = false;
+
+		}
+
+		/**
+		* Sets properties for this instance based on an object literal passed. Used when the class is being created.
+		*
+		* @method parseParams
+		* @param [params] {Object}
+		*   @param [params.metadata={}] {Object} Any metadata to be associated with the file. 
+		*   @param [params.state=null] {Kiwi.State} The state that this file belongs to. Used for defining global assets vs local assets.
+		*   @param [params.fileStore=null] {Kiwi.Files.FileStore} The filestore that this file should be save in automatically when loaded.
+		*   @param [params.type=UNKNOWN] {Number} The type of file this is. 
+		*   @param [params.tags] {Array} Any tags to be associated with this file.
+		*   @param [params.parse] {Boolean} If the response should be parsed after the file is loaded. 
+		* @protected 
+		*/
+		protected parseParams(params: any) {
+			super.parseParams(params);
+
+			if (!Kiwi.Utils.Common.isUndefined(params.parse)) {
+				this.parse = params.parse;
+			}
+
+		}
+
+
+		/**
+		* If the response should be parsed (using the appropriate method) after loading.
+		* Example: If set to the true and the dataType set is json, then the response will be sent through a JSON.parse call. 
+		*
+		* @property parse
+		* @type boolean
+		* @default false
+		* @public
+		*/
+		public parse: boolean = false;
+
+		//this.dataType === File.XML || this.dataType === File.JSON || this.dataType === File.TEXT_DATA || this.dataType === File.BINARY_DATA
+
+		/**
+		* Returns the type of this object
+		* @method objType
+		* @return {String} &quot;DataFile&quot;
+		* @public
+		*/
+		public objType() {
+			return &quot;DataFile&quot;;
+		}
+
+
+		/**
+		* Increments the counter, and calls the approprate loading method.
+		* @method _load
+		* @protected
+		*/
+		protected _load() {
+
+			this.attemptCounter++;
+
+			//Special check for binary data. Change the loading type
+			if ( this.dataType === Kiwi.Files.File.BINARY_DATA ) {
+				this.xhrLoader(&#x27;GET&#x27;, &#x27;arraybuffer&#x27;);
+			} else {
+				this.xhrLoader(&#x27;GET&#x27;, &#x27;text&#x27;);
+			}
+
+		}
+
+		/**
+		* Handles decoding the arraybuffer into audio data.
+		* @method processXhr
+		* @param response
+		* @protected
+		*/
+		protected processXhr(response: any) {
+
+			if (!this.parse) {
+				this.data = response;
+				this.loadSuccess();
+				return;
+			}
+
+			switch (this.dataType) {
+
+				case Kiwi.Files.File.JSON:
+					this.processJSON(response);
+					break;
+
+				case Kiwi.Files.File.XML:
+					this.parseXML(response);
+					break;
+
+				case Kiwi.Files.File.TEXT_DATA:
+				case Kiwi.Files.File.BINARY_DATA:
+				default:
+					this.data = response;
+					break;
+			}
+
+
+		}
+
+		/**
+		* Attempts to parse a string which is assumed to be XML. Called when &#x27;parse&#x27; is set to true. 
+		* If valid &#x27;loadSuccess&#x27; is called, otherwise &#x27;loadError&#x27; is executed
+		*  
+		* @method parseXML
+		* @param data {String}
+		* @private 
+		*/
+		private parseXML(data: string) {
+
+			Kiwi.Log.log(&#x27;Kiwi.Files.DataFile: Data loaded is being parsed as XML.&#x27;, &#x27;#loading&#x27;, &#x27;#parsing&#x27;);
+
+			if (window[&#x27;DOMParser&#x27;]) {
+
+				var parser = new DOMParser();
+				this.data = parser.parseFromString(data, &quot;text/xml&quot;);
+
+			} else {
+
+				this.data = new ActiveXObject(&quot;Microsoft.XMLDOM&quot;);
+				this.data.async = &quot;false&quot;;
+				this.data.loadXML(data);
+
+			}
+
+			if (!this.data || !this.data.documentElement || this.data.getElementsByTagName(&quot;parsererror&quot;).length) {
+				this.loadError(&#x27;XML parse error.&#x27;);
+			} else {
+				this.loadSuccess();
+			}
+		}
+
+		/**
+		* Attempts to parse a string which is assumed to be JSON. Called when &#x27;parse&#x27; is set to true. 
+		* If valid &#x27;loadSuccess&#x27; is called, otherwise &#x27;loadError&#x27; is executed
+		*  
+		* @method processJSON
+		* @param data {String}
+		* @private 
+		*/
+		private processJSON( data:string ) {
+
+			Kiwi.Log.log(&#x27;Kiwi.Files.DataFile: Data loaded is being parsed as JSON.&#x27;, &#x27;#loading&#x27;, &#x27;#parsing&#x27;);
+
+			try {
+				this.data = JSON.parse(data);
+				this.loadSuccess();
+
+			} catch (e) {
+				this.loadError(e);
+
+			}
 
-            } catch (e) {
-                this.loadError(e);
-
-            }
+		}
 
-        }
+	}
 
-    }
+}
 
-}  
     </pre>
 </div>
 
diff --git a/docs/files/src_file_DataLibrary.ts.html b/docs/files/src_file_DataLibrary.ts.html
index 7b1d536..993965b 100644
--- a/docs/files/src_file_DataLibrary.ts.html
+++ b/docs/files/src_file_DataLibrary.ts.html
@@ -370,115 +370,113 @@ <h1 class="file-heading">File: src/file/DataLibrary.ts</h1>
 * @submodule Files 
 * @main Files
 */
- 
+
 module Kiwi.Files {
 
-    /**
-    * Holds a reference to all of the data Files (json, xml, e.t.c) that are accessible on the State that this DataLibrary is on.
-    *
-    * @class DataLibrary
-    * @namespace Kiwi.Files
-    * @constructor
-    * @param game {Kiwi.Game} The game that this DataLibrary belongs to.
-    * @return {Kiwi.Files.DataLibrary}
-    *
-    */
-    export class DataLibrary {
- 
-        constructor(game: Kiwi.Game) {
+	/**
+	* Holds a reference to all of the data Files (json, xml, e.t.c) that are accessible on the State that this DataLibrary is on.
+	*
+	* @class DataLibrary
+	* @namespace Kiwi.Files
+	* @constructor
+	* @param game {Kiwi.Game} The game that this DataLibrary belongs to.
+	* @return {Kiwi.Files.DataLibrary}
+	*
+	*/
+	export class DataLibrary {
 
-            this._game = game;
-            this.data = {};
-        }
+		constructor(game: Kiwi.Game) {
 
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} &quot;DataLibrary&quot;
-        * @public
-        */
-        public objType(): string {
-            return &quot;DataLibrary&quot;;
-        }
+			this._game = game;
+			this.data = {};
+		}
 
-        /**
-        * The game that this DataLibrary belongs to.
-        * @property _game
-        * @type Kiwi.Game
-        * @private
-        */
-        private _game: Kiwi.Game;
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} &quot;DataLibrary&quot;
+		* @public
+		*/
+		public objType(): string {
+			return &quot;DataLibrary&quot;;
+		}
 
-        /**
-        * Contains all of the data that this available.
-        * @property data
-        * @type Object
-        * @public
-        */
-        public data;
+		/**
+		* The game that this DataLibrary belongs to.
+		* @property _game
+		* @type Kiwi.Game
+		* @private
+		*/
+		private _game: Kiwi.Game;
 
-        /**
-        * Resets the Data Library and makes it ready for the next state.
-        * @method clear
-        * @public
-        */
-        public clear() {
-            for (var prop in this.data) {
-                delete this.data[prop];
-            }
-        }
+		/**
+		* Contains all of the data that this available.
+		* @property data
+		* @type Object
+		* @public
+		*/
+		public data;
 
-        /**
-        * Adds a new data file to the DataLibrary.
-        * @method add
-        * @param dataFile {Kiwi.Files.File} The File that is to be added.
-        * @public
-        */
-        public add(dataFile: Kiwi.Files.File) {
+		/**
+		* Resets the Data Library and makes it ready for the next state.
+		* @method clear
+		* @public
+		*/
+		public clear() {
+			for (var prop in this.data) {
+				delete this.data[prop];
+			}
+		}
 
-            switch (dataFile.dataType) {
-                case Kiwi.Files.File.JSON:
-                case Kiwi.Files.File.XML :
-                case Kiwi.Files.File.BINARY_DATA:
-                case Kiwi.Files.File.TEXT_DATA:
-                    
-                    this.data[dataFile.key] = dataFile;
-                    break;
-                
-                default:
-                   //Image file is of unknown type and was not added to data library
-                    break;
-            }
+		/**
+		* Adds a new data file to the DataLibrary.
+		* @method add
+		* @param dataFile {Kiwi.Files.File} The File that is to be added.
+		* @public
+		*/
+		public add(dataFile: Kiwi.Files.File) {
 
-        }
+			switch (dataFile.dataType) {
+				case Kiwi.Files.File.JSON:
+				case Kiwi.Files.File.XML :
+				case Kiwi.Files.File.BINARY_DATA:
+				case Kiwi.Files.File.TEXT_DATA:
+					
+					this.data[dataFile.key] = dataFile;
+					break;
+				
+				default:
+				   //Image file is of unknown type and was not added to data library
+					break;
+			}
 
-        /**
-       * Rebuild the library from a fileStore. Clears the library and repopulates it.
-       * @method rebuild
-       * @param fileStore {Kiwi.Files.FileStore} The fileStore which is being used 
-       * @param state {Kiwi.State} The State so that we know which DataLibrary to add the files tot.
-       * @public
-       */
-        public rebuild(fileStore: Kiwi.Files.FileStore, state: Kiwi.State) {
-            this.clear();
-            Kiwi.Log.log(&quot;Kiwi.DataLibrary: Rebuilding Data Library&quot;, &#x27;#rebuild&#x27;);
-            
+		}
 
-            var fileStoreKeys = fileStore.keys;
-            for (var i = 0; i &lt; fileStoreKeys.length; i++) {
-                var file: Kiwi.Files.File = this._game.fileStore.getFile(fileStoreKeys[i]);
-                if (file.isData) {
-                    Kiwi.Log.log(&quot;  Kiwi.DataLibrary: Adding Data: &quot; + file.name, &#x27;#rebuild&#x27;, &#x27;#adding&#x27;);
-                    state.dataLibrary.add(file);
-                }
-            }
-        }
+		/**
+	   * Rebuild the library from a fileStore. Clears the library and repopulates it.
+	   * @method rebuild
+	   * @param fileStore {Kiwi.Files.FileStore} The fileStore which is being used 
+	   * @param state {Kiwi.State} The State so that we know which DataLibrary to add the files tot.
+	   * @public
+	   */
+		public rebuild(fileStore: Kiwi.Files.FileStore, state: Kiwi.State) {
+			this.clear();
+			Kiwi.Log.log(&quot;Kiwi.DataLibrary: Rebuilding Data Library&quot;, &#x27;#rebuild&#x27;);
+			
 
-    
-    }
+			var fileStoreKeys = fileStore.keys;
+			for (var i = 0; i &lt; fileStoreKeys.length; i++) {
+				var file: Kiwi.Files.File = this._game.fileStore.getFile(fileStoreKeys[i]);
+				if (file.isData) {
+					Kiwi.Log.log(&quot;  Kiwi.DataLibrary: Adding Data: &quot; + file.name, &#x27;#rebuild&#x27;, &#x27;#adding&#x27;);
+					state.dataLibrary.add(file);
+				}
+			}
+		}
 
-}
+	}
 
+}
 
     </pre>
 </div>
diff --git a/docs/files/src_file_File.ts.html b/docs/files/src_file_File.ts.html
index 2012e74..7ef1336 100644
--- a/docs/files/src_file_File.ts.html
+++ b/docs/files/src_file_File.ts.html
@@ -370,1406 +370,1406 @@ <h1 class="file-heading">File: src/file/File.ts</h1>
 * @submodule Files 
 * 
 */
- 
+
 module Kiwi.Files {
-     
-    /**
-    * Base class which handles the loading of an external data file an xhr. 
-    * TextureFile, AudioFile contain fallback loading via tags and all extended Files contain methods for processing the files.
-    *
-    * Also can contain information about the file (like file size, last modified, e.t.c.)
-    * Uses an object literal in its constructor since 1.2 (which is preferred), but also contains previous construction support.
-    * 
-    * @class File
-    * @namespace Kiwi.Files
-    * @constructor
-    * @param game {Kiwi.Game} The game that this file is for
-    * @param params {Object} Options for this file.
-    *   @param params.key {String} User defined name for this file. This would be how the user would access it in the file store. 
-    *   @param params.url {String} Location of the file to be loaded.
-    *   @param {Object} [params.metadata={}] Any metadata to be associated with the file. 
-    *   @param [params.state=null] {Kiwi.State} The state that this file belongs to. Used for defining global assets vs local assets.
-    *   @param [params.fileStore=null] {Kiwi.Files.FileStore} The filestore that this file should be save in automatically when loaded.
-    *   @param [params.type=UNKNOWN] {Number} The type of file this is. 
-    *   @param [params.tags] {Array} Any tags to be associated with this file.
-    * @return {Kiwi.Files.File} 
-    *
-    */
-    export class File {
-         
-        constructor(game: Kiwi.Game, params:any) {
-
-            this.game = game;
-
-            this.onComplete = new Kiwi.Signal;
-
-            this.onProgress = new Kiwi.Signal;
-
-            if (Kiwi.Utils.Common.isNumeric(params)) {
-                //Deprecate
-                this._parseParamsOld(params, arguments[2], arguments[3], arguments[4], arguments[5]);
-
-            } else {
-
-                this.key = params.key;
-
-                this._assignFileDetails(params.url);
-
-                this.parseParams(params);
-
-            }
-
-
-        }
-
-        /**
-        * Assigns properties and variables for the constructor as in pre 1.2 Kiwi versions. 
-        * 
-        * @method _parseParamsOld
-        * @since 1.2.0
-        * @param dataType {Number} The type of file that is being loaded. For this you can use the STATIC properties that are located on this class for quick code completion.
-        * @param path {String} The location of the file that is to be loaded.
-        * @param [name=&#x27;&#x27;] {String} A name for the file. If no name is specified then the files name will be used.
-        * @param [saveToFileStore=true] {Boolean} If the file should be saved on the file store or not.
-        * @param [storeAsGlobal=true] {Boolean} If this file should be stored as a global file, or if it should be destroyed when this state gets switched out.
-        * @private
-        */
-        private _parseParamsOld(dataType: number, url: string, name: string = &#x27;&#x27;, saveToFileStore: boolean = true, storeAsGlobal: boolean = true) {
-
-            this.dataType = dataType;
-
-            this._assignFileDetails(url);
-
-            if (saveToFileStore) {
-                this.fileStore = this.game.fileStore;
-            }
-
-            if (this.game.states.current &amp;&amp; !storeAsGlobal) {
-                this.ownerState = this.game.states.current;
-            }
-
-        }
-
-
-        /**
-        * Sets properties for this instance based on an object literal passed. Used when the class is being created.
-        *
-        * @method parseParams
-        * @since 1.2.0
-        * @param [params] {Object}
-        *   @param [params.metadata={}] {Object} Any metadata to be associated with the file. 
-        *   @param [params.state=null] {Kiwi.State} The state that this file belongs to. Used for defining global assets vs local assets.
-        *   @param [params.fileStore=null] {Kiwi.Files.FileStore} The filestore that this file should be save in automatically when loaded.
-        *   @param [params.type=UNKNOWN] {Number} The type of file this is. 
-        *   @param [params.tags] {Array} Any tags to be associated with this file.
-        * @protected 
-        */
-        protected parseParams(params: any) {
-
-            this.fileStore = params.fileStore || null;
-            this.ownerState = params.state || null;
-            this.metadata = params.metadata || {};
-
-            if (Kiwi.Utils.Common.isUndefined(params.type)) {
-                this.dataType = File.UNKNOWN;
-            } else {
-                this.dataType = params.type;
-            }
-
-            if (params.tags &amp;&amp; Kiwi.Utils.Common.isArray(params.tags)) {
-
-                for (var i = 0; i &lt; params.tags.length; i++) {
-                    this.addTag(params.tags[i]);
-                }
-
-            }
-
-        }
-
-        /**
-        * Gets the file details from the URL passed. Name, extension, and path are extracted.
-        *
-        * @method _assignFileDetails
-        * @param url {String}
-        * @private
-        * @since 1.2.0
-        */
-        private _assignFileDetails( url:string ) {
-
-            this.URL = url;
-
-            if ( url.lastIndexOf(&#x27;/&#x27;) &gt; -1) {
-                this.name = url.substr( url.lastIndexOf(&#x27;/&#x27;) + 1 );
-                this.path = url.substr(0, url.lastIndexOf(&#x27;/&#x27;) + 1);
-
-            } else {
-                this.path = &#x27;&#x27;;
-                this.name = url;
-
-            }
-            
-            //  Not safe if there is a query string after the file extension
-            this.extension = url.substr( url.lastIndexOf(&#x27;.&#x27;) + 1).toLowerCase();
-
-        }
-
-
-        /**
-        * Returns the type of this object
-        * @method objType
-        * @return {String} &quot;File&quot;
-        * @public
-        */
-        public objType() {
-            return &quot;File&quot;;
-        }
-
-        /**
-        * The game that this file belongs to.
-        * @property game
-        * @type Kiwi.Game
-        * @since 1.2.0
-        * @public
-        */
-        public game: Kiwi.Game;
-
-
-        /**
-        * ---------------
-        * Generic Properties 
-        * ---------------
-        **/
-
-        /**
-        * Indicates if this file can be loaded in parallel to other files. 
-        * This is usually only used files are using the tag loaders and not XHR.
-        * 
-        * @property _loadInParallel
-        * @type Boolean
-        * @default false
-        * @since 1.2.0
-        * @private
-        */
-        protected _loadInParallel: boolean = false;
-        
-        /**
-        * READ ONLY: Indicates if this file can be loaded in parallel to other files. 
-        * This is usually only used files are using the tag loaders and not XHR.
-        * 
-        * @property loadInParallel
-        * @type Boolean
-        * @default false
-        * @readOnly
-        * @since 1.2.0
-        * @private
-        */
-        public get loadInParallel(): boolean {
-            return this._loadInParallel;
-        }
-
-        /**
-        * The filestore this file should be added to when it has loaded. 
-        * This can be replaced with a custom one if wanted.
-        * 
-        * @property fileStore
-        * @type Kiwi.Files.FileStore
-        * @since 1.2.0
-        * @public
-        */
-        public fileStore: Kiwi.Files.FileStore;
-
-        /**
-        * If this file is using tag loading instead of the XHR method. 
-        * Only used by extended classes
-        * 
-        * @property useTagLoader
-        * @type Boolean
-        * @since 1.2.0
-        * @protected
-        */
-        protected useTagLoader: boolean = false;
-        
-        /**
-        * The &#x27;key&#x27; is the user defined name and the users way of accessing this file once loaded.
-        * @property key
-        * @type String
-        * @public
-    	*/
-        public key: string;
-        
-        /**
-        * A dictionary, stores any information relating to this file.
-        * Used when loading images that are to be used as a spritesheet or texture atlas.
-        * @property data
-        * @type Any
-        * @public
-    	*/
-        public metadata: any;
-        
-        /**
-        * Holds the type of data that is being loaded. 
-        * This should be used with the STATIC properties that hold the various datatypes that can be loaded.
-        *
-        * @property dataType
-        * @type String
-        * @public
-    	*/
-        public dataType: number;
-        
-
-        /**
-        * ---------------
-        * File Information
-        * ---------------
-        */
-        
-        /**
-        * The name of the file being loaded.
-        *
-        * @property name
-        * @type String
-        * @since 1.2.0
-    	* @public
-        */
-        public name: string;
-        
-        /**
-        * The location of where the file is placed without the file itself (So without the files name).
-        * Example: If the file you are load is located at &#x27;images/awesomeImage.png&#x27; then the filepath will be &#x27;images/&#x27;
-        *
-        * @property path
-        * @type String
-        * @since 1.2.0
-    	* @public
-        */
-        public path: string;
-        
-        /**
-        * The extension of the file that is being loaded.
-        * This is based upon what the file path that the developer specifies.
-        *
-        * @property extension
-        * @type String
-        * @since 1.2.0
-        * @public
-    	*/
-        public extension: string;
-        
-        /**
-        * The full filepath including the file itself.
-        *
-        * @property URL
-        * @type String
-        * @since 1.2.0
-        * @public
-    	*/
-        public URL: string;
-        
-        /**
-        * The type of file that is being loaded.
-        * Is only ever given a value when used with the XHR method of loading OR if you use &#x27;loadDetails&#x27; before hand.
-        * The value is based off of the &#x27;Content-Type&#x27; of the XHR&#x27;s response header returns.
-        *
-        * @property type
-        * @type String
-        * @public
-    	*/
-        public type: string;
-        
-        /**
-        * The size of the file that was/is being loaded. 
-        * Only has a value when the file was loaded by the XHR method OR you request the file information beforehand using &#x27;loadDetails&#x27;.
-        *
-        * @property size
-        * @type Number
-        * @default 0
-        * @since 1.2.0
-        * @public
-    	*/
-        public size: number = 0;
-
-        /**
-        * ---------------
-        * Callbacks
-        * ---------------
-        */
-
-        /**
-        * Signal which dispatches events when the file has successfully loaded. 
-        * 
-        * @property onComplete
-        * @type Kiwi.Signal
-        * @since 1.2.0
-        * @public
-        */
-        public onComplete: Kiwi.Signal;
-        
-        /**
-        * Signal which dispatches events when the file is loading. 
-        * Not guarenteed to dispatch events as it depends on the method of loading being performed
-        * 
-        * @property onProgress
-        * @type Kiwi.Signal
-        * @since 1.2.0
-        * @public
-        */
-        public onProgress: Kiwi.Signal;
-
-
-        /**
-        * ---------------
-        * Loading
-        * ---------------
-        **/
-        
-        /**
-        * The particular piece of data that the developer wanted loaded. This is in a format that is based upon the datatype passed.
-        * @property data
-        * @type Any
-        * @public
-    	*/
-        public data: any;
-          
-        /**
-        * The number of milliseconds that the XHR should wait before timing out.
-        * Set this to NULL if you want it to not timeout.
-        *
-        * @property timeOutDelay
-        * @type Number
-        * @default 4000
-        * @public
-        */
-        public timeOutDelay: number = Kiwi.Files.File.TIMEOUT_DELAY;
-        
-        /**
-        * The default number of milliseconds that the XHR should wait before timing out.
-        * Set this to NULL if you want it to not timeout.
-        *
-        * @property TIMEOUT_DELAY
-        * @type Number
-        * @static
-        * @since 1.2.0
-        * @public
-        */
-        public static TIMEOUT_DELAY: number = 4000;
-        
-        /**
-        * The number of attempts at loading there have currently been at loading the file.
-        * This is only used with XHR methods of loading.
-        * @property attemptCounter
-        * @type Number
-        * @protected
-        */
-        protected attemptCounter: number = 0;
-        
-        /**
-        * The maximum attempts at loading the file that there is allowed.
-        * @property maxLoadAttempts
-        * @type Number
-        * @default 2
-        * @public
-        */
-        public maxLoadAttempts: number = Kiwi.Files.File.MAX_LOAD_ATTEMPTS;
-        
-        /**
-        * The default maximum attempts at loading the file that there is allowed.
-        * @property MAX_LOAD_ATTEMPTS
-        * @type Number
-        * @default 2
-        * @static
-        * @since 1.2.0
-        * @public
-        */
-        public static MAX_LOAD_ATTEMPTS: number = 2;
-        
-        /**
-        * Starts the loading process for this file. 
-        * Passing parameters to this method has been deprecated and only exists for backwards compatibility.
-        * 
-        * @method load
-        * @public
-        */
-        public load(onCompleteCallback?: any, onProgressCallback?: any, customFileStore?: Kiwi.Files.FileStore, maxLoadAttempts?: number, timeout?: number) {
-
-            //Not currently loading?
-            if (this.loading) {
-                Kiwi.Log.error(&#x27;Kiwi.Files.File: File loading is in progress. Cannot be told to load again.&#x27;, &#x27;#loading&#x27;);
-                return;
-            }
-
-            Kiwi.Log.log(&quot;Kiwi.Files.File: Starting to load &#x27;&quot; + this.name + &quot;&#x27;&quot;, &#x27;#file&#x27;, &#x27;#loading&#x27;);
-
-            //Set the variables based on the parameters passed
-            //To be deprecated
-            if (onCompleteCallback) this.onComplete.add( onCompleteCallback );
-            if (onProgressCallback) this.onProgress.add( onProgressCallback );
-            if (customFileStore) this.fileStore = customFileStore;
-            if (typeof maxLoadAttempts !== &quot;undefined&quot;) this.maxLoadAttempts = maxLoadAttempts;
-            if (typeof timeout !== &quot;undefined&quot;) this.timeOutDelay = timeout;
-
-            //Start Loading!!!
-            this._start();
-            this._load();
-        }
-
-
-        /**
-        * Increments the counter, and calls the approprate loading method.
-        * @method _load
-        * @since 1.2.0
-        * @protected
-        */
-        protected _load() {
-            this.attemptCounter++;
-            this.xhrLoader( &#x27;GET&#x27;, &#x27;text&#x27; );
-        }
-
-
-        /**
-        * Should be called by the loading method. Dispatches the &#x27;onProgress&#x27; callback.
-        * @method loadProgress
-        * @since 1.2.0
-        * @protected
-        */
-        protected loadProgress() {
-            this.onProgress.dispatch(this);
-        }
-
-
-        /**
-        * Called by the loading methods when the file has been loaded and successfully processed.
-        * Dispatches the &#x27;onComplete&#x27; callback and sets the appropriate properties.
-        * @method loadSuccess
-        * @since 1.2.0
-        * @protected 
-        */ 
-        protected loadSuccess() {
-
-            //If already completed skip
-            if (this.complete) {
-                return;
-            }
-
-            this.success = true;
-            this.hasError = false;
-            this._stop();
-
-            if (this.fileStore) {
-                this.fileStore.addFile(this.key, this);
-            }
-
-            this.onComplete.dispatch(this);
-
-        }
-        
-        /**
-        * Executed when the loading process fails. 
-        * This could be for any reason
-        * 
-        * @method loadError
-        * @param error {Any} The event / reason for the file to not be loaded.
-        * @since 1.2.0
-        * @protected 
-        */ 
-        protected loadError(error: any) {
-
-            //Try again?
-            if (this.attemptCounter &gt;= this.maxLoadAttempts) {
-                //Failed
-                Kiwi.Log.log(&quot;Kiwi.Files.File: Failed to load file &#x27;&quot; + this.name + &quot;&#x27;. Trying Again&quot;, &#x27;#loading&#x27;);
-                this.hasError = true;
-                this.success = false;
-                this.error = error;
-                this._stop();
-                this.onComplete.dispatch(this);
-
-            } else {
-                Kiwi.Log.log(&quot;Kiwi.Files.File: Failed to load file &#x27;&quot; + this.name + &quot;&#x27;&quot;, &#x27;#loading&#x27;);
-                //Try Again
-                this._load();
-            }
-
-        }
-
-        /**
-        * ---------------
-        * XHR Loading 
-        * ---------------
-        **/
-
-        /**
-        * Sets up a XHR loader based on the properties of this file and parameters passed.
-        * 
-        * @method xhrLoader
-        * @param [method=&quot;GET&quot;] {String} The method this request should be made in.
-        * @param [responseType=&quot;text&quot;] {String} The type of response we are expecting.
-        * @param [timeoutDelay] {Number} 
-        * @protected
-        */
-        protected xhrLoader(method: string = &#x27;GET&#x27;, responseType: string = &#x27;text&#x27;, timeoutDelay: number = this.timeOutDelay) {
-
-            this._xhr = new XMLHttpRequest();
-            this._xhr.open(&#x27;GET&#x27;, this.URL, true);
-
-            if (timeoutDelay !== null) {
-                this._xhr.timeout = timeoutDelay;
-            }
-
-            this._xhr.responseType = responseType;
-
-            this._xhr.onload = (event) =&gt; this.xhrOnLoad(event);
-            this._xhr.onerror = (event) =&gt; this.loadError(event);
-            this._xhr.onprogress = (event) =&gt; this.xhrOnProgress(event);
-
-            //Events to deprecate
-            this._xhr.onreadystatechange = (event) =&gt; function () {
-                this.readyState = this._xhr.readyState;
-            };
-
-            this._xhr.onloadstart = (event) =&gt; function (event) {
-                this.timeStarted = event.timeStamp;
-                this.lastProgress = event.timeStamp;
-            };
-
-            this._xhr.ontimeout = (event) =&gt; function (event) {
-                this.hasTimedOut = true;
-            };
-
-            this._xhr.send();
-
-        }
-
-        /**
-        * Progress event fired whilst the file is loading via XHR.
-        * @method xhrOnProgress
-        * @param event {Any}
-        * @protected
-        */
-        protected xhrOnProgress(event) {
-
-            this.bytesLoaded = parseInt(event.loaded);
-            this.bytesTotal = parseInt(event.total);
-            this.percentLoaded = Math.round((this.bytesLoaded / this.bytesTotal) * 100);
-
-            this.onProgress.dispatch(this);
-        }
-
-        /**
-        * Fired when the file has been loaded. 
-        * Checks that the response contains information before marking it as a success.
-        * 
-        * @method xhrOnLoad
-        * @param event {Any}
-        * @protected
-        */
-        protected xhrOnLoad(event) {
-
-            //Deprecate
-            this.status = this._xhr.status;
-            this.statusText = this._xhr.statusText;
-
-            // Easiest to just see if the response isn&#x27;t null, and thus has data or not.
-            if (this._xhr.response) {
-                this._getXhrHeaderInfo();
-                this.buffer = this._xhr.response; //Deprecate
-                this.processXhr(this._xhr.response);
-
-            } else {
-                this.loadError(event);
-
-            }
-        }
-
-        /**
-        * Contains the logic for processing the information retrieved via XHR.
-        * Assigns the data property. 
-        * This method is also in charge of calling &#x27;loadSuccess&#x27; (or &#x27;loadError&#x27;) when processing is complete. 
-        * 
-        * @method processXhr
-        * @param response 
-        * @protected
-        */
-        protected processXhr( response:any ) {
-            this.data = response;
-            this.loadSuccess();
-        }
-
-        /**
-        * The XMLHttpRequest object. This only has a value if the xhr method of load is being used, otherwise this is null.
-        * @property _xhr
-        * @type XMLHttpRequest
-        * @protected
-        */
-        protected _xhr: XMLHttpRequest;
-        
-        /**
-        * -----------------
-        * Loading Status
-        * -----------------
-        **/
-
-        /**
-        * The time at which the loading started. 
-        * @property timeStarted
-        * @type Number
-        * @default 0
-        * @public
-        */
-        public timeStarted: number = 0;
-
-        /**
-        * The time at which progress in loading the file was last occurred.
-        * Only contains a value when using XHR methods of loading.
-        * @property lastProgress
-        * @type Number
-        * @public
-    	*/
-        public lastProgress: number = 0;
-
-        /**
-        * The time at which the load finished.
-        * @property timeFinished
-        * @type Number
-        * @default 0
-        * @public
-        */
-        public timeFinished: number = 0;
-
-
-        /**
-        * The duration or how long it took to load the file. In milliseconds. 
-        * @property duration
-        * @type Number
-        * @default 0
-        * @public
-        */
-        public duration: number = 0;
-
-
-        /**
-        * Is executed when this file starts loading. 
-        * Gets the time and resets properties used in file loading.
-        * @method _start
-        * @private
-        */
-        private _start() {
-
-            this.attemptCounter = 0;
-            this.loading = true;
-            this.timeStarted = Date.now();
-            this.percentLoaded = 0;
-
-        }
-
-
-        /**
-        * Is executed when this file stops loading. 
-        * @method _stop
-        * @private
-        */
-        private _stop() {
-
-            this.loading = false;
-            this.complete = true;
-            this.percentLoaded = 100;
-            this.timeFinished = Date.now();
-            this.duration = this.timeFinished - this.timeStarted;
-
-        }
-
-        /**
-        * If file loading failed or encountered an error and so was not laoded
-        * @property hasError
-        * @type boolean
-        * @default false
-        * @public
-        */
-        public hasError: boolean = false;
-
-        /**
-        * Holds the error (if there was one) when loading the file.
-        * @property error
-        * @type Any
-        * @public
-        */
-        public error: any;
-
-        /**
-        * If loading was successful or not. 
-        * @property success
-        * @type boolean
-        * @public
-        */
-        public success: boolean = false;
-
-        /**
-        * Indication if the file is currently being loaded or not.
-        * @property loading
-        * @type boolean
-        * @public 
-        */
-        public loading: boolean = false;
-
-        /**
-        * Indicates if the file has attempted to load.
-        * This is regardless of whether it was a success or not.
-        * @property complete
-        * @type boolean
-        * @default false
-        * @public
-        */
-        public complete: boolean = false;
-
-        /**
-        * The amount of percent loaded the file is. This is out of 100.
-        * @property percentLoaded
-        * @type Number
-        * @public
-        */
-        public percentLoaded: number = 0;
-
-        /**
-        * The number of bytes that have currently been loaded. 
-        * Useful when wanting to know exactly how much data has been transferred.
-        * Only has a value when using the XHR method of loading.
-        * 
-        * @property bytesLoaded
-        * @type Number
-        * @default 0
-        * @public
-        */
-        public bytesLoaded: number = 0;
-
-
-        /**
-        * The total number of bytes that the file consists off.
-        * Only has a value when using the XHR method of loading 
-        * or you are getting the file details before hand.
-        *
-        * @property bytesTotal
-        * @type Number
-        * @default 0
-        * @public
-        */
-        public bytesTotal: number = 0;
-
-        /**
-        * --------------------
-        * XHR Header Information
-        * --------------------
-        **/
-
-        /**
-        * The callback method to be executed when the file details have been retrieved.
-        * @property headCompleteCallback
-        * @type Any
-        * @since 1.2.0
-        * @private
-        */
-        private headCompleteCallback: any;
-        
-        /**
-        * The context the &#x27;headCompleteCallback&#x27; should be executed in..
-        * The callback is the following arguments. 
-        * 1. If the details were recieved
-        * 
-        * @property headCompleteContext
-        * @type Any
-        * @since 1.2.0
-        * @private
-        */
-        private headCompleteContext: any;
-
-        /**
-        * An indication of whether this files information has been retrieved or not.
-        * @property detailsReceived
-        * @type boolean
-        * @default false
-        * @since 1.2.0
-        * @public
-        */
-        public detailsReceived:boolean = false;
-
-        /**
-        * Makes a XHR HEAD request to get information about the file that is going to be downloaded.
-        * This is particularly useful when you are wanting to check how large a file is before loading all of the content. 
-        * 
-        * @method loadDetails
-        * @param [callback] {Any}
-        * @param [context] {Any}
-        * @return {Boolean} If the request was made
-        * @since 1.2.0
-        * @public
-        */
-        public loadDetails(callback:any=null, context:any=null) {
-
-            //Can&#x27;t continue if regular loading is progressing.
-            if ( this.loading ) {
-                Kiwi.Log.error(&#x27;Kiwi.Files.File: Cannot get the file details whilst the file is already loading&#x27;);
-                return false;
-            }
-
-            if (callback) this.headCompleteCallback = callback;
-            if (context) this.headCompleteContext = context;
-
-            this.xhrHeadRequest();
-            return true;
-        }
-
-        /**
-        * Retrieves the HEAD information from the XHR. 
-        * This method is used for both &#x27;load&#x27; and &#x27;loadDetails&#x27; methods.
-        * 
-        * @method _getXhrHeaderInfo
-        * @since 1.2.0
-        * @private
-        */
-        private _getXhrHeaderInfo() {
-
-            if (!this._xhr) {
-                return;
-            }
-
-            this.status = this._xhr.status;
-            this.statusText = this._xhr.statusText;
-
-            //Get the file information...
-            this.type = this._xhr.getResponseHeader(&#x27;Content-Type&#x27;);
-            this.size = parseInt( this._xhr.getResponseHeader(&#x27;Content-Length&#x27;) );
-            this.lastModified = this._xhr.getResponseHeader(&#x27;Last-Modified&#x27;);
-            this.ETag = this._xhr.getResponseHeader(&#x27;ETag&#x27;);
-            this.detailsReceived = true;
-        }
-
-        /**
-        * Sets up a XMLHttpRequest object and sends a HEAD request.
-        * @method xhrHeadRequest
-        * @since 1.2.0
-        * @private
-        */
-        private xhrHeadRequest() {
-
-            this._xhr = new XMLHttpRequest();
-            this._xhr.open(&#x27;HEAD&#x27;, this.fileURL, true);
-            if (this.timeOutDelay !== null) this._xhr.timeout = this.timeOutDelay;
-
-            this._xhr.onload = (event) =&gt; this.xhrHeadOnLoad(event);
-            this._xhr.onerror = (event) =&gt; this.xhrHeadOnError(event);
-
-            this._xhr.send();
-        }
-
-        /**
-        * Executed when a xhr head request fails
-        * @method xhrHeadOnError
-        * @param event {Any}
-        * @private
-        */
-        private xhrHeadOnError(event) {
-
-            if (this.headCompleteCallback) {
-                this.headCompleteCallback.call(this.headCompleteContext, false);
-            }
-
-        }
-
-        /**
-        * Executed when a XHR head request has loaded.
-        * Checks that the status of the request is 200 before classifying it as a success.
-        * @method xhrHeadOnLoad
-        * @param event {Any}
-        * @private
-        */
-        private xhrHeadOnLoad(event) {
-
-            if (this._xhr.status === 200) {
-                this._getXhrHeaderInfo();
-
-                if (this.headCompleteCallback) {
-                    this.headCompleteCallback.call(this.headCompleteContext, true);
-                }
-            } else {
-                this.xhrHeadOnError(null);
-            }
-
-        }
-
-        /**
-        * --------------------
-        * MISC
-        * --------------------
-        **/
-
-        /**
-        * The Entity Tag that is assigned to the file. O
-        * Only has a value when either using the XHR loader OR when requesting the file details.
-        * @property ETag
-        * @type String
-        * @public
-        */
-        public ETag: string = &#x27;&#x27;;
-
-        /**
-        * The last date/time that this file was last modified. 
-        * Only has a value when using the XHR method of loading OR when requesting the file details.
-        * @property lastModified
-        * @type String
-        * @default &#x27;&#x27;
-        * @public
-        */
-        public lastModified: string = &#x27;&#x27;; 
-
-
-        /**
-        * --------------------
-        * Tagging + State
-        * --------------------
-        **/
-
-        /**
-        * The state that added the entity - or null if it was added as global
-        * @property ownerState
-        * @type Kiwi.State
-        * @public
-        */
-        public ownerState: Kiwi.State;
-
-
-        /**
-        * Any tags that are on this file. This can be used to grab files/objects on the whole game that have these particular tag.
-        * @property _tags
-        * @type String[]
-        * @default []
-        * @private
-        */
-        private _tags: string[];
-
-
-        /**
-        * Adds a new tag to this file. 
-        * @method addTag
-        * @param tag {String} The tag that you would like to add
-        * @public
-        */
-        public addTag(tag: string) {
-            if (this._tags.indexOf(tag) == -1) {
-                this._tags.push(tag);
-            }
-        }
-
-
-        /**
-        * Removes a tag from this file.
-        * @method removeTag
-        * @param tag {String} The tag that is to be removed.
-        * @public
-        */
-        public removeTag(tag: string) {
-            var index: number = this._tags.indexOf(tag);
-            if (index != -1) {
-                this._tags.splice(index, 1);
-            }
-        }
-
-
-        /**
-        * Checks to see if a tag that is passed exists on this file.
-        * Returns a boolean that is used as a indication of the results. 
-        * True means that the tag exists on this file.
-        *
-        * @method hasTag
-        * @param tag {String} The tag you are checking to see exists.
-        * @return {Boolean} If the tag does exist on this file or not.
-        * @public
-        */
-        public hasTag(tag: string) {
-            if (this._tags.indexOf(tag) == -1) {
-                return false;
-            }
-            return true;
-
-        }
-
-        /**
-        * -------------------
-        * File Type
-        * -------------------
-        **/
-
-        /**
-        * A STATIC property that has the number associated with the IMAGE Datatype.
-        * @property IMAGE
-        * @type number
-        * @static
-        * @final
-        * @default 0
-        * @public
-        */
-        public static IMAGE: number = 0;
-
-
-        /**
-        * A STATIC property that has the number associated with the SPRITE_SHEET Datatype.
-        * @property SPRITE_SHEET
-        * @type number
-        * @static
-        * @final
-        * @default 1
-        * @public
-        */
-        public static SPRITE_SHEET: number = 1;
-
-
-        /**
-        * A STATIC property that has the number associated with the TEXTURE_ATLAS Datatype.
-        * @property TEXTUREATLAS
-        * @type number
-        * @static
-        * @final
-        * @default 2
-        * @public
-        */
-        public static TEXTURE_ATLAS: number = 2;
-
-
-        /**
-        * A STATIC property that has the number associated with the AUDIO Datatype.
-        * @property AUDIO
-        * @type number
-        * @static
-        * @final
-        * @default 3
-        * @public
-        */
-        public static AUDIO: number = 3;
-
-
-        /**
-        * A STATIC property that has the number associated with the JSON Datatype.
-        * @property JSON
-        * @type number
-        * @static
-        * @final
-        * @default 4
-        * @public
-        */
-        public static JSON: number = 4;
-
-
-        /**
-        * A STATIC property that has the number associated with the XML Datatype.
-        * @property XML
-        * @type number
-        * @static
-        * @final
-        * @default 5
-        * @public
-        */
-        public static XML: number = 5;
-
-
-        /**
-        * A STATIC property that has the number associated with the BINARY_DATA Datatype.
-        * @property BINARY_DATA
-        * @type number
-        * @static
-        * @final
-        * @default 6
-        * @public
-        */
-        public static BINARY_DATA: number = 6;
-
-
-        /**
-        * A STATIC property that has the number associated with the TEXT_DATA Datatype.
-        * @property TEXT_DATA
-        * @type number
-        * @static
-        * @final
-        * @default 7
-        * @public
-        */
-        public static TEXT_DATA: number = 7;
-
-        /**
-        * 
-        * @property UNKNOWN
-        * @type number
-        * @static
-        * @final 
-        * @default 8
-        * @public
-        */
-        public static UNKNOWN: number = 8;
-
-        /**
-        * An indication of if this file is texture. This is READ ONLY.
-        * @property isTexture
-        * @type boolean
-        * @readOnly
-        * @public
-        */
-        public get isTexture(): boolean {
-            return (Kiwi.Files.TextureFile.prototype.objType.call(this) === this.objType());
-        }
-
-
-        /**
-        * An indication of if this file is a piece of audio. This is READ ONLY.
-        * @property isAudio
-        * @type boolean
-        * @readOnly
-        * @public
-        */
-        public get isAudio(): boolean {
-            return (Kiwi.Files.AudioFile.prototype.objType.call(this) === this.objType());
-        }
-
-
-        /**
-        * An indication of if this file is data. This is READ ONLY.
-        * @property isData
-        * @type boolean
-        * @readOnly
-        * @public
-        */
-        public get isData(): boolean {
-            return (Kiwi.Files.DataFile.prototype.objType.call(this) === this.objType());
-        }
-
-        /**
-        * ------------------
-        * Clean Up
-        * ------------------
-        **/
-
-        /**
-        * Destroys all external object references on this object.
-        * @method destroy
-        * @since 1.2.0
-        * @public
-        */
-        public destroy() {
-            
-            if (this.fileStore) {
-                this.fileStore.removeFile(this.key);
-            }
-
-            this.onComplete.dispose();
-            this.onProgress.dispose();
-
-            delete this.fileStore;
-            delete this._xhr;
-            delete this.data;
-            delete this.buffer;
-            delete this.game;
-            delete this.error;
-            delete this.headCompleteCallback;
-            delete this.headCompleteContext;
-            delete this.onComplete;
-            delete this.onProgress;
-            delete this.ownerState;
-
-        }
-
-        /**
-        * ------------------
-        * Deprecated
-        * ------------------
-        **/
-
-        /**
-        * The name of the file being loaded.
-        * @property fileName
-        * @type String
-        * @deprecated Use &#x60;name&#x60;. Deprecated as of 1.2.0
-    	* @public
-        */
-        public get fileName(): string {
-            return this.name;
-        }
-        public set fileName(val:string) {
-            this.name = val;
-        }
-
-        /**
-        * The location of where the file is placed without the file itself (So without the files name).
-        * Example: If the file you are load is located at &#x27;images/awesomeImage.png&#x27; then the filepath will be &#x27;images/&#x27;
-        * @property filePath
-        * @type String
-        * @deprecated Use &#x60;path&#x60;. Deprecated as of 1.2.0
-        * @public
-        */
-        public get filePath(): string {
-            return this.path;
-        }
-        public set filePath(val: string) {
-            this.path = val;
-        }
-
-        /**
-        * The location of where the file is placed without the file itself (So without the files name).
-        * Example: If the file you are load is located at &#x27;images/awesomeImage.png&#x27; then the filepath will be &#x27;images/&#x27;
-        * @property filePath
-        * @type String
-        * @deprecated Use &#x60;extension&#x60;. Deprecated as of 1.2.0
-        * @public
-        */
-        public get fileExtension(): string {
-            return this.extension;
-        }
-        public set fileExtension(val: string) {
-            this.extension = val;
-        }
-
-        /**
-        * The full filepath including the file itself.
-        * @property fileURL
-        * @type String
-        * @deprecated Use &#x60;URL&#x60;. Deprecated as of 1.2.0
-        * @public
-    	*/
-        public get fileURL(): string {
-            return this.URL;
-        }
-        public set fileURL(val: string) {
-            this.URL = val;
-        }
-
-        /**
-        * The type of file that is being loaded.
-        * Is only ever given a value when used with the XHR method of loading OR if you use &#x27;getFileDetails&#x27; before hand.
-        * The value is based off of the &#x27;Content-Type&#x27; of the XHR&#x27;s response header returns.
-        * @property fileType
-        * @type String
-        * @deprecated Use &#x60;type&#x60;. Deprecated as of 1.2.0
-        * @public
-        */
-        public get fileType():string {
-            return this.type;
-        }
-        public set fileType(val: string) {
-            this.type = val;
-        }
-
-        /**
-        * The size of the file that was/is being loaded. 
-        * Only has a value when the file was loaded by the XHR method OR you request the file information before hand using &#x27;getFileDetails&#x27;.
-        * @property fileSize
-        * @type Number
-        * @deprecated Use &#x60;size&#x60;. Deprecated as of 1.2.0
-        * @public
-        */
-        public get fileSize(): number {
-            return this.size;
-        }
-        public set fileSize(val: number) {
-            this.size = val;
-        }
-        
-
-        /**
-        * A method that is to be executed when this file has finished loading. 
-        * @property onCompleteCallback
-        * @type Any
-        * @default null
-        * @deprecated Use &#x60;onComplete&#x60;. Deprecated as of 1.2.0
-        * @public
-        */
-        //public onCompleteCallback: any = null;
-
-
-        /**
-        * A method that is to be executed while this file is loading.
-        * @property onProgressCallback
-        * @type Any
-        * @default null
-        * @deprecated Use &#x60;onProgress&#x60;. Deprecated as of 1.2.0
-        * @public
-        */
-        //public onProgressCallback: any = null;
-
-
-        /**
-        * The status of this file that is being loaded. 
-        * Only used/has a value when the file was/is being loaded by the XHR method.
-        * @property status
-        * @type Number
-        * @default 0
-        * @deprecated Deprecated as of 1.2.0
-        * @public
-        */
-        public status: number = 0;
-
-
-        /**
-        * The status piece of text that the XHR returns.
-        * @property statusText
-        * @type String
-        * @default &#x27;&#x27;
-        * @deprecated Deprecated as of 1.2.0
-        * @public
-        */
-        public statusText: string = &#x27;&#x27;;
-
-        /**
-        * The ready state of the XHR loader whilst loading.
-        * @property readyState
-        * @type Number
-        * @default 0
-        * @deprecated Deprecated as of 1.2.0
-        * @public
-        */
-        public readyState: number = 0;
-
-        /**
-        * If this file has timeout when it was loading. 
-        * @property hasTimedOut
-        * @type boolean
-        * @default false
-        * @deprecated Deprecated as of 1.2.0
-        * @public
-        */
-        public hasTimedOut: boolean = false;
-
-        /**
-        * If the file timed out or not.
-        * @property timedOut
-        * @type Number
-        * @default 0
-        * @deprecated Deprecated as of 1.2.0
-        * @public
-        */
-        public timedOut: number = 0;
-
-        /**
-        * The response that is given by the XHR loader when loading is complete.
-        * @property buffer
-        * @type Any
-        * @deprecated Use &#x27;data&#x27; instead. Deprecated as of 1.2.0
-        * @public
-        */
-        public buffer: any;
-
-
-        /**
-        * Attempts to make the file send a XHR HEAD request to get information about the file that is going to be downloaded.
-        * This is particularly useful when you are wanting to check how large a file is before loading all of the content. 
-        * @method getFileDetails
-        * @param [callback=null] {Any} The callback to send this FileInfo object to.
-        * @param [maxLoadAttempts=1] {number} The maximum amount of load attempts. Only set this if it is different from the default.
-        * @param [timeout=this.timeOutDelay] {number} The timeout delay. By default this is the same as the timeout delay property set on this file.
-        * @deprecated Use &#x27;loadDetails&#x27; instead. Deprecated as of 1.2.0
-        * @private
-        */
-        public getFileDetails(callback: any = null, maxLoadAttempts?: number, timeout: number = null) {
-            
-            if (timeout) this.timeOutDelay = timeout;
-
-            this.loadDetails(callback, null);
-        }
-
-    }
+
+	/**
+	* Base class which handles the loading of an external data file an xhr. 
+	* TextureFile, AudioFile contain fallback loading via tags and all extended Files contain methods for processing the files.
+	*
+	* Also can contain information about the file (like file size, last modified, e.t.c.)
+	* Uses an object literal in its constructor since 1.2 (which is preferred), but also contains previous construction support.
+	* 
+	* @class File
+	* @namespace Kiwi.Files
+	* @constructor
+	* @param game {Kiwi.Game} The game that this file is for
+	* @param params {Object} Options for this file.
+	*   @param params.key {String} User defined name for this file. This would be how the user would access it in the file store. 
+	*   @param params.url {String} Location of the file to be loaded.
+	*   @param {Object} [params.metadata={}] Any metadata to be associated with the file. 
+	*   @param [params.state=null] {Kiwi.State} The state that this file belongs to. Used for defining global assets vs local assets.
+	*   @param [params.fileStore=null] {Kiwi.Files.FileStore} The filestore that this file should be save in automatically when loaded.
+	*   @param [params.type=UNKNOWN] {Number} The type of file this is. 
+	*   @param [params.tags] {Array} Any tags to be associated with this file.
+	* @return {Kiwi.Files.File} 
+	*
+	*/
+	export class File {
+
+		constructor(game: Kiwi.Game, params:any) {
+
+			this.game = game;
+
+			this.onComplete = new Kiwi.Signal;
+
+			this.onProgress = new Kiwi.Signal;
+
+			if (Kiwi.Utils.Common.isNumeric(params)) {
+				//Deprecate
+				this._parseParamsOld(params, arguments[2], arguments[3], arguments[4], arguments[5]);
+
+			} else {
+
+				this.key = params.key;
+
+				this._assignFileDetails(params.url);
+
+				this.parseParams(params);
+
+			}
+
+
+		}
+
+		/**
+		* Assigns properties and variables for the constructor as in pre 1.2 Kiwi versions. 
+		* 
+		* @method _parseParamsOld
+		* @since 1.2.0
+		* @param dataType {Number} The type of file that is being loaded. For this you can use the STATIC properties that are located on this class for quick code completion.
+		* @param path {String} The location of the file that is to be loaded.
+		* @param [name=&#x27;&#x27;] {String} A name for the file. If no name is specified then the files name will be used.
+		* @param [saveToFileStore=true] {Boolean} If the file should be saved on the file store or not.
+		* @param [storeAsGlobal=true] {Boolean} If this file should be stored as a global file, or if it should be destroyed when this state gets switched out.
+		* @private
+		*/
+		private _parseParamsOld(dataType: number, url: string, name: string = &#x27;&#x27;, saveToFileStore: boolean = true, storeAsGlobal: boolean = true) {
+
+			this.dataType = dataType;
+
+			this._assignFileDetails(url);
+
+			if (saveToFileStore) {
+				this.fileStore = this.game.fileStore;
+			}
+
+			if (this.game.states.current &amp;&amp; !storeAsGlobal) {
+				this.ownerState = this.game.states.current;
+			}
+
+		}
+
+
+		/**
+		* Sets properties for this instance based on an object literal passed. Used when the class is being created.
+		*
+		* @method parseParams
+		* @since 1.2.0
+		* @param [params] {Object}
+		*   @param [params.metadata={}] {Object} Any metadata to be associated with the file. 
+		*   @param [params.state=null] {Kiwi.State} The state that this file belongs to. Used for defining global assets vs local assets.
+		*   @param [params.fileStore=null] {Kiwi.Files.FileStore} The filestore that this file should be save in automatically when loaded.
+		*   @param [params.type=UNKNOWN] {Number} The type of file this is. 
+		*   @param [params.tags] {Array} Any tags to be associated with this file.
+		* @protected 
+		*/
+		protected parseParams(params: any) {
+
+			this.fileStore = params.fileStore || null;
+			this.ownerState = params.state || null;
+			this.metadata = params.metadata || {};
+
+			if (Kiwi.Utils.Common.isUndefined(params.type)) {
+				this.dataType = File.UNKNOWN;
+			} else {
+				this.dataType = params.type;
+			}
+
+			if (params.tags &amp;&amp; Kiwi.Utils.Common.isArray(params.tags)) {
+
+				for (var i = 0; i &lt; params.tags.length; i++) {
+					this.addTag(params.tags[i]);
+				}
+
+			}
+
+		}
+
+		/**
+		* Gets the file details from the URL passed. Name, extension, and path are extracted.
+		*
+		* @method _assignFileDetails
+		* @param url {String}
+		* @private
+		* @since 1.2.0
+		*/
+		private _assignFileDetails( url:string ) {
+
+			this.URL = url;
+
+			if ( url.lastIndexOf(&#x27;/&#x27;) &gt; -1) {
+				this.name = url.substr( url.lastIndexOf(&#x27;/&#x27;) + 1 );
+				this.path = url.substr(0, url.lastIndexOf(&#x27;/&#x27;) + 1);
+
+			} else {
+				this.path = &#x27;&#x27;;
+				this.name = url;
+
+			}
+			
+			//  Not safe if there is a query string after the file extension
+			this.extension = url.substr( url.lastIndexOf(&#x27;.&#x27;) + 1).toLowerCase();
+
+		}
+
+
+		/**
+		* Returns the type of this object
+		* @method objType
+		* @return {String} &quot;File&quot;
+		* @public
+		*/
+		public objType() {
+			return &quot;File&quot;;
+		}
+
+		/**
+		* The game that this file belongs to.
+		* @property game
+		* @type Kiwi.Game
+		* @since 1.2.0
+		* @public
+		*/
+		public game: Kiwi.Game;
+
+
+		/**
+		* ---------------
+		* Generic Properties 
+		* ---------------
+		**/
+
+		/**
+		* Indicates if this file can be loaded in parallel to other files. 
+		* This is usually only used files are using the tag loaders and not XHR.
+		* 
+		* @property _loadInParallel
+		* @type Boolean
+		* @default false
+		* @since 1.2.0
+		* @private
+		*/
+		protected _loadInParallel: boolean = false;
+
+		/**
+		* READ ONLY: Indicates if this file can be loaded in parallel to other files. 
+		* This is usually only used files are using the tag loaders and not XHR.
+		* 
+		* @property loadInParallel
+		* @type Boolean
+		* @default false
+		* @readOnly
+		* @since 1.2.0
+		* @private
+		*/
+		public get loadInParallel(): boolean {
+			return this._loadInParallel;
+		}
+
+		/**
+		* The filestore this file should be added to when it has loaded. 
+		* This can be replaced with a custom one if wanted.
+		* 
+		* @property fileStore
+		* @type Kiwi.Files.FileStore
+		* @since 1.2.0
+		* @public
+		*/
+		public fileStore: Kiwi.Files.FileStore;
+
+		/**
+		* If this file is using tag loading instead of the XHR method. 
+		* Only used by extended classes
+		* 
+		* @property useTagLoader
+		* @type Boolean
+		* @since 1.2.0
+		* @protected
+		*/
+		protected useTagLoader: boolean = false;
+
+		/**
+		* The &#x27;key&#x27; is the user defined name and the users way of accessing this file once loaded.
+		* @property key
+		* @type String
+		* @public
+		*/
+		public key: string;
+
+		/**
+		* A dictionary, stores any information relating to this file.
+		* Used when loading images that are to be used as a spritesheet or texture atlas.
+		* @property data
+		* @type Any
+		* @public
+		*/
+		public metadata: any;
+
+		/**
+		* Holds the type of data that is being loaded. 
+		* This should be used with the STATIC properties that hold the various datatypes that can be loaded.
+		*
+		* @property dataType
+		* @type String
+		* @public
+		*/
+		public dataType: number;
+
+
+		/**
+		* ---------------
+		* File Information
+		* ---------------
+		*/
+
+		/**
+		* The name of the file being loaded.
+		*
+		* @property name
+		* @type String
+		* @since 1.2.0
+		* @public
+		*/
+		public name: string;
+
+		/**
+		* The location of where the file is placed without the file itself (So without the files name).
+		* Example: If the file you are load is located at &#x27;images/awesomeImage.png&#x27; then the filepath will be &#x27;images/&#x27;
+		*
+		* @property path
+		* @type String
+		* @since 1.2.0
+		* @public
+		*/
+		public path: string;
+
+		/**
+		* The extension of the file that is being loaded.
+		* This is based upon what the file path that the developer specifies.
+		*
+		* @property extension
+		* @type String
+		* @since 1.2.0
+		* @public
+		*/
+		public extension: string;
+
+		/**
+		* The full filepath including the file itself.
+		*
+		* @property URL
+		* @type String
+		* @since 1.2.0
+		* @public
+		*/
+		public URL: string;
+
+		/**
+		* The type of file that is being loaded.
+		* Is only ever given a value when used with the XHR method of loading OR if you use &#x27;loadDetails&#x27; before hand.
+		* The value is based off of the &#x27;Content-Type&#x27; of the XHR&#x27;s response header returns.
+		*
+		* @property type
+		* @type String
+		* @public
+		*/
+		public type: string;
+
+		/**
+		* The size of the file that was/is being loaded. 
+		* Only has a value when the file was loaded by the XHR method OR you request the file information beforehand using &#x27;loadDetails&#x27;.
+		*
+		* @property size
+		* @type Number
+		* @default 0
+		* @since 1.2.0
+		* @public
+		*/
+		public size: number = 0;
+
+		/**
+		* ---------------
+		* Callbacks
+		* ---------------
+		*/
+
+		/**
+		* Signal which dispatches events when the file has successfully loaded. 
+		* 
+		* @property onComplete
+		* @type Kiwi.Signal
+		* @since 1.2.0
+		* @public
+		*/
+		public onComplete: Kiwi.Signal;
+
+		/**
+		* Signal which dispatches events when the file is loading. 
+		* Not guarenteed to dispatch events as it depends on the method of loading being performed
+		* 
+		* @property onProgress
+		* @type Kiwi.Signal
+		* @since 1.2.0
+		* @public
+		*/
+		public onProgress: Kiwi.Signal;
+
+
+		/**
+		* ---------------
+		* Loading
+		* ---------------
+		**/
+
+		/**
+		* The particular piece of data that the developer wanted loaded. This is in a format that is based upon the datatype passed.
+		* @property data
+		* @type Any
+		* @public
+		*/
+		public data: any;
+
+		/**
+		* The number of milliseconds that the XHR should wait before timing out.
+		* Set this to NULL if you want it to not timeout.
+		*
+		* @property timeOutDelay
+		* @type Number
+		* @default 4000
+		* @public
+		*/
+		public timeOutDelay: number = Kiwi.Files.File.TIMEOUT_DELAY;
+
+		/**
+		* The default number of milliseconds that the XHR should wait before timing out.
+		* Set this to NULL if you want it to not timeout.
+		*
+		* @property TIMEOUT_DELAY
+		* @type Number
+		* @static
+		* @since 1.2.0
+		* @public
+		*/
+		public static TIMEOUT_DELAY: number = 4000;
+
+		/**
+		* The number of attempts at loading there have currently been at loading the file.
+		* This is only used with XHR methods of loading.
+		* @property attemptCounter
+		* @type Number
+		* @protected
+		*/
+		protected attemptCounter: number = 0;
+
+		/**
+		* The maximum attempts at loading the file that there is allowed.
+		* @property maxLoadAttempts
+		* @type Number
+		* @default 2
+		* @public
+		*/
+		public maxLoadAttempts: number = Kiwi.Files.File.MAX_LOAD_ATTEMPTS;
+
+		/**
+		* The default maximum attempts at loading the file that there is allowed.
+		* @property MAX_LOAD_ATTEMPTS
+		* @type Number
+		* @default 2
+		* @static
+		* @since 1.2.0
+		* @public
+		*/
+		public static MAX_LOAD_ATTEMPTS: number = 2;
+
+		/**
+		* Starts the loading process for this file. 
+		* Passing parameters to this method has been deprecated and only exists for backwards compatibility.
+		* 
+		* @method load
+		* @public
+		*/
+		public load(onCompleteCallback?: any, onProgressCallback?: any, customFileStore?: Kiwi.Files.FileStore, maxLoadAttempts?: number, timeout?: number) {
+
+			//Not currently loading?
+			if (this.loading) {
+				Kiwi.Log.error(&#x27;Kiwi.Files.File: File loading is in progress. Cannot be told to load again.&#x27;, &#x27;#loading&#x27;);
+				return;
+			}
+
+			Kiwi.Log.log(&quot;Kiwi.Files.File: Starting to load &#x27;&quot; + this.name + &quot;&#x27;&quot;, &#x27;#file&#x27;, &#x27;#loading&#x27;);
+
+			//Set the variables based on the parameters passed
+			//To be deprecated
+			if (onCompleteCallback) this.onComplete.add( onCompleteCallback );
+			if (onProgressCallback) this.onProgress.add( onProgressCallback );
+			if (customFileStore) this.fileStore = customFileStore;
+			if (typeof maxLoadAttempts !== &quot;undefined&quot;) this.maxLoadAttempts = maxLoadAttempts;
+			if (typeof timeout !== &quot;undefined&quot;) this.timeOutDelay = timeout;
+
+			//Start Loading!!!
+			this._start();
+			this._load();
+		}
+
+
+		/**
+		* Increments the counter, and calls the approprate loading method.
+		* @method _load
+		* @since 1.2.0
+		* @protected
+		*/
+		protected _load() {
+			this.attemptCounter++;
+			this.xhrLoader( &#x27;GET&#x27;, &#x27;text&#x27; );
+		}
+
+
+		/**
+		* Should be called by the loading method. Dispatches the &#x27;onProgress&#x27; callback.
+		* @method loadProgress
+		* @since 1.2.0
+		* @protected
+		*/
+		protected loadProgress() {
+			this.onProgress.dispatch(this);
+		}
+
+
+		/**
+		* Called by the loading methods when the file has been loaded and successfully processed.
+		* Dispatches the &#x27;onComplete&#x27; callback and sets the appropriate properties.
+		* @method loadSuccess
+		* @since 1.2.0
+		* @protected 
+		*/ 
+		protected loadSuccess() {
+
+			//If already completed skip
+			if (this.complete) {
+				return;
+			}
+
+			this.success = true;
+			this.hasError = false;
+			this._stop();
+
+			if (this.fileStore) {
+				this.fileStore.addFile(this.key, this);
+			}
+
+			this.onComplete.dispatch(this);
+
+		}
+		
+		/**
+		* Executed when the loading process fails. 
+		* This could be for any reason
+		* 
+		* @method loadError
+		* @param error {Any} The event / reason for the file to not be loaded.
+		* @since 1.2.0
+		* @protected 
+		*/ 
+		protected loadError(error: any) {
+
+			//Try again?
+			if (this.attemptCounter &gt;= this.maxLoadAttempts) {
+				//Failed
+				Kiwi.Log.log(&quot;Kiwi.Files.File: Failed to load file &#x27;&quot; + this.name + &quot;&#x27;. Trying Again&quot;, &#x27;#loading&#x27;);
+				this.hasError = true;
+				this.success = false;
+				this.error = error;
+				this._stop();
+				this.onComplete.dispatch(this);
+
+			} else {
+				Kiwi.Log.log(&quot;Kiwi.Files.File: Failed to load file &#x27;&quot; + this.name + &quot;&#x27;&quot;, &#x27;#loading&#x27;);
+				//Try Again
+				this._load();
+			}
+
+		}
+
+		/**
+		* ---------------
+		* XHR Loading 
+		* ---------------
+		**/
+
+		/**
+		* Sets up a XHR loader based on the properties of this file and parameters passed.
+		* 
+		* @method xhrLoader
+		* @param [method=&quot;GET&quot;] {String} The method this request should be made in.
+		* @param [responseType=&quot;text&quot;] {String} The type of response we are expecting.
+		* @param [timeoutDelay] {Number} 
+		* @protected
+		*/
+		protected xhrLoader(method: string = &#x27;GET&#x27;, responseType: string = &#x27;text&#x27;, timeoutDelay: number = this.timeOutDelay) {
+
+			this._xhr = new XMLHttpRequest();
+			this._xhr.open(&#x27;GET&#x27;, this.URL, true);
+
+			if (timeoutDelay !== null) {
+				this._xhr.timeout = timeoutDelay;
+			}
+
+			this._xhr.responseType = responseType;
+
+			this._xhr.onload = (event) =&gt; this.xhrOnLoad(event);
+			this._xhr.onerror = (event) =&gt; this.loadError(event);
+			this._xhr.onprogress = (event) =&gt; this.xhrOnProgress(event);
+
+			//Events to deprecate
+			this._xhr.onreadystatechange = (event) =&gt; function () {
+				this.readyState = this._xhr.readyState;
+			};
+
+			this._xhr.onloadstart = (event) =&gt; function (event) {
+				this.timeStarted = event.timeStamp;
+				this.lastProgress = event.timeStamp;
+			};
+
+			this._xhr.ontimeout = (event) =&gt; function (event) {
+				this.hasTimedOut = true;
+			};
+
+			this._xhr.send();
+
+		}
+
+		/**
+		* Progress event fired whilst the file is loading via XHR.
+		* @method xhrOnProgress
+		* @param event {Any}
+		* @protected
+		*/
+		protected xhrOnProgress(event) {
+
+			this.bytesLoaded = parseInt(event.loaded);
+			this.bytesTotal = parseInt(event.total);
+			this.percentLoaded = Math.round((this.bytesLoaded / this.bytesTotal) * 100);
+
+			this.onProgress.dispatch(this);
+		}
+
+		/**
+		* Fired when the file has been loaded. 
+		* Checks that the response contains information before marking it as a success.
+		* 
+		* @method xhrOnLoad
+		* @param event {Any}
+		* @protected
+		*/
+		protected xhrOnLoad(event) {
+
+			//Deprecate
+			this.status = this._xhr.status;
+			this.statusText = this._xhr.statusText;
+
+			// Easiest to just see if the response isn&#x27;t null, and thus has data or not.
+			if (this._xhr.response) {
+				this._getXhrHeaderInfo();
+				this.buffer = this._xhr.response; //Deprecate
+				this.processXhr(this._xhr.response);
+
+			} else {
+				this.loadError(event);
+
+			}
+		}
+
+		/**
+		* Contains the logic for processing the information retrieved via XHR.
+		* Assigns the data property. 
+		* This method is also in charge of calling &#x27;loadSuccess&#x27; (or &#x27;loadError&#x27;) when processing is complete. 
+		* 
+		* @method processXhr
+		* @param response 
+		* @protected
+		*/
+		protected processXhr( response:any ) {
+			this.data = response;
+			this.loadSuccess();
+		}
+
+		/**
+		* The XMLHttpRequest object. This only has a value if the xhr method of load is being used, otherwise this is null.
+		* @property _xhr
+		* @type XMLHttpRequest
+		* @protected
+		*/
+		protected _xhr: XMLHttpRequest;
+		
+		/**
+		* -----------------
+		* Loading Status
+		* -----------------
+		**/
+
+		/**
+		* The time at which the loading started. 
+		* @property timeStarted
+		* @type Number
+		* @default 0
+		* @public
+		*/
+		public timeStarted: number = 0;
+
+		/**
+		* The time at which progress in loading the file was last occurred.
+		* Only contains a value when using XHR methods of loading.
+		* @property lastProgress
+		* @type Number
+		* @public
+		*/
+		public lastProgress: number = 0;
+
+		/**
+		* The time at which the load finished.
+		* @property timeFinished
+		* @type Number
+		* @default 0
+		* @public
+		*/
+		public timeFinished: number = 0;
+
+
+		/**
+		* The duration or how long it took to load the file. In milliseconds. 
+		* @property duration
+		* @type Number
+		* @default 0
+		* @public
+		*/
+		public duration: number = 0;
+
+
+		/**
+		* Is executed when this file starts loading. 
+		* Gets the time and resets properties used in file loading.
+		* @method _start
+		* @private
+		*/
+		private _start() {
+
+			this.attemptCounter = 0;
+			this.loading = true;
+			this.timeStarted = Date.now();
+			this.percentLoaded = 0;
+
+		}
+
+
+		/**
+		* Is executed when this file stops loading. 
+		* @method _stop
+		* @private
+		*/
+		private _stop() {
+
+			this.loading = false;
+			this.complete = true;
+			this.percentLoaded = 100;
+			this.timeFinished = Date.now();
+			this.duration = this.timeFinished - this.timeStarted;
+
+		}
+
+		/**
+		* If file loading failed or encountered an error and so was not laoded
+		* @property hasError
+		* @type boolean
+		* @default false
+		* @public
+		*/
+		public hasError: boolean = false;
+
+		/**
+		* Holds the error (if there was one) when loading the file.
+		* @property error
+		* @type Any
+		* @public
+		*/
+		public error: any;
+
+		/**
+		* If loading was successful or not. 
+		* @property success
+		* @type boolean
+		* @public
+		*/
+		public success: boolean = false;
+
+		/**
+		* Indication if the file is currently being loaded or not.
+		* @property loading
+		* @type boolean
+		* @public 
+		*/
+		public loading: boolean = false;
+
+		/**
+		* Indicates if the file has attempted to load.
+		* This is regardless of whether it was a success or not.
+		* @property complete
+		* @type boolean
+		* @default false
+		* @public
+		*/
+		public complete: boolean = false;
+
+		/**
+		* The amount of percent loaded the file is. This is out of 100.
+		* @property percentLoaded
+		* @type Number
+		* @public
+		*/
+		public percentLoaded: number = 0;
+
+		/**
+		* The number of bytes that have currently been loaded. 
+		* Useful when wanting to know exactly how much data has been transferred.
+		* Only has a value when using the XHR method of loading.
+		* 
+		* @property bytesLoaded
+		* @type Number
+		* @default 0
+		* @public
+		*/
+		public bytesLoaded: number = 0;
+
+
+		/**
+		* The total number of bytes that the file consists off.
+		* Only has a value when using the XHR method of loading 
+		* or you are getting the file details before hand.
+		*
+		* @property bytesTotal
+		* @type Number
+		* @default 0
+		* @public
+		*/
+		public bytesTotal: number = 0;
+
+		/**
+		* --------------------
+		* XHR Header Information
+		* --------------------
+		**/
+
+		/**
+		* The callback method to be executed when the file details have been retrieved.
+		* @property headCompleteCallback
+		* @type Any
+		* @since 1.2.0
+		* @private
+		*/
+		private headCompleteCallback: any;
+
+		/**
+		* The context the &#x27;headCompleteCallback&#x27; should be executed in..
+		* The callback is the following arguments. 
+		* 1. If the details were recieved
+		* 
+		* @property headCompleteContext
+		* @type Any
+		* @since 1.2.0
+		* @private
+		*/
+		private headCompleteContext: any;
+
+		/**
+		* An indication of whether this files information has been retrieved or not.
+		* @property detailsReceived
+		* @type boolean
+		* @default false
+		* @since 1.2.0
+		* @public
+		*/
+		public detailsReceived:boolean = false;
+
+		/**
+		* Makes a XHR HEAD request to get information about the file that is going to be downloaded.
+		* This is particularly useful when you are wanting to check how large a file is before loading all of the content. 
+		* 
+		* @method loadDetails
+		* @param [callback] {Any}
+		* @param [context] {Any}
+		* @return {Boolean} If the request was made
+		* @since 1.2.0
+		* @public
+		*/
+		public loadDetails(callback:any=null, context:any=null) {
+
+			//Can&#x27;t continue if regular loading is progressing.
+			if ( this.loading ) {
+				Kiwi.Log.error(&#x27;Kiwi.Files.File: Cannot get the file details whilst the file is already loading&#x27;);
+				return false;
+			}
+
+			if (callback) this.headCompleteCallback = callback;
+			if (context) this.headCompleteContext = context;
+
+			this.xhrHeadRequest();
+			return true;
+		}
+
+		/**
+		* Retrieves the HEAD information from the XHR. 
+		* This method is used for both &#x27;load&#x27; and &#x27;loadDetails&#x27; methods.
+		* 
+		* @method _getXhrHeaderInfo
+		* @since 1.2.0
+		* @private
+		*/
+		private _getXhrHeaderInfo() {
+
+			if (!this._xhr) {
+				return;
+			}
+
+			this.status = this._xhr.status;
+			this.statusText = this._xhr.statusText;
+
+			//Get the file information...
+			this.type = this._xhr.getResponseHeader(&#x27;Content-Type&#x27;);
+			this.size = parseInt( this._xhr.getResponseHeader(&#x27;Content-Length&#x27;) );
+			this.lastModified = this._xhr.getResponseHeader(&#x27;Last-Modified&#x27;);
+			this.ETag = this._xhr.getResponseHeader(&#x27;ETag&#x27;);
+			this.detailsReceived = true;
+		}
+
+		/**
+		* Sets up a XMLHttpRequest object and sends a HEAD request.
+		* @method xhrHeadRequest
+		* @since 1.2.0
+		* @private
+		*/
+		private xhrHeadRequest() {
+
+			this._xhr = new XMLHttpRequest();
+			this._xhr.open(&#x27;HEAD&#x27;, this.fileURL, true);
+			if (this.timeOutDelay !== null) this._xhr.timeout = this.timeOutDelay;
+
+			this._xhr.onload = (event) =&gt; this.xhrHeadOnLoad(event);
+			this._xhr.onerror = (event) =&gt; this.xhrHeadOnError(event);
+
+			this._xhr.send();
+		}
+
+		/**
+		* Executed when a xhr head request fails
+		* @method xhrHeadOnError
+		* @param event {Any}
+		* @private
+		*/
+		private xhrHeadOnError(event) {
+
+			if (this.headCompleteCallback) {
+				this.headCompleteCallback.call(this.headCompleteContext, false);
+			}
+
+		}
+
+		/**
+		* Executed when a XHR head request has loaded.
+		* Checks that the status of the request is 200 before classifying it as a success.
+		* @method xhrHeadOnLoad
+		* @param event {Any}
+		* @private
+		*/
+		private xhrHeadOnLoad(event) {
+
+			if (this._xhr.status === 200) {
+				this._getXhrHeaderInfo();
+
+				if (this.headCompleteCallback) {
+					this.headCompleteCallback.call(this.headCompleteContext, true);
+				}
+			} else {
+				this.xhrHeadOnError(null);
+			}
+
+		}
+
+		/**
+		* --------------------
+		* MISC
+		* --------------------
+		**/
+
+		/**
+		* The Entity Tag that is assigned to the file. O
+		* Only has a value when either using the XHR loader OR when requesting the file details.
+		* @property ETag
+		* @type String
+		* @public
+		*/
+		public ETag: string = &#x27;&#x27;;
+
+		/**
+		* The last date/time that this file was last modified. 
+		* Only has a value when using the XHR method of loading OR when requesting the file details.
+		* @property lastModified
+		* @type String
+		* @default &#x27;&#x27;
+		* @public
+		*/
+		public lastModified: string = &#x27;&#x27;; 
+
+
+		/**
+		* --------------------
+		* Tagging + State
+		* --------------------
+		**/
+
+		/**
+		* The state that added the entity - or null if it was added as global
+		* @property ownerState
+		* @type Kiwi.State
+		* @public
+		*/
+		public ownerState: Kiwi.State;
+
+
+		/**
+		* Any tags that are on this file. This can be used to grab files/objects on the whole game that have these particular tag.
+		* @property _tags
+		* @type String[]
+		* @default []
+		* @private
+		*/
+		private _tags: string[];
+
+
+		/**
+		* Adds a new tag to this file. 
+		* @method addTag
+		* @param tag {String} The tag that you would like to add
+		* @public
+		*/
+		public addTag(tag: string) {
+			if (this._tags.indexOf(tag) == -1) {
+				this._tags.push(tag);
+			}
+		}
+
+
+		/**
+		* Removes a tag from this file.
+		* @method removeTag
+		* @param tag {String} The tag that is to be removed.
+		* @public
+		*/
+		public removeTag(tag: string) {
+			var index: number = this._tags.indexOf(tag);
+			if (index != -1) {
+				this._tags.splice(index, 1);
+			}
+		}
+
+
+		/**
+		* Checks to see if a tag that is passed exists on this file.
+		* Returns a boolean that is used as a indication of the results. 
+		* True means that the tag exists on this file.
+		*
+		* @method hasTag
+		* @param tag {String} The tag you are checking to see exists.
+		* @return {Boolean} If the tag does exist on this file or not.
+		* @public
+		*/
+		public hasTag(tag: string) {
+			if (this._tags.indexOf(tag) == -1) {
+				return false;
+			}
+			return true;
+
+		}
+
+		/**
+		* -------------------
+		* File Type
+		* -------------------
+		**/
+
+		/**
+		* A STATIC property that has the number associated with the IMAGE Datatype.
+		* @property IMAGE
+		* @type number
+		* @static
+		* @final
+		* @default 0
+		* @public
+		*/
+		public static IMAGE: number = 0;
+
+
+		/**
+		* A STATIC property that has the number associated with the SPRITE_SHEET Datatype.
+		* @property SPRITE_SHEET
+		* @type number
+		* @static
+		* @final
+		* @default 1
+		* @public
+		*/
+		public static SPRITE_SHEET: number = 1;
+
+
+		/**
+		* A STATIC property that has the number associated with the TEXTURE_ATLAS Datatype.
+		* @property TEXTUREATLAS
+		* @type number
+		* @static
+		* @final
+		* @default 2
+		* @public
+		*/
+		public static TEXTURE_ATLAS: number = 2;
+
+
+		/**
+		* A STATIC property that has the number associated with the AUDIO Datatype.
+		* @property AUDIO
+		* @type number
+		* @static
+		* @final
+		* @default 3
+		* @public
+		*/
+		public static AUDIO: number = 3;
+
+
+		/**
+		* A STATIC property that has the number associated with the JSON Datatype.
+		* @property JSON
+		* @type number
+		* @static
+		* @final
+		* @default 4
+		* @public
+		*/
+		public static JSON: number = 4;
+
+
+		/**
+		* A STATIC property that has the number associated with the XML Datatype.
+		* @property XML
+		* @type number
+		* @static
+		* @final
+		* @default 5
+		* @public
+		*/
+		public static XML: number = 5;
+
+
+		/**
+		* A STATIC property that has the number associated with the BINARY_DATA Datatype.
+		* @property BINARY_DATA
+		* @type number
+		* @static
+		* @final
+		* @default 6
+		* @public
+		*/
+		public static BINARY_DATA: number = 6;
+
+
+		/**
+		* A STATIC property that has the number associated with the TEXT_DATA Datatype.
+		* @property TEXT_DATA
+		* @type number
+		* @static
+		* @final
+		* @default 7
+		* @public
+		*/
+		public static TEXT_DATA: number = 7;
+
+		/**
+		* 
+		* @property UNKNOWN
+		* @type number
+		* @static
+		* @final 
+		* @default 8
+		* @public
+		*/
+		public static UNKNOWN: number = 8;
+
+		/**
+		* An indication of if this file is texture. This is READ ONLY.
+		* @property isTexture
+		* @type boolean
+		* @readOnly
+		* @public
+		*/
+		public get isTexture(): boolean {
+			return (Kiwi.Files.TextureFile.prototype.objType.call(this) === this.objType());
+		}
+
+
+		/**
+		* An indication of if this file is a piece of audio. This is READ ONLY.
+		* @property isAudio
+		* @type boolean
+		* @readOnly
+		* @public
+		*/
+		public get isAudio(): boolean {
+			return (Kiwi.Files.AudioFile.prototype.objType.call(this) === this.objType());
+		}
+
+
+		/**
+		* An indication of if this file is data. This is READ ONLY.
+		* @property isData
+		* @type boolean
+		* @readOnly
+		* @public
+		*/
+		public get isData(): boolean {
+			return (Kiwi.Files.DataFile.prototype.objType.call(this) === this.objType());
+		}
+
+		/**
+		* ------------------
+		* Clean Up
+		* ------------------
+		**/
+
+		/**
+		* Destroys all external object references on this object.
+		* @method destroy
+		* @since 1.2.0
+		* @public
+		*/
+		public destroy() {
+			
+			if (this.fileStore) {
+				this.fileStore.removeFile(this.key);
+			}
+
+			this.onComplete.dispose();
+			this.onProgress.dispose();
+
+			delete this.fileStore;
+			delete this._xhr;
+			delete this.data;
+			delete this.buffer;
+			delete this.game;
+			delete this.error;
+			delete this.headCompleteCallback;
+			delete this.headCompleteContext;
+			delete this.onComplete;
+			delete this.onProgress;
+			delete this.ownerState;
+
+		}
+
+		/**
+		* ------------------
+		* Deprecated
+		* ------------------
+		**/
+
+		/**
+		* The name of the file being loaded.
+		* @property fileName
+		* @type String
+		* @deprecated Use &#x60;name&#x60;. Deprecated as of 1.2.0
+		* @public
+		*/
+		public get fileName(): string {
+			return this.name;
+		}
+		public set fileName(val:string) {
+			this.name = val;
+		}
+
+		/**
+		* The location of where the file is placed without the file itself (So without the files name).
+		* Example: If the file you are load is located at &#x27;images/awesomeImage.png&#x27; then the filepath will be &#x27;images/&#x27;
+		* @property filePath
+		* @type String
+		* @deprecated Use &#x60;path&#x60;. Deprecated as of 1.2.0
+		* @public
+		*/
+		public get filePath(): string {
+			return this.path;
+		}
+		public set filePath(val: string) {
+			this.path = val;
+		}
+
+		/**
+		* The location of where the file is placed without the file itself (So without the files name).
+		* Example: If the file you are load is located at &#x27;images/awesomeImage.png&#x27; then the filepath will be &#x27;images/&#x27;
+		* @property filePath
+		* @type String
+		* @deprecated Use &#x60;extension&#x60;. Deprecated as of 1.2.0
+		* @public
+		*/
+		public get fileExtension(): string {
+			return this.extension;
+		}
+		public set fileExtension(val: string) {
+			this.extension = val;
+		}
+
+		/**
+		* The full filepath including the file itself.
+		* @property fileURL
+		* @type String
+		* @deprecated Use &#x60;URL&#x60;. Deprecated as of 1.2.0
+		* @public
+		*/
+		public get fileURL(): string {
+			return this.URL;
+		}
+		public set fileURL(val: string) {
+			this.URL = val;
+		}
+
+		/**
+		* The type of file that is being loaded.
+		* Is only ever given a value when used with the XHR method of loading OR if you use &#x27;getFileDetails&#x27; before hand.
+		* The value is based off of the &#x27;Content-Type&#x27; of the XHR&#x27;s response header returns.
+		* @property fileType
+		* @type String
+		* @deprecated Use &#x60;type&#x60;. Deprecated as of 1.2.0
+		* @public
+		*/
+		public get fileType():string {
+			return this.type;
+		}
+		public set fileType(val: string) {
+			this.type = val;
+		}
+
+		/**
+		* The size of the file that was/is being loaded. 
+		* Only has a value when the file was loaded by the XHR method OR you request the file information before hand using &#x27;getFileDetails&#x27;.
+		* @property fileSize
+		* @type Number
+		* @deprecated Use &#x60;size&#x60;. Deprecated as of 1.2.0
+		* @public
+		*/
+		public get fileSize(): number {
+			return this.size;
+		}
+		public set fileSize(val: number) {
+			this.size = val;
+		}
+		
+
+		/**
+		* A method that is to be executed when this file has finished loading. 
+		* @property onCompleteCallback
+		* @type Any
+		* @default null
+		* @deprecated Use &#x60;onComplete&#x60;. Deprecated as of 1.2.0
+		* @public
+		*/
+		//public onCompleteCallback: any = null;
+
+
+		/**
+		* A method that is to be executed while this file is loading.
+		* @property onProgressCallback
+		* @type Any
+		* @default null
+		* @deprecated Use &#x60;onProgress&#x60;. Deprecated as of 1.2.0
+		* @public
+		*/
+		//public onProgressCallback: any = null;
+
+
+		/**
+		* The status of this file that is being loaded. 
+		* Only used/has a value when the file was/is being loaded by the XHR method.
+		* @property status
+		* @type Number
+		* @default 0
+		* @deprecated Deprecated as of 1.2.0
+		* @public
+		*/
+		public status: number = 0;
+
+
+		/**
+		* The status piece of text that the XHR returns.
+		* @property statusText
+		* @type String
+		* @default &#x27;&#x27;
+		* @deprecated Deprecated as of 1.2.0
+		* @public
+		*/
+		public statusText: string = &#x27;&#x27;;
+
+		/**
+		* The ready state of the XHR loader whilst loading.
+		* @property readyState
+		* @type Number
+		* @default 0
+		* @deprecated Deprecated as of 1.2.0
+		* @public
+		*/
+		public readyState: number = 0;
+
+		/**
+		* If this file has timeout when it was loading. 
+		* @property hasTimedOut
+		* @type boolean
+		* @default false
+		* @deprecated Deprecated as of 1.2.0
+		* @public
+		*/
+		public hasTimedOut: boolean = false;
+
+		/**
+		* If the file timed out or not.
+		* @property timedOut
+		* @type Number
+		* @default 0
+		* @deprecated Deprecated as of 1.2.0
+		* @public
+		*/
+		public timedOut: number = 0;
+
+		/**
+		* The response that is given by the XHR loader when loading is complete.
+		* @property buffer
+		* @type Any
+		* @deprecated Use &#x27;data&#x27; instead. Deprecated as of 1.2.0
+		* @public
+		*/
+		public buffer: any;
+
+
+		/**
+		* Attempts to make the file send a XHR HEAD request to get information about the file that is going to be downloaded.
+		* This is particularly useful when you are wanting to check how large a file is before loading all of the content. 
+		* @method getFileDetails
+		* @param [callback=null] {Any} The callback to send this FileInfo object to.
+		* @param [maxLoadAttempts=1] {number} The maximum amount of load attempts. Only set this if it is different from the default.
+		* @param [timeout=this.timeOutDelay] {number} The timeout delay. By default this is the same as the timeout delay property set on this file.
+		* @deprecated Use &#x27;loadDetails&#x27; instead. Deprecated as of 1.2.0
+		* @private
+		*/
+		public getFileDetails(callback: any = null, maxLoadAttempts?: number, timeout: number = null) {
+			
+			if (timeout) this.timeOutDelay = timeout;
+
+			this.loadDetails(callback, null);
+		}
+
+	}
 
 }
 
diff --git a/docs/files/src_file_FileStore.ts.html b/docs/files/src_file_FileStore.ts.html
index 273c010..4ddff31 100644
--- a/docs/files/src_file_FileStore.ts.html
+++ b/docs/files/src_file_FileStore.ts.html
@@ -373,231 +373,230 @@ <h1 class="file-heading">File: src/file/FileStore.ts</h1>
 
 module Kiwi.Files {
 
-    /**
-    * Holds all of the Files (regardless of the file type) that have been loaded throughout a game/are accessable at a particular point in time. Contains methods for dealing with files. Note: Each time the state is switched the file store will remove all references to files that have not been flagged as global. 
-    * 
-    * @class FileStore
-    * @namespace Kiwi.Files
-    * @constructor
-    * @param game {Kiwi.Game} The game that this FileStore belongs to.
-    * @return {Kiwi.Files.FilesStore}
-    *
-    */
-    export class FileStore {
- 
-        constructor(game: Kiwi.Game) {
-            this._game = game;
-            this._files = {};
-        }
-
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} &quot;FileStore&quot;
-        * @public
-        */
-        public objType() {
-            return &quot;FileStore&quot;;
-        }
-
-        /**
-        * The game that this FileStore belongs to.
-        * @property _game
-        * @type Kiwi.Game
-        * @private
-        */
-        private _game: Kiwi.Game;
-
-        /**
-        * The files that are on this FileStore.
-        * @property _files
-        * @type Object
-        * @private
-        */
-        private _files;
-
-        /**
-        * The number of files that are on the file store.
-        * @property _size
-        * @type Number
-        * @default 0
-        * @private
-        */
-        private _size:number = 0;
-
-        /**
-        * The boot method is executed when the DOM elements needed for this game are ready and thus the game can &#x27;boot&#x27;.
-        * @method boot
-        * @public
-        */
-        public boot() {
-            
-        }
-
-        /** 
-        * Returns a particular file by the key that you specify.
-        * @method getFile
-        * @param key {String} The key of the file that you to get.
-        * @return {Kiwi.Files.File} 
-        * @public
-        */
-        public getFile(key: string): Kiwi.Files.File {
-
-            return this._files[key];
-
-        }
-
-        /**
-        * Returns an object full of files that have a Tag that is associated with it.
-        * @method getFilesByTag
-        * @param tag {String} 
-        * @return {Object} All of the files with that tag.
-        * @public
-        */
-        public getFilesByTag(tag: string): Object {
-
-            var obj = {};
-            for (var file in this._files) {
-                if (this._files[file].hasTag(tag)) {
-                    obj[file] = this._files[file];
-                }
-            }
-            return obj;
-        }
-
-        /**
-        * Removes all of the files by a tag that is specified.
-        * @method removeFilesByTag
-        * @param tag {String}
-        * @return {Number} The number of files that were removed.
-        * @public
-        */
-        public removeFilesByTag(tag: string):number {
-
-            var numberFiles: number = 0;
-            for (var file in this._files) {
-                if (this._files[file].hasTag(tag)) {
-                    this.removeFile(file);
-                    numberFiles++;
-                }
-            }
-            return numberFiles;
-        }
-
-        /**
-        * Returns all of the keys for every file that exist on this FileStore as an array.
-        * @property keys
-        * @type String[]
-        * @public
-        */
-        public get keys(): string[] {
-            var keys: string[] = new Array();
-            for (var key in this._files) {
-                keys.push(key);
-            }
-
-            return keys;
-        }
-
-        /** 
-        * Returns the number of files that are on this FileStore.
-        * @method size
-        * @return {Number} 
-        * @public
-        */
-        public size(): number {
-
-            return this._size;
-
-        }
-
-        /**
-        * Adds a File with a key to the FileStore. If the key that you specify already exists then this method will return false otherwise it should return true if it was added.
-        * @method addFile
-        * @param key {String} A unique key that this file should be accessed by.
-        * @param value {Kiwi.Files.File} The file that you would like to save on the FileStore.
-        * @return {Boolean} If the file was added or not
-        * @public
+	/**
+	* Holds all of the Files (regardless of the file type) that have been loaded throughout a game/are accessable at a particular point in time. Contains methods for dealing with files. Note: Each time the state is switched the file store will remove all references to files that have not been flagged as global. 
+	* 
+	* @class FileStore
+	* @namespace Kiwi.Files
+	* @constructor
+	* @param game {Kiwi.Game} The game that this FileStore belongs to.
+	* @return {Kiwi.Files.FilesStore}
+	*
+	*/
+	export class FileStore {
+
+		constructor(game: Kiwi.Game) {
+			this._game = game;
+			this._files = {};
+		}
+
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} &quot;FileStore&quot;
+		* @public
 		*/
-        public addFile(key: string, value: Kiwi.Files.File): boolean {
+		public objType() {
+			return &quot;FileStore&quot;;
+		}
+
+		/**
+		* The game that this FileStore belongs to.
+		* @property _game
+		* @type Kiwi.Game
+		* @private
+		*/
+		private _game: Kiwi.Game;
+
+		/**
+		* The files that are on this FileStore.
+		* @property _files
+		* @type Object
+		* @private
+		*/
+		private _files;
+
+		/**
+		* The number of files that are on the file store.
+		* @property _size
+		* @type Number
+		* @default 0
+		* @private
+		*/
+		private _size:number = 0;
+
+		/**
+		* The boot method is executed when the DOM elements needed for this game are ready and thus the game can &#x27;boot&#x27;.
+		* @method boot
+		* @public
+		*/
+		public boot() {
+
+		}
 
-            if (!this._files[key])
-            {
-                this._files[key] = value;
-                this._size++;
-                return true;
-            }
+		/** 
+		* Returns a particular file by the key that you specify.
+		* @method getFile
+		* @param key {String} The key of the file that you to get.
+		* @return {Kiwi.Files.File} 
+		* @public
+		*/
+		public getFile(key: string): Kiwi.Files.File {
 
-            return false;
+			return this._files[key];
 
-        }
+		}
 
-        /**
-        * Checks to see if a key that you pass is already being used for another file. Returns true if that key is already in used, false if it isn&#x27;t.
-        * @method exists
-        * @param key {String} The key that you are checking.
-        * @return {Boolean} 
-        * @public
+		/**
+		* Returns an object full of files that have a Tag that is associated with it.
+		* @method getFilesByTag
+		* @param tag {String} 
+		* @return {Object} All of the files with that tag.
+		* @public
+		*/
+		public getFilesByTag(tag: string): Object {
+
+			var obj = {};
+			for (var file in this._files) {
+				if (this._files[file].hasTag(tag)) {
+					obj[file] = this._files[file];
+				}
+			}
+			return obj;
+		}
+
+		/**
+		* Removes all of the files by a tag that is specified.
+		* @method removeFilesByTag
+		* @param tag {String}
+		* @return {Number} The number of files that were removed.
+		* @public
+		*/
+		public removeFilesByTag(tag: string):number {
+
+			var numberFiles: number = 0;
+			for (var file in this._files) {
+				if (this._files[file].hasTag(tag)) {
+					this.removeFile(file);
+					numberFiles++;
+				}
+			}
+			return numberFiles;
+		}
+
+		/**
+		* Returns all of the keys for every file that exist on this FileStore as an array.
+		* @property keys
+		* @type String[]
+		* @public
 		*/
-        public exists(key: string): boolean {
-
-            if (this._files[key])
-            {
-                return true;
-            }
-            else
-            {
-                return false;
-            }
-
-        }
-
-        /**
-        * Removes files on the FileStore that are associated with a particular state.
-        * @method removeStateFiles
-        * @param state {Kiwi.State} 
-        * @public
-        */
-        public removeStateFiles(state: Kiwi.State) {
-            for (var file in this._files) {
-                if (this._files[file].ownerState === state) {
-                    this.removeFile(file);
-                }
-            }
-        }
-
-        /**
-        * Removes a file by the key that is passed. Returns a boolean indicating if a file was removed or not.
-        * Note: Only returns false if that file did not exist in the first place.
-        * @method removeFile
-        * @param key {String} The key of the file you want to remove.
-        * @return {Boolean}
-        * @public
+		public get keys(): string[] {
+			var keys: string[] = new Array();
+			for (var key in this._files) {
+				keys.push(key);
+			}
+
+			return keys;
+		}
+
+		/** 
+		* Returns the number of files that are on this FileStore.
+		* @method size
+		* @return {Number} 
+		* @public
 		*/
-        public removeFile(key: string, destroy:boolean=false): boolean {
+		public size(): number {
 
-            var file = this._files[key];
+			return this._size;
 
-            if (file) {
-                this._files[key] = null;
-                delete this._files[key];
+		}
 
-                if (destroy) {
-                    this._files[key].destroy();
-                }
+		/**
+		* Adds a File with a key to the FileStore. If the key that you specify already exists then this method will return false otherwise it should return true if it was added.
+		* @method addFile
+		* @param key {String} A unique key that this file should be accessed by.
+		* @param value {Kiwi.Files.File} The file that you would like to save on the FileStore.
+		* @return {Boolean} If the file was added or not
+		* @public
+		*/
+		public addFile(key: string, value: Kiwi.Files.File): boolean {
+
+			if (!this._files[key])
+			{
+				this._files[key] = value;
+				this._size++;
+				return true;
+			}
+
+			return false;
+
+		}
+
+		/**
+		* Checks to see if a key that you pass is already being used for another file. Returns true if that key is already in used, false if it isn&#x27;t.
+		* @method exists
+		* @param key {String} The key that you are checking.
+		* @return {Boolean} 
+		* @public
+		*/
+		public exists(key: string): boolean {
+
+			if (this._files[key])
+			{
+				return true;
+			}
+			else
+			{
+				return false;
+			}
+
+		}
+
+		/**
+		* Removes files on the FileStore that are associated with a particular state.
+		* @method removeStateFiles
+		* @param state {Kiwi.State} 
+		* @public
+		*/
+		public removeStateFiles(state: Kiwi.State) {
+			for (var file in this._files) {
+				if (this._files[file].ownerState === state) {
+					this.removeFile(file);
+				}
+			}
+		}
+
+		/**
+		* Removes a file by the key that is passed. Returns a boolean indicating if a file was removed or not.
+		* Note: Only returns false if that file did not exist in the first place.
+		* @method removeFile
+		* @param key {String} The key of the file you want to remove.
+		* @return {Boolean}
+		* @public
+		*/
+		public removeFile(key: string, destroy:boolean=false): boolean {
 
-                return true;
-            }
+			var file = this._files[key];
 
-            return false;
+			if (file) {
+				this._files[key] = null;
+				delete this._files[key];
 
-        }
+				if (destroy) {
+					this._files[key].destroy();
+				}
 
+				return true;
+			}
 
+			return false;
 
-    }
+		}
+
+	}
 
 }
+
     </pre>
 </div>
 
diff --git a/docs/files/src_file_Loader.ts.html b/docs/files/src_file_Loader.ts.html
index c2bddd2..03a8b49 100644
--- a/docs/files/src_file_Loader.ts.html
+++ b/docs/files/src_file_Loader.ts.html
@@ -373,1393 +373,1393 @@ <h1 class="file-heading">File: src/file/Loader.ts</h1>
 
 module Kiwi.Files {
 
-    /**
-    * Used for the loading of files and game assets. This usually happens when a State is at the &#x27;loading&#x27; stage (executing the &#x27;preload&#x27; method).
-    * 
-    * @class Loader
-    * @namespace Kiwi.Files
-    * @constructor
-    * @param game {Kiwi.Game} The game that this loader belongs to.
-    * @return {Kiwi.Files.Loader} This Object
-    *
-    */
-    export class Loader {
+	/**
+	* Used for the loading of files and game assets. This usually happens when a State is at the &#x27;loading&#x27; stage (executing the &#x27;preload&#x27; method).
+	* 
+	* @class Loader
+	* @namespace Kiwi.Files
+	* @constructor
+	* @param game {Kiwi.Game} The game that this loader belongs to.
+	* @return {Kiwi.Files.Loader} This Object
+	*
+	*/
+	export class Loader {
  
-        constructor(game: Kiwi.Game) {
-
-            this.game = game;
-
-        }
-
-        /**
-        * The type of object this is.
-        * @method objType
-        * @return {String} &quot;Loader&quot;
-        * @public
-        */
-        public objType() {
-            return &quot;Loader&quot;;
-        }
-
-        /**
-        * The game this loader is attached to.
-        * @property game 
-        * @type Kiwi.Game
-        * @public
-        */
-        public game: Kiwi.Game;
-
-        /**
-        * A list of files that can be loaded in parallel to one another.
-        * This list of files are currently being loaded. 
-        * 
-        * @property _loadingParallel
-        * @type Array
-        * @since 1.2.0
-        * @private 
-        */
-        private _loadingParallel: Kiwi.Files.File[];
-        
-        /**
-        * List of files that cannot load in parallel to one another
-        * and so need to wait for previous files to load first. 
-        * Generally files loaded via XHR.
-        * 
-        * @property _loadingQueue
-        * @type Array
-        * @since 1.2.0
-        * @private 
-        */
-        private _loadingQueue: Kiwi.Files.File[];
-
-        /**
-        * List of files that are to be loaded. 
-        * These files will be placed in the &#x27;_loadingQueue&#x27; or &#x27;_loadingParallel&#x27; 
-        * lists when the queue is told to &#x27;start&#x27; loading.
-        * 
-        * @property _loadingList
-        * @type Array
-        * @since 1.2.0
-        * @private 
-        */ 
-        private _loadingList: Kiwi.Files.File[];
-
-        /**
-        * A Signal which dispatches callbacks when all files in the &#x27;loadingList&#x27; have been loaded.
-        * When adding callbacks make sure to &#x27;remove&#x27; them (or to use the &#x27;addOnce&#x27; method) 
-        * otherwise will fire when other sections use the loader.
-        * 
-        * @method onQueueComplete
-        * @type Kiwi.Signal
-        * @since 1.2.0
-        * @public
-        */
-        public onQueueComplete: Kiwi.Signal;
-        
-        /**
-        * A Signal which dispatches callbacks each time a file in the &#x27;loadingList&#x27; have been loaded.
-        * Callbacks dispatched are passed the following arguments in order.
-        * 1. percent - The percentage of files loaded. A number from 0 - 100
-        * 2. bytesLoaded - The number of bytes loaded 
-        * 3. file - The latest file that was loaded. First call will be null.
-        * 
-        * When adding callbacks make sure to &#x27;remove&#x27; them (or to use the &#x27;addOnce&#x27; method) 
-        * otherwise will fire when other sections use the loader.
-        * 
-        * @method onQueueProgress
-        * @type Kiwi.Signal
-        * @since 1.2.0
-        * @public
-        */
-        public onQueueProgress: Kiwi.Signal;
-
-
-        /**
-        * A flag indicating if the files inside the file queue are loading or not.
-        * 
-        * @property _fileQueueLoading
-        * @type Boolean
-        * @default false
-        * @since 1.2.0
-        * @private
-        */
-        private _queueLoading: boolean = false;
-        
-        /**
-        * READ ONLY: A flag indicating if the files inside the file queue are loading or not.
-        * 
-        * @property fileQueueLoading
-        * @type Boolean
-        * @default false
-        * @readOnly
-        * @since 1.2.0
-        * @public
-        */
-        public get queueLoading(): boolean {
-            return this._queueLoading;
-        }
-
-
-        /**
-        * When &#x27;calculateBytes&#x27; is true the percentLoaded will be the &#x60;bytesLoaded / bytesTotal&#x60;. 
-        * Otherwise it is based on the &#x60;filesLoaded / numberOfFilesToLoad&#x60;. 
-        *
-        * @property percentLoaded
-        * @type Number
-        * @since 1.2.0
-        * @readOnly
-        * @public
-        */
-        public percentLoaded: number = 0;
-
-
-        /**
-        * When enabled, files which can be loaded in parallel (those which are loaded via tags) 
-        * will be loaded at the same time. 
-        * 
-        * The default behaviour is to have the files loading in a queued fashion instead of one after another.
-        * 
-        * @property enableParallelLoading
-        * @type Boolean
-        * @default false
-        * @since 1.2.0
-        * @public
-        */
-        public enableParallelLoading: boolean = false; 
-
-
-        /**
-        * The boot method is executed when the DOM has successfully loaded and we can now start the game.
-        * @method boot
-        * @public
-        */
-        public boot() {
-
-            this._loadingList = [];
-
-            this._loadingParallel = [];
-
-            this._loadingQueue = [];
-
-            this.onQueueComplete = new Kiwi.Signal();
-
-            this.onQueueProgress = new Kiwi.Signal();
-
-        }
-
-        /**
-        * Starts loading all the files which are in the file queue. 
-        *
-        * To accurately use the bytesLoaded or bytesTotal properties you will need to set the &#x27;calculateBytes&#x27; boolean to true.
-        * This may increase load times, as each file in the queue will firstly make XHR HEAD requests for information.
-        *
-        * When &#x27;calculateBytes&#x27; is true the percentLoaded will be the &#x60;bytesLoaded / bytesTotal&#x60;. 
-        * Otherwise it is based on the &#x60;filesLoaded / numberOfFilesToLoad&#x60;. 
-        *
-        * @method start
-        * @param [calculateBytes] {Boolean} Setter for the &#x27;calculateBytes&#x27; property.
-        * @since 1.2.0
-        * @public
-        */ 
-        public start(calculateBytes: boolean = null) {
-
-            if (calculateBytes !== null) {
-                this._calculateBytes = calculateBytes;
-            }
-
-            if (this._queueLoading) {
-                Kiwi.Log.warn(&#x27;Kiwi.Files.Loader: Files in the queue are already being loaded&#x27;);
-                return;
-            }
-
-            //Reset the number of bytes laoded
-            this._bytesLoaded = 0;
-            this._bytesTotal = 0;
-            this.percentLoaded = 0;
-
-            if (this._calculateBytes) {
-                this.calculateQueuedSize(this._startLoading, this);
-            } else {
-                this._startLoading();
-            }
-
-        }
-
-        /**
-        * Loops through the file queue and starts the loading process. 
-        * 
-        * @method _startLoading
-        * @private 
-        */
-        private _startLoading() {
-
-            //Any files to load?
-            if (this._loadingList.length &lt;= 0) {
-                Kiwi.Log.log(&#x27;Kiwi.Files.Loader: No files are to load have been found.&#x27;, &#x27;#loading&#x27;);
-                this.onQueueProgress.dispatch(100, 0, null);
-                this.onQueueComplete.dispatch();
-                return;
-            }
-
-            //There are files to load
-            var i = 0,
-                file: Kiwi.Files.File;
-
-            while (i &lt; this._loadingList.length) {
-
-                if (this._calculateBytes) {
-                    this._loadingList[i].onProgress.add(this._updateFileListInformation, this);
-                }
-
-                this._loadingList[i].onComplete.addOnce(this._fileQueueUpdate, this);
-
-                this._sortFile(this._loadingList[i]);
-
-                i++;
-            }
-
-            this._queueLoading = true;
-            this._bytesLoaded = 0;
-
-            this._startLoadingQueue();
-            this._startLoadingAllParallel();
-
-            this._fileQueueUpdate(null, true);
-
-        }
-
-        /**
-        * Adds a file to the queue of files to be loaded.
-        * Files cannot be added whilst the queue is currently loading, 
-        * the file to add is currently loading, or has been loaded before.
-        * 
-        * @method addFileToQueue
-        * @param file {Kiwi.Files.File} The file to add.
-        * @return {Boolean} If the file was added to the queue or not. 
-        * @since 1.2.0
-        * @public
-        */
-        public addFileToQueue(file: Kiwi.Files.File) {
-
-            if (this._queueLoading) {
-                Kiwi.Log.warn(&#x27;Kiwi.Files.Loader: File cannot be added to the queue whilst the queue is currently loading.&#x27;, &#x27;#loading&#x27;, &#x27;#filequeue&#x27;);
-                return false;
-            }
-
-            if (file.loading || file.complete) {
-                Kiwi.Log.warn(&#x27;Kiwi.Files.Loader: File could not be added as it is currently loading or has already loaded.&#x27;, &#x27;#loading&#x27;, &#x27;#filequeue&#x27;);
-                return false;
-            }
-
-            this._loadingList.push(file);
-            return true;
-        }
-
-        /**
-        * Removes a file from the file queue. 
-        * Files cannot be removed whilst the queue is loading.
-        *
-        * @method removeFileFromQueue
-        * @param file {Kiwi.Files.File} The file to remove.
-        * @return {Boolean} If the file was added to the queue or not.
-        * @since 1.2.0
-        * @public
-        */
-        public removeFileFromQueue(file: Kiwi.Files.File): boolean {
-
-            if (this._queueLoading) {
-                Kiwi.Log.warn(&#x27;Kiwi.Files.Loader: File cannot be remove from the queue whilst the queue is currently loading.&#x27;, &#x27;#loading&#x27;, &#x27;#filequeue&#x27;);
-                return false;
-            }
-
-            var index = this._loadingList.indexOf(file);
-
-            if (index === -1) {
-                return false;
-            } 
-
-            if (file.loading) {
-                Kiwi.Log.warn(&#x27;Kiwi.Files.Loader: Cannot remove the file from the list as it is currently loading.&#x27;, &#x27;#loading&#x27;, &#x27;#filequeue&#x27;);
-                return false;
-            }
-
-            this._loadingList.splice(index, 1);
-            return true;
-        }
-
-        /**
-        * Clears the file queue of all files. 
-        * 
-        * @method clearQueue
-        * @since 1.2.0
-        * @public
-        */
-        public clearQueue() {
-
-            if (!this._queueLoading) {
-                this._loadingList.length = 0;
-            } else {
-                Kiwi.Log.error(&#x27;Kiwi.Files.Loader: Cannot clear the file queue whilst the files are being loaded.&#x27;, &#x27;#loading&#x27;, &#x27;#filequeue&#x27;);
-            }
-        }
-
-        /**
-        * Starts the process of loading a file outside of the regular queue loading process.
-        * Callbacks for load completion need to be added onto the file via &#x27;onComplete&#x27; Signal.
-        *
-        * @method loadFile
-        * @public
-        */
-        public loadFile(file: Kiwi.Files.File) {
-
-            if ( file.loading || file.complete ) {
-                Kiwi.Log.error(&#x27;Kiwi.Files.Loader: Could not add file. File is already loading or has completed loading.&#x27;);
-                return;
-            }
-
-            this._sortFile(file, true);
-
-        }
-
-        /**
-        * Sorts a file and places it into either the &#x27;loadingParallel&#x27; or &#x27;loadingQueue&#x27; 
-        * depending on the method of loading it is using.
-        * 
-        * @method _sortFile
-        * @param file {Kiwi.Files.File}
-        * @since 1.2.0
-        * @private
-        */
-        private _sortFile(file: Kiwi.Files.File, startLoading: boolean = false) {
-
-            if (this.enableParallelLoading &amp;&amp; file.loadInParallel) {
-                //Push into the tag loader queue
-                this._loadingParallel.push(file);
-
-                if (startLoading) {
-                    this._startLoadingParallel(file);
-                }
-
-            } else {
-                //Push into the xhr queue
-                this._loadingQueue.push(file);
-
-                if (startLoading) {
-                    this._startLoadingQueue();
-                }
-            }
-
-        }
-
-        /**
-        * The number of files in the file queue that have been updated.
-        * 
-        * @property _completeFiles
-        * @type number
-        * @default 0
-        * @private
-        */
-        private _completedFiles: number = 0;
-
-        /**
-        * Called each time a file has processed whilst loading, or has just completed loading.
-        * 
-        * Calculates the new number of bytes loaded and 
-        * the percentage of loading done by looping through all of the files.
-        * 
-        * @method _updateFileListInformation
-        * @private
-        */
-        private _updateFileListInformation() {
-
-            var i = 0;
-
-            this._completedFiles = 0;
-            this._bytesLoaded = 0;
-
-            while (i &lt; this._loadingList.length) {
-
-                //Was the file loaded, but we have no bytes (must have used the tag loader) and we have their details?
-                if (this._loadingList[i].bytesLoaded === 0 &amp;&amp; this._loadingList[i].success &amp;&amp; this._loadingList[i].detailsReceived) {
-                    this._bytesLoaded += this._loadingList[i].size;
-
-                } else {
-                    //Add the bytes loaded to the list 
-                    this._bytesLoaded += this._loadingList[i].bytesLoaded;
-                }
-
-                //Calculate percentage
-                if (this._loadingList[i].complete) {
-                    this._completedFiles++;
-                }
-
-                i++;
-            }
-
-            //Calculate the percentage depending on how accurate we can be.
-            if (this._calculateBytes) {
-                this.percentLoaded = (this._bytesLoaded / this._bytesTotal) * 100;
-            } else {
-                this.percentLoaded = (this._completedFiles / this._loadingList.length) * 100;
-            }
-
-        }
-
-        /**
-        * Executed by files when they have successfully been loaded.
-        * This method checks to see if the files are in the file queue, and dispatches the appropriate events.
-        * 
-        * @method _fileQueueUpdate
-        * @param file {Kiwi.Files.File} The file which has been recently loaded.
-        * @param [forceProgressCheck=false] {Boolean} If the progress of file loading should be checked, regardless of the file being in the queue or not.
-        * @since 1.2.0
-        * @private
-        */
-        private _fileQueueUpdate(file: Kiwi.Files.File, forceProgressCheck: boolean = false) {
-
-            //If the file loaded is in the loadingList
-            if (!forceProgressCheck &amp;&amp; this._loadingList.indexOf(file) === -1) {
-                return;
-            }
-
-            //Update the file information.
-            this._updateFileListInformation();
-
-            //Dispatch progress event.
-            this.onQueueProgress.dispatch(this.percentLoaded, this.bytesLoaded, file);
-
-            if (this._completedFiles &gt;= this._loadingList.length) {
-                //Clear the file queue and dispatch the loaded event
-                this._queueLoading = false;
-                this.clearQueue();
-                this.onQueueComplete.dispatch();
-            }
-
-        }
-
-        /**
-        * Starts the loading process in the loadingQueue. 
-        * @method _startLoadingQueue
-        * @return {Boolean}
-        * @private
-        * @since 1.2.0
-        * @return {boolean} Whether the first file is loading
-        */
-        private _startLoadingQueue(): boolean {
-
-            //Any files to load?
-            if (this._loadingQueue.length &lt;= 0) {
-                Kiwi.Log.log(&#x27;Kiwi.Files.Loader: No queued files to load.&#x27;, &#x27;#loading&#x27;);
-                return false;
-            }
-
-            //Is the first file currently loading?
-            if (this._loadingQueue[0].loading) {
-                return false;
-            }
-
-            //Attempt to load the file!
-            this._loadingQueue[0].onComplete.addOnce(this._queueFileComplete, this);
-            this._loadingQueue[0].load();
-            return true;
-        }
-
-        /**
-        * Executed when a file in the &#x27;loadingQueue&#x27; has been successfully loaded.
-        * Removes the file from the loadingQueue and executes the &#x27;_startLoadingQueue&#x27; to start loading the next file. 
-        * 
-        * @method _queueFileComplete
-        * @param file {Kiwi.Files.File}
-        * @since 1.2.0
-        * @private
-        */
-        private _queueFileComplete(file: Kiwi.Files.File) {
-
-            //Remove from the loadingQueue
-            var index = this._loadingQueue.indexOf(file);
-            if (index === -1) {
-                Kiwi.Log.warn(&quot;Something has gone wrong? The file which executed this method doesn&#x27;t exist in the loadingQueue.&quot;, &#x27;#loading&#x27;, &#x27;#error&#x27;);
-                return;
-            }
-
-            this._loadingQueue.splice(index, 1);
-
-            //Start loading the next file
-            this._startLoadingQueue();
-        }
-
-        /**
-        * Starts loading a file which can be loaded in parallel.
-        * @method _startLoadingParallel
-        * @param params file {Kiwi.Files.File}
-        * @since 1.2.0
-        * @private 
-        */
-        private _startLoadingParallel( file: Kiwi.Files.File) {
-
-            if (!file.loading) {
-                file.onComplete.add(this._parallelFileComplete, this);
-                file.load();
-            }
-
-        }
-        
-        /**
-        * Starts loading all files which can be loaded in parallel.
-        * @method _startLoadingAllParallel
-        * @since 1.2.0
-        * @private 
-        */
-        private _startLoadingAllParallel() {
-
-            var i = 0,
-                file: Kiwi.Files.File;
-
-            while (i &lt; this._loadingParallel.length) {
-                this._startLoadingParallel(this._loadingParallel[i]);
-                i++;
-            }
-
-        }
-        
-        /**
-        * Executed when a file in the &#x27;loadingParallel&#x27; lsit has been successfully loaded.
-        * Removes the file from the list and get the fileQueue to check its progress.
-        * 
-        * @method _parallelFileComplete
-        * @param file {Kiwi.Files.File}
-        * @since 1.2.0
-        * @private 
-        */
-        private _parallelFileComplete(file: Kiwi.Files.File) {
-
-            var index = this._loadingParallel.indexOf(file);
-            if (index === -1) {
-                Kiwi.Log.warn(&quot;Something has gone wrong? The file which executed this method doesn&#x27;t exist in the loadingParallel.&quot;, &#x27;#loading&#x27;, &#x27;#error&#x27;);
-                return;
-            }
-
-            this._loadingParallel.splice(index, 1);
-        }
-
-
-        /**
-        * -----------------------------
-        * Bytes Loaded Methods 
-        * -----------------------------
-        **/
-        
-        /**
-        * If the number of bytes for each file should be calculated before the queue starts loading.
-        * If true each file in the queue makes a XHR HEAD request first to get the total values.
-        *
-        * @property _calculateBytes
-        * @type Boolean
-        * @private 
-        */
-        private _calculateBytes: boolean = false;
-
-        /**
-        * Callback for when the total number of bytes of the files in the file list has been calculated.
-        * 
-        * @property onQueueSizeCalculate
-        * @type any
-        * @private
-        */
-        private onSizeCallback: any;
-        
-        /**
-        * Context that the onSizeCallback should be executed in.
-        * 
-        * @property onSizeContext
-        * @type any
-        * @private
-        */
-        private onSizeContext: any;
-
-        /**
-        * The index of the current file in the filelist thats size is being retrieved.
-        * @property _currentFileIndex
-        * @type number
-        * @private
-        */
-        private _currentFileIndex: number = 0;
-
-        /**
-        * Total file size (in bytes) of all files in the queue to be loaded. 
-        * 
-        * @property _bytesTotal
-        * @type Number
-        * @private
-        */
-        private _bytesTotal: number = 0;
-
-        /**
-        * READ ONLY: Returns the total number of bytes for the files in the file queue.
-        * Only contains a value if you use the &#x27;calculateBytes&#x27; and are loading files
-        * OR if you use the &#x27;calculateQueuedSize&#x27; method.
-        * 
-        * @property bytesTotal
-        * @readOnly
-        * @default 0
-        * @since 1.2.0
-        * @type Number
-        * @public
-        */
-        public get bytesTotal(): number {
-            return this._bytesTotal;
-        }
-
-        /**
-        * The number of bytes loaded of files in the file queue. 
-        * 
-        * @property _bytesLoaded
-        * @type Number
-        * @private 
-        */
-        private _bytesLoaded: number = 0;
-
-        /**
-        * READ ONLY: Returns the total number of bytes for the files in the file queue.
-        *
-        * If you are using this make sure you set the &#x27;calculateBytes&#x27; property to true OR execute the &#x27;calculateQueuedSize&#x27; method. 
-        * Otherwise files that are loaded via tags will not be accurate!
-        * 
-        * @property bytesLoaded
-        * @readOnly
-        * @default 0
-        * @since 1.2.0
-        * @type Number
-        * @public
-        */
-        public get bytesLoaded(): number {
-            return this._bytesLoaded;
-        }
-
-        /**
-        * Loops through the file queue and gets file information (filesize, ETag, filetype) for each.
-        * 
-        * To get accurate information about the bytesLoaded, bytesTotal, and the percentLoaded 
-        * set the &#x27;calculateBytes&#x27; property to true, as the loader will automatically execute this method before hand.
-        * 
-        * Can only be executed when the file queue is not currently loading.
-        * 
-        * @method calculateQueuedSize
-        * @param callback {any}
-        * @param [context=null] {any}
-        * @public
-        */
-        public calculateQueuedSize(callback: any, context: any = null) {
-
-            //Is the queue currently loading files?
-            if (this._queueLoading) {
-                Kiwi.Log.warn(&#x27;Kiwi.Files.Loader: Cannot calculate the size of the files in the filequeue whilst they are loading. &#x27;);
-                return;
-            }
-
-            //Set the callbacks
-            this.onSizeCallback = callback;
-            this.onSizeContext = context;
-
-            // Start the process
-            this._currentFileIndex = 0;
-            this._bytesTotal = 0;
-            this._queueLoading = true;
-
-            this._calculateNextFileSize();
-        }
-
-        /**
-        * Checks to see if all the file sizes have been retrieved. 
-        * If so completes the &quot;calculateQueuedSize&quot; call.
-        * Otherwise requests the next file&#x27;s details.
-        *
-        * @method _calculateNextFileSize
-        * @private
-        */
-        private _calculateNextFileSize() {
-
-            if (this._currentFileIndex &gt;= this._loadingList.length) {
-                this._queueLoading = false;
-                this.onSizeCallback.call(this.onSizeContext, this._bytesTotal);;
-                return;
-            }
-            
-            var file = this._loadingList[this._currentFileIndex];
-
-            //Have we already got the details for this file?
-            if (file.detailsReceived) {
-                this._detailsReceived();
-            } else {
-                var details = file.loadDetails(this._detailsReceived, this);
-
-                //Skip to the next file if the request could not be made.
-                //Shouldn&#x27;t happen.
-                if (!details) {
-                    this._detailsReceived();
-                }
-            } 
-
-        }
-
-        /**
-        * Executed when by &#x27;_calculateNextFileSize&#x27; when the files information has been retrieved.
-        * Adds its calculated size to the _bytesTotal and executes the &#x27;nextFileSize&#x27; method.
-        * 
-        * @method _detailsReceived
-        * @private 
-        */
-        private _detailsReceived() {
-
-            var file = this._loadingList[this._currentFileIndex];
-
-            if (file.detailsReceived) {
-                this._bytesTotal += file.size;
-            }
-
-            this._currentFileIndex++;
-            this._calculateNextFileSize();
-
-        }
-
-
-        /**
-        * -----------------------------
-        * File Addition Methods
-        * -----------------------------
-        */
-
-
-        /**
-        * Creates a new file for an image and adds a the file to loading queue. 
-        * @method addImage
-        * @param key {String} The key for the file.
-        * @param url {String} The url of the image to load.
-        * @param [width] {number} The width of the cell on the image to use once the image is loaded.
-        * @param [height] {number} The height of the cell on the image to use once the image is loaded.
-        * @param [offsetX] {number} An offset on the x axis of the cell.
-        * @param [offsetY] {number} An offset of the y axis of the cell.
-        * @param [storeAsGlobal=true] {boolean} If the image should be stored globally or not.
-        * @return {Kiwi.Files.File} The file which was created.
-        * @public
-        */
-        public addImage(key: string, url: string, width?: number, height?: number, offsetX?: number, offsetY?: number, storeAsGlobal: boolean = true): Kiwi.Files.File {
-
-            var params:any = {
-                type: Kiwi.Files.File.IMAGE,
-                key: null,
-                url: null,
-                fileStore: this.game.fileStore,
-                metadata: {}
-            };
-
-            if ( Kiwi.Utils.Common.isObject(key) ) {
-                var p: any = key;
-
-                params.key = p.key;
-                params.url = p.url;
-                params.metadata = {
-                    width: p.width,
-                    height: p.height,
-                    offsetX: p.offsetX,
-                    offsetY: p.offsetY
-                };
-
-                if (p.xhrLoading) params.xhrLoading = p.xhrLoading;//forces blob loading
-                if (p.state) params.state = p.state;
-                if (p.tags) params.tags = p.tags;
-
-            } else {
-
-                if (!storeAsGlobal &amp;&amp; this.game.states.current) {
-                    params.state = this.game.states.current;
-                }
-
-                params.key = key;
-                params.url = url;
-                params.metadata = {
-                    width: width,
-                    height: height,
-                    offsetX: offsetX,
-                    offsetY: offsetY
-                };
-
-            }
-
-            var file: Kiwi.Files.File = new Kiwi.Files.TextureFile(this.game, params);
-            this.addFileToQueue(file);
-
-            return file;
-        }
-
-        /**
-        * Creates a new file for a spritesheet and adds the file to the loading queue.
-        * @method addSpriteSheet
-        * @param key {String} The key for the file.
-        * @param url {String} The url of the image to load.
-        * @param frameWidth {number} The width of a single cell in the spritesheet.
-        * @param frameHeight {number} The height of a single cell in the spritesheet.
-        * @param [numCells] {number} The number of cells that are in this spritesheet.
-        * @param [rows] {number} The number of cells that are in a row.
-        * @param [cols] {number} The number of cells that are in a column.
-        * @param [sheetOffsetX] {number} The offset of the whole spritesheet on the x axis.
-        * @param [sheetOffsetY] {number} The offset of the whole spritesheet on the y axis.
-        * @param [cellOffsetX] {number} The spacing between each cell on the x axis.
-        * @param [cellOffsetY] {number} The spacing between each cell on the y axis.
-        * @param [storeAsGlobal=true] {boolean} 
-        * @return {Kiwi.Files.File} The file which was created.
-        * @public
-        */
-        public addSpriteSheet(key: string, url: string, frameWidth: number, frameHeight: number, numCells?: number, rows?: number, cols?: number, sheetOffsetX?: number, sheetOffsetY?: number, cellOffsetX?: number, cellOffsetY?: number, storeAsGlobal: boolean = true) {
-
-            var params: any = {
-                type: Kiwi.Files.File.SPRITE_SHEET,
-                key: null,
-                url: null,
-                fileStore: this.game.fileStore,
-                metadata: {}
-            };
-
-
-            if (Kiwi.Utils.Common.isObject(key)) {
-                var p: any = key;
-
-                params.key = p.key;
-                params.url = p.url;
-                params.metadata = {
-                    frameWidth: p.frameWidth,
-                    frameHeight: p.frameHeight,
-                    numCells: p.numCells,
-                    rows: p.rows,
-                    cols: p.cols,
-                    sheetOffsetX: p.sheetOffsetX,
-                    sheetOffsetY: p.sheetOffsetY,
-                    cellOffsetX: p.cellOffsetX,
-                    cellOffsetY: p.cellOffsetY
-                };
-
-                if (p.xhrLoading) params.xhrLoading = p.xhrLoading;//forces blob loading
-                if (p.state) params.state = p.state;
-                if (p.tags) params.tags = p.tags;
-
-            } else {
-
-                if (!storeAsGlobal &amp;&amp; this.game.states.current) {
-                    params.state = this.game.states.current;
-                }
-
-                params.key = key;
-                params.url = url;
-                params.metadata = {
-                    frameWidth: frameWidth,
-                    frameHeight: frameHeight,
-                    numCells: numCells,
-                    rows: rows,
-                    cols: cols,
-                    sheetOffsetX: sheetOffsetX,
-                    sheetOffsetY: sheetOffsetY,
-                    cellOffsetX: cellOffsetX,
-                    cellOffsetY: cellOffsetY
-                };
-
-            }
-
-
-            var file = new Kiwi.Files.TextureFile(this.game, params);
-            this.addFileToQueue(file);
-
-            return file;
-        }
-
-        /**
-        * Creates new file&#x27;s for loading a texture atlas and adds those files to the loading queue.
-        * @method addTextureAtlas
-        * @param key {String} The key for the image file.
-        * @param imageUrl {String} The url of the image to load.
-        * @param jsonID {String} A key for the JSON file.
-        * @param jsonURL {String} The url of the json file to load.
-        * @param [storeAsGlobal=true] {Boolean} If hte files should be stored globally or not.
-        * @return {Kiwi.Files.File} The file which was created.
-        * @public
-        */
-        public addTextureAtlas(key: string, imageURL: string, jsonID: string, jsonURL: string, storeAsGlobal: boolean = true) {
-
-            var textureParams: any = {
-                type: Kiwi.Files.File.TEXTURE_ATLAS,
-                key: key,
-                url: imageURL,
-                fileStore: this.game.fileStore,
-                metadata: {
-                    jsonID: jsonID
-                }
-            };
-            var jsonParams: any = {
-                type: Kiwi.Files.File.JSON,
-                key: jsonID,
-                url: jsonURL,
-                fileStore: this.game.fileStore,
-                metadata: {
-                    imageID: key
-                }
-            };
-
-            if (!storeAsGlobal &amp;&amp; this.game.states.current) {
-                textureParams.state = this.game.states.current;
-                jsonParams.state = this.game.states.current;
-            }
-
-            if (Kiwi.Utils.Common.isObject(key)) {
-                var p: any = key;
-
-                textureParams.key = p.textureAtlasKey;
-                textureParams.url = p.textureAtlasURL;
-                jsonParams.key = p.jsonKey;
-                jsonParams.url = p.jsonURL;
-
-                textureParams.metadata.jsonID = jsonParams.key;
-                jsonParams.metadata.imageID = textureParams.key;
-
-                if (p.state) {
-                    textureParams.state = p.state;
-                    jsonParams.state = p.state;
-                }
-
-                if (p.xhrLoading) textureParams.xhrLoading = p.xhrLoading; //forces blob loading
-                if (p.tags) {
-                    jsonParams.tags = p.tags;
-                    textureParams.tags = p.tags;
-                }
-
-            } 
-
-            var imageFile = new Kiwi.Files.TextureFile(this.game, textureParams);
-            var jsonFile = new Kiwi.Files.DataFile(this.game, jsonParams);
-
-            this.addFileToQueue(imageFile);
-            this.addFileToQueue(jsonFile);
-
-            return imageFile;
-        }
-
-        /**
-        * Creates a new File to store a audio piece. 
-        * This method firstly checks to see if the AUDIO file being loaded is supported or not by the browser/device before adding it to the loading queue.
-        * You can override this behaviour and tell the audio data to load even if not supported by setting the &#x27;onlyIfSupported&#x27; boolean to false.
-        * Also you can now pass an array of filepaths, and the first audio filetype that is supported will be loaded.
-        *
-        * @method addAudio
-        * @param key {String} The key for the audio file.
-        * @param url {String} The url of the audio to load. You can pass an array of URLs, in which case the first supported audio filetype in the array will be loaded.
-        * @param [storeAsGlobal=true] {Boolean} If the file should be stored globally.
-        * @param [onlyIfSupported=true] {Boolean} If the audio file should only be loaded if Kiwi detects that the audio file could be played. 
-        * @return {Kiwi.Files.File} The file which was created.
-        * @public
-        */
-        public addAudio(key: string, url: any, storeAsGlobal: boolean = true, onlyIfSupported: boolean = true) {
-
-            var params = {
-                type: Kiwi.Files.File.AUDIO,
-                key: null,
-                url: null,
-                state: null,
-                fileStore: this.game.fileStore
-            };
-
-            if (Kiwi.Utils.Common.isObject(key)) {
-                params = (&lt;any&gt;key);
-                params.fileStore = this.game.fileStore;
-
-            } else {
-                params.key = key;
-                params.url = url;
-
-                if (!storeAsGlobal &amp;&amp; this.game.states.current) {
-                    params.state = this.game.states.current;
-                }
-
-            }
-
-            var i = 0,
-                urls, file;
-
-            //If it is a string then try to load that file
-            if (Kiwi.Utils.Common.isString(params.url)) {
-                urls = [params.url];
-            } else {
-                urls = params.url;
-            }
-
-            while (i &lt; urls.length) {
-
-                params.url = urls[i]
-                file = this._attemptToAddAudio(params, onlyIfSupported);
-                if (file) {
-                    return file;
-                }
-
-                i++;
-            }
-
-            return null;
-        }
-
-        /**
-        * This method firstly checks to see if the AUDIO file being loaded is supported or not by the browser/device before adding it to the loading queue.
-        * Returns a boolean if the audio file was successfully added or not to the file directory.
-        * @method _attemptToAddAudio
-        * @param params {Object} 
-        *   @param params.key {String} The key for the audio file.
-        *   @param params.url {String} The url of the audio to load. 
-        *   @param [params.state=true] {Kiwi.State} The state this file should be for.
-        *   @param [params.fileStore] {Kiwi.Files.FileStore} 
-        * @param [onlyIfSupported=true] {Boolean} If the audio file should only be loaded if Kiwi detects that the audio file could be played. 
-        * @return {Kiwi.Files.File} The file which was created.
-        * @private
-        */
-        private _attemptToAddAudio(params:any, onlyIfSupported: boolean): Kiwi.Files.File {
-
-            var file = new Kiwi.Files.AudioFile(this.game, params);
-            var support = false;
-
-            switch (file.extension) {
-                case &#x27;mp3&#x27;:
-                    support = Kiwi.DEVICE.mp3;
-                    break;
-
-                case &#x27;ogg&#x27;:
-                case &#x27;oga&#x27;:
-                    support = Kiwi.DEVICE.ogg;
-                    break;
-
-                case &#x27;m4a&#x27;:
-                    support = Kiwi.DEVICE.m4a;
-                    break;
-
-                case &#x27;wav&#x27;:
-                case &#x27;wave&#x27;:
-                    support = Kiwi.DEVICE.wav;
-                    break;
-            }
-
-            if (support == true || onlyIfSupported == false) {
-                this.addFileToQueue(file);
-                return file;
-            } else {
-                Kiwi.Log.error(&#x27;Kiwi.Loader: Audio Format not supported on this Device/Browser.&#x27;, &#x27;#audio&#x27;, &#x27;#unsupported&#x27;);
-                return null;
-            }
-
-        }
-
-        /**
-        * Creates a new File to store JSON and adds it to the loading queue.
-        * @method addJSON
-        * @param key {String} The key for the file.
-        * @param url {String} The url to the json file.
-        * @param [storeAsGlobal=true] {Boolean} If the file should be stored globally.
-        * @return {Kiwi.Files.File} The file which was created.
-        * @public
-        */
-        public addJSON(key: string, url: string, storeAsGlobal: boolean = true) {
-
-            var params: any = {
-                type: Kiwi.Files.File.JSON,
-                key: key, 
-                url: url,
-                fileStore: this.game.fileStore
-            };
-
-            if (Kiwi.Utils.Common.isObject(key)) {
-                var p: any = key;
-
-                params.key = p.key;
-                params.url = p.url;
-
-                if (p.parse) params.parse = p.parse;
-                if (p.state) params.state = p.state;
-                if (p.tags) params.tags = p.tags;
-
-            } else {
-
-                if (!storeAsGlobal &amp;&amp; this.game.states.current) {
-                    params.state = this.game.states.current;
-                }
-
-            }
-
-            var file = new Kiwi.Files.DataFile(this.game, params);
-            this.addFileToQueue(file);
-            return file;
-
-        }
-
-        /**
-        * Creates a new File to store XML and adds it to the loading queue.
-        * @method addXML
-        * @param key {String} The key for the file.
-        * @param url {String} The url to the xml file.
-        * @param [storeAsGlobal=true] {Boolean} If the file should be stored globally.
-        * @return {Kiwi.Files.File} The file which was created.
-        * @public
-        */
-        public addXML(key: string, url: string, storeAsGlobal: boolean = true) {
-            
-            var params:any = {
-                type: Kiwi.Files.File.XML,
-                key: key,
-                url: url,
-                fileStore: this.game.fileStore
-            };
-
-            if (Kiwi.Utils.Common.isObject(key)) {
-                var p: any = key;
-
-                params.key = p.key;
-                params.url = p.url;
-
-                if (p.parse) params.parse = p.parse;
-                if (p.state) params.state = p.state;
-                if (p.tags) params.tags = p.tags;
-
-            } else {
-
-                if (!storeAsGlobal &amp;&amp; this.game.states.current) {
-                    params.state = this.game.states.current;
-                }
-
-            }
-
-            var file = new Kiwi.Files.DataFile(this.game, params);
-            this.addFileToQueue(file);
-            return file;
-
-        }
-
-        /**
-        * Creates a new File for a Binary file and adds it to the loading queue.
-        * @method addBinaryFile
-        * @param key {String} The key for the file.
-        * @param url {String} The url to the Binary file.
-        * @param [storeAsGlobal=true] {Boolean} If the file should be stored globally.
-        * @return {Kiwi.Files.File} The file which was created.
-        * @public
-        */
-        public addBinaryFile(key: string, url: string, storeAsGlobal: boolean = true) {
-
-            var params: any = {
-                type: Kiwi.Files.File.BINARY_DATA,
-                key: key,
-                url: url,
-                fileStore: this.game.fileStore
-            };
-
-            if (Kiwi.Utils.Common.isObject(key)) {
-                var p: any = key;
-
-                params.key = p.key;
-                params.url = p.url;
-
-                if (p.parse) params.parse = p.parse;
-                if (p.state) params.state = p.state;
-                if (p.tags) params.tags = p.tags;
-
-            } else {
-
-                if (!storeAsGlobal &amp;&amp; this.game.states.current) {
-                    params.state = this.game.states.current;
-                }
-
-            }
-
-            var file = new Kiwi.Files.DataFile(this.game, params);
-            this.addFileToQueue(file);
-            return file;
-
-        }
-
-        /**
-        * Creates a new File to store a text file and adds it to the loading queue.
-        * @method addTextFile
-        * @param key {String} The key for the file.
-        * @param url {String} The url to the text file.
-        * @param [storeAsGlobal=true] {Boolean} If the file should be stored globally.
-        * @return {Kiwi.Files.File} The file which was created.
-        * @public
-        */
-        public addTextFile(key: string, url: string, storeAsGlobal: boolean = true) {
-
-            var params: any = {
-                type: Kiwi.Files.File.TEXT_DATA,
-                key: key,
-                url: url,
-                fileStore: this.game.fileStore
-            };
-
-            if (Kiwi.Utils.Common.isObject(key)) {
-                var p: any = key;
-
-                params.key = p.key;
-                params.url = p.url;
-
-                if (p.parse) params.parse = p.parse;
-                if (p.state) params.state = p.state;
-                if (p.tags) params.tags = p.tags;
-
-            } else {
-
-                if (!storeAsGlobal &amp;&amp; this.game.states.current) {
-                    params.state = this.game.states.current;
-                }
-
-            }
-
-            var file = new Kiwi.Files.DataFile(this.game, params);
-            this.addFileToQueue(file);
-            return file;
-
-        }
-
-        /**
-        * Flags this loader for garbage collection. Only use this method if you are SURE you will no longer need it. 
-        * Otherwise it is best to leave it alone.
-        * 
-        * @method destroy
-        * @public
-        */
-        public destroy() {
-
-            this.onQueueComplete.dispose();
-            this.onQueueProgress.dispose();
-
-            delete this.game;
-
-            delete this.onQueueComplete;
-            delete this.onQueueProgress;
-
-            var i = 0;
-            while (i &lt; this._loadingList.length) {
-                this._loadingList[i].destroy();
-                i++;
-            }
-            this._loadingList = [];
-
-            var i = 0;
-            while (i &lt; this._loadingQueue.length) {
-                this._loadingQueue[i].destroy();
-                i++;
-            }
-            this._loadingQueue = [];
-
-            var i = 0;
-            while (i &lt; this._loadingParallel.length) {
-                this._loadingParallel[i].destroy();
-                i++;
-            }
-            this._loadingParallel = [];
-
-
-        }
-
-        
-        /**
-        * -----------------------
-        * Deprecated - Functionality exists. Maps to its equalvent
-        * -----------------------
-        **/        
-        
-
-        /**
-        * Initialise the properities that are needed on this loader.
-        * Recommended you use the &#x27;onQueueProgress&#x27; / &#x27;onQueueComplete&#x27; signals instead.
-        * 
-        * @method init
-        * @param [progress=null] {Any} Progress callback method.
-        * @param [complete=null] {Any} Complete callback method.
-        * @param [calculateBytes=false] {boolean} 
-        * @deprecated Deprecated as of 1.2.0
-        * @public
-        */
-        public init(progress: any = null, complete: any = null, calculateBytes: boolean=null) {
-
-            if (calculateBytes !== null) {
-                this._calculateBytes = calculateBytes;
-            } 
-
-            if (progress !== null) {
-                this.onQueueProgress.addOnce( progress );
-            }
-
-            if (complete !== null) {
-                this.onQueueComplete.addOnce( complete );
-            }
-
-        } 
-
-        /**
-        * Loops through all of the files that need to be loaded and start the load event on them. 
-        * @method startLoad
-        * @deprecated Use &#x27;start&#x27; instead. Deprecated as of 1.2.0
-        * @public
-        */
-        public startLoad() {
-            this.start();
-        }
-             
-        /**
-        * Returns a percentage of the amount that has been loaded so far.
-        * @method getPercentLoaded
-        * @return {Number}
-        * @deprecated Use &#x27;percentLoaded&#x27; instead. Deprecated as of 1.2.0
-        * @public
-        */
-        public getPercentLoaded(): number {
-            return this.percentLoaded;
-        }
-
-
-        /**
-        * Returns a boolean indicating if everything in the loading que has been loaded or not.
-        * @method complete
-        * @return {boolean}
-        * @deprecated Use &#x27;percentLoaded&#x27; instead. Deprecated as of 1.2.0
-        * @public
-        */
-        public complete(): boolean {
-            return ( this.percentLoaded === 100 );
-        }
-
-        /**
-        * Quick way of getting / setting the private variable &#x27;calculateBytes&#x27;
-        * To be made into a public variable once removed.
-        * @method calculateBytes
-        * @param [value] {boolean}
-        * @return {boolean}
-        * @public
-        */
-        public calculateBytes(value?: boolean): boolean {
-
-            if (typeof value !== &quot;undefined&quot;) {
-                this._calculateBytes = value;
-            }
-
-            return this._calculateBytes;
-        }
-
-        /**
-        * Returns the total number of bytes that have been loaded so far from files in the file queue.
-        * 
-        * @method getBytesLoaded
-        * @return {Number}
-        * @readOnly
-        * @deprecated Use &#x27;bytesLoaded&#x27; instead. Deprecated as of 1.2.0
-        * @public
-        */
-        public getBytesLoaded(): number {
-
-            return this.bytesLoaded;
-        }
-
-    }
+		constructor(game: Kiwi.Game) {
+
+			this.game = game;
+
+		}
+
+		/**
+		* The type of object this is.
+		* @method objType
+		* @return {String} &quot;Loader&quot;
+		* @public
+		*/
+		public objType() {
+			return &quot;Loader&quot;;
+		}
+
+		/**
+		* The game this loader is attached to.
+		* @property game 
+		* @type Kiwi.Game
+		* @public
+		*/
+		public game: Kiwi.Game;
+
+		/**
+		* A list of files that can be loaded in parallel to one another.
+		* This list of files are currently being loaded. 
+		* 
+		* @property _loadingParallel
+		* @type Array
+		* @since 1.2.0
+		* @private 
+		*/
+		private _loadingParallel: Kiwi.Files.File[];
+
+		/**
+		* List of files that cannot load in parallel to one another
+		* and so need to wait for previous files to load first. 
+		* Generally files loaded via XHR.
+		* 
+		* @property _loadingQueue
+		* @type Array
+		* @since 1.2.0
+		* @private 
+		*/
+		private _loadingQueue: Kiwi.Files.File[];
+
+		/**
+		* List of files that are to be loaded. 
+		* These files will be placed in the &#x27;_loadingQueue&#x27; or &#x27;_loadingParallel&#x27; 
+		* lists when the queue is told to &#x27;start&#x27; loading.
+		* 
+		* @property _loadingList
+		* @type Array
+		* @since 1.2.0
+		* @private 
+		*/
+		private _loadingList: Kiwi.Files.File[];
+
+		/**
+		* A Signal which dispatches callbacks when all files in the &#x27;loadingList&#x27; have been loaded.
+		* When adding callbacks make sure to &#x27;remove&#x27; them (or to use the &#x27;addOnce&#x27; method) 
+		* otherwise will fire when other sections use the loader.
+		* 
+		* @method onQueueComplete
+		* @type Kiwi.Signal
+		* @since 1.2.0
+		* @public
+		*/
+		public onQueueComplete: Kiwi.Signal;
+
+		/**
+		* A Signal which dispatches callbacks each time a file in the &#x27;loadingList&#x27; have been loaded.
+		* Callbacks dispatched are passed the following arguments in order.
+		* 1. percent - The percentage of files loaded. A number from 0 - 100
+		* 2. bytesLoaded - The number of bytes loaded 
+		* 3. file - The latest file that was loaded. First call will be null.
+		* 
+		* When adding callbacks make sure to &#x27;remove&#x27; them (or to use the &#x27;addOnce&#x27; method) 
+		* otherwise will fire when other sections use the loader.
+		* 
+		* @method onQueueProgress
+		* @type Kiwi.Signal
+		* @since 1.2.0
+		* @public
+		*/
+		public onQueueProgress: Kiwi.Signal;
+
+
+		/**
+		* A flag indicating if the files inside the file queue are loading or not.
+		* 
+		* @property _fileQueueLoading
+		* @type Boolean
+		* @default false
+		* @since 1.2.0
+		* @private
+		*/
+		private _queueLoading: boolean = false;
+
+		/**
+		* READ ONLY: A flag indicating if the files inside the file queue are loading or not.
+		* 
+		* @property fileQueueLoading
+		* @type Boolean
+		* @default false
+		* @readOnly
+		* @since 1.2.0
+		* @public
+		*/
+		public get queueLoading(): boolean {
+			return this._queueLoading;
+		}
+
+
+		/**
+		* When &#x27;calculateBytes&#x27; is true the percentLoaded will be the &#x60;bytesLoaded / bytesTotal&#x60;. 
+		* Otherwise it is based on the &#x60;filesLoaded / numberOfFilesToLoad&#x60;. 
+		*
+		* @property percentLoaded
+		* @type Number
+		* @since 1.2.0
+		* @readOnly
+		* @public
+		*/
+		public percentLoaded: number = 0;
+
+
+		/**
+		* When enabled, files which can be loaded in parallel (those which are loaded via tags) 
+		* will be loaded at the same time. 
+		* 
+		* The default behaviour is to have the files loading in a queued fashion instead of one after another.
+		* 
+		* @property enableParallelLoading
+		* @type Boolean
+		* @default false
+		* @since 1.2.0
+		* @public
+		*/
+		public enableParallelLoading: boolean = false; 
+
+
+		/**
+		* The boot method is executed when the DOM has successfully loaded and we can now start the game.
+		* @method boot
+		* @public
+		*/
+		public boot() {
+
+			this._loadingList = [];
+
+			this._loadingParallel = [];
+
+			this._loadingQueue = [];
+
+			this.onQueueComplete = new Kiwi.Signal();
+
+			this.onQueueProgress = new Kiwi.Signal();
+
+		}
+
+		/**
+		* Starts loading all the files which are in the file queue. 
+		*
+		* To accurately use the bytesLoaded or bytesTotal properties you will need to set the &#x27;calculateBytes&#x27; boolean to true.
+		* This may increase load times, as each file in the queue will firstly make XHR HEAD requests for information.
+		*
+		* When &#x27;calculateBytes&#x27; is true the percentLoaded will be the &#x60;bytesLoaded / bytesTotal&#x60;. 
+		* Otherwise it is based on the &#x60;filesLoaded / numberOfFilesToLoad&#x60;. 
+		*
+		* @method start
+		* @param [calculateBytes] {Boolean} Setter for the &#x27;calculateBytes&#x27; property.
+		* @since 1.2.0
+		* @public
+		*/ 
+		public start(calculateBytes: boolean = null) {
+
+			if (calculateBytes !== null) {
+				this._calculateBytes = calculateBytes;
+			}
+
+			if (this._queueLoading) {
+				Kiwi.Log.warn(&#x27;Kiwi.Files.Loader: Files in the queue are already being loaded&#x27;);
+				return;
+			}
+
+			//Reset the number of bytes laoded
+			this._bytesLoaded = 0;
+			this._bytesTotal = 0;
+			this.percentLoaded = 0;
+
+			if (this._calculateBytes) {
+				this.calculateQueuedSize(this._startLoading, this);
+			} else {
+				this._startLoading();
+			}
+
+		}
+
+		/**
+		* Loops through the file queue and starts the loading process. 
+		* 
+		* @method _startLoading
+		* @private 
+		*/
+		private _startLoading() {
+
+			//Any files to load?
+			if (this._loadingList.length &lt;= 0) {
+				Kiwi.Log.log(&#x27;Kiwi.Files.Loader: No files are to load have been found.&#x27;, &#x27;#loading&#x27;);
+				this.onQueueProgress.dispatch(100, 0, null);
+				this.onQueueComplete.dispatch();
+				return;
+			}
+
+			//There are files to load
+			var i = 0,
+				file: Kiwi.Files.File;
+
+			while (i &lt; this._loadingList.length) {
+
+				if (this._calculateBytes) {
+					this._loadingList[i].onProgress.add(this._updateFileListInformation, this);
+				}
+
+				this._loadingList[i].onComplete.addOnce(this._fileQueueUpdate, this);
+
+				this._sortFile(this._loadingList[i]);
+
+				i++;
+			}
+
+			this._queueLoading = true;
+			this._bytesLoaded = 0;
+
+			this._startLoadingQueue();
+			this._startLoadingAllParallel();
+
+			this._fileQueueUpdate(null, true);
+
+		}
+
+		/**
+		* Adds a file to the queue of files to be loaded.
+		* Files cannot be added whilst the queue is currently loading, 
+		* the file to add is currently loading, or has been loaded before.
+		* 
+		* @method addFileToQueue
+		* @param file {Kiwi.Files.File} The file to add.
+		* @return {Boolean} If the file was added to the queue or not. 
+		* @since 1.2.0
+		* @public
+		*/
+		public addFileToQueue(file: Kiwi.Files.File) {
+
+			if (this._queueLoading) {
+				Kiwi.Log.warn(&#x27;Kiwi.Files.Loader: File cannot be added to the queue whilst the queue is currently loading.&#x27;, &#x27;#loading&#x27;, &#x27;#filequeue&#x27;);
+				return false;
+			}
+
+			if (file.loading || file.complete) {
+				Kiwi.Log.warn(&#x27;Kiwi.Files.Loader: File could not be added as it is currently loading or has already loaded.&#x27;, &#x27;#loading&#x27;, &#x27;#filequeue&#x27;);
+				return false;
+			}
+
+			this._loadingList.push(file);
+			return true;
+		}
+
+		/**
+		* Removes a file from the file queue. 
+		* Files cannot be removed whilst the queue is loading.
+		*
+		* @method removeFileFromQueue
+		* @param file {Kiwi.Files.File} The file to remove.
+		* @return {Boolean} If the file was added to the queue or not.
+		* @since 1.2.0
+		* @public
+		*/
+		public removeFileFromQueue(file: Kiwi.Files.File): boolean {
+
+			if (this._queueLoading) {
+				Kiwi.Log.warn(&#x27;Kiwi.Files.Loader: File cannot be remove from the queue whilst the queue is currently loading.&#x27;, &#x27;#loading&#x27;, &#x27;#filequeue&#x27;);
+				return false;
+			}
+
+			var index = this._loadingList.indexOf(file);
+
+			if (index === -1) {
+				return false;
+			} 
+
+			if (file.loading) {
+				Kiwi.Log.warn(&#x27;Kiwi.Files.Loader: Cannot remove the file from the list as it is currently loading.&#x27;, &#x27;#loading&#x27;, &#x27;#filequeue&#x27;);
+				return false;
+			}
+
+			this._loadingList.splice(index, 1);
+			return true;
+		}
+
+		/**
+		* Clears the file queue of all files. 
+		* 
+		* @method clearQueue
+		* @since 1.2.0
+		* @public
+		*/
+		public clearQueue() {
+
+			if (!this._queueLoading) {
+				this._loadingList.length = 0;
+			} else {
+				Kiwi.Log.error(&#x27;Kiwi.Files.Loader: Cannot clear the file queue whilst the files are being loaded.&#x27;, &#x27;#loading&#x27;, &#x27;#filequeue&#x27;);
+			}
+		}
+
+		/**
+		* Starts the process of loading a file outside of the regular queue loading process.
+		* Callbacks for load completion need to be added onto the file via &#x27;onComplete&#x27; Signal.
+		*
+		* @method loadFile
+		* @public
+		*/
+		public loadFile(file: Kiwi.Files.File) {
+
+			if ( file.loading || file.complete ) {
+				Kiwi.Log.error(&#x27;Kiwi.Files.Loader: Could not add file. File is already loading or has completed loading.&#x27;);
+				return;
+			}
+
+			this._sortFile(file, true);
+
+		}
+
+		/**
+		* Sorts a file and places it into either the &#x27;loadingParallel&#x27; or &#x27;loadingQueue&#x27; 
+		* depending on the method of loading it is using.
+		* 
+		* @method _sortFile
+		* @param file {Kiwi.Files.File}
+		* @since 1.2.0
+		* @private
+		*/
+		private _sortFile(file: Kiwi.Files.File, startLoading: boolean = false) {
+
+			if (this.enableParallelLoading &amp;&amp; file.loadInParallel) {
+				//Push into the tag loader queue
+				this._loadingParallel.push(file);
+
+				if (startLoading) {
+					this._startLoadingParallel(file);
+				}
+
+			} else {
+				//Push into the xhr queue
+				this._loadingQueue.push(file);
+
+				if (startLoading) {
+					this._startLoadingQueue();
+				}
+			}
+
+		}
+
+		/**
+		* The number of files in the file queue that have been updated.
+		* 
+		* @property _completeFiles
+		* @type number
+		* @default 0
+		* @private
+		*/
+		private _completedFiles: number = 0;
+
+		/**
+		* Called each time a file has processed whilst loading, or has just completed loading.
+		* 
+		* Calculates the new number of bytes loaded and 
+		* the percentage of loading done by looping through all of the files.
+		* 
+		* @method _updateFileListInformation
+		* @private
+		*/
+		private _updateFileListInformation() {
+
+			var i = 0;
+
+			this._completedFiles = 0;
+			this._bytesLoaded = 0;
+
+			while (i &lt; this._loadingList.length) {
+
+				//Was the file loaded, but we have no bytes (must have used the tag loader) and we have their details?
+				if (this._loadingList[i].bytesLoaded === 0 &amp;&amp; this._loadingList[i].success &amp;&amp; this._loadingList[i].detailsReceived) {
+					this._bytesLoaded += this._loadingList[i].size;
+
+				} else {
+					//Add the bytes loaded to the list 
+					this._bytesLoaded += this._loadingList[i].bytesLoaded;
+				}
+
+				//Calculate percentage
+				if (this._loadingList[i].complete) {
+					this._completedFiles++;
+				}
+
+				i++;
+			}
+
+			//Calculate the percentage depending on how accurate we can be.
+			if (this._calculateBytes) {
+				this.percentLoaded = (this._bytesLoaded / this._bytesTotal) * 100;
+			} else {
+				this.percentLoaded = (this._completedFiles / this._loadingList.length) * 100;
+			}
+
+		}
+
+		/**
+		* Executed by files when they have successfully been loaded.
+		* This method checks to see if the files are in the file queue, and dispatches the appropriate events.
+		* 
+		* @method _fileQueueUpdate
+		* @param file {Kiwi.Files.File} The file which has been recently loaded.
+		* @param [forceProgressCheck=false] {Boolean} If the progress of file loading should be checked, regardless of the file being in the queue or not.
+		* @since 1.2.0
+		* @private
+		*/
+		private _fileQueueUpdate(file: Kiwi.Files.File, forceProgressCheck: boolean = false) {
+
+			//If the file loaded is in the loadingList
+			if (!forceProgressCheck &amp;&amp; this._loadingList.indexOf(file) === -1) {
+				return;
+			}
+
+			//Update the file information.
+			this._updateFileListInformation();
+
+			//Dispatch progress event.
+			this.onQueueProgress.dispatch(this.percentLoaded, this.bytesLoaded, file);
+
+			if (this._completedFiles &gt;= this._loadingList.length) {
+				//Clear the file queue and dispatch the loaded event
+				this._queueLoading = false;
+				this.clearQueue();
+				this.onQueueComplete.dispatch();
+			}
+
+		}
+
+		/**
+		* Starts the loading process in the loadingQueue. 
+		* @method _startLoadingQueue
+		* @return {Boolean}
+		* @private
+		* @since 1.2.0
+		* @return {boolean} Whether the first file is loading
+		*/
+		private _startLoadingQueue(): boolean {
+
+			//Any files to load?
+			if (this._loadingQueue.length &lt;= 0) {
+				Kiwi.Log.log(&#x27;Kiwi.Files.Loader: No queued files to load.&#x27;, &#x27;#loading&#x27;);
+				return false;
+			}
+
+			//Is the first file currently loading?
+			if (this._loadingQueue[0].loading) {
+				return false;
+			}
+
+			//Attempt to load the file!
+			this._loadingQueue[0].onComplete.addOnce(this._queueFileComplete, this);
+			this._loadingQueue[0].load();
+			return true;
+		}
+
+		/**
+		* Executed when a file in the &#x27;loadingQueue&#x27; has been successfully loaded.
+		* Removes the file from the loadingQueue and executes the &#x27;_startLoadingQueue&#x27; to start loading the next file. 
+		* 
+		* @method _queueFileComplete
+		* @param file {Kiwi.Files.File}
+		* @since 1.2.0
+		* @private
+		*/
+		private _queueFileComplete(file: Kiwi.Files.File) {
+
+			//Remove from the loadingQueue
+			var index = this._loadingQueue.indexOf(file);
+			if (index === -1) {
+				Kiwi.Log.warn(&quot;Something has gone wrong? The file which executed this method doesn&#x27;t exist in the loadingQueue.&quot;, &#x27;#loading&#x27;, &#x27;#error&#x27;);
+				return;
+			}
+
+			this._loadingQueue.splice(index, 1);
+
+			//Start loading the next file
+			this._startLoadingQueue();
+		}
+
+		/**
+		* Starts loading a file which can be loaded in parallel.
+		* @method _startLoadingParallel
+		* @param params file {Kiwi.Files.File}
+		* @since 1.2.0
+		* @private 
+		*/
+		private _startLoadingParallel( file: Kiwi.Files.File) {
+
+			if (!file.loading) {
+				file.onComplete.add(this._parallelFileComplete, this);
+				file.load();
+			}
+
+		}
+		
+		/**
+		* Starts loading all files which can be loaded in parallel.
+		* @method _startLoadingAllParallel
+		* @since 1.2.0
+		* @private 
+		*/
+		private _startLoadingAllParallel() {
+
+			var i = 0,
+				file: Kiwi.Files.File;
+
+			while (i &lt; this._loadingParallel.length) {
+				this._startLoadingParallel(this._loadingParallel[i]);
+				i++;
+			}
+
+		}
+		
+		/**
+		* Executed when a file in the &#x27;loadingParallel&#x27; lsit has been successfully loaded.
+		* Removes the file from the list and get the fileQueue to check its progress.
+		* 
+		* @method _parallelFileComplete
+		* @param file {Kiwi.Files.File}
+		* @since 1.2.0
+		* @private 
+		*/
+		private _parallelFileComplete(file: Kiwi.Files.File) {
+
+			var index = this._loadingParallel.indexOf(file);
+			if (index === -1) {
+				Kiwi.Log.warn(&quot;Something has gone wrong? The file which executed this method doesn&#x27;t exist in the loadingParallel.&quot;, &#x27;#loading&#x27;, &#x27;#error&#x27;);
+				return;
+			}
+
+			this._loadingParallel.splice(index, 1);
+		}
+
+
+		/**
+		* -----------------------------
+		* Bytes Loaded Methods 
+		* -----------------------------
+		**/
+		
+		/**
+		* If the number of bytes for each file should be calculated before the queue starts loading.
+		* If true each file in the queue makes a XHR HEAD request first to get the total values.
+		*
+		* @property _calculateBytes
+		* @type Boolean
+		* @private 
+		*/
+		private _calculateBytes: boolean = false;
+
+		/**
+		* Callback for when the total number of bytes of the files in the file list has been calculated.
+		* 
+		* @property onQueueSizeCalculate
+		* @type any
+		* @private
+		*/
+		private onSizeCallback: any;
+		
+		/**
+		* Context that the onSizeCallback should be executed in.
+		* 
+		* @property onSizeContext
+		* @type any
+		* @private
+		*/
+		private onSizeContext: any;
+
+		/**
+		* The index of the current file in the filelist thats size is being retrieved.
+		* @property _currentFileIndex
+		* @type number
+		* @private
+		*/
+		private _currentFileIndex: number = 0;
+
+		/**
+		* Total file size (in bytes) of all files in the queue to be loaded. 
+		* 
+		* @property _bytesTotal
+		* @type Number
+		* @private
+		*/
+		private _bytesTotal: number = 0;
+
+		/**
+		* READ ONLY: Returns the total number of bytes for the files in the file queue.
+		* Only contains a value if you use the &#x27;calculateBytes&#x27; and are loading files
+		* OR if you use the &#x27;calculateQueuedSize&#x27; method.
+		* 
+		* @property bytesTotal
+		* @readOnly
+		* @default 0
+		* @since 1.2.0
+		* @type Number
+		* @public
+		*/
+		public get bytesTotal(): number {
+			return this._bytesTotal;
+		}
+
+		/**
+		* The number of bytes loaded of files in the file queue. 
+		* 
+		* @property _bytesLoaded
+		* @type Number
+		* @private 
+		*/
+		private _bytesLoaded: number = 0;
+
+		/**
+		* READ ONLY: Returns the total number of bytes for the files in the file queue.
+		*
+		* If you are using this make sure you set the &#x27;calculateBytes&#x27; property to true OR execute the &#x27;calculateQueuedSize&#x27; method. 
+		* Otherwise files that are loaded via tags will not be accurate!
+		* 
+		* @property bytesLoaded
+		* @readOnly
+		* @default 0
+		* @since 1.2.0
+		* @type Number
+		* @public
+		*/
+		public get bytesLoaded(): number {
+			return this._bytesLoaded;
+		}
+
+		/**
+		* Loops through the file queue and gets file information (filesize, ETag, filetype) for each.
+		* 
+		* To get accurate information about the bytesLoaded, bytesTotal, and the percentLoaded 
+		* set the &#x27;calculateBytes&#x27; property to true, as the loader will automatically execute this method before hand.
+		* 
+		* Can only be executed when the file queue is not currently loading.
+		* 
+		* @method calculateQueuedSize
+		* @param callback {any}
+		* @param [context=null] {any}
+		* @public
+		*/
+		public calculateQueuedSize(callback: any, context: any = null) {
+
+			//Is the queue currently loading files?
+			if (this._queueLoading) {
+				Kiwi.Log.warn(&#x27;Kiwi.Files.Loader: Cannot calculate the size of the files in the filequeue whilst they are loading. &#x27;);
+				return;
+			}
+
+			//Set the callbacks
+			this.onSizeCallback = callback;
+			this.onSizeContext = context;
+
+			// Start the process
+			this._currentFileIndex = 0;
+			this._bytesTotal = 0;
+			this._queueLoading = true;
+
+			this._calculateNextFileSize();
+		}
+
+		/**
+		* Checks to see if all the file sizes have been retrieved. 
+		* If so completes the &quot;calculateQueuedSize&quot; call.
+		* Otherwise requests the next file&#x27;s details.
+		*
+		* @method _calculateNextFileSize
+		* @private
+		*/
+		private _calculateNextFileSize() {
+
+			if (this._currentFileIndex &gt;= this._loadingList.length) {
+				this._queueLoading = false;
+				this.onSizeCallback.call(this.onSizeContext, this._bytesTotal);;
+				return;
+			}
+			
+			var file = this._loadingList[this._currentFileIndex];
+
+			//Have we already got the details for this file?
+			if (file.detailsReceived) {
+				this._detailsReceived();
+			} else {
+				var details = file.loadDetails(this._detailsReceived, this);
+
+				//Skip to the next file if the request could not be made.
+				//Shouldn&#x27;t happen.
+				if (!details) {
+					this._detailsReceived();
+				}
+			}
+
+		}
+
+		/**
+		* Executed when by &#x27;_calculateNextFileSize&#x27; when the files information has been retrieved.
+		* Adds its calculated size to the _bytesTotal and executes the &#x27;nextFileSize&#x27; method.
+		* 
+		* @method _detailsReceived
+		* @private 
+		*/
+		private _detailsReceived() {
+
+			var file = this._loadingList[this._currentFileIndex];
+
+			if (file.detailsReceived) {
+				this._bytesTotal += file.size;
+			}
+
+			this._currentFileIndex++;
+			this._calculateNextFileSize();
+
+		}
+
+
+		/**
+		* -----------------------------
+		* File Addition Methods
+		* -----------------------------
+		*/
+
+
+		/**
+		* Creates a new file for an image and adds a the file to loading queue. 
+		* @method addImage
+		* @param key {String} The key for the file.
+		* @param url {String} The url of the image to load.
+		* @param [width] {number} The width of the cell on the image to use once the image is loaded.
+		* @param [height] {number} The height of the cell on the image to use once the image is loaded.
+		* @param [offsetX] {number} An offset on the x axis of the cell.
+		* @param [offsetY] {number} An offset of the y axis of the cell.
+		* @param [storeAsGlobal=true] {boolean} If the image should be stored globally or not.
+		* @return {Kiwi.Files.File} The file which was created.
+		* @public
+		*/
+		public addImage(key: string, url: string, width?: number, height?: number, offsetX?: number, offsetY?: number, storeAsGlobal: boolean = true): Kiwi.Files.File {
+
+			var params:any = {
+				type: Kiwi.Files.File.IMAGE,
+				key: null,
+				url: null,
+				fileStore: this.game.fileStore,
+				metadata: {}
+			};
+
+			if ( Kiwi.Utils.Common.isObject(key) ) {
+				var p: any = key;
+
+				params.key = p.key;
+				params.url = p.url;
+				params.metadata = {
+					width: p.width,
+					height: p.height,
+					offsetX: p.offsetX,
+					offsetY: p.offsetY
+				};
+
+				if (p.xhrLoading) params.xhrLoading = p.xhrLoading;//forces blob loading
+				if (p.state) params.state = p.state;
+				if (p.tags) params.tags = p.tags;
+
+			} else {
+
+				if (!storeAsGlobal &amp;&amp; this.game.states.current) {
+					params.state = this.game.states.current;
+				}
+
+				params.key = key;
+				params.url = url;
+				params.metadata = {
+					width: width,
+					height: height,
+					offsetX: offsetX,
+					offsetY: offsetY
+				};
+
+			}
+
+			var file: Kiwi.Files.File = new Kiwi.Files.TextureFile(this.game, params);
+			this.addFileToQueue(file);
+
+			return file;
+		}
+
+		/**
+		* Creates a new file for a spritesheet and adds the file to the loading queue.
+		* @method addSpriteSheet
+		* @param key {String} The key for the file.
+		* @param url {String} The url of the image to load.
+		* @param frameWidth {number} The width of a single cell in the spritesheet.
+		* @param frameHeight {number} The height of a single cell in the spritesheet.
+		* @param [numCells] {number} The number of cells that are in this spritesheet.
+		* @param [rows] {number} The number of cells that are in a row.
+		* @param [cols] {number} The number of cells that are in a column.
+		* @param [sheetOffsetX] {number} The offset of the whole spritesheet on the x axis.
+		* @param [sheetOffsetY] {number} The offset of the whole spritesheet on the y axis.
+		* @param [cellOffsetX] {number} The spacing between each cell on the x axis.
+		* @param [cellOffsetY] {number} The spacing between each cell on the y axis.
+		* @param [storeAsGlobal=true] {boolean} 
+		* @return {Kiwi.Files.File} The file which was created.
+		* @public
+		*/
+		public addSpriteSheet(key: string, url: string, frameWidth: number, frameHeight: number, numCells?: number, rows?: number, cols?: number, sheetOffsetX?: number, sheetOffsetY?: number, cellOffsetX?: number, cellOffsetY?: number, storeAsGlobal: boolean = true) {
+
+			var params: any = {
+				type: Kiwi.Files.File.SPRITE_SHEET,
+				key: null,
+				url: null,
+				fileStore: this.game.fileStore,
+				metadata: {}
+			};
+
+
+			if (Kiwi.Utils.Common.isObject(key)) {
+				var p: any = key;
+
+				params.key = p.key;
+				params.url = p.url;
+				params.metadata = {
+					frameWidth: p.frameWidth,
+					frameHeight: p.frameHeight,
+					numCells: p.numCells,
+					rows: p.rows,
+					cols: p.cols,
+					sheetOffsetX: p.sheetOffsetX,
+					sheetOffsetY: p.sheetOffsetY,
+					cellOffsetX: p.cellOffsetX,
+					cellOffsetY: p.cellOffsetY
+				};
+
+				if (p.xhrLoading) params.xhrLoading = p.xhrLoading;//forces blob loading
+				if (p.state) params.state = p.state;
+				if (p.tags) params.tags = p.tags;
+
+			} else {
+
+				if (!storeAsGlobal &amp;&amp; this.game.states.current) {
+					params.state = this.game.states.current;
+				}
+
+				params.key = key;
+				params.url = url;
+				params.metadata = {
+					frameWidth: frameWidth,
+					frameHeight: frameHeight,
+					numCells: numCells,
+					rows: rows,
+					cols: cols,
+					sheetOffsetX: sheetOffsetX,
+					sheetOffsetY: sheetOffsetY,
+					cellOffsetX: cellOffsetX,
+					cellOffsetY: cellOffsetY
+				};
+
+			}
+
+
+			var file = new Kiwi.Files.TextureFile(this.game, params);
+			this.addFileToQueue(file);
+
+			return file;
+		}
+
+		/**
+		* Creates new file&#x27;s for loading a texture atlas and adds those files to the loading queue.
+		* @method addTextureAtlas
+		* @param key {String} The key for the image file.
+		* @param imageUrl {String} The url of the image to load.
+		* @param jsonID {String} A key for the JSON file.
+		* @param jsonURL {String} The url of the json file to load.
+		* @param [storeAsGlobal=true] {Boolean} If hte files should be stored globally or not.
+		* @return {Kiwi.Files.File} The file which was created.
+		* @public
+		*/
+		public addTextureAtlas(key: string, imageURL: string, jsonID: string, jsonURL: string, storeAsGlobal: boolean = true) {
+
+			var textureParams: any = {
+				type: Kiwi.Files.File.TEXTURE_ATLAS,
+				key: key,
+				url: imageURL,
+				fileStore: this.game.fileStore,
+				metadata: {
+					jsonID: jsonID
+				}
+			};
+			var jsonParams: any = {
+				type: Kiwi.Files.File.JSON,
+				key: jsonID,
+				url: jsonURL,
+				fileStore: this.game.fileStore,
+				metadata: {
+					imageID: key
+				}
+			};
+
+			if (!storeAsGlobal &amp;&amp; this.game.states.current) {
+				textureParams.state = this.game.states.current;
+				jsonParams.state = this.game.states.current;
+			}
+
+			if (Kiwi.Utils.Common.isObject(key)) {
+				var p: any = key;
+
+				textureParams.key = p.textureAtlasKey;
+				textureParams.url = p.textureAtlasURL;
+				jsonParams.key = p.jsonKey;
+				jsonParams.url = p.jsonURL;
+
+				textureParams.metadata.jsonID = jsonParams.key;
+				jsonParams.metadata.imageID = textureParams.key;
+
+				if (p.state) {
+					textureParams.state = p.state;
+					jsonParams.state = p.state;
+				}
+
+				if (p.xhrLoading) textureParams.xhrLoading = p.xhrLoading; //forces blob loading
+				if (p.tags) {
+					jsonParams.tags = p.tags;
+					textureParams.tags = p.tags;
+				}
+
+			}
+
+			var imageFile = new Kiwi.Files.TextureFile(this.game, textureParams);
+			var jsonFile = new Kiwi.Files.DataFile(this.game, jsonParams);
+
+			this.addFileToQueue(imageFile);
+			this.addFileToQueue(jsonFile);
+
+			return imageFile;
+		}
+
+		/**
+		* Creates a new File to store a audio piece. 
+		* This method firstly checks to see if the AUDIO file being loaded is supported or not by the browser/device before adding it to the loading queue.
+		* You can override this behaviour and tell the audio data to load even if not supported by setting the &#x27;onlyIfSupported&#x27; boolean to false.
+		* Also you can now pass an array of filepaths, and the first audio filetype that is supported will be loaded.
+		*
+		* @method addAudio
+		* @param key {String} The key for the audio file.
+		* @param url {String} The url of the audio to load. You can pass an array of URLs, in which case the first supported audio filetype in the array will be loaded.
+		* @param [storeAsGlobal=true] {Boolean} If the file should be stored globally.
+		* @param [onlyIfSupported=true] {Boolean} If the audio file should only be loaded if Kiwi detects that the audio file could be played. 
+		* @return {Kiwi.Files.File} The file which was created.
+		* @public
+		*/
+		public addAudio(key: string, url: any, storeAsGlobal: boolean = true, onlyIfSupported: boolean = true) {
+
+			var params = {
+				type: Kiwi.Files.File.AUDIO,
+				key: null,
+				url: null,
+				state: null,
+				fileStore: this.game.fileStore
+			};
+
+			if (Kiwi.Utils.Common.isObject(key)) {
+				params = (&lt;any&gt;key);
+				params.fileStore = this.game.fileStore;
+
+			} else {
+				params.key = key;
+				params.url = url;
+
+				if (!storeAsGlobal &amp;&amp; this.game.states.current) {
+					params.state = this.game.states.current;
+				}
+
+			}
+
+			var i = 0,
+				urls, file;
+
+			//If it is a string then try to load that file
+			if (Kiwi.Utils.Common.isString(params.url)) {
+				urls = [params.url];
+			} else {
+				urls = params.url;
+			}
+
+			while (i &lt; urls.length) {
+
+				params.url = urls[i]
+				file = this._attemptToAddAudio(params, onlyIfSupported);
+				if (file) {
+					return file;
+				}
+
+				i++;
+			}
+
+			return null;
+		}
+
+		/**
+		* This method firstly checks to see if the AUDIO file being loaded is supported or not by the browser/device before adding it to the loading queue.
+		* Returns a boolean if the audio file was successfully added or not to the file directory.
+		* @method _attemptToAddAudio
+		* @param params {Object} 
+		*   @param params.key {String} The key for the audio file.
+		*   @param params.url {String} The url of the audio to load. 
+		*   @param [params.state=true] {Kiwi.State} The state this file should be for.
+		*   @param [params.fileStore] {Kiwi.Files.FileStore} 
+		* @param [onlyIfSupported=true] {Boolean} If the audio file should only be loaded if Kiwi detects that the audio file could be played. 
+		* @return {Kiwi.Files.File} The file which was created.
+		* @private
+		*/
+		private _attemptToAddAudio(params:any, onlyIfSupported: boolean): Kiwi.Files.File {
+
+			var file = new Kiwi.Files.AudioFile(this.game, params);
+			var support = false;
+
+			switch (file.extension) {
+				case &#x27;mp3&#x27;:
+					support = Kiwi.DEVICE.mp3;
+					break;
+
+				case &#x27;ogg&#x27;:
+				case &#x27;oga&#x27;:
+					support = Kiwi.DEVICE.ogg;
+					break;
+
+				case &#x27;m4a&#x27;:
+					support = Kiwi.DEVICE.m4a;
+					break;
+
+				case &#x27;wav&#x27;:
+				case &#x27;wave&#x27;:
+					support = Kiwi.DEVICE.wav;
+					break;
+			}
+
+			if (support == true || onlyIfSupported == false) {
+				this.addFileToQueue(file);
+				return file;
+			} else {
+				Kiwi.Log.error(&#x27;Kiwi.Loader: Audio Format not supported on this Device/Browser.&#x27;, &#x27;#audio&#x27;, &#x27;#unsupported&#x27;);
+				return null;
+			}
+
+		}
+
+		/**
+		* Creates a new File to store JSON and adds it to the loading queue.
+		* @method addJSON
+		* @param key {String} The key for the file.
+		* @param url {String} The url to the json file.
+		* @param [storeAsGlobal=true] {Boolean} If the file should be stored globally.
+		* @return {Kiwi.Files.File} The file which was created.
+		* @public
+		*/
+		public addJSON(key: string, url: string, storeAsGlobal: boolean = true) {
+
+			var params: any = {
+				type: Kiwi.Files.File.JSON,
+				key: key, 
+				url: url,
+				fileStore: this.game.fileStore
+			};
+
+			if (Kiwi.Utils.Common.isObject(key)) {
+				var p: any = key;
+
+				params.key = p.key;
+				params.url = p.url;
+
+				if (p.parse) params.parse = p.parse;
+				if (p.state) params.state = p.state;
+				if (p.tags) params.tags = p.tags;
+
+			} else {
+
+				if (!storeAsGlobal &amp;&amp; this.game.states.current) {
+					params.state = this.game.states.current;
+				}
+
+			}
+
+			var file = new Kiwi.Files.DataFile(this.game, params);
+			this.addFileToQueue(file);
+			return file;
+
+		}
+
+		/**
+		* Creates a new File to store XML and adds it to the loading queue.
+		* @method addXML
+		* @param key {String} The key for the file.
+		* @param url {String} The url to the xml file.
+		* @param [storeAsGlobal=true] {Boolean} If the file should be stored globally.
+		* @return {Kiwi.Files.File} The file which was created.
+		* @public
+		*/
+		public addXML(key: string, url: string, storeAsGlobal: boolean = true) {
+			
+			var params:any = {
+				type: Kiwi.Files.File.XML,
+				key: key,
+				url: url,
+				fileStore: this.game.fileStore
+			};
+
+			if (Kiwi.Utils.Common.isObject(key)) {
+				var p: any = key;
+
+				params.key = p.key;
+				params.url = p.url;
+
+				if (p.parse) params.parse = p.parse;
+				if (p.state) params.state = p.state;
+				if (p.tags) params.tags = p.tags;
+
+			} else {
+
+				if (!storeAsGlobal &amp;&amp; this.game.states.current) {
+					params.state = this.game.states.current;
+				}
+
+			}
+
+			var file = new Kiwi.Files.DataFile(this.game, params);
+			this.addFileToQueue(file);
+			return file;
+
+		}
+
+		/**
+		* Creates a new File for a Binary file and adds it to the loading queue.
+		* @method addBinaryFile
+		* @param key {String} The key for the file.
+		* @param url {String} The url to the Binary file.
+		* @param [storeAsGlobal=true] {Boolean} If the file should be stored globally.
+		* @return {Kiwi.Files.File} The file which was created.
+		* @public
+		*/
+		public addBinaryFile(key: string, url: string, storeAsGlobal: boolean = true) {
+
+			var params: any = {
+				type: Kiwi.Files.File.BINARY_DATA,
+				key: key,
+				url: url,
+				fileStore: this.game.fileStore
+			};
+
+			if (Kiwi.Utils.Common.isObject(key)) {
+				var p: any = key;
+
+				params.key = p.key;
+				params.url = p.url;
+
+				if (p.parse) params.parse = p.parse;
+				if (p.state) params.state = p.state;
+				if (p.tags) params.tags = p.tags;
+
+			} else {
+
+				if (!storeAsGlobal &amp;&amp; this.game.states.current) {
+					params.state = this.game.states.current;
+				}
+
+			}
+
+			var file = new Kiwi.Files.DataFile(this.game, params);
+			this.addFileToQueue(file);
+			return file;
+
+		}
+
+		/**
+		* Creates a new File to store a text file and adds it to the loading queue.
+		* @method addTextFile
+		* @param key {String} The key for the file.
+		* @param url {String} The url to the text file.
+		* @param [storeAsGlobal=true] {Boolean} If the file should be stored globally.
+		* @return {Kiwi.Files.File} The file which was created.
+		* @public
+		*/
+		public addTextFile(key: string, url: string, storeAsGlobal: boolean = true) {
+
+			var params: any = {
+				type: Kiwi.Files.File.TEXT_DATA,
+				key: key,
+				url: url,
+				fileStore: this.game.fileStore
+			};
+
+			if (Kiwi.Utils.Common.isObject(key)) {
+				var p: any = key;
+
+				params.key = p.key;
+				params.url = p.url;
+
+				if (p.parse) params.parse = p.parse;
+				if (p.state) params.state = p.state;
+				if (p.tags) params.tags = p.tags;
+
+			} else {
+
+				if (!storeAsGlobal &amp;&amp; this.game.states.current) {
+					params.state = this.game.states.current;
+				}
+
+			}
+
+			var file = new Kiwi.Files.DataFile(this.game, params);
+			this.addFileToQueue(file);
+			return file;
+
+		}
+
+		/**
+		* Flags this loader for garbage collection. Only use this method if you are SURE you will no longer need it. 
+		* Otherwise it is best to leave it alone.
+		* 
+		* @method destroy
+		* @public
+		*/
+		public destroy() {
+
+			this.onQueueComplete.dispose();
+			this.onQueueProgress.dispose();
+
+			delete this.game;
+
+			delete this.onQueueComplete;
+			delete this.onQueueProgress;
+
+			var i = 0;
+			while (i &lt; this._loadingList.length) {
+				this._loadingList[i].destroy();
+				i++;
+			}
+			this._loadingList = [];
+
+			var i = 0;
+			while (i &lt; this._loadingQueue.length) {
+				this._loadingQueue[i].destroy();
+				i++;
+			}
+			this._loadingQueue = [];
+
+			var i = 0;
+			while (i &lt; this._loadingParallel.length) {
+				this._loadingParallel[i].destroy();
+				i++;
+			}
+			this._loadingParallel = [];
+
+
+		}
+
+		
+		/**
+		* -----------------------
+		* Deprecated - Functionality exists. Maps to its equalvent
+		* -----------------------
+		**/
+
+
+		/**
+		* Initialise the properities that are needed on this loader.
+		* Recommended you use the &#x27;onQueueProgress&#x27; / &#x27;onQueueComplete&#x27; signals instead.
+		* 
+		* @method init
+		* @param [progress=null] {Any} Progress callback method.
+		* @param [complete=null] {Any} Complete callback method.
+		* @param [calculateBytes=false] {boolean} 
+		* @deprecated Deprecated as of 1.2.0
+		* @public
+		*/
+		public init(progress: any = null, complete: any = null, calculateBytes: boolean=null) {
+
+			if (calculateBytes !== null) {
+				this._calculateBytes = calculateBytes;
+			} 
+
+			if (progress !== null) {
+				this.onQueueProgress.addOnce( progress );
+			}
+
+			if (complete !== null) {
+				this.onQueueComplete.addOnce( complete );
+			}
+
+		}
+
+		/**
+		* Loops through all of the files that need to be loaded and start the load event on them. 
+		* @method startLoad
+		* @deprecated Use &#x27;start&#x27; instead. Deprecated as of 1.2.0
+		* @public
+		*/
+		public startLoad() {
+			this.start();
+		}
+
+		/**
+		* Returns a percentage of the amount that has been loaded so far.
+		* @method getPercentLoaded
+		* @return {Number}
+		* @deprecated Use &#x27;percentLoaded&#x27; instead. Deprecated as of 1.2.0
+		* @public
+		*/
+		public getPercentLoaded(): number {
+			return this.percentLoaded;
+		}
+
+
+		/**
+		* Returns a boolean indicating if everything in the loading que has been loaded or not.
+		* @method complete
+		* @return {boolean}
+		* @deprecated Use &#x27;percentLoaded&#x27; instead. Deprecated as of 1.2.0
+		* @public
+		*/
+		public complete(): boolean {
+			return ( this.percentLoaded === 100 );
+		}
+
+		/**
+		* Quick way of getting / setting the private variable &#x27;calculateBytes&#x27;
+		* To be made into a public variable once removed.
+		* @method calculateBytes
+		* @param [value] {boolean}
+		* @return {boolean}
+		* @public
+		*/
+		public calculateBytes(value?: boolean): boolean {
+
+			if (typeof value !== &quot;undefined&quot;) {
+				this._calculateBytes = value;
+			}
+
+			return this._calculateBytes;
+		}
+
+		/**
+		* Returns the total number of bytes that have been loaded so far from files in the file queue.
+		* 
+		* @method getBytesLoaded
+		* @return {Number}
+		* @readOnly
+		* @deprecated Use &#x27;bytesLoaded&#x27; instead. Deprecated as of 1.2.0
+		* @public
+		*/
+		public getBytesLoaded(): number {
+
+			return this.bytesLoaded;
+		}
+
+	}
 
 }
 
diff --git a/docs/files/src_file_TextureFile.ts.html b/docs/files/src_file_TextureFile.ts.html
index ddaeb9b..fe11ad0 100644
--- a/docs/files/src_file_TextureFile.ts.html
+++ b/docs/files/src_file_TextureFile.ts.html
@@ -370,168 +370,169 @@ <h1 class="file-heading">File: src/file/TextureFile.ts</h1>
 * @submodule Files 
 * 
 */
- 
+
 module Kiwi.Files {
-    
-    /**
-    * TextureFile which contains settings, loading, and processing information for textures/images in Kiwi.
-    *
-    * Contains two methods of loading. XHR + arraybuffer and also tag loading.
-    *
-    * @class TextureFile
-    * @namespace Kiwi.Files
-    * @extends Kiwi.Files.File
-    * @since 1.2.0
-    * @constructor
-    * @param game {Kiwi.Game} The game that this file is for
-    * @param params {Object} Options for this file.
-    *   @param params.key {String} User defined name for this file. This would be how the user would access it in the file store. 
-    *   @param params.url {String} Location of the file to be loaded.
-    *   @param {Object} [params.metadata={}] Any metadata to be associated with the file. 
-    *   @param [params.state=null] {Kiwi.State} The state that this file belongs to. Used for defining global assets vs local assets.
-    *   @param [params.fileStore=null] {Kiwi.Files.FileStore} The filestore that this file should be save in automatically when loaded.
-    *   @param [params.type=UNKNOWN] {Number} The type of file this is. 
-    *   @param [params.tags] {Array} Any tags to be associated with this file.
-    *   @param [params.xhrLoading=false] {Boolean} If xhr + arraybuffer loading should be used instead of tag loading. 
-    * @return {Kiwi.Files.TextureFile} 
-    *
-    */
-    export class TextureFile extends Kiwi.Files.File {
-
-        constructor(game: Kiwi.Game, params: any = {}) {
-            super(game, params);
-
-            if (params.xhrLoading) { 
-                this.useTagLoader = false;
-                this._loadInParallel = false;
-            } else {
-                this.useTagLoader = true;
-                this._loadInParallel = true;
-            }
-
-            if (!Kiwi.Utils.Common.isUndefined(params.crossOrigin) ) {
-                this.crossOrigin = params.crossOrigin;
-            }
-
-        }
-
-        /**
-        * Returns the type of this object
-        * @method objType
-        * @return {String} &quot;TextureFile&quot;
-        * @public
-        */
-        public objType() {
-            return &quot;TextureFile&quot;;
-        }
-
-        /**
-        * For tag loading only. The crossOrigin value applied to loaded images. Very often this needs to be set to &#x27;anonymous&#x27;
-        * @property crossOrigin
-        * @type String
-        * @default &#x27;&#x27;
-        * @public
-        */
-        public crossOrigin: string = &#x27;&#x27;;
-
-        //this.dataType === File.IMAGE || this.dataType === File.SPRITE_SHEET || this.dataType === File.TEXTURE_ATLAS
-
-        /**
-        * Initialises the loading method.
-        * Tagloading is the default but also supports XHR + arraybuffer.
-        * @method _load
-        * @protected
-        */
-        protected _load() {
-
-            this.attemptCounter++;
-
-            if (this.useTagLoader) {
-                this.tagLoader();
-            } else {
-                this.xhrLoader( &#x27;GET&#x27;, &#x27;arraybuffer&#x27; );
-            }
-
-        }
-
-        /**
-        * Contains the functionality for tag loading
-        * @method tagLoader
-        * @private
-        */
-        private tagLoader() {
-
-            this.data = new Image();
-            this.data.src = this.URL;
-
-            if (this.crossOrigin) {
-                this.data.crossOrigin = this.crossOrigin;
-            }
-
-            this.data.onload = () =&gt; this.loadSuccess();
-            this.data.onerror = (event) =&gt; this.loadError(event);
-
-        }
-
-        /**
-        * Gets the response data (which is an arraybuffer), creates a Blob from it 
-        * and creates an objectURL from it.
-        *
-        * @method processXhr
-        * @param response {Any} The data stored in the &#x27;xhr.response&#x27; tag
-        * @protected
-        */
-        protected processXhr( response:any ) {
-            
-            this.data = document.createElement(&#x27;img&#x27;);
-            var blob = new Blob([response], { type: this.type });
-            
-            if (window[&#x27;URL&#x27;]) {
-                this.data.src = window[&#x27;URL&#x27;].createObjectURL(blob);
-            } else if (window[&#x27;webkitURL&#x27;]) {
-                this.data.src = window[&#x27;webkitURL&#x27;].createObjectURL(blob);
-            }
-
-            this.loadSuccess();
-
-        }
-
-        /**
-        * Revokes the object url that was added to the window when creating the image. 
-        * Also tells the File that the loading is now complete. 
-        * 
-        * @method revoke
-        * @private
-        */
-        private revoke() {
-
-            if (window[&#x27;URL&#x27;]) {
-                window[&#x27;URL&#x27;].revokeObjectURL(this.data.src);
-            } else if (window[&#x27;webkitURL&#x27;]) {
-                window[&#x27;webkitURL&#x27;].revokeObjectURL(this.data.src);
-            }
-
-        }
-        
-        /**
-        * Destroys all external object references on this object.
-        * @method destroy
-        * @since 1.2.0
-        * @public
-        */
-        public destroy() {
-
-            if (!this.useTagLoader) {
-                this.revoke();
-            }
-
-            super.destroy();
-
-        }
-
-    }
-
-}  
+
+	/**
+	* TextureFile which contains settings, loading, and processing information for textures/images in Kiwi.
+	*
+	* Contains two methods of loading. XHR + arraybuffer and also tag loading.
+	*
+	* @class TextureFile
+	* @namespace Kiwi.Files
+	* @extends Kiwi.Files.File
+	* @since 1.2.0
+	* @constructor
+	* @param game {Kiwi.Game} The game that this file is for
+	* @param params {Object} Options for this file.
+	*   @param params.key {String} User defined name for this file. This would be how the user would access it in the file store. 
+	*   @param params.url {String} Location of the file to be loaded.
+	*   @param {Object} [params.metadata={}] Any metadata to be associated with the file. 
+	*   @param [params.state=null] {Kiwi.State} The state that this file belongs to. Used for defining global assets vs local assets.
+	*   @param [params.fileStore=null] {Kiwi.Files.FileStore} The filestore that this file should be save in automatically when loaded.
+	*   @param [params.type=UNKNOWN] {Number} The type of file this is. 
+	*   @param [params.tags] {Array} Any tags to be associated with this file.
+	*   @param [params.xhrLoading=false] {Boolean} If xhr + arraybuffer loading should be used instead of tag loading. 
+	* @return {Kiwi.Files.TextureFile} 
+	*
+	*/
+	export class TextureFile extends Kiwi.Files.File {
+
+		constructor(game: Kiwi.Game, params: any = {}) {
+			super(game, params);
+
+			if (params.xhrLoading) { 
+				this.useTagLoader = false;
+				this._loadInParallel = false;
+			} else {
+				this.useTagLoader = true;
+				this._loadInParallel = true;
+			}
+
+			if (!Kiwi.Utils.Common.isUndefined(params.crossOrigin) ) {
+				this.crossOrigin = params.crossOrigin;
+			}
+
+		}
+
+		/**
+		* Returns the type of this object
+		* @method objType
+		* @return {String} &quot;TextureFile&quot;
+		* @public
+		*/
+		public objType() {
+			return &quot;TextureFile&quot;;
+		}
+
+		/**
+		* For tag loading only. The crossOrigin value applied to loaded images. Very often this needs to be set to &#x27;anonymous&#x27;
+		* @property crossOrigin
+		* @type String
+		* @default &#x27;&#x27;
+		* @public
+		*/
+		public crossOrigin: string = &#x27;&#x27;;
+
+		//this.dataType === File.IMAGE || this.dataType === File.SPRITE_SHEET || this.dataType === File.TEXTURE_ATLAS
+
+		/**
+		* Initialises the loading method.
+		* Tagloading is the default but also supports XHR + arraybuffer.
+		* @method _load
+		* @protected
+		*/
+		protected _load() {
+
+			this.attemptCounter++;
+
+			if (this.useTagLoader) {
+				this.tagLoader();
+			} else {
+				this.xhrLoader( &#x27;GET&#x27;, &#x27;arraybuffer&#x27; );
+			}
+
+		}
+
+		/**
+		* Contains the functionality for tag loading
+		* @method tagLoader
+		* @private
+		*/
+		private tagLoader() {
+
+			this.data = new Image();
+			this.data.src = this.URL;
+
+			if (this.crossOrigin) {
+				this.data.crossOrigin = this.crossOrigin;
+			}
+
+			this.data.onload = () =&gt; this.loadSuccess();
+			this.data.onerror = (event) =&gt; this.loadError(event);
+
+		}
+
+		/**
+		* Gets the response data (which is an arraybuffer), creates a Blob from it 
+		* and creates an objectURL from it.
+		*
+		* @method processXhr
+		* @param response {Any} The data stored in the &#x27;xhr.response&#x27; tag
+		* @protected
+		*/
+		protected processXhr( response:any ) {
+			
+			this.data = document.createElement(&#x27;img&#x27;);
+			var blob = new Blob([response], { type: this.type });
+			
+			if (window[&#x27;URL&#x27;]) {
+				this.data.src = window[&#x27;URL&#x27;].createObjectURL(blob);
+			} else if (window[&#x27;webkitURL&#x27;]) {
+				this.data.src = window[&#x27;webkitURL&#x27;].createObjectURL(blob);
+			}
+
+			this.loadSuccess();
+
+		}
+
+		/**
+		* Revokes the object url that was added to the window when creating the image. 
+		* Also tells the File that the loading is now complete. 
+		* 
+		* @method revoke
+		* @private
+		*/
+		private revoke() {
+
+			if (window[&#x27;URL&#x27;]) {
+				window[&#x27;URL&#x27;].revokeObjectURL(this.data.src);
+			} else if (window[&#x27;webkitURL&#x27;]) {
+				window[&#x27;webkitURL&#x27;].revokeObjectURL(this.data.src);
+			}
+
+		}
+
+		/**
+		* Destroys all external object references on this object.
+		* @method destroy
+		* @since 1.2.0
+		* @public
+		*/
+		public destroy() {
+
+			if (!this.useTagLoader) {
+				this.revoke();
+			}
+
+			super.destroy();
+
+		}
+
+	}
+
+}
+
     </pre>
 </div>
 
diff --git a/docs/files/src_gameobjects_Sprite.ts.html b/docs/files/src_gameobjects_Sprite.ts.html
index 781fdd3..03bf7ad 100644
--- a/docs/files/src_gameobjects_Sprite.ts.html
+++ b/docs/files/src_gameobjects_Sprite.ts.html
@@ -370,179 +370,178 @@ <h1 class="file-heading">File: src/gameobjects/Sprite.ts</h1>
 * @module Kiwi
 * @submodule GameObjects 
 * @main GameObjects
-*/ 
+*/
 module Kiwi.GameObjects {
 
-    /**
-    * A Sprite is a general purpose GameObject that contains majority of the functionality that is needed/would be wanted and as such should be used only when you are wanting a GameObject with a lot of interaction. When creating a Sprite you pass to it as TextureAtlas (for the image you want to render), now if that Texture Atlas isn&#x27;t a SINGLE_IMAGE then the Sprite will have an AnimationManager Component to handle any SpriteSheet animations you need.
-    *
-    * @class Sprite
-    * @namespace Kiwi.GameObjects
-    * @extends Kiwi.Entity
-    * @constructor
-    * @param state {Kiwi.State} The state that this sprite belongs to
-    * @param atlas {Kiwi.Textures.TextureAtlas} The texture you want to apply to this entity 
-    * @param [x=0] {Number} The sprites initial coordinates on the x axis.
-    * @param [y=0] {Number} The sprites initial coordinates on the y axis.
-    * @param [enableInput=false] {boolean} If the input component should be enabled or not.
-    * @return {Sprite}
-    */
-    export class Sprite extends Kiwi.Entity {
-         
-        constructor(state: Kiwi.State, atlas: Kiwi.Textures.TextureAtlas, x: number = 0, y: number = 0, enableInput: boolean = false) {
-
-            super(state, x, y);
-
-            //Texture atlas error check
-            if (typeof atlas == &quot;undefined&quot;) {
-                Kiwi.Log.error(&#x27;A Texture Atlas was not passed when instantiating a new Sprite.&#x27;, &#x27;#sprite&#x27;, &#x27;#texture&#x27;);
-                this.visible = false;
-                this.active = false;
-                return;
-            } 
-
-            if (this.game.renderOption === Kiwi.RENDERER_WEBGL) {
-                this.glRenderer = this.game.renderer.requestSharedRenderer(&quot;TextureAtlasRenderer&quot;);
-            }
-
-            this.atlas = atlas;
-            this.name = this.atlas.name;
-            this.cellIndex = this.atlas.cellIndex;
-
-            //may need to add an optional other cell frame index here
-            this.width = atlas.cells[this.cellIndex].w;
-            this.height = atlas.cells[this.cellIndex].h;
-            this.transform.rotPointX = this.width / 2;
-            this.transform.rotPointY = this.height / 2;
-                
-
-            //Create the components needed
-            this.box = this.components.add(new Kiwi.Components.Box(this, x, y, this.width, this.height));
-            this.input = this.components.add(new Kiwi.Components.Input(this, this.box, enableInput));
-
-                
-            //Check to see if this sprite could be animated or not
-            if (this.atlas.type === Kiwi.Textures.TextureAtlas.SINGLE_IMAGE) {
-                this.animation = null;
-                this._isAnimated = false;
-            } else {
-                this.animation = this.components.add(new Kiwi.Components.AnimationManager(this));
-                this._isAnimated = true;
-            }
-            
-        }
-
-        /**
-        * Returns the type of object that this is.
-        * @method objType
-        * @return {string} &quot;Sprite&quot;
-        * @public
-        */
-        public objType():string {
-            return &quot;Sprite&quot;;
-        }
-        
-        /**
-        * Indicates whether or not this sprite is animated or not. 
-        * This sprite will not be animated if the texture used is a SINGLE_IMAGE.
-        * @property _isAnimated
-        * @type boolean
-        * @private
-        */
-        private _isAnimated: boolean;
-
-        /** 
-	    * The animation component that allows you to create a animation with spritesheets/texture atlas&#x27;s. 
-        * Note: If the atlas that was added is of type Kiwi.Textures.TextureAtlas.SINGLE_IMAGE then no animation component will be created.
-	    * @property animation
-	    * @type Kiwi.Components.AnimationManager
-        * @public
-	    */
-        public animation: Kiwi.Components.AnimationManager;
-        
-        /** 
-        * The box component that controls the bounding box around this Game Object
-        * @property box
-        * @type Kiwi.Components.Box
-        * @public
-        */
-        public box: Kiwi.Components.Box;
-
-        /** 
-	    * The Input component controls the user interaction with this Game Object
-	    * @property input
-	    * @type Kiwi.Components.Input
-        * @public
-	    */
-        public input: Kiwi.Components.Input;
-        
-        /**
-	    * Called by parent when its update loop gets executed.
-	    * @method update
-        * @public
-	    */
-        public update() {
-            
-            super.update();
-
-            if (this._isAnimated) {
-                this.width = this.atlas.cells[this.cellIndex].w;
-                this.height = this.atlas.cells[this.cellIndex].h;
-
-            }    
-
-        }
-
-        /**
-	    * Renders the GameObject using Canvas. 
-	    * @method render
-        * @param {Kiwi.Camera} camera
-        * @public
-	    */
-        public render(camera:Kiwi.Camera) {
-           
-            super.render(camera);
-            
-            //if it is would even be visible.
-            if (this.alpha &gt; 0) {
-                
-                var ctx: CanvasRenderingContext2D = this.game.stage.ctx;
-                ctx.save();
-
-                if (this.alpha &gt; 0 &amp;&amp; this.alpha &lt;= 1) {
-                    ctx.globalAlpha = this.alpha;
-                }
-
-                //get entity/view matrix
-                var t: Kiwi.Geom.Transform = this.transform;
-                var m: Kiwi.Geom.Matrix = t.getConcatenatedMatrix();
-
-                ctx.transform(m.a, m.b, m.c, m.d, m.tx, m.ty);
-                             
-                var cell = this.atlas.cells[this.cellIndex];
-                ctx.drawImage(this.atlas.image, cell.x, cell.y, cell.w, cell.h, -t.rotPointX, -t.rotPointY, cell.w, cell.h);
-                ctx.restore();
-                    
-            }
-        
-        }
-
-        /**
-	    * Renders the GameObject using WebGL. 
-	    * @method renderGL
-        * @param {WebGLRenderingContext} gl
-        * @param {Kiwi.Camera} camera
-        * @param {Object} params
-        * @public
-	    */
-
-        public renderGL(gl: WebGLRenderingContext, camera: Kiwi.Camera, params: any = null) {
-            (&lt;Kiwi.Renderers.TextureAtlasRenderer&gt;this.glRenderer).addToBatch(gl, this, camera);
-        }
-
-    }
+	/**
+	* A Sprite is a general purpose GameObject that contains majority of the functionality that is needed/would be wanted and as such should be used only when you are wanting a GameObject with a lot of interaction. When creating a Sprite you pass to it as TextureAtlas (for the image you want to render), now if that Texture Atlas isn&#x27;t a SINGLE_IMAGE then the Sprite will have an AnimationManager Component to handle any SpriteSheet animations you need.
+	*
+	* @class Sprite
+	* @namespace Kiwi.GameObjects
+	* @extends Kiwi.Entity
+	* @constructor
+	* @param state {Kiwi.State} The state that this sprite belongs to
+	* @param atlas {Kiwi.Textures.TextureAtlas} The texture you want to apply to this entity 
+	* @param [x=0] {Number} The sprites initial coordinates on the x axis.
+	* @param [y=0] {Number} The sprites initial coordinates on the y axis.
+	* @param [enableInput=false] {boolean} If the input component should be enabled or not.
+	* @return {Sprite}
+	*/
+	export class Sprite extends Kiwi.Entity {
+
+		constructor(state: Kiwi.State, atlas: Kiwi.Textures.TextureAtlas, x: number = 0, y: number = 0, enableInput: boolean = false) {
+
+			super(state, x, y);
+
+			//Texture atlas error check
+			if (typeof atlas == &quot;undefined&quot;) {
+				Kiwi.Log.error(&#x27;A Texture Atlas was not passed when instantiating a new Sprite.&#x27;, &#x27;#sprite&#x27;, &#x27;#texture&#x27;);
+				this.visible = false;
+				this.active = false;
+				return;
+			}
+
+			if (this.game.renderOption === Kiwi.RENDERER_WEBGL) {
+				this.glRenderer = this.game.renderer.requestSharedRenderer(&quot;TextureAtlasRenderer&quot;);
+			}
+
+			this.atlas = atlas;
+			this.name = this.atlas.name;
+			this.cellIndex = this.atlas.cellIndex;
+
+			//may need to add an optional other cell frame index here
+			this.width = atlas.cells[this.cellIndex].w;
+			this.height = atlas.cells[this.cellIndex].h;
+			this.transform.rotPointX = this.width / 2;
+			this.transform.rotPointY = this.height / 2;
+				
+
+			//Create the components needed
+			this.box = this.components.add(new Kiwi.Components.Box(this, x, y, this.width, this.height));
+			this.input = this.components.add(new Kiwi.Components.Input(this, this.box, enableInput));
+
+
+			//Check to see if this sprite could be animated or not
+			if (this.atlas.type === Kiwi.Textures.TextureAtlas.SINGLE_IMAGE) {
+				this.animation = null;
+				this._isAnimated = false;
+			} else {
+				this.animation = this.components.add(new Kiwi.Components.AnimationManager(this));
+				this._isAnimated = true;
+			}
+
+		}
+
+		/**
+		* Returns the type of object that this is.
+		* @method objType
+		* @return {string} &quot;Sprite&quot;
+		* @public
+		*/
+		public objType():string {
+			return &quot;Sprite&quot;;
+		}
+
+		/**
+		* Indicates whether or not this sprite is animated or not. 
+		* This sprite will not be animated if the texture used is a SINGLE_IMAGE.
+		* @property _isAnimated
+		* @type boolean
+		* @private
+		*/
+		private _isAnimated: boolean;
+
+		/** 
+		* The animation component that allows you to create a animation with spritesheets/texture atlas&#x27;s. 
+		* Note: If the atlas that was added is of type Kiwi.Textures.TextureAtlas.SINGLE_IMAGE then no animation component will be created.
+		* @property animation
+		* @type Kiwi.Components.AnimationManager
+		* @public
+		*/
+		public animation: Kiwi.Components.AnimationManager;
+		
+		/** 
+		* The box component that controls the bounding box around this Game Object
+		* @property box
+		* @type Kiwi.Components.Box
+		* @public
+		*/
+		public box: Kiwi.Components.Box;
+
+		/** 
+		* The Input component controls the user interaction with this Game Object
+		* @property input
+		* @type Kiwi.Components.Input
+		* @public
+		*/
+		public input: Kiwi.Components.Input;
+
+		/**
+		* Called by parent when its update loop gets executed.
+		* @method update
+		* @public
+		*/
+		public update() {
+
+			super.update();
+
+			if (this._isAnimated) {
+				this.width = this.atlas.cells[this.cellIndex].w;
+				this.height = this.atlas.cells[this.cellIndex].h;
+
+			}
+
+		}
+
+		/**
+		* Renders the GameObject using Canvas. 
+		* @method render
+		* @param {Kiwi.Camera} camera
+		* @public
+		*/
+		public render(camera:Kiwi.Camera) {
+
+			super.render(camera);
+			
+			//if it is would even be visible.
+			if (this.alpha &gt; 0) {
+
+				var ctx: CanvasRenderingContext2D = this.game.stage.ctx;
+				ctx.save();
+
+				if (this.alpha &gt; 0 &amp;&amp; this.alpha &lt;= 1) {
+					ctx.globalAlpha = this.alpha;
+				}
+
+				//get entity/view matrix
+				var t: Kiwi.Geom.Transform = this.transform;
+				var m: Kiwi.Geom.Matrix = t.getConcatenatedMatrix();
+
+				ctx.transform(m.a, m.b, m.c, m.d, m.tx, m.ty);
+							 
+				var cell = this.atlas.cells[this.cellIndex];
+				ctx.drawImage(this.atlas.image, cell.x, cell.y, cell.w, cell.h, -t.rotPointX, -t.rotPointY, cell.w, cell.h);
+				ctx.restore();
+			}
+		}
+
+		/**
+		* Renders the GameObject using WebGL. 
+		* @method renderGL
+		* @param {WebGLRenderingContext} gl
+		* @param {Kiwi.Camera} camera
+		* @param {Object} params
+		* @public
+		*/
+
+		public renderGL(gl: WebGLRenderingContext, camera: Kiwi.Camera, params: any = null) {
+			(&lt;Kiwi.Renderers.TextureAtlasRenderer&gt;this.glRenderer).addToBatch(gl, this, camera);
+		}
+
+	}
 
 }
+
     </pre>
 </div>
 
diff --git a/docs/files/src_gameobjects_StaticImage.ts.html b/docs/files/src_gameobjects_StaticImage.ts.html
index 6a2c0c5..10de2b3 100644
--- a/docs/files/src_gameobjects_StaticImage.ts.html
+++ b/docs/files/src_gameobjects_StaticImage.ts.html
@@ -369,121 +369,122 @@ <h1 class="file-heading">File: src/gameobjects/StaticImage.ts</h1>
 * @module Kiwi
 * @submodule GameObjects 
 * 
-*/ 
+*/
 
 module Kiwi.GameObjects {
 
-    /**
-    * A light weight game object for displaying static images that would have little or no interaction with other GameObjects. An Example of this would be a background image. Note: Since a StaticImage is lightweight it doesn&#x27;t have any AnimationManager to handle the switching of cells (If you were using a SpriteSheet/TextureAtlas). In order to switch cells you can change the value of the cellIndex property.
-    *
-    * @class StaticImage
-    * @namespace Kiwi.GameObjects
-    * @extends Kiwi.Entity
-    * @constructor
-    * @param state {Kiwi.State} The state that this static image belongs to 
-    * @param atlas {Kiwi.Textures.TextureAtlas} The texture atlas to use as the image.
-    * @param [x=0] {Number} Its coordinates on the x axis
-    * @param [y=0] {Number} The coordinates on the y axis
-    * @return {StaticImage}
-    */
-    export class StaticImage extends Kiwi.Entity {
-
-        constructor(state: Kiwi.State, atlas: Kiwi.Textures.TextureAtlas, x: number = 0, y: number = 0) {
-
-            super(state, x, y);
-
-            if (this.game.renderOption === Kiwi.RENDERER_WEBGL) {
-                this.glRenderer = this.game.renderer.requestSharedRenderer(&quot;TextureAtlasRenderer&quot;);
-            }
-
-            //Texture atlas error check.
-            if (typeof atlas == &quot;undefined&quot;) {
-                Kiwi.Log.error(&#x27;A Texture Atlas was not passed when instantiating a new Static Image.&#x27;, &#x27;#static-image&#x27;, &#x27;#texture&#x27;);
-                this.visible = false;
-                this.active = false;
-                return;
-            } 
-
-            //Set coordinates and texture
-            this.atlas = atlas;
-            this.cellIndex = this.atlas.cellIndex;
-            this.width = atlas.cells[this.cellIndex].w;
-            this.height = atlas.cells[this.cellIndex].h;
-            this.transform.rotPointX = this.width / 2;
-            this.transform.rotPointY = this.height / 2;
-            
-            this.box = this.components.add(new Kiwi.Components.Box(this, x, y, this.width, this.height));
-           
-        }
-
-        /**
-        * Returns the type of object that this is.
-        * @method objType
-        * @return {string} &quot;StaticImage&quot;
-        * @public
-        */
-        public objType(): string {
-            return &quot;StaticImage&quot;;
-        }
-
-        /** 
-        * The Bounds component that controls the bounding box around this Game Object
-        * @property box
-        * @type Kiwi.Components.Box
-        * @public
-        */
-        public box: Kiwi.Components.Box;
-
-        /**
-	    * Called by the Layer to which this Game Object is attached
-	    * @method render
-        * @param {Kiwi.Camara} camera
-        * @public
-	    */
-        public render(camera: Kiwi.Camera) {
-            
-            super.render(camera);
-
-            //if it is would even be visible.
-            if (this.alpha &gt; 0) {
-
-                var ctx: CanvasRenderingContext2D = this.game.stage.ctx;
-                ctx.save();
-
-                if (this.alpha &gt; 0 &amp;&amp; this.alpha &lt;= 1) {
-                    ctx.globalAlpha = this.alpha;
-                }
-
-                //get entity/view matrix
-                var t: Kiwi.Geom.Transform = this.transform;
-                var m: Kiwi.Geom.Matrix = t.getConcatenatedMatrix();
-                
-                ctx.transform(m.a, m.b, m.c, m.d, m.tx, m.ty);
-                
-                var cell = this.atlas.cells[this.cellIndex];
-                ctx.drawImage(this.atlas.image, cell.x, cell.y, cell.w, cell.h, -t.rotPointX, -t.rotPointY, cell.w, cell.h);
-                ctx.restore();
-            
-            }
-            
-        }
-
-        /**
-	    * Renders the GameObject using WebGL. 
-	    * @method renderGL
-        * @param {WebGLRenderingContext} gl
-        * @param {Kiwi.Camera} camera
-        * @param {Object} params
-        * @public
-	    */
-
-        public renderGL(gl: WebGLRenderingContext, camera: Kiwi.Camera, params: any = null) {
-            (&lt;Kiwi.Renderers.TextureAtlasRenderer&gt;this.glRenderer).addToBatch(gl, this, camera);
-        }
-
-    }
+	/**
+	* A light weight game object for displaying static images that would have little or no interaction with other GameObjects. An Example of this would be a background image. Note: Since a StaticImage is lightweight it doesn&#x27;t have any AnimationManager to handle the switching of cells (If you were using a SpriteSheet/TextureAtlas). In order to switch cells you can change the value of the cellIndex property.
+	*
+	* @class StaticImage
+	* @namespace Kiwi.GameObjects
+	* @extends Kiwi.Entity
+	* @constructor
+	* @param state {Kiwi.State} The state that this static image belongs to 
+	* @param atlas {Kiwi.Textures.TextureAtlas} The texture atlas to use as the image.
+	* @param [x=0] {Number} Its coordinates on the x axis
+	* @param [y=0] {Number} The coordinates on the y axis
+	* @return {StaticImage}
+	*/
+	export class StaticImage extends Kiwi.Entity {
+
+		constructor(state: Kiwi.State, atlas: Kiwi.Textures.TextureAtlas, x: number = 0, y: number = 0) {
+
+			super(state, x, y);
+
+			if (this.game.renderOption === Kiwi.RENDERER_WEBGL) {
+				this.glRenderer = this.game.renderer.requestSharedRenderer(&quot;TextureAtlasRenderer&quot;);
+			}
+
+			//Texture atlas error check.
+			if (typeof atlas == &quot;undefined&quot;) {
+				Kiwi.Log.error(&#x27;A Texture Atlas was not passed when instantiating a new Static Image.&#x27;, &#x27;#static-image&#x27;, &#x27;#texture&#x27;);
+				this.visible = false;
+				this.active = false;
+				return;
+			} 
+
+			//Set coordinates and texture
+			this.atlas = atlas;
+			this.cellIndex = this.atlas.cellIndex;
+			this.width = atlas.cells[this.cellIndex].w;
+			this.height = atlas.cells[this.cellIndex].h;
+			this.transform.rotPointX = this.width / 2;
+			this.transform.rotPointY = this.height / 2;
+			
+			this.box = this.components.add(new Kiwi.Components.Box(this, x, y, this.width, this.height));
+
+		}
+
+		/**
+		* Returns the type of object that this is.
+		* @method objType
+		* @return {string} &quot;StaticImage&quot;
+		* @public
+		*/
+		public objType(): string {
+			return &quot;StaticImage&quot;;
+		}
+
+		/** 
+		* The Bounds component that controls the bounding box around this Game Object
+		* @property box
+		* @type Kiwi.Components.Box
+		* @public
+		*/
+		public box: Kiwi.Components.Box;
+
+		/**
+		* Called by the Layer to which this Game Object is attached
+		* @method render
+		* @param {Kiwi.Camara} camera
+		* @public
+		*/
+		public render(camera: Kiwi.Camera) {
+
+			super.render(camera);
+
+			//if it is would even be visible.
+			if (this.alpha &gt; 0) {
+
+				var ctx: CanvasRenderingContext2D = this.game.stage.ctx;
+				ctx.save();
+
+				if (this.alpha &gt; 0 &amp;&amp; this.alpha &lt;= 1) {
+					ctx.globalAlpha = this.alpha;
+				}
+
+				//get entity/view matrix
+				var t: Kiwi.Geom.Transform = this.transform;
+				var m: Kiwi.Geom.Matrix = t.getConcatenatedMatrix();
+				
+				ctx.transform(m.a, m.b, m.c, m.d, m.tx, m.ty);
+				
+				var cell = this.atlas.cells[this.cellIndex];
+				ctx.drawImage(this.atlas.image, cell.x, cell.y, cell.w, cell.h, -t.rotPointX, -t.rotPointY, cell.w, cell.h);
+				ctx.restore();
+
+			}
+
+		}
+
+		/**
+		* Renders the GameObject using WebGL. 
+		* @method renderGL
+		* @param {WebGLRenderingContext} gl
+		* @param {Kiwi.Camera} camera
+		* @param {Object} params
+		* @public
+		*/
+
+		public renderGL(gl: WebGLRenderingContext, camera: Kiwi.Camera, params: any = null) {
+			(&lt;Kiwi.Renderers.TextureAtlasRenderer&gt;this.glRenderer).addToBatch(gl, this, camera);
+		}
+
+	}
 
 }
+
     </pre>
 </div>
 
diff --git a/docs/files/src_gameobjects_Textfield.ts.html b/docs/files/src_gameobjects_Textfield.ts.html
index ba220c8..648c149 100644
--- a/docs/files/src_gameobjects_Textfield.ts.html
+++ b/docs/files/src_gameobjects_Textfield.ts.html
@@ -369,504 +369,498 @@ <h1 class="file-heading">File: src/gameobjects/Textfield.ts</h1>
 * @module Kiwi
 * @submodule GameObjects 
 * 
-*/ 
- 
+*/
+
 module Kiwi.GameObjects {
-    
-    /**
-    * Textfield is a GameObject that is used when you are wanting to render text onto the current State. The Textfield is not designed to have any interaction with other GameObjects and as such it does not have many (if any) components or even a width/height.
-    *
-    * @class Textfield
-    * @namespace Kiwi.GameObjects
-    * @extends Kiwi.Entity
-    * @constructor
-    * @param state {Kiwi.State} The state that this Textfield belongs to
-    * @param text {String} The text that is contained within this textfield.
-    * @param [x=0] {Number} The new x coordinate from the Position component
-    * @param [y=0] {Number} The new y coordinate from the Position component
-    * @param [color=&quot;#000000&quot;] {String} The color of the text. 
-    * @param [size=32] {Number} The size of the text in pixels.
-    * @param [weight=&quot;normal&quot;] {String} The weight of the text.
-    * @param [fontFamily=&quot;sans-serif&quot;] {String} The font family that is to be used when rendering.
-    * @return {Textfield} This Game Object.
-    */
-    export class Textfield extends Kiwi.Entity {
-
-        constructor(state: Kiwi.State, text: string, x: number = 0, y: number = 0, color: string = &quot;#000000&quot;, size: number = 32, weight: string = &quot;normal&quot;, fontFamily: string = &quot;sans-serif&quot;) {
-
-            super(state, x,y);
-
-            if (this.game.renderOption === Kiwi.RENDERER_WEBGL) {
-                this.glRenderer = this.game.renderer.requestSharedRenderer(&quot;TextureAtlasRenderer&quot;);
-            }
-
-            this._text = text;
-            this._fontWeight = weight;
-            this._fontSize = size;
-            this._fontColor = new Kiwi.Utils.Color( color );
-            this._fontFamily = fontFamily;
-            this._textAlign = &quot;left&quot;;
-            this._baseline = &quot;top&quot;;
-            
-            this._tempDirty = true;
-
-            // Create the canvas
-            this._canvas = document.createElement(&quot;canvas&quot;);
-            this._canvas.width = 2;
-            this._canvas.height = 2;
-            this._ctx = this._canvas.getContext(&quot;2d&quot;);
-
-            // Add it to the TextureLibrary
-            this.atlas = new Kiwi.Textures.SingleImage(this.game.rnd.uuid(), this._canvas);
-            this.state.textureLibrary.add(this.atlas);
-            this.atlas.dirty = true;
-
-            // Track actual text width - not canvas width (which rounds up to powers of 2), necessary for proper alignment
-            this._alignWidth = 0;
-
-            // Setup components
-            this.box = this.components.add(
-                new Kiwi.Components.Box(
-                    this, x, y, this.width, this.height ) );
-        }
-
-        /**
-        * Returns the type of object that this is
-        * @method objType
-        * @return {string} &quot;Textfield&quot;
-        * @public
-        */
-        public objType() {
-            return &quot;Textfield&quot;;
-        }
-
-        /**
-        * The text that is to be rendered.
-        * @property _text
-        * @type string
-        * @private
-        */
-        private _text: string;
-        
-        /**
-        * The weight of the font.
-        * @property _fontWeight
-        * @type string
-        * @default &quot;normal&quot;
-        * @private
-        */
-        private _fontWeight: string;
-
-        /**
-        * The size of the font.
-        * @property _fontSize
-        * @type number
-        * @default 32
-        * @private
-        */
-        private _fontSize: number;
-
-        /**
-        * The color of the text.
-        * @property _fontColor
-        * @type Kiwi.Utils.Color
-        * @private
-        */
-        private _fontColor: Kiwi.Utils.Color;
-
-        /**
-        * The font family that is to be rendered.
-        * @property _fontFamily
-        * @type string
-        * @default &quot;sans-serif&quot;
-        * @private
-        */
-        private _fontFamily: string;
-
-        /**
-        * The alignment of the text. This can either be &quot;left&quot;, &quot;right&quot; or &quot;center&quot;
-        * @property _textAlign
-        * @type string
-        * @default &quot;center&quot;
-        * @private
-        */
-        private _textAlign: string;
-
-        /**
-        * The pixel width of the text. Used internally for alignment purposes.
-        * @property _alignWidth
-        * @type number
-        * @default 0
-        * @private
-        * @since 1.1.0
-        */
-        private _alignWidth: number;
-
-        /**
-        * The baseline of the text to be rendered.
-        * @property _baseline
-        * @type string
-        * @private
-        */
-        private _baseline: string; 
-
-        /**
-        * The text that you would like to appear in this textfield.
-        * @property text
-        * @type string
-        * @public
-        */
-        public set text(value: string) {
-            this._text = value;
-            this._tempDirty = true;
-      
-        } 
-        public get text(): string {
-            return this._text;
-        }
-
-        /**
-        * The color of the font that is contained in this textfield.
-        * May be set with a string, or an array of any valid
-        * Kiwi.Utils.Color arguments.
-        * Returns a hex string prepended with &quot;#&quot;.
-        * @property color
-        * @type string
-        * @public
-        */
-        public set color( val: any ) {
-            if ( !Kiwi.Utils.Common.isArray( val ) ) {
-                val = [ val ];
-            }
-            this._fontColor.set.apply( this._fontColor, val );
-            this._tempDirty = true;
-   
-        } 
-        public get color(): any {
-            return &quot;#&quot; + this._fontColor.getHex();
-        }
-
-        /**
-        * The weight of the font.
-        * @property fontWeight
-        * @type string
-        * @public
-        */
-        public set fontWeight(val: string) {
-            this._fontWeight = val;
-            this._tempDirty = true;
-        }
-        public get fontWeight(): string {
-            return this._fontWeight;
-        }
-
-        /**
-        * The size on font when being displayed onscreen.
-        * @property fontSize
-        * @type number
-        * @public
-        */
-        public set fontSize(val: number) {
-            this._fontSize = val;
-            this._tempDirty = true;
-          
-        } 
-        public get fontSize(): number {
-            return this._fontSize;
-        }
-
-        /**
-        * The font family that is being used to render the text.
-        * @property fontFamily 
-        * @type string
-        * @public
-        */
-        public set fontFamily(val: string) {
-            this._fontFamily = val;
-            this._tempDirty = true;
-      
-        } 
-        public get fontFamily(): string {
-            return this._fontFamily;
-        }
-        
-        /**
-        * A static property that contains the string to center align the text.
-        * @property TEXT_ALIGN_CENTER
-        * @type string
-        * @static
-        * @final
-        * @public
-        */
-        public static TEXT_ALIGN_CENTER: string = &quot;center&quot;;
-        
-        /**
-        * A static property that contains the string to right align the text.
-        * @property TEXT_ALIGN_RIGHT
-        * @type string
-        * @static
-        * @final
-        * @public
-        */
-        public static TEXT_ALIGN_RIGHT: string = &quot;right&quot;;
-        
-        /**
-        * A static property that contains the string to left align the text.
-        * @property TEXT_ALIGN_LEFT
-        * @type string
-        * @static
-        * @final
-        * @public
-        */
-        public static TEXT_ALIGN_LEFT: string = &quot;left&quot;;
-
-        /**
-        * Alignment of the text. You can either use the static TEXT_ALIGN constants or pass a string.
-        * @property textAlign
-        * @type string
-        * @public
-        */
-        public set textAlign(val: string) {
-            this._textAlign = val;
-            this._tempDirty = true;
-        }
-
-        public get textAlign(): string {
-            return this._textAlign;
-        }
-
-        /**
-        * The canvas element which the text is rendered onto. 
-        * @property _canvas
-        * @type HTMLCanvasElement.
-        * @private
-        */
-        private _canvas: HTMLCanvasElement;
-
-        /**
-        * The context for the canvas element. Used whilst rendering text.
-        * @property _ctx
-        * @type CanvasRenderingContext2D
-        * @private
-        */
-        private _ctx: CanvasRenderingContext2D;
-
-        /**
-        * If the temporary canvas is dirty and needs to be re-rendered. Only used when the text field rendering is being optimised.
-        * @property _tempDirty
-        * @type boolean
-        * @private
-        */
-        private _tempDirty: boolean = true;
-
-        /**
-        * Hitbox component
-        * @property box
-        * @type Kiwi.Components.Box
-        * @public
-        * @since 1.2.0
-        */
-        public box: Kiwi.Components.Box;
-
-
-        /**
-        * This method is used to render the text to an offscreen-canvas which is held in a TextureAtlas (which is generated upon the instanitation of this class). 
-        * This is so that the canvas doesn&#x27;t render it every frame as it can be costly and so that it can be used in WebGL with the TextureAtlasRenderer.
-        *
-        * @method _renderText
-        * @private
-        */
-        private _renderText() {
-
-            //Get/Set the width
-            this._ctx.font = this._fontWeight + &quot; &quot; + this._fontSize + &quot;px &quot; + this._fontFamily;
-
-
-            // Get the size of the text.
-            var _measurements: TextMetrics = this._ctx.measureText(this._text);   //when you measure the text for some reason it resets the values?! 
-            var width = _measurements.width;
-            var height = this._fontSize * 1.3; //Need to find a better way to calculate
-            
-            // Cache alignment width
-            this._alignWidth = width;
-
-            // Is the width base2?
-            if (Kiwi.Utils.Common.base2Sizes.indexOf(width) == -1) {
-                var i = 0;
-                while (width &gt; Kiwi.Utils.Common.base2Sizes[i]) i++;
-                width = Kiwi.Utils.Common.base2Sizes[i];
-            }
-
-            // Is the height base2?
-            if (Kiwi.Utils.Common.base2Sizes.indexOf(height) == -1) {
-                var i = 0;
-                while (height &gt; Kiwi.Utils.Common.base2Sizes[i]) i++;
-                height = Kiwi.Utils.Common.base2Sizes[i];
-            }
-
-            // Apply the width/height
-            this._canvas.width = width;  
-            this._canvas.height = height;
-
-            // Clear the canvas
-            this._ctx.clearRect(0, 0, width, height);
-
-            // Reapply the styles....cause it unapplies after a measurement...?!?
-            this._ctx.font = this._fontWeight + &quot; &quot; + this._fontSize + &quot;px &quot; + this._fontFamily;
-            this._ctx.fillStyle = this.color.slice( 0, 7 );
-            this._ctx.textBaseline = this._baseline;
-
-            // Draw the text.
-            this._ctx.fillText(this._text, 0, 0);
-
-            // Update inherited properties
-            this.width = this._alignWidth;
-            this.height = this._canvas.height;
-
-
-            //Update the cell and dirty/undirtyfiy
-            this.atlas.cells[0] = {
-                x: 0,
-                y: 0,
-                w: this._canvas.width,
-                h: this._canvas.height,
-                hitboxes: [ {
-                    x: this._textAlign === Kiwi.GameObjects.Textfield.TEXT_ALIGN_LEFT ? 0 :
-                        this._textAlign === Kiwi.GameObjects.Textfield.TEXT_ALIGN_CENTER ?
-                        -this._alignWidth * 0.5 : -this._alignWidth,
-                    y: 0,
-                    w: this.width,
-                    h: this.height
-                    } ] };
-            this._tempDirty = false;
-            this.atlas.dirty = true;
-        }
-
-        /**
-	    * Called by the Layer to which this Game Object is attached
-	    * @method render
-        * @param {Kiwi.Camera}
-        * @public
-	    */
-        public render(camera:Kiwi.Camera) {
-            
-            if (this.alpha &gt; 0 &amp;&amp; this.visible) {
-
-                //render on stage
-                var ctx: CanvasRenderingContext2D = this.game.stage.ctx;
-                ctx.save();
-
-                var t: Kiwi.Geom.Transform = this.transform;
-                if (this.alpha &gt; 0 &amp;&amp; this.alpha &lt;= 1) {
-                    ctx.globalAlpha = this.alpha;
-                }
-
-                //Does the text need re-rendering
-                if (this._tempDirty) this._renderText();
-
-                //Align the text
-                var x = 0;
-                switch (this._textAlign) {
-                    case Kiwi.GameObjects.Textfield.TEXT_ALIGN_LEFT:
-                        x = 0;
-                        break;
-                    case Kiwi.GameObjects.Textfield.TEXT_ALIGN_CENTER:
-                        x = this._alignWidth * 0.5;
-                        break;
-                    case Kiwi.GameObjects.Textfield.TEXT_ALIGN_RIGHT:
-                        x = this._alignWidth;
-                        break;
-                }
-
-
-                //Draw the Image
-                var m: Kiwi.Geom.Matrix = t.getConcatenatedMatrix();
-
-                ctx.transform(m.a, m.b, m.c, m.d, m.tx, m.ty);
-                ctx.drawImage(this._canvas, 0, 0, this._canvas.width, this._canvas.height, -t.rotPointX - x, -t.rotPointY, this._canvas.width, this._canvas.height);
-                
-
-                ctx.restore();
-                
-            }
-            
-        }
-
-        /**
-	    * Renders the GameObject using WebGL. 
-	    * @method renderGL
-        * @param {WebGLRenderingContext} gl
-        * @param {Kiwi.Camera} camera
-        * @param {Object} params
-        * @public
-	    */
-        public renderGL(gl: WebGLRenderingContext, camera: Kiwi.Camera, params: any = null) {
-            
-            //Does the text need re-rendering
-            if (this._tempDirty) this._renderText();
-
-
-            //Set-up the xyuv and alpha
-            var vertexItems = [];
-            
-
-
-            //Transform/Matrix
-            var t: Kiwi.Geom.Transform = this.transform;
-            var m: Kiwi.Geom.Matrix = t.getConcatenatedMatrix();
-
-            //See where the text should be.
-            var x = 0;
-            switch (this._textAlign) {
-                case Kiwi.GameObjects.Textfield.TEXT_ALIGN_LEFT:
-                    x = 0;
-                    break;
-                case Kiwi.GameObjects.Textfield.TEXT_ALIGN_CENTER:
-                    x = -(this._alignWidth * 0.5);
-                    break;
-                case Kiwi.GameObjects.Textfield.TEXT_ALIGN_RIGHT:
-                    x = -(this._alignWidth);
-                    break;
-            }
-
-
-            //Create the Point Objects.
-            var pt1 = new Kiwi.Geom.Point(x - t.rotPointX, 0 - t.rotPointY);
-            var pt2 = new Kiwi.Geom.Point(this._canvas.width + x - t.rotPointX , 0 - t.rotPointY);
-            var pt3 = new Kiwi.Geom.Point(this._canvas.width + x - t.rotPointX , this._canvas.height - t.rotPointY);
-            var pt4 = new Kiwi.Geom.Point(x - t.rotPointX, this._canvas.height - t.rotPointY);
-
-
-            //Add on the matrix to the points
-            pt1 = m.transformPoint(pt1);
-            pt2 = m.transformPoint(pt2);
-            pt3 = m.transformPoint(pt3);
-            pt4 = m.transformPoint(pt4);
-
-
-            //Append to the xyuv and alpha arrays 
-            vertexItems.push(
-                pt1.x, pt1.y, 0, 0, this.alpha,                                             //Top Left Point
-                pt2.x, pt2.y, this._canvas.width, 0, this.alpha,                            //Top Right Point
-                pt3.x, pt3.y, this._canvas.width, this._canvas.height, this.alpha,          //Bottom Right Point
-                pt4.x, pt4.y, 0, this._canvas.height, this.alpha                            //Bottom Left Point
-                );
-            //Add to the batch!
-            (&lt;Kiwi.Renderers.TextureAtlasRenderer&gt;this.glRenderer).concatBatch(vertexItems);
-        }
-    }
-
-    /**
-    * Alias of the &quot;Kiwi.GameObjects.Textfield&quot;. 
-    * This will continue to be an alias until we can deprecate the existing version.
-    *
-    * @class TextField
-    * @namespace Kiwi.GameObjects
-    * @extends Kiwi.GameObjects.Textfield
-    */
-    export var TextField = Kiwi.GameObjects.Textfield;
+
+	/**
+	* Textfield is a GameObject that is used when you are wanting to render text onto the current State. The Textfield is not designed to have any interaction with other GameObjects and as such it does not have many (if any) components or even a width/height.
+	*
+	* @class Textfield
+	* @namespace Kiwi.GameObjects
+	* @extends Kiwi.Entity
+	* @constructor
+	* @param state {Kiwi.State} The state that this Textfield belongs to
+	* @param text {String} The text that is contained within this textfield.
+	* @param [x=0] {Number} The new x coordinate from the Position component
+	* @param [y=0] {Number} The new y coordinate from the Position component
+	* @param [color=&quot;#000000&quot;] {String} The color of the text. 
+	* @param [size=32] {Number} The size of the text in pixels.
+	* @param [weight=&quot;normal&quot;] {String} The weight of the text.
+	* @param [fontFamily=&quot;sans-serif&quot;] {String} The font family that is to be used when rendering.
+	* @return {Textfield} This Game Object.
+	*/
+	export class Textfield extends Kiwi.Entity {
+
+		constructor(state: Kiwi.State, text: string, x: number = 0, y: number = 0, color: string = &quot;#000000&quot;, size: number = 32, weight: string = &quot;normal&quot;, fontFamily: string = &quot;sans-serif&quot;) {
+
+			super(state, x,y);
+
+			if (this.game.renderOption === Kiwi.RENDERER_WEBGL) {
+				this.glRenderer = this.game.renderer.requestSharedRenderer(&quot;TextureAtlasRenderer&quot;);
+			}
+
+			this._text = text;
+			this._fontWeight = weight;
+			this._fontSize = size;
+			this._fontColor = new Kiwi.Utils.Color( color );
+			this._fontFamily = fontFamily;
+			this._textAlign = &quot;left&quot;;
+			this._baseline = &quot;top&quot;;
+			
+			this._tempDirty = true;
+
+			// Create the canvas
+			this._canvas = document.createElement(&quot;canvas&quot;);
+			this._canvas.width = 2;
+			this._canvas.height = 2;
+			this._ctx = this._canvas.getContext(&quot;2d&quot;);
+
+			// Add it to the TextureLibrary
+			this.atlas = new Kiwi.Textures.SingleImage(this.game.rnd.uuid(), this._canvas);
+			this.state.textureLibrary.add(this.atlas);
+			this.atlas.dirty = true;
+
+			// Track actual text width - not canvas width (which rounds up to powers of 2), necessary for proper alignment
+			this._alignWidth = 0;
+
+			// Setup components
+			this.box = this.components.add(
+				new Kiwi.Components.Box(
+					this, x, y, this.width, this.height ) );
+		}
+
+		/**
+		* Returns the type of object that this is
+		* @method objType
+		* @return {string} &quot;Textfield&quot;
+		* @public
+		*/
+		public objType() {
+			return &quot;Textfield&quot;;
+		}
+
+		/**
+		* The text that is to be rendered.
+		* @property _text
+		* @type string
+		* @private
+		*/
+		private _text: string;
+		
+		/**
+		* The weight of the font.
+		* @property _fontWeight
+		* @type string
+		* @default &quot;normal&quot;
+		* @private
+		*/
+		private _fontWeight: string;
+
+		/**
+		* The size of the font.
+		* @property _fontSize
+		* @type number
+		* @default 32
+		* @private
+		*/
+		private _fontSize: number;
+
+		/**
+		* The color of the text.
+		* @property _fontColor
+		* @type Kiwi.Utils.Color
+		* @private
+		*/
+		private _fontColor: Kiwi.Utils.Color;
+
+		/**
+		* The font family that is to be rendered.
+		* @property _fontFamily
+		* @type string
+		* @default &quot;sans-serif&quot;
+		* @private
+		*/
+		private _fontFamily: string;
+
+		/**
+		* The alignment of the text. This can either be &quot;left&quot;, &quot;right&quot; or &quot;center&quot;
+		* @property _textAlign
+		* @type string
+		* @default &quot;center&quot;
+		* @private
+		*/
+		private _textAlign: string;
+
+		/**
+		* The pixel width of the text. Used internally for alignment purposes.
+		* @property _alignWidth
+		* @type number
+		* @default 0
+		* @private
+		* @since 1.1.0
+		*/
+		private _alignWidth: number;
+
+		/**
+		* The baseline of the text to be rendered.
+		* @property _baseline
+		* @type string
+		* @private
+		*/
+		private _baseline: string; 
+
+		/**
+		* The text that you would like to appear in this textfield.
+		* @property text
+		* @type string
+		* @public
+		*/
+		public set text(value: string) {
+			this._text = value;
+			this._tempDirty = true;
+	  
+		} 
+		public get text(): string {
+			return this._text;
+		}
+
+		/**
+		* The color of the font that is contained in this textfield.
+		* May be set with a string, or an array of any valid
+		* Kiwi.Utils.Color arguments.
+		* Returns a hex string prepended with &quot;#&quot;.
+		* @property color
+		* @type string
+		* @public
+		*/
+		public set color( val: any ) {
+			if ( !Kiwi.Utils.Common.isArray( val ) ) {
+				val = [ val ];
+			}
+			this._fontColor.set.apply( this._fontColor, val );
+			this._tempDirty = true;
+
+		}
+		public get color(): any {
+			return &quot;#&quot; + this._fontColor.getHex();
+		}
+
+		/**
+		* The weight of the font.
+		* @property fontWeight
+		* @type string
+		* @public
+		*/
+		public set fontWeight(val: string) {
+			this._fontWeight = val;
+			this._tempDirty = true;
+		}
+		public get fontWeight(): string {
+			return this._fontWeight;
+		}
+
+		/**
+		* The size on font when being displayed onscreen.
+		* @property fontSize
+		* @type number
+		* @public
+		*/
+		public set fontSize(val: number) {
+			this._fontSize = val;
+			this._tempDirty = true;
+		}
+		public get fontSize(): number {
+			return this._fontSize;
+		}
+
+		/**
+		* The font family that is being used to render the text.
+		* @property fontFamily 
+		* @type string
+		* @public
+		*/
+		public set fontFamily(val: string) {
+			this._fontFamily = val;
+			this._tempDirty = true;
+		}
+		public get fontFamily(): string {
+			return this._fontFamily;
+		}
+
+		/**
+		* A static property that contains the string to center align the text.
+		* @property TEXT_ALIGN_CENTER
+		* @type string
+		* @static
+		* @final
+		* @public
+		*/
+		public static TEXT_ALIGN_CENTER: string = &quot;center&quot;;
+
+		/**
+		* A static property that contains the string to right align the text.
+		* @property TEXT_ALIGN_RIGHT
+		* @type string
+		* @static
+		* @final
+		* @public
+		*/
+		public static TEXT_ALIGN_RIGHT: string = &quot;right&quot;;
+
+		/**
+		* A static property that contains the string to left align the text.
+		* @property TEXT_ALIGN_LEFT
+		* @type string
+		* @static
+		* @final
+		* @public
+		*/
+		public static TEXT_ALIGN_LEFT: string = &quot;left&quot;;
+
+		/**
+		* Alignment of the text. You can either use the static TEXT_ALIGN constants or pass a string.
+		* @property textAlign
+		* @type string
+		* @public
+		*/
+		public set textAlign(val: string) {
+			this._textAlign = val;
+			this._tempDirty = true;
+		}
+
+		public get textAlign(): string {
+			return this._textAlign;
+		}
+
+		/**
+		* The canvas element which the text is rendered onto. 
+		* @property _canvas
+		* @type HTMLCanvasElement.
+		* @private
+		*/
+		private _canvas: HTMLCanvasElement;
+
+		/**
+		* The context for the canvas element. Used whilst rendering text.
+		* @property _ctx
+		* @type CanvasRenderingContext2D
+		* @private
+		*/
+		private _ctx: CanvasRenderingContext2D;
+
+		/**
+		* If the temporary canvas is dirty and needs to be re-rendered. Only used when the text field rendering is being optimised.
+		* @property _tempDirty
+		* @type boolean
+		* @private
+		*/
+		private _tempDirty: boolean = true;
+
+		/**
+		* Hitbox component
+		* @property box
+		* @type Kiwi.Components.Box
+		* @public
+		* @since 1.2.0
+		*/
+		public box: Kiwi.Components.Box;
+
+
+		/**
+		* This method is used to render the text to an offscreen-canvas which is held in a TextureAtlas (which is generated upon the instanitation of this class). 
+		* This is so that the canvas doesn&#x27;t render it every frame as it can be costly and so that it can be used in WebGL with the TextureAtlasRenderer.
+		*
+		* @method _renderText
+		* @private
+		*/
+		private _renderText() {
+
+			//Get/Set the width
+			this._ctx.font = this._fontWeight + &quot; &quot; + this._fontSize + &quot;px &quot; + this._fontFamily;
+
+
+			// Get the size of the text.
+			var _measurements: TextMetrics = this._ctx.measureText(this._text);   //when you measure the text for some reason it resets the values?! 
+			var width = _measurements.width;
+			var height = this._fontSize * 1.3; //Need to find a better way to calculate
+			
+			// Cache alignment width
+			this._alignWidth = width;
+
+			// Is the width base2?
+			if (Kiwi.Utils.Common.base2Sizes.indexOf(width) == -1) {
+				var i = 0;
+				while (width &gt; Kiwi.Utils.Common.base2Sizes[i]) i++;
+				width = Kiwi.Utils.Common.base2Sizes[i];
+			}
+
+			// Is the height base2?
+			if (Kiwi.Utils.Common.base2Sizes.indexOf(height) == -1) {
+				var i = 0;
+				while (height &gt; Kiwi.Utils.Common.base2Sizes[i]) i++;
+				height = Kiwi.Utils.Common.base2Sizes[i];
+			}
+
+			// Apply the width/height
+			this._canvas.width = width;  
+			this._canvas.height = height;
+
+			// Clear the canvas
+			this._ctx.clearRect(0, 0, width, height);
+
+			// Reapply the styles....cause it unapplies after a measurement...?!?
+			this._ctx.font = this._fontWeight + &quot; &quot; + this._fontSize + &quot;px &quot; + this._fontFamily;
+			this._ctx.fillStyle = this.color.slice( 0, 7 );
+			this._ctx.textBaseline = this._baseline;
+
+			// Draw the text.
+			this._ctx.fillText(this._text, 0, 0);
+
+			// Update inherited properties
+			this.width = this._alignWidth;
+			this.height = this._canvas.height;
+
+
+			//Update the cell and dirty/undirtyfiy
+			this.atlas.cells[0] = {
+				x: 0,
+				y: 0,
+				w: this._canvas.width,
+				h: this._canvas.height,
+				hitboxes: [ {
+					x: this._textAlign === Kiwi.GameObjects.Textfield.TEXT_ALIGN_LEFT ? 0 :
+						this._textAlign === Kiwi.GameObjects.Textfield.TEXT_ALIGN_CENTER ?
+						-this._alignWidth * 0.5 : -this._alignWidth,
+					y: 0,
+					w: this.width,
+					h: this.height
+					} ] };
+			this._tempDirty = false;
+			this.atlas.dirty = true;
+		}
+
+		/**
+		* Called by the Layer to which this Game Object is attached
+		* @method render
+		* @param {Kiwi.Camera}
+		* @public
+		*/
+		public render(camera:Kiwi.Camera) {
+
+			if (this.alpha &gt; 0 &amp;&amp; this.visible) {
+
+				//render on stage
+				var ctx: CanvasRenderingContext2D = this.game.stage.ctx;
+				ctx.save();
+
+				var t: Kiwi.Geom.Transform = this.transform;
+				if (this.alpha &gt; 0 &amp;&amp; this.alpha &lt;= 1) {
+					ctx.globalAlpha = this.alpha;
+				}
+
+				//Does the text need re-rendering
+				if (this._tempDirty) this._renderText();
+
+				//Align the text
+				var x = 0;
+				switch (this._textAlign) {
+					case Kiwi.GameObjects.Textfield.TEXT_ALIGN_LEFT:
+						x = 0;
+						break;
+					case Kiwi.GameObjects.Textfield.TEXT_ALIGN_CENTER:
+						x = this._alignWidth * 0.5;
+						break;
+					case Kiwi.GameObjects.Textfield.TEXT_ALIGN_RIGHT:
+						x = this._alignWidth;
+						break;
+				}
+
+				//Draw the Image
+				var m: Kiwi.Geom.Matrix = t.getConcatenatedMatrix();
+
+				ctx.transform(m.a, m.b, m.c, m.d, m.tx, m.ty);
+				ctx.drawImage(this._canvas, 0, 0, this._canvas.width, this._canvas.height, -t.rotPointX - x, -t.rotPointY, this._canvas.width, this._canvas.height);
+				
+
+				ctx.restore();
+			}
+
+		}
+
+		/**
+		* Renders the GameObject using WebGL. 
+		* @method renderGL
+		* @param {WebGLRenderingContext} gl
+		* @param {Kiwi.Camera} camera
+		* @param {Object} params
+		* @public
+		*/
+		public renderGL(gl: WebGLRenderingContext, camera: Kiwi.Camera, params: any = null) {
+
+			//Does the text need re-rendering
+			if (this._tempDirty) this._renderText();
+
+			//Set-up the xyuv and alpha
+			var vertexItems = [];
+
+			//Transform/Matrix
+			var t: Kiwi.Geom.Transform = this.transform;
+			var m: Kiwi.Geom.Matrix = t.getConcatenatedMatrix();
+
+			//See where the text should be.
+			var x = 0;
+			switch (this._textAlign) {
+				case Kiwi.GameObjects.Textfield.TEXT_ALIGN_LEFT:
+					x = 0;
+					break;
+				case Kiwi.GameObjects.Textfield.TEXT_ALIGN_CENTER:
+					x = -(this._alignWidth * 0.5);
+					break;
+				case Kiwi.GameObjects.Textfield.TEXT_ALIGN_RIGHT:
+					x = -(this._alignWidth);
+					break;
+			}
+
+			//Create the Point Objects.
+			var pt1 = new Kiwi.Geom.Point(x - t.rotPointX, 0 - t.rotPointY);
+			var pt2 = new Kiwi.Geom.Point(this._canvas.width + x - t.rotPointX , 0 - t.rotPointY);
+			var pt3 = new Kiwi.Geom.Point(this._canvas.width + x - t.rotPointX , this._canvas.height - t.rotPointY);
+			var pt4 = new Kiwi.Geom.Point(x - t.rotPointX, this._canvas.height - t.rotPointY);
+
+			//Add on the matrix to the points
+			pt1 = m.transformPoint(pt1);
+			pt2 = m.transformPoint(pt2);
+			pt3 = m.transformPoint(pt3);
+			pt4 = m.transformPoint(pt4);
+
+			//Append to the xyuv and alpha arrays 
+			vertexItems.push(
+				pt1.x, pt1.y, 0, 0, this.alpha,
+				//Top Left Point
+				pt2.x, pt2.y, this._canvas.width, 0, this.alpha,
+				//Top Right Point
+				pt3.x, pt3.y, this._canvas.width, this._canvas.height, this.alpha,          //Bottom Right Point
+				pt4.x, pt4.y, 0, this._canvas.height, this.alpha
+				//Bottom Left Point
+				);
+			//Add to the batch!
+			(&lt;Kiwi.Renderers.TextureAtlasRenderer&gt;this.glRenderer).concatBatch(vertexItems);
+		}
+	}
+
+	/**
+	* Alias of the &quot;Kiwi.GameObjects.Textfield&quot;. 
+	* This will continue to be an alias until we can deprecate the existing version.
+	*
+	* @class TextField
+	* @namespace Kiwi.GameObjects
+	* @extends Kiwi.GameObjects.Textfield
+	*/
+	export var TextField = Kiwi.GameObjects.Textfield;
 
 }
+
     </pre>
 </div>
 
diff --git a/docs/files/src_gameobjects_tilemap_TileMap.ts.html b/docs/files/src_gameobjects_tilemap_TileMap.ts.html
index e3220d1..0992910 100644
--- a/docs/files/src_gameobjects_tilemap_TileMap.ts.html
+++ b/docs/files/src_gameobjects_tilemap_TileMap.ts.html
@@ -372,507 +372,506 @@ <h1 class="file-heading">File: src/gameobjects/tilemap/TileMap.ts</h1>
 */
 
 module Kiwi.GameObjects.Tilemap { 
-    
-    /**
-    * A TileMap handles the creation of TileMapLayers and the TileTypes that they use.
-    * Since a TileMap isn&#x27;t a Entity itself you cannot add it to the Stage inorder to render that it manages, 
-    * Instead you have to add each layer lies within it. This way you can have other GameObjects behind/in-front of layers.
-    * 
-    * @class TileMap
-    * @namespace Kiwi.GameObjects.Tilemap
-    * @constructor 
-    * @param state {Kiwi.State} The state that this Tilemap is on.
-    * @param [tileMapDataKey] {String} The Data key for the JSON you would like to use.
-    * @param [atlas] {Kiwi.Textures.TextureAtlas} The texture atlas that you would like the tilemap layers to use.
-    * @param [startingCell=0] {number} The number for the initial cell that the first TileType should use. See &#x27;createFromFileStore&#x27; for more information.
-    * @return {TileMap}
-    */
-    export class TileMap {
- 
-        constructor(state: Kiwi.State, tileMapData?: any, atlas?: Kiwi.Textures.TextureAtlas, startingCell:number=0) {
-
-            this.tileTypes = [];
-            this.createTileType(-1);
-            this.layers = [];
-
-            this.state = state;
-            this.game = state.game;
-
-            if (tileMapData !== undefined &amp;&amp; atlas !== undefined) {
-                this.createFromFileStore(tileMapData, atlas, startingCell);
-            } else if (tileMapData !== undefined || atlas !== undefined) {
-                Kiwi.Log.warn(&#x27;You must pass BOTH the TileMapDataKey and TextureAtlas inorder to create a TileMap from the File Store.&#x27;, &#x27;#tilemap&#x27;);
-            }
-
-        }
-
-        /**
-        * The orientation of the tilemap. 
-        * Note: This value does not affect the individual layers. 
-        * 
-        * @property orientation
-        * @type String
-        * @public
-        */
-        public orientation: string;
-
-        /**
-        * Is an Array containing all of the TileTypes that are available on the TileMap.
-        * @property tileTypes
-        * @type TileType[]
-        * @public
-        */
-        public tileTypes: TileType[];
-
-        /**
-        * A list of all of the TileMapLayers that exist on the TileMap.
-        * @property layers
-        * @type TileMapLayer
-        * @public
-        */
-        public layers: TileMapLayer[];
-
-        /**
-        * The state that this TileMap exists on.
-        * @property state
-        * @type Kiwi.State
-        * @public
-        */
-        public state: Kiwi.State;
-
-        /**
-        * The game that this TileMap is a part of.
-        * @property game
-        * @type Kiwi.Game
-        * @public
-        */
-        public game: Kiwi.Game;
-
-        /**
-        * The default width of a single tile that a TileMapLayer is told to have upon its creation. 
-        * @property tileWidth
-        * @type Number
-        * @default 0
-        * @public
-        */
-        public tileWidth: number = 0;
-        
-        /**
-        * The default height of a single tile that a TileMapLayer is told to have upon its creation.
-        * @property tileHeight
-        * @type Number
-        * @default 0
-        * @public
-        */
-        public tileHeight: number = 0;
-
-        /**
-        * The default width of all TileMapLayers when they are created. 
-        * This value is in Tiles.
-        * @property width
-        * @type Number
-        * @default 0
-        * @public
-        */
-        public width: number = 0;
-
-        /**
-        * The default height of all TileMapLayers when they are created. 
-        * This value is in Tiles.
-        * @property height
-        * @type Number
-        * @default 0
-        * @public
-        */
-        public height: number = 0;
-
-        /**
-        * The width of the tilemap in pixels. This value is READ ONLY.
-        * @property widthInPixels
-        * @type Number
-        * @public
-        */
-        public get widthInPixels(): number {
-            return this.width * this.tileWidth;
-        }
-        
-        /**
-        * The height of the tilemap in pixels. This value is READ ONLY.
-        * @property heightInPixels
-        * @type Number
-        * @public
-        */
-        public get heightInPixels(): number {
-            return this.height * this.tileHeight;
-        }
-
-        /**
-        * Any properties that were found in the JSON during creation.
-        * @property properties
-        * @type Object
-        * @public
-        */
-        public properties: any = {};
-
-        /** 
-        * Creates new tilemap layers from a JSON file that you pass (has to be in the Tiled Format).
-        * The texture atlas you pass is that one that each TileMapLayer found in the JSON will use, You can change the TextureAtlas afterwards.
-        * New TileTypes will automatically be created. The number is based on the Tileset parameter of the JSON. 
-        * The cell used for new TileTypes will begin at 0 and increment each time a new TileType is created (and a cell exists). Otherwise new TileTypes will start will a cell of -1 (none).
-        * @method createFromFileStore
-        * @param tileMapData {Any} This can either 
-        * @param atlas {Kiwi.Textures.TextureAtlas} The texture atlas that you would like the tilemap layers to use.
-        * @param [startingCell=0] {number} The number for the initial cell that the first TileType should use. If you pass -1 then no new TileTypes will be created.
-        * @public
-        */
-        public createFromFileStore(tileMapData: any, atlas: Kiwi.Textures.TextureAtlas, startingCell:number=0) {
-
-            var json = null;
-
-            //Does the JSON exist?
-            switch (typeof tileMapData) {
-                case &#x27;string&#x27;:
-                    if (this.game.fileStore.exists(tileMapData) == false) {
-                        Kiwi.Log.error(&#x27;The JSON file you have told to use for a TileMap does not exist.&#x27;, &#x27;#tilemap&#x27;, &#x27;#json&#x27;);
-                        return false;
-                    }   
-
-                    json = JSON.parse( this.game.fileStore.getFile(tileMapData).data );
-                    break;
-
-                case &#x27;object&#x27;:
-                    json = tileMapData;
-                    break;
-
-                default:
-                    Kiwi.Log.error(&#x27;The type of TileMapData passed could not be idenified. Please either pass a name of JSON file to use OR an object to be used.&#x27;, &#x27;#tilemap&#x27;);                    
-            }
-
-            //Get the map information
-            this.orientation = (json.orientation == undefined) ? ORTHOGONAL : json.orientation;
-            this.tileWidth = (json.tilewidth == undefined) ? 32 : json.tilewidth;
-            this.tileHeight = (json.tileheight == undefined) ? 32 : json.tileheight;
-            this.width = json.width;
-            this.height = json.height;
-
-
-            //Add the properties
-            for (var prop in json.properties) {
-                this.properties[prop] = json.properties[prop];
-            }
-
-
-            //Generate the Tiles needed.
-            if (json.tilesets !== &quot;undefined&quot; &amp;&amp; startingCell !== -1) 
-                this._generateTypesFromTileset(json.tilesets, atlas, startingCell);
-            
-
-            //Generate the layers we need
-            for (var i = 0; i &lt; json.layers.length; i++) {
-                var layerData = json.layers[i];
-
-                //Check what type it is.
-                switch (json.layers[i].type) {
-                    case &quot;tilelayer&quot;:
-                        var w = (layerData.width !== undefined) ? layerData.width : this.width;
-                        var h = (layerData.height !== undefined) ? layerData.height : this.height;
-
-                        var layer = this.createNewLayer(layerData.name, atlas, layerData.data, w, h, layerData.x * this.tileWidth, layerData.y * this.tileHeight );
-                        layer.orientation = this.orientation;
-                        
-                        //Add the extra data...
-                        layer.visible = (layerData.visible == undefined) ? true : layerData.visible;
-                        layer.alpha = (layerData.opacity == undefined) ? 1 : layerData.opacity;
-                        if (layerData.properties !== undefined)layer.properties = layerData.properties;
-
-                        break;
-
-                    case &quot;objectgroup&quot;:
-                        this.createNewObjectLayer();
-                        break;
-
-                    case &quot;imagelayer&quot;:
-                        this.createNewImageLayer();
-                        break;
-                }
-
-
-            }
-
-        }
-
-        /**
-        * Generates new TileTypes based upon the Tileset information that lies inside the Tiled JSON.
-        * This is an INTERNAL method, which is used when the createFromFileStore method is executed.
-        * @method _generateTypesFromTileset
-        * @param tilesetData {Array} The tileset part of the JSON.
-        * @param atlas {Kiwi.Textures.TextureAtlas} The Texture atlas which contains the cells that the new TileTypes will use.
-        * @param startingCell {Number} The first cell number that would be used.
-        * @private
-        */
-        private _generateTypesFromTileset( tilesetData:any[], atlas:Kiwi.Textures.TextureAtlas, startingCell:number ) {
-
-            //Loop through the tilesets
-            for (var i = 0; i &lt; tilesetData.length; i++) {
-
-                var tileset = tilesetData[i];
-
-                //Tileset Information
-                var m = tileset.margin;
-                var s = tileset.spacing; 
-                var tw = tileset.tilewidth;
-                var th = tileset.tileheight;
-                var iw = tileset.imagewidth - m;
-                var ih = tileset.imageheight - m;
-
-                //Drawing offsets
-                var offset = (tileset.tileoffset == undefined) ? { x: 0, y: 0 } : tileset.tileoffset;
-                
-                //Calculate how many tiles there are in this tileset and thus how many different tile type there can be.
-                for (var y = m; y &lt; ih; y += th) {
-                    for (var x = m; x &lt; iw; x += tw) {
-    
-                        //Does the cell exist? Then use that.
-                        var cell = (atlas.cells[startingCell] == undefined) ? -1 : startingCell ;  
-                        
-                        var tileType = this.createTileType(cell);
-                        tileType.offset.x = offset.x;
-                        tileType.offset.y = offset.y;
-                        
-                        startingCell++; //Increase the cell to use by one.
-                    }
-                }
-                
-                //Add tile properties
-                for (var tp in tileset.tileproperties) {
-                    var tileType = this.tileTypes[(parseInt(tileset.firstgid) + parseInt(tp))];
-                    tileType.properties = tileset.tileproperties[tp];
-                }
-
-            }
-
-        }
-
-        /**
-        * Method to set the default TileMap properties. Useful when wanting to create tilemaps programmatically.
-        * @method setTo
-        * @param tileWidth {Number} The width of a single tile.
-        * @param tileHeight {Number} The height of a single tile.
-        * @param width {Number} The width of the whole map.
-        * @param height {Number} The height of the whole map.
-        * @public
-        */
-        public setTo(tileWidth: number, tileHeight: number, width: number, height: number) {
-            this.tileWidth = tileWidth;
-            this.tileHeight = tileHeight;
-            this.width = width;
-            this.height = height;
-        }
-
-        /**
-        *-----------------------
-        * Creation of Tile Types
-        *-----------------------
-        **/
-
-        /**
-        * Generates a single new TileType. Returns the TileType that was generated.
-        * @method createTileType
-        * @param [cell=-1] {Number} The cell that is to be used. Default is -1 (which means none)
-        * @return {TileType} The TileType generated.
-        * @public
-        */
-        public createTileType(cell:number = -1):TileType {
-            var tileType = new TileType(this, this.tileTypes.length, cell);
-            this.tileTypes.push(tileType);
-
-            return tileType;
-        }
-        
-        /**
-        * Creates a new TileType for each cell that you pass.
-        * @method createTileTypes
-        * @param cells {Number[]} The cells that you want a new TileType created for.
-        * @return {TileTypes[]} The TileTypes generated.
-        * @public
-        */
-        public createTileTypes(cells:number[]):TileType[] {
-            var types = [];
-            for (var i = 0; i &lt; cells.length; i++) {
-
-                types.push( this.createTileType( cells[i] ) );
-
-            }
-            return types;
-        }
-
-        /**
-        * Used to create a number of TileTypes based starting cell number and how many you want from there.
-        * @method createTileTypesByRange
-        * @param cellStart {Number} The starting number of the cell.
-        * @param range {Number} How many cells (from the starting cell) should be created.
-        * @return {TileTypes[]} The TileTypes generated.
-        */
-        public createTileTypesByRange(cellStart: number, range: number): TileType[]{
-            var types = [];
-            for (var i = cellStart; i &lt;= cellStart + range; i++) {
-
-                types.push( this.createTileType( i ) );
-
-            }
-            return types;
-        }
-
-
-        /**
-        *-----------------------
-        * Cell Modifications
-        *-----------------------
-        **/
-
-        /** 
-        * Changes a single cellIndex that a TileType is to use when it is rendered.
-        * @method setCell
-        * @param type {number} The number of the TileType that is to change.
-        * @param cell {number} The new cellIndex it should have.
-        * @public
-        */
-        public setCell(type: number, cell: number) {
-            this.tileTypes[type].cellIndex = cell;
-        }
-
-        /** 
-        * Changes a range of cellIndexs for Tiles the same range of TileTypes. 
-        * @method setCellsByRange
-        * @param typeStart {number} The starting TileType that is to be modified.
-        * @param cellStart {number} The starting cellIndex that the first TileType should have.
-        * @param range {number} How many times it should run.
-        * @public
-        */
-        public setCellsByRange(typeStart: number, cellStart: number, range:number) {
-
-            for (var i = typeStart; i &lt; typeStart + range; i++) {
-                this.tileTypes[i].cellIndex = cellStart;
-                cellStart++;
-            } 
-
-        }
-
-        /**
-        *-----------------------
-        * Creation of Tilemap Layers
-        *-----------------------
-        **/
-
-        /** 
-        * Creates a new TileMapLayer with the details that are provided. 
-        * If no width/height/tileWidth/tileHeight parameters are passed then the values will be what this TileMap has.
-        * If no &#x27;data&#x27; is provided then the map will be automatically filled with empty Types of Tiles.
-        * Returns the new TileMapLayer that was created.
-        * @method createNewLayer
-        * @param name {String} Name of the TileMap.
-        * @param atlas {Kiwi.Textures.TextureAtlas} The TextureAtlas that this layer should use.
-        * @param data {Number[]} The tile information. 
-        * @param [w=this.width] {Number} The width of the whole tile map. In Tiles.
-        * @param [h=this.height] {Number} The height of the whole tile map. In Tiles.
-        * @param [x=0] {Number} The position of the tilemap on the x axis. In pixels.
-        * @param [y=0] {Number} The position of the tilemap on the y axis. In pixels.
-        * @param [tw=this.tileWidth] {Number} The width of a single tile.
-        * @param [th=this.tileHeight] {Number} The height of a single tile.
-        * @return {TileMapLayer} The TileMapLayer that was created.
-        * @public
-        */
-        public createNewLayer(name: string, atlas: Kiwi.Textures.TextureAtlas, data: number[]= [], w: number= this.width, h: number=this.height, x: number= 0, y: number= 0, tw:number=this.tileWidth, th:number=this.tileHeight): TileMapLayer {
-
-            //Did the user provide enough data?
-            if (data.length &lt; w * h) {
-
-                //No... So push empty cells instead
-                var i = data.length - 1;
-                while (++i &lt; w * h) {
-                    data.push(0);
-                }
-            }
-
-            //Create the new layer
-            var layer = new Kiwi.GameObjects.Tilemap.TileMapLayer(this, name, atlas, data, tw, th, x, y, w, h);
-
-            //Add the new layer to the array
-            this.layers.push(layer);
-
-            return layer;
-        }
-
-
-        /**
-        * Eventually will create a new object layer. Currently does nothing.
-        * @method createNewObjectLayer
-        * @public
-        */
-        public createNewObjectLayer() {
-            Kiwi.Log.log(&quot;OBJECT GROUP layers are currently not supported.&quot;, &#x27;#tilemap&#x27;);
-        }
-
-        
-        /**
-        * Eventually will create a new image layer. Currently does nothing.
-        * @method createNewObjectLayer
-        * @public
-        */
-        public createNewImageLayer() {
-            Kiwi.Log.log(&quot;IMAGE layers are currently not supported.&quot;, &#x27;#tilemap&#x27;);
-        }
-
-        /**
-        *-----------------------
-        * TileMapLayer Management Functions
-        *-----------------------
-        **/
-
-        /**
-        * Get a layer by the name that it was given upon creation.
-        * Returns null if no layer with that name was found.
-        * @method getLayerByName
-        * @param name {String} Name of the layer you would like to select.
-        * @return {TileMapLayer} Either the layer with the name passed, or null if no Layer with that name was found.
-        * @public
-        */
-        public getLayerByName(name: string):TileMapLayer {
-            for (var i = 0; i &lt; this.layers.length; i++) {
-                if (this.layers[i].name == name) {
-                    return this.layers[i];
-                }
-            }
-            return null;
-        }
-        
-        /**
-        * Returns the layer with the number associated with it in the layers array.
-        * @method getLayer
-        * @param num {Number} Number of the Layer you would like to get.
-        * @return {TileMapLayer}
-        * @public
-        */
-        public getLayer(num: number):TileMapLayer {
-            return (this.layers[num] !== undefined) ? this.layers[num] : null;
-        }
-
-
-        /**
-        * The type of object that it is.
-        * @method objType
-        * @return {String} &quot;TileMap&quot;
-        * @public
-        */
-        public objType() {
-            return &quot;TileMap&quot;;
-        }
-
-    }
-
-    export var ISOMETRIC: string = &quot;isometric&quot;;
-
-    export var ORTHOGONAL: string = &quot;orthogonal&quot;;
+
+	/**
+	* A TileMap handles the creation of TileMapLayers and the TileTypes that they use.
+	* Since a TileMap isn&#x27;t a Entity itself you cannot add it to the Stage inorder to render that it manages, 
+	* Instead you have to add each layer lies within it. This way you can have other GameObjects behind/in-front of layers.
+	* 
+	* @class TileMap
+	* @namespace Kiwi.GameObjects.Tilemap
+	* @constructor 
+	* @param state {Kiwi.State} The state that this Tilemap is on.
+	* @param [tileMapDataKey] {String} The Data key for the JSON you would like to use.
+	* @param [atlas] {Kiwi.Textures.TextureAtlas} The texture atlas that you would like the tilemap layers to use.
+	* @param [startingCell=0] {number} The number for the initial cell that the first TileType should use. See &#x27;createFromFileStore&#x27; for more information.
+	* @return {TileMap}
+	*/
+	export class TileMap {
+
+		constructor(state: Kiwi.State, tileMapData?: any, atlas?: Kiwi.Textures.TextureAtlas, startingCell:number=0) {
+
+			this.tileTypes = [];
+			this.createTileType(-1);
+			this.layers = [];
+
+			this.state = state;
+			this.game = state.game;
+
+			if (tileMapData !== undefined &amp;&amp; atlas !== undefined) {
+				this.createFromFileStore(tileMapData, atlas, startingCell);
+			} else if (tileMapData !== undefined || atlas !== undefined) {
+				Kiwi.Log.warn(&#x27;You must pass BOTH the TileMapDataKey and TextureAtlas inorder to create a TileMap from the File Store.&#x27;, &#x27;#tilemap&#x27;);
+			}
+
+		}
+
+		/**
+		* The orientation of the tilemap. 
+		* Note: This value does not affect the individual layers. 
+		* 
+		* @property orientation
+		* @type String
+		* @public
+		*/
+		public orientation: string;
+
+		/**
+		* Is an Array containing all of the TileTypes that are available on the TileMap.
+		* @property tileTypes
+		* @type TileType[]
+		* @public
+		*/
+		public tileTypes: TileType[];
+
+		/**
+		* A list of all of the TileMapLayers that exist on the TileMap.
+		* @property layers
+		* @type TileMapLayer
+		* @public
+		*/
+		public layers: TileMapLayer[];
+
+		/**
+		* The state that this TileMap exists on.
+		* @property state
+		* @type Kiwi.State
+		* @public
+		*/
+		public state: Kiwi.State;
+
+		/**
+		* The game that this TileMap is a part of.
+		* @property game
+		* @type Kiwi.Game
+		* @public
+		*/
+		public game: Kiwi.Game;
+
+		/**
+		* The default width of a single tile that a TileMapLayer is told to have upon its creation. 
+		* @property tileWidth
+		* @type Number
+		* @default 0
+		* @public
+		*/
+		public tileWidth: number = 0;
+
+		/**
+		* The default height of a single tile that a TileMapLayer is told to have upon its creation.
+		* @property tileHeight
+		* @type Number
+		* @default 0
+		* @public
+		*/
+		public tileHeight: number = 0;
+
+		/**
+		* The default width of all TileMapLayers when they are created. 
+		* This value is in Tiles.
+		* @property width
+		* @type Number
+		* @default 0
+		* @public
+		*/
+		public width: number = 0;
+
+		/**
+		* The default height of all TileMapLayers when they are created. 
+		* This value is in Tiles.
+		* @property height
+		* @type Number
+		* @default 0
+		* @public
+		*/
+		public height: number = 0;
+
+		/**
+		* The width of the tilemap in pixels. This value is READ ONLY.
+		* @property widthInPixels
+		* @type Number
+		* @public
+		*/
+		public get widthInPixels(): number {
+			return this.width * this.tileWidth;
+		}
+
+		/**
+		* The height of the tilemap in pixels. This value is READ ONLY.
+		* @property heightInPixels
+		* @type Number
+		* @public
+		*/
+		public get heightInPixels(): number {
+			return this.height * this.tileHeight;
+		}
+
+		/**
+		* Any properties that were found in the JSON during creation.
+		* @property properties
+		* @type Object
+		* @public
+		*/
+		public properties: any = {};
+
+		/** 
+		* Creates new tilemap layers from a JSON file that you pass (has to be in the Tiled Format).
+		* The texture atlas you pass is that one that each TileMapLayer found in the JSON will use, You can change the TextureAtlas afterwards.
+		* New TileTypes will automatically be created. The number is based on the Tileset parameter of the JSON. 
+		* The cell used for new TileTypes will begin at 0 and increment each time a new TileType is created (and a cell exists). Otherwise new TileTypes will start will a cell of -1 (none).
+		* @method createFromFileStore
+		* @param tileMapData {Any} This can either 
+		* @param atlas {Kiwi.Textures.TextureAtlas} The texture atlas that you would like the tilemap layers to use.
+		* @param [startingCell=0] {number} The number for the initial cell that the first TileType should use. If you pass -1 then no new TileTypes will be created.
+		* @public
+		*/
+		public createFromFileStore(tileMapData: any, atlas: Kiwi.Textures.TextureAtlas, startingCell:number=0) {
+
+			var json = null;
+
+			//Does the JSON exist?
+			switch (typeof tileMapData) {
+				case &#x27;string&#x27;:
+					if (this.game.fileStore.exists(tileMapData) == false) {
+						Kiwi.Log.error(&#x27;The JSON file you have told to use for a TileMap does not exist.&#x27;, &#x27;#tilemap&#x27;, &#x27;#json&#x27;);
+						return false;
+					}   
+
+					json = JSON.parse( this.game.fileStore.getFile(tileMapData).data );
+					break;
+
+				case &#x27;object&#x27;:
+					json = tileMapData;
+					break;
+
+				default:
+					Kiwi.Log.error(&#x27;The type of TileMapData passed could not be idenified. Please either pass a name of JSON file to use OR an object to be used.&#x27;, &#x27;#tilemap&#x27;);
+			}
+
+			//Get the map information
+			this.orientation = (json.orientation == undefined) ? ORTHOGONAL : json.orientation;
+			this.tileWidth = (json.tilewidth == undefined) ? 32 : json.tilewidth;
+			this.tileHeight = (json.tileheight == undefined) ? 32 : json.tileheight;
+			this.width = json.width;
+			this.height = json.height;
+
+
+			//Add the properties
+			for (var prop in json.properties) {
+				this.properties[prop] = json.properties[prop];
+			}
+
+
+			//Generate the Tiles needed.
+			if (json.tilesets !== &quot;undefined&quot; &amp;&amp; startingCell !== -1) 
+				this._generateTypesFromTileset(json.tilesets, atlas, startingCell);
+
+			//Generate the layers we need
+			for (var i = 0; i &lt; json.layers.length; i++) {
+				var layerData = json.layers[i];
+
+				//Check what type it is.
+				switch (json.layers[i].type) {
+					case &quot;tilelayer&quot;:
+						var w = (layerData.width !== undefined) ? layerData.width : this.width;
+						var h = (layerData.height !== undefined) ? layerData.height : this.height;
+
+						var layer = this.createNewLayer(layerData.name, atlas, layerData.data, w, h, layerData.x * this.tileWidth, layerData.y * this.tileHeight );
+						layer.orientation = this.orientation;
+						
+						//Add the extra data...
+						layer.visible = (layerData.visible == undefined) ? true : layerData.visible;
+						layer.alpha = (layerData.opacity == undefined) ? 1 : layerData.opacity;
+						if (layerData.properties !== undefined)layer.properties = layerData.properties;
+
+						break;
+
+					case &quot;objectgroup&quot;:
+						this.createNewObjectLayer();
+						break;
+
+					case &quot;imagelayer&quot;:
+						this.createNewImageLayer();
+						break;
+				}
+
+
+			}
+
+		}
+
+		/**
+		* Generates new TileTypes based upon the Tileset information that lies inside the Tiled JSON.
+		* This is an INTERNAL method, which is used when the createFromFileStore method is executed.
+		* @method _generateTypesFromTileset
+		* @param tilesetData {Array} The tileset part of the JSON.
+		* @param atlas {Kiwi.Textures.TextureAtlas} The Texture atlas which contains the cells that the new TileTypes will use.
+		* @param startingCell {Number} The first cell number that would be used.
+		* @private
+		*/
+		private _generateTypesFromTileset( tilesetData:any[], atlas:Kiwi.Textures.TextureAtlas, startingCell:number ) {
+
+			//Loop through the tilesets
+			for (var i = 0; i &lt; tilesetData.length; i++) {
+
+				var tileset = tilesetData[i];
+
+				//Tileset Information
+				var m = tileset.margin;
+				var s = tileset.spacing; 
+				var tw = tileset.tilewidth;
+				var th = tileset.tileheight;
+				var iw = tileset.imagewidth - m;
+				var ih = tileset.imageheight - m;
+
+				//Drawing offsets
+				var offset = (tileset.tileoffset == undefined) ? { x: 0, y: 0 } : tileset.tileoffset;
+
+				//Calculate how many tiles there are in this tileset and thus how many different tile type there can be.
+				for (var y = m; y &lt; ih; y += th) {
+					for (var x = m; x &lt; iw; x += tw) {
+
+						//Does the cell exist? Then use that.
+						var cell = (atlas.cells[startingCell] == undefined) ? -1 : startingCell ;  
+
+						var tileType = this.createTileType(cell);
+						tileType.offset.x = offset.x;
+						tileType.offset.y = offset.y;
+
+						startingCell++; //Increase the cell to use by one.
+					}
+				}
+
+				//Add tile properties
+				for (var tp in tileset.tileproperties) {
+					var tileType = this.tileTypes[(parseInt(tileset.firstgid) + parseInt(tp))];
+					tileType.properties = tileset.tileproperties[tp];
+				}
+
+			}
+
+		}
+
+		/**
+		* Method to set the default TileMap properties. Useful when wanting to create tilemaps programmatically.
+		* @method setTo
+		* @param tileWidth {Number} The width of a single tile.
+		* @param tileHeight {Number} The height of a single tile.
+		* @param width {Number} The width of the whole map.
+		* @param height {Number} The height of the whole map.
+		* @public
+		*/
+		public setTo(tileWidth: number, tileHeight: number, width: number, height: number) {
+			this.tileWidth = tileWidth;
+			this.tileHeight = tileHeight;
+			this.width = width;
+			this.height = height;
+		}
+
+		/**
+		*-----------------------
+		* Creation of Tile Types
+		*-----------------------
+		**/
+
+		/**
+		* Generates a single new TileType. Returns the TileType that was generated.
+		* @method createTileType
+		* @param [cell=-1] {Number} The cell that is to be used. Default is -1 (which means none)
+		* @return {TileType} The TileType generated.
+		* @public
+		*/
+		public createTileType(cell:number = -1):TileType {
+			var tileType = new TileType(this, this.tileTypes.length, cell);
+			this.tileTypes.push(tileType);
+
+			return tileType;
+		}
+		
+		/**
+		* Creates a new TileType for each cell that you pass.
+		* @method createTileTypes
+		* @param cells {Number[]} The cells that you want a new TileType created for.
+		* @return {TileTypes[]} The TileTypes generated.
+		* @public
+		*/
+		public createTileTypes(cells:number[]):TileType[] {
+			var types = [];
+			for (var i = 0; i &lt; cells.length; i++) {
+
+				types.push( this.createTileType( cells[i] ) );
+
+			}
+			return types;
+		}
+
+		/**
+		* Used to create a number of TileTypes based starting cell number and how many you want from there.
+		* @method createTileTypesByRange
+		* @param cellStart {Number} The starting number of the cell.
+		* @param range {Number} How many cells (from the starting cell) should be created.
+		* @return {TileTypes[]} The TileTypes generated.
+		*/
+		public createTileTypesByRange(cellStart: number, range: number): TileType[]{
+			var types = [];
+			for (var i = cellStart; i &lt;= cellStart + range; i++) {
+
+				types.push( this.createTileType( i ) );
+
+			}
+			return types;
+		}
+
+
+		/**
+		*-----------------------
+		* Cell Modifications
+		*-----------------------
+		**/
+
+		/** 
+		* Changes a single cellIndex that a TileType is to use when it is rendered.
+		* @method setCell
+		* @param type {number} The number of the TileType that is to change.
+		* @param cell {number} The new cellIndex it should have.
+		* @public
+		*/
+		public setCell(type: number, cell: number) {
+			this.tileTypes[type].cellIndex = cell;
+		}
+
+		/** 
+		* Changes a range of cellIndexs for Tiles the same range of TileTypes. 
+		* @method setCellsByRange
+		* @param typeStart {number} The starting TileType that is to be modified.
+		* @param cellStart {number} The starting cellIndex that the first TileType should have.
+		* @param range {number} How many times it should run.
+		* @public
+		*/
+		public setCellsByRange(typeStart: number, cellStart: number, range:number) {
+
+			for (var i = typeStart; i &lt; typeStart + range; i++) {
+				this.tileTypes[i].cellIndex = cellStart;
+				cellStart++;
+			} 
+
+		}
+
+		/**
+		*-----------------------
+		* Creation of Tilemap Layers
+		*-----------------------
+		**/
+
+		/** 
+		* Creates a new TileMapLayer with the details that are provided. 
+		* If no width/height/tileWidth/tileHeight parameters are passed then the values will be what this TileMap has.
+		* If no &#x27;data&#x27; is provided then the map will be automatically filled with empty Types of Tiles.
+		* Returns the new TileMapLayer that was created.
+		* @method createNewLayer
+		* @param name {String} Name of the TileMap.
+		* @param atlas {Kiwi.Textures.TextureAtlas} The TextureAtlas that this layer should use.
+		* @param data {Number[]} The tile information. 
+		* @param [w=this.width] {Number} The width of the whole tile map. In Tiles.
+		* @param [h=this.height] {Number} The height of the whole tile map. In Tiles.
+		* @param [x=0] {Number} The position of the tilemap on the x axis. In pixels.
+		* @param [y=0] {Number} The position of the tilemap on the y axis. In pixels.
+		* @param [tw=this.tileWidth] {Number} The width of a single tile.
+		* @param [th=this.tileHeight] {Number} The height of a single tile.
+		* @return {TileMapLayer} The TileMapLayer that was created.
+		* @public
+		*/
+		public createNewLayer(name: string, atlas: Kiwi.Textures.TextureAtlas, data: number[]= [], w: number= this.width, h: number=this.height, x: number= 0, y: number= 0, tw:number=this.tileWidth, th:number=this.tileHeight): TileMapLayer {
+
+			//Did the user provide enough data?
+			if (data.length &lt; w * h) {
+
+				//No... So push empty cells instead
+				var i = data.length - 1;
+				while (++i &lt; w * h) {
+					data.push(0);
+				}
+			}
+
+			//Create the new layer
+			var layer = new Kiwi.GameObjects.Tilemap.TileMapLayer(this, name, atlas, data, tw, th, x, y, w, h);
+
+			//Add the new layer to the array
+			this.layers.push(layer);
+
+			return layer;
+		}
+
+
+		/**
+		* Eventually will create a new object layer. Currently does nothing.
+		* @method createNewObjectLayer
+		* @public
+		*/
+		public createNewObjectLayer() {
+			Kiwi.Log.log(&quot;OBJECT GROUP layers are currently not supported.&quot;, &#x27;#tilemap&#x27;);
+		}
+
+
+		/**
+		* Eventually will create a new image layer. Currently does nothing.
+		* @method createNewObjectLayer
+		* @public
+		*/
+		public createNewImageLayer() {
+			Kiwi.Log.log(&quot;IMAGE layers are currently not supported.&quot;, &#x27;#tilemap&#x27;);
+		}
+
+		/**
+		*-----------------------
+		* TileMapLayer Management Functions
+		*-----------------------
+		**/
+
+		/**
+		* Get a layer by the name that it was given upon creation.
+		* Returns null if no layer with that name was found.
+		* @method getLayerByName
+		* @param name {String} Name of the layer you would like to select.
+		* @return {TileMapLayer} Either the layer with the name passed, or null if no Layer with that name was found.
+		* @public
+		*/
+		public getLayerByName(name: string):TileMapLayer {
+			for (var i = 0; i &lt; this.layers.length; i++) {
+				if (this.layers[i].name == name) {
+					return this.layers[i];
+				}
+			}
+			return null;
+		}
+
+		/**
+		* Returns the layer with the number associated with it in the layers array.
+		* @method getLayer
+		* @param num {Number} Number of the Layer you would like to get.
+		* @return {TileMapLayer}
+		* @public
+		*/
+		public getLayer(num: number):TileMapLayer {
+			return (this.layers[num] !== undefined) ? this.layers[num] : null;
+		}
+
+
+		/**
+		* The type of object that it is.
+		* @method objType
+		* @return {String} &quot;TileMap&quot;
+		* @public
+		*/
+		public objType() {
+			return &quot;TileMap&quot;;
+		}
+
+	}
+
+	export var ISOMETRIC: string = &quot;isometric&quot;;
+
+	export var ORTHOGONAL: string = &quot;orthogonal&quot;;
 
 }
 
diff --git a/docs/files/src_gameobjects_tilemap_TileMapLayer.ts.html b/docs/files/src_gameobjects_tilemap_TileMapLayer.ts.html
index 5de1a11..d18ae95 100644
--- a/docs/files/src_gameobjects_tilemap_TileMapLayer.ts.html
+++ b/docs/files/src_gameobjects_tilemap_TileMapLayer.ts.html
@@ -374,976 +374,972 @@ <h1 class="file-heading">File: src/gameobjects/tilemap/TileMapLayer.ts</h1>
 module Kiwi.GameObjects.Tilemap {
 
 
-    /**
-    * GameObject that contains the information held for a single Layer of Tiles, along with methods to handle the rendering of those Tiles. 
-    * A TileMapLayer should not be directly created, but instead should be created through a TileMap object instead.
-    * 
-    * @class TileMapLayer
-    * @extends Kiwi.Entity
-    * @namespace Kiwi.GameObjects.Tilemap
-    * @constructor
-    * @param tilemap {Kiwi.GameObjects.Tilemap.TileMap} The TileMap that this layer belongs to.
-    * @param name {String} The name of this TileMapLayer.
-    * @param atlas {Kiwi.Textures.TextureAtlas} The texture atlas that should be used when rendering this TileMapLayer onscreen.
-    * @param data {Number[]} The information about the tiles.
-    * @param tw {Number} The width of a single tile in pixels. Usually the same as the TileMap unless told otherwise.
-    * @param th {Number} The height of a single tile in pixels. Usually the same as the TileMap unless told otherwise.
-    * @param [x=0] {Number} The x coordinate of the tilemap in pixels.
-    * @param [y=0] {Number} The y coordinate of the tilemap in pixels.
-    * @param [w=0] {Number} The width of the whole tilemap in tiles. Usually the same as the TileMap unless told otherwise.
-    * @param [h=0] {Number} The height of the whole tilemap in tiles. Usually the same as the TileMap unless told otherwise.
-    * @return {TileMapLayer}
-    */
-    export class TileMapLayer extends Kiwi.Entity {
-
-        constructor(tilemap: Kiwi.GameObjects.Tilemap.TileMap, name: string, atlas: Kiwi.Textures.TextureAtlas, data: number[], tw: number, th: number, x: number= 0, y: number= 0, w:number=0, h:number=0) {
-            super(tilemap.state, x, y);
-
-            //Request the Shared Texture Atlas renderer.
-            if (this.game.renderOption === Kiwi.RENDERER_WEBGL) {
-                this.glRenderer = this.game.renderer.requestSharedRenderer(&quot;TextureAtlasRenderer&quot;);
-            }
-
-            this.name = name;
-            this.atlas = atlas;
-            this.tilemap = tilemap;
-            this._data = data;
-            this.tileWidth = tw;
-            this.tileHeight = th;
-            this.width = w;
-            this.height = h;
-
-            this._corner1 = new Kiwi.Geom.Point(0,0);
-            this._corner2 = new Kiwi.Geom.Point(0,0);
-            this._corner3 = new Kiwi.Geom.Point(0,0);
-            this._corner4 = new Kiwi.Geom.Point(0,0);
-
-            this.physics = this.components.add(new Kiwi.Components.ArcadePhysics(this, null));
-            this.physics.immovable = true;
-        }
-
-        /**
-        * The physics component contained on the Tilemap. Use for basic collisions between People and Tiles.
-        * Note: That tilemap layers a immovable and collisions with tiles are set on the individual TileTypes that are contained on the TileMap. 
-        * @property physics
-        * @type ArcadePhysics
-        * @public
-        */
-        public physics: Kiwi.Components.ArcadePhysics;
-
-        /**
-        * Returns the type of child that this is. 
-        * @type Number
-        * @return {Number} returns the type of child that the entity is
-        * @public
-        */
-        public childType(): number {
-            return Kiwi.TILE_LAYER;
-        }
-
-        /**
-        * The type of object that it is.
-        * @method objType
-        * @return {String} &quot;TileMapLayer&quot;
-        * @public
-        */
-        public objType() {
-            return &quot;TileMapLayer&quot;;
-        }
-
-        /**
-        * The tilemap that this TileMapLayer is a part of.
-        * @property tilemap
-        * @type TileMap
-        * @public
-        */
-        public tilemap: Kiwi.GameObjects.Tilemap.TileMap;
-
-        /**
-        * Properties about that this TileMapLayer has when it was created from a JSON file.
-        * @property properties
-        * @type Object
-        * @public
-        */
-        public properties: any = {};
-        
-        /**
-        * The width of this TileMap in tiles.
-        * @property width
-        * @type Number
-        * @public
-        */
-        public width: number;
-        
-        /**
-        * The height of this TileMap in tiles.
-        * @property height
-        * @type Number
-        * @public
-        */
-        public height: number;
-        
-        /**
-        * The width of a single tile.
-        * @property tileWidth
-        * @type Number
-        * @public
-        */
-        public tileWidth: number;
-        
-        /**
-        * The height of a single tile.
-        * @property tileHeight
-        * @type Number
-        * @public
-        */
-        public tileHeight: number;
-        
-        /**
-        * The texture atlas that should be used when rendering.
-        * @property atlas
-        * @type Kiwi.Textures.TextureAtlas
-        * @public
-        */
-        public atlas: Kiwi.Textures.TextureAtlas;
-        
-        /**
-        * The width of the layer in pixels. This property is READ ONLY.
-        * @property widthInPixels
-        * @type number
-        * @public
-        */
-        public get widthInPixels(): number {
-            return this.width * this.tilemap.tileWidth;
-        }
-        
-        /**
-        * The height of the layer in pixels. This property is READ ONLY.
-        * @property heightInPixels
-        * @type number
-        * @public
-        */
-        public get heightInPixels(): number {
-            return this.height * this.tilemap.tileHeight;
-        }
-
-        /**
-        * Override function to prevent unwanted inherited behaviour. Do not call.
-        *
-        * Because TileMapLayer extends Entity, it has a cellIndex parameter. However, it does not use a single atlas index, so this parameter is meaningless. It has deliberately been set to do nothing.
-        * @property cellIndex
-        * @type number
-        * @public
-        * @deprecated Not functional on this object.
-        * @since 1.1.0
-        */
-        public get cellIndex():number {
-            return null;
-        }
-        public set cellIndex( val: number ) {}
-
-        // Methods altered because TileMapLayer has its own width and height properties:
-        public scaleToWidth(value: number) {
-            this.scale = value / this.widthInPixels;
-        }
-        public scaleToHeight(value: number) {
-            this.scale = value / this.heightInPixels;
-        }
-        public centerAnchorPoint() {
-            this.anchorPointX = this.widthInPixels * 0.5;
-            this.anchorPointY = this.heightInPixels * 0.5;
-        }
-
-        /**
-        * A list containing all the types of tiles found on this TileMapLayer.
-        * @property _data
-        * @type number[]
-        * @private
-        */
-        private _data: number[];
-
-        /**
-        * Returns the total number of tiles. Either for a particular type if passed, otherwise of any type if not passed.
-        * @method countTiles
-        * @param [type] {Number} The type of tile you want to count.
-        * @return {Number} The number of tiles on this layer.
-        * @public
-        */
-        public countTiles(type?:number):number {
-
-            var cnt = 0;
-
-            for (var i = 0; i &lt; this._data.length; i++) {
-                if (type == undefined &amp;&amp; this._data[i] !== 0) cnt++;
-                else if (type === this._data[i]) cnt++; 
-            }
-
-            return cnt;
-        }
-
-        /**
-        * The orientation of the of tilemap. 
-        * TileMaps can be either &#x27;orthogonal&#x27; (normal) or &#x27;isometric&#x27;.
-        * @property orientation
-        * @type String
-        * @default &#x27;orthogonal&#x27;
-        * @public
-        */
-        public orientation: string = ORTHOGONAL;
-
-
-        /**
-        *-----------------------
-        * Getting Tiles
-        *-----------------------
-        */
-
-
-        /**
-        * A list containing all of the types of tiles found on this TileMapLayer. This is READ ONLY.
-        * @property tileData
-        * @type number[]
-        * @public
-        */
-        public get tileData(): number[] {
-            return this._data;
-        }
-        
-        /**
-        * Returns the index of the tile based on the x and y coordinates of the tile passed. 
-        * If no tile is a the coordinates given then -1 is returned instead.
-        * Coordinates are in tiles not pixels.
-        * @method getIndexFromXY
-        * @param x {Number} The x coordinate of the Tile you would like to retrieve. 
-        * @param y {Number} The y coordinate of the Tile you would like to retrieve.
-        * @return {Number} Either the index of the tile retrieved or -1 if none was found.
-        * @public
-        */
-        public getIndexFromXY(x: number, y: number): number {
-            var num = x + y * this.width;
-
-            //Does the index exist?
-            if (num &lt; 0 || num &gt;= this._data.length) return -1;
-            else return num;
-        }
-
-        /**
-        * Returns the TileType for a tile that is at a particular set of coordinates passed. 
-        * If no tile is found the null is returned instead.
-        * Coordinates passed are in tiles.
-        * @method getTileFromXY
-        * @param x {Number}
-        * @param y {Number}
-        * @return {Number} The tile
-        * @public
-        */
-        public getTileFromXY(x: number, y: number): TileType {
-            var t = this.getIndexFromXY(x, y);
-            return (t !== -1) ? this.tilemap.tileTypes[ this._data[t] ] : null;
-        }
-
-        /**
-        * Returns the index of the tile based on the x and y pixel coordinates that are passed. 
-        * If no tile is a the coordinates given then -1 is returned instead.
-        * Coordinates are in pixels not tiles and use the world coordinates of the tilemap.
-        * Note: Currently only working for ORTHOGONAL TileMaps.
-        *
-        * @method getIndexFromCoords
-        * @param x {Number} The x coordinate of the Tile you would like to retrieve. 
-        * @param y {Number} The y coordinate of the Tile you would like to retrieve.
-        * @return {Number} Either the index of the tile retrieved or -1 if none was found.
-        * @public
-        */
-        public getIndexFromCoords(x: number, y: number): number {
-
-            //Not with the bounds?
-            if (x &gt; this.transform.worldX + this.widthInPixels || y &gt; this.transform.worldY + this.heightInPixels || x &lt; this.transform.worldX || y &lt; this.transform.worldY)
-                return -1;
-
-            //Is so get the tile
-            var tx = Kiwi.Utils.GameMath.snapToFloor(x - this.transform.worldX, this.tileWidth) / this.tileWidth;
-            var ty = Kiwi.Utils.GameMath.snapToFloor(y - this.transform.worldY, this.tileHeight) / this.tileHeight;
-
-            return this.getIndexFromXY(tx, ty);
-
-        }
-        
-        /**
-        * Returns the TileType for a tile that is at a particular coordinate passed. 
-        * If no tile is found then null is returned instead.
-        * Coordinates passed are in pixels and use the world coordinates of the tilemap.
-        * Note: Currently only working for ORTHOGONAL TileMaps.
-        * 
-        * @method getTileFromCoords
-        * @param x {Number}
-        * @param y {Number}
-        * @return {Number} The tile
-        * @public
-        */
-        public getTileFromCoords(x: number, y: number): TileType {
-            var t = this.getIndexFromCoords(x, y);
-            return (t !== -1) ? this.tilemap.tileTypes[ this._data[t] ] : null;
-        }
-
-        /**
-        * Returns the indexes of every tile of a type you pass. 
-        * @method getIndexsByType
-        * @param type {Number}
-        * @return {Number[]}
-        * @public
-        */
-        public getIndexesByType(type:number):number[] {
-            var tiles = [];
-            for (var i = 0; i &lt; this._data.length; i++) {
-                if (this._data[i] == type) tiles.push(i);
-            }
-            return tiles;
-        }
-
-
-        /**
-        *-----------------------
-        * Tiles Manipulation
-        *-----------------------
-        */
-
-        /**
-        * Sets the tile to be used at the coordinates provided. 
-        * Can be used to override a tile that may already exist at the location.
-        * @method setTile
-        * @param x {Number} The coordinate of the tile on the x axis. 
-        * @param y {Number} The coordinate of the tile on the y axis.
-        * @param tileType {Number} The type of tile that should be now used.
-        * @return {Boolean} If a tile was changed or not.
-        * @public
-        */
-        public setTile(x: number, y: number, tileType:number):boolean {
-            var x = this.getIndexFromXY(x, y);
-
-            if (x !== -1) {
-                this._data[x] = tileType;
-                return true;
-            } 
-
-            return false;
-        }
-
-        /**
-        * Sets the tile to be used at the index provided.
-        * Can be used to override a tile that may already exist at the location.
-        * @method setTileByIndex
-        * @param index {Number} The index of the tile that you want to change.
-        * @param tileType {Number} The new tile type to be used at that position.
-        * @public
-        */
-        public setTileByIndex(index: number, tileType: number) {
-            this._data[index] = tileType;
-        }
-
-        /**
-        * Randomizes the types of tiles used in an area of the layer. You can choose which types of tiles to use, and the area.
-        * Default tile types used are everyone avaiable. 
-        * @method randomizeTiles
-        * @param [types] {Number[]} A list of TileTypes that can be used. Default is every tiletype on the TileMap.
-        * @param [x=0] {Number} The starting tile on the x axis to fill. 
-        * @param [y=0] {Number} The starting tile on the y axis to fill.
-        * @param [width=this.width] {Number} How far across you want to go.
-        * @param [height=this.height] {Number} How far down you want to go.
-        * @public
-        */
-        public randomizeTiles(types?: number[], x: number= 0, y: number= 0, width: number= this.width, height: number= this.height) {
-
-            if (types == undefined) {
-                types = [];
-                var i = 0;
-                while (i++ &lt; this.tilemap.tileTypes.length) {
-                    types.push(i);
-                }
-            }
-
-            for (var j = y; j &lt; y + height; j++) {
-                for (var i = x; i &lt; x + width; i++) {
-
-                    var tile = this.getIndexFromXY(i, j);
-                    if (tile !== -1) this._data[tile] = this.game.rnd.pick(types);
-
-                }
-            }
-
-        }
-
-        /**
-        * Makes all of the tiles in the area specified a single type that is passed.
-        * @method fill
-        * @param type {Number} The type of tile you want to fill in the area with.
-        * @param [x=0] {Number} The starting tile on the x axis to fill. 
-        * @param [y=0] {Number} The starting tile on the y axis to fill.
-        * @param [width=this.width] {Number} How far across you want to go.
-        * @param [height=this.height] {Number} How far down you want to go.
-        * @public
-        */
-        public fill(type: number, x: number= 0, y: number= 0, width: number= this.width, height: number= this.height) {
-
-            for (var j = y; j &lt; y + height; j++) {
-                for (var i = x; i &lt; x + width; i++) {
-
-                    var tile = this.getIndexFromXY(i, j);
-                    if (tile !== -1) this._data[tile ] = type;
-
-                }
-            }
-
-        }
-
-        /**
-        * Replaces all tiles of typeA to typeB in the area specified. If no area is specified then it is on the whole layer.
-        * @method replaceTiles
-        * @param typeA {Number} The type of tile you want to be replaced.
-        * @param typeB {Number} The type of tile you want to be used instead.
-        * @param [x=0] {Number} The starting tile on the x axis to fill. 
-        * @param [y=0] {Number} The starting tile on the y axis to fill.
-        * @param [width=this.width] {Number} How far across you want to go.
-        * @param [height=this.height] {Number} How far down you want to go.
-        * @public
-        */
-        public replaceTiles(typeA: number, typeB: number, x:number=0, y:number=0, width:number=this.width,height:number=this.height) {
-
-            for (var j = y; j &lt; y + height; j++) {
-                for (var i = x; i &lt; x + width; i++) {
-
-                    var tile = this.getIndexFromXY(i, j);
-                    if (tile !== -1 &amp;&amp; this._data[tile] == typeA) this._data[tile] = typeB; 
-
-                }
-            }
-
-        }
-
-        /**
-        * Swaps all the tiles that are typeA -&gt; typeB and typeB -&gt; typeA inside the area specified. If no area is specified then it is on the whole layer.
-        * @method swapTiles
-        * @param typeA {number} The type of tile you want to be replaced with typeB.
-        * @param typeB {number} The type of tile you want to be replaced with typeA.
-        * @param [x=0] {number} The starting tile on the x axis to fill. 
-        * @param [y=0] {number} The starting tile on the y axis to fill.
-        * @param [width=this.width] {number} How far across you want to go.
-        * @param [height=this.height] {number} How far down you want to go.
-        * @public
-        */
-        public swapTiles(typeA: number, typeB: number, x: number= 0, y: number= 0, width: number= this.width, height: number= this.height) {
-
-            for (var j = y; j &lt; y + height; j++) {
-                for (var i = x; i &lt; x + width; i++) {
-                    var tile = this.getIndexFromXY(i, j);
-
-                    if (tile !== -1) {
-                        if (this._data[tile] == typeA) this._data[tile] = typeB;
-                        else if (this._data[tile] == typeB) this._data[tile] = typeA;
-                    } 
-                }
-            }
-
-        }
-
-        /**
-        *-----------------------
-        * Get Tiles By Collision Methods
-        *-----------------------
-        */
-
-        /**
-        * Returns the tiles which overlap with a provided entities hitbox component. 
-        * Only collidable tiles on ANY side will be returned unless you pass a particular side.
-        * Note: Only designed to work with ORTHOGONAL types of tilemaps, results maybe unexpected for other types of tilemaps.
-        * 
-        * @method getOverlappingTiles
-        * @param entity {Kiwi.Entity} The entity you would like to check for the overlap.
-        * @param [collisionType=ANY] {Number} The particular type of collidable tiles which you would like to check for.
-        * @return {Object[]} Returns an Array of Objects containing information about the tiles which were found. Index/X/Y information is contained within each Object. 
-        * @public
-        */
-        public getOverlappingTiles(entity: Kiwi.Entity, collisionType: number= Kiwi.Components.ArcadePhysics.ANY): any {
-
-            //Do they have a box?
-            if (entity.components.hasComponent(&quot;Box&quot;) == false)
-                return [];
-
-            //Get the box off them
-            var b: Kiwi.Geom.Rectangle = entity.components.getComponent(&#x27;Box&#x27;).worldHitbox;
-
-            //Is the person within the map&#x27;s bounds?    
-            if (b.left &gt; this.transform.worldX + this.widthInPixels || b.right &lt; this.transform.worldX || b.bottom &lt; this.transform.worldY || b.top &gt; this.transform.worldY + this.heightInPixels)
-                return [];
-
-            var worldX = this.transform.worldX;
-            var worldY = this.transform.worldY;
-
-            var nx = b.x - worldX;
-            var ny = b.y - worldY;
-
-            //Get starting location and now many tiles from there we will check. 
-            var x = Kiwi.Utils.GameMath.snapToFloor(nx, this.tileWidth) / this.tileWidth;
-            var y = Kiwi.Utils.GameMath.snapToFloor(ny, this.tileHeight) / this.tileHeight;
-            var w = Kiwi.Utils.GameMath.snapToCeil(b.width, this.tileWidth) / this.tileWidth;
-            var h = Kiwi.Utils.GameMath.snapToCeil(b.height, this.tileHeight) / this.tileHeight;
-
-            //Add one, because we want to include the very end tile.
-            var tiles = this.getCollidableTiles(x, y, w + 1, h + 1, collisionType);
-
-            //Loop through the tiles and make sure they are actually overlapping with the Entity.
-            for (var i = 0; i &lt; tiles.length; i++) {
-                var t = tiles[i];
-
-                if (t.x + worldX &gt; b.right || t.x + this.tileWidth + worldX &lt; b.left || t.y + worldY &gt; b.bottom || t.y + this.tileHeight + worldY &lt; t.top) {
-                    tiles.splice(i, 1);
-                    i--;
-                } 
-            }
-
-            return tiles;
-
-        }
-
-
-        /**
-        * Returns the tiles which can collide with other objects (on ANY side unless otherwise specified) within an area provided.
-        * By default the area is the whole tilemap.
-        * 
-        * @method getCollidableTiles
-        * @param [x=0] {Number} The x coordinate of the first tile to check.
-        * @param [y=0] {Number} The y coordinate of the first tile to check.
-        * @param [width=widthOfMap] {Number} The width from the x coordinate.
-        * @param [height=heightOfmap] {Number} The height from the y coordinate.
-        * @param [collisionType=ANY] {Number} The type of collidable tiles that should be return. By default ANY type of collidable tiles will be returned. 
-        * @return {Object[]} Returns an Array of Objects containing information about the tiles which were found. Index/X/Y information is contained within each Object. 
-        * @public
-        */
-        public getCollidableTiles(x: number= 0, y: number= 0, width: number= this.width, height: number = this.height, collisionType: number= Kiwi.Components.ArcadePhysics.ANY): any {
-
-            var tiles = [];
-
-            //Make sure its within the map.
-            if (x &gt; this.width || y &gt; this.height) return; 
-
-            if (x &lt; 0) x = 0;
-            if (y &lt; 0) y = 0;
-
-            if (x + width &gt; this.width) width = this.width - x;
-            if (y + height &gt; this.height) height = this.height - y;
-
-            //Loop through and of the tiles.
-            for (var j = y; j &lt; y + height; j++) {
-                for (var i = x; i &lt; x + width; i++) {
-
-                    //Get the tile index.
-                    var index = this.getIndexFromXY(i, j);
-
-                    //Does that index exist? Should do but just in case.
-                    if (index === -1) continue;
-
-                    var type = this.tileData[index];
-
-                    //If the collision type matches the one passed. 
-                    if ((this.tilemap.tileTypes[type].allowCollisions &amp; collisionType) !== Kiwi.Components.ArcadePhysics.NONE) {
-
-                        tiles.push({
-                            index: index,
-                            type: type,
-                            x: i * this.tileWidth,
-                            y: j * this.tileHeight
-                        });
-
-
-                    }
-
-                }
-            }
-
-            return tiles;
-        }
-
-
-        /**
-        * The update loop that is executed when this TileMapLayer is add to the Stage.
-        * @method update
-        * @public 
-        */
-        public update() {
-            super.update();
-
-        }
-        
-        /**
-        *-----------------------
-        * Temp Properties used During Rendering
-        *-----------------------
-        */
-
-        /**
-        * Used whilst rendering to calculate the number of tiles to be rendered on the X axis.
-        * Is updated each frame, via the _calculateBoundaries method.
-        * @property _maxX
-        * @type number
-        * @private
-        */
-        private _maxX: number;
-        
-        /**
-        * Used whilst rendering to calculate the number of tiles to be rendered on the Y axis.
-        * Is updated each frame, via the _calculateBoundaries method.
-        * @property _maxY
-        * @type number
-        * @private
-        */
-        private _maxY: number;
-
-        /**
-        * Used whilst rendering to calculate which is the first tile to be rendered on the X axis.
-        * Is updated each frame, via the _calculateBoundaries method.
-        * @property _startX
-        * @type number
-        * @private
-        */
-        private _startX: number;
-
-        /**
-        * Used whilst rendering to calculate which is the first tile to be rendered on the Y axis.
-        * Is updated each frame, via the _calculateBoundaries method.
-        * @property _startY
-        * @type number
-        * @private
-        */
-        private _startY: number;
-
-        /**
-        * Temporary property that holds the tileType of the current tile being rendered.
-        * @property _temptype
-        * @type TileType
-        * @private
-        */
-        private _temptype: TileType;
-
-        /**
-        * Corner values used internally.
-        * @property corner1
-        * @type {Kiwi.Geom.Point}
-        * @private
-        * @since 1.1.0
-        */
-        private _corner1: Kiwi.Geom.Point;
-        /**
-        * Corner values used internally.
-        * @property corner2
-        * @type {Kiwi.Geom.Point}
-        * @private
-        * @since 1.1.0
-        */
-        private _corner2: Kiwi.Geom.Point;
-        /**
-        * Corner values used internally.
-        * @property corner3
-        * @type {Kiwi.Geom.Point}
-        * @private
-        * @since 1.1.0
-        */
-        private _corner3: Kiwi.Geom.Point;
-        /**
-        * Corner values used internally.
-        * @property corner4
-        * @type {Kiwi.Geom.Point}
-        * @private
-        * @since 1.1.0
-        */
-        private _corner4: Kiwi.Geom.Point;
-
-        /**
-        * Used to calculate the position of the tilemap on the stage as well as how many tiles can fit on the screen. 
-        * All coordinates calculated are stored as temporary properties (maxX/Y, startX/Y).
-        *
-        * @method _calculateBoundaries
-        * @param camera {Camera}
-        * @param matrix {Matrix} 
-        * @private
-        */
-        private _calculateBoundaries(camera: Kiwi.Camera, matrix: Kiwi.Geom.Matrix) {
-
-            //If we are calculating the coordinates for &#x27;regular&#x27; then we can do that rather easy
-            if (this.orientation == ORTHOGONAL) {
-                // Account for camera and object transformation
-                // Initialise corners...
-                this._corner1.setTo(0, 0);
-                this._corner2.setTo(this.game.stage.width, 0);
-                this._corner3.setTo(this.game.stage.width, this.game.stage.height);
-                this._corner4.setTo(0, this.game.stage.height);
-                // Transform corners by camera...
-                this._corner1 = camera.transformPoint(this._corner1);
-                this._corner2 = camera.transformPoint(this._corner2);
-                this._corner3 = camera.transformPoint(this._corner3);
-                this._corner4 = camera.transformPoint(this._corner4);
-                // Transform corners by object...
-                var m = matrix.clone();
-                m.invert();
-                this._corner1 = m.transformPoint(this._corner1);
-                this._corner2 = m.transformPoint(this._corner2);
-                this._corner3 = m.transformPoint(this._corner3);
-                this._corner4 = m.transformPoint(this._corner4);
-                // Find min/max values in X and Y...
-                this._startX = Math.min(this._corner1.x, this._corner2.x, this._corner3.x, this._corner4.x);
-                this._startY = Math.min(this._corner1.y, this._corner2.y, this._corner3.y, this._corner4.y);
-                this._maxX = Math.max(this._corner1.x, this._corner2.x, this._corner3.x, this._corner4.x);
-                this._maxY = Math.max(this._corner1.y, this._corner2.y, this._corner3.y, this._corner4.y);
-                // Convert to tile units...
-                this._startX /= this.tileWidth;
-                this._startY /= this.tileHeight;
-                this._maxX /= this.tileWidth;
-                this._maxY /= this.tileHeight;
-                // Truncate units...
-                this._startX = Math.floor(this._startX);
-                this._startY = Math.floor(this._startY);
-                this._maxX = Math.ceil(this._maxX);
-                this._maxY = Math.ceil(this._maxY);
-                // Clamp values to tilemap range...
-                this._startX = Kiwi.Utils.GameMath.clamp(this._startX, this.width);
-                this._startY = Kiwi.Utils.GameMath.clamp(this._startY, this.height);
-                this._maxX = Kiwi.Utils.GameMath.clamp(this._maxX, this.width);
-                this._maxY = Kiwi.Utils.GameMath.clamp(this._maxY, this.height);
-
-                return;
-            } 
-
-            //Otherwise we can&#x27;t *just yet* so render the whole lot
-            if (this.orientation == ISOMETRIC) {
-                this._startX = 0;
-                this._startY = 0;
-                this._maxX = this.width;
-                this._maxY = this.height;
-            }
-        }
-
-        /** 
-        * ChartToScreen maps a point in the game tile coordinates into screen pixel
-        * coordinates that indicate where the tile should be drawn.
-        * Note: This is for use in ISOMETRIC Tilemaps.
-        *
-        * @method chartToScreen
-        * @param chartPt {any} A Object containing x/y properties of the tile.
-        * @param tileW {Number} The width of the tile
-        * @param tileH {Number} The height of the tile
-        * @return {Object} With x/y properties of the location of the map onscreen.
-        * @public
-        */ 
-        public chartToScreen(chartPt:any, tileW:number, tileH:number):any {
-            return { x:chartPt.x * tileW - chartPt.y * tileW, 
-                y:chartPt.x * tileH / 2 + chartPt.y * tileH / 2 };
-        }
-
-        /**
-        * ScreenToChart maps a point in screen coordinates into the game tile chart
-        * coordinates for the tile on which the screen point falls on.
-        * This is for use in ISOMETRIC Tilemaps.
-        *
-        * @method screenToChart
-        * @param scrPt {any} An object containing x/y coordinates of the point on the screen you want to convert to tile coordinates.
-        * @param tileW {Number} The width of a single tile.
-        * @param tileH {Number} The height of a single tile.
-        * @return {Object} With x/y properties of the location of tile on the screen.
-        * @public
-        */
-        public screenToChart(scrPt:any, tileW:number, tileH:number):any {
-            var column = Math.floor(scrPt.x / tileW);
-            var row = Math.floor((scrPt.y - column * (tileH / 2)) / tileH);
-            return { x:column + row, y:row };
-        }
-        
-        /** 
-        * The render loop which is used when using the Canvas renderer.
-        * @method render
-        * @param camera {Camera}
-        * @public
-        */
-        public render(camera: Kiwi.Camera) {
-
-            //When not to render the map.
-            if (this.visible === false || this.alpha &lt; 0.1 || this.exists === false) {
-                return;
-            }
-
-            //Get the context.
-            var ctx = this.game.stage.ctx;
-            ctx.save();
-
-            //Make the map alphed out.
-            if (this.alpha &gt; 0 &amp;&amp; this.alpha &lt;= 1) {
-                ctx.globalAlpha = this.alpha;
-            }
-
-            // Transform
-            var t: Kiwi.Geom.Transform = this.transform;
-            var m: Kiwi.Geom.Matrix = t.getConcatenatedMatrix();
-
-            ctx.transform(m.a, m.b, m.c, m.d, m.tx, m.ty);
-
-            this._calculateBoundaries(camera, m);
-            
-            for (var y = this._startY; y &lt; this._maxY; y++) {
-                for (var x = this._startX; x &lt; this._maxX; x++) {
-
-                    if ( (this._temptype = this.getTileFromXY(x, y)) &amp;&amp; this._temptype.cellIndex !== -1 ) {
-
-                        var cell = this.atlas.cells[this._temptype.cellIndex];
-                        
-                        var drawX:number;
-                        var drawY:number;
-                        
-                        if (this.orientation == ISOMETRIC) {
-
-                            // Isometric maps
-                            
-                            var offsetX = this._temptype.offset.x;
-                            var offsetY = this._temptype.offset.y;
-                            var w = this.tileWidth * (this.width * 2 - 1 );
-                            var h = this.tileHeight * this.height;
-
-                            // We want &lt;0,0&gt;&#x27;s horizontal center point to be in the screen center, hence the -tileWidth/2.
-                            var shiftX = this.tileWidth / 2;
-
-                            var screenPos = this.chartToScreen( 
-                                { x:x , y:y }, 
-                                this.tileWidth/2, 
-                                this.tileHeight);
-
-                            drawX = screenPos.x + this._temptype.offset.x - shiftX;
-                            drawY = screenPos.y - (cell.h - this.tileHeight) + this._temptype.offset.y;
-
-                        } else {
-                            
-                            // Orthogonal maps
-
-                            drawX = x * this.tileWidth + this._temptype.offset.x;
-                            drawY = y * this.tileHeight - (cell.h - this.tileHeight) + this._temptype.offset.y;
-
-                        }
-                        
-                        ctx.drawImage(
-                            this.atlas.image,
-                            cell.x,
-                            cell.y,
-                            cell.w,
-                            cell.h,
-                            drawX,
-                            drawY,
-                            cell.w,
-                            cell.h
-                            );
-
-                    }
-
-
-                }
-            }
-
-
-            ctx.restore();
-            return true;
-        }
-
-        public renderGL(gl: WebGLRenderingContext, camera: Kiwi.Camera, params: any = null) {
-
-            //Setup
-            var vertexItems = [];
-            
-            //Create the point objects.
-            var pt1 = new Kiwi.Geom.Point();
-            var pt2 = new Kiwi.Geom.Point();
-            var pt3 = new Kiwi.Geom.Point();
-            var pt4 = new Kiwi.Geom.Point();
+	/**
+	* GameObject that contains the information held for a single Layer of Tiles, along with methods to handle the rendering of those Tiles. 
+	* A TileMapLayer should not be directly created, but instead should be created through a TileMap object instead.
+	* 
+	* @class TileMapLayer
+	* @extends Kiwi.Entity
+	* @namespace Kiwi.GameObjects.Tilemap
+	* @constructor
+	* @param tilemap {Kiwi.GameObjects.Tilemap.TileMap} The TileMap that this layer belongs to.
+	* @param name {String} The name of this TileMapLayer.
+	* @param atlas {Kiwi.Textures.TextureAtlas} The texture atlas that should be used when rendering this TileMapLayer onscreen.
+	* @param data {Number[]} The information about the tiles.
+	* @param tw {Number} The width of a single tile in pixels. Usually the same as the TileMap unless told otherwise.
+	* @param th {Number} The height of a single tile in pixels. Usually the same as the TileMap unless told otherwise.
+	* @param [x=0] {Number} The x coordinate of the tilemap in pixels.
+	* @param [y=0] {Number} The y coordinate of the tilemap in pixels.
+	* @param [w=0] {Number} The width of the whole tilemap in tiles. Usually the same as the TileMap unless told otherwise.
+	* @param [h=0] {Number} The height of the whole tilemap in tiles. Usually the same as the TileMap unless told otherwise.
+	* @return {TileMapLayer}
+	*/
+	export class TileMapLayer extends Kiwi.Entity {
+
+		constructor(tilemap: Kiwi.GameObjects.Tilemap.TileMap, name: string, atlas: Kiwi.Textures.TextureAtlas, data: number[], tw: number, th: number, x: number= 0, y: number= 0, w:number=0, h:number=0) {
+			super(tilemap.state, x, y);
+
+			//Request the Shared Texture Atlas renderer.
+			if (this.game.renderOption === Kiwi.RENDERER_WEBGL) {
+				this.glRenderer = this.game.renderer.requestSharedRenderer(&quot;TextureAtlasRenderer&quot;);
+			}
+
+			this.name = name;
+			this.atlas = atlas;
+			this.tilemap = tilemap;
+			this._data = data;
+			this.tileWidth = tw;
+			this.tileHeight = th;
+			this.width = w;
+			this.height = h;
+
+			this._corner1 = new Kiwi.Geom.Point(0,0);
+			this._corner2 = new Kiwi.Geom.Point(0,0);
+			this._corner3 = new Kiwi.Geom.Point(0,0);
+			this._corner4 = new Kiwi.Geom.Point(0,0);
+
+			this.physics = this.components.add(new Kiwi.Components.ArcadePhysics(this, null));
+			this.physics.immovable = true;
+		}
+
+		/**
+		* The physics component contained on the Tilemap. Use for basic collisions between People and Tiles.
+		* Note: That tilemap layers a immovable and collisions with tiles are set on the individual TileTypes that are contained on the TileMap. 
+		* @property physics
+		* @type ArcadePhysics
+		* @public
+		*/
+		public physics: Kiwi.Components.ArcadePhysics;
+
+		/**
+		* Returns the type of child that this is. 
+		* @type Number
+		* @return {Number} returns the type of child that the entity is
+		* @public
+		*/
+		public childType(): number {
+			return Kiwi.TILE_LAYER;
+		}
+
+		/**
+		* The type of object that it is.
+		* @method objType
+		* @return {String} &quot;TileMapLayer&quot;
+		* @public
+		*/
+		public objType() {
+			return &quot;TileMapLayer&quot;;
+		}
+
+		/**
+		* The tilemap that this TileMapLayer is a part of.
+		* @property tilemap
+		* @type TileMap
+		* @public
+		*/
+		public tilemap: Kiwi.GameObjects.Tilemap.TileMap;
+
+		/**
+		* Properties about that this TileMapLayer has when it was created from a JSON file.
+		* @property properties
+		* @type Object
+		* @public
+		*/
+		public properties: any = {};
+
+		/**
+		* The width of this TileMap in tiles.
+		* @property width
+		* @type Number
+		* @public
+		*/
+		public width: number;
+
+		/**
+		* The height of this TileMap in tiles.
+		* @property height
+		* @type Number
+		* @public
+		*/
+		public height: number;
+
+		/**
+		* The width of a single tile.
+		* @property tileWidth
+		* @type Number
+		* @public
+		*/
+		public tileWidth: number;
+
+		/**
+		* The height of a single tile.
+		* @property tileHeight
+		* @type Number
+		* @public
+		*/
+		public tileHeight: number;
+
+		/**
+		* The texture atlas that should be used when rendering.
+		* @property atlas
+		* @type Kiwi.Textures.TextureAtlas
+		* @public
+		*/
+		public atlas: Kiwi.Textures.TextureAtlas;
+
+		/**
+		* The width of the layer in pixels. This property is READ ONLY.
+		* @property widthInPixels
+		* @type number
+		* @public
+		*/
+		public get widthInPixels(): number {
+			return this.width * this.tilemap.tileWidth;
+		}
+
+		/**
+		* The height of the layer in pixels. This property is READ ONLY.
+		* @property heightInPixels
+		* @type number
+		* @public
+		*/
+		public get heightInPixels(): number {
+			return this.height * this.tilemap.tileHeight;
+		}
+
+		/**
+		* Override function to prevent unwanted inherited behaviour. Do not call.
+		*
+		* Because TileMapLayer extends Entity, it has a cellIndex parameter. However, it does not use a single atlas index, so this parameter is meaningless. It has deliberately been set to do nothing.
+		* @property cellIndex
+		* @type number
+		* @public
+		* @deprecated Not functional on this object.
+		* @since 1.1.0
+		*/
+		public get cellIndex():number {
+			return null;
+		}
+		public set cellIndex( val: number ) {}
+
+		// Methods altered because TileMapLayer has its own width and height properties:
+		public scaleToWidth(value: number) {
+			this.scale = value / this.widthInPixels;
+		}
+		public scaleToHeight(value: number) {
+			this.scale = value / this.heightInPixels;
+		}
+		public centerAnchorPoint() {
+			this.anchorPointX = this.widthInPixels * 0.5;
+			this.anchorPointY = this.heightInPixels * 0.5;
+		}
+
+		/**
+		* A list containing all the types of tiles found on this TileMapLayer.
+		* @property _data
+		* @type number[]
+		* @private
+		*/
+		private _data: number[];
+
+		/**
+		* Returns the total number of tiles. Either for a particular type if passed, otherwise of any type if not passed.
+		* @method countTiles
+		* @param [type] {Number} The type of tile you want to count.
+		* @return {Number} The number of tiles on this layer.
+		* @public
+		*/
+		public countTiles(type?:number):number {
+
+			var cnt = 0;
+
+			for (var i = 0; i &lt; this._data.length; i++) {
+				if (type == undefined &amp;&amp; this._data[i] !== 0) cnt++;
+				else if (type === this._data[i]) cnt++; 
+			}
+
+			return cnt;
+		}
+
+		/**
+		* The orientation of the of tilemap. 
+		* TileMaps can be either &#x27;orthogonal&#x27; (normal) or &#x27;isometric&#x27;.
+		* @property orientation
+		* @type String
+		* @default &#x27;orthogonal&#x27;
+		* @public
+		*/
+		public orientation: string = ORTHOGONAL;
+
+
+		/**
+		*-----------------------
+		* Getting Tiles
+		*-----------------------
+		*/
+
+
+		/**
+		* A list containing all of the types of tiles found on this TileMapLayer. This is READ ONLY.
+		* @property tileData
+		* @type number[]
+		* @public
+		*/
+		public get tileData(): number[] {
+			return this._data;
+		}
+
+		/**
+		* Returns the index of the tile based on the x and y coordinates of the tile passed. 
+		* If no tile is a the coordinates given then -1 is returned instead.
+		* Coordinates are in tiles not pixels.
+		* @method getIndexFromXY
+		* @param x {Number} The x coordinate of the Tile you would like to retrieve. 
+		* @param y {Number} The y coordinate of the Tile you would like to retrieve.
+		* @return {Number} Either the index of the tile retrieved or -1 if none was found.
+		* @public
+		*/
+		public getIndexFromXY(x: number, y: number): number {
+			var num = x + y * this.width;
+
+			//Does the index exist?
+			if (num &lt; 0 || num &gt;= this._data.length) return -1;
+			else return num;
+		}
+
+		/**
+		* Returns the TileType for a tile that is at a particular set of coordinates passed. 
+		* If no tile is found the null is returned instead.
+		* Coordinates passed are in tiles.
+		* @method getTileFromXY
+		* @param x {Number}
+		* @param y {Number}
+		* @return {Number} The tile
+		* @public
+		*/
+		public getTileFromXY(x: number, y: number): TileType {
+			var t = this.getIndexFromXY(x, y);
+			return (t !== -1) ? this.tilemap.tileTypes[ this._data[t] ] : null;
+		}
+
+		/**
+		* Returns the index of the tile based on the x and y pixel coordinates that are passed. 
+		* If no tile is a the coordinates given then -1 is returned instead.
+		* Coordinates are in pixels not tiles and use the world coordinates of the tilemap.
+		* Note: Currently only working for ORTHOGONAL TileMaps.
+		*
+		* @method getIndexFromCoords
+		* @param x {Number} The x coordinate of the Tile you would like to retrieve. 
+		* @param y {Number} The y coordinate of the Tile you would like to retrieve.
+		* @return {Number} Either the index of the tile retrieved or -1 if none was found.
+		* @public
+		*/
+		public getIndexFromCoords(x: number, y: number): number {
+
+			//Not with the bounds?
+			if (x &gt; this.transform.worldX + this.widthInPixels || y &gt; this.transform.worldY + this.heightInPixels || x &lt; this.transform.worldX || y &lt; this.transform.worldY)
+				return -1;
+
+			//Is so get the tile
+			var tx = Kiwi.Utils.GameMath.snapToFloor(x - this.transform.worldX, this.tileWidth) / this.tileWidth;
+			var ty = Kiwi.Utils.GameMath.snapToFloor(y - this.transform.worldY, this.tileHeight) / this.tileHeight;
+
+			return this.getIndexFromXY(tx, ty);
+
+		}
+
+		/**
+		* Returns the TileType for a tile that is at a particular coordinate passed. 
+		* If no tile is found then null is returned instead.
+		* Coordinates passed are in pixels and use the world coordinates of the tilemap.
+		* Note: Currently only working for ORTHOGONAL TileMaps.
+		* 
+		* @method getTileFromCoords
+		* @param x {Number}
+		* @param y {Number}
+		* @return {Number} The tile
+		* @public
+		*/
+		public getTileFromCoords(x: number, y: number): TileType {
+			var t = this.getIndexFromCoords(x, y);
+			return (t !== -1) ? this.tilemap.tileTypes[ this._data[t] ] : null;
+		}
+
+		/**
+		* Returns the indexes of every tile of a type you pass. 
+		* @method getIndexsByType
+		* @param type {Number}
+		* @return {Number[]}
+		* @public
+		*/
+		public getIndexesByType(type:number):number[] {
+			var tiles = [];
+			for (var i = 0; i &lt; this._data.length; i++) {
+				if (this._data[i] == type) tiles.push(i);
+			}
+			return tiles;
+		}
+
+
+		/**
+		*-----------------------
+		* Tiles Manipulation
+		*-----------------------
+		*/
+
+		/**
+		* Sets the tile to be used at the coordinates provided. 
+		* Can be used to override a tile that may already exist at the location.
+		* @method setTile
+		* @param x {Number} The coordinate of the tile on the x axis. 
+		* @param y {Number} The coordinate of the tile on the y axis.
+		* @param tileType {Number} The type of tile that should be now used.
+		* @return {Boolean} If a tile was changed or not.
+		* @public
+		*/
+		public setTile(x: number, y: number, tileType:number):boolean {
+			var x = this.getIndexFromXY(x, y);
+
+			if (x !== -1) {
+				this._data[x] = tileType;
+				return true;
+			} 
+
+			return false;
+		}
+
+		/**
+		* Sets the tile to be used at the index provided.
+		* Can be used to override a tile that may already exist at the location.
+		* @method setTileByIndex
+		* @param index {Number} The index of the tile that you want to change.
+		* @param tileType {Number} The new tile type to be used at that position.
+		* @public
+		*/
+		public setTileByIndex(index: number, tileType: number) {
+			this._data[index] = tileType;
+		}
+
+		/**
+		* Randomizes the types of tiles used in an area of the layer. You can choose which types of tiles to use, and the area.
+		* Default tile types used are everyone avaiable. 
+		* @method randomizeTiles
+		* @param [types] {Number[]} A list of TileTypes that can be used. Default is every tiletype on the TileMap.
+		* @param [x=0] {Number} The starting tile on the x axis to fill. 
+		* @param [y=0] {Number} The starting tile on the y axis to fill.
+		* @param [width=this.width] {Number} How far across you want to go.
+		* @param [height=this.height] {Number} How far down you want to go.
+		* @public
+		*/
+		public randomizeTiles(types?: number[], x: number= 0, y: number= 0, width: number= this.width, height: number= this.height) {
+
+			if (types == undefined) {
+				types = [];
+				var i = 0;
+				while (i++ &lt; this.tilemap.tileTypes.length) {
+					types.push(i);
+				}
+			}
+
+			for (var j = y; j &lt; y + height; j++) {
+				for (var i = x; i &lt; x + width; i++) {
+
+					var tile = this.getIndexFromXY(i, j);
+					if (tile !== -1) this._data[tile] = this.game.rnd.pick(types);
+
+				}
+			}
+
+		}
+
+		/**
+		* Makes all of the tiles in the area specified a single type that is passed.
+		* @method fill
+		* @param type {Number} The type of tile you want to fill in the area with.
+		* @param [x=0] {Number} The starting tile on the x axis to fill. 
+		* @param [y=0] {Number} The starting tile on the y axis to fill.
+		* @param [width=this.width] {Number} How far across you want to go.
+		* @param [height=this.height] {Number} How far down you want to go.
+		* @public
+		*/
+		public fill(type: number, x: number= 0, y: number= 0, width: number= this.width, height: number= this.height) {
+
+			for (var j = y; j &lt; y + height; j++) {
+				for (var i = x; i &lt; x + width; i++) {
+
+					var tile = this.getIndexFromXY(i, j);
+					if (tile !== -1) this._data[tile ] = type;
+
+				}
+			}
+
+		}
+
+		/**
+		* Replaces all tiles of typeA to typeB in the area specified. If no area is specified then it is on the whole layer.
+		* @method replaceTiles
+		* @param typeA {Number} The type of tile you want to be replaced.
+		* @param typeB {Number} The type of tile you want to be used instead.
+		* @param [x=0] {Number} The starting tile on the x axis to fill. 
+		* @param [y=0] {Number} The starting tile on the y axis to fill.
+		* @param [width=this.width] {Number} How far across you want to go.
+		* @param [height=this.height] {Number} How far down you want to go.
+		* @public
+		*/
+		public replaceTiles(typeA: number, typeB: number, x:number=0, y:number=0, width:number=this.width,height:number=this.height) {
+
+			for (var j = y; j &lt; y + height; j++) {
+				for (var i = x; i &lt; x + width; i++) {
+
+					var tile = this.getIndexFromXY(i, j);
+					if (tile !== -1 &amp;&amp; this._data[tile] == typeA) this._data[tile] = typeB; 
+
+				}
+			}
+
+		}
+
+		/**
+		* Swaps all the tiles that are typeA -&gt; typeB and typeB -&gt; typeA inside the area specified. If no area is specified then it is on the whole layer.
+		* @method swapTiles
+		* @param typeA {number} The type of tile you want to be replaced with typeB.
+		* @param typeB {number} The type of tile you want to be replaced with typeA.
+		* @param [x=0] {number} The starting tile on the x axis to fill. 
+		* @param [y=0] {number} The starting tile on the y axis to fill.
+		* @param [width=this.width] {number} How far across you want to go.
+		* @param [height=this.height] {number} How far down you want to go.
+		* @public
+		*/
+		public swapTiles(typeA: number, typeB: number, x: number= 0, y: number= 0, width: number= this.width, height: number= this.height) {
+
+			for (var j = y; j &lt; y + height; j++) {
+				for (var i = x; i &lt; x + width; i++) {
+					var tile = this.getIndexFromXY(i, j);
+
+					if (tile !== -1) {
+						if (this._data[tile] == typeA) this._data[tile] = typeB;
+						else if (this._data[tile] == typeB) this._data[tile] = typeA;
+					} 
+				}
+			}
+
+		}
+
+		/**
+		*-----------------------
+		* Get Tiles By Collision Methods
+		*-----------------------
+		*/
+
+		/**
+		* Returns the tiles which overlap with a provided entities hitbox component. 
+		* Only collidable tiles on ANY side will be returned unless you pass a particular side.
+		* Note: Only designed to work with ORTHOGONAL types of tilemaps, results maybe unexpected for other types of tilemaps.
+		* 
+		* @method getOverlappingTiles
+		* @param entity {Kiwi.Entity} The entity you would like to check for the overlap.
+		* @param [collisionType=ANY] {Number} The particular type of collidable tiles which you would like to check for.
+		* @return {Object[]} Returns an Array of Objects containing information about the tiles which were found. Index/X/Y information is contained within each Object. 
+		* @public
+		*/
+		public getOverlappingTiles(entity: Kiwi.Entity, collisionType: number= Kiwi.Components.ArcadePhysics.ANY): any {
+
+			//Do they have a box?
+			if (entity.components.hasComponent(&quot;Box&quot;) == false)
+				return [];
+
+			//Get the box off them
+			var b: Kiwi.Geom.Rectangle = entity.components.getComponent(&#x27;Box&#x27;).worldHitbox;
+
+			//Is the person within the map&#x27;s bounds?    
+			if (b.left &gt; this.transform.worldX + this.widthInPixels || b.right &lt; this.transform.worldX || b.bottom &lt; this.transform.worldY || b.top &gt; this.transform.worldY + this.heightInPixels)
+				return [];
+
+			var worldX = this.transform.worldX;
+			var worldY = this.transform.worldY;
+
+			var nx = b.x - worldX;
+			var ny = b.y - worldY;
+
+			//Get starting location and now many tiles from there we will check. 
+			var x = Kiwi.Utils.GameMath.snapToFloor(nx, this.tileWidth) / this.tileWidth;
+			var y = Kiwi.Utils.GameMath.snapToFloor(ny, this.tileHeight) / this.tileHeight;
+			var w = Kiwi.Utils.GameMath.snapToCeil(b.width, this.tileWidth) / this.tileWidth;
+			var h = Kiwi.Utils.GameMath.snapToCeil(b.height, this.tileHeight) / this.tileHeight;
+
+			//Add one, because we want to include the very end tile.
+			var tiles = this.getCollidableTiles(x, y, w + 1, h + 1, collisionType);
+
+			//Loop through the tiles and make sure they are actually overlapping with the Entity.
+			for (var i = 0; i &lt; tiles.length; i++) {
+				var t = tiles[i];
+
+				if (t.x + worldX &gt; b.right || t.x + this.tileWidth + worldX &lt; b.left || t.y + worldY &gt; b.bottom || t.y + this.tileHeight + worldY &lt; t.top) {
+					tiles.splice(i, 1);
+					i--;
+				} 
+			}
+
+			return tiles;
+
+		}
+
+
+		/**
+		* Returns the tiles which can collide with other objects (on ANY side unless otherwise specified) within an area provided.
+		* By default the area is the whole tilemap.
+		* 
+		* @method getCollidableTiles
+		* @param [x=0] {Number} The x coordinate of the first tile to check.
+		* @param [y=0] {Number} The y coordinate of the first tile to check.
+		* @param [width=widthOfMap] {Number} The width from the x coordinate.
+		* @param [height=heightOfmap] {Number} The height from the y coordinate.
+		* @param [collisionType=ANY] {Number} The type of collidable tiles that should be return. By default ANY type of collidable tiles will be returned. 
+		* @return {Object[]} Returns an Array of Objects containing information about the tiles which were found. Index/X/Y information is contained within each Object. 
+		* @public
+		*/
+		public getCollidableTiles(x: number= 0, y: number= 0, width: number= this.width, height: number = this.height, collisionType: number= Kiwi.Components.ArcadePhysics.ANY): any {
+
+			var tiles = [];
+
+			//Make sure its within the map.
+			if (x &gt; this.width || y &gt; this.height) return; 
+
+			if (x &lt; 0) x = 0;
+			if (y &lt; 0) y = 0;
+
+			if (x + width &gt; this.width) width = this.width - x;
+			if (y + height &gt; this.height) height = this.height - y;
+
+			//Loop through and of the tiles.
+			for (var j = y; j &lt; y + height; j++) {
+				for (var i = x; i &lt; x + width; i++) {
+
+					//Get the tile index.
+					var index = this.getIndexFromXY(i, j);
+
+					//Does that index exist? Should do but just in case.
+					if (index === -1) continue;
+
+					var type = this.tileData[index];
+
+					//If the collision type matches the one passed. 
+					if ((this.tilemap.tileTypes[type].allowCollisions &amp; collisionType) !== Kiwi.Components.ArcadePhysics.NONE) {
+
+						tiles.push({
+							index: index,
+							type: type,
+							x: i * this.tileWidth,
+							y: j * this.tileHeight
+						});
+
+
+					}
+
+				}
+			}
+
+			return tiles;
+		}
+
+
+		/**
+		* The update loop that is executed when this TileMapLayer is add to the Stage.
+		* @method update
+		* @public 
+		*/
+		public update() {
+			super.update();
+		}
+
+		/**
+		*-----------------------
+		* Temp Properties used During Rendering
+		*-----------------------
+		*/
+
+		/**
+		* Used whilst rendering to calculate the number of tiles to be rendered on the X axis.
+		* Is updated each frame, via the _calculateBoundaries method.
+		* @property _maxX
+		* @type number
+		* @private
+		*/
+		private _maxX: number;
+
+		/**
+		* Used whilst rendering to calculate the number of tiles to be rendered on the Y axis.
+		* Is updated each frame, via the _calculateBoundaries method.
+		* @property _maxY
+		* @type number
+		* @private
+		*/
+		private _maxY: number;
+
+		/**
+		* Used whilst rendering to calculate which is the first tile to be rendered on the X axis.
+		* Is updated each frame, via the _calculateBoundaries method.
+		* @property _startX
+		* @type number
+		* @private
+		*/
+		private _startX: number;
+
+		/**
+		* Used whilst rendering to calculate which is the first tile to be rendered on the Y axis.
+		* Is updated each frame, via the _calculateBoundaries method.
+		* @property _startY
+		* @type number
+		* @private
+		*/
+		private _startY: number;
+
+		/**
+		* Temporary property that holds the tileType of the current tile being rendered.
+		* @property _temptype
+		* @type TileType
+		* @private
+		*/
+		private _temptype: TileType;
+
+		/**
+		* Corner values used internally.
+		* @property corner1
+		* @type {Kiwi.Geom.Point}
+		* @private
+		* @since 1.1.0
+		*/
+		private _corner1: Kiwi.Geom.Point;
+		/**
+		* Corner values used internally.
+		* @property corner2
+		* @type {Kiwi.Geom.Point}
+		* @private
+		* @since 1.1.0
+		*/
+		private _corner2: Kiwi.Geom.Point;
+		/**
+		* Corner values used internally.
+		* @property corner3
+		* @type {Kiwi.Geom.Point}
+		* @private
+		* @since 1.1.0
+		*/
+		private _corner3: Kiwi.Geom.Point;
+		/**
+		* Corner values used internally.
+		* @property corner4
+		* @type {Kiwi.Geom.Point}
+		* @private
+		* @since 1.1.0
+		*/
+		private _corner4: Kiwi.Geom.Point;
+
+		/**
+		* Used to calculate the position of the tilemap on the stage as well as how many tiles can fit on the screen. 
+		* All coordinates calculated are stored as temporary properties (maxX/Y, startX/Y).
+		*
+		* @method _calculateBoundaries
+		* @param camera {Camera}
+		* @param matrix {Matrix} 
+		* @private
+		*/
+		private _calculateBoundaries(camera: Kiwi.Camera, matrix: Kiwi.Geom.Matrix) {
+
+			//If we are calculating the coordinates for &#x27;regular&#x27; then we can do that rather easy
+			if (this.orientation == ORTHOGONAL) {
+				// Account for camera and object transformation
+				// Initialise corners...
+				this._corner1.setTo(0, 0);
+				this._corner2.setTo(this.game.stage.width, 0);
+				this._corner3.setTo(this.game.stage.width, this.game.stage.height);
+				this._corner4.setTo(0, this.game.stage.height);
+				// Transform corners by camera...
+				this._corner1 = camera.transformPoint(this._corner1);
+				this._corner2 = camera.transformPoint(this._corner2);
+				this._corner3 = camera.transformPoint(this._corner3);
+				this._corner4 = camera.transformPoint(this._corner4);
+				// Transform corners by object...
+				var m = matrix.clone();
+				m.invert();
+				this._corner1 = m.transformPoint(this._corner1);
+				this._corner2 = m.transformPoint(this._corner2);
+				this._corner3 = m.transformPoint(this._corner3);
+				this._corner4 = m.transformPoint(this._corner4);
+				// Find min/max values in X and Y...
+				this._startX = Math.min(this._corner1.x, this._corner2.x, this._corner3.x, this._corner4.x);
+				this._startY = Math.min(this._corner1.y, this._corner2.y, this._corner3.y, this._corner4.y);
+				this._maxX = Math.max(this._corner1.x, this._corner2.x, this._corner3.x, this._corner4.x);
+				this._maxY = Math.max(this._corner1.y, this._corner2.y, this._corner3.y, this._corner4.y);
+				// Convert to tile units...
+				this._startX /= this.tileWidth;
+				this._startY /= this.tileHeight;
+				this._maxX /= this.tileWidth;
+				this._maxY /= this.tileHeight;
+				// Truncate units...
+				this._startX = Math.floor(this._startX);
+				this._startY = Math.floor(this._startY);
+				this._maxX = Math.ceil(this._maxX);
+				this._maxY = Math.ceil(this._maxY);
+				// Clamp values to tilemap range...
+				this._startX = Kiwi.Utils.GameMath.clamp(this._startX, this.width);
+				this._startY = Kiwi.Utils.GameMath.clamp(this._startY, this.height);
+				this._maxX = Kiwi.Utils.GameMath.clamp(this._maxX, this.width);
+				this._maxY = Kiwi.Utils.GameMath.clamp(this._maxY, this.height);
+
+				return;
+			}
+
+			//Otherwise we can&#x27;t *just yet* so render the whole lot
+			if (this.orientation == ISOMETRIC) {
+				this._startX = 0;
+				this._startY = 0;
+				this._maxX = this.width;
+				this._maxY = this.height;
+			}
+		}
+
+		/** 
+		* ChartToScreen maps a point in the game tile coordinates into screen pixel
+		* coordinates that indicate where the tile should be drawn.
+		* Note: This is for use in ISOMETRIC Tilemaps.
+		*
+		* @method chartToScreen
+		* @param chartPt {any} A Object containing x/y properties of the tile.
+		* @param tileW {Number} The width of the tile
+		* @param tileH {Number} The height of the tile
+		* @return {Object} With x/y properties of the location of the map onscreen.
+		* @public
+		*/ 
+		public chartToScreen(chartPt:any, tileW:number, tileH:number):any {
+			return { x:chartPt.x * tileW - chartPt.y * tileW, 
+				y:chartPt.x * tileH / 2 + chartPt.y * tileH / 2 };
+		}
+
+		/**
+		* ScreenToChart maps a point in screen coordinates into the game tile chart
+		* coordinates for the tile on which the screen point falls on.
+		* This is for use in ISOMETRIC Tilemaps.
+		*
+		* @method screenToChart
+		* @param scrPt {any} An object containing x/y coordinates of the point on the screen you want to convert to tile coordinates.
+		* @param tileW {Number} The width of a single tile.
+		* @param tileH {Number} The height of a single tile.
+		* @return {Object} With x/y properties of the location of tile on the screen.
+		* @public
+		*/
+		public screenToChart(scrPt:any, tileW:number, tileH:number):any {
+			var column = Math.floor(scrPt.x / tileW);
+			var row = Math.floor((scrPt.y - column * (tileH / 2)) / tileH);
+			return { x:column + row, y:row };
+		}
+
+		/** 
+		* The render loop which is used when using the Canvas renderer.
+		* @method render
+		* @param camera {Camera}
+		* @public
+		*/
+		public render(camera: Kiwi.Camera) {
+
+			//When not to render the map.
+			if (this.visible === false || this.alpha &lt; 0.1 || this.exists === false) {
+				return;
+			}
+
+			//Get the context.
+			var ctx = this.game.stage.ctx;
+			ctx.save();
+
+			//Make the map alphed out.
+			if (this.alpha &gt; 0 &amp;&amp; this.alpha &lt;= 1) {
+				ctx.globalAlpha = this.alpha;
+			}
+
+			// Transform
+			var t: Kiwi.Geom.Transform = this.transform;
+			var m: Kiwi.Geom.Matrix = t.getConcatenatedMatrix();
+
+			ctx.transform(m.a, m.b, m.c, m.d, m.tx, m.ty);
+
+			this._calculateBoundaries(camera, m);
+			
+			for (var y = this._startY; y &lt; this._maxY; y++) {
+				for (var x = this._startX; x &lt; this._maxX; x++) {
+
+					if ( (this._temptype = this.getTileFromXY(x, y)) &amp;&amp; this._temptype.cellIndex !== -1 ) {
+
+						var cell = this.atlas.cells[this._temptype.cellIndex];
+						
+						var drawX:number;
+						var drawY:number;
+						
+						if (this.orientation == ISOMETRIC) {
+
+							// Isometric maps
+							
+							var offsetX = this._temptype.offset.x;
+							var offsetY = this._temptype.offset.y;
+							var w = this.tileWidth * (this.width * 2 - 1 );
+							var h = this.tileHeight * this.height;
+
+							// We want &lt;0,0&gt;&#x27;s horizontal center point to be in the screen center, hence the -tileWidth/2.
+							var shiftX = this.tileWidth / 2;
+
+							var screenPos = this.chartToScreen( 
+								{ x:x , y:y }, 
+								this.tileWidth/2, 
+								this.tileHeight);
+
+							drawX = screenPos.x + this._temptype.offset.x - shiftX;
+							drawY = screenPos.y - (cell.h - this.tileHeight) + this._temptype.offset.y;
+
+						} else {
+							
+							// Orthogonal maps
+
+							drawX = x * this.tileWidth + this._temptype.offset.x;
+							drawY = y * this.tileHeight - (cell.h - this.tileHeight) + this._temptype.offset.y;
+
+						}
+						
+						ctx.drawImage(
+							this.atlas.image,
+							cell.x,
+							cell.y,
+							cell.w,
+							cell.h,
+							drawX,
+							drawY,
+							cell.w,
+							cell.h
+							);
+
+					}
+
+
+				}
+			}
+
+
+			ctx.restore();
+			return true;
+		}
+
+		public renderGL(gl: WebGLRenderingContext, camera: Kiwi.Camera, params: any = null) {
+
+			//Setup
+			var vertexItems = [];
+			
+			//Create the point objects.
+			var pt1 = new Kiwi.Geom.Point();
+			var pt2 = new Kiwi.Geom.Point();
+			var pt3 = new Kiwi.Geom.Point();
+			var pt4 = new Kiwi.Geom.Point();
+
+			//Transform/Matrix
+			var t: Kiwi.Geom.Transform = this.transform;
+			var m: Kiwi.Geom.Matrix = t.getConcatenatedMatrix(); 
+
 
-            //Transform/Matrix
-            var t: Kiwi.Geom.Transform = this.transform;
-            var m: Kiwi.Geom.Matrix = t.getConcatenatedMatrix(); 
+			//Find which ones we need to render.
+			this._calculateBoundaries(camera, m);
+
+			//Loop through the tiles.
+			for (var y = this._startY; y &lt; this._maxY; y++) {
+				for (var x = this._startX; x &lt; this._maxX; x++) {
+					
+
+					//Get the tile type
+					this._temptype = this.getTileFromXY(x, y);
 
 
-            //Find which ones we need to render.
-            this._calculateBoundaries(camera, m);
+					//Skip tiletypes that don&#x27;t use a cellIndex.
+					if (this._temptype.cellIndex == -1) continue;
+
+					
+					//Get the cell index
+					var cell = this.atlas.cells[this._temptype.cellIndex];
+					
+					var tx;
+					var ty;
+
+					if (this.orientation == ISOMETRIC) {
 
-            //Loop through the tiles.
-            for (var y = this._startY; y &lt; this._maxY; y++) {
-                for (var x = this._startX; x &lt; this._maxX; x++) {
-                    
+						// Isometric maps
+						var offsetX = this._temptype.offset.x;
+						var offsetY = this._temptype.offset.y;
+						var w = this.tileWidth * (this.width * 2 - 1);
+						var h = this.tileHeight * this.height;
+						
+						// We want &lt;0,0&gt;&#x27;s horizontal center point to be in the screen center, hence the -tileWidth/2.
+						var shiftX = this.tileWidth / 2;
 
-                    //Get the tile type
-                    this._temptype = this.getTileFromXY(x, y);
+						var screenPos = this.chartToScreen( 
+							{ x:x , y:y }, 
+							this.tileWidth / 2, 
+							this.tileHeight);
 
+						tx = screenPos.x + this._temptype.offset.x - shiftX;
+						ty = screenPos.y + this._temptype.offset.y;
 
-                    //Skip tiletypes that don&#x27;t use a cellIndex.
-                    if (this._temptype.cellIndex == -1) continue;
+					} else {
 
-                    
-                    //Get the cell index
-                    var cell = this.atlas.cells[this._temptype.cellIndex];
-                    
-                    var tx;
-                    var ty;
+						// Orthogonal maps
+						tx = x * this.tileWidth + this._temptype.offset.x;
+						ty = y * this.tileHeight + this._temptype.offset.y;
 
-                    if (this.orientation == ISOMETRIC) {
+					}
 
-                        // Isometric maps
-                        var offsetX = this._temptype.offset.x;
-                        var offsetY = this._temptype.offset.y;
-                        var w = this.tileWidth * (this.width * 2 - 1);
-                        var h = this.tileHeight * this.height;
-                        
-                        // We want &lt;0,0&gt;&#x27;s horizontal center point to be in the screen center, hence the -tileWidth/2.
-                        var shiftX = this.tileWidth / 2;
+					//Set up the points
+					pt1.setTo(tx - t.rotPointX, ty - t.rotPointY - (cell.h - this.tileHeight));
+					pt2.setTo(tx + cell.w - t.rotPointX, ty - t.rotPointY - (cell.h - this.tileHeight));
+					pt3.setTo(tx + cell.w - t.rotPointX, ty + cell.h - t.rotPointY - (cell.h - this.tileHeight));
+					pt4.setTo(tx - t.rotPointX, ty + cell.h - t.rotPointY - (cell.h - this.tileHeight));
 
-                        var screenPos = this.chartToScreen( 
-                            { x:x , y:y }, 
-                            this.tileWidth / 2, 
-                            this.tileHeight);
 
-                        tx = screenPos.x + this._temptype.offset.x - shiftX;
-                        ty = screenPos.y + this._temptype.offset.y;
+					//Add on the matrix to the points
+					pt1 = m.transformPoint(pt1);
+					pt2 = m.transformPoint(pt2);
+					pt3 = m.transformPoint(pt3);
+					pt4 = m.transformPoint(pt4);
 
-                    } else {
 
-                        // Orthogonal maps
-                        tx = x * this.tileWidth + this._temptype.offset.x;
-                        ty = y * this.tileHeight + this._temptype.offset.y;
+					//Append to the xyuv array
+					vertexItems.push(
+						pt1.x + t.rotPointX, pt1.y + t.rotPointY, cell.x, cell.y, this.alpha,                   //Top Left Point
+						pt2.x + t.rotPointX, pt2.y + t.rotPointY, cell.x + cell.w, cell.y, this.alpha,          //Top Right Point
+						pt3.x + t.rotPointX, pt3.y + t.rotPointY, cell.x + cell.w, cell.y + cell.h, this.alpha, //Bottom Right Point
+						pt4.x + t.rotPointX, pt4.y + t.rotPointY, cell.x, cell.y + cell.h, this.alpha           //Bottom Left Point
+						);
+				}
+			}
 
-                    }
+			//Concat points to the Renderer.
+			(&lt;Kiwi.Renderers.TextureAtlasRenderer&gt;this.glRenderer).concatBatch(vertexItems);
+		}
 
-                    //Set up the points
-                    pt1.setTo(tx - t.rotPointX, ty - t.rotPointY - (cell.h - this.tileHeight));
-                    pt2.setTo(tx + cell.w - t.rotPointX, ty - t.rotPointY - (cell.h - this.tileHeight));
-                    pt3.setTo(tx + cell.w - t.rotPointX, ty + cell.h - t.rotPointY - (cell.h - this.tileHeight));
-                    pt4.setTo(tx - t.rotPointX, ty + cell.h - t.rotPointY - (cell.h - this.tileHeight));
-
-
-                    //Add on the matrix to the points
-                    pt1 = m.transformPoint(pt1);
-                    pt2 = m.transformPoint(pt2);
-                    pt3 = m.transformPoint(pt3);
-                    pt4 = m.transformPoint(pt4);
-
-
-                    //Append to the xyuv array
-                    vertexItems.push(
-                        pt1.x + t.rotPointX, pt1.y + t.rotPointY, cell.x, cell.y, this.alpha,                   //Top Left Point
-                        pt2.x + t.rotPointX, pt2.y + t.rotPointY, cell.x + cell.w, cell.y, this.alpha,          //Top Right Point
-                        pt3.x + t.rotPointX, pt3.y + t.rotPointY, cell.x + cell.w, cell.y + cell.h, this.alpha, //Bottom Right Point
-                        pt4.x + t.rotPointX, pt4.y + t.rotPointY, cell.x, cell.y + cell.h, this.alpha           //Bottom Left Point
-                        );
-                    
-
-                    
-                }
-            }
-               
-            //Concat points to the Renderer.
-            (&lt;Kiwi.Renderers.TextureAtlasRenderer&gt;this.glRenderer).concatBatch(vertexItems);
-        }
-
-    }
+	}
 }
 
     </pre>
diff --git a/docs/files/src_gameobjects_tilemap_TileType.ts.html b/docs/files/src_gameobjects_tilemap_TileType.ts.html
index 76dce52..3d2d7f7 100644
--- a/docs/files/src_gameobjects_tilemap_TileType.ts.html
+++ b/docs/files/src_gameobjects_tilemap_TileType.ts.html
@@ -373,98 +373,98 @@ <h1 class="file-heading">File: src/gameobjects/tilemap/TileType.ts</h1>
 
 module Kiwi.GameObjects.Tilemap {
 
-    /**
-    * Define&#x27;s the properties of a single Type of Tile for a TileMap. This class should not be directly instanted, 
-    * but instead when wanting to create new TileType&#x27;s you should use the &#x27;createdTileType&#x27; methods on a TileMap object.
-    * 
-    * @class TileType
-    * @namespace Kiwi.GameObjects.Tilemap
-    * @constructor
-    * @param tilemap {Kiwi.GameObjects.Tilemap.TileMap} The TileMap that this TileType is a part of.
-    * @param index {Number} The index of this TileType, which Tiles use when wanting to use this TileType.
-    * @param cellIndex {Number} The cell number to use when rendering this Type of Tile.
-    * @return {TileType} This TileType
-    * @public
-    */
-    export class TileType {
- 
-        constructor(tilemap: Kiwi.GameObjects.Tilemap.TileMap, index: number, cellIndex: number = -1) {
+	/**
+	* Define&#x27;s the properties of a single Type of Tile for a TileMap. This class should not be directly instanted, 
+	* but instead when wanting to create new TileType&#x27;s you should use the &#x27;createdTileType&#x27; methods on a TileMap object.
+	* 
+	* @class TileType
+	* @namespace Kiwi.GameObjects.Tilemap
+	* @constructor
+	* @param tilemap {Kiwi.GameObjects.Tilemap.TileMap} The TileMap that this TileType is a part of.
+	* @param index {Number} The index of this TileType, which Tiles use when wanting to use this TileType.
+	* @param cellIndex {Number} The cell number to use when rendering this Type of Tile.
+	* @return {TileType} This TileType
+	* @public
+	*/
+	export class TileType {
 
-            this.tilemap = tilemap;
-            this.index = index;
-            this.cellIndex = cellIndex;
-            this.offset = new Kiwi.Geom.Point(0, 0);
-        
-        }
+		constructor(tilemap: Kiwi.GameObjects.Tilemap.TileMap, index: number, cellIndex: number = -1) {
 
-        /**
-        * The collision information for this type of tile. 
-        * It&#x27;s values are the same as the Static properties inside of the ArcadePhysics Component. 
-        * @property allowCollisions
-        * @type number
-        * @default NONE
-        * @public
-        */
-        public allowCollisions: number = Kiwi.Components.ArcadePhysics.NONE;
+			this.tilemap = tilemap;
+			this.index = index;
+			this.cellIndex = cellIndex;
+			this.offset = new Kiwi.Geom.Point(0, 0);
+		}
 
-        /**
-        * The properties associated with this type of tile. 
-        * These are set when loading a JSON file that had properties associated with a TileType. 
-        * @property properties
-        * @type Object
-        * @public
-        */
-        public properties: any = {};
+		/**
+		* The collision information for this type of tile. 
+		* It&#x27;s values are the same as the Static properties inside of the ArcadePhysics Component. 
+		* @property allowCollisions
+		* @type number
+		* @default NONE
+		* @public
+		*/
+		public allowCollisions: number = Kiwi.Components.ArcadePhysics.NONE;
 
-        /**
-        * The offset of this tile for rendering purposes. 
-        * Does not affect regular collision detection.
-        * 
-        * @property offset
-        * @type Kiwi.Geom.Point
-        * @public
-        */ 
-        public offset: Kiwi.Geom.Point;
-        
-        /**
-        * A reference to the tilemap this tile object belongs to.
-        * @property tilemap
-        * @type Kiwi.GameObjects.Tilemap.TileMap
-        * @public
-        */
-        public tilemap: Kiwi.GameObjects.Tilemap.TileMap;
+		/**
+		* The properties associated with this type of tile. 
+		* These are set when loading a JSON file that had properties associated with a TileType. 
+		* @property properties
+		* @type Object
+		* @public
+		*/
+		public properties: any = {};
 
-        /**
-        * The index of this tile type in the core map data.
-        * For example, if your map only has 16 different types of tiles in it, this will be one of those tiles and thus a number between 1 and 16.
-        * @property index
-        * @type Number
-        * @public
-        */
-        public index: number;
+		/**
+		* The offset of this tile for rendering purposes. 
+		* Does not affect regular collision detection.
+		* 
+		* @property offset
+		* @type Kiwi.Geom.Point
+		* @public
+		*/ 
+		public offset: Kiwi.Geom.Point;
 
-        /**
-        * A number relating to the cell that should be when rendering a Tile that uses this TileType.
-        * A cellIndex of -1 means this type of tile will not be rendered.
-        * @property cellIndex
-        * @type number
-        * @public
-        */
-        public cellIndex: number;
+		/**
+		* A reference to the tilemap this tile object belongs to.
+		* @property tilemap
+		* @type Kiwi.GameObjects.Tilemap.TileMap
+		* @public
+		*/
+		public tilemap: Kiwi.GameObjects.Tilemap.TileMap;
 
-        /**
-        * The type of object that it is.
-        * @method objType
-        * @return {String} &quot;TileType&quot;
-        * @public
-        */
-        public objType() {
-            return &quot;TileType&quot;;
-        }
+		/**
+		* The index of this tile type in the core map data.
+		* For example, if your map only has 16 different types of tiles in it, this will be one of those tiles and thus a number between 1 and 16.
+		* @property index
+		* @type Number
+		* @public
+		*/
+		public index: number;
 
-    }
+		/**
+		* A number relating to the cell that should be when rendering a Tile that uses this TileType.
+		* A cellIndex of -1 means this type of tile will not be rendered.
+		* @property cellIndex
+		* @type number
+		* @public
+		*/
+		public cellIndex: number;
+
+		/**
+		* The type of object that it is.
+		* @method objType
+		* @return {String} &quot;TileType&quot;
+		* @public
+		*/
+		public objType() {
+			return &quot;TileType&quot;;
+		}
+
+	}
 
 }
+
     </pre>
 </div>
 
diff --git a/docs/files/src_geom_AABB.ts.html b/docs/files/src_geom_AABB.ts.html
index c84e0b3..2af2cf5 100644
--- a/docs/files/src_geom_AABB.ts.html
+++ b/docs/files/src_geom_AABB.ts.html
@@ -371,168 +371,168 @@ <h1 class="file-heading">File: src/geom/AABB.ts</h1>
 * @submodule Geom
 * @main
 */
- 
+
 module Kiwi.Geom {
 
-    /**
-    * An object representation of an axis-aligned bounding box. 
-    * 
-    * @class AABB
-    * @namespace Kiwi.Geom
-    * @constructor
-    * @param cx {Number} The centeral position on the x-axis.
-    * @param cy {Number} The centeral position on the y-axis.
-    * @param width {Number} The width of the box.
-    * @param height {Number} The height of the box.
-    * @return {Kiwi.Geom.AABB}
-    */
-    export class AABB {
-
-        constructor(cx: number, cy: number, width: number, height: number) {
-            this.cx = cx || 0;
-            this.cy = cy || 0;
-            this.halfWidth = width / 2 || 0;
-            this.halfHeight = height / 2 || 0;
-        }
-
-
-        /**
-        * Returns the type of this object
-        * @method objType
-        * @return {String} &quot;AABB&quot;
-        * @public
-        */
-        public objType() {
-            return &quot;AABB&quot;;
-        }
-
-        /**
-        * The centeral location of the box on the x-axis.
-        * @property cx
-        * @type Number
-        * @public
-        */
-        public cx: number = 0;
-
-        /**
-        * The centeral location of the box on the y-axis.
-        * @property cy
-        * @type Number
-        * @public
-        */
-        public cy: number = 0;
-
-        /**
-        * Half of the width.
-        * @property halfWidth
-        * @type Number
-        * @public
-        */
-        public halfWidth: number = 0;
-
-        /**
-        * Half of the height.
-        * @property halfHeight
-        * @type Number
-        * @public
-        */
-        public halfHeight: number = 0;
-
-        /**
-        * Returns the full height. This is read only.
-        * @property height
-        * @type number
-        * @readOnly
-        * @public
-        */
-        public get height():number {
-            return this.halfHeight * 2;
-        }
-
-        /**
-        * Returns the full width. This is read only.
-        * @property width
-        * @type number
-        * @readOnly
-        * @public
-        */
-        public get width():number {
-            return this.halfWidth * 2;
-        }
-
-        /**
-        * Draws the object to a canvas context passed. 
-        * @method draw
-        * @param ctx {CanvasRenderingContext2D} The context you want this drawn to.
-        * @return {Kiwi.Geom.AABB}
-        * @public
-        */
-        public draw(ctx: CanvasRenderingContext2D): AABB {
-            ctx.beginPath();
-            ctx.moveTo(this.cx - this.halfWidth, this.cy);
-            ctx.lineTo(this.cx + this.halfWidth, this.cy);
-            ctx.moveTo(this.cx, this.cy - this.halfHeight);
-            ctx.lineTo(this.cx, this.cy + this.halfHeight);
-            ctx.stroke();
-            return this;
-        }
-
-        /**
-        * Sets the position of the object.
-        * @method setPosition
-        * @param cx {Number} Its new x-axis location.
-        * @param cy {Number} Its new y-axis location.
-        * @return {Kiwi.Geom.AABB}
-        * @public
-        */
-        public setPosition(cx: number, cy: number): AABB {
-            this.cx = cx;
-            this.cy = cy;
-            return this;
-        }
-
-        /**
-        * Sets the position of the object by a point that you pass.
-        * 
-        * @method setPositionPoint
-        * @param pos {Kiwi.Geom.Point} 
-        * @return {Kiwi.Geom.AABB}
-        * @public
-        */
-        public setPositionPoint(pos: Point): AABB {
-            this.cx = pos.x;
-            this.cy = pos.y;
-            return this;
-        }
-
-        /**
-        * Returns this object but as a new Rectangle.
-        * 
-        * @method toRect
-        * @return {Kiwi.Geom.Rectangle}
-        * @public
-        */
-        public toRect(): Rectangle {
-            return new Rectangle(this.cx - this.halfWidth, this.cy - this.halfHeight, this.halfWidth * 2, this.halfHeight * 2);
-        }
-
-        /**
-        * Gives the dimension of this AABB from a rectangle&#x27;s.
-        * @method fromRect
-        * @param {Kiwi.Geom.Rectangle} rect
-        * @return {Kiwi.Geom.AABB}
-        * @public
-        */
-        public fromRect(rect: Rectangle): AABB {
-            this.halfWidth = rect.width / 2;
-            this.halfHeight = rect.height / 2;
-            this.cx = rect.x + this.halfWidth;
-            this.cy = rect.y + this.halfHeight;
-            return this;
-        }
-
-
-    }
+	/**
+	* An object representation of an axis-aligned bounding box. 
+	* 
+	* @class AABB
+	* @namespace Kiwi.Geom
+	* @constructor
+	* @param cx {Number} The centeral position on the x-axis.
+	* @param cy {Number} The centeral position on the y-axis.
+	* @param width {Number} The width of the box.
+	* @param height {Number} The height of the box.
+	* @return {Kiwi.Geom.AABB}
+	*/
+	export class AABB {
+
+		constructor(cx: number, cy: number, width: number, height: number) {
+			this.cx = cx || 0;
+			this.cy = cy || 0;
+			this.halfWidth = width / 2 || 0;
+			this.halfHeight = height / 2 || 0;
+		}
+
+
+		/**
+		* Returns the type of this object
+		* @method objType
+		* @return {String} &quot;AABB&quot;
+		* @public
+		*/
+		public objType() {
+			return &quot;AABB&quot;;
+		}
+
+		/**
+		* The centeral location of the box on the x-axis.
+		* @property cx
+		* @type Number
+		* @public
+		*/
+		public cx: number = 0;
+
+		/**
+		* The centeral location of the box on the y-axis.
+		* @property cy
+		* @type Number
+		* @public
+		*/
+		public cy: number = 0;
+
+		/**
+		* Half of the width.
+		* @property halfWidth
+		* @type Number
+		* @public
+		*/
+		public halfWidth: number = 0;
+
+		/**
+		* Half of the height.
+		* @property halfHeight
+		* @type Number
+		* @public
+		*/
+		public halfHeight: number = 0;
+
+		/**
+		* Returns the full height. This is read only.
+		* @property height
+		* @type number
+		* @readOnly
+		* @public
+		*/
+		public get height():number {
+			return this.halfHeight * 2;
+		}
+
+		/**
+		* Returns the full width. This is read only.
+		* @property width
+		* @type number
+		* @readOnly
+		* @public
+		*/
+		public get width():number {
+			return this.halfWidth * 2;
+		}
+
+		/**
+		* Draws the object to a canvas context passed. 
+		* @method draw
+		* @param ctx {CanvasRenderingContext2D} The context you want this drawn to.
+		* @return {Kiwi.Geom.AABB}
+		* @public
+		*/
+		public draw(ctx: CanvasRenderingContext2D): AABB {
+			ctx.beginPath();
+			ctx.moveTo(this.cx - this.halfWidth, this.cy);
+			ctx.lineTo(this.cx + this.halfWidth, this.cy);
+			ctx.moveTo(this.cx, this.cy - this.halfHeight);
+			ctx.lineTo(this.cx, this.cy + this.halfHeight);
+			ctx.stroke();
+			return this;
+		}
+
+		/**
+		* Sets the position of the object.
+		* @method setPosition
+		* @param cx {Number} Its new x-axis location.
+		* @param cy {Number} Its new y-axis location.
+		* @return {Kiwi.Geom.AABB}
+		* @public
+		*/
+		public setPosition(cx: number, cy: number): AABB {
+			this.cx = cx;
+			this.cy = cy;
+			return this;
+		}
+
+		/**
+		* Sets the position of the object by a point that you pass.
+		* 
+		* @method setPositionPoint
+		* @param pos {Kiwi.Geom.Point} 
+		* @return {Kiwi.Geom.AABB}
+		* @public
+		*/
+		public setPositionPoint(pos: Point): AABB {
+			this.cx = pos.x;
+			this.cy = pos.y;
+			return this;
+		}
+
+		/**
+		* Returns this object but as a new Rectangle.
+		* 
+		* @method toRect
+		* @return {Kiwi.Geom.Rectangle}
+		* @public
+		*/
+		public toRect(): Rectangle {
+			return new Rectangle(this.cx - this.halfWidth, this.cy - this.halfHeight, this.halfWidth * 2, this.halfHeight * 2);
+		}
+
+		/**
+		* Gives the dimension of this AABB from a rectangle&#x27;s.
+		* @method fromRect
+		* @param {Kiwi.Geom.Rectangle} rect
+		* @return {Kiwi.Geom.AABB}
+		* @public
+		*/
+		public fromRect(rect: Rectangle): AABB {
+			this.halfWidth = rect.width / 2;
+			this.halfHeight = rect.height / 2;
+			this.cx = rect.x + this.halfWidth;
+			this.cy = rect.y + this.halfHeight;
+			return this;
+		}
+
+
+	}
 
 }
 
diff --git a/docs/files/src_geom_Circle.ts.html b/docs/files/src_geom_Circle.ts.html
index c5716a2..b146162 100644
--- a/docs/files/src_geom_Circle.ts.html
+++ b/docs/files/src_geom_Circle.ts.html
@@ -372,496 +372,497 @@ <h1 class="file-heading">File: src/geom/Circle.ts</h1>
 
 module Kiwi.Geom {
 
-    /**
-    * A Circle object is an area defined by its position, 
-    * as indicated by its center point (x,y) and diameter.
-    *	
-    * @class Circle
-    * @namespace Kiwi.Geom
-    * @constructor
-    * @param [x=0] {Number} The x coordinate of the center of the circle.
-    * @param [y=0] {Number} The y coordinate of the center of the circle.
-    * @param [diameter=0] {number} The diameter of the circle.
-    * @return {Kiwi.Geom.Circle} This circle object
-    *
-    */
-    export class Circle {
-        
-        constructor (x: number = 0, y: number = 0, diameter: number = 0) {
-
-            this.setTo(x, y, diameter);
-
-        }
-
-        /**
-        * The type of this object.
-        * @method objType
-        * @return {String} &quot;Circle&quot;
-        * @public
-        */
-        public objType() {
-            return &quot;Circle&quot;;
-        }
-
-	    /** 
-	    * The diameter of the circle
-	    * @property _diameter
-	    * @type Number
-        * @default 0
-        * @private
-	    */
-        private _diameter: number = 0;
-
-	    /** 
-	    * The radius of the circle
-	    * @property _radius
-	    * @type Number
-        * @default 0
-        * @private
-	    */
-        private _radius: number = 0;
-
-	    /** 
-	    * The x coordinate of the center of the circle
-	    * @property x
-	    * @type Number
-        * @default 0
-        * @public
-	    */
-        public x: number = 0;
-
-	    /** 
-	    * The y coordinate of the center of the circle
-	    * @property y
-	    * @type Number
-        * @default 0
-        * @public
-	    */
-        public y: number = 0;
-
-        /**
-        * The diameter of the circle. 
-        * The largest distance between any two points on the circle. 
-        * The same as the radius * 2.
-        *
-        * @property diameter
-        * @type number
-        * @public
-	    */
-        public set diameter(value: number) {
-
-            if (value &gt; 0)
-            {
-                this._diameter = value;
-                this._radius = value * 0.5;
-            }
-
-        }
-        public get diameter(): number {
-
-             return this._diameter;
-
-        }
-
-	    /**
-	    * The radius of the circle. 
-        * The length of a line extending from the center of the circle to any point on the circle itself. 
-        * The same as half the diameter.
-	    *
-        * @property radius
-	    * @type number
-        * @public
-	    */
-        public set radius(value: number) {
-
-            if (value &gt; 0)
-            {
-                this._radius = value;
-                this._diameter = value * 2;
-            }
-
-        }
-        public get radius(): number {
-
-            return this._radius;
-
-        }
-
-	    /**
-	    * The circumference of the circle. This is READ ONLY.
-	    * @property circumference
-	    * @type number
-        * @readOnly
-        * @public
-	    */
-        public get circumference(): number {
-
-            return 2 * (Math.PI * this._radius);
-
-        }
-
-        /**
-        * The sum of the y and radius properties. 
-        * Changing the bottom property of a Circle object has no effect on the x and y properties,
-        * but does change the diameter.
-        * @property bottom
-        * @type number
-        * @public
-        */
-        public set bottom(value: number) {
-
-            if (!isNaN(value))
-            {
-                if (value &lt; this.y)
-                {
-                    this._radius = 0;
-                    this._diameter = 0;
-                }
-                else
-                {
-                    this.radius = value - this.y;
-                }
-            }
-
-        } 
-        public get bottom(): number {
-
-            return this.y + this._radius;
-
-        }
-
-        /**
-        * The x coordinate of the leftmost point of the circle. 
-        * Changing the left property of a Circle object has no effect on the x and y properties. 
-        * However it does affect the diameter, whereas changing the x value does not affect the diameter property.
-        *
-        * @property left
-        * @type number
-        * @public
-        */
-        public set left(value: number) {
-
-            if (!isNaN(value))
-            {
-                if (value &lt; this.x)
-                {
-                    this.radius = this.x - value;
-                }
-                else
-                {
-                    this._radius = 0;
-                    this._diameter = 0;
-                }
-            }
-
-        } 
-        public get left(): number {
-
-            return this.x - this._radius;
-
-        }
-
-        /**
-        * The x coordinate of the rightmost point of the circle. 
-        * Changing the right property of a Circle object has no effect on the x and y properties. 
-        * However it does affect the diameter, whereas changing the x value does not affect the diameter property.
-        *
-        * @property right
-        * @type number
-        * @public
-        */
-        public set right(value: number) {
-
-            if (value &amp;&amp; !isNaN(value))
-            {
-                if (value &gt; this.x)
-                {
-                    this.radius = value - this.x;
-                }
-                else
-                {
-                    this._radius = 0;
-                    this._diameter = 0;
-                }
-            }
-
-        } 
-        public get right(): number {
-
-            return this.x + this._radius;
-
-        }
-
-        /**
-        * The sum of the y minus the radius property.
-        * Changing the top property of a Circle object has no effect on the x and y properties,
-        * but does change the diameter.
-        *
-        * @property top
-        * @type number
-        * @public
-        */
-        public set top(value: number) {
-
-            if (value &amp;&amp; !isNaN(value))
-            {
-                if (value &gt; this.y)
-                {
-                    this._radius = 0;
-                    this._diameter = 0;
-                }
-                else
-                {
-                    this.radius = this.y - value;
-                }
-            }
-
-        }
-
-        public get top(): number {
-
-            return this.y - this._radius;
-
-        }
-
-        /**
-	    * Gets the area of this Circle. Note this is READ ONLY.
-	    * @property area
-        * @type number
-        * @readOnly
-        * @public
-        */
-        public get area(): number {
-
-            if (this._radius &gt; 0)
-            {
-                return Math.PI * this._radius * this._radius;
-            }
-            else
-            {
-                return 0;
-            }
-
-        }
-
-        /**
-	    * Determines whether or not this Circle object is empty. 
-	    * @method isEmpty
-	    * @return {boolean} A value of true if the Circle objects diameter is less than or equal to 0; otherwise false.
-        * @public
-	    */
-        public get isEmpty(): boolean {
-
-            if (this._diameter &lt;= 0)
-            {
-                return true;
-            }
-
-            return false;
-
-        }
-          
-	    /**
-	    * Returns a new Circle object with the same values for the x, y, diameter, and radius properties as the original Circle object.
-	    * @method clone
-	    * @param [output=Circle] {Kiwi.Geom.Circle} If given the values will be set into the object, otherwise a brand new Circle object will be created and returned.
-	    * @return {Kiwi.Geom.Circle}
-        * @public
-	    */
-        public clone(output: Circle = new Circle): Circle {
-
-            return output.setTo(this.x, this.y, this._diameter);
-
-        }
-
-	    /**
-	    * Copies all of circle data from a Circle object passed (the source) into this Circle object.
-	    * @method copyFrom
-	    * @param source {Kiwi.Geom.Circle} The source circle object to copy from
-	    * @return {Kiwi.Geom.Circle} This circle object
-        * @public
-	    */
-        public copyFrom(source: Circle): Circle {
-
-            return this.setTo(source.x, source.y, source.diameter);
-
-        }
-
-	    /**
-	    * Copies all of circle data from this Circle object into a passed Circle object (destination).
-	    * @method copyTo
-	    * @param circle {Kiwi.Geom.Circle} The destination circle object to copy in to
-	    * @return {Kiwi.Geom.Circle} The destination circle object
-        * @public
-	    */
-        public copyTo(target: Circle) {
-
-            return target.copyFrom(this);
-
-        }
-
-	    /**
-	    * Returns the distance from the center of this Circle object to the passed object.
-        * The passed object can be a Circle, Point, or anything with x/y values.
-	    *
-        * @method distanceTo
-	    * @param target {Any} The destination Point object.
-	    * @param [round=false] {boolean} Round the distance to the nearest integer (default false)
-	    * @return {Number} The distance between this Point object and the destination Point object.
-        * @public
-	    */
-        public distanceTo(target: any, round: boolean = false): number {
-
-            var dx = this.x - target.x;
-            var dy = this.y - target.y;
-
-            if (round === true)
-            {
-                return Math.round(Math.sqrt(dx * dx + dy * dy));
-            }
-            else
-            {
-                return Math.sqrt(dx * dx + dy * dy);
-            }
-
-        }
-
-	    /**
-	    * Determines whether a Circle passed is equal to this Circle.
-        * They are considered &#x27;equal&#x27; if both circles have the same values for x, y, and diameter properties.  
-        *
-	    * @method equals
-	    * @param toCompare {Kiwi.Geom.Circle} The circle to compare to this Circle object.
-	    * @return {boolean} A value of true if the object has exactly the same values for the x, y and diameter properties as this Circle object; otherwise false.
-        * @public
-	    */
-        public equals(toCompare: Circle): boolean {
-
-            if (this.x === toCompare.x &amp;&amp; this.y === toCompare.y &amp;&amp; this.diameter === toCompare.diameter)
-            {
-                return true;
-            }
-
-            return false;
-
-        }
-
-	    /**
-	    * Determines whether a Circle passed intersects with this Circle. 
-        * Returns a boolean indicating if the two circles intersect.
-        *
-	    * @method intersects
-	    * @param toIntersect {Kiwi.Geom.Circle} The Circle object to compare against to see if it intersects with this Circle object.
-	    * @return {boolean} A value of true if the specified object intersects with this Circle object; otherwise false.
-        * @public
-	    */
-        public intersects(toIntersect: Circle): boolean {
-
-            if (this.distanceTo(toIntersect, false) &lt; (this._radius + toIntersect._radius))
-            {
-                return true;
-            }
-
-            return false;
-
-        }
-
-	    /**
-	    * Returns a Point object containing the coordinates of a point on the circumference of this Circle based on the given angle.
-        *
-	    * @method circumferencePoint
-	    * @param angle {Number} The angle in radians (unless asDegrees is true) to return the point from.
-	    * @param [asDegress=false] {boolean} Is the given angle in radians (false) or degrees (true)?
-	    * @param [output] {Kiwi.Geom.Point} A Point object to put the result in to. If none specified a new Point object will be created.
-	    * @return {Kiwi.Geom.Point} The Point object holding the result.
-        * @public
-	    */
-        public circumferencePoint(angle: number, asDegrees: boolean = false, output: Point = new Point): Point {
-
-            if (asDegrees === true)
-            {
-                angle = angle * (Math.PI / 180); // Radians to Degrees
-                //angle = angle * (180 / Math.PI); // Degrees to Radians
-            }
-
-            output.x = this.x + this._radius * Math.cos(angle);
-            output.y = this.y + this._radius * Math.sin(angle);
-
-            return output;
-
-        }
-
-	    /**
-	    * Adjusts the location of the Circle object, as determined by its center coordinate, by the specified amounts.
-	    * @method offset
-	    * @param dx {Number} Moves the x value of the Circle object by this amount.
-	    * @param dy {Number} Moves the y value of the Circle object by this amount.
-	    * @return {Kiwi.Geom.Circle} This Circle object.
-        * @public
-	    */
-        public offset(dx: number, dy: number): Circle {
-
-            if (!isNaN(dx) &amp;&amp; !isNaN(dy))
-            {
-                this.x += dx;
-                this.y += dy;
-            }
-
-            return this;
-
-        }
-
-	    /**
-	    * Adjusts the location of the Circle object using a Point object as a parameter. 
-        * This method is similar to the &#x27;offset&#x27; method, except that it takes a Point object as a parameter.
-        *
-	    * @method offsetPoint
-	    * @param {Kiwi.Geom.Point} point A Point object to use to offset this Circle object.
-	    * @return {Kiwi.Geom.Circle} This Circle object.
-        * @public
-	    */
-        public offsetPoint(point: Point): Circle {
-
-            return this.offset(point.x, point.y);
-
-        }
-
-	    /**
-	    * Sets the members of Circle to the specified values.
-        *
-	    * @method setTo
-	    * @param x {Number} The x coordinate of the center of the circle.
-	    * @param y {Number} The y coordinate of the center of the circle.
-	    * @param diameter {Number} The diameter of the circle in pixels.
-	    * @return {Kiwi.Geom.Circle} This circle object
-        * @public
-	    */
-        public setTo(x: number, y: number, diameter: number): Circle {
-
-            this.x = x;
-            this.y = y;
-            this._diameter = diameter;
-            this._radius = diameter * 0.5;
-
-            return this;
-
-        }
-
-	    /**
-	    * Returns a string representation of this object.
-	    * @method toString
-	    * @return {string} a string representation of the instance.
-        * @public
-	    */
-        public toString(): string {
-
-            return &quot;[{Circle (x=&quot; + this.x + &quot; y=&quot; + this.y + &quot; diameter=&quot; + this.diameter + &quot; radius=&quot; + this.radius + &quot;)}]&quot;;
-
-        }
-
-    }
+	/**
+	* A Circle object is an area defined by its position, 
+	* as indicated by its center point (x,y) and diameter.
+	*	
+	* @class Circle
+	* @namespace Kiwi.Geom
+	* @constructor
+	* @param [x=0] {Number} The x coordinate of the center of the circle.
+	* @param [y=0] {Number} The y coordinate of the center of the circle.
+	* @param [diameter=0] {number} The diameter of the circle.
+	* @return {Kiwi.Geom.Circle} This circle object
+	*
+	*/
+	export class Circle {
+
+		constructor (x: number = 0, y: number = 0, diameter: number = 0) {
+
+			this.setTo(x, y, diameter);
+
+		}
+
+		/**
+		* The type of this object.
+		* @method objType
+		* @return {String} &quot;Circle&quot;
+		* @public
+		*/
+		public objType() {
+			return &quot;Circle&quot;;
+		}
+
+		/** 
+		* The diameter of the circle
+		* @property _diameter
+		* @type Number
+		* @default 0
+		* @private
+		*/
+		private _diameter: number = 0;
+
+		/** 
+		* The radius of the circle
+		* @property _radius
+		* @type Number
+		* @default 0
+		* @private
+		*/
+		private _radius: number = 0;
+
+		/** 
+		* The x coordinate of the center of the circle
+		* @property x
+		* @type Number
+		* @default 0
+		* @public
+		*/
+		public x: number = 0;
+
+		/** 
+		* The y coordinate of the center of the circle
+		* @property y
+		* @type Number
+		* @default 0
+		* @public
+		*/
+		public y: number = 0;
+
+		/**
+		* The diameter of the circle. 
+		* The largest distance between any two points on the circle. 
+		* The same as the radius * 2.
+		*
+		* @property diameter
+		* @type number
+		* @public
+		*/
+		public set diameter(value: number) {
+
+			if (value &gt; 0)
+			{
+				this._diameter = value;
+				this._radius = value * 0.5;
+			}
+
+		}
+		public get diameter(): number {
+
+			 return this._diameter;
+
+		}
+
+		/**
+		* The radius of the circle. 
+		* The length of a line extending from the center of the circle to any point on the circle itself. 
+		* The same as half the diameter.
+		*
+		* @property radius
+		* @type number
+		* @public
+		*/
+		public set radius(value: number) {
+
+			if (value &gt; 0)
+			{
+				this._radius = value;
+				this._diameter = value * 2;
+			}
+
+		}
+		public get radius(): number {
+
+			return this._radius;
+
+		}
+
+		/**
+		* The circumference of the circle. This is READ ONLY.
+		* @property circumference
+		* @type number
+		* @readOnly
+		* @public
+		*/
+		public get circumference(): number {
+
+			return 2 * (Math.PI * this._radius);
+
+		}
+
+		/**
+		* The sum of the y and radius properties. 
+		* Changing the bottom property of a Circle object has no effect on the x and y properties,
+		* but does change the diameter.
+		* @property bottom
+		* @type number
+		* @public
+		*/
+		public set bottom(value: number) {
+
+			if (!isNaN(value))
+			{
+				if (value &lt; this.y)
+				{
+					this._radius = 0;
+					this._diameter = 0;
+				}
+				else
+				{
+					this.radius = value - this.y;
+				}
+			}
+
+		} 
+		public get bottom(): number {
+
+			return this.y + this._radius;
+
+		}
+
+		/**
+		* The x coordinate of the leftmost point of the circle. 
+		* Changing the left property of a Circle object has no effect on the x and y properties. 
+		* However it does affect the diameter, whereas changing the x value does not affect the diameter property.
+		*
+		* @property left
+		* @type number
+		* @public
+		*/
+		public set left(value: number) {
+
+			if (!isNaN(value))
+			{
+				if (value &lt; this.x)
+				{
+					this.radius = this.x - value;
+				}
+				else
+				{
+					this._radius = 0;
+					this._diameter = 0;
+				}
+			}
+
+		}
+		public get left(): number {
+
+			return this.x - this._radius;
+
+		}
+
+		/**
+		* The x coordinate of the rightmost point of the circle. 
+		* Changing the right property of a Circle object has no effect on the x and y properties. 
+		* However it does affect the diameter, whereas changing the x value does not affect the diameter property.
+		*
+		* @property right
+		* @type number
+		* @public
+		*/
+		public set right(value: number) {
+
+			if (value &amp;&amp; !isNaN(value))
+			{
+				if (value &gt; this.x)
+				{
+					this.radius = value - this.x;
+				}
+				else
+				{
+					this._radius = 0;
+					this._diameter = 0;
+				}
+			}
+
+		}
+		public get right(): number {
+
+			return this.x + this._radius;
+
+		}
+
+		/**
+		* The sum of the y minus the radius property.
+		* Changing the top property of a Circle object has no effect on the x and y properties,
+		* but does change the diameter.
+		*
+		* @property top
+		* @type number
+		* @public
+		*/
+		public set top(value: number) {
+
+			if (value &amp;&amp; !isNaN(value))
+			{
+				if (value &gt; this.y)
+				{
+					this._radius = 0;
+					this._diameter = 0;
+				}
+				else
+				{
+					this.radius = this.y - value;
+				}
+			}
+
+		}
+
+		public get top(): number {
+
+			return this.y - this._radius;
+
+		}
+
+		/**
+		* Gets the area of this Circle. Note this is READ ONLY.
+		* @property area
+		* @type number
+		* @readOnly
+		* @public
+		*/
+		public get area(): number {
+
+			if (this._radius &gt; 0)
+			{
+				return Math.PI * this._radius * this._radius;
+			}
+			else
+			{
+				return 0;
+			}
+
+		}
+
+		/**
+		* Determines whether or not this Circle object is empty. 
+		* @method isEmpty
+		* @return {boolean} A value of true if the Circle objects diameter is less than or equal to 0; otherwise false.
+		* @public
+		*/
+		public get isEmpty(): boolean {
+
+			if (this._diameter &lt;= 0)
+			{
+				return true;
+			}
+
+			return false;
+
+		}
+
+		/**
+		* Returns a new Circle object with the same values for the x, y, diameter, and radius properties as the original Circle object.
+		* @method clone
+		* @param [output=Circle] {Kiwi.Geom.Circle} If given the values will be set into the object, otherwise a brand new Circle object will be created and returned.
+		* @return {Kiwi.Geom.Circle}
+		* @public
+		*/
+		public clone(output: Circle = new Circle): Circle {
+
+			return output.setTo(this.x, this.y, this._diameter);
+
+		}
+
+		/**
+		* Copies all of circle data from a Circle object passed (the source) into this Circle object.
+		* @method copyFrom
+		* @param source {Kiwi.Geom.Circle} The source circle object to copy from
+		* @return {Kiwi.Geom.Circle} This circle object
+		* @public
+		*/
+		public copyFrom(source: Circle): Circle {
+
+			return this.setTo(source.x, source.y, source.diameter);
+
+		}
+
+		/**
+		* Copies all of circle data from this Circle object into a passed Circle object (destination).
+		* @method copyTo
+		* @param circle {Kiwi.Geom.Circle} The destination circle object to copy in to
+		* @return {Kiwi.Geom.Circle} The destination circle object
+		* @public
+		*/
+		public copyTo(target: Circle) {
+
+			return target.copyFrom(this);
+
+		}
+
+		/**
+		* Returns the distance from the center of this Circle object to the passed object.
+		* The passed object can be a Circle, Point, or anything with x/y values.
+		*
+		* @method distanceTo
+		* @param target {Any} The destination Point object.
+		* @param [round=false] {boolean} Round the distance to the nearest integer (default false)
+		* @return {Number} The distance between this Point object and the destination Point object.
+		* @public
+		*/
+		public distanceTo(target: any, round: boolean = false): number {
+
+			var dx = this.x - target.x;
+			var dy = this.y - target.y;
+
+			if (round === true)
+			{
+				return Math.round(Math.sqrt(dx * dx + dy * dy));
+			}
+			else
+			{
+				return Math.sqrt(dx * dx + dy * dy);
+			}
+
+		}
+
+		/**
+		* Determines whether a Circle passed is equal to this Circle.
+		* They are considered &#x27;equal&#x27; if both circles have the same values for x, y, and diameter properties.  
+		*
+		* @method equals
+		* @param toCompare {Kiwi.Geom.Circle} The circle to compare to this Circle object.
+		* @return {boolean} A value of true if the object has exactly the same values for the x, y and diameter properties as this Circle object; otherwise false.
+		* @public
+		*/
+		public equals(toCompare: Circle): boolean {
+
+			if (this.x === toCompare.x &amp;&amp; this.y === toCompare.y &amp;&amp; this.diameter === toCompare.diameter)
+			{
+				return true;
+			}
+
+			return false;
+
+		}
+
+		/**
+		* Determines whether a Circle passed intersects with this Circle. 
+		* Returns a boolean indicating if the two circles intersect.
+		*
+		* @method intersects
+		* @param toIntersect {Kiwi.Geom.Circle} The Circle object to compare against to see if it intersects with this Circle object.
+		* @return {boolean} A value of true if the specified object intersects with this Circle object; otherwise false.
+		* @public
+		*/
+		public intersects(toIntersect: Circle): boolean {
+
+			if (this.distanceTo(toIntersect, false) &lt; (this._radius + toIntersect._radius))
+			{
+				return true;
+			}
+
+			return false;
+
+		}
+
+		/**
+		* Returns a Point object containing the coordinates of a point on the circumference of this Circle based on the given angle.
+		*
+		* @method circumferencePoint
+		* @param angle {Number} The angle in radians (unless asDegrees is true) to return the point from.
+		* @param [asDegress=false] {boolean} Is the given angle in radians (false) or degrees (true)?
+		* @param [output] {Kiwi.Geom.Point} A Point object to put the result in to. If none specified a new Point object will be created.
+		* @return {Kiwi.Geom.Point} The Point object holding the result.
+		* @public
+		*/
+		public circumferencePoint(angle: number, asDegrees: boolean = false, output: Point = new Point): Point {
+
+			if (asDegrees === true)
+			{
+				angle = angle * (Math.PI / 180); // Radians to Degrees
+				//angle = angle * (180 / Math.PI); // Degrees to Radians
+			}
+
+			output.x = this.x + this._radius * Math.cos(angle);
+			output.y = this.y + this._radius * Math.sin(angle);
+
+			return output;
+
+		}
+
+		/**
+		* Adjusts the location of the Circle object, as determined by its center coordinate, by the specified amounts.
+		* @method offset
+		* @param dx {Number} Moves the x value of the Circle object by this amount.
+		* @param dy {Number} Moves the y value of the Circle object by this amount.
+		* @return {Kiwi.Geom.Circle} This Circle object.
+		* @public
+		*/
+		public offset(dx: number, dy: number): Circle {
+
+			if (!isNaN(dx) &amp;&amp; !isNaN(dy))
+			{
+				this.x += dx;
+				this.y += dy;
+			}
+
+			return this;
+
+		}
+
+		/**
+		* Adjusts the location of the Circle object using a Point object as a parameter. 
+		* This method is similar to the &#x27;offset&#x27; method, except that it takes a Point object as a parameter.
+		*
+		* @method offsetPoint
+		* @param {Kiwi.Geom.Point} point A Point object to use to offset this Circle object.
+		* @return {Kiwi.Geom.Circle} This Circle object.
+		* @public
+		*/
+		public offsetPoint(point: Point): Circle {
+
+			return this.offset(point.x, point.y);
+
+		}
+
+		/**
+		* Sets the members of Circle to the specified values.
+		*
+		* @method setTo
+		* @param x {Number} The x coordinate of the center of the circle.
+		* @param y {Number} The y coordinate of the center of the circle.
+		* @param diameter {Number} The diameter of the circle in pixels.
+		* @return {Kiwi.Geom.Circle} This circle object
+		* @public
+		*/
+		public setTo(x: number, y: number, diameter: number): Circle {
+
+			this.x = x;
+			this.y = y;
+			this._diameter = diameter;
+			this._radius = diameter * 0.5;
+
+			return this;
+
+		}
+
+		/**
+		* Returns a string representation of this object.
+		* @method toString
+		* @return {string} a string representation of the instance.
+		* @public
+		*/
+		public toString(): string {
+
+			return &quot;[{Circle (x=&quot; + this.x + &quot; y=&quot; + this.y + &quot; diameter=&quot; + this.diameter + &quot; radius=&quot; + this.radius + &quot;)}]&quot;;
+
+		}
+
+	}
 
 }
+
     </pre>
 </div>
 
diff --git a/docs/files/src_geom_Intersect.ts.html b/docs/files/src_geom_Intersect.ts.html
index a728ceb..bff09dd 100644
--- a/docs/files/src_geom_Intersect.ts.html
+++ b/docs/files/src_geom_Intersect.ts.html
@@ -368,653 +368,654 @@ <h1 class="file-heading">File: src/geom/Intersect.ts</h1>
 *  
 * @module Kiwi
 * @submodule Geom
-*/ 
+*/
 
 module Kiwi.Geom {
 
-    /**
-    * Contains a collection of STATIC methods for determining intersections between geometric objects.
-    *
-    * May methods contained here store the results of the intersections in a &#x27;IntersectResult&#x27; Object, 
-    * which is either created for you (by the methods which require it) OR you can pass one to use instead. 
-    * 
-    * If you are using the Intersect methods a lot, you may want to consider
-    * creating a IntersectResult class a reusing it (by passing it to the methods on the Intersect class)
-    * instead of having new IntersectResults created.
-    * 
-    * @class Intersect
-    * @namespace Kiwi.Geom
-    * @static
-    */
-    export class Intersect {
-
-        /**
-        * The type of this object.
-        * @method objType
-        * @return {String} &quot;Intersect&quot;
-        * @public
-        */
-        public objType() {
-            return &quot;Intersect&quot;;
-        }
-
-        /**
-	    * -------------------------------------------------------------------------------------------
-	    * Distance
-	    * -------------------------------------------------------------------------------------------
-	    **/
-
-        /** 
-	    * Returns the distance between two sets of coordinates that you specify. 
-	    * @method distance
-        * @param x1 {Number} The x position of the first coordinate.
-        * @param y1 {Number} The y position of the first coordinate.
-        * @param x2 {Number} The x position of the second coordinate.
-        * @param y2 {Number} The y position of the second coordinate.
-        * @return {Number} The distance between the two points.
-        * @public
-        * @static
-	    */
-        static distance(x1: number, y1: number, x2: number, y2: number) {
-            return Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
-        }
-
-        /** 
-	    * Returns the distance squared between two sets of coordinates that you specify. 
-        *
-	    * @method distanceSquared
-        * @param x1 {Number} The x position of the first coordinate.
-        * @param y1 {Number} The y position of the first coordinate.
-        * @param x2 {Number} The x position of the second coordinate.
-        * @param y2 {Number} The y position of the second coordinate.
-        * @return {Number} The distance between the two points squared.
-        * @public
-        * @static
-	    */
-        static distanceSquared(x1: number, y1: number, x2: number, y2: number) {
-            return (x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1);
-        }
-
-        /**
-	    * -------------------------------------------------------------------------------------------
-	    * Lines
-	    * -------------------------------------------------------------------------------------------
-	    **/
-
-        /**
-	    * Check to see if any two Lines intersect at any point. 
-        * Both lines are treated as if they extend infintely through space.
-        *
-	    * @method lineToLine
-	    * @param line1 {Kiwi.Geom.Line} The first line object to check.
-	    * @param line2 {Kiwi.Geom.Line} The second line object to check.
-	    * @param [output] {Kiwi.Geom.IntersectResult} An optional IntersectResult object to store the intersection values in. One is created if none given.
-	    * @return {Kiwi.Geom.IntersectResult} An IntersectResult object containing the results of this intersection in x/y
-        * @public
-        * @static
-	    */
-        static lineToLine(line1: Line, line2: Line, output: IntersectResult = new IntersectResult): IntersectResult {
-
-            var denom = (line1.x1 - line1.x2) * (line2.y1 - line2.y2) - (line1.y1 - line1.y2) * (line2.x1 - line2.x2);
-
-            if (denom !== 0)
-            {
-                output.result = true;
-                output.x = ((line1.x1 * line1.y2 - line1.y1 * line1.x2) * (line2.x1 - line2.x2) - (line1.x1 - line1.x2) * (line2.x1 * line2.y2 - line2.y1 * line2.x2)) / denom;
-                output.y = ((line1.x1 * line1.y2 - line1.y1 * line1.x2) * (line2.y1 - line2.y2) - (line1.y1 - line1.y2) * (line2.x1 * line2.y2 - line2.y1 * line2.x2)) / denom;
-            }
-
-            return output;
-        }
-
-        /**
-	    * Check to see if a Line and a Line Segment intersect at any point. 
-        * Note: The first line passed is treated as if it extends infinately though space, 
-        * The second is treated as if it only exists between its two points.
-        *
-	    * @method lineToLineSegment
-	    * @param line1 {Kiwi.Geom.Line} The first line to check. This is the one that will extend through space infinately.
-	    * @param seg {Kiwi.Geom.Line} The second line to check. This is the one that will only exist between its two coordinates.
-	    * @param [output] {Kiwi.Geom.IntersectResult} An optional IntersectResult object to store the intersection values in. One is created if none given.
-	    * @return {Kiwi.Geom.IntersectResult} An IntersectResult object containing the results of this intersection.
-        * @public
-        * @static
-	    */
-        static lineToLineSegment(line1: Line, seg: Line, output: IntersectResult = new IntersectResult): IntersectResult {
-
-            var denom = (line1.x1 - line1.x2) * (seg.y1 - seg.y2) - (line1.y1 - line1.y2) * (seg.x1 - seg.x2);
-
-            if (denom !== 0)
-            {
-                output.x = ((line1.x1 * line1.y2 - line1.y1 * line1.x2) * (seg.x1 - seg.x2) - (line1.x1 - line1.x2) * (seg.x1 * seg.y2 - seg.y1 * seg.x2)) / denom;
-                output.y = ((line1.x1 * line1.y2 - line1.y1 * line1.x2) * (seg.y1 - seg.y2) - (line1.y1 - line1.y2) * (seg.x1 * seg.y2 - seg.y1 * seg.x2)) / denom;
-
-                var maxX = Math.max(seg.x1, seg.x2);
-                var minX = Math.min(seg.x1, seg.x2);
-                var maxY = Math.max(seg.y1, seg.y2);
-                var minY = Math.min(seg.y1, seg.y2);
-
-                //if (!(output.x &lt;= maxX &amp;&amp; output.x &gt;= minX) || !(output.y &lt;= maxY &amp;&amp; output.y &gt;= minY))
-                if ((output.x &lt;= maxX &amp;&amp; output.x &gt;= minX) === true || (output.y &lt;= maxY &amp;&amp; output.y &gt;= minY) === true)
-                {
-                    output.result = true;
-                }
-
-            }
-
-            return output;
-
-        }
-
-        /**
-	    * Checks to see if a Line that is passed, intersects at any point with a Line that is made by passing a set of coordinates to this method. 
-        * Note: The first line will extend infinately through space. 
-        * And the second line will only exist between the two points passed.
-        *
-	    * @method lineToRawSegment
-	    * @param line {Kiwi.Geom.Line} The line object that extends infinatly through space.
-	    * @param x1 {number} The x coordinate of the first point in the second line.
-	    * @param y1 {number} The y coordinate of the first point in the second line.
-	    * @param x2 {number} The x coordinate of the second point in the second line.
-	    * @param y2 {number} The y coordinate of the second point in the second line.
-	    * @param [output] {Kiwi.Geom.IntersectResult} An optional IntersectResult object to store the intersection values in. One is created if none given.
-	    * @return {Kiwi.Geom.IntersectResult} An IntersectResult object containing the results of this intersection in x/y
-	    * @static
-        * @public
-        */
-        static lineToRawSegment(line: Line, x1: number, y1: number, x2: number, y2: number, output: IntersectResult = new IntersectResult): IntersectResult {
-
-            var denom = (line.x1 - line.x2) * (y1 - y2) - (line.y1 - line.y2) * (x1 - x2);
-
-            if (denom !== 0)
-            {
-                output.x = ((line.x1 * line.y2 - line.y1 * line.x2) * (x1 - x2) - (line.x1 - line.x2) * (x1 * y2 - y1 * x2)) / denom;
-                output.y = ((line.x1 * line.y2 - line.y1 * line.x2) * (y1 - y2) - (line.y1 - line.y2) * (x1 * y2 - y1 * x2)) / denom;
-
-                var maxX = Math.max(x1, x2);
-                var minX = Math.min(x1, x2);
-                var maxY = Math.max(y1, y2);
-                var minY = Math.min(y1, y2);
-
-                if ((output.x &lt;= maxX &amp;&amp; output.x &gt;= minX) === true || (output.y &lt;= maxY &amp;&amp; output.y &gt;= minY) === true)
-                {
-                    output.result = true;
-                }
-
-            }
-
-            return output;
-
-        }
-
-        /**
-	    * Checks to see if a Line and Ray object intersects at any point. 
-        * Note: The line in this case extends infinately through space. 
-        * 
-	    * @method lineToRay
-	    * @param line1 {Kiwi.Geom.Line} The Line object that extends infinatly through space.
-	    * @param ray {Kiwi.Geom.Ray} The Ray object that you want to check it against.
-	    * @param [output] {Kiwi.Geom.IntersectResult} An optional IntersectResult object to store the intersection values in. One is created if none given.
-	    * @return {Kiwi.Geom.IntersectResult} An IntersectResult object containing the results of this intersection in x/y
-	    * @public
-        * @static
-        */
-        static lineToRay(line1: Line, ray: Ray, output: IntersectResult = new IntersectResult): IntersectResult {
-
-            var denom = (line1.x1 - line1.x2) * (ray.y1 - ray.y2) - (line1.y1 - line1.y2) * (ray.x1 - ray.x2);
-
-            if (denom !== 0)
-            {
-                output.x = ((line1.x1 * line1.y2 - line1.y1 * line1.x2) * (ray.x1 - ray.x2) - (line1.x1 - line1.x2) * (ray.x1 * ray.y2 - ray.y1 * ray.x2)) / denom;
-                output.y = ((line1.x1 * line1.y2 - line1.y1 * line1.x2) * (ray.y1 - ray.y2) - (line1.y1 - line1.y2) * (ray.x1 * ray.y2 - ray.y1 * ray.x2)) / denom;
-                output.result = true; // true unless either of the 2 following conditions are met
-
-                if (!(ray.x1 &gt;= ray.x2) &amp;&amp; output.x &lt; ray.x1)
-                {
-                    output.result = false;
-                }
-
-                if (!(ray.y1 &gt;= ray.y2) &amp;&amp; output.y &lt; ray.y1)
-                {
-                    output.result = false;
-                }
-            }
-
-            return output;
-
-        }
-
-        /**
-	    * Checks to see if a Line and a Circle intersect at any point.
-        * Note: The line passed is assumed to extend infinately through space. 
-        *
-	    * @method lineToCircle
-	    * @param line {Kiwi.Geom.Line} The Line object that you want to check it against.
-	    * @param circle {Kiwi.Geom.Circle} The Circle object to check.
-	    * @param [output] {IntersectResult} An optional IntersectResult object to store the intersection values in. One is created if none given.
-	    * @return {Kiwi.Geom.IntersectResult} An IntersectResult object containing the results of this intersection
-	    * @public
-        * @static
-        */
-        static lineToCircle(line: Line, circle: Circle, output: IntersectResult = new IntersectResult): IntersectResult {
-
-            //  Get a perpendicular line running to the center of the circle
-            if (line.perp(circle.x, circle.y).length &lt;= circle.radius)
-            {
-                output.result = true;
-            }
-
-            return output;
-
-        }
-
-        /**
-	    * Check if the Line intersects with each side of a Rectangle.
-        * Note: The Line is assumned to extend infinately through space.
-        * 
-	    * @method lineToRectangle
-	    * @param line {Kiwi.Geom.Line} The Line object to check
-	    * @param rectangle {Kiwi.Geom.Rectangle} The Rectangle object to check
-	    * @param [output] {Kiwi.Geom.IntersectResult} An optional IntersectResult object to store the intersection values in. One is created if none given.
-	    * @return {Kiwi.Geom.IntersectResult} An IntersectResult object containing the results of this intersection
-        * @public
-        * @static
-	    */
-        static lineToRectangle(line: any, rect: Rectangle, output: IntersectResult = new IntersectResult): IntersectResult {
-
-            //  Top of the Rectangle vs the Line
-            Intersect.lineToRawSegment(line, rect.x, rect.y, rect.right, rect.y, output);
-
-            if (output.result === true)
-            {
-                return output;
-            }
-
-            //  Left of the Rectangle vs the Line
-            Intersect.lineToRawSegment(line, rect.x, rect.y, rect.x, rect.bottom, output);
-
-            if (output.result === true)
-            {
-                return output;
-            }
-
-            //  Bottom of the Rectangle vs the Line
-            Intersect.lineToRawSegment(line, rect.x, rect.bottom, rect.right, rect.bottom, output);
-
-            if (output.result === true)
-            {
-                return output;
-            }
-
-            //  Right of the Rectangle vs the Line
-            Intersect.lineToRawSegment(line, rect.right, rect.y, rect.right, rect.bottom, output);
-
-            return output;
-
-        }
-
-        /**
-	    * -------------------------------------------------------------------------------------------
-	    * Line Segment
-	    * -------------------------------------------------------------------------------------------
-	    **/
-
-        /**
-	    * Checks to see if two Line Segments intersect at any point in space. 
-        * Note: Both lines are treated as if they only exist between their two line coordinates.
-        * 
-	    * @method lineSegmentToLineSegment
-	    * @param line1 {Kiwi.Geom.Line} The first line object to check.
-	    * @param line2 {Kiwi.Geom.Line} The second line object to check.
-	    * @param [output]{Kiwi.Geom.IntersectResult} An optional IntersectResult object to store the intersection values in. One is created if none given.
-	    * @return {Kiwi.Geom.IntersectResult} An IntersectResult object containing the results of this intersection in x/y.
-	    * @public
-        * @static
-        */
-        static lineSegmentToLineSegment(line1: Line, line2: Line, output: IntersectResult = new IntersectResult): IntersectResult {
-
-            Intersect.lineToLineSegment(line1, line2, output);
-
-            if (output.result === true)
-            {
-                if (!(output.x &gt;= Math.min(line1.x1, line1.x2) &amp;&amp; output.x &lt;= Math.max(line1.x1, line1.x2)
-                    &amp;&amp; output.y &gt;= Math.min(line1.y1, line1.y2) &amp;&amp; output.y &lt;= Math.max(line1.y1, line1.y2)))
-                {
-                    output.result = false;
-                }
-            }
-
-            return output;
-        }
-
-        /**
-	    * Check if the Line Segment intersects with the Ray.
-        * Note: The Line only exists between its two points.
-        * 
-	    * @method lineSegmentToRay
-	    * @param line1 {Kiwi.Geom.Line} The Line object to check.
-	    * @param ray {Kiwi.Geom.Line} The Ray object to check.
-	    * @param [output] {Kiwi.Geom.IntersectResult} An optional IntersectResult object to store the intersection values in. One is created if none given.
-	    * @return {Kiwi.Geom.IntersectResult} An IntersectResult object containing the results of this intersection in x/y
-        * @public
-        * @static
-	    */
-        static lineSegmentToRay(line1: Line, ray: Ray, output: IntersectResult = new IntersectResult): IntersectResult {
-
-            Intersect.lineToRay(line1, ray, output);
-
-            if (output.result === true)
-            {
-                if (!(output.x &gt;= Math.min(line1.x1, line1.x2) &amp;&amp; output.x &lt;= Math.max(line1.x1, line1.x2)
-                    &amp;&amp; output.y &gt;= Math.min(line1.y1, line1.y2) &amp;&amp; output.y &lt;= Math.max(line1.y1, line1.y2)))
-                {
-                    output.result = false;
-                }
-            }
-
-            return output;
-
-        }
-
-        /**
-	    * Check if the Line Segment intersects with the Circle.
-        * Note the Line only exists between its point points.
-        * 
-	    * @method lineSegmentToCircle
-	    * @param seg {Kiwi.Geom.Line} The Line object to check
-	    * @param circle {Kiwi.Geom.Circle} The Circle object to check
-	    * @param [ouput] {Kiwi.Geom.IntersectResult} An optional IntersectResult object to store the intersection values in. One is created if none given.
-	    * @return {Kiwi.Geom.IntersectResult} An IntersectResult object containing the results of this intersection in x/y
-        * @public
-        * @static
-	    */
-        static lineSegmentToCircle(seg: Line, circle: Circle, output: IntersectResult = new IntersectResult): IntersectResult {
-
-            var perp = seg.perp(circle.x, circle.y);
-
-            if (perp.length &lt;= circle.radius)
-            {
-                //  Line intersects circle - check if segment does
-                var maxX = Math.max(seg.x1, seg.x2);
-                var minX = Math.min(seg.x1, seg.x2);
-                var maxY = Math.max(seg.y1, seg.y2);
-                var minY = Math.min(seg.y1, seg.y2);
-
-                if ((perp.x2 &lt;= maxX &amp;&amp; perp.x2 &gt;= minX) &amp;&amp; (perp.y2 &lt;= maxY &amp;&amp; perp.y2 &gt;= minY))
-                {
-                    output.result = true;
-                }
-                else
-                {
-                    //  Worst case - segment doesn&#x27;t traverse center, so no perpendicular connection.
-                    if (Intersect.circleContainsPoint(circle, &lt;Point&gt; { x: seg.x1, y: seg.y1 }) || Intersect.circleContainsPoint(circle, &lt;Point&gt; { x: seg.x2, y: seg.y2 }))
-                    {
-                        output.result = true;
-                    }
-                }
-
-            }
-
-            return output;
-        }
-
-        /**
-	    * Check if the Line Segment intersects with any side of a Rectangle.
-        * Note: The Line only exists between its two points.
-        *
-	    * @method lineSegmentToCircle
-	    * @param seg {Kiwi.Geom.Line} The Line object to check.
-	    * @param rect {Kiwi.Geom.Rectangle} The Rectangle object to check.
-	    * @param [output] {Kiwi.Geom.IntersectResult} An optional IntersectResult object to store the intersection values in. One is created if none given.
-	    * @return {Kiwi.Geom.IntersectResult} An IntersectResult object containing the results of this intersection in x/y.
-	    * @public
-        * @static
-        */ 
-        static lineSegmentToRectangle(seg: Line, rect: Rectangle, output: IntersectResult = new IntersectResult): IntersectResult {
-
-            if (rect.contains(seg.x1, seg.y1) &amp;&amp; rect.contains(seg.x2, seg.y2))
-            {
-                output.result = true;
-            }
-            else
-            {
-                //  Top of the Rectangle vs the Line
-                Intersect.lineToRawSegment(seg, rect.x, rect.y, rect.right, rect.bottom, output);
-
-                if (output.result === true)
-                {
-                    return output;
-                }
-
-                //  Left of the Rectangle vs the Line
-                Intersect.lineToRawSegment(seg, rect.x, rect.y, rect.x, rect.bottom, output);
-
-                if (output.result === true)
-                {
-                    return output;
-                }
-
-                //  Bottom of the Rectangle vs the Line
-                Intersect.lineToRawSegment(seg, rect.x, rect.bottom, rect.right, rect.bottom, output);
-
-                if (output.result === true)
-                {
-                    return output;
-                }
-
-                //  Right of the Rectangle vs the Line
-                Intersect.lineToRawSegment(seg, rect.right, rect.y, rect.right, rect.bottom, output);
-
-                return output;
-
-            }
-
-            return output;
-
-        }
-
-        /**
-	    * -------------------------------------------------------------------------------------------
-	    * Ray
-	    * -------------------------------------------------------------------------------------------
-	    **/
-
-        /**
-	    * Check to see if a Ray intersects at any point with a Rectangle.
-        * 
-	    * @method rayToRectangle
-	    * @param ray {Kiwi.Geom.Ray} The Ray object to check. 
-	    * @param rect {Kiwi.Geom.Rectangle} The Rectangle to check.
-	    * @param [output] {Kiwi.Geom.IntersectResult} An optional IntersectResult object to store the intersection values in. One is created if none given.
-	    * @return {Kiwi.Geom.IntersectResult} An IntersectResult object containing the results of this intersection
-	    * @public
-        * @static
-        */
-        static rayToRectangle(ray: Ray, rect: Rectangle, output: IntersectResult = new IntersectResult): IntersectResult {
-
-            //  Currently just finds first intersection - might not be closest to ray pt1
-            Intersect.lineToRectangle(ray, rect, output);
-
-            return output;
-
-        }
-
-        /**
-        * Check whether a Ray intersects a Line segment, returns the parametric value where the intersection occurs.
-        * Note: The Line only exists between its two points.
-        * 
-        * @method rayToLineSegment
-        * @static
-        * @param rayx1 {Number} The origin point of the ray on the x axis.
-        * @param rayy1 {Number} The origin point of the ray on the y axis.
-        * @param rayx2 {Number} The direction of the ray on the x axis. 
-        * @param rayy2 {Number} The direction of the ray on the y axis.
-        * @param linex1 {Number} The x of the first point of the line segment.
-        * @param liney1 {Number} The y of the first point of the line segment.
-        * @param linex2 {Number} The x of the second point of the line segment.
-        * @param liney2 {Number} The y of the second point of the line segment.
-	    * @param [output] {Kiwi.Geom.IntersectResult} An optional IntersectResult object to store the intersection values in. One is created if none given.
-	    * @return {Kiwi.Geom.IntersectResult} An IntersectResult object containing the results of this intersection stored in x
-        * @public
-        */
-        static rayToLineSegment(rayx1, rayy1, rayx2, rayy2, linex1, liney1, linex2, liney2, output: IntersectResult = new IntersectResult): IntersectResult {
-
-            var r, s, d;
-
-            // Check lines are not parallel
-            if ((rayy2 - rayy1) / (rayx2 - rayx1) != (liney2 - liney1) / (linex2 - linex1))
-            {
-                d = (((rayx2 - rayx1) * (liney2 - liney1)) - (rayy2 - rayy1) * (linex2 - linex1));
-
-                if (d != 0)
-                {
-                    r = (((rayy1 - liney1) * (linex2 - linex1)) - (rayx1 - linex1) * (liney2 - liney1)) / d;
-                    s = (((rayy1 - liney1) * (rayx2 - rayx1)) - (rayx1 - linex1) * (rayy2 - rayy1)) / d;
-
-                    if (r &gt;= 0)
-                    {
-                        if (s &gt;= 0 &amp;&amp; s &lt;= 1)
-                        {
-                            output.result = true;
-                            output.x = rayx1 + r * (rayx2 - rayx1), rayy1 + r * (rayy2 - rayy1);
-                        }
-                    }
-                }
-            }
-
-            return output;
-
-        }
-
-        /**
-	    * -------------------------------------------------------------------------------------------
-	    * Circle
-	    * -------------------------------------------------------------------------------------------
-	    **/
-
-        /**
-	    * Check if the two given Circle objects intersect at any point.
-        * 
-	    * @method circleToCircle
-	    * @param circle1 {Kiwi.Geom.Circle} The first circle object to check.
-	    * @param circle2 {Kiwi.Geom.Circle} The second circle object to check.
-	    * @param [output] {Kiwi.Geom.IntersectResult} An optional IntersectResult object to store the intersection values in. One is created if none given.
-	    * @return {Kiwi.Geom.IntersectResult} An IntersectResult object containing the results of this intersection
-	    * @public
-        * @static
-        */
-        static circleToCircle(circle1: Circle, circle2: Circle, output: IntersectResult = new IntersectResult): IntersectResult {
-
-            output.result = ((circle1.radius + circle2.radius) * (circle1.radius + circle2.radius)) &gt;= Intersect.distanceSquared(circle1.x, circle1.y, circle2.x, circle2.y);
-
-            return output;
-
-        }
-
-        /**
-	    * Check if a Circle and a Rectangle intersect with each other at any point. 
-        * 
-	    * @method circleToRectangle
-	    * @param circle {Kiwi.Geom.Circle} The circle object to check.
-	    * @param rect {Kiwi.Geom.Rectangle} The Rectangle object to check.
-	    * @param [output] {Kiwi.Geom.IntersectResult} An optional IntersectResult object to store the intersection values in. One is created if none given.
-	    * @return {Kiwi.Geom.IntersectResult} An IntersectResult object containing the results of this intersection
-	    * @public
-        * @static
-        */
-        static circleToRectangle(circle: Circle, rect: Rectangle, output: IntersectResult = new IntersectResult): IntersectResult {
-
-            var inflatedRect: Rectangle = rect.clone();
-
-            inflatedRect.inflate(circle.radius, circle.radius);
-
-            output.result = inflatedRect.contains(circle.x, circle.y);
-
-            return output;
-
-        }
-
-        /**
-	    * Check if the given Point is found within the given Circle.
-        * 
-	    * @method circleContainsPoint
-	    * @param circle {Kiwi.Geom.Circle} The circle object to check
-	    * @param point {Kiwi.Geom.Point} The point object to check
-	    * @param [output] {Kiwi.Geom.IntersectResult} An optional IntersectResult object to store the intersection values in. One is created if none given.
-	    * @return {Kiwi.Geom.IntersectResult} An IntersectResult object containing the results of this intersection
-	    * @public
-        * @static
-        */
-        static circleContainsPoint(circle: Circle, point: Point, output: IntersectResult = new IntersectResult): IntersectResult {
-
-            output.result = circle.radius * circle.radius &gt;= Intersect.distanceSquared(circle.x, circle.y, point.x, point.y);
-
-            return output;
-
-        }
-
-        /**
-	    * -------------------------------------------------------------------------------------------
-	    * Rectangles
-	    * -------------------------------------------------------------------------------------------
-	    **/
-
-        /**
-        * Determines whether the specified point is contained within a given Rectangle object.
-        * 
-        * @method pointToRectangle
-        * @param point {Kiwi.Geom.Point} The point object being checked.
-        * @param rect {Kiwi.Geom.Rectangle} The rectangle object being checked.
-	    * @param [output] {Kiwi.Geom.IntersectResult}  An optional IntersectResult object to store the intersection values in. One is created if none given.
-        * @return {Kiwi.Geom.IntersectResult} An IntersectResult object containing the results of this intersection in x/y/result
-        * @public
-        * @static
-        */
-        static pointToRectangle(point: Point, rect: Rectangle, output: IntersectResult = new IntersectResult): IntersectResult {
-
-            output.setTo(point.x, point.y);
-
-            output.result = rect.containsPoint(point);
-
-            return output;
-
-        }
-
-        /**
-	    * Check whether two axis aligned rectangles intersect. Return the intersecting rectangle dimensions if they do.
-        *
-	    * @method rectangleToRectangle
-	    * @param rect1 {Kiwi.Geom.Rectangle} The first Rectangle object.
-	    * @param rect2 {Kiwi.Geom.Rectangle} The second Rectangle object.
-	    * @param [output] {Kiwi.Geom.IntersectResult} An optional IntersectResult object to store the intersection values in. One is created if none given.
-	    * @return {Kiwi.Geom.IntersectResult} An IntersectResult object containing the results of this intersection in x/y/width/height
-	    * @public
-        * @static
-        */
-        static rectangleToRectangle(rect1: Rectangle, rect2: Rectangle, output: IntersectResult = new IntersectResult): IntersectResult {
-
-            var leftX = Math.max(rect1.x, rect2.x);
-            var rightX = Math.min(rect1.right, rect2.right);
-            var topY = Math.max(rect1.y, rect2.y);
-            var bottomY = Math.min(rect1.bottom, rect2.bottom);
-
-            output.setTo(leftX, topY, rightX - leftX, bottomY - topY, rightX - leftX, bottomY - topY);
+	/**
+	* Contains a collection of STATIC methods for determining intersections between geometric objects.
+	*
+	* May methods contained here store the results of the intersections in a &#x27;IntersectResult&#x27; Object, 
+	* which is either created for you (by the methods which require it) OR you can pass one to use instead. 
+	* 
+	* If you are using the Intersect methods a lot, you may want to consider
+	* creating a IntersectResult class a reusing it (by passing it to the methods on the Intersect class)
+	* instead of having new IntersectResults created.
+	* 
+	* @class Intersect
+	* @namespace Kiwi.Geom
+	* @static
+	*/
+	export class Intersect {
+
+		/**
+		* The type of this object.
+		* @method objType
+		* @return {String} &quot;Intersect&quot;
+		* @public
+		*/
+		public objType() {
+			return &quot;Intersect&quot;;
+		}
+
+		/**
+		* -------------------------------------------------------------------------------------------
+		* Distance
+		* -------------------------------------------------------------------------------------------
+		**/
+
+		/** 
+		* Returns the distance between two sets of coordinates that you specify. 
+		* @method distance
+		* @param x1 {Number} The x position of the first coordinate.
+		* @param y1 {Number} The y position of the first coordinate.
+		* @param x2 {Number} The x position of the second coordinate.
+		* @param y2 {Number} The y position of the second coordinate.
+		* @return {Number} The distance between the two points.
+		* @public
+		* @static
+		*/
+		static distance(x1: number, y1: number, x2: number, y2: number) {
+			return Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
+		}
+
+		/** 
+		* Returns the distance squared between two sets of coordinates that you specify. 
+		*
+		* @method distanceSquared
+		* @param x1 {Number} The x position of the first coordinate.
+		* @param y1 {Number} The y position of the first coordinate.
+		* @param x2 {Number} The x position of the second coordinate.
+		* @param y2 {Number} The y position of the second coordinate.
+		* @return {Number} The distance between the two points squared.
+		* @public
+		* @static
+		*/
+		static distanceSquared(x1: number, y1: number, x2: number, y2: number) {
+			return (x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1);
+		}
+
+		/**
+		* -------------------------------------------------------------------------------------------
+		* Lines
+		* -------------------------------------------------------------------------------------------
+		**/
+
+		/**
+		* Check to see if any two Lines intersect at any point. 
+		* Both lines are treated as if they extend infintely through space.
+		*
+		* @method lineToLine
+		* @param line1 {Kiwi.Geom.Line} The first line object to check.
+		* @param line2 {Kiwi.Geom.Line} The second line object to check.
+		* @param [output] {Kiwi.Geom.IntersectResult} An optional IntersectResult object to store the intersection values in. One is created if none given.
+		* @return {Kiwi.Geom.IntersectResult} An IntersectResult object containing the results of this intersection in x/y
+		* @public
+		* @static
+		*/
+		static lineToLine(line1: Line, line2: Line, output: IntersectResult = new IntersectResult): IntersectResult {
+
+			var denom = (line1.x1 - line1.x2) * (line2.y1 - line2.y2) - (line1.y1 - line1.y2) * (line2.x1 - line2.x2);
+
+			if (denom !== 0)
+			{
+				output.result = true;
+				output.x = ((line1.x1 * line1.y2 - line1.y1 * line1.x2) * (line2.x1 - line2.x2) - (line1.x1 - line1.x2) * (line2.x1 * line2.y2 - line2.y1 * line2.x2)) / denom;
+				output.y = ((line1.x1 * line1.y2 - line1.y1 * line1.x2) * (line2.y1 - line2.y2) - (line1.y1 - line1.y2) * (line2.x1 * line2.y2 - line2.y1 * line2.x2)) / denom;
+			}
+
+			return output;
+		}
+
+		/**
+		* Check to see if a Line and a Line Segment intersect at any point. 
+		* Note: The first line passed is treated as if it extends infinately though space, 
+		* The second is treated as if it only exists between its two points.
+		*
+		* @method lineToLineSegment
+		* @param line1 {Kiwi.Geom.Line} The first line to check. This is the one that will extend through space infinately.
+		* @param seg {Kiwi.Geom.Line} The second line to check. This is the one that will only exist between its two coordinates.
+		* @param [output] {Kiwi.Geom.IntersectResult} An optional IntersectResult object to store the intersection values in. One is created if none given.
+		* @return {Kiwi.Geom.IntersectResult} An IntersectResult object containing the results of this intersection.
+		* @public
+		* @static
+		*/
+		static lineToLineSegment(line1: Line, seg: Line, output: IntersectResult = new IntersectResult): IntersectResult {
+
+			var denom = (line1.x1 - line1.x2) * (seg.y1 - seg.y2) - (line1.y1 - line1.y2) * (seg.x1 - seg.x2);
+
+			if (denom !== 0)
+			{
+				output.x = ((line1.x1 * line1.y2 - line1.y1 * line1.x2) * (seg.x1 - seg.x2) - (line1.x1 - line1.x2) * (seg.x1 * seg.y2 - seg.y1 * seg.x2)) / denom;
+				output.y = ((line1.x1 * line1.y2 - line1.y1 * line1.x2) * (seg.y1 - seg.y2) - (line1.y1 - line1.y2) * (seg.x1 * seg.y2 - seg.y1 * seg.x2)) / denom;
+
+				var maxX = Math.max(seg.x1, seg.x2);
+				var minX = Math.min(seg.x1, seg.x2);
+				var maxY = Math.max(seg.y1, seg.y2);
+				var minY = Math.min(seg.y1, seg.y2);
+
+				//if (!(output.x &lt;= maxX &amp;&amp; output.x &gt;= minX) || !(output.y &lt;= maxY &amp;&amp; output.y &gt;= minY))
+				if ((output.x &lt;= maxX &amp;&amp; output.x &gt;= minX) === true || (output.y &lt;= maxY &amp;&amp; output.y &gt;= minY) === true)
+				{
+					output.result = true;
+				}
+
+			}
+
+			return output;
+
+		}
+
+		/**
+		* Checks to see if a Line that is passed, intersects at any point with a Line that is made by passing a set of coordinates to this method. 
+		* Note: The first line will extend infinately through space. 
+		* And the second line will only exist between the two points passed.
+		*
+		* @method lineToRawSegment
+		* @param line {Kiwi.Geom.Line} The line object that extends infinatly through space.
+		* @param x1 {number} The x coordinate of the first point in the second line.
+		* @param y1 {number} The y coordinate of the first point in the second line.
+		* @param x2 {number} The x coordinate of the second point in the second line.
+		* @param y2 {number} The y coordinate of the second point in the second line.
+		* @param [output] {Kiwi.Geom.IntersectResult} An optional IntersectResult object to store the intersection values in. One is created if none given.
+		* @return {Kiwi.Geom.IntersectResult} An IntersectResult object containing the results of this intersection in x/y
+		* @static
+		* @public
+		*/
+		static lineToRawSegment(line: Line, x1: number, y1: number, x2: number, y2: number, output: IntersectResult = new IntersectResult): IntersectResult {
+
+			var denom = (line.x1 - line.x2) * (y1 - y2) - (line.y1 - line.y2) * (x1 - x2);
+
+			if (denom !== 0)
+			{
+				output.x = ((line.x1 * line.y2 - line.y1 * line.x2) * (x1 - x2) - (line.x1 - line.x2) * (x1 * y2 - y1 * x2)) / denom;
+				output.y = ((line.x1 * line.y2 - line.y1 * line.x2) * (y1 - y2) - (line.y1 - line.y2) * (x1 * y2 - y1 * x2)) / denom;
+
+				var maxX = Math.max(x1, x2);
+				var minX = Math.min(x1, x2);
+				var maxY = Math.max(y1, y2);
+				var minY = Math.min(y1, y2);
+
+				if ((output.x &lt;= maxX &amp;&amp; output.x &gt;= minX) === true || (output.y &lt;= maxY &amp;&amp; output.y &gt;= minY) === true)
+				{
+					output.result = true;
+				}
+
+			}
+
+			return output;
+
+		}
+
+		/**
+		* Checks to see if a Line and Ray object intersects at any point. 
+		* Note: The line in this case extends infinately through space. 
+		* 
+		* @method lineToRay
+		* @param line1 {Kiwi.Geom.Line} The Line object that extends infinatly through space.
+		* @param ray {Kiwi.Geom.Ray} The Ray object that you want to check it against.
+		* @param [output] {Kiwi.Geom.IntersectResult} An optional IntersectResult object to store the intersection values in. One is created if none given.
+		* @return {Kiwi.Geom.IntersectResult} An IntersectResult object containing the results of this intersection in x/y
+		* @public
+		* @static
+		*/
+		static lineToRay(line1: Line, ray: Ray, output: IntersectResult = new IntersectResult): IntersectResult {
+
+			var denom = (line1.x1 - line1.x2) * (ray.y1 - ray.y2) - (line1.y1 - line1.y2) * (ray.x1 - ray.x2);
+
+			if (denom !== 0)
+			{
+				output.x = ((line1.x1 * line1.y2 - line1.y1 * line1.x2) * (ray.x1 - ray.x2) - (line1.x1 - line1.x2) * (ray.x1 * ray.y2 - ray.y1 * ray.x2)) / denom;
+				output.y = ((line1.x1 * line1.y2 - line1.y1 * line1.x2) * (ray.y1 - ray.y2) - (line1.y1 - line1.y2) * (ray.x1 * ray.y2 - ray.y1 * ray.x2)) / denom;
+				output.result = true; // true unless either of the 2 following conditions are met
+
+				if (!(ray.x1 &gt;= ray.x2) &amp;&amp; output.x &lt; ray.x1)
+				{
+					output.result = false;
+				}
+
+				if (!(ray.y1 &gt;= ray.y2) &amp;&amp; output.y &lt; ray.y1)
+				{
+					output.result = false;
+				}
+			}
+
+			return output;
+
+		}
+
+		/**
+		* Checks to see if a Line and a Circle intersect at any point.
+		* Note: The line passed is assumed to extend infinately through space. 
+		*
+		* @method lineToCircle
+		* @param line {Kiwi.Geom.Line} The Line object that you want to check it against.
+		* @param circle {Kiwi.Geom.Circle} The Circle object to check.
+		* @param [output] {IntersectResult} An optional IntersectResult object to store the intersection values in. One is created if none given.
+		* @return {Kiwi.Geom.IntersectResult} An IntersectResult object containing the results of this intersection
+		* @public
+		* @static
+		*/
+		static lineToCircle(line: Line, circle: Circle, output: IntersectResult = new IntersectResult): IntersectResult {
+
+			//  Get a perpendicular line running to the center of the circle
+			if (line.perp(circle.x, circle.y).length &lt;= circle.radius)
+			{
+				output.result = true;
+			}
+
+			return output;
+
+		}
+
+		/**
+		* Check if the Line intersects with each side of a Rectangle.
+		* Note: The Line is assumned to extend infinately through space.
+		* 
+		* @method lineToRectangle
+		* @param line {Kiwi.Geom.Line} The Line object to check
+		* @param rectangle {Kiwi.Geom.Rectangle} The Rectangle object to check
+		* @param [output] {Kiwi.Geom.IntersectResult} An optional IntersectResult object to store the intersection values in. One is created if none given.
+		* @return {Kiwi.Geom.IntersectResult} An IntersectResult object containing the results of this intersection
+		* @public
+		* @static
+		*/
+		static lineToRectangle(line: any, rect: Rectangle, output: IntersectResult = new IntersectResult): IntersectResult {
+
+			//  Top of the Rectangle vs the Line
+			Intersect.lineToRawSegment(line, rect.x, rect.y, rect.right, rect.y, output);
+
+			if (output.result === true)
+			{
+				return output;
+			}
+
+			//  Left of the Rectangle vs the Line
+			Intersect.lineToRawSegment(line, rect.x, rect.y, rect.x, rect.bottom, output);
+
+			if (output.result === true)
+			{
+				return output;
+			}
+
+			//  Bottom of the Rectangle vs the Line
+			Intersect.lineToRawSegment(line, rect.x, rect.bottom, rect.right, rect.bottom, output);
+
+			if (output.result === true)
+			{
+				return output;
+			}
+
+			//  Right of the Rectangle vs the Line
+			Intersect.lineToRawSegment(line, rect.right, rect.y, rect.right, rect.bottom, output);
+
+			return output;
+
+		}
+
+		/**
+		* -------------------------------------------------------------------------------------------
+		* Line Segment
+		* -------------------------------------------------------------------------------------------
+		**/
+
+		/**
+		* Checks to see if two Line Segments intersect at any point in space. 
+		* Note: Both lines are treated as if they only exist between their two line coordinates.
+		* 
+		* @method lineSegmentToLineSegment
+		* @param line1 {Kiwi.Geom.Line} The first line object to check.
+		* @param line2 {Kiwi.Geom.Line} The second line object to check.
+		* @param [output]{Kiwi.Geom.IntersectResult} An optional IntersectResult object to store the intersection values in. One is created if none given.
+		* @return {Kiwi.Geom.IntersectResult} An IntersectResult object containing the results of this intersection in x/y.
+		* @public
+		* @static
+		*/
+		static lineSegmentToLineSegment(line1: Line, line2: Line, output: IntersectResult = new IntersectResult): IntersectResult {
+
+			Intersect.lineToLineSegment(line1, line2, output);
+
+			if (output.result === true)
+			{
+				if (!(output.x &gt;= Math.min(line1.x1, line1.x2) &amp;&amp; output.x &lt;= Math.max(line1.x1, line1.x2)
+					&amp;&amp; output.y &gt;= Math.min(line1.y1, line1.y2) &amp;&amp; output.y &lt;= Math.max(line1.y1, line1.y2)))
+				{
+					output.result = false;
+				}
+			}
+
+			return output;
+		}
+
+		/**
+		* Check if the Line Segment intersects with the Ray.
+		* Note: The Line only exists between its two points.
+		* 
+		* @method lineSegmentToRay
+		* @param line1 {Kiwi.Geom.Line} The Line object to check.
+		* @param ray {Kiwi.Geom.Line} The Ray object to check.
+		* @param [output] {Kiwi.Geom.IntersectResult} An optional IntersectResult object to store the intersection values in. One is created if none given.
+		* @return {Kiwi.Geom.IntersectResult} An IntersectResult object containing the results of this intersection in x/y
+		* @public
+		* @static
+		*/
+		static lineSegmentToRay(line1: Line, ray: Ray, output: IntersectResult = new IntersectResult): IntersectResult {
+
+			Intersect.lineToRay(line1, ray, output);
+
+			if (output.result === true)
+			{
+				if (!(output.x &gt;= Math.min(line1.x1, line1.x2) &amp;&amp; output.x &lt;= Math.max(line1.x1, line1.x2)
+					&amp;&amp; output.y &gt;= Math.min(line1.y1, line1.y2) &amp;&amp; output.y &lt;= Math.max(line1.y1, line1.y2)))
+				{
+					output.result = false;
+				}
+			}
+
+			return output;
+
+		}
+
+		/**
+		* Check if the Line Segment intersects with the Circle.
+		* Note the Line only exists between its point points.
+		* 
+		* @method lineSegmentToCircle
+		* @param seg {Kiwi.Geom.Line} The Line object to check
+		* @param circle {Kiwi.Geom.Circle} The Circle object to check
+		* @param [ouput] {Kiwi.Geom.IntersectResult} An optional IntersectResult object to store the intersection values in. One is created if none given.
+		* @return {Kiwi.Geom.IntersectResult} An IntersectResult object containing the results of this intersection in x/y
+		* @public
+		* @static
+		*/
+		static lineSegmentToCircle(seg: Line, circle: Circle, output: IntersectResult = new IntersectResult): IntersectResult {
+
+			var perp = seg.perp(circle.x, circle.y);
+
+			if (perp.length &lt;= circle.radius)
+			{
+				//  Line intersects circle - check if segment does
+				var maxX = Math.max(seg.x1, seg.x2);
+				var minX = Math.min(seg.x1, seg.x2);
+				var maxY = Math.max(seg.y1, seg.y2);
+				var minY = Math.min(seg.y1, seg.y2);
+
+				if ((perp.x2 &lt;= maxX &amp;&amp; perp.x2 &gt;= minX) &amp;&amp; (perp.y2 &lt;= maxY &amp;&amp; perp.y2 &gt;= minY))
+				{
+					output.result = true;
+				}
+				else
+				{
+					//  Worst case - segment doesn&#x27;t traverse center, so no perpendicular connection.
+					if (Intersect.circleContainsPoint(circle, &lt;Point&gt; { x: seg.x1, y: seg.y1 }) || Intersect.circleContainsPoint(circle, &lt;Point&gt; { x: seg.x2, y: seg.y2 }))
+					{
+						output.result = true;
+					}
+				}
+
+			}
+
+			return output;
+		}
+
+		/**
+		* Check if the Line Segment intersects with any side of a Rectangle.
+		* Note: The Line only exists between its two points.
+		*
+		* @method lineSegmentToCircle
+		* @param seg {Kiwi.Geom.Line} The Line object to check.
+		* @param rect {Kiwi.Geom.Rectangle} The Rectangle object to check.
+		* @param [output] {Kiwi.Geom.IntersectResult} An optional IntersectResult object to store the intersection values in. One is created if none given.
+		* @return {Kiwi.Geom.IntersectResult} An IntersectResult object containing the results of this intersection in x/y.
+		* @public
+		* @static
+		*/
+		static lineSegmentToRectangle(seg: Line, rect: Rectangle, output: IntersectResult = new IntersectResult): IntersectResult {
+
+			if (rect.contains(seg.x1, seg.y1) &amp;&amp; rect.contains(seg.x2, seg.y2))
+			{
+				output.result = true;
+			}
+			else
+			{
+				//  Top of the Rectangle vs the Line
+				Intersect.lineToRawSegment(seg, rect.x, rect.y, rect.right, rect.bottom, output);
+
+				if (output.result === true)
+				{
+					return output;
+				}
+
+				//  Left of the Rectangle vs the Line
+				Intersect.lineToRawSegment(seg, rect.x, rect.y, rect.x, rect.bottom, output);
+
+				if (output.result === true)
+				{
+					return output;
+				}
+
+				//  Bottom of the Rectangle vs the Line
+				Intersect.lineToRawSegment(seg, rect.x, rect.bottom, rect.right, rect.bottom, output);
+
+				if (output.result === true)
+				{
+					return output;
+				}
+
+				//  Right of the Rectangle vs the Line
+				Intersect.lineToRawSegment(seg, rect.right, rect.y, rect.right, rect.bottom, output);
+
+				return output;
+
+			}
+
+			return output;
+
+		}
+
+		/**
+		* -------------------------------------------------------------------------------------------
+		* Ray
+		* -------------------------------------------------------------------------------------------
+		**/
+
+		/**
+		* Check to see if a Ray intersects at any point with a Rectangle.
+		* 
+		* @method rayToRectangle
+		* @param ray {Kiwi.Geom.Ray} The Ray object to check. 
+		* @param rect {Kiwi.Geom.Rectangle} The Rectangle to check.
+		* @param [output] {Kiwi.Geom.IntersectResult} An optional IntersectResult object to store the intersection values in. One is created if none given.
+		* @return {Kiwi.Geom.IntersectResult} An IntersectResult object containing the results of this intersection
+		* @public
+		* @static
+		*/
+		static rayToRectangle(ray: Ray, rect: Rectangle, output: IntersectResult = new IntersectResult): IntersectResult {
+
+			//  Currently just finds first intersection - might not be closest to ray pt1
+			Intersect.lineToRectangle(ray, rect, output);
+
+			return output;
+
+		}
+
+		/**
+		* Check whether a Ray intersects a Line segment, returns the parametric value where the intersection occurs.
+		* Note: The Line only exists between its two points.
+		* 
+		* @method rayToLineSegment
+		* @static
+		* @param rayx1 {Number} The origin point of the ray on the x axis.
+		* @param rayy1 {Number} The origin point of the ray on the y axis.
+		* @param rayx2 {Number} The direction of the ray on the x axis. 
+		* @param rayy2 {Number} The direction of the ray on the y axis.
+		* @param linex1 {Number} The x of the first point of the line segment.
+		* @param liney1 {Number} The y of the first point of the line segment.
+		* @param linex2 {Number} The x of the second point of the line segment.
+		* @param liney2 {Number} The y of the second point of the line segment.
+		* @param [output] {Kiwi.Geom.IntersectResult} An optional IntersectResult object to store the intersection values in. One is created if none given.
+		* @return {Kiwi.Geom.IntersectResult} An IntersectResult object containing the results of this intersection stored in x
+		* @public
+		*/
+		static rayToLineSegment(rayx1, rayy1, rayx2, rayy2, linex1, liney1, linex2, liney2, output: IntersectResult = new IntersectResult): IntersectResult {
+
+			var r, s, d;
+
+			// Check lines are not parallel
+			if ((rayy2 - rayy1) / (rayx2 - rayx1) != (liney2 - liney1) / (linex2 - linex1))
+			{
+				d = (((rayx2 - rayx1) * (liney2 - liney1)) - (rayy2 - rayy1) * (linex2 - linex1));
+
+				if (d != 0)
+				{
+					r = (((rayy1 - liney1) * (linex2 - linex1)) - (rayx1 - linex1) * (liney2 - liney1)) / d;
+					s = (((rayy1 - liney1) * (rayx2 - rayx1)) - (rayx1 - linex1) * (rayy2 - rayy1)) / d;
+
+					if (r &gt;= 0)
+					{
+						if (s &gt;= 0 &amp;&amp; s &lt;= 1)
+						{
+							output.result = true;
+							output.x = rayx1 + r * (rayx2 - rayx1), rayy1 + r * (rayy2 - rayy1);
+						}
+					}
+				}
+			}
+
+			return output;
+
+		}
+
+		/**
+		* -------------------------------------------------------------------------------------------
+		* Circle
+		* -------------------------------------------------------------------------------------------
+		**/
+
+		/**
+		* Check if the two given Circle objects intersect at any point.
+		* 
+		* @method circleToCircle
+		* @param circle1 {Kiwi.Geom.Circle} The first circle object to check.
+		* @param circle2 {Kiwi.Geom.Circle} The second circle object to check.
+		* @param [output] {Kiwi.Geom.IntersectResult} An optional IntersectResult object to store the intersection values in. One is created if none given.
+		* @return {Kiwi.Geom.IntersectResult} An IntersectResult object containing the results of this intersection
+		* @public
+		* @static
+		*/
+		static circleToCircle(circle1: Circle, circle2: Circle, output: IntersectResult = new IntersectResult): IntersectResult {
+
+			output.result = ((circle1.radius + circle2.radius) * (circle1.radius + circle2.radius)) &gt;= Intersect.distanceSquared(circle1.x, circle1.y, circle2.x, circle2.y);
+
+			return output;
+
+		}
+
+		/**
+		* Check if a Circle and a Rectangle intersect with each other at any point. 
+		* 
+		* @method circleToRectangle
+		* @param circle {Kiwi.Geom.Circle} The circle object to check.
+		* @param rect {Kiwi.Geom.Rectangle} The Rectangle object to check.
+		* @param [output] {Kiwi.Geom.IntersectResult} An optional IntersectResult object to store the intersection values in. One is created if none given.
+		* @return {Kiwi.Geom.IntersectResult} An IntersectResult object containing the results of this intersection
+		* @public
+		* @static
+		*/
+		static circleToRectangle(circle: Circle, rect: Rectangle, output: IntersectResult = new IntersectResult): IntersectResult {
+
+			var inflatedRect: Rectangle = rect.clone();
+
+			inflatedRect.inflate(circle.radius, circle.radius);
+
+			output.result = inflatedRect.contains(circle.x, circle.y);
+
+			return output;
+
+		}
+
+		/**
+		* Check if the given Point is found within the given Circle.
+		* 
+		* @method circleContainsPoint
+		* @param circle {Kiwi.Geom.Circle} The circle object to check
+		* @param point {Kiwi.Geom.Point} The point object to check
+		* @param [output] {Kiwi.Geom.IntersectResult} An optional IntersectResult object to store the intersection values in. One is created if none given.
+		* @return {Kiwi.Geom.IntersectResult} An IntersectResult object containing the results of this intersection
+		* @public
+		* @static
+		*/
+		static circleContainsPoint(circle: Circle, point: Point, output: IntersectResult = new IntersectResult): IntersectResult {
+
+			output.result = circle.radius * circle.radius &gt;= Intersect.distanceSquared(circle.x, circle.y, point.x, point.y);
+
+			return output;
+
+		}
+
+		/**
+		* -------------------------------------------------------------------------------------------
+		* Rectangles
+		* -------------------------------------------------------------------------------------------
+		**/
+
+		/**
+		* Determines whether the specified point is contained within a given Rectangle object.
+		* 
+		* @method pointToRectangle
+		* @param point {Kiwi.Geom.Point} The point object being checked.
+		* @param rect {Kiwi.Geom.Rectangle} The rectangle object being checked.
+		* @param [output] {Kiwi.Geom.IntersectResult}  An optional IntersectResult object to store the intersection values in. One is created if none given.
+		* @return {Kiwi.Geom.IntersectResult} An IntersectResult object containing the results of this intersection in x/y/result
+		* @public
+		* @static
+		*/
+		static pointToRectangle(point: Point, rect: Rectangle, output: IntersectResult = new IntersectResult): IntersectResult {
+
+			output.setTo(point.x, point.y);
+
+			output.result = rect.containsPoint(point);
+
+			return output;
+
+		}
+
+		/**
+		* Check whether two axis aligned rectangles intersect. Return the intersecting rectangle dimensions if they do.
+		*
+		* @method rectangleToRectangle
+		* @param rect1 {Kiwi.Geom.Rectangle} The first Rectangle object.
+		* @param rect2 {Kiwi.Geom.Rectangle} The second Rectangle object.
+		* @param [output] {Kiwi.Geom.IntersectResult} An optional IntersectResult object to store the intersection values in. One is created if none given.
+		* @return {Kiwi.Geom.IntersectResult} An IntersectResult object containing the results of this intersection in x/y/width/height
+		* @public
+		* @static
+		*/
+		static rectangleToRectangle(rect1: Rectangle, rect2: Rectangle, output: IntersectResult = new IntersectResult): IntersectResult {
+
+			var leftX = Math.max(rect1.x, rect2.x);
+			var rightX = Math.min(rect1.right, rect2.right);
+			var topY = Math.max(rect1.y, rect2.y);
+			var bottomY = Math.min(rect1.bottom, rect2.bottom);
+
+			output.setTo(leftX, topY, rightX - leftX, bottomY - topY, rightX - leftX, bottomY - topY);
 
-            var cx = output.x + output.width * .5;
-            var cy = output.y + output.height * .5;
+			var cx = output.x + output.width * .5;
+			var cy = output.y + output.height * .5;
 
-            if ((cx &gt; rect1.x &amp;&amp; cx &lt; rect1.right) &amp;&amp; (cy &gt; rect1.y &amp;&amp; cy &lt; rect1.bottom))
-            {
-                output.result = true;
-            }
+			if ((cx &gt; rect1.x &amp;&amp; cx &lt; rect1.right) &amp;&amp; (cy &gt; rect1.y &amp;&amp; cy &lt; rect1.bottom))
+			{
+				output.result = true;
+			}
 
-            return output;
-
-        }
-
-    }
+			return output;
+
+		}
+
+	}
 
 }
+
     </pre>
 </div>
 
diff --git a/docs/files/src_geom_IntersectResult.ts.html b/docs/files/src_geom_IntersectResult.ts.html
index d2d8c3d..bba9695 100644
--- a/docs/files/src_geom_IntersectResult.ts.html
+++ b/docs/files/src_geom_IntersectResult.ts.html
@@ -372,137 +372,137 @@ <h1 class="file-heading">File: src/geom/IntersectResult.ts</h1>
 
 module Kiwi.Geom {
 
-    /**
-    * A Lightweight object to hold the results of an Intersection. 
-    * Used in combination with the STATIC methods on the Intersect class.
-    *
-    * If you are using the Intersect methods a lot, you may want to consider
-    * creating a IntersectResult class a reusing it (by passing it to the methods on the Intersect class)
-    * instead of having new IntersectResults created.
-    * 
-    *
-    * @class IntersectResult
-    * @namespace Kiwi.Geom
-    * @constructor
-    */
-    export class IntersectResult {
-
-        /**
-        * The type of object this is.
-        * @method objType
-        * @return {String} &quot;IntersectResult&quot;
-        * @public
-        */
-        public objType() {
-            return &quot;IntersectResult&quot;;
-        }
-
-        /**
-        * Holds the result of an Intersection between two geometric items.
-        * TRUE means an Intersection did occur and FALSE means not. 
-        * @property result
-        * @type boolean
-        * @default false
-        * @public
-        */
-        public result: boolean = false;
-
-        /**
-        * Holds the x coordinate of the point in which the Intersection occured.
-        * Note: This is only set in the case the TWO geometric items are either Lines or Rays (Line like in function)
-        * and a Intersection occured.
-        * @property x
-        * @type Number
-        * @public
-        */
-        public x: number;
-
-        /**
-        * Holds the y coordinate of the point in which the Intersection occured.
-        * Note: This is only set in the case the TWO geometric items are either Lines or Rays (Line like in function)
-        * and a Intersection occured.
-        * @property y
-        * @type Number
-        * @public
-        */
-        public y: number;
-
-        /**
-        * [CURRENTLY NOT IN USE]
-        * @property x1
-        * @type Number
-        * @public
-        */
-        public x1: number;
-
-        /**
-        * [CURRENTLY NOT IN USE]
-        * @property y1
-        * @type Number
-        * @public
-        */
-        public y1: number;
-
-        /**
-        * [CURRENTLY NOT IN USE]
-        * @property x2
-        * @type Number
-        * @public
-        */
-        public x2: number;
-
-        /**
-        * [CURRENTLY NOT IN USE]
-        * @property y2
-        * @type Number
-        * @public
-        */
-        public y2: number;
-
-        /**
-        * [CURRENTLY NOT IN USE]
-        * @property width
-        * @type Number
-        * @public
-        */
-        public width: number;
-
-        /**
-        * [CURRENTLY NOT IN USE]
-        * @property height
-        * @type Number
-        * @public
-        */
-        public height: number;
-
-        /**
-        * Sets the coordinates of the points based on the parameters passed.
-        * @method setTo
-        * @param {Number} x1
-        * @param {Number} y1
-        * @param {Number} [x2=0]
-        * @param {Number} [y2=0]
-        * @param {Number} [width=0]
-        * @param {Number} [height=0]
-        * @public
-        */
-        public setTo(x1: number, y1: number, x2: number = 0, y2: number = 0, width: number = 0, height: number = 0) {
-
-            this.x = x1;
-            this.y = y1;
-
-            this.x1 = x1;
-            this.y1 = y1;
-
-            this.x2 = x2;
-            this.y2 = y2;
-
-            this.width = width;
-            this.height = height;
-
-        }
-
-    }
+	/**
+	* A Lightweight object to hold the results of an Intersection. 
+	* Used in combination with the STATIC methods on the Intersect class.
+	*
+	* If you are using the Intersect methods a lot, you may want to consider
+	* creating a IntersectResult class a reusing it (by passing it to the methods on the Intersect class)
+	* instead of having new IntersectResults created.
+	* 
+	*
+	* @class IntersectResult
+	* @namespace Kiwi.Geom
+	* @constructor
+	*/
+	export class IntersectResult {
+
+		/**
+		* The type of object this is.
+		* @method objType
+		* @return {String} &quot;IntersectResult&quot;
+		* @public
+		*/
+		public objType() {
+			return &quot;IntersectResult&quot;;
+		}
+
+		/**
+		* Holds the result of an Intersection between two geometric items.
+		* TRUE means an Intersection did occur and FALSE means not. 
+		* @property result
+		* @type boolean
+		* @default false
+		* @public
+		*/
+		public result: boolean = false;
+
+		/**
+		* Holds the x coordinate of the point in which the Intersection occured.
+		* Note: This is only set in the case the TWO geometric items are either Lines or Rays (Line like in function)
+		* and a Intersection occured.
+		* @property x
+		* @type Number
+		* @public
+		*/
+		public x: number;
+
+		/**
+		* Holds the y coordinate of the point in which the Intersection occured.
+		* Note: This is only set in the case the TWO geometric items are either Lines or Rays (Line like in function)
+		* and a Intersection occured.
+		* @property y
+		* @type Number
+		* @public
+		*/
+		public y: number;
+
+		/**
+		* [CURRENTLY NOT IN USE]
+		* @property x1
+		* @type Number
+		* @public
+		*/
+		public x1: number;
+
+		/**
+		* [CURRENTLY NOT IN USE]
+		* @property y1
+		* @type Number
+		* @public
+		*/
+		public y1: number;
+
+		/**
+		* [CURRENTLY NOT IN USE]
+		* @property x2
+		* @type Number
+		* @public
+		*/
+		public x2: number;
+
+		/**
+		* [CURRENTLY NOT IN USE]
+		* @property y2
+		* @type Number
+		* @public
+		*/
+		public y2: number;
+
+		/**
+		* [CURRENTLY NOT IN USE]
+		* @property width
+		* @type Number
+		* @public
+		*/
+		public width: number;
+
+		/**
+		* [CURRENTLY NOT IN USE]
+		* @property height
+		* @type Number
+		* @public
+		*/
+		public height: number;
+
+		/**
+		* Sets the coordinates of the points based on the parameters passed.
+		* @method setTo
+		* @param {Number} x1
+		* @param {Number} y1
+		* @param {Number} [x2=0]
+		* @param {Number} [y2=0]
+		* @param {Number} [width=0]
+		* @param {Number} [height=0]
+		* @public
+		*/
+		public setTo(x1: number, y1: number, x2: number = 0, y2: number = 0, width: number = 0, height: number = 0) {
+
+			this.x = x1;
+			this.y = y1;
+
+			this.x1 = x1;
+			this.y1 = y1;
+
+			this.x2 = x2;
+			this.y2 = y2;
+
+			this.width = width;
+			this.height = height;
+
+		}
+
+	}
 
 }
 
diff --git a/docs/files/src_geom_Line.ts.html b/docs/files/src_geom_Line.ts.html
index f7bcf1b..5f908f4 100644
--- a/docs/files/src_geom_Line.ts.html
+++ b/docs/files/src_geom_Line.ts.html
@@ -372,317 +372,318 @@ <h1 class="file-heading">File: src/geom/Line.ts</h1>
 
 module Kiwi.Geom {
 
-    /**
-    * A Line object has two meanings depending on the situation you need. 
-    * Either an infinte line through space (this is the usual meaning of a Line) 
-    * OR it can be a Line Segment which just exists between the TWO points you specify. 
-    *
-    * @class Line
-    * @namespace Kiwi.Geom
-    * @constructor
-    * @param [x1=0] {Number} Starting location of the line on the x-axis.
-    * @param [y1=0] {Number} Starting location of the line on the y-axis.
-    * @param [x2=0] {Number} End location of the line on the x-axis.
-    * @param [y2=0] {Number} End location of the line on the y-axis.
-    * @return {Kiwi.Geom.Line} This Object
-    *
-    */
-    export class Line {
-         
-        constructor(x1: number = 0, y1: number = 0, x2: number = 0, y2: number = 0) {
-
-            this.setTo(x1, y1, x2, y2);
-
-        }
-
-        /**
-        * Returns the type of this object
-        * @method objType
-        * @return {string} &quot;Line&quot;
-        * @public
-        */
-        public objType() {
-            return &quot;Line&quot;;
-        }
-
-        /**
-        * X position of first point on the line.
-        * @property x1
-        * @type Number
-        * @public
-        */
-        public x1: number = 0;
-
-        /**
-        * Y position of first point on the line.
-        * @property y1
-        * @type Number
-        * @public
-        */
-        public y1: number = 0;
-
-        /**
-        * X position of second point.
-        * @property x2
-        * @type Number
-        * @public
-        */
-        public x2: number = 0;
-
-        /**
-        * Y position of second point.
-        * @property y2
-        * @type Number
-        * @public
-        */
-        public y2: number = 0;
-
-        /**
-        * Makes a clone of this Line. 
-        * The clone can either be a new Line Object, 
-        * Otherwise you can pass a existing Line Object that you want to be a clone of this one.
-        *
-        * @method clone
-        * @param [output=Line] {Kiwi.Geom.Line}
-        * @return {Kiwi.Geom.Line}
-        * @public
-        */
-        public clone(output: Line = new Line): Line {
-
-            return output.setTo(this.x1, this.y1, this.x2, this.y2);
-
-        }
-
-        /**
-        * Make this Line a copy of another passed Line.
-        * @method copyFrom 
-        * @param source {Kiwi.Geom.Line} source
-        * @return {Kiwi.Geom.Line}
-        * @public
-        */
-        public copyFrom(source: Line): Line {
-
-            return this.setTo(source.x1, source.y1, source.x2, source.y2);
-
-        }
-
-        /**
-        * Make another passed Line a copy of this one.
-        * @method copyTo
-        * @param target {Kiwi.Geom.Line} target
-        * @return {Kiwi.Geom.Line}
-        * @public
-        */
-        public copyTo(target: Line): Line {
-
-            return target.copyFrom(this);
-
-        }
-
-        /**
-        * Used to set all components on the line.
-        * @method setTo
-        * @param [x1=0]{Number} X component of first point.
-        * @param [y1=0]{Number} Y component of first point.
-        * @param [x2=0]{Number} X component of second point.
-        * @param [y2=0]{Number} Y component of second point.
-        * @return {Kiwi.Geom.Line}
-        * @public
-        */
-        public setTo(x1: number = 0, y1: number = 0, x2: number = 0, y2: number = 0): Line {
-
-            this.x1 = x1;
-            this.y1 = y1;
-            this.x2 = x2;
-            this.y2 = y2;
-
-            return this;
-
-        }
-
-        /**
-        * Get the length of the Line as a Line Segment.
-        * @property length
-        * @type number
-        * @readOnly
-        * @public
-        */
-        public get length(): number {
-
-            return Math.sqrt((this.x2 - this.x1) * (this.x2 - this.x1) + (this.y2 - this.y1) * (this.y2 - this.y1));
-
-        }
-
-        /**
-        * Get the y of a point on the line for a given x.
-        * @method getY
-        * @param x {Number} 
-        * @return {Number}
-        * @public
-        */
-        public getY(x: number): number {
-            if (this.x1 == this.x2)
-                return null;
-            else
-            return this.slope * x + this.yIntercept;
-
-        }
-
-        /**
-        * Get the angle of the line.
-        * @property angle 
-        * @type Number
-        * @readOnly
-        * @public
-        */
-        public get angle(): number {
-
-            return Math.atan2(this.y2 - this.y1, this.x2 - this.x1);
-
-        }
-
-        /**
-        * Get the slope of the line (y/x).
-        * @property slope
-        * @type Number
-        * @readOnly
-        * @public
-        */
-        public get slope(): number {
-
-            return (this.y2 - this.y1) / (this.x2 - this.x1);
-
-        }
-
-        /**
-        * Get the perpendicular slope of the line (x/y).
-        * @propery perpSlope
-        * @type Number
-        * @readOnly
-        * @public
-        */
-        public get perpSlope(): number {
-
-            return -((this.x2 - this.x1) / (this.y2 - this.y1));
-
-        }
-
-        /**
-        * Get the y intercept for the line.
-        * @property yIntercept
-        * @type Number
-        * @readOnly
-        * @public
-        */
-        public get yIntercept(): number {
-
-            return (this.y1 - this.slope * this.x1);
-
-        }
-
-        /**
-        * Check if a point is on the line.
-        * @method isPointOnLine
-        * @param x {Number}
-        * @param y {Number}
-        * @return {boolean}
-        * @public
-        */
-        public isPointOnLine(x: number, y: number): boolean {
-
-            if ((x - this.x1) * (this.y2 - this.y1) === (this.x2 - this.x1) * (y - this.y1))
-            {
-                return true;
-            }
-            else
-            {
-                return false;
-            }
-
-        }
-
-        /**
-        * Check if the point is both on the line and within the line segment.
-        * @method isPointOnLineSegment
-        * @param x {Number}
-        * @param y {Number}
-        * @return {boolean}
-        * @public
-        */
-        public isPointOnLineSegment(x: number, y: number): boolean {
-
-            var xMin = Math.min(this.x1, this.x2);
-            var xMax = Math.max(this.x1, this.x2);
-            var yMin = Math.min(this.y1, this.y2);
-            var yMax = Math.max(this.y1, this.y2);
-
-            if (this.isPointOnLine(x, y) &amp;&amp; (x &gt;= xMin &amp;&amp; x &lt;= xMax) &amp;&amp; (y &gt;= yMin &amp;&amp; y &lt;= yMax))
-            {
-                return true;
-            }
-            else
-            {
-                return false;
-            }
-
-        }
-
-        /**
-        * Check to see if this Line object intersects at any point with a passed Line.
-        * Note: Both are treated as extending infinately through space.
-        * Functions as an alias for the &#x27;Kiwi.Geom.Intersect.lineToLine&#x27; method.
-        *
-        * @method intersectLineLine
-        * @param line {Kiwi.Geom.Line} The line you want to check for a Intersection with.
-        * @return {Kiwi.Geom.IntersectResult} The Intersect Result containing the collision information.
-        * @public
-        */
-        public intersectLineLine(line): IntersectResult {
-            return Kiwi.Geom.Intersect.lineToLine(this,line);
-        }
-
-        /**
-        * Get a line perpendicular to the line passing through a given point.
-        *
-        * @method perp
-        * @param x {Number} 
-        * @param y {Number} 
-        * @param [output] {Kiwi.Geom.Line} The line object that the result should be output to. Creates a new Line if one is not passed. 
-        * @return {Kiwi.Geom.Line}
-        * @public
-        */
-        public perp(x: number, y: number, output: Line=new Line): Line {
-
-            if (this.y1 === this.y2) {
-                
-                output.setTo(x, y, x, this.y1);
-            }
-
-            var yInt: number = (y - this.perpSlope * x);
-
-            var pt: any = this.intersectLineLine({ x1: x, y1: y, x2: 0, y2: yInt });
-
-            output.setTo(x, y, pt.x, pt.y);
-
-            return output;
-
-        }
-
-        /**
-        * Get a string representation of the line.
-        * @method toString
-        * @return {String}
-        * @public
-        */
-        public toString(): string {
-
-            return &quot;[{Line (x1=&quot; + this.x1 + &quot; y1=&quot; + this.y1 + &quot; x2=&quot; + this.x2 + &quot; y2=&quot; + this.y2 + &quot;)}]&quot;;
-
-        }
-
-    }
+	/**
+	* A Line object has two meanings depending on the situation you need. 
+	* Either an infinte line through space (this is the usual meaning of a Line) 
+	* OR it can be a Line Segment which just exists between the TWO points you specify. 
+	*
+	* @class Line
+	* @namespace Kiwi.Geom
+	* @constructor
+	* @param [x1=0] {Number} Starting location of the line on the x-axis.
+	* @param [y1=0] {Number} Starting location of the line on the y-axis.
+	* @param [x2=0] {Number} End location of the line on the x-axis.
+	* @param [y2=0] {Number} End location of the line on the y-axis.
+	* @return {Kiwi.Geom.Line} This Object
+	*
+	*/
+	export class Line {
+		 
+		constructor(x1: number = 0, y1: number = 0, x2: number = 0, y2: number = 0) {
+
+			this.setTo(x1, y1, x2, y2);
+
+		}
+
+		/**
+		* Returns the type of this object
+		* @method objType
+		* @return {string} &quot;Line&quot;
+		* @public
+		*/
+		public objType() {
+			return &quot;Line&quot;;
+		}
+
+		/**
+		* X position of first point on the line.
+		* @property x1
+		* @type Number
+		* @public
+		*/
+		public x1: number = 0;
+
+		/**
+		* Y position of first point on the line.
+		* @property y1
+		* @type Number
+		* @public
+		*/
+		public y1: number = 0;
+
+		/**
+		* X position of second point.
+		* @property x2
+		* @type Number
+		* @public
+		*/
+		public x2: number = 0;
+
+		/**
+		* Y position of second point.
+		* @property y2
+		* @type Number
+		* @public
+		*/
+		public y2: number = 0;
+
+		/**
+		* Makes a clone of this Line. 
+		* The clone can either be a new Line Object, 
+		* Otherwise you can pass a existing Line Object that you want to be a clone of this one.
+		*
+		* @method clone
+		* @param [output=Line] {Kiwi.Geom.Line}
+		* @return {Kiwi.Geom.Line}
+		* @public
+		*/
+		public clone(output: Line = new Line): Line {
+
+			return output.setTo(this.x1, this.y1, this.x2, this.y2);
+
+		}
+
+		/**
+		* Make this Line a copy of another passed Line.
+		* @method copyFrom 
+		* @param source {Kiwi.Geom.Line} source
+		* @return {Kiwi.Geom.Line}
+		* @public
+		*/
+		public copyFrom(source: Line): Line {
+
+			return this.setTo(source.x1, source.y1, source.x2, source.y2);
+
+		}
+
+		/**
+		* Make another passed Line a copy of this one.
+		* @method copyTo
+		* @param target {Kiwi.Geom.Line} target
+		* @return {Kiwi.Geom.Line}
+		* @public
+		*/
+		public copyTo(target: Line): Line {
+
+			return target.copyFrom(this);
+
+		}
+
+		/**
+		* Used to set all components on the line.
+		* @method setTo
+		* @param [x1=0]{Number} X component of first point.
+		* @param [y1=0]{Number} Y component of first point.
+		* @param [x2=0]{Number} X component of second point.
+		* @param [y2=0]{Number} Y component of second point.
+		* @return {Kiwi.Geom.Line}
+		* @public
+		*/
+		public setTo(x1: number = 0, y1: number = 0, x2: number = 0, y2: number = 0): Line {
+
+			this.x1 = x1;
+			this.y1 = y1;
+			this.x2 = x2;
+			this.y2 = y2;
+
+			return this;
+
+		}
+
+		/**
+		* Get the length of the Line as a Line Segment.
+		* @property length
+		* @type number
+		* @readOnly
+		* @public
+		*/
+		public get length(): number {
+
+			return Math.sqrt((this.x2 - this.x1) * (this.x2 - this.x1) + (this.y2 - this.y1) * (this.y2 - this.y1));
+
+		}
+
+		/**
+		* Get the y of a point on the line for a given x.
+		* @method getY
+		* @param x {Number} 
+		* @return {Number}
+		* @public
+		*/
+		public getY(x: number): number {
+			if (this.x1 == this.x2)
+				return null;
+			else
+			return this.slope * x + this.yIntercept;
+
+		}
+
+		/**
+		* Get the angle of the line.
+		* @property angle 
+		* @type Number
+		* @readOnly
+		* @public
+		*/
+		public get angle(): number {
+
+			return Math.atan2(this.y2 - this.y1, this.x2 - this.x1);
+
+		}
+
+		/**
+		* Get the slope of the line (y/x).
+		* @property slope
+		* @type Number
+		* @readOnly
+		* @public
+		*/
+		public get slope(): number {
+
+			return (this.y2 - this.y1) / (this.x2 - this.x1);
+
+		}
+
+		/**
+		* Get the perpendicular slope of the line (x/y).
+		* @propery perpSlope
+		* @type Number
+		* @readOnly
+		* @public
+		*/
+		public get perpSlope(): number {
+
+			return -((this.x2 - this.x1) / (this.y2 - this.y1));
+
+		}
+
+		/**
+		* Get the y intercept for the line.
+		* @property yIntercept
+		* @type Number
+		* @readOnly
+		* @public
+		*/
+		public get yIntercept(): number {
+
+			return (this.y1 - this.slope * this.x1);
+
+		}
+
+		/**
+		* Check if a point is on the line.
+		* @method isPointOnLine
+		* @param x {Number}
+		* @param y {Number}
+		* @return {boolean}
+		* @public
+		*/
+		public isPointOnLine(x: number, y: number): boolean {
+
+			if ((x - this.x1) * (this.y2 - this.y1) === (this.x2 - this.x1) * (y - this.y1))
+			{
+				return true;
+			}
+			else
+			{
+				return false;
+			}
+
+		}
+
+		/**
+		* Check if the point is both on the line and within the line segment.
+		* @method isPointOnLineSegment
+		* @param x {Number}
+		* @param y {Number}
+		* @return {boolean}
+		* @public
+		*/
+		public isPointOnLineSegment(x: number, y: number): boolean {
+
+			var xMin = Math.min(this.x1, this.x2);
+			var xMax = Math.max(this.x1, this.x2);
+			var yMin = Math.min(this.y1, this.y2);
+			var yMax = Math.max(this.y1, this.y2);
+
+			if (this.isPointOnLine(x, y) &amp;&amp; (x &gt;= xMin &amp;&amp; x &lt;= xMax) &amp;&amp; (y &gt;= yMin &amp;&amp; y &lt;= yMax))
+			{
+				return true;
+			}
+			else
+			{
+				return false;
+			}
+
+		}
+
+		/**
+		* Check to see if this Line object intersects at any point with a passed Line.
+		* Note: Both are treated as extending infinately through space.
+		* Functions as an alias for the &#x27;Kiwi.Geom.Intersect.lineToLine&#x27; method.
+		*
+		* @method intersectLineLine
+		* @param line {Kiwi.Geom.Line} The line you want to check for a Intersection with.
+		* @return {Kiwi.Geom.IntersectResult} The Intersect Result containing the collision information.
+		* @public
+		*/
+		public intersectLineLine(line): IntersectResult {
+			return Kiwi.Geom.Intersect.lineToLine(this,line);
+		}
+
+		/**
+		* Get a line perpendicular to the line passing through a given point.
+		*
+		* @method perp
+		* @param x {Number} 
+		* @param y {Number} 
+		* @param [output] {Kiwi.Geom.Line} The line object that the result should be output to. Creates a new Line if one is not passed. 
+		* @return {Kiwi.Geom.Line}
+		* @public
+		*/
+		public perp(x: number, y: number, output: Line=new Line): Line {
+
+			if (this.y1 === this.y2) {
+				
+				output.setTo(x, y, x, this.y1);
+			}
+
+			var yInt: number = (y - this.perpSlope * x);
+
+			var pt: any = this.intersectLineLine({ x1: x, y1: y, x2: 0, y2: yInt });
+
+			output.setTo(x, y, pt.x, pt.y);
+
+			return output;
+
+		}
+
+		/**
+		* Get a string representation of the line.
+		* @method toString
+		* @return {String}
+		* @public
+		*/
+		public toString(): string {
+
+			return &quot;[{Line (x1=&quot; + this.x1 + &quot; y1=&quot; + this.y1 + &quot; x2=&quot; + this.x2 + &quot; y2=&quot; + this.y2 + &quot;)}]&quot;;
+
+		}
+
+	}
 
 }
+
     </pre>
 </div>
 
diff --git a/docs/files/src_geom_Matrix.ts.html b/docs/files/src_geom_Matrix.ts.html
index fb0b024..e5130af 100644
--- a/docs/files/src_geom_Matrix.ts.html
+++ b/docs/files/src_geom_Matrix.ts.html
@@ -372,474 +372,475 @@ <h1 class="file-heading">File: src/geom/Matrix.ts</h1>
 
 module Kiwi.Geom {
 
-    /**
-    * Represents a 2d transformation matrix. This can be used to map points between different coordinate spaces. Matrices are used
+	/**
+	* Represents a 2d transformation matrix. This can be used to map points between different coordinate spaces. Matrices are used
 	* by Transform objects to represent translation, scale and rotation transformations, and to determine where objects are in world space or camera space.
 	* Objects such as entities and groups may be nested, and their associated transforms may represent how they are scaled, translated and rotated relative to a parent
-    * transform.
-    * By concatenating an object&#x27;s transformation matrix with its ancestors matrices, it is possible to determine the absolute position of the object in world space.
-    * See http://en.wikipedia.org/wiki/Transformation_matrix#Examples_in_2D_graphics for an in depth discussion of 2d tranformation matrices.
-    * 
-    * @class Matrix
-    * @namespace Kiwi.Geom
-    * @constructor
-    * @param [a=1] {Number}  position 0,0 of the matrix, affects scaling and rotation.
-    * @param [b=0] {Number}  position 0,1 of the matrix, affects scaling and rotation.
-    * @param [c=0] {Number}  position 1,0 of the matrix, affects scaling and rotation.
-    * @param [d=1] {Number}  position 1,1 of the matrix, affects scaling and rotation.
-    * @param [tx=0] {Number}  position 2,0 of the matrix, affects translation on x axis.
-    * @param [ty=0] {Number}  position 2,1 of the matrix, affects translation on y axis.
-    * @return (Object) This object.
-    * 
-    */
-    export class Matrix {
-         
-        constructor(a: number = 1, b: number = 0, c: number = 0, d: number = 1, tx: number = 0, ty: number = 0) {
-
-            this.setTo(a, b, c, d, tx, ty);
-
-        }
-
-        /**
-        * The type of object this is.
-        * @method objType
-        * @return {String} &quot;Matrix&quot;
-        * @public
-        */ 
-        public objType() {
-            return &quot;Matrix&quot;;
-        }
-
-        /**
-        * Position 0,0 of the matrix, affects scaling and rotation
-        * @property a
-        * @type Number
-        * @default 1
-        * @public
-        */
-        public a: number = 1;
-
-        /**
-        * Position 0,1 of the matrix, affects scaling and rotation.
-        * @property b
-        * @type Number
-        * @default 0
-        * @public
-        */
-        public b: number = 0;
-
-        /**
-        * Position 1,0 of the matrix, affects scaling and rotation.
-        * @property c
-        * @type Number
-        * @default 0
-        * @public
-        */
-        public c: number = 0;
-
-        /**
-        * Position 1,1 of the matrix, affects scaling and rotation.
-        * @property d
-        * @type Number
-        * @default 1
-        * @public
-        */
-        public d: number = 1;
-
-        /**
-        * Position 2,0 of the matrix, affects translation on x axis.
-        * @property tx
-        * @type Number
-        * @default 0
-        * @public
-        */
-        public tx: number = 0;
-
-        /**
-        * Position 2,1 of the matrix, affects translation on y axis.
-        * @property ty
-        * @type Number
-        * @default 0
-        * @public
-        */
-        public ty: number = 0;
-
-        /**
-        * Set all matrix values 
-        * @method setTo
-        * @param [a=1] {Number} position 0,0 of the matrix, affects scaling and rotation.
-        * @param [b=0] {Number} position 0,1 of the matrix, affects scaling and rotation.
-        * @param [c=0] {Number} position 1,0 of the matrix, affects scaling and rotation.
-        * @param [d=1] {Number} position 1,1 of the matrix, affects scaling and rotation.
-        * @param [tx=0] {Number} position 2,0 of the matrix, affects translation on x axis.
-        * @param [ty=0] {Number} position 2,1 of the matrix, affects translation on y axis.
-        * @return {Kiwi.Geom.Matrix} This object.
-        * @public
-        */
-        public setTo(a: number = 1, b: number = 0, c: number = 0, d: number = 1, tx: number = 0, ty: number = 0): Matrix {
-
-            this.a = a;
-            this.b = b;
-            this.c = c;
-            this.d = d;
-            this.tx = tx;
-            this.ty = ty;
-
-            return this;
-
-        }
-
-        /**
-	    * Set matrix values from transform values
-	    * @method setFromTransform
-	    * @param tx {Number} Translation on x axis.
-	    * @param ty {Number} Translation on y axis.
-	    * @param scaleX {Number} scaleX. Scale on x axis.
-	    * @param scaleY {Number} scaleY. Scale on y axis.
-	    * @param rotation {Number} rotation. 
-        * @return {Kiwi.Geom.Matrix} This object.
-        * @public
-	    */
-          public setFromTransform(tx: number, ty: number, scaleX: number, scaleY: number, rotation: number) {
-            this.identity();
-            var cos = Math.cos(rotation);
-            var sin = Math.sin(rotation);
-
-            this.append(cos * scaleX, sin * scaleX, -sin * scaleY, cos * scaleY, tx, ty);
-
-            return this;
-        }
-
-        /**
-	    * Set matrix values from transform values, with rotation point data included
-	    * @method setFromOffsetTransform
-	    * @param tx {Number} tx. Translation on x axis.
-	    * @param ty {Number} ty. Translation on y axis.
-	    * @param scaleX {Number} scaleX. Scale on x axis.
-	    * @param scaleY {Number} scaleY. Scale on y axis.
-	    * @param rotation {Number} rotation. 
-	    * @param rotPointX {Number} Rotation point offset on x axis.
-	    * @param rotPointY {Number} Rotation point offset on y axis.
-        * @return {Kiwi.Geom.Matrix} This object.
-        * @public
-        * @since 1.0.1
-	    */
-          public setFromOffsetTransform(tx: number, ty: number, scaleX: number, scaleY: number, rotation: number, rotPointX: number, rotPointY: number) {
-            this.identity();
-            var cos = Math.cos(rotation);
-            var sin = Math.sin(rotation);
-
-            this.append(cos * scaleX, sin * scaleX, -sin * scaleY, cos * scaleY, tx + rotPointX, ty + rotPointY);
-
-            return this;
-        }
-
-        /**
-        * Prepend values to this matrix, paramters supplied individually.
-        * @method prepend
-        * @param [a=1]{Number} position 0,0 of the matrix, affects scaling and rotation.
-        * @param [b=0]{Number} position 0,1 of the matrix, affects scaling and rotation.
-        * @param [c=0]{Number} position 1,0 of the matrix, affects scaling and rotation.
-        * @param [d=0]{Number} position 1,1 of the matrix, affects scaling and rotation.
-        * @param [tx=0]{Number} position 2,0 of the matrix, affects translation on x axis.
-        * @param [ty=0]{Number} position 2,1 of the matrix, affects translation on y axis.
-        * @return {Kiwi.Geom.Matrix} This object.
-        * @public
-        */
-        public prepend(a: number = 1, b: number = 0, c: number = 0, d: number = 1, tx: number = 0, ty: number = 0): Matrix {
-            var tx1 = this.tx;
-            var a1 = this.a;
-            var c1 = this.c;
-
-            this.a = a1 * a + this.b * c;
-            this.b = a1 * b + this.b * d;
-            this.c = c1 * a + this.d * c;
-            this.d = c1 * b + this.d * d;
-
-            this.tx = tx1 * a + this.ty * c + tx;
-            this.ty = tx1 * b + this.ty * d + ty;
-            return this;
-
-        }
-
-        /**
-        * Prepend a matrix to this matrix.
-        * @method prependMatrix
-        * @param m {Kiwi.Geom.Matrix} The matrix to prepend.
-        * @return {Kiwi.Geom.Matrix} This object.
-        * @public
-        */
-        public prependMatrix(m: Matrix): Matrix {
-            var tx1 = this.tx;
-            var a1 = this.a;
-            var c1 = this.c;
-
-            this.a = a1 * m.a + this.b * m.c;
-            this.b = a1 * m.b + this.b * m.d;
-            this.c = c1 * m.a + this.d * m.c;
-            this.d = c1 * m.b + this.d * m.d;
-
-            this.tx = tx1 * m.a + this.ty * m.c + m.tx;
-            this.ty = tx1 * m.b + this.ty * m.d + m.ty;
-            return this;
-
-        }
-
-        /**
-	    * Append values to this matrix, parameters supplied individually.
-	    * @method append
-	    * @param [a=1]{Number} position 0,0 of the matrix, affects scaling and rotation.
-	    * @param [b=0]{Number} position 0,1 of the matrix, affects scaling and rotation.
-	    * @param [c=0]{Number} position 1,0 of the matrix, affects scaling and rotation.
-	    * @param [d=1]{Number} position 1,1 of the matrix, affects scaling and rotation.
-	    * @param [tx=0]{Number} position 2,0 of the matrix, affects translation on x axis.
-	    * @param [ty=0]{Number} position 2,1 of the matrix, affects translation on y axis.
-        * @return {Kiwi.Geom.Matrix} This object.
-        * @public
-	    */
-        public append(a: number = 1, b: number = 0, c: number = 0, d: number = 1, tx: number = 0, ty: number = 0): Matrix {
-            var a1 = this.a;
-            var b1 = this.b;
-            var c1 = this.c;
-            var d1 = this.d;
-
-            this.a = a * a1 + b * c1;
-            this.b = a * b1 + b * d1;
-            this.c = c * a1 + d * c1;
-            this.d = c * b1 + d * d1;
-            this.tx = tx * a1 + ty * c1 + this.tx;
-            this.ty = tx * b1 + ty * d1 + this.ty;
-            return this;
-        }
-
-        /**
-        * Append a matrix to this matrix.
-        * @method appendMatrix
-        * @param m {Kiwi.Geom.Matrix} The matrix to append.
-        * @return {Kiwi.Geom.Matrix} This object.
-        * @public
-        */
-        public appendMatrix(m: Matrix): Matrix {
-            var a1 = this.a;
-            var b1 = this.b;
-            var c1 = this.c;
-            var d1 = this.d;
-
-            this.a = m.a * a1 + m.b * c1;
-            this.b = m.a * b1 + m.b * d1;
-            this.c = m.c * a1 + m.d * c1;
-            this.d = m.c * b1 + m.d * d1;
-            this.tx = m.tx * a1 + m.ty * c1 + this.tx;
-            this.ty = m.tx * b1 + m.ty * d1 + this.ty;
-            return this;
-        }
-
-        /**
-        * Set the tx and ty elements of the matrix.
-        * @method setPosition
-        * @param x {Number} Translation on x axis.
-        * @param y {Number} Translation on y axis.
-        * @return {Kiwi.Geom.Matrix} This object.
-        * @public
-        */
-        public setPosition(x: number, y: number): Matrix {
-            this.tx = x;
-            this.ty = y;
-            return this;
-        }
-
-        /**
-	    * Set the tx and ty elements of the matrix from an object with x and y properties.
-	    * @method setPositionPoint
-	    * @param p {Number} The object from which to copy the x and y properties from.
-        * @return {Kiwi.Geom.Matrix} This object.
-        * @public
-	    */
-        public setPositionPoint(p: any): Matrix {
-            this.tx = p.x;
-            this.ty = p.y;
-            return this
-        }
-
-        /**
-	    * Get the x and y position of the matrix as an object with x and y properties
-	    * @method getPosition
-	    * @return {Kiwi.Geom.Point} An object constructed from a literal with x and y properties.
-        * @public
-	    */
-        public getPosition(output: Kiwi.Geom.Point = new Kiwi.Geom.Point): Kiwi.Geom.Point {
-            return output.setTo(this.tx, this.ty);
-        }
-
-        /**
-	    * Set the matrix to the identity matrix - when appending or prepending this matrix to another there will be no change in the resulting matrix
-	    * @method identity
-        * @return {Kiwi.Geom.Matrix} This object.
-        * @public
-	    */
-        public identity(): Matrix {
-            this.a = 1;
-            this.b = 0;
-            this.c = 0;
-            this.d = 1;
-            this.tx = 0;
-            this.ty = 0;
-            return this;
-        }
-
-        /**
-	    * Rotate the matrix by &quot;radians&quot; degrees
-	    * @method rotate
-	    * @param radians {Number} The angle (in radians) to rotate this matrix by. 
-        * @return {Kiwi.Geom.Matrix} This object.
-        * @public
-        */
-        public rotate(radians: number): Matrix {
-            var cos = Math.cos(radians);
-            var sin = Math.sin(radians);
-
-            var a1 = this.a;
-            var c1 = this.c;
-            var tx1 = this.tx;
-
-            this.a = a1 * cos - this.b * sin;
-            this.b = a1 * sin + this.b * cos;
-            this.c = c1 * cos - this.d * sin;
-            this.d = c1 * sin + this.d * cos;
-            this.tx = tx1 * cos - this.ty * sin;
-            this.ty = tx1 * sin + this.ty * cos;
-            return this;
-
-        }
-
-        /**
-	    * Translate the matrix by the amount passed.
-        * 
-	    * @method translate
-	    * @param tx {Number} The amount to translate on the x axis.
-	    * @param ty {Number} The amount to translate on the y axis.
-        * @return {Kiwi.Geom.Matrix} This object.
-        * @public
-	    */
-        public translate(tx: number, ty: number): Matrix {
-            this.tx += tx;
-            this.ty += ty;
-            return this;
-        }
-
-        /**
-	    * Scales the matrix by the amount passed.
-        *
-	    * @method scale
-	    * @param scaleX {Number} The amount to scale on the x axis.
-	    * @param scaleY {Number} The amount to scale on the y axis.
-        * @return {Kiwi.Geom.Matrix} This object.
-        * @public
-	    */
-        public scale(scaleX: number, scaleY: number): Matrix {
-            this.a *= scaleX;
-            this.d *= scaleY;
-            return this;
-        }
-
-        /**
-	    * Apply this matrix to a an object with x and y properties representing a point and return the transformed point.
-	    * @method transformPoint
-	    * @param pt {Object} The point to be translated.
-        * @return {Kiwi.Geom.Matrix} This object.
-        * @public
-	    */
-        public transformPoint(pt: any) {
-            var x = pt.x;
-            var y = pt.y
-            pt.x = this.a * x + this.c * y + this.tx;
-            pt.y = this.b * x + this.d * y + this.ty;
-            return pt;
-        }
-
-        /**
-	    * Invert this matrix so that it represents the opposite of its orginal tranformaation.
-	    * @method invert
-        * @return {Kiwi.Geom.Matrix} This object.
-        * @public
-	    */
-        public invert(): Matrix {
-            var a1 = this.a;
-            var b1 = this.b;
-            var c1 = this.c;
-            var d1 = this.d;
-            var tx1 = this.tx;
-            var n = a1 * d1 - b1 * c1;
-
-            this.a = d1 / n;
-            this.b = -b1 / n;
-            this.c = -c1 / n;
-            this.d = a1 / n;
-            this.tx = (c1 * this.ty - d1 * tx1) / n;
-            this.ty = -(a1 * this.ty - b1 * tx1) / n;
-            return this;
-        }
-
-        /**
-	    * Copy another matrix to this matrix.
-	    * @method copyFrom
-	    * @param m {Kiwi.Geom.Matrix} The matrixto be copied from.
-        * @return {Kiwi.Geom.Matrix} This object.
-        * @public
-	    */
-        public copyFrom(m: Matrix): Matrix {
-            this.a = m.a;
-            this.b = m.b;
-            this.c = m.c;
-            this.d = m.d;
-            this.tx = m.tx;
-            this.ty = m.ty;
-
-            return this;
-        }
-
-        /**
-        * Copy this matrix to another matrix.
-        * @method copyTo
-        * @param m {Kiwi.Geom.Matrix} The matrix to copy to.
-        * @return {Kiwi.Geom.Matrix} This object.
-        * @public
-        */
-        public copyTo(m: Matrix): Matrix {
-            m.a = this.a;
-            m.b = this.b;
-            m.c = this.c;
-            m.d = this.d;
-            m.tx = this.tx;
-            m.ty = this.ty;
-            return this;
-        }
-
-        /**
-	    * Clone this matrix and returns a new Matrix object.
-	    * @method clone
-        * @return {Kiwi.Geom.Matrix} 
-        * @public
-	    */
-        public clone(): Matrix {
-            return new Kiwi.Geom.Matrix(this.a, this.b, this.c, this.d, this.tx, this.ty);
-        }
-
-        /**
-	    * Returns a string representation of this object.
-	    * @method toString
-	    * @return {string} A string representation of the instance.
-        * @public
-	    */
-        public get toString(): string {
-
-            return &quot;[{Matrix (a=&quot; + this.a + &quot; b=&quot; + this.b + &quot; c=&quot; + this.c + &quot; d=&quot; + this.d + &quot; tx=&quot; + this.tx + &quot; ty=&quot; + this.ty + &quot;)}]&quot;;
-
-        }
-
-    }
+	* transform.
+	* By concatenating an object&#x27;s transformation matrix with its ancestors matrices, it is possible to determine the absolute position of the object in world space.
+	* See http://en.wikipedia.org/wiki/Transformation_matrix#Examples_in_2D_graphics for an in depth discussion of 2d tranformation matrices.
+	* 
+	* @class Matrix
+	* @namespace Kiwi.Geom
+	* @constructor
+	* @param [a=1] {Number}  position 0,0 of the matrix, affects scaling and rotation.
+	* @param [b=0] {Number}  position 0,1 of the matrix, affects scaling and rotation.
+	* @param [c=0] {Number}  position 1,0 of the matrix, affects scaling and rotation.
+	* @param [d=1] {Number}  position 1,1 of the matrix, affects scaling and rotation.
+	* @param [tx=0] {Number}  position 2,0 of the matrix, affects translation on x axis.
+	* @param [ty=0] {Number}  position 2,1 of the matrix, affects translation on y axis.
+	* @return (Object) This object.
+	* 
+	*/
+	export class Matrix {
+
+		constructor(a: number = 1, b: number = 0, c: number = 0, d: number = 1, tx: number = 0, ty: number = 0) {
+
+			this.setTo(a, b, c, d, tx, ty);
+
+		}
+
+		/**
+		* The type of object this is.
+		* @method objType
+		* @return {String} &quot;Matrix&quot;
+		* @public
+		*/ 
+		public objType() {
+			return &quot;Matrix&quot;;
+		}
+
+		/**
+		* Position 0,0 of the matrix, affects scaling and rotation
+		* @property a
+		* @type Number
+		* @default 1
+		* @public
+		*/
+		public a: number = 1;
+
+		/**
+		* Position 0,1 of the matrix, affects scaling and rotation.
+		* @property b
+		* @type Number
+		* @default 0
+		* @public
+		*/
+		public b: number = 0;
+
+		/**
+		* Position 1,0 of the matrix, affects scaling and rotation.
+		* @property c
+		* @type Number
+		* @default 0
+		* @public
+		*/
+		public c: number = 0;
+
+		/**
+		* Position 1,1 of the matrix, affects scaling and rotation.
+		* @property d
+		* @type Number
+		* @default 1
+		* @public
+		*/
+		public d: number = 1;
+
+		/**
+		* Position 2,0 of the matrix, affects translation on x axis.
+		* @property tx
+		* @type Number
+		* @default 0
+		* @public
+		*/
+		public tx: number = 0;
+
+		/**
+		* Position 2,1 of the matrix, affects translation on y axis.
+		* @property ty
+		* @type Number
+		* @default 0
+		* @public
+		*/
+		public ty: number = 0;
+
+		/**
+		* Set all matrix values 
+		* @method setTo
+		* @param [a=1] {Number} position 0,0 of the matrix, affects scaling and rotation.
+		* @param [b=0] {Number} position 0,1 of the matrix, affects scaling and rotation.
+		* @param [c=0] {Number} position 1,0 of the matrix, affects scaling and rotation.
+		* @param [d=1] {Number} position 1,1 of the matrix, affects scaling and rotation.
+		* @param [tx=0] {Number} position 2,0 of the matrix, affects translation on x axis.
+		* @param [ty=0] {Number} position 2,1 of the matrix, affects translation on y axis.
+		* @return {Kiwi.Geom.Matrix} This object.
+		* @public
+		*/
+		public setTo(a: number = 1, b: number = 0, c: number = 0, d: number = 1, tx: number = 0, ty: number = 0): Matrix {
+
+			this.a = a;
+			this.b = b;
+			this.c = c;
+			this.d = d;
+			this.tx = tx;
+			this.ty = ty;
+
+			return this;
+
+		}
+
+		/**
+		* Set matrix values from transform values
+		* @method setFromTransform
+		* @param tx {Number} Translation on x axis.
+		* @param ty {Number} Translation on y axis.
+		* @param scaleX {Number} scaleX. Scale on x axis.
+		* @param scaleY {Number} scaleY. Scale on y axis.
+		* @param rotation {Number} rotation. 
+		* @return {Kiwi.Geom.Matrix} This object.
+		* @public
+		*/
+		  public setFromTransform(tx: number, ty: number, scaleX: number, scaleY: number, rotation: number) {
+			this.identity();
+			var cos = Math.cos(rotation);
+			var sin = Math.sin(rotation);
+
+			this.append(cos * scaleX, sin * scaleX, -sin * scaleY, cos * scaleY, tx, ty);
+
+			return this;
+		}
+
+		/**
+		* Set matrix values from transform values, with rotation point data included
+		* @method setFromOffsetTransform
+		* @param tx {Number} tx. Translation on x axis.
+		* @param ty {Number} ty. Translation on y axis.
+		* @param scaleX {Number} scaleX. Scale on x axis.
+		* @param scaleY {Number} scaleY. Scale on y axis.
+		* @param rotation {Number} rotation. 
+		* @param rotPointX {Number} Rotation point offset on x axis.
+		* @param rotPointY {Number} Rotation point offset on y axis.
+		* @return {Kiwi.Geom.Matrix} This object.
+		* @public
+		* @since 1.0.1
+		*/
+		  public setFromOffsetTransform(tx: number, ty: number, scaleX: number, scaleY: number, rotation: number, rotPointX: number, rotPointY: number) {
+			this.identity();
+			var cos = Math.cos(rotation);
+			var sin = Math.sin(rotation);
+
+			this.append(cos * scaleX, sin * scaleX, -sin * scaleY, cos * scaleY, tx + rotPointX, ty + rotPointY);
+
+			return this;
+		}
+
+		/**
+		* Prepend values to this matrix, paramters supplied individually.
+		* @method prepend
+		* @param [a=1]{Number} position 0,0 of the matrix, affects scaling and rotation.
+		* @param [b=0]{Number} position 0,1 of the matrix, affects scaling and rotation.
+		* @param [c=0]{Number} position 1,0 of the matrix, affects scaling and rotation.
+		* @param [d=0]{Number} position 1,1 of the matrix, affects scaling and rotation.
+		* @param [tx=0]{Number} position 2,0 of the matrix, affects translation on x axis.
+		* @param [ty=0]{Number} position 2,1 of the matrix, affects translation on y axis.
+		* @return {Kiwi.Geom.Matrix} This object.
+		* @public
+		*/
+		public prepend(a: number = 1, b: number = 0, c: number = 0, d: number = 1, tx: number = 0, ty: number = 0): Matrix {
+			var tx1 = this.tx;
+			var a1 = this.a;
+			var c1 = this.c;
+
+			this.a = a1 * a + this.b * c;
+			this.b = a1 * b + this.b * d;
+			this.c = c1 * a + this.d * c;
+			this.d = c1 * b + this.d * d;
+
+			this.tx = tx1 * a + this.ty * c + tx;
+			this.ty = tx1 * b + this.ty * d + ty;
+			return this;
+
+		}
+
+		/**
+		* Prepend a matrix to this matrix.
+		* @method prependMatrix
+		* @param m {Kiwi.Geom.Matrix} The matrix to prepend.
+		* @return {Kiwi.Geom.Matrix} This object.
+		* @public
+		*/
+		public prependMatrix(m: Matrix): Matrix {
+			var tx1 = this.tx;
+			var a1 = this.a;
+			var c1 = this.c;
+
+			this.a = a1 * m.a + this.b * m.c;
+			this.b = a1 * m.b + this.b * m.d;
+			this.c = c1 * m.a + this.d * m.c;
+			this.d = c1 * m.b + this.d * m.d;
+
+			this.tx = tx1 * m.a + this.ty * m.c + m.tx;
+			this.ty = tx1 * m.b + this.ty * m.d + m.ty;
+			return this;
+
+		}
+
+		/**
+		* Append values to this matrix, parameters supplied individually.
+		* @method append
+		* @param [a=1]{Number} position 0,0 of the matrix, affects scaling and rotation.
+		* @param [b=0]{Number} position 0,1 of the matrix, affects scaling and rotation.
+		* @param [c=0]{Number} position 1,0 of the matrix, affects scaling and rotation.
+		* @param [d=1]{Number} position 1,1 of the matrix, affects scaling and rotation.
+		* @param [tx=0]{Number} position 2,0 of the matrix, affects translation on x axis.
+		* @param [ty=0]{Number} position 2,1 of the matrix, affects translation on y axis.
+		* @return {Kiwi.Geom.Matrix} This object.
+		* @public
+		*/
+		public append(a: number = 1, b: number = 0, c: number = 0, d: number = 1, tx: number = 0, ty: number = 0): Matrix {
+			var a1 = this.a;
+			var b1 = this.b;
+			var c1 = this.c;
+			var d1 = this.d;
+
+			this.a = a * a1 + b * c1;
+			this.b = a * b1 + b * d1;
+			this.c = c * a1 + d * c1;
+			this.d = c * b1 + d * d1;
+			this.tx = tx * a1 + ty * c1 + this.tx;
+			this.ty = tx * b1 + ty * d1 + this.ty;
+			return this;
+		}
+
+		/**
+		* Append a matrix to this matrix.
+		* @method appendMatrix
+		* @param m {Kiwi.Geom.Matrix} The matrix to append.
+		* @return {Kiwi.Geom.Matrix} This object.
+		* @public
+		*/
+		public appendMatrix(m: Matrix): Matrix {
+			var a1 = this.a;
+			var b1 = this.b;
+			var c1 = this.c;
+			var d1 = this.d;
+
+			this.a = m.a * a1 + m.b * c1;
+			this.b = m.a * b1 + m.b * d1;
+			this.c = m.c * a1 + m.d * c1;
+			this.d = m.c * b1 + m.d * d1;
+			this.tx = m.tx * a1 + m.ty * c1 + this.tx;
+			this.ty = m.tx * b1 + m.ty * d1 + this.ty;
+			return this;
+		}
+
+		/**
+		* Set the tx and ty elements of the matrix.
+		* @method setPosition
+		* @param x {Number} Translation on x axis.
+		* @param y {Number} Translation on y axis.
+		* @return {Kiwi.Geom.Matrix} This object.
+		* @public
+		*/
+		public setPosition(x: number, y: number): Matrix {
+			this.tx = x;
+			this.ty = y;
+			return this;
+		}
+
+		/**
+		* Set the tx and ty elements of the matrix from an object with x and y properties.
+		* @method setPositionPoint
+		* @param p {Number} The object from which to copy the x and y properties from.
+		* @return {Kiwi.Geom.Matrix} This object.
+		* @public
+		*/
+		public setPositionPoint(p: any): Matrix {
+			this.tx = p.x;
+			this.ty = p.y;
+			return this
+		}
+
+		/**
+		* Get the x and y position of the matrix as an object with x and y properties
+		* @method getPosition
+		* @return {Kiwi.Geom.Point} An object constructed from a literal with x and y properties.
+		* @public
+		*/
+		public getPosition(output: Kiwi.Geom.Point = new Kiwi.Geom.Point): Kiwi.Geom.Point {
+			return output.setTo(this.tx, this.ty);
+		}
+
+		/**
+		* Set the matrix to the identity matrix - when appending or prepending this matrix to another there will be no change in the resulting matrix
+		* @method identity
+		* @return {Kiwi.Geom.Matrix} This object.
+		* @public
+		*/
+		public identity(): Matrix {
+			this.a = 1;
+			this.b = 0;
+			this.c = 0;
+			this.d = 1;
+			this.tx = 0;
+			this.ty = 0;
+			return this;
+		}
+
+		/**
+		* Rotate the matrix by &quot;radians&quot; degrees
+		* @method rotate
+		* @param radians {Number} The angle (in radians) to rotate this matrix by. 
+		* @return {Kiwi.Geom.Matrix} This object.
+		* @public
+		*/
+		public rotate(radians: number): Matrix {
+			var cos = Math.cos(radians);
+			var sin = Math.sin(radians);
+
+			var a1 = this.a;
+			var c1 = this.c;
+			var tx1 = this.tx;
+
+			this.a = a1 * cos - this.b * sin;
+			this.b = a1 * sin + this.b * cos;
+			this.c = c1 * cos - this.d * sin;
+			this.d = c1 * sin + this.d * cos;
+			this.tx = tx1 * cos - this.ty * sin;
+			this.ty = tx1 * sin + this.ty * cos;
+			return this;
+
+		}
+
+		/**
+		* Translate the matrix by the amount passed.
+		* 
+		* @method translate
+		* @param tx {Number} The amount to translate on the x axis.
+		* @param ty {Number} The amount to translate on the y axis.
+		* @return {Kiwi.Geom.Matrix} This object.
+		* @public
+		*/
+		public translate(tx: number, ty: number): Matrix {
+			this.tx += tx;
+			this.ty += ty;
+			return this;
+		}
+
+		/**
+		* Scales the matrix by the amount passed.
+		*
+		* @method scale
+		* @param scaleX {Number} The amount to scale on the x axis.
+		* @param scaleY {Number} The amount to scale on the y axis.
+		* @return {Kiwi.Geom.Matrix} This object.
+		* @public
+		*/
+		public scale(scaleX: number, scaleY: number): Matrix {
+			this.a *= scaleX;
+			this.d *= scaleY;
+			return this;
+		}
+
+		/**
+		* Apply this matrix to a an object with x and y properties representing a point and return the transformed point.
+		* @method transformPoint
+		* @param pt {Object} The point to be translated.
+		* @return {Kiwi.Geom.Matrix} This object.
+		* @public
+		*/
+		public transformPoint(pt: any) {
+			var x = pt.x;
+			var y = pt.y
+			pt.x = this.a * x + this.c * y + this.tx;
+			pt.y = this.b * x + this.d * y + this.ty;
+			return pt;
+		}
+
+		/**
+		* Invert this matrix so that it represents the opposite of its orginal tranformaation.
+		* @method invert
+		* @return {Kiwi.Geom.Matrix} This object.
+		* @public
+		*/
+		public invert(): Matrix {
+			var a1 = this.a;
+			var b1 = this.b;
+			var c1 = this.c;
+			var d1 = this.d;
+			var tx1 = this.tx;
+			var n = a1 * d1 - b1 * c1;
+
+			this.a = d1 / n;
+			this.b = -b1 / n;
+			this.c = -c1 / n;
+			this.d = a1 / n;
+			this.tx = (c1 * this.ty - d1 * tx1) / n;
+			this.ty = -(a1 * this.ty - b1 * tx1) / n;
+			return this;
+		}
+
+		/**
+		* Copy another matrix to this matrix.
+		* @method copyFrom
+		* @param m {Kiwi.Geom.Matrix} The matrixto be copied from.
+		* @return {Kiwi.Geom.Matrix} This object.
+		* @public
+		*/
+		public copyFrom(m: Matrix): Matrix {
+			this.a = m.a;
+			this.b = m.b;
+			this.c = m.c;
+			this.d = m.d;
+			this.tx = m.tx;
+			this.ty = m.ty;
+
+			return this;
+		}
+
+		/**
+		* Copy this matrix to another matrix.
+		* @method copyTo
+		* @param m {Kiwi.Geom.Matrix} The matrix to copy to.
+		* @return {Kiwi.Geom.Matrix} This object.
+		* @public
+		*/
+		public copyTo(m: Matrix): Matrix {
+			m.a = this.a;
+			m.b = this.b;
+			m.c = this.c;
+			m.d = this.d;
+			m.tx = this.tx;
+			m.ty = this.ty;
+			return this;
+		}
+
+		/**
+		* Clone this matrix and returns a new Matrix object.
+		* @method clone
+		* @return {Kiwi.Geom.Matrix} 
+		* @public
+		*/
+		public clone(): Matrix {
+			return new Kiwi.Geom.Matrix(this.a, this.b, this.c, this.d, this.tx, this.ty);
+		}
+
+		/**
+		* Returns a string representation of this object.
+		* @method toString
+		* @return {string} A string representation of the instance.
+		* @public
+		*/
+		public get toString(): string {
+
+			return &quot;[{Matrix (a=&quot; + this.a + &quot; b=&quot; + this.b + &quot; c=&quot; + this.c + &quot; d=&quot; + this.d + &quot; tx=&quot; + this.tx + &quot; ty=&quot; + this.ty + &quot;)}]&quot;;
+
+		}
+
+	}
 
 }
+
     </pre>
 </div>
 
diff --git a/docs/files/src_geom_Point.ts.html b/docs/files/src_geom_Point.ts.html
index 1e67e34..db5deda 100644
--- a/docs/files/src_geom_Point.ts.html
+++ b/docs/files/src_geom_Point.ts.html
@@ -372,462 +372,463 @@ <h1 class="file-heading">File: src/geom/Point.ts</h1>
 
 module Kiwi.Geom {
 
-    /**
-    * Represents a location in a two-dimensional coordinate system, where x represents the horizontal axis and y represents the vertical axis.
-    *
-    * @class Point
-    * @constructor
-    * @namespace Kiwi.Geom
-    * @param [x=0] {Number} Position of this point on the x-axis.
-    * @param [y=0] {Number} Position of this point on the y-axis.
-    *
-    */
-    export class Point {
-
-        constructor (x: number = 0, y: number = 0) {
-
-            this.setTo(x, y);
-
-        }
-
-
-        /**
-        * The type of this object.
-        * @method objType
-        * @return {String} &quot;Point&quot;
-        * @public
-        */
-        public objType() {
-            return &quot;Point&quot;;
-        }
-
-	    /** 
-	    * The horizontal position of this point.
-	    * @property x
-	    * @type Number
-        * @public
-	    */
-        public x: number;
-
-	    /** 
-	    * The vertical position of this point.
-	    * @property y
-	    * @type Number
-        * @public
-	    */
-        public y: number;
-
-
-        /**
-        * Converts a pair of polar coordinates to a Cartesian point coordinate and sets them on the point instance.
-        * @method polar
-        * @param length {Number} The length coordinate of the polar pair.
-        * @param angle {Number} The angle, in radians, of the polar pair.
-        * @return {Kiwi.Geom.Point} The new Cartesian Point object.
-        * @public
-        */
-        public polar(distance: number, angle: number): Point {
-            //Note: Would be badarse if it did this based on the current x/y coordinates
-            this.x = distance * Math.cos(angle); 
-            this.y = distance * Math.sin(angle);
-            return this;
-        }   
-
-	    /**
-	    * Adds the coordinates of another point to the coordinates of this point to create a new point.
-	    * @method add
-	    * @param toAdd {Kiwi.Geom.Point} The point to be added.
-        * @param output {Kiwi.Geom.Point} 
-	    * @return {Kiwi.Geom.Point} The new Point object.
-        * @public
-	    */
-        public add(toAdd: Point, output: Point = new Point): Point {
-
-            return output.setTo(this.x + toAdd.x, this.y + toAdd.y);
-
-        }
-
-	    /**
-	    * Adds the given values to the coordinates of this point and returns it
-	    * @method addTo
-	    * @param x {Number} The amount to add to the x value of the point
-	    * @param y {Number} The amount to add to the x value of the point
-	    * @return {Kiwi.Geom.Point} This Point object.
-        * @public
-	    */
-        public addTo(x: number = 0, y: number = 0): Point {
-
-            return this.setTo(this.x + x, this.y + y);
-
-        }
-
-	    /**
-	    * Adds the given values to the coordinates of this point and returns it
-	    * @method subtractFrom
-	    * @param x {Number} The amount to subtract from the x value of the point
-	    * @param y {Number} The amount to subtract from the x value of the point
-	    * @return {Kiwi.Geom.Point} This Point object.
-        * @public
-	    */
-        public subtractFrom(x: number = 0, y: number = 0): Point {
-
-            return this.setTo(this.x - x, this.y - y);
-
-        }
-
-        /**
-        * Inverts the x and y values of this point
-        * @method invert
-	    * @return {Kiwi.Geom.Point} This Point object.
-        * @public
-        */
-        public invert(): Point {
-
-            return this.setTo(this.y, this.x);
-
-        }
-
-	    /**
-	    * Clamps this Point object to be between the given min and max.
-	    * @method clamp
-	    * @param min {number} The minimum value to clamp this Point to.
-	    * @param max {number} The maximum value to clamp this Point to.
-	    * @return {Kiwi.Geom.Point} This Point object.
-        * @public
-	    */
-        public clamp(min: number, max: number): Point {
-
-            this.clampX(min, max);
-            this.clampY(min, max);
-            return this;
-
-        }
-
-	    /**
-	    * Clamps the x value of this Point object to be between the given min and max
-	    * @method clampX
-	    * @param min {Number} The minimum value to clamp this Point to
-	    * @param max {Number} The maximum value to clamp this Point to
-	    * @return {Kiwi.Geom.Point} This Point object.
-        * @public
-	    */
-        public clampX(min: number, max: number): Point {
-
-            this.x = Math.max(Math.min(this.x, max), min);
-
-            return this;
-
-        }
-
-	    /**
-	    * Clamps the y value of this Point object to be between the given min and max
-	    * @method clampY
-	    * @param min {Number} The minimum value to clamp this Point to
-	    * @param max {Number} The maximum value to clamp this Point to
-	    * @return {Kiwi.Geom.Point} This Point object.
-        * @public
-	    */
-        public clampY(min: number, max: number): Point {
-
-            this.x = Math.max(Math.min(this.x, max), min);
-            this.y = Math.max(Math.min(this.y, max), min);
-
-            return this;
-
-        }
-
-	    /**
-	    * Creates a copy of this Point.
-	    * @method clone
-	    * @param [output] {Kiwi.Geom.Point} Optional Point object. If given the values will be set into this object, otherwise a new Point object will be created.
-	    * @return {Kiwi.Geom.Point} 
-        * @public
-	    */
-        public clone(output: Point = new Point): Point {
-
-            return output.setTo(this.x, this.y);
-
-        }
-
-	    /**
-	    * Copies the point data from the source Point object into this Point object.
-	    * @method copyFrom
-	    * @param source {Kiwi.Geom.Point} The point to copy from.
-	    * @return {Kiwi.Geom.Point} This Point object. Useful for chaining method calls.
-        * @public
-	    */
-        public copyFrom(source: Point): Point {
-
-            return this.setTo(source.x, source.y);
-
-        }
-
-	    /**
-	    * Copies the point data from this Point object to the given target Point object.
-	    * @method copyTo
-	    * @param target {Kiwi.Geom.Point} target - The point to copy to.
-	    * @return {Kiwi.Geom.Point} The target Point object.
-        * @public
-	    */
-        public copyTo(target: Point): Point {
-
-            return target.setTo(this.x, this.y);
-
-        }
-
-
-        /**
-        * Get the angle from this Point object to given Point object.
-        * @method angleTo
-        * @param target {Kiwi.Geom.Point} destination Point object.
-        * @return {Number} angle to point
-        * @public
-        */
-        public angleTo(target: Point): number {
-
-            //Y then X ....cause JavaScript :P
-            return Math.atan2(target.y - this.y, target.x - this.x);
-
-        }
-
-        /**
-        * Get the angle from this Point object to given X,Y coordinates.
-        * @method angleTo
-        * @param x {Number} x value.
-        * @param y {Number} y value.
-        * @return {Number} angle to point.
-        */
-        public angleToXY(x: number, y: number): number {
-            
-            //Y then X ....cause JavaScript :P
-            return Math.atan2(y - this.y, x - this.x);
-
-        }
-        
-        /**
-        * Returns the distance from this Point object to the given Point object.
-        * @method distanceTo
-        * @param target {Kiwi.Geom.Point} The destination Point object.
-        * @param round {boolean} Round the distance to the nearest integer (default false)
-        * @return {Number} The distance between this Point object and the destination Point object.
-        * @public
-        */
-        public distanceTo(target: Point, round: boolean = false): number {
-
-            var dx = this.x - target.x;
-            var dy = this.y - target.y;
-
-            if (round === true)
-            {
-                return Math.round(Math.sqrt(dx * dx + dy * dy));
-            }
-            else
-            {
-                return Math.sqrt(dx * dx + dy * dy);
-            }
-
-        }
-
-	    /**
-	    * Returns the distance from this Point object to the given Point object.
-	    * @method distanceToXY
-	    * @param x {Number} The x value.
-	    * @param y {Number} The y value.
-	    * @param [round=false] {boolean} Round the distance to the nearest integer (default false)
-	    * @return {Number} The distance between this Point object and the x/y values.
-        * @public
-	    */
-        public distanceToXY(x: number, y: number, round: boolean = false): number {
-
-            var dx = this.x - x;
-            var dy = this.y - y;
-
-            if (round === true)
-            {
-                return Math.round(Math.sqrt(dx * dx + dy * dy));
-            }
-            else
-            {
-                return Math.sqrt(dx * dx + dy * dy);
-            }
-
-        }
-
-        /**
-        * Returns the distance between the two Point objects.
-        * @method distanceBetween
-        * @param pointA {Kiwi.Geom.Point} The first Point object.
-        * @param pointB {Kiwi.Geom.Point} The second Point object.
-        * @param [round=false] {boolean} Round the distance to the nearest integer (default false)
-        * @return {Number} The distance between the two Point objects.
-        * @public
-        */
-        static distanceBetween(pointA: Point, pointB: Point, round: boolean = false): number {
-
-            var dx: number = pointA.x - pointB.x;
-            var dy: number = pointA.y - pointB.y;
-
-            if (round === true)
-            {
-                return Math.round(Math.sqrt(dx * dx + dy * dy));
-            }
-            else
-            {
-                return Math.sqrt(dx * dx + dy * dy);
-            }
-
-        }
-        
-        /**
-        * Creates a new point with cartesian coordinates from a pair of polar coordinates
-        * @method polar
-        * @param length {Number} The length coordinate of the polar pair.
-        * @param angle {Number} The angle, in radians, of the polar pair.
-        * @return {Kiwi.Geom.Point} The new Cartesian Point object.
-        * @public
-        */
-        static polar(length: number, angle: number): Point {
-            return new Point(length * Math.cos(angle), length * Math.sin(angle));
-                   
-        }
-
-	    /**
-	    * Returns true if the distance between this point and a target point is greater than or equal a specified distance.
-	    * This avoids using a costly square root operation
-	    * @method distanceCompare
-	    * @param target {Kiwi.Geom.Point} The Point object to use for comparison.
-	    * @param distance {Number} The distance to use for comparison.
-	    * @return {Boolean} True if distance is &gt;= specified distance.
-        * @public
-	    */
-        public distanceCompare(target: Point, distance: number): boolean {
-
-            if (this.distanceTo(target) &gt;= distance)
-            {
-                return true;
-            }
-            else
-            {
-                return false;
-            }
-
-        }
-
-	    /**
-	    * Determines whether this Point object and the given point object are equal. They are equal if they have the same x and y values.
-	    * @method equals
-	    * @param point {Kiwi.Geom.Point} The point to compare against.
-	    * @return {boolean} A value of true if the object is equal to this Point object; false if it is not equal.
-        * @public
-	    */
-        public equals(toCompare: Point): boolean {
-
-            if (this.x === toCompare.x &amp;&amp; this.y === toCompare.y)
-            {
-                return true;
-            }
-            else
-            {
-                return false;
-            }
-
-        }
-
-        /**
-        * Determines a point between two specified points. 
-        * The parameter f determines where the new interpolated point is located relative to the two end points specified by parameters pt1 and pt2.
-        *
-        * The closer the value of the parameter f is to 1.0, 
-        * the closer the interpolated point is to the first point (parameter pt1). 
-        * The closer the value of the parameter f is to 0, the closer the interpolated point is to the second point (parameter pt2).
-        *
-        * @method interpolate
-        * @param pointA{Kiwi.Geom.Point} The first Point object.
-        * @param pointB {Kiwi.Geom.Point} The second Point object.
-        * @param f {Number} The level of interpolation between the two points. Indicates where the new point will be, along the line between pt1 and pt2. If f=1, pt1 is returned; if f=0, pt2 is returned.
-        * @return {Kiwi.Geom.Point} The new interpolated Point object.
-        * @public
-        */
-        public static interpolate(pointA:Point, pointB:Point, f:number):Point {
-            
-            var xDiff: number = pointB.x - pointA.x;
-            var yDiff: number = pointB.y - pointA.y;
-            return new Point(pointB.x - xDiff * f, pointB.y - yDiff * f);
-
-        }
-
-	    /**
-	    * Offsets the Point object by the specified amount. The value of dx is added to the original value of x to create the new x value.
-	    * The value of dy is added to the original value of y to create the new y value.
-        *
-	    * @method offset
-	    * @param dx {Number} The amount by which to offset the horizontal coordinate, x.
-	    * @param dy {Number} The amount by which to offset the vertical coordinate, y.
-	    * @return {Kiwi.Geom.Point} This Point object. Useful for chaining method calls.
-        * @public
-	    */
-        public offset(dx: number, dy: number): Point {
-
-            this.x += dx;
-            this.y += dy;
-
-            return this;
-
-        }
-
-        
-	    /**
-	    * Sets the x and y values of this Point object to the given coordinates.
-	    * @method setTo
-	    * @param x {Number} The horizontal position of this point.
-	    * @param y {Number} The vertical position of this point.
-	    * @return {Kiwi.Geom.Point} This Point object. Useful for chaining method calls.
-        * @public
-	    */
-        public setTo(x: number, y: number): Point {
-
-            this.x = x;
-            this.y = y;
-
-            return this;
-
-        }
-
-	    /**
-	    * Subtracts the coordinates of another point from the coordinates of this point to create a new point.
-	    * @method subtract
-	    * @param point {Kiwi.Geom.Point} The point to be subtracted.
-	    * @param output {Kiwi.Geom.Point} Optional Point object. If given the values will be set into this object, otherwise a brand new Point object will be created and returned.
-	    * @return {Kiwi.Geom.Point} The new Point object.
-        * @public
-	    */
-        public subtract(point: Point, output: Point = new Point): Point {
-
-            return output.setTo(this.x - point.x, this.y - point.y);
-
-        }
-
-        public getCSS(): string {
-
-            return this.x + &#x27;px &#x27; + this.y + &#x27;px&#x27;;
-
-        }
-
-	    /**
-	    * Returns a string representation of this object.
-	    * @method toString
-	    * @return {String} a string representation of the instance.
-        * @public
-	    */
-        public toString(): string {
-
-            return &#x27;[{Point (x=&#x27; + this.x + &#x27; y=&#x27; + this.y + &#x27;)}]&#x27;;
-
-        }
-
-    }
+	/**
+	* Represents a location in a two-dimensional coordinate system, where x represents the horizontal axis and y represents the vertical axis.
+	*
+	* @class Point
+	* @constructor
+	* @namespace Kiwi.Geom
+	* @param [x=0] {Number} Position of this point on the x-axis.
+	* @param [y=0] {Number} Position of this point on the y-axis.
+	*
+	*/
+	export class Point {
+
+		constructor (x: number = 0, y: number = 0) {
+
+			this.setTo(x, y);
+
+		}
+
+
+		/**
+		* The type of this object.
+		* @method objType
+		* @return {String} &quot;Point&quot;
+		* @public
+		*/
+		public objType() {
+			return &quot;Point&quot;;
+		}
+
+		/** 
+		* The horizontal position of this point.
+		* @property x
+		* @type Number
+		* @public
+		*/
+		public x: number;
+
+		/** 
+		* The vertical position of this point.
+		* @property y
+		* @type Number
+		* @public
+		*/
+		public y: number;
+
+
+		/**
+		* Converts a pair of polar coordinates to a Cartesian point coordinate and sets them on the point instance.
+		* @method polar
+		* @param length {Number} The length coordinate of the polar pair.
+		* @param angle {Number} The angle, in radians, of the polar pair.
+		* @return {Kiwi.Geom.Point} The new Cartesian Point object.
+		* @public
+		*/
+		public polar(distance: number, angle: number): Point {
+			//Note: Would be badarse if it did this based on the current x/y coordinates
+			this.x = distance * Math.cos(angle); 
+			this.y = distance * Math.sin(angle);
+			return this;
+		}
+
+		/**
+		* Adds the coordinates of another point to the coordinates of this point to create a new point.
+		* @method add
+		* @param toAdd {Kiwi.Geom.Point} The point to be added.
+		* @param output {Kiwi.Geom.Point} 
+		* @return {Kiwi.Geom.Point} The new Point object.
+		* @public
+		*/
+		public add(toAdd: Point, output: Point = new Point): Point {
+
+			return output.setTo(this.x + toAdd.x, this.y + toAdd.y);
+
+		}
+
+		/**
+		* Adds the given values to the coordinates of this point and returns it
+		* @method addTo
+		* @param x {Number} The amount to add to the x value of the point
+		* @param y {Number} The amount to add to the x value of the point
+		* @return {Kiwi.Geom.Point} This Point object.
+		* @public
+		*/
+		public addTo(x: number = 0, y: number = 0): Point {
+
+			return this.setTo(this.x + x, this.y + y);
+
+		}
+
+		/**
+		* Adds the given values to the coordinates of this point and returns it
+		* @method subtractFrom
+		* @param x {Number} The amount to subtract from the x value of the point
+		* @param y {Number} The amount to subtract from the x value of the point
+		* @return {Kiwi.Geom.Point} This Point object.
+		* @public
+		*/
+		public subtractFrom(x: number = 0, y: number = 0): Point {
+
+			return this.setTo(this.x - x, this.y - y);
+
+		}
+
+		/**
+		* Inverts the x and y values of this point
+		* @method invert
+		* @return {Kiwi.Geom.Point} This Point object.
+		* @public
+		*/
+		public invert(): Point {
+
+			return this.setTo(this.y, this.x);
+
+		}
+
+		/**
+		* Clamps this Point object to be between the given min and max.
+		* @method clamp
+		* @param min {number} The minimum value to clamp this Point to.
+		* @param max {number} The maximum value to clamp this Point to.
+		* @return {Kiwi.Geom.Point} This Point object.
+		* @public
+		*/
+		public clamp(min: number, max: number): Point {
+
+			this.clampX(min, max);
+			this.clampY(min, max);
+			return this;
+
+		}
+
+		/**
+		* Clamps the x value of this Point object to be between the given min and max
+		* @method clampX
+		* @param min {Number} The minimum value to clamp this Point to
+		* @param max {Number} The maximum value to clamp this Point to
+		* @return {Kiwi.Geom.Point} This Point object.
+		* @public
+		*/
+		public clampX(min: number, max: number): Point {
+
+			this.x = Math.max(Math.min(this.x, max), min);
+
+			return this;
+
+		}
+
+		/**
+		* Clamps the y value of this Point object to be between the given min and max
+		* @method clampY
+		* @param min {Number} The minimum value to clamp this Point to
+		* @param max {Number} The maximum value to clamp this Point to
+		* @return {Kiwi.Geom.Point} This Point object.
+		* @public
+		*/
+		public clampY(min: number, max: number): Point {
+
+			this.x = Math.max(Math.min(this.x, max), min);
+			this.y = Math.max(Math.min(this.y, max), min);
+
+			return this;
+
+		}
+
+		/**
+		* Creates a copy of this Point.
+		* @method clone
+		* @param [output] {Kiwi.Geom.Point} Optional Point object. If given the values will be set into this object, otherwise a new Point object will be created.
+		* @return {Kiwi.Geom.Point} 
+		* @public
+		*/
+		public clone(output: Point = new Point): Point {
+
+			return output.setTo(this.x, this.y);
+
+		}
+
+		/**
+		* Copies the point data from the source Point object into this Point object.
+		* @method copyFrom
+		* @param source {Kiwi.Geom.Point} The point to copy from.
+		* @return {Kiwi.Geom.Point} This Point object. Useful for chaining method calls.
+		* @public
+		*/
+		public copyFrom(source: Point): Point {
+
+			return this.setTo(source.x, source.y);
+
+		}
+
+		/**
+		* Copies the point data from this Point object to the given target Point object.
+		* @method copyTo
+		* @param target {Kiwi.Geom.Point} target - The point to copy to.
+		* @return {Kiwi.Geom.Point} The target Point object.
+		* @public
+		*/
+		public copyTo(target: Point): Point {
+
+			return target.setTo(this.x, this.y);
+
+		}
+
+
+		/**
+		* Get the angle from this Point object to given Point object.
+		* @method angleTo
+		* @param target {Kiwi.Geom.Point} destination Point object.
+		* @return {Number} angle to point
+		* @public
+		*/
+		public angleTo(target: Point): number {
+
+			//Y then X ....cause JavaScript :P
+			return Math.atan2(target.y - this.y, target.x - this.x);
+
+		}
+
+		/**
+		* Get the angle from this Point object to given X,Y coordinates.
+		* @method angleTo
+		* @param x {Number} x value.
+		* @param y {Number} y value.
+		* @return {Number} angle to point.
+		*/
+		public angleToXY(x: number, y: number): number {
+			
+			//Y then X ....cause JavaScript :P
+			return Math.atan2(y - this.y, x - this.x);
+
+		}
+		
+		/**
+		* Returns the distance from this Point object to the given Point object.
+		* @method distanceTo
+		* @param target {Kiwi.Geom.Point} The destination Point object.
+		* @param round {boolean} Round the distance to the nearest integer (default false)
+		* @return {Number} The distance between this Point object and the destination Point object.
+		* @public
+		*/
+		public distanceTo(target: Point, round: boolean = false): number {
+
+			var dx = this.x - target.x;
+			var dy = this.y - target.y;
+
+			if (round === true)
+			{
+				return Math.round(Math.sqrt(dx * dx + dy * dy));
+			}
+			else
+			{
+				return Math.sqrt(dx * dx + dy * dy);
+			}
+
+		}
+
+		/**
+		* Returns the distance from this Point object to the given Point object.
+		* @method distanceToXY
+		* @param x {Number} The x value.
+		* @param y {Number} The y value.
+		* @param [round=false] {boolean} Round the distance to the nearest integer (default false)
+		* @return {Number} The distance between this Point object and the x/y values.
+		* @public
+		*/
+		public distanceToXY(x: number, y: number, round: boolean = false): number {
+
+			var dx = this.x - x;
+			var dy = this.y - y;
+
+			if (round === true)
+			{
+				return Math.round(Math.sqrt(dx * dx + dy * dy));
+			}
+			else
+			{
+				return Math.sqrt(dx * dx + dy * dy);
+			}
+
+		}
+
+		/**
+		* Returns the distance between the two Point objects.
+		* @method distanceBetween
+		* @param pointA {Kiwi.Geom.Point} The first Point object.
+		* @param pointB {Kiwi.Geom.Point} The second Point object.
+		* @param [round=false] {boolean} Round the distance to the nearest integer (default false)
+		* @return {Number} The distance between the two Point objects.
+		* @public
+		*/
+		static distanceBetween(pointA: Point, pointB: Point, round: boolean = false): number {
+
+			var dx: number = pointA.x - pointB.x;
+			var dy: number = pointA.y - pointB.y;
+
+			if (round === true)
+			{
+				return Math.round(Math.sqrt(dx * dx + dy * dy));
+			}
+			else
+			{
+				return Math.sqrt(dx * dx + dy * dy);
+			}
+
+		}
+		
+		/**
+		* Creates a new point with cartesian coordinates from a pair of polar coordinates
+		* @method polar
+		* @param length {Number} The length coordinate of the polar pair.
+		* @param angle {Number} The angle, in radians, of the polar pair.
+		* @return {Kiwi.Geom.Point} The new Cartesian Point object.
+		* @public
+		*/
+		static polar(length: number, angle: number): Point {
+			return new Point(length * Math.cos(angle), length * Math.sin(angle));
+				   
+		}
+
+		/**
+		* Returns true if the distance between this point and a target point is greater than or equal a specified distance.
+		* This avoids using a costly square root operation
+		* @method distanceCompare
+		* @param target {Kiwi.Geom.Point} The Point object to use for comparison.
+		* @param distance {Number} The distance to use for comparison.
+		* @return {Boolean} True if distance is &gt;= specified distance.
+		* @public
+		*/
+		public distanceCompare(target: Point, distance: number): boolean {
+
+			if (this.distanceTo(target) &gt;= distance)
+			{
+				return true;
+			}
+			else
+			{
+				return false;
+			}
+
+		}
+
+		/**
+		* Determines whether this Point object and the given point object are equal. They are equal if they have the same x and y values.
+		* @method equals
+		* @param point {Kiwi.Geom.Point} The point to compare against.
+		* @return {boolean} A value of true if the object is equal to this Point object; false if it is not equal.
+		* @public
+		*/
+		public equals(toCompare: Point): boolean {
+
+			if (this.x === toCompare.x &amp;&amp; this.y === toCompare.y)
+			{
+				return true;
+			}
+			else
+			{
+				return false;
+			}
+
+		}
+
+		/**
+		* Determines a point between two specified points. 
+		* The parameter f determines where the new interpolated point is located relative to the two end points specified by parameters pt1 and pt2.
+		*
+		* The closer the value of the parameter f is to 1.0, 
+		* the closer the interpolated point is to the first point (parameter pt1). 
+		* The closer the value of the parameter f is to 0, the closer the interpolated point is to the second point (parameter pt2).
+		*
+		* @method interpolate
+		* @param pointA{Kiwi.Geom.Point} The first Point object.
+		* @param pointB {Kiwi.Geom.Point} The second Point object.
+		* @param f {Number} The level of interpolation between the two points. Indicates where the new point will be, along the line between pt1 and pt2. If f=1, pt1 is returned; if f=0, pt2 is returned.
+		* @return {Kiwi.Geom.Point} The new interpolated Point object.
+		* @public
+		*/
+		public static interpolate(pointA:Point, pointB:Point, f:number):Point {
+			
+			var xDiff: number = pointB.x - pointA.x;
+			var yDiff: number = pointB.y - pointA.y;
+			return new Point(pointB.x - xDiff * f, pointB.y - yDiff * f);
+
+		}
+
+		/**
+		* Offsets the Point object by the specified amount. The value of dx is added to the original value of x to create the new x value.
+		* The value of dy is added to the original value of y to create the new y value.
+		*
+		* @method offset
+		* @param dx {Number} The amount by which to offset the horizontal coordinate, x.
+		* @param dy {Number} The amount by which to offset the vertical coordinate, y.
+		* @return {Kiwi.Geom.Point} This Point object. Useful for chaining method calls.
+		* @public
+		*/
+		public offset(dx: number, dy: number): Point {
+
+			this.x += dx;
+			this.y += dy;
+
+			return this;
+
+		}
+
+
+		/**
+		* Sets the x and y values of this Point object to the given coordinates.
+		* @method setTo
+		* @param x {Number} The horizontal position of this point.
+		* @param y {Number} The vertical position of this point.
+		* @return {Kiwi.Geom.Point} This Point object. Useful for chaining method calls.
+		* @public
+		*/
+		public setTo(x: number, y: number): Point {
+
+			this.x = x;
+			this.y = y;
+
+			return this;
+
+		}
+
+		/**
+		* Subtracts the coordinates of another point from the coordinates of this point to create a new point.
+		* @method subtract
+		* @param point {Kiwi.Geom.Point} The point to be subtracted.
+		* @param output {Kiwi.Geom.Point} Optional Point object. If given the values will be set into this object, otherwise a brand new Point object will be created and returned.
+		* @return {Kiwi.Geom.Point} The new Point object.
+		* @public
+		*/
+		public subtract(point: Point, output: Point = new Point): Point {
+
+			return output.setTo(this.x - point.x, this.y - point.y);
+
+		}
+
+		public getCSS(): string {
+
+			return this.x + &#x27;px &#x27; + this.y + &#x27;px&#x27;;
+
+		}
+
+		/**
+		* Returns a string representation of this object.
+		* @method toString
+		* @return {String} a string representation of the instance.
+		* @public
+		*/
+		public toString(): string {
+
+			return &#x27;[{Point (x=&#x27; + this.x + &#x27; y=&#x27; + this.y + &#x27;)}]&#x27;;
+
+		}
+
+	}
 
 }
+
     </pre>
 </div>
 
diff --git a/docs/files/src_geom_Ray.ts.html b/docs/files/src_geom_Ray.ts.html
index 8a47381..042b14b 100644
--- a/docs/files/src_geom_Ray.ts.html
+++ b/docs/files/src_geom_Ray.ts.html
@@ -372,212 +372,210 @@ <h1 class="file-heading">File: src/geom/Ray.ts</h1>
 
 module Kiwi.Geom {
 
-    /**
-    * Represents a halfline. The ray starts at the first point and extends infinitely in the direction of the second.
-    *
-    * @class Ray
-    * @namespace Kiwi.Geom
-    * @constructor
-    * @param [x1=0] {Number} Starting location of the ray on the x-axis.
-    * @param [y1=0] {Number} Starting location of the ray on the y-axis.
-    * @param [x2=0] {Number} End location of the ray on the x-axis. Used to calculate direction so it isn&#x27;t really the &#x27;end&#x27; location.
-    * @param [y2=0] {Number} End location of the ray on the y-axis. Used to calculate direction so it isn&#x27;t really the &#x27;end&#x27; location.
-    * @return {Kiwi.Geom.Ray} This Object
-    *
-    */
-    export class Ray {
-
-        constructor(x1: number = 0, y1: number = 0, x2: number = 0, y2: number = 0) {
-
-            this.setTo(x1, y1, x2, y2);
-
-        }
-        /**
-        * The type of this object.
-        * @method objType
-        * @return {String} &quot;Ray&quot;
-        * @public
-        */
-        public objType() {
-            return &quot;Ray&quot;;
-        }
-
-        /**
-        * The x component of the initial point of the ray
-        * @property x1
-        * @type Number
-        * @default 0
-        * @public
-        */
-        public x1: number = 0;
-
-        /**
-        * The y component of the initial point of the ray
-        * @property y1
-        * @type Number
-        * @default 0
-        * @public
-        */
-        public y1: number = 0;
-
-        /**
-        * The x component of the direction point of the ray
-        * @property x2
-        * @type Number
-        * @default 0
-        * @public
-        */
-        public x2: number = 0;
-
-        /**
-        * The y component of the direction point of the ray
-        * @property y2
-        * @type Number
-        * @default 0
-        * @public
-        */
-        public y2: number = 0;
-
-        /**
-        * Makes a copy of this Ray either as a new Ray object or,
-        * makes a passed Ray a copy of this one. 
-        *
-        * @method clone
-        * @param [output] {Kiwi.Geom.Ray} 
-        * @return {Kiwi.Geom.Ray}
-        * @public
-        */
-        public clone(output: Ray = new Ray): Ray {
-
-            return output.setTo(this.x1, this.y1, this.x2, this.y2);
-
-        }
-
-        /**
-        * Makes this Ray the same as a passed Ray.
-        * @method copyFrom
-        * @param source {Kiwi.Geom.Ray} 
-        * @return {Kiwi.Geom.Ray}
-        * @public
-        */
-        public copyFrom(source: Ray): Ray {
-
-            return this.setTo(source.x1, source.y1, source.x2, source.y2);
-
-        }
-
-        /**
-        * Makes a passed Ray the same as this Ray object. 
-        * @method copyTo
-        * @param target {Kiwi.Geom.Ray} 
-        * @return {Kiwi.Geom.Ray}
-        * @public
-        */
-        public copyTo(target: Ray): Ray {
-
-            return target.copyFrom(this);
-
-        }
-
-        /**
-        * Sets the origin and the direction of this Ray.
-        * @method setTo
-        * @param [x1=0] {Number} 
-        * @param [y1=0] {Number} 
-        * @param [x2=0] {Number} 
-        * @param [y2=0] {Number} 
-        * @return {Kiwi.Geom.Ray}
-        * @public
-        */
-        public setTo(x1: number = 0, y1: number = 0, x2: number = 0, y2: number = 0): Ray {
-
-            this.x1 = x1;
-            this.y1 = y1;
-            this.x2 = x2;
-            this.y2 = y2;
-
-            return this;
-
-        }
-
-        /**
-        * Get the angle of the ray.
-        * @property angle
-        * @type Number
-        * @readOnly
-        * @public
-        */
-        public get angle(): number {
-
-            return Math.atan2(this.y2 - this.y1, this.x2 - this.x1);
-
-        }
-
-        /**
-        * Get the slope of the ray.
-        * @property slope
-        * @type Number
-        * @readOnly
-        * @public
-        */
-        public get slope(): number {
-
-            return (this.y2 - this.y1) / (this.x2 - this.x1);
-
-        }
-
-        /**
-        * 
-        * @property yIntercept
-        * @type Number
-        * @readOnly
-        * @public
-        */
-        public get yIntercept(): number {
-
-            return (this.y1 - this.slope * this.x1);
-
-        }
-
-        /**
-        * Check if the Ray passes through a point.
-        * @method isPointOnRay
-        * @param x {Number}
-        * @param y {Number}
-        * @return {boolean}
-        * @public
-        */
-        public isPointOnRay(x: number, y: number): boolean {
-
-            if ((x - this.x1) * (this.y2 - this.y1) === (this.x2 - this.x1) * (y - this.y1)) {
-                if (Math.atan2(y-this.y1, x-this.x1) == Math.atan2(this.y2-this.y1, this.x2- this.x1)){ 
-                    return true
-                }
-
-            }
-            
-            return false;
-            
-
-        }
-
-        
-        
-        /**
-        * Get a string representation of the ray.
-        * @method toString
-        * @return {String}
-        * @public
-        */
-        public toString(): string {
-
-            return &quot;[{Ray (x1=&quot; + this.x1 + &quot; y1=&quot; + this.y1 + &quot; x2=&quot; + this.x2 + &quot; y2=&quot; + this.y2 + &quot;)}]&quot;;
-
-        }
-
-    }
+	/**
+	* Represents a halfline. The ray starts at the first point and extends infinitely in the direction of the second.
+	*
+	* @class Ray
+	* @namespace Kiwi.Geom
+	* @constructor
+	* @param [x1=0] {Number} Starting location of the ray on the x-axis.
+	* @param [y1=0] {Number} Starting location of the ray on the y-axis.
+	* @param [x2=0] {Number} End location of the ray on the x-axis. Used to calculate direction so it isn&#x27;t really the &#x27;end&#x27; location.
+	* @param [y2=0] {Number} End location of the ray on the y-axis. Used to calculate direction so it isn&#x27;t really the &#x27;end&#x27; location.
+	* @return {Kiwi.Geom.Ray} This Object
+	*
+	*/
+	export class Ray {
+
+		constructor(x1: number = 0, y1: number = 0, x2: number = 0, y2: number = 0) {
+
+			this.setTo(x1, y1, x2, y2);
+
+		}
+		/**
+		* The type of this object.
+		* @method objType
+		* @return {String} &quot;Ray&quot;
+		* @public
+		*/
+		public objType() {
+			return &quot;Ray&quot;;
+		}
+
+		/**
+		* The x component of the initial point of the ray
+		* @property x1
+		* @type Number
+		* @default 0
+		* @public
+		*/
+		public x1: number = 0;
+
+		/**
+		* The y component of the initial point of the ray
+		* @property y1
+		* @type Number
+		* @default 0
+		* @public
+		*/
+		public y1: number = 0;
+
+		/**
+		* The x component of the direction point of the ray
+		* @property x2
+		* @type Number
+		* @default 0
+		* @public
+		*/
+		public x2: number = 0;
+
+		/**
+		* The y component of the direction point of the ray
+		* @property y2
+		* @type Number
+		* @default 0
+		* @public
+		*/
+		public y2: number = 0;
+
+		/**
+		* Makes a copy of this Ray either as a new Ray object or,
+		* makes a passed Ray a copy of this one. 
+		*
+		* @method clone
+		* @param [output] {Kiwi.Geom.Ray} 
+		* @return {Kiwi.Geom.Ray}
+		* @public
+		*/
+		public clone(output: Ray = new Ray): Ray {
+
+			return output.setTo(this.x1, this.y1, this.x2, this.y2);
+
+		}
+
+		/**
+		* Makes this Ray the same as a passed Ray.
+		* @method copyFrom
+		* @param source {Kiwi.Geom.Ray} 
+		* @return {Kiwi.Geom.Ray}
+		* @public
+		*/
+		public copyFrom(source: Ray): Ray {
+
+			return this.setTo(source.x1, source.y1, source.x2, source.y2);
+
+		}
+
+		/**
+		* Makes a passed Ray the same as this Ray object. 
+		* @method copyTo
+		* @param target {Kiwi.Geom.Ray} 
+		* @return {Kiwi.Geom.Ray}
+		* @public
+		*/
+		public copyTo(target: Ray): Ray {
+
+			return target.copyFrom(this);
+
+		}
+
+		/**
+		* Sets the origin and the direction of this Ray.
+		* @method setTo
+		* @param [x1=0] {Number} 
+		* @param [y1=0] {Number} 
+		* @param [x2=0] {Number} 
+		* @param [y2=0] {Number} 
+		* @return {Kiwi.Geom.Ray}
+		* @public
+		*/
+		public setTo(x1: number = 0, y1: number = 0, x2: number = 0, y2: number = 0): Ray {
+
+			this.x1 = x1;
+			this.y1 = y1;
+			this.x2 = x2;
+			this.y2 = y2;
+
+			return this;
+
+		}
+
+		/**
+		* Get the angle of the ray.
+		* @property angle
+		* @type Number
+		* @readOnly
+		* @public
+		*/
+		public get angle(): number {
+
+			return Math.atan2(this.y2 - this.y1, this.x2 - this.x1);
+
+		}
+
+		/**
+		* Get the slope of the ray.
+		* @property slope
+		* @type Number
+		* @readOnly
+		* @public
+		*/
+		public get slope(): number {
+
+			return (this.y2 - this.y1) / (this.x2 - this.x1);
+
+		}
+
+		/**
+		* 
+		* @property yIntercept
+		* @type Number
+		* @readOnly
+		* @public
+		*/
+		public get yIntercept(): number {
+
+			return (this.y1 - this.slope * this.x1);
+
+		}
+
+		/**
+		* Check if the Ray passes through a point.
+		* @method isPointOnRay
+		* @param x {Number}
+		* @param y {Number}
+		* @return {boolean}
+		* @public
+		*/
+		public isPointOnRay(x: number, y: number): boolean {
+
+			if ((x - this.x1) * (this.y2 - this.y1) === (this.x2 - this.x1) * (y - this.y1)) {
+				if (Math.atan2(y-this.y1, x-this.x1) == Math.atan2(this.y2-this.y1, this.x2- this.x1)){ 
+					return true
+				}
+
+			}
+
+			return false;
+		}
+
+		
+		/**
+		* Get a string representation of the ray.
+		* @method toString
+		* @return {String}
+		* @public
+		*/
+		public toString(): string {
+
+			return &quot;[{Ray (x1=&quot; + this.x1 + &quot; y1=&quot; + this.y1 + &quot; x2=&quot; + this.x2 + &quot; y2=&quot; + this.y2 + &quot;)}]&quot;;
+
+		}
+
+	}
 
 }
+
     </pre>
 </div>
 
diff --git a/docs/files/src_geom_Rectangle.ts.html b/docs/files/src_geom_Rectangle.ts.html
index 9974e53..223a763 100644
--- a/docs/files/src_geom_Rectangle.ts.html
+++ b/docs/files/src_geom_Rectangle.ts.html
@@ -372,713 +372,714 @@ <h1 class="file-heading">File: src/geom/Rectangle.ts</h1>
 
 module Kiwi.Geom {
 
-    /**
-    * An area defined by its position, as indicated by its top-left corner (x,y) and width and height
-    *
-    * @class Rectangle
-    * @namespace Kiwi.Geom
-    * @constructor
-    * @param [x=0] {Number} The x coordinate of the top-left corner of the rectangle.
-    * @param [y=0] {Number} The y coordinate of the top-left corner of the rectangle.
-    * @param [width=0] {Number} width The width of the rectangle in pixels.
-    * @param [height=0] {Number} height The height of the rectangle in pixels.
-    * @return {Kiwi.Geom.Rectangle} This rectangle object
-    * 
-    */
-    export class Rectangle {
-
-        /**
-        * Creates a new Rectangle object with the top-left corner specified by the x and y parameters and with the specified width and height parameters. If you call this function without parameters, a rectangle with x, y, width, and height properties set to 0 is created.
-        **/
-        constructor (x: number = 0, y: number = 0, width: number = 0, height: number = 0) {
-
-            this.setTo(x, y, width, height);
-
-        }
-
-        /**
-        * The type of this object.
-        * @method objType
-        * @return {String} &quot;Rectangle&quot;
-        * @public
-        */
-        public objType() {
-            return &quot;Rectangle&quot;;
-        }
-
-        /** 
-        * The x coordinate of the top-left corner of the rectangle
-        * @property x
-        * @type Number
-        * @default 0
-        * @public
-        */
-        public x: number = 0;
-
-        /** 
-        * The y coordinate of the top-left corner of the rectangle
-        * @property y
-        * @type Number
-        * @default 0
-        * @public
-        */
-        public y: number = 0;
-
-        /** 
-        * The width of the rectangle in pixels
-        * @property width
-        * @type Number
-        * @default 0
-        * @public
-        */
-        public width: number = 0;
-
-        /** 
-        * The height of the rectangle in pixels
-        * @property height
-        * @type Number
-        * @default 0
-        * @public
-        */
-        public height: number = 0;
-
-        /**
-        * The sum of the y and height properties. 
-        * Changing the bottom property of a Rectangle object has no effect on the x, y and width properties, 
-        * but does change the height property.
-        *
-        * @property bottom
-        * @type Number
-        * @public
-        */
-        public set bottom(value: number) {
-
-            if (value)
-            {
-                if (value &lt; this.y)
-                {
-                    this.height = 0;
-                }
-                else
-                {
-                    this.height = value;
-                }
-            }
-
-        }
-
-        public get bottom(): number {
-
-            return this.y + this.height;
-
-        }
-
-        /**
-        * Returns a Point containing the location of the center of the Rectangle, relative to the top left edge
-        * @property center
-        * @type Kiwi.Geom.Point
-        * @readOnly 
-        * @public
-        */
-        public get center(): Point {
-
-            var output: Point = new Point();
-            return output.setTo(Math.round(this.width / 2), Math.round(this.height / 2));
-
-        }
-
-        /**
-        * Returns a Point containing the location of the Rectangle&#x27;s bottom-right corner, determined by the values of the right and bottom properties.
-        * @property bottomRight
-        * @type Kiwi.Geom.Point 
-        * @public
-        */
-        public set bottomRight(value: Point) {
-            
-            if (value)
-            {
-                this.right = value.x;
-                this.bottom = value.y;
-            }
-
-        }
-
-        public get bottomRight(): Point {
-
-            var output: Point = new Point();
-            return output.setTo(this.right, this.bottom);
-
-        }
-
-        /**
-        * The x coordinate of the top-left corner of the rectangle. Changing the left property of a Rectangle object has no effect on the y and height properties. However it does affect the width property, whereas changing the x value does not affect the width property.
-        * @property left
-        * @type Number 
-        * @public
-        */
-        public set left(value: number) {
-
-            if (value)
-            {
-                var diff = this.x - value;
-
-                if (this.width + diff &lt; 0)
-                {
-                    this.width = 0;
-
-                    this.x = value;
-                }
-                else
-                {
-                    this.width += diff;
-
-                    this.x = value;
-                }
-            }
-
-        }
-
-        public get left(): number {
-
-            return this.x;
-
-        }
-
-        /**
-        * The sum of the x and width properties. Changing the right property of a Rectangle object has no effect on the x, y and height properties. However it does affect the width property.
-        * @property right
-        * @type Number 
-        * @public
-        */
-        public set right(value: number) {
-
-            if (value)
-            {
-                if (value &lt; this.x)
-                {
-                    this.width = 0;
-                }
-                else
-                {
-                    this.width = value - this.x;
-                }
-            }
-
-        }
-
-        public get right(): number {
-
-            return this.x + this.width;
-
-        }
-
-        /**
-        * The size of the Rectangle object, expressed as a Point object with the values of the width and height properties.
-        * @property size
-        * @type Kiwi.Geom.Point
-        * @readOnly
-        * @public
-        */
-        public get size(): Point {
-
-            var output: Point = new Point();
-            return output.setTo(this.width, this.height);
-
-        }
-
-        /**
-        * The volume of the Rectangle object in pixels, derived from width * height
-        * @property volume
-        * @type Number
-        * @readOnly 
-        * @return
-        */
-        public get volume(): number {
-
-            return this.width * this.height;
-
-        }
-
-        /**
-        * The perimeter size of the Rectangle object in pixels. This is the sum of all 4 sides.
-        * @property perimeter
-        * @type Number
-        * @readOnly 
-        * @public
-        */
-        public get perimeter(): number {
-
-            return (this.width * 2) + (this.height * 2);
-
-        }
-
-        /**
-        * The y coordinate of the top-left corner of the rectangle. 
-        * Changing the top property of a Rectangle object has no effect on the x and width properties.
-        * However it does affect the height property, whereas changing the y value does not affect the height property.
-        *
-        * @method top
-        * @return {Number} 
-        * @public
-        */
-        public set top(value: number) {
-
-            if (value)
-            {
-                var diff = this.y - value;
-
-                if (this.height + diff &lt; 0)
-                {
-                    this.height = 0;
-
-                    this.y = value;
-                }
-                else
-                {
-                    this.height += diff;
-
-                    this.y = value;
-                }
-            }
-
-        }
-
-        public get top(): number {
-
-            return this.y;
-
-        }
-        /**
-        * The location of the Rectangle object&#x27;s top-left corner, determined by the x and y coordinates of the point.
-        * @property topLeft
-        * @type Kiwi.Geom.Point
-        * @public
-        */
-        public set topLeft(value: Point) {
-
-            if (value)
-            {
-                this.x = value.x;
-                this.y = value.y;
-            }
-
-        }
-
-        public get topLeft(): Point {
-
-            var output: Point = new Point();
-            return output.setTo(this.x, this.y);
-
-        }
-
-        /**
-        * Returns a new Rectangle object with the same values for the x, y, width, and height properties as the original Rectangle object.
-        * @method clone
-        * @param [output] {Kiwi.Geom.Rectangle} Optional Rectangle object. If given the values will be set into the object, otherwise a brand new Rectangle object will be created and returned.
-        * @return {Kiwi.Geom.Rectangle}
-        * @public
-        */
-        public clone(output: Rectangle = new Rectangle): Rectangle {
-
-            return output.setTo(this.x, this.y, this.width, this.height);
-
-        }
-
-        /**
-        * Determines whether the specified coordinates are contained within the region defined by this Rectangle object.
-        * @method contains
-        * @param {Number} x The x coordinate of the point to test.
-        * @param {Number} y The y coordinate of the point to test.
-        * @return {boolean} A value of true if the Rectangle object contains the specified point; otherwise false.
-        * @public
-        */
-        public contains(x: number, y: number): boolean {
-
-            if (x &gt;= this.x &amp;&amp; x &lt;= this.right &amp;&amp; y &gt;= this.y &amp;&amp; y &lt;= this.bottom)
-            {
-                return true;
-            }
-
-            return false;
-
-        }
-
-        /**
-        * Determines whether the specified point is contained within the rectangular region defined by this Rectangle object.
-        * This method is similar to the Rectangle.contains() method, except that it takes a Point object as a parameter.
-        *
-        * @method containsPoint
-        * @param {Kiwi.Geom.Point} point The point object being checked. Can be Kiwi.Geom.Point or any object with .x and .y values.
-        * @return {boolean} A value of true if the Rectangle object contains the specified point; otherwise false.
-        * @public
-        */
-        public containsPoint(point: Point): boolean {
-
-            return this.contains(point.x, point.y);
-
-        }
-
-        /**
-        * Determines whether the Rectangle object specified by the rect parameter is contained within this Rectangle object. 
-        * A Rectangle object is said to contain another if the second Rectangle object falls entirely within the boundaries of the first.
-        *
-        * @method containsRect
-        * @param rect {Kiwi.Geom.Rectangle} The rectangle object being checked.
-        * @return {boolean} A value of true if the Rectangle object contains the specified point; otherwise false.
-        * @public
-        */
-        public containsRect(rect: Rectangle): boolean {
-
-            //	If the given rect has a larger volume than this one then it can never contain it
-            if (rect.volume &gt; this.volume)
-            {
-                return false;
-            }
-
-            if (rect.x &gt;= this.x &amp;&amp; rect.y &gt;= this.y &amp;&amp; rect.right &lt;= this.right &amp;&amp; rect.bottom &lt;= this.bottom)
-            {
-                return true;
-            }
-
-            return false;
-
-        }
-
-        /**
-        * Copies all of rectangle data from the source Rectangle object into the calling Rectangle object.
-        *
-        * @method copyFrom
-        * @param source {Kiwi.Geom.Rectangle} The source rectangle object to copy from
-        * @return {Kiwi.Geom.Rectangle} This rectangle object
-        * @public
-        */
-        public copyFrom(source: Rectangle): Rectangle {
-
-            return this.setTo(source.x, source.y, source.width, source.height);
-
-        }
-
-        /**
-        * Copies all the rectangle data from this Rectangle object into the destination Rectangle object.
-        * Creates a new rectangle if one was not passed.
-        *
-        * @method copyTo
-        * @param [target] {Kiwi.Geom.Rectangle} The destination rectangle object to copy in to. Creates a new rectangle if one is not passed.
-        * @return {Kiwi.Geom.Rectangle} The destination rectangle object
-        * @public
-        */
-        public copyTo(target: Rectangle = new Rectangle()): Rectangle {
-
-            return target.copyFrom(this);
-
-        }
-
-        /**
-        * Determines whether the object specified in the toCompare parameter is equal to this Rectangle object.
-        * This method compares the x, y, width, and height properties of an object against the same properties of this Rectangle object.
-        *
-        * @method equals
-        * @param  toCompare {Kiwi.Geom.Rectangle} toCompare The rectangle to compare to this Rectangle object.
-        * @return {boolean} A value of true if the object has exactly the same values for the x, y, width, and height properties as this Rectangle object; otherwise false.
-        * @public
-        */
-        public equals(toCompare: Rectangle): boolean {
-
-            if (this.x === toCompare.x &amp;&amp; this.y === toCompare.y &amp;&amp; this.width === toCompare.width &amp;&amp; this.height === toCompare.height)
-            {
-                return true;
-            }
-
-            return false;
-
-        }
-
-        /**
-        * Increases the size of the Rectangle object by the specified amounts, in pixels.
-        *
-        * The center point of the Rectangle object stays the same,
-        * and its size increases to the left and right by the dx value,
-        * and to the top and the bottom by the dy value.
-        *
-        * @method inflate
-        * @param dx {Number} dx The amount to be added to the left side of this Rectangle.
-        * @param dy {Number} dy The amount to be added to the bottom side of this Rectangle.
-        * @return {Kiwi.Geom.Rectangle} This Rectangle object.
-        * @public
-        */
-        public inflate(dx: number, dy: number): Rectangle {
-
-            if (!isNaN(dx) &amp;&amp; !isNaN(dy))
-            {
-                this.x -= dx;
-                this.width += 2 * dx;
-
-                this.y -= dy;
-                this.height += 2 * dy;
-            }
-
-            return this;
-
-        }
-
-        /**
-        * Increases the size of the Rectangle object. This method is similar to the Rectangle.inflate() method except it takes a Point object as a parameter.
-        *
-        * @method inflatePoint
-        * @param point {Kiwi.Geom.Point} The x property of this Point object is used to increase the horizontal dimension of the Rectangle object. The y property is used to increase the vertical dimension of the Rectangle object.
-        * @return {Kiwi.Geom.Rectangle} This Rectangle object.
-        * @public
-        */
-        public inflatePoint(point: Point): Rectangle {
-
-            return this.inflate(point.x, point.y);
-
-        }
-
-        /**
-        * If the Rectangle object specified in the toIntersect parameter intersects with this Rectangle object,
-        * returns the area of intersection as a Rectangle object.
-        * If the rectangles do not intersect, this method returns an empty Rectangle object with its properties set to 0.
-        *
-        * @method intersection
-        * @param toIntersect {Kiwi.Geom.Rectangle} The Rectangle object to compare against to see if it intersects with this Rectangle object.
-        * @param [output] {Kiwi.Geom.Rectangle} Optional Rectangle object. If given the intersection values will be set into this object, otherwise a brand new Rectangle object will be created and returned.
-        * @return {Kiwi.Geom.Rectangle} A Rectangle object that equals the area of intersection. If the rectangles do not intersect, this method returns an empty Rectangle object; that is, a rectangle with its x, y, width, and height properties set to 0.
-        * @public
-        */
-        public intersection(toIntersect: Rectangle, output: Rectangle = new Rectangle): Rectangle {
-
-            if (this.intersects(toIntersect) === true)
-            {
-                output.x = Math.max(toIntersect.x, this.x);
-                output.y = Math.max(toIntersect.y, this.y);
-                output.width = Math.min(toIntersect.right, this.right) - output.x;
-                output.height = Math.min(toIntersect.bottom, this.bottom) - output.y;
-            }
-
-            return output;
-
-        }
-
-        /**
-        * Determines whether the object specified in the toIntersect parameter intersects with this Rectangle object. 
-        * This method checks the x, y, width, and height properties of the specified Rectangle object to see if it intersects with this Rectangle object.
-        *
-        * @method intersects
-        * @param toIntersect {Kiwi.Geom.Rectangle} The Rectangle object to compare against to see if it intersects with this Rectangle object.
-        * @return {boolean} A value of true if the specified object intersects with this Rectangle object; otherwise false.
-        * @public
-        **/
-        public intersects(toIntersect: Rectangle): boolean {
-
-            if (toIntersect.x &gt; this.right - 1) {
-                return false;
-            }
-
-            if (toIntersect.right - 1 &lt; this.x) {
-                return false;
-            }
-
-            if (toIntersect.bottom - 1 &lt; this.y) {
-                return false;
-            }
-
-            if (toIntersect.y &gt; this.bottom - 1) {
-                return false;
-            }
-
-            return true;
-
-        }
-
-        /**
-        * Checks for overlaps between this Rectangle and the given Rectangle. Returns an object with boolean values for each check.
-        *
-        * @method overlap
-        * @param rect {Kiwi.Geom.Rectangle} 
-        * @return {Object} An object containing the overlapping details between the two Rectangles
-        * @todo Move to an IntersectResult? Do not want to be generating all of these values each time this is called
-        * @public
-        */
-        public overlap(rect: Rectangle): any {
-
-            var result = { top: false, bottom: false, left: false, right: false, contains: false, contained: false };
-            var interRect: Rectangle = this.intersection(rect);
-
-            if ( interRect.isEmpty ) return result;
-            if ( this.containsRect(rect) ) result.contains = true;
-            if ( rect.containsRect(this) ) result.contained = true;
-            if ( this.top &lt; rect.top ) result.top = true;
-            if ( this.bottom &gt; rect.bottom ) result.bottom = true;
-            if ( this.left &lt; rect.left ) result.left = true;
-            if ( this.right &gt; rect.right ) result.right = true;
-
-            return result;
-
-        }
-
-        /**
-        * Determines whether or not this Rectangle object is empty.
-        * @method isEmpty
-        * @return {boolean} A value of true if the Rectangle object&#x27;s width or height is less than or equal to 0; otherwise false.
-        * @public
-        */
-        public isEmpty(): boolean {
-
-            if (this.width &lt; 1 || this.height &lt; 1)
-            {
-                return true;
-            }
-
-            return false;
-
-        }
-
-        /**
-        * Adjusts the location of the Rectangle object, as determined by its top-left corner, by the specified amounts.
-        * 
-        * @method offset
-        * @param dx {Number} Moves the x value of the Rectangle object by this amount.
-        * @param dy {Number} Moves the y value of the Rectangle object by this amount.
-        * @return {Kiwi.Geom.Rectangle} This Rectangle object.
-        * @public
-        */
-        public offset(dx: number, dy: number): Rectangle {
-
-            if (!isNaN(dx) &amp;&amp; !isNaN(dy))
-            {
-                this.x += dx;
-                this.y += dy;
-            }
-
-            return this;
-
-        }
-
-        /**
-        * Adjusts the location of the Rectangle object using a Point object as a parameter. 
-        * This method is similar to the Rectangle.offset() method, except that it takes a Point object as a parameter.
-        * 
-        * @method offsetPoint
-        * @param point {Kiwi.Geom.Point} A Point object to use to offset this Rectangle object.
-        * @return {Kiwi.Geom.Rectangle} This Rectangle object.
-        * @public
-        */
-        public offsetPoint(point: Point): Rectangle {
-
-            return this.offset(point.x, point.y);
-
-        }
-
-        /**
-        * Sets all of the Rectangle object&#x27;s properties to 0. 
-        * A Rectangle object is empty if its width or height is less than or equal to 0.
-        * 
-        * @method setEmpty
-        * @return {Kiwi.Geom.Rectangle} This rectangle object
-        * @public
-        */
-        public setEmpty() {
-
-            return this.setTo(0, 0, 0, 0);
-
-        }
-
-        /**
-        * Sets the properties of Rectangle to the specified values.
-        * 
-        * @method setTo
-        * @param x {Number} x The x coordinate of the top-left corner of the rectangle.
-        * @param y {Number} y The y coordinate of the top-left corner of the rectangle.
-        * @param width {Number} width The width of the rectangle in pixels.
-        * @param height {Number} height The height of the rectangle in pixels.
-        * @return {Kiwi.Geom.Rectangle} This rectangle object
-        * @public
-        */
-        public setTo(x: number, y: number, width: number, height: number): Rectangle {
-
-            if (!isNaN(x) &amp;&amp; !isNaN(y) &amp;&amp; !isNaN(width) &amp;&amp; !isNaN(height))
-            {
-                this.x = x;
-                this.y = y;
-
-                if (width &gt;= 0)
-                {
-                    this.width = width;
-                }
-
-                if (height &gt;= 0)
-                {
-                    this.height = height;
-                }
-            }
-
-            return this;
-
-        }
-
-        /**
-        * Adds two rectangles together to create a new Rectangle object, by filling in the horizontal and vertical space between the two rectangles.
-        * 
-        * @method union
-        * @param toUnion {Kiwi.Geom.Rectangle} toUnion A Rectangle object to add to this Rectangle object.
-        * @param [output] {Kiwi.Geom.Rectangle} output Optional Rectangle object. If given the new values will be set into this object, otherwise a new Rectangle object will be created.
-        * @return {Kiwi.Geom.Rectangle} A Rectangle object that is the union of the two rectangles.
-        * @public
-        */
-        public union(toUnion: Rectangle, output: Rectangle = new Rectangle): Rectangle {
-
-            return output.setTo(
-                    Math.min(toUnion.x, this.x),
-                    Math.min(toUnion.y, this.y),
-                    Math.max(toUnion.right, this.right),
-                    Math.max(toUnion.bottom, this.bottom)
-                  );
-
-        }
-
-        /**
-        * Scales this Rectangle by values passed. 
-        *
-        * @method scale
-        * @param x {number}
-        * @param y {number}
-        * @param translation {Kiwi.Geom.Point}
-        * @return {Kiwi.Geom.Rectangle}
-        * @public
-        */
-        public scale(x:number,y:number,translation:Kiwi.Geom.Point): Rectangle {
-
-            var trans: Kiwi.Geom.Transform = new Kiwi.Geom.Transform;
-            trans.scaleX = x;
-            trans.scaleY = y;
-            trans.x = translation.x;
-            trans.y = translation.y;
-            
-            var tl: Kiwi.Geom.Point = this.topLeft;
-            trans.transformPoint(tl);
-            this.topLeft = tl;
-
-            this.width *= x;
-            this.height *= y;
-
-            return this;
-        }
-
-        /**
-        * Returns a string representation of this object.
-        * @method toString
-        * @return {String} a string representation of the instance.
-        */
-        public toString(): string {
-
-            return &quot;[{Rectangle (x=&quot; + this.x + &quot; y=&quot; + this.y + &quot; width=&quot; + this.width + &quot; height=&quot; + this.height + &quot; isEmpty=&quot; + this.isEmpty() + &quot;)}]&quot;;
-
-        }
-
-    }
+	/**
+	* An area defined by its position, as indicated by its top-left corner (x,y) and width and height
+	*
+	* @class Rectangle
+	* @namespace Kiwi.Geom
+	* @constructor
+	* @param [x=0] {Number} The x coordinate of the top-left corner of the rectangle.
+	* @param [y=0] {Number} The y coordinate of the top-left corner of the rectangle.
+	* @param [width=0] {Number} width The width of the rectangle in pixels.
+	* @param [height=0] {Number} height The height of the rectangle in pixels.
+	* @return {Kiwi.Geom.Rectangle} This rectangle object
+	* 
+	*/
+	export class Rectangle {
+
+		/**
+		* Creates a new Rectangle object with the top-left corner specified by the x and y parameters and with the specified width and height parameters. If you call this function without parameters, a rectangle with x, y, width, and height properties set to 0 is created.
+		**/
+		constructor (x: number = 0, y: number = 0, width: number = 0, height: number = 0) {
+
+			this.setTo(x, y, width, height);
+
+		}
+
+		/**
+		* The type of this object.
+		* @method objType
+		* @return {String} &quot;Rectangle&quot;
+		* @public
+		*/
+		public objType() {
+			return &quot;Rectangle&quot;;
+		}
+
+		/** 
+		* The x coordinate of the top-left corner of the rectangle
+		* @property x
+		* @type Number
+		* @default 0
+		* @public
+		*/
+		public x: number = 0;
+
+		/** 
+		* The y coordinate of the top-left corner of the rectangle
+		* @property y
+		* @type Number
+		* @default 0
+		* @public
+		*/
+		public y: number = 0;
+
+		/** 
+		* The width of the rectangle in pixels
+		* @property width
+		* @type Number
+		* @default 0
+		* @public
+		*/
+		public width: number = 0;
+
+		/** 
+		* The height of the rectangle in pixels
+		* @property height
+		* @type Number
+		* @default 0
+		* @public
+		*/
+		public height: number = 0;
+
+		/**
+		* The sum of the y and height properties. 
+		* Changing the bottom property of a Rectangle object has no effect on the x, y and width properties, 
+		* but does change the height property.
+		*
+		* @property bottom
+		* @type Number
+		* @public
+		*/
+		public set bottom(value: number) {
+
+			if (value)
+			{
+				if (value &lt; this.y)
+				{
+					this.height = 0;
+				}
+				else
+				{
+					this.height = value;
+				}
+			}
+
+		}
+
+		public get bottom(): number {
+
+			return this.y + this.height;
+
+		}
+
+		/**
+		* Returns a Point containing the location of the center of the Rectangle, relative to the top left edge
+		* @property center
+		* @type Kiwi.Geom.Point
+		* @readOnly 
+		* @public
+		*/
+		public get center(): Point {
+
+			var output: Point = new Point();
+			return output.setTo(Math.round(this.width / 2), Math.round(this.height / 2));
+
+		}
+
+		/**
+		* Returns a Point containing the location of the Rectangle&#x27;s bottom-right corner, determined by the values of the right and bottom properties.
+		* @property bottomRight
+		* @type Kiwi.Geom.Point 
+		* @public
+		*/
+		public set bottomRight(value: Point) {
+			
+			if (value)
+			{
+				this.right = value.x;
+				this.bottom = value.y;
+			}
+
+		}
+
+		public get bottomRight(): Point {
+
+			var output: Point = new Point();
+			return output.setTo(this.right, this.bottom);
+
+		}
+
+		/**
+		* The x coordinate of the top-left corner of the rectangle. Changing the left property of a Rectangle object has no effect on the y and height properties. However it does affect the width property, whereas changing the x value does not affect the width property.
+		* @property left
+		* @type Number 
+		* @public
+		*/
+		public set left(value: number) {
+
+			if (value)
+			{
+				var diff = this.x - value;
+
+				if (this.width + diff &lt; 0)
+				{
+					this.width = 0;
+
+					this.x = value;
+				}
+				else
+				{
+					this.width += diff;
+
+					this.x = value;
+				}
+			}
+
+		}
+
+		public get left(): number {
+
+			return this.x;
+
+		}
+
+		/**
+		* The sum of the x and width properties. Changing the right property of a Rectangle object has no effect on the x, y and height properties. However it does affect the width property.
+		* @property right
+		* @type Number 
+		* @public
+		*/
+		public set right(value: number) {
+
+			if (value)
+			{
+				if (value &lt; this.x)
+				{
+					this.width = 0;
+				}
+				else
+				{
+					this.width = value - this.x;
+				}
+			}
+
+		}
+
+		public get right(): number {
+
+			return this.x + this.width;
+
+		}
+
+		/**
+		* The size of the Rectangle object, expressed as a Point object with the values of the width and height properties.
+		* @property size
+		* @type Kiwi.Geom.Point
+		* @readOnly
+		* @public
+		*/
+		public get size(): Point {
+
+			var output: Point = new Point();
+			return output.setTo(this.width, this.height);
+
+		}
+
+		/**
+		* The volume of the Rectangle object in pixels, derived from width * height
+		* @property volume
+		* @type Number
+		* @readOnly 
+		* @return
+		*/
+		public get volume(): number {
+
+			return this.width * this.height;
+
+		}
+
+		/**
+		* The perimeter size of the Rectangle object in pixels. This is the sum of all 4 sides.
+		* @property perimeter
+		* @type Number
+		* @readOnly 
+		* @public
+		*/
+		public get perimeter(): number {
+
+			return (this.width * 2) + (this.height * 2);
+
+		}
+
+		/**
+		* The y coordinate of the top-left corner of the rectangle. 
+		* Changing the top property of a Rectangle object has no effect on the x and width properties.
+		* However it does affect the height property, whereas changing the y value does not affect the height property.
+		*
+		* @method top
+		* @return {Number} 
+		* @public
+		*/
+		public set top(value: number) {
+
+			if (value)
+			{
+				var diff = this.y - value;
+
+				if (this.height + diff &lt; 0)
+				{
+					this.height = 0;
+
+					this.y = value;
+				}
+				else
+				{
+					this.height += diff;
+
+					this.y = value;
+				}
+			}
+
+		}
+
+		public get top(): number {
+
+			return this.y;
+
+		}
+		/**
+		* The location of the Rectangle object&#x27;s top-left corner, determined by the x and y coordinates of the point.
+		* @property topLeft
+		* @type Kiwi.Geom.Point
+		* @public
+		*/
+		public set topLeft(value: Point) {
+
+			if (value)
+			{
+				this.x = value.x;
+				this.y = value.y;
+			}
+
+		}
+
+		public get topLeft(): Point {
+
+			var output: Point = new Point();
+			return output.setTo(this.x, this.y);
+
+		}
+
+		/**
+		* Returns a new Rectangle object with the same values for the x, y, width, and height properties as the original Rectangle object.
+		* @method clone
+		* @param [output] {Kiwi.Geom.Rectangle} Optional Rectangle object. If given the values will be set into the object, otherwise a brand new Rectangle object will be created and returned.
+		* @return {Kiwi.Geom.Rectangle}
+		* @public
+		*/
+		public clone(output: Rectangle = new Rectangle): Rectangle {
+
+			return output.setTo(this.x, this.y, this.width, this.height);
+
+		}
+
+		/**
+		* Determines whether the specified coordinates are contained within the region defined by this Rectangle object.
+		* @method contains
+		* @param {Number} x The x coordinate of the point to test.
+		* @param {Number} y The y coordinate of the point to test.
+		* @return {boolean} A value of true if the Rectangle object contains the specified point; otherwise false.
+		* @public
+		*/
+		public contains(x: number, y: number): boolean {
+
+			if (x &gt;= this.x &amp;&amp; x &lt;= this.right &amp;&amp; y &gt;= this.y &amp;&amp; y &lt;= this.bottom)
+			{
+				return true;
+			}
+
+			return false;
+
+		}
+
+		/**
+		* Determines whether the specified point is contained within the rectangular region defined by this Rectangle object.
+		* This method is similar to the Rectangle.contains() method, except that it takes a Point object as a parameter.
+		*
+		* @method containsPoint
+		* @param {Kiwi.Geom.Point} point The point object being checked. Can be Kiwi.Geom.Point or any object with .x and .y values.
+		* @return {boolean} A value of true if the Rectangle object contains the specified point; otherwise false.
+		* @public
+		*/
+		public containsPoint(point: Point): boolean {
+
+			return this.contains(point.x, point.y);
+
+		}
+
+		/**
+		* Determines whether the Rectangle object specified by the rect parameter is contained within this Rectangle object. 
+		* A Rectangle object is said to contain another if the second Rectangle object falls entirely within the boundaries of the first.
+		*
+		* @method containsRect
+		* @param rect {Kiwi.Geom.Rectangle} The rectangle object being checked.
+		* @return {boolean} A value of true if the Rectangle object contains the specified point; otherwise false.
+		* @public
+		*/
+		public containsRect(rect: Rectangle): boolean {
+
+			//	If the given rect has a larger volume than this one then it can never contain it
+			if (rect.volume &gt; this.volume)
+			{
+				return false;
+			}
+
+			if (rect.x &gt;= this.x &amp;&amp; rect.y &gt;= this.y &amp;&amp; rect.right &lt;= this.right &amp;&amp; rect.bottom &lt;= this.bottom)
+			{
+				return true;
+			}
+
+			return false;
+
+		}
+
+		/**
+		* Copies all of rectangle data from the source Rectangle object into the calling Rectangle object.
+		*
+		* @method copyFrom
+		* @param source {Kiwi.Geom.Rectangle} The source rectangle object to copy from
+		* @return {Kiwi.Geom.Rectangle} This rectangle object
+		* @public
+		*/
+		public copyFrom(source: Rectangle): Rectangle {
+
+			return this.setTo(source.x, source.y, source.width, source.height);
+
+		}
+
+		/**
+		* Copies all the rectangle data from this Rectangle object into the destination Rectangle object.
+		* Creates a new rectangle if one was not passed.
+		*
+		* @method copyTo
+		* @param [target] {Kiwi.Geom.Rectangle} The destination rectangle object to copy in to. Creates a new rectangle if one is not passed.
+		* @return {Kiwi.Geom.Rectangle} The destination rectangle object
+		* @public
+		*/
+		public copyTo(target: Rectangle = new Rectangle()): Rectangle {
+
+			return target.copyFrom(this);
+
+		}
+
+		/**
+		* Determines whether the object specified in the toCompare parameter is equal to this Rectangle object.
+		* This method compares the x, y, width, and height properties of an object against the same properties of this Rectangle object.
+		*
+		* @method equals
+		* @param  toCompare {Kiwi.Geom.Rectangle} toCompare The rectangle to compare to this Rectangle object.
+		* @return {boolean} A value of true if the object has exactly the same values for the x, y, width, and height properties as this Rectangle object; otherwise false.
+		* @public
+		*/
+		public equals(toCompare: Rectangle): boolean {
+
+			if (this.x === toCompare.x &amp;&amp; this.y === toCompare.y &amp;&amp; this.width === toCompare.width &amp;&amp; this.height === toCompare.height)
+			{
+				return true;
+			}
+
+			return false;
+
+		}
+
+		/**
+		* Increases the size of the Rectangle object by the specified amounts, in pixels.
+		*
+		* The center point of the Rectangle object stays the same,
+		* and its size increases to the left and right by the dx value,
+		* and to the top and the bottom by the dy value.
+		*
+		* @method inflate
+		* @param dx {Number} dx The amount to be added to the left side of this Rectangle.
+		* @param dy {Number} dy The amount to be added to the bottom side of this Rectangle.
+		* @return {Kiwi.Geom.Rectangle} This Rectangle object.
+		* @public
+		*/
+		public inflate(dx: number, dy: number): Rectangle {
+
+			if (!isNaN(dx) &amp;&amp; !isNaN(dy))
+			{
+				this.x -= dx;
+				this.width += 2 * dx;
+
+				this.y -= dy;
+				this.height += 2 * dy;
+			}
+
+			return this;
+
+		}
+
+		/**
+		* Increases the size of the Rectangle object. This method is similar to the Rectangle.inflate() method except it takes a Point object as a parameter.
+		*
+		* @method inflatePoint
+		* @param point {Kiwi.Geom.Point} The x property of this Point object is used to increase the horizontal dimension of the Rectangle object. The y property is used to increase the vertical dimension of the Rectangle object.
+		* @return {Kiwi.Geom.Rectangle} This Rectangle object.
+		* @public
+		*/
+		public inflatePoint(point: Point): Rectangle {
+
+			return this.inflate(point.x, point.y);
+
+		}
+
+		/**
+		* If the Rectangle object specified in the toIntersect parameter intersects with this Rectangle object,
+		* returns the area of intersection as a Rectangle object.
+		* If the rectangles do not intersect, this method returns an empty Rectangle object with its properties set to 0.
+		*
+		* @method intersection
+		* @param toIntersect {Kiwi.Geom.Rectangle} The Rectangle object to compare against to see if it intersects with this Rectangle object.
+		* @param [output] {Kiwi.Geom.Rectangle} Optional Rectangle object. If given the intersection values will be set into this object, otherwise a brand new Rectangle object will be created and returned.
+		* @return {Kiwi.Geom.Rectangle} A Rectangle object that equals the area of intersection. If the rectangles do not intersect, this method returns an empty Rectangle object; that is, a rectangle with its x, y, width, and height properties set to 0.
+		* @public
+		*/
+		public intersection(toIntersect: Rectangle, output: Rectangle = new Rectangle): Rectangle {
+
+			if (this.intersects(toIntersect) === true)
+			{
+				output.x = Math.max(toIntersect.x, this.x);
+				output.y = Math.max(toIntersect.y, this.y);
+				output.width = Math.min(toIntersect.right, this.right) - output.x;
+				output.height = Math.min(toIntersect.bottom, this.bottom) - output.y;
+			}
+
+			return output;
+
+		}
+
+		/**
+		* Determines whether the object specified in the toIntersect parameter intersects with this Rectangle object. 
+		* This method checks the x, y, width, and height properties of the specified Rectangle object to see if it intersects with this Rectangle object.
+		*
+		* @method intersects
+		* @param toIntersect {Kiwi.Geom.Rectangle} The Rectangle object to compare against to see if it intersects with this Rectangle object.
+		* @return {boolean} A value of true if the specified object intersects with this Rectangle object; otherwise false.
+		* @public
+		**/
+		public intersects(toIntersect: Rectangle): boolean {
+
+			if (toIntersect.x &gt; this.right - 1) {
+				return false;
+			}
+
+			if (toIntersect.right - 1 &lt; this.x) {
+				return false;
+			}
+
+			if (toIntersect.bottom - 1 &lt; this.y) {
+				return false;
+			}
+
+			if (toIntersect.y &gt; this.bottom - 1) {
+				return false;
+			}
+
+			return true;
+
+		}
+
+		/**
+		* Checks for overlaps between this Rectangle and the given Rectangle. Returns an object with boolean values for each check.
+		*
+		* @method overlap
+		* @param rect {Kiwi.Geom.Rectangle} 
+		* @return {Object} An object containing the overlapping details between the two Rectangles
+		* @todo Move to an IntersectResult? Do not want to be generating all of these values each time this is called
+		* @public
+		*/
+		public overlap(rect: Rectangle): any {
+
+			var result = { top: false, bottom: false, left: false, right: false, contains: false, contained: false };
+			var interRect: Rectangle = this.intersection(rect);
+
+			if ( interRect.isEmpty ) return result;
+			if ( this.containsRect(rect) ) result.contains = true;
+			if ( rect.containsRect(this) ) result.contained = true;
+			if ( this.top &lt; rect.top ) result.top = true;
+			if ( this.bottom &gt; rect.bottom ) result.bottom = true;
+			if ( this.left &lt; rect.left ) result.left = true;
+			if ( this.right &gt; rect.right ) result.right = true;
+
+			return result;
+
+		}
+
+		/**
+		* Determines whether or not this Rectangle object is empty.
+		* @method isEmpty
+		* @return {boolean} A value of true if the Rectangle object&#x27;s width or height is less than or equal to 0; otherwise false.
+		* @public
+		*/
+		public isEmpty(): boolean {
+
+			if (this.width &lt; 1 || this.height &lt; 1)
+			{
+				return true;
+			}
+
+			return false;
+
+		}
+
+		/**
+		* Adjusts the location of the Rectangle object, as determined by its top-left corner, by the specified amounts.
+		* 
+		* @method offset
+		* @param dx {Number} Moves the x value of the Rectangle object by this amount.
+		* @param dy {Number} Moves the y value of the Rectangle object by this amount.
+		* @return {Kiwi.Geom.Rectangle} This Rectangle object.
+		* @public
+		*/
+		public offset(dx: number, dy: number): Rectangle {
+
+			if (!isNaN(dx) &amp;&amp; !isNaN(dy))
+			{
+				this.x += dx;
+				this.y += dy;
+			}
+
+			return this;
+
+		}
+
+		/**
+		* Adjusts the location of the Rectangle object using a Point object as a parameter. 
+		* This method is similar to the Rectangle.offset() method, except that it takes a Point object as a parameter.
+		* 
+		* @method offsetPoint
+		* @param point {Kiwi.Geom.Point} A Point object to use to offset this Rectangle object.
+		* @return {Kiwi.Geom.Rectangle} This Rectangle object.
+		* @public
+		*/
+		public offsetPoint(point: Point): Rectangle {
+
+			return this.offset(point.x, point.y);
+
+		}
+
+		/**
+		* Sets all of the Rectangle object&#x27;s properties to 0. 
+		* A Rectangle object is empty if its width or height is less than or equal to 0.
+		* 
+		* @method setEmpty
+		* @return {Kiwi.Geom.Rectangle} This rectangle object
+		* @public
+		*/
+		public setEmpty() {
+
+			return this.setTo(0, 0, 0, 0);
+
+		}
+
+		/**
+		* Sets the properties of Rectangle to the specified values.
+		* 
+		* @method setTo
+		* @param x {Number} x The x coordinate of the top-left corner of the rectangle.
+		* @param y {Number} y The y coordinate of the top-left corner of the rectangle.
+		* @param width {Number} width The width of the rectangle in pixels.
+		* @param height {Number} height The height of the rectangle in pixels.
+		* @return {Kiwi.Geom.Rectangle} This rectangle object
+		* @public
+		*/
+		public setTo(x: number, y: number, width: number, height: number): Rectangle {
+
+			if (!isNaN(x) &amp;&amp; !isNaN(y) &amp;&amp; !isNaN(width) &amp;&amp; !isNaN(height))
+			{
+				this.x = x;
+				this.y = y;
+
+				if (width &gt;= 0)
+				{
+					this.width = width;
+				}
+
+				if (height &gt;= 0)
+				{
+					this.height = height;
+				}
+			}
+
+			return this;
+
+		}
+
+		/**
+		* Adds two rectangles together to create a new Rectangle object, by filling in the horizontal and vertical space between the two rectangles.
+		* 
+		* @method union
+		* @param toUnion {Kiwi.Geom.Rectangle} toUnion A Rectangle object to add to this Rectangle object.
+		* @param [output] {Kiwi.Geom.Rectangle} output Optional Rectangle object. If given the new values will be set into this object, otherwise a new Rectangle object will be created.
+		* @return {Kiwi.Geom.Rectangle} A Rectangle object that is the union of the two rectangles.
+		* @public
+		*/
+		public union(toUnion: Rectangle, output: Rectangle = new Rectangle): Rectangle {
+
+			return output.setTo(
+					Math.min(toUnion.x, this.x),
+					Math.min(toUnion.y, this.y),
+					Math.max(toUnion.right, this.right),
+					Math.max(toUnion.bottom, this.bottom)
+				  );
+
+		}
+
+		/**
+		* Scales this Rectangle by values passed. 
+		*
+		* @method scale
+		* @param x {number}
+		* @param y {number}
+		* @param translation {Kiwi.Geom.Point}
+		* @return {Kiwi.Geom.Rectangle}
+		* @public
+		*/
+		public scale(x:number,y:number,translation:Kiwi.Geom.Point): Rectangle {
+
+			var trans: Kiwi.Geom.Transform = new Kiwi.Geom.Transform;
+			trans.scaleX = x;
+			trans.scaleY = y;
+			trans.x = translation.x;
+			trans.y = translation.y;
+			
+			var tl: Kiwi.Geom.Point = this.topLeft;
+			trans.transformPoint(tl);
+			this.topLeft = tl;
+
+			this.width *= x;
+			this.height *= y;
+
+			return this;
+		}
+
+		/**
+		* Returns a string representation of this object.
+		* @method toString
+		* @return {String} a string representation of the instance.
+		*/
+		public toString(): string {
+
+			return &quot;[{Rectangle (x=&quot; + this.x + &quot; y=&quot; + this.y + &quot; width=&quot; + this.width + &quot; height=&quot; + this.height + &quot; isEmpty=&quot; + this.isEmpty() + &quot;)}]&quot;;
+
+		}
+
+	}
 
 }
+
     </pre>
 </div>
 
diff --git a/docs/files/src_geom_Transform.ts.html b/docs/files/src_geom_Transform.ts.html
index c2dd057..56d855c 100644
--- a/docs/files/src_geom_Transform.ts.html
+++ b/docs/files/src_geom_Transform.ts.html
@@ -372,699 +372,700 @@ <h1 class="file-heading">File: src/geom/Transform.ts</h1>
 
 module Kiwi.Geom {
 
-    /**
-    * Represents position, scale, rotation and rotationPoint of an Entity.
-    * - Values can be transformed with a 3x3 affine transformation matrix, which each transform is assigned.
-    * - A tranform can be assigned a parent, which may in turn have it&#x27;s own parent, thereby creating a tranform inheritence heirarchy
-    * - A concatenated transformation matrix, representing the combined matrices of the transform and its ancestors.
-    *
-    * @class Transform
-    * @namespace Kiwi.Geom
-    * @constructor
-    * @param [x=0] {Number} X position of the transform.
-    * @param [y=0] {Number} Y position of the transform.
-    * @param [scaleX=1] {Number} X scaling of the transform.
-    * @param [scaleY=1] {Number} Y scaling of the transform.
-    * @param [rotation=0] {Number} Rotation of the transform in radians.
-    * @param [rotX=0] {Number} rotationPoint offset on X axis.
-    * @param [rotY=0] {Number} rotationPoint offset on Y axis.
-    * @return {Transform} This object.
-    *
-    */
-    export class Transform {
-
-        constructor(x: number = 0, y: number = 0, scaleX: number = 1, scaleY: number = 1, rotation: number = 0, rotPointX: number = 0, rotPointY: number = 0) {
-
-            this.setTransform(x, y, scaleX, scaleY, rotation, rotPointX, rotPointY);
-
-            this._matrix = new Matrix();
-
-            this._matrix.setFromOffsetTransform(this._x, this._y, this._scaleX, this._scaleY, this._rotation, this._rotPointX, this._rotPointY);
-
-            this._cachedConcatenatedMatrix = this.getConcatenatedMatrix();
-            this._concatMatrix = new Matrix();
-
-        }
-
-        /**
-        * The type of this object.
-        * @method objType
-        * @return {String} &quot;Transform&quot;
-        * @public
-        */
-        public objType() {
-            return &quot;Transform&quot;;
-        }
-
-        /** 
-        * X position of the transform
-        * @property _x
-        * @type Number
-        * @default 0
-        * @private
-        */
-        private _x: number = 0;
-
-        /** 
-        * Return the X value of the transform.
-        * @property x
-        * @type Number
-        * @public
-        */
-        public set x(value: number) {
-            
-            this._x = value;
-
-        }
-        public get x():number {
-            return this._x;
-        }
-
-        /** 
-        * Y position of the transform
-        * @property _y
-        * @type Number
-        * @default 0
-        * @private
-        */
-        private _y: number = 0;
-
-        /** 
-        * Return the Y value of the transform.
-        * @property y
-        * @type Number
-        * @public
-        */
-        public set y(value: number) {
-            this._y = value;
-        }
-        public get y(): number {
-            return this._y;
-        }
-
-
-        /** 
-        * X scaleof the transform
-        * @property _scaleX
-        * @type Number
-        * @default 1
-        * @private
-        */
-        private _scaleX: number = 1;
-
-        /** 
-        * Return the X scale value of the transform.
-        * @property scaleX
-        * @type Number
-        * @public
-        */
-        public set scaleX(value: number) {
-            this._scaleX = value;
-        }
-
-        public get scaleX(): number {
-            return this._scaleX;
-        }
-
-        /** 
-        * Y scale of the transform
-        * @property _scaleY
-        * @type Number
-        * @default 1
-        * @private
-        */
-        private _scaleY: number = 1;
-
-        /** 
-        * Return the Y scale value of the transform.
-        * @property scaleY
-        * @type Number
-        * @public
-        */
-        public set scaleY(value: number) {
-            this._scaleY = value;
-        }
-        public get scaleY():number {
-            return this._scaleY;
-        }
-
-        /** 
-        * Rotation of the transform in radians.
-        * @property _rotation
-        * @type Number
-        * @default 0
-        * @private
-        */
-        private _rotation: number = 0;
-
-        /** 
-        * Return the rotation value of the transform in radians.
-        * @property rotation
-        * @type Number
-        * @public
-        */
-        public set rotation(value: number) {
-            this._rotation = value;
-        }
-
-        public get rotation():number {
-            return this._rotation;
-        }
-
-        /** 
-        * Rotation offset on X axis.
-        * @property _rotPointX
-        * @type Number
-        * @default 0
-        * @private
-        */
-        private _rotPointX: number = 0;
-
-        /** 
-        * Return the rotation offset from the x axis.
-        * @property rotPointX
-        * @type Number
-        * @default 0
-        * @public
-        */
-        public set rotPointX(value: number) {
-            this._rotPointX = value;
-        }
-
-        public get rotPointX(): number {
-            return this._rotPointX;
-        }
-
-        /** 
-        * Rotation offset on Y axis.
-        * @property _rotPointY
-        * @type Number
-        * @default 0
-        * @private
-        */
-        private _rotPointY: number = 0;
-
-        /** 
-        * Return the rotation offset from the y axis.
-        * @property rotPointY
-        * @type Number
-        * @public
-        */
-        public set rotPointY(value: number) {
-            this._rotPointY = value;
-        }
-
-        public get rotPointY(): number {
-            return this._rotPointY;
-        }
-
-        /**
-        * Return the anchor point value from the X axis. (Aliases to rotPointX.)
-        * @property anchorPointX
-        * @type Number
-        * @public
-        * @since 1.1.0
-        */
-        public set anchorPointX(value: number) {
-            this.rotPointX = value;
-        }
-        public get anchorPointX(): number {
-            return( this.rotPointX );
-        }
-
-        /**
-        * Return the anchor point value from the Y axis. (Aliases to rotPointY.)
-        * @property anchorPointY
-        * @type Number
-        * @public
-        * @since 1.1.0
-        */
-        public set anchorPointY(value: number) {
-            this._rotPointY = value;
-        }
-        public get anchorPointY(): number {
-            return( this._rotPointY );
-        }
-
-        /** 
-        * A 3x3 transformation matrix object that can be use this tranform to manipulate points or the context transformation.
-        * @property _matrix
-        * @type Kiwi.Geom.Matrix
-        * @private
-        */
-        private _matrix: Matrix;
-
-        /** 
-        * Return the Matrix being used by this Transform
-        * @property matrix
-        * @type Kiwi.Geom.Matrix
-        * @readOnly
-        * @public
-        */
-        public get matrix(): Matrix {
-
-            return this._matrix;
-
-        }
-
-        /** 
-        * The most recently calculated matrix from getConcatenatedMatrix.
-        * Not used or updated after object creation.
-        * Candidate for deprecation.
-        * @property _cachedConcatenatedMatrix
-        * @type Kiwi.Geom.Matrix
-        * @private
-        */
-        private _cachedConcatenatedMatrix: Matrix;
-
-        /** 
-        * Temporary matrix used in concatenation operations
-        * @property _concatMatrix
-        * @type Kiwi.Geom.Matrix
-        * @private
-        */
-        private _concatMatrix: Matrix;
-
-        /** 
-        * Return the x of this transform translated to world space.
-        * @property worldX
-        * @type Number
-        * @readOnly
-        * @public
-        */
-        public get worldX(): number {
-
-            return this.getConcatenatedMatrix().tx - this._rotPointX;
-
-        }
-
-        /** 
-        * Return the y of this transform translated to world space.
-        * @property worldY
-        * @type Number
-        * @readOnly
-        * @public
-        */
-        public get worldY(): number {
-
-            return this.getConcatenatedMatrix().ty - this._rotPointY;
-
-        }
-
-
-        /** 
-        * The parent transform. If set to null there is no parent. Otherwise this is used by getConcatenatedMatrix to offset the current transforms by the another matrix
-        * @property _parent
-        * @type Kiwi.Geom.Transform
-        * @default null
-        * @private
-        */
-        private _parent: Transform = null;
-
-        /** 
-        * Return the parent Transform. If the transform does not have a parent this null is returned.
-        * @property parent
-        * @type Kiwi.Geom.Transform
-        * @default null
-        * @public
-        */
-        public set parent(value: Transform) {
-            if(!this.checkAncestor(value)) {
-                this._parent = value;
-            }
-        }
-
-        public get parent(): Transform {
-            return this._parent;
-        }
-
-
-        /**
-        * Private copy.
-        * Whether the Transform is locked. In locked mode, the Transform
-        * will not update its matrix, saving on computation.
-        * However, it will still follow its parent.
-        * @property _locked
-        * @type boolean
-        * @default false
-        * @private
-        * @since 1.2.0
-        */
-        private _locked: boolean = false;
-
-        /**
-        * Whether the Transform is locked. In locked mode, the Transform
-        * will not update its matrix, saving on computation.
-        * However, it will still follow its parent.
-        * When locked is set to true, it will set the matrix according to
-        * current transform values.
-        * @property locked
-        * @type boolean
-        * @default false
-        * @public
-        * @since 1.2.0
-        */
-        public set locked( value: boolean ) {
-            this._locked = value;
-            if ( this._locked ) {
-                this._matrix.setFromOffsetTransform(
-                    this.x, this.y,
-                    this.scaleX, this.scaleY,
-                    this.rotation,
-                    this.anchorPointX, this.anchorPointY );
-            }
-        }
-        public get locked(): boolean {
-            return this._locked;
-        }
-
-
-        /**
-        * Private copy.
-        * Whether to ignore its parent when concatenating matrices.
-        * If true, it won&#x27;t compute parent matrices.
-        * This can save computation, but prevents it from following
-        * its parent&#x27;s transforms.
-        * Use this to save some processor cycles if the transform isn&#x27;t
-        * following a parent and the state does not transform.
-        * @property _ignoreParent
-        * @type boolean
-        * @default false
-        * @private
-        * @since 1.2.0
-        */
-        private _ignoreParent: boolean = false;
-
-        /**
-        * Whether to ignore its parent when concatenating matrices.
-        * If true, it won&#x27;t compute parent matrices.
-        * This can save computation, but prevents it from following
-        * its parent&#x27;s transforms.
-        * Use this to save some processor cycles if the transform isn&#x27;t
-        * following a parent and the state does not transform.
-        * @property ignoreParent
-        * @type boolean
-        * @default false
-        * @public
-        * @since 1.2.0
-        */
-        public set ignoreParent( value: boolean ) {
-            this._ignoreParent = value;
-        }
-
-        public get ignoreParent(): boolean {
-            return this._ignoreParent;
-        }
-
-
-        /** 
-        * Set the X and Y values of the transform.
-        * @method setPosition
-        * @param x {Number} 
-        * @param y {Number} 
-        * @return {Kiwi.Geom.Transform} This object.
-        * @public
-        */
-        public setPosition(x: number, y: number): Transform {
-
-            this._x = x;
-            this._y = y;
-            //this.owner.dirty = true;
-
-            return this;
-        }
-
-        /** 
-        * Set the X and Y values of the transform from a point.
-        * @method setPositionPoint
-        * @param point {Kiwi.Geom.Point} point.
-        * @return {Kiwi.Geom.Transform} This object.
-        * @public
-        */
-        public setPositionFromPoint(point: Point): Transform {
-
-            this._x = point.x;
-            this._y = point.y;
-            //this.owner.dirty = true;
-
-            return this;
-
-        }
-
-        /** 
-        * Translate the X and Y value of the transform by point components.
-        * @method translatePositionFromPoint
-        * @param point {Kiwi.Geom.Point} point.
-        * @return {Kiwi.Geom.Transform} This object.
-        * @public
-        */
-        public translatePositionFromPoint(point: Point): Transform {
-
-            this._x += point.x;
-            this._y += point.y;
-            //this.owner.dirty = true;
-
-            return this;
-
-        }
-
-        /** 
-        * Return a Point representing the X and Y values of the transform.
-        * If no point is given a new Point objected will be created.
-        *
-        * @method getPositionPoint
-        * @param [output] {Kiwi.Geom.Point} The Point to output the coordinates into. Creates a new Point if none given.
-        * @return {Kiwi.Geom.Point} A point representing the X and Y values of the transform.
-        * @public
-        */
-        public getPositionPoint(output: Point = new Kiwi.Geom.Point): Point {
-
-            return output.setTo(this._x, this._y);
-
-        }
-
-        /** 
-	    * Set the X and Y scale value of the transform.
-        * This property is set only. 
-        * In the future this will be looked into and updated as needed.
-        * 
-	    * @property scale
-	    * @type Number
-        * @public
-	    */
-        public set scale(value:number) {
-
-            this._scaleX = value;
-            this._scaleY = value;
-
-        }
-
-        /** 
-        * Set the core properties of the transform.
-        *
-        * @method setTransform
-        * @param [x=0] {Number} X position of the transform.
-        * @param [y=0] {Number} Y position of the transform.
-        * @param [scaleX=1] {Number} X scaling of the transform.
-        * @param [scaleY=1] {Number} Y scaling of the transform.
-        * @param [rotation=0] {Number} Rotation of the transform in radians.
-        * @param [rotX=0] {Number} rotationPoint offset on X axis.
-        * @param [rotY=0] {Number} rotationPoint offset on Y axis.
-        * @return {Kiwi.Geom.Transform} This object.
-        * @public
-        */
-        public setTransform(x: number = 0, y: number = 0, scaleX: number = 1, scaleY: number = 1, rotation: number = 0, rotPointX: number = 0, rotPointY: number = 0): Transform {
-
-            this._x = x;
-            this._y = y;
-            this._scaleX = scaleX;
-            this._scaleY = scaleY;
-            this._rotation = rotation;
-            this._rotPointX = rotPointX;
-            this._rotPointY = rotPointY;
-
-
-            return this;
-
-        }
-
-        /** 
-        * Return the parent matrix of the transform.
-        * If there is no parent then null is returned.
-        * @method getParentMatrix
-        * @return {Kiwi.Geom.Matrix} Parent transform matrix
-        * @public
-        */
-        public getParentMatrix(): Matrix {
-
-            if (this._parent) {
-                return this._parent.getConcatenatedMatrix();
-            }
-
-            return null;
-        }
-
-        /** 
-        * Return the transformation matrix that concatenates this transform
-        * with all ancestor transforms. If there is no parent then this will
-        * return a matrix the same as this transform&#x27;s matrix.
-        * @method getConcatenatedMatrix
-        * @return {Kiwi.Geom.Matrix} The concatenated matrix.
-        * @public
-        */
-        public getConcatenatedMatrix(): Matrix {
-
-            // this._matrix.setFromOffsetTransform(this._x, this._y, this._scaleX, this._scaleY, this._rotation, this._rotPointX, this._rotPointY);
-
-            // var parentMatrix = this.getParentMatrix();
-
-            // if (parentMatrix) {
-            //     var matrix = this._matrix.clone();
-            //     matrix.prependMatrix(parentMatrix);
-            //     this._cachedConcatenatedMatrix.copyFrom(matrix);
-            //     return matrix;
-            // }
-
-            // return this._matrix;
-
-            var parentMatrix;
-
-            if ( !this._locked ) {
-                if ( this._parent ) {
-                    this._matrix.setFromOffsetTransform(
-                        this.x, this.y,
-                        this.scaleX, this.scaleY,
-                        this.rotation,
-                        this.anchorPointX - this._parent.anchorPointX,
-                        this.anchorPointY - this._parent.anchorPointY );
-                } else {
-                    this._matrix.setFromOffsetTransform(
-                        this.x, this.y,
-                        this.scaleX, this.scaleY,
-                        this.rotation,
-                        this.anchorPointX,
-                        this.anchorPointY );
-                }
-            }
-
-            if ( !this._ignoreParent ) {
-                parentMatrix = this.getParentMatrix();
-                if ( parentMatrix ) {
-                    this._concatMatrix.copyFrom( this._matrix );
-                    this._concatMatrix.prependMatrix( parentMatrix );
-                    return this._concatMatrix;
-                }
-            }
-
-            return this._matrix;
-        }
-
-
-        /** 
-	    * Apply this matrix to a an object with x and y properties representing a point and return the transformed point.
-	    * @method transformPoint
-        * @param point {Kiwi.Geom.Point} 
-        * @return {Kiwi.Geom.Point}
-        * @public
-	    */
-        public transformPoint(point: Point): Point {
-
-            var mat = this.getConcatenatedMatrix();
-
-            return mat.transformPoint(point);
-
-        }
-
-        /** 
-        * Copy another transforms data to this transform. A clone of the source matrix is created for the matrix property.
-        * @method copyFrom
-        * @param transform {Kiwi.Geom.Transform} transform. The tranform to be copied from.
-        * @return {Kiwi.Geom.Transform} This object.
-        * @public
-        */
-        public copyFrom(source: Transform): Transform {
-
-            this.setTransform(source.x, source.y, source.scaleX, source.scaleY, source.rotation, source.rotPointX, source.rotPointY);
-
-            this.parent = source.parent;
-
-            this._matrix = source.matrix.clone();
-
-            return this;
-
-        }
-
-        /** 
-	    * Copy this transforms data to the destination Transform. 
-        * A clone of this transforms matrix is created in the destination Transform Matrix.
-	    *
-        * @method copyTo
-	    * @param destination {Kiwi.Geom.Transform} The tranform to copy to.
-        * @return {Kiwi.Geom.Transform} This object.
-        * @public
-	    */
-        public copyTo(destination: Transform): Transform {
-
-            destination.copyFrom(this);
-
-            return this;
-
-        }
-
-        /** 
-	    * Return a clone of this transform.
-        *
-	    * @method clone
-	    * @param [output] {Kiwi.Geom.Transform} A Transform to copy the clone in to. If none is given a new Transform object will be made.
-        * @return {Kiwi.Geom.Transform} A clone of this object.
-        * @public
-	    */
-        public clone(output: Transform = new Transform()): Transform {
-
-            output.copyFrom(this);
-
-            return output;
-
-        }
-
-        /** 
-	    * Recursively check that a transform does not appear as its own ancestor
-	    * @method checkAncestor
-        * @param transform {Kiwi.Geom.Transform} The Transform to check.
-	    * @return {boolean} Returns true if the given transform is the same as this or an ancestor, otherwise false.
-        * @public
-	    */
-        public checkAncestor(transform: Transform): boolean {
-            
-            /*if (transform === this)
-            {
-                return true
-            }
-
-            if (transform.parent !== null)
-            {
-                return (this.checkAncestor(transform._parent))
-            }*/
-        
-            return false;
+	/**
+	* Represents position, scale, rotation and rotationPoint of an Entity.
+	* - Values can be transformed with a 3x3 affine transformation matrix, which each transform is assigned.
+	* - A tranform can be assigned a parent, which may in turn have it&#x27;s own parent, thereby creating a tranform inheritence heirarchy
+	* - A concatenated transformation matrix, representing the combined matrices of the transform and its ancestors.
+	*
+	* @class Transform
+	* @namespace Kiwi.Geom
+	* @constructor
+	* @param [x=0] {Number} X position of the transform.
+	* @param [y=0] {Number} Y position of the transform.
+	* @param [scaleX=1] {Number} X scaling of the transform.
+	* @param [scaleY=1] {Number} Y scaling of the transform.
+	* @param [rotation=0] {Number} Rotation of the transform in radians.
+	* @param [rotX=0] {Number} rotationPoint offset on X axis.
+	* @param [rotY=0] {Number} rotationPoint offset on Y axis.
+	* @return {Transform} This object.
+	*
+	*/
+	export class Transform {
+
+		constructor(x: number = 0, y: number = 0, scaleX: number = 1, scaleY: number = 1, rotation: number = 0, rotPointX: number = 0, rotPointY: number = 0) {
+
+			this.setTransform(x, y, scaleX, scaleY, rotation, rotPointX, rotPointY);
+
+			this._matrix = new Matrix();
+
+			this._matrix.setFromOffsetTransform(this._x, this._y, this._scaleX, this._scaleY, this._rotation, this._rotPointX, this._rotPointY);
+
+			this._cachedConcatenatedMatrix = this.getConcatenatedMatrix();
+			this._concatMatrix = new Matrix();
+
+		}
+
+		/**
+		* The type of this object.
+		* @method objType
+		* @return {String} &quot;Transform&quot;
+		* @public
+		*/
+		public objType() {
+			return &quot;Transform&quot;;
+		}
+
+		/** 
+		* X position of the transform
+		* @property _x
+		* @type Number
+		* @default 0
+		* @private
+		*/
+		private _x: number = 0;
+
+		/** 
+		* Return the X value of the transform.
+		* @property x
+		* @type Number
+		* @public
+		*/
+		public set x(value: number) {
+			
+			this._x = value;
+
+		}
+		public get x():number {
+			return this._x;
+		}
+
+		/** 
+		* Y position of the transform
+		* @property _y
+		* @type Number
+		* @default 0
+		* @private
+		*/
+		private _y: number = 0;
+
+		/** 
+		* Return the Y value of the transform.
+		* @property y
+		* @type Number
+		* @public
+		*/
+		public set y(value: number) {
+			this._y = value;
+		}
+		public get y(): number {
+			return this._y;
+		}
+
+
+		/** 
+		* X scaleof the transform
+		* @property _scaleX
+		* @type Number
+		* @default 1
+		* @private
+		*/
+		private _scaleX: number = 1;
+
+		/** 
+		* Return the X scale value of the transform.
+		* @property scaleX
+		* @type Number
+		* @public
+		*/
+		public set scaleX(value: number) {
+			this._scaleX = value;
+		}
+
+		public get scaleX(): number {
+			return this._scaleX;
+		}
+
+		/** 
+		* Y scale of the transform
+		* @property _scaleY
+		* @type Number
+		* @default 1
+		* @private
+		*/
+		private _scaleY: number = 1;
+
+		/** 
+		* Return the Y scale value of the transform.
+		* @property scaleY
+		* @type Number
+		* @public
+		*/
+		public set scaleY(value: number) {
+			this._scaleY = value;
+		}
+		public get scaleY():number {
+			return this._scaleY;
+		}
+
+		/** 
+		* Rotation of the transform in radians.
+		* @property _rotation
+		* @type Number
+		* @default 0
+		* @private
+		*/
+		private _rotation: number = 0;
+
+		/** 
+		* Return the rotation value of the transform in radians.
+		* @property rotation
+		* @type Number
+		* @public
+		*/
+		public set rotation(value: number) {
+			this._rotation = value;
+		}
+
+		public get rotation():number {
+			return this._rotation;
+		}
+
+		/** 
+		* Rotation offset on X axis.
+		* @property _rotPointX
+		* @type Number
+		* @default 0
+		* @private
+		*/
+		private _rotPointX: number = 0;
+
+		/** 
+		* Return the rotation offset from the x axis.
+		* @property rotPointX
+		* @type Number
+		* @default 0
+		* @public
+		*/
+		public set rotPointX(value: number) {
+			this._rotPointX = value;
+		}
+
+		public get rotPointX(): number {
+			return this._rotPointX;
+		}
+
+		/** 
+		* Rotation offset on Y axis.
+		* @property _rotPointY
+		* @type Number
+		* @default 0
+		* @private
+		*/
+		private _rotPointY: number = 0;
+
+		/** 
+		* Return the rotation offset from the y axis.
+		* @property rotPointY
+		* @type Number
+		* @public
+		*/
+		public set rotPointY(value: number) {
+			this._rotPointY = value;
+		}
+
+		public get rotPointY(): number {
+			return this._rotPointY;
+		}
+
+		/**
+		* Return the anchor point value from the X axis. (Aliases to rotPointX.)
+		* @property anchorPointX
+		* @type Number
+		* @public
+		* @since 1.1.0
+		*/
+		public set anchorPointX(value: number) {
+			this.rotPointX = value;
+		}
+		public get anchorPointX(): number {
+			return( this.rotPointX );
+		}
+
+		/**
+		* Return the anchor point value from the Y axis. (Aliases to rotPointY.)
+		* @property anchorPointY
+		* @type Number
+		* @public
+		* @since 1.1.0
+		*/
+		public set anchorPointY(value: number) {
+			this._rotPointY = value;
+		}
+		public get anchorPointY(): number {
+			return( this._rotPointY );
+		}
+
+		/** 
+		* A 3x3 transformation matrix object that can be use this tranform to manipulate points or the context transformation.
+		* @property _matrix
+		* @type Kiwi.Geom.Matrix
+		* @private
+		*/
+		private _matrix: Matrix;
+
+		/** 
+		* Return the Matrix being used by this Transform
+		* @property matrix
+		* @type Kiwi.Geom.Matrix
+		* @readOnly
+		* @public
+		*/
+		public get matrix(): Matrix {
+
+			return this._matrix;
+
+		}
+
+		/** 
+		* The most recently calculated matrix from getConcatenatedMatrix.
+		* Not used or updated after object creation.
+		* Candidate for deprecation.
+		* @property _cachedConcatenatedMatrix
+		* @type Kiwi.Geom.Matrix
+		* @private
+		*/
+		private _cachedConcatenatedMatrix: Matrix;
+
+		/** 
+		* Temporary matrix used in concatenation operations
+		* @property _concatMatrix
+		* @type Kiwi.Geom.Matrix
+		* @private
+		*/
+		private _concatMatrix: Matrix;
+
+		/** 
+		* Return the x of this transform translated to world space.
+		* @property worldX
+		* @type Number
+		* @readOnly
+		* @public
+		*/
+		public get worldX(): number {
+
+			return this.getConcatenatedMatrix().tx - this._rotPointX;
+
+		}
+
+		/** 
+		* Return the y of this transform translated to world space.
+		* @property worldY
+		* @type Number
+		* @readOnly
+		* @public
+		*/
+		public get worldY(): number {
+
+			return this.getConcatenatedMatrix().ty - this._rotPointY;
+
+		}
+
+
+		/** 
+		* The parent transform. If set to null there is no parent. Otherwise this is used by getConcatenatedMatrix to offset the current transforms by the another matrix
+		* @property _parent
+		* @type Kiwi.Geom.Transform
+		* @default null
+		* @private
+		*/
+		private _parent: Transform = null;
+
+		/** 
+		* Return the parent Transform. If the transform does not have a parent this null is returned.
+		* @property parent
+		* @type Kiwi.Geom.Transform
+		* @default null
+		* @public
+		*/
+		public set parent(value: Transform) {
+			if(!this.checkAncestor(value)) {
+				this._parent = value;
+			}
+		}
+
+		public get parent(): Transform {
+			return this._parent;
+		}
+
+
+		/**
+		* Private copy.
+		* Whether the Transform is locked. In locked mode, the Transform
+		* will not update its matrix, saving on computation.
+		* However, it will still follow its parent.
+		* @property _locked
+		* @type boolean
+		* @default false
+		* @private
+		* @since 1.2.0
+		*/
+		private _locked: boolean = false;
+
+		/**
+		* Whether the Transform is locked. In locked mode, the Transform
+		* will not update its matrix, saving on computation.
+		* However, it will still follow its parent.
+		* When locked is set to true, it will set the matrix according to
+		* current transform values.
+		* @property locked
+		* @type boolean
+		* @default false
+		* @public
+		* @since 1.2.0
+		*/
+		public set locked( value: boolean ) {
+			this._locked = value;
+			if ( this._locked ) {
+				this._matrix.setFromOffsetTransform(
+					this.x, this.y,
+					this.scaleX, this.scaleY,
+					this.rotation,
+					this.anchorPointX, this.anchorPointY );
+			}
+		}
+		public get locked(): boolean {
+			return this._locked;
+		}
+
+
+		/**
+		* Private copy.
+		* Whether to ignore its parent when concatenating matrices.
+		* If true, it won&#x27;t compute parent matrices.
+		* This can save computation, but prevents it from following
+		* its parent&#x27;s transforms.
+		* Use this to save some processor cycles if the transform isn&#x27;t
+		* following a parent and the state does not transform.
+		* @property _ignoreParent
+		* @type boolean
+		* @default false
+		* @private
+		* @since 1.2.0
+		*/
+		private _ignoreParent: boolean = false;
+
+		/**
+		* Whether to ignore its parent when concatenating matrices.
+		* If true, it won&#x27;t compute parent matrices.
+		* This can save computation, but prevents it from following
+		* its parent&#x27;s transforms.
+		* Use this to save some processor cycles if the transform isn&#x27;t
+		* following a parent and the state does not transform.
+		* @property ignoreParent
+		* @type boolean
+		* @default false
+		* @public
+		* @since 1.2.0
+		*/
+		public set ignoreParent( value: boolean ) {
+			this._ignoreParent = value;
+		}
+
+		public get ignoreParent(): boolean {
+			return this._ignoreParent;
+		}
+
+
+		/** 
+		* Set the X and Y values of the transform.
+		* @method setPosition
+		* @param x {Number} 
+		* @param y {Number} 
+		* @return {Kiwi.Geom.Transform} This object.
+		* @public
+		*/
+		public setPosition(x: number, y: number): Transform {
+
+			this._x = x;
+			this._y = y;
+			//this.owner.dirty = true;
+
+			return this;
+		}
+
+		/** 
+		* Set the X and Y values of the transform from a point.
+		* @method setPositionPoint
+		* @param point {Kiwi.Geom.Point} point.
+		* @return {Kiwi.Geom.Transform} This object.
+		* @public
+		*/
+		public setPositionFromPoint(point: Point): Transform {
+
+			this._x = point.x;
+			this._y = point.y;
+			//this.owner.dirty = true;
+
+			return this;
+
+		}
+
+		/** 
+		* Translate the X and Y value of the transform by point components.
+		* @method translatePositionFromPoint
+		* @param point {Kiwi.Geom.Point} point.
+		* @return {Kiwi.Geom.Transform} This object.
+		* @public
+		*/
+		public translatePositionFromPoint(point: Point): Transform {
+
+			this._x += point.x;
+			this._y += point.y;
+			//this.owner.dirty = true;
+
+			return this;
+
+		}
+
+		/** 
+		* Return a Point representing the X and Y values of the transform.
+		* If no point is given a new Point objected will be created.
+		*
+		* @method getPositionPoint
+		* @param [output] {Kiwi.Geom.Point} The Point to output the coordinates into. Creates a new Point if none given.
+		* @return {Kiwi.Geom.Point} A point representing the X and Y values of the transform.
+		* @public
+		*/
+		public getPositionPoint(output: Point = new Kiwi.Geom.Point): Point {
+
+			return output.setTo(this._x, this._y);
+
+		}
+
+		/** 
+		* Set the X and Y scale value of the transform.
+		* This property is set only. 
+		* In the future this will be looked into and updated as needed.
+		* 
+		* @property scale
+		* @type Number
+		* @public
+		*/
+		public set scale(value:number) {
+
+			this._scaleX = value;
+			this._scaleY = value;
+
+		}
+
+		/** 
+		* Set the core properties of the transform.
+		*
+		* @method setTransform
+		* @param [x=0] {Number} X position of the transform.
+		* @param [y=0] {Number} Y position of the transform.
+		* @param [scaleX=1] {Number} X scaling of the transform.
+		* @param [scaleY=1] {Number} Y scaling of the transform.
+		* @param [rotation=0] {Number} Rotation of the transform in radians.
+		* @param [rotX=0] {Number} rotationPoint offset on X axis.
+		* @param [rotY=0] {Number} rotationPoint offset on Y axis.
+		* @return {Kiwi.Geom.Transform} This object.
+		* @public
+		*/
+		public setTransform(x: number = 0, y: number = 0, scaleX: number = 1, scaleY: number = 1, rotation: number = 0, rotPointX: number = 0, rotPointY: number = 0): Transform {
+
+			this._x = x;
+			this._y = y;
+			this._scaleX = scaleX;
+			this._scaleY = scaleY;
+			this._rotation = rotation;
+			this._rotPointX = rotPointX;
+			this._rotPointY = rotPointY;
+
+
+			return this;
+
+		}
+
+		/** 
+		* Return the parent matrix of the transform.
+		* If there is no parent then null is returned.
+		* @method getParentMatrix
+		* @return {Kiwi.Geom.Matrix} Parent transform matrix
+		* @public
+		*/
+		public getParentMatrix(): Matrix {
+
+			if (this._parent) {
+				return this._parent.getConcatenatedMatrix();
+			}
+
+			return null;
+		}
+
+		/** 
+		* Return the transformation matrix that concatenates this transform
+		* with all ancestor transforms. If there is no parent then this will
+		* return a matrix the same as this transform&#x27;s matrix.
+		* @method getConcatenatedMatrix
+		* @return {Kiwi.Geom.Matrix} The concatenated matrix.
+		* @public
+		*/
+		public getConcatenatedMatrix(): Matrix {
+
+			// this._matrix.setFromOffsetTransform(this._x, this._y, this._scaleX, this._scaleY, this._rotation, this._rotPointX, this._rotPointY);
+
+			// var parentMatrix = this.getParentMatrix();
+
+			// if (parentMatrix) {
+			//     var matrix = this._matrix.clone();
+			//     matrix.prependMatrix(parentMatrix);
+			//     this._cachedConcatenatedMatrix.copyFrom(matrix);
+			//     return matrix;
+			// }
+
+			// return this._matrix;
+
+			var parentMatrix;
+
+			if ( !this._locked ) {
+				if ( this._parent ) {
+					this._matrix.setFromOffsetTransform(
+						this.x, this.y,
+						this.scaleX, this.scaleY,
+						this.rotation,
+						this.anchorPointX - this._parent.anchorPointX,
+						this.anchorPointY - this._parent.anchorPointY );
+				} else {
+					this._matrix.setFromOffsetTransform(
+						this.x, this.y,
+						this.scaleX, this.scaleY,
+						this.rotation,
+						this.anchorPointX,
+						this.anchorPointY );
+				}
+			}
+
+			if ( !this._ignoreParent ) {
+				parentMatrix = this.getParentMatrix();
+				if ( parentMatrix ) {
+					this._concatMatrix.copyFrom( this._matrix );
+					this._concatMatrix.prependMatrix( parentMatrix );
+					return this._concatMatrix;
+				}
+			}
+
+			return this._matrix;
+		}
+
+
+		/** 
+		* Apply this matrix to a an object with x and y properties representing a point and return the transformed point.
+		* @method transformPoint
+		* @param point {Kiwi.Geom.Point} 
+		* @return {Kiwi.Geom.Point}
+		* @public
+		*/
+		public transformPoint(point: Point): Point {
+
+			var mat = this.getConcatenatedMatrix();
+
+			return mat.transformPoint(point);
+
+		}
+
+		/** 
+		* Copy another transforms data to this transform. A clone of the source matrix is created for the matrix property.
+		* @method copyFrom
+		* @param transform {Kiwi.Geom.Transform} transform. The tranform to be copied from.
+		* @return {Kiwi.Geom.Transform} This object.
+		* @public
+		*/
+		public copyFrom(source: Transform): Transform {
+
+			this.setTransform(source.x, source.y, source.scaleX, source.scaleY, source.rotation, source.rotPointX, source.rotPointY);
+
+			this.parent = source.parent;
+
+			this._matrix = source.matrix.clone();
+
+			return this;
+
+		}
+
+		/** 
+		* Copy this transforms data to the destination Transform. 
+		* A clone of this transforms matrix is created in the destination Transform Matrix.
+		*
+		* @method copyTo
+		* @param destination {Kiwi.Geom.Transform} The tranform to copy to.
+		* @return {Kiwi.Geom.Transform} This object.
+		* @public
+		*/
+		public copyTo(destination: Transform): Transform {
+
+			destination.copyFrom(this);
+
+			return this;
+
+		}
+
+		/** 
+		* Return a clone of this transform.
+		*
+		* @method clone
+		* @param [output] {Kiwi.Geom.Transform} A Transform to copy the clone in to. If none is given a new Transform object will be made.
+		* @return {Kiwi.Geom.Transform} A clone of this object.
+		* @public
+		*/
+		public clone(output: Transform = new Transform()): Transform {
+
+			output.copyFrom(this);
+
+			return output;
+
+		}
+
+		/** 
+		* Recursively check that a transform does not appear as its own ancestor
+		* @method checkAncestor
+		* @param transform {Kiwi.Geom.Transform} The Transform to check.
+		* @return {boolean} Returns true if the given transform is the same as this or an ancestor, otherwise false.
+		* @public
+		*/
+		public checkAncestor(transform: Transform): boolean {
+			
+			/*if (transform === this)
+			{
+				return true
+			}
+
+			if (transform.parent !== null)
+			{
+				return (this.checkAncestor(transform._parent))
+			}*/
 
-        }
+			return false;
 
-        /** 
-        * Return a string represention of this object.
-        * @method toString
-        * @return {String} A string represention of this object.
-        * @public
-        */
-        public get toString(): string {
+		}
 
-            return &quot;[{Transform (x=&quot; + this._x + &quot; y=&quot; + this._y + &quot; scaleX=&quot; + this._scaleX + &quot; scaleY=&quot; + this._scaleY + &quot; rotation=&quot; + this._rotation + &quot; regX=&quot; + this._rotPointX + &quot; regY=&quot; + this.rotPointY + &quot; matrix=&quot; + this._matrix + &quot;)}]&quot;;
+		/** 
+		* Return a string represention of this object.
+		* @method toString
+		* @return {String} A string represention of this object.
+		* @public
+		*/
+		public get toString(): string {
 
-        }
+			return &quot;[{Transform (x=&quot; + this._x + &quot; y=&quot; + this._y + &quot; scaleX=&quot; + this._scaleX + &quot; scaleY=&quot; + this._scaleY + &quot; rotation=&quot; + this._rotation + &quot; regX=&quot; + this._rotPointX + &quot; regY=&quot; + this.rotPointY + &quot; matrix=&quot; + this._matrix + &quot;)}]&quot;;
 
-    }
+		}
+
+	}
 
 }
+
     </pre>
 </div>
 
diff --git a/docs/files/src_geom_Vector2.ts.html b/docs/files/src_geom_Vector2.ts.html
index c42ad1a..458feed 100644
--- a/docs/files/src_geom_Vector2.ts.html
+++ b/docs/files/src_geom_Vector2.ts.html
@@ -372,359 +372,360 @@ <h1 class="file-heading">File: src/geom/Vector2.ts</h1>
 
 module Kiwi.Geom {
 
-    /**
-    * A two dimensional vector object for storing and manipulating x and y vector components.
-    *
-    * @class Vector2
-    * @namespace Kiwi.Geom
-    * @constructor
-    * @param [x=0] {Number} The x component of the vector.
-    * @param [y=0] {Number} The y component of the vector.
-    * @return {Kiwi.Geom.Vector2}
-    */
-    export class Vector2 {
-
-        constructor (x: number = 0, y: number = 0) {
-            this.setTo(x, y);
-        }
-
-        /**
-        * The type of this object.
-        * @method objType
-        * @return {String} &quot;Vector2&quot;
-        * @public
-        */
-        public objType() {
-            return &quot;Vector2&quot;;
-        }
-
-        /**
-        * The x component of this Vector2.
-        * @property x
-        * @type Number
-        * @public
-        */
-        public x: number;
-        
-        /**
-        * The y component of this Vector2.
-        * @property y
-        * @type Number
-        * @public
-        */
-        public y: number;
-
-        /**
-        * Generate a Vector2 from an angle
-        * @method fromAngle
-        * @param angle {Number} The angle to generate the Vector2 from.
-        * @return {Kiwi.Geom.Vector2} A new Vector2
-        * @static
-        * @public
-        */
-        public static fromAngle(angle:number): Vector2 {
-             return new Vector2(Math.cos(angle), Math.sin(angle));
-        }
-
-        /**
-        * Generate a random Vector2 within a given radius.
-        * @method randomRadius
-        * @param radius {Number} The size of the radius to use.
-        * @return {Kiwi.Geom.Vector2} A new Vector2
-        * @static
-        * @public
-        */
-        public static randomRadius(radius:number): Vector2 {
-            return new Vector2
+	/**
+	* A two dimensional vector object for storing and manipulating x and y vector components.
+	*
+	* @class Vector2
+	* @namespace Kiwi.Geom
+	* @constructor
+	* @param [x=0] {Number} The x component of the vector.
+	* @param [y=0] {Number} The y component of the vector.
+	* @return {Kiwi.Geom.Vector2}
+	*/
+	export class Vector2 {
+
+		constructor (x: number = 0, y: number = 0) {
+			this.setTo(x, y);
+		}
+
+		/**
+		* The type of this object.
+		* @method objType
+		* @return {String} &quot;Vector2&quot;
+		* @public
+		*/
+		public objType() {
+			return &quot;Vector2&quot;;
+		}
+
+		/**
+		* The x component of this Vector2.
+		* @property x
+		* @type Number
+		* @public
+		*/
+		public x: number;
+		
+		/**
+		* The y component of this Vector2.
+		* @property y
+		* @type Number
+		* @public
+		*/
+		public y: number;
+
+		/**
+		* Generate a Vector2 from an angle
+		* @method fromAngle
+		* @param angle {Number} The angle to generate the Vector2 from.
+		* @return {Kiwi.Geom.Vector2} A new Vector2
+		* @static
+		* @public
+		*/
+		public static fromAngle(angle:number): Vector2 {
+			 return new Vector2(Math.cos(angle), Math.sin(angle));
+		}
+
+		/**
+		* Generate a random Vector2 within a given radius.
+		* @method randomRadius
+		* @param radius {Number} The size of the radius to use.
+		* @return {Kiwi.Geom.Vector2} A new Vector2
+		* @static
+		* @public
+		*/
+		public static randomRadius(radius:number): Vector2 {
+			return new Vector2
 				(
 					Math.random() * 2 - 1,
 					Math.random() * 2 - 1
 				).multiplyScalar( radius );
-        }
-
-        /**
-        * Generate a Vector2 from a point.
-        * @method fromPoint
-        * @param point {Kiwi.Geom.Point} point. 
-        * @return {Kiwi.Geom.Vector2} A new Vector2
-        * @static
-        * @public
-        */
-        public static fromPoint(point: Point): Vector2 {
-            return new Vector2(point.x,point.y);
-        }
-
-        /**
-        * Add each component of another Vector2 to this vectors components.
-        * @method add
-        * @param {Kiwi.Geom.Vector2} Vector2 to add
-        * @return {Kiwi.Geom.Vector2} A new Vector2 containing the product
-        * @public
-        */
-        public add(vector2: Vector2): Vector2 {
-            return new Vector2(this.x + vector2.x, this.y + vector2.y);
-        }
-
-        /**
-        * Add only the x component of another Vector2 to this vector.
-        * @method addX
-        * @param vector2 {Kiwi.Geom.Vector2} Vector2 to add
-        * @return {Kiwi.Geom.Vector2} A new Vector2 containing the result
-        * @public
-        */
-        public addX(vector2: Vector2): Vector2 {
-            return new Vector2(this.x + vector2.x, this.y);
-        }
-
-        /**
-        * Add only the y component of another Vector2 to this vector.
-        * @method addY
-        * @param vector2 {Kiwi.Geom.Vector2} Vector2 to add
-        * @return {Kiwi.Geom.Vector2} A new Vector2 containing the result
-        * @public
-        */
-        public addY(vector2: Vector2): Vector2 {
-            return new Vector2(this.x, this.y + vector2.y);
-        }
-
-        /**
-        * Subtract each component of another Vector2 from this vectors components.
-        * @method subtract
-        * @param vector2 {Kiwi.Geom.Vector2} Vector2 to subtract
-        * @return {Kiwi.Geom.Vector2} A new Vector2 containing the result
-        * @public
-        */
-        public subtract (vector2:Vector2):Vector2 {
-            return new Kiwi.Geom.Vector2(this.x - vector2.x, this.y - vector2.y);
-        }
-
-        /**
-        * Multiply each component of another Vector2 with this vectors components.
-        * @method multiply
-        * @param vector2 {Kiwi.Geom.Vector2} Vector2 to multiply
-        * @return {Kiwi.Geom.Vector2} A new Vector2 containing the result
-        * @public
-        */
-        public multiply (vector2:Vector2):Vector2 {
-            return new Kiwi.Geom.Vector2(this.x * vector2.x, this.y * vector2.y);
-        }
-
-        /**
-        * Multiply each component of this vector with a scalar number.
-        * @method multiplyScalar
-        * @param scalar {Number} Scalar to multiply
-        * @return {Kiwi.Geom.Vector2} A new Vector2 containing the result
-        * @public
-        */
-        public multiplyScalar (scalar:number):Vector2 {
-            return new Kiwi.Geom.Vector2(this.x * scalar, this.y * scalar);
-        }
-	
-        /**
-	    * Calculate the dot product if a Vector2 with this Vector2.
-        * @method dot
-	    * @param vector2 {Kiwi.Geom.Vector2} Vector2 to dot with this Vector2.
-	    * @return {Number} Result of dot product.
-        * @public
-	    */
-        public dot(vector2:Vector2): number {
-            return this.x * vector2.x + this.y * vector2.y;
-        }
-
-        /**
-	    * Calculate the square length of this Vector2 (Distance from the origin).
-        * @method lenSqr
-	    * @return {Number} The square length.
-        * @public
-	    */
-        public lenSqr(): number {
-            return this.x * this.x + this.y * this.y;
-        }
-
-        /**
-	    * Calculate the length of this Vector2 (Distance from the origin).
-        * @method len
-	    * @return {Number} The length.
-        * @public
-	    */
-        public len(): number {
-            return Math.sqrt(this.x * this.x + this.y * this.y);
-        }
-
-        /**
-	    * Calculate a normalised unit Vector2 from this Vector2.
-        * @method unit
-	    * @return {Kiwi.Geom.Vector2} a new Unit Length Vector2.
-        * @public
-	    */
-        public unit(): Vector2 {
-            var invLen = 1.0 / this.len();
-            return this.multiplyScalar(invLen);
-        }
-
-        /**
-	    * Reduce each component of the Vector to the closest lower round value.
-        * @method floor
-	    * @return {Kiwi.Geom.Vector2} a rounded down Vector2.
-        * @public
-	    */
-        public floor(): Vector2 {
-            return new Vector2(Math.floor(this.x), Math.floor(this.y));
-        }
-
-        /**
-	    * Increase each component of the Vector to the closest upper round value.
-        * @method ceil
-	    * @return {Kiwi.Geom.Vector2} a rounded up Vector2.
-        * @public
-	    */
-        public ceil(): Vector2 {
-            return new Vector2(Math.ceil(this.x), Math.ceil(this.y));
-        }
-
-        /**
-	    * Round each component of the Vector to the closest round value.
-        * @method round
-	    * @return {Kiwi.Geom.Vector2} a rounded Vector2.
-        * @public
-	    */
-        public round(): Vector2 {
-            return new Vector2(Math.round(this.x), Math.round(this.y));
-        }
-        
-        /**
-	    * Clamp the vector between a maximum and minimum Vector2 range component-wise.
-        * @method clamp
-        * @param min {Kiwi.Geom.Vector2} Minimum values for Vector2.
-        * @param max {Kiwi.Geom.Vector2} Maximum values for Vector2.
-	    * @return {Kiwi.Geom.Vector2} a clamped Vector2.
-        * @public
-	    */
-        public clamp(min:Vector2,max:Vector2): Vector2 {
-            return new Vector2(
-                                Math.max( Math.min(this.x, max.x), min.x ),
-						        Math.max( Math.min(this.y, max.y), min.y )
-                               );
-        }
-
-        /**
-	    * Calculate a Vector2 perpendicular to this Vector2.
-        * @method perp
-	    * @return {Kiwi.Geom.Vector2} the perpendicular Vector2.
-        * @public
-	    */
-        public perp(): Vector2 {
-            return new Vector2(-this.y, this.x);
-        }
-        
-        /**
-	    * Calculate a Vector2 opposite to this Vector2.
-        * @method neg
-	    * @return {Kiwi.Geom.Vector2} the opposite Vector2.
-        * @public
-	    */
-        public neg(): Vector2 {
-            return new Vector2( -this.x, -this.y);
-        }
-
-        /**
-	    * Check if two Vector2s from equal components.
-        * @method equal
-        * @param vector2 {Kiwi.Geom.Vector2} vector2. Vector2 to check against.
-        * @return {boolean} returns true if equal.
-        * @public
-	    */
-        public equal(vector2: Vector2): boolean {
-            return this.x === vector2.x &amp;&amp; this.y === vector2.y;
-        }
-
-        /**
-	    * Get a Point object with the same components as this Vector2.
-        * @method point
-	    * @return {Kiwi.Geom.Point} A new Point.
-        * @public
-	    */
-        public point():Point {
-            return new Point(this.x, this.y);
-        }
-
-        /**
-	    * Set both components to zero.
-        * @method clear
-	    * @return {Kiwi.Geom.Vector2} This object.
-        * @public
-	    */
-        public clear(): Vector2 {
-            this.x = 0;
-            this.y = 0;
-            return this;
-        }
-
-        /**
-	    * Get a clone of this Vector2.
-        * @method clone
-        * @param [output] {Kiwi.Geom.Vector2} Optional. A vector2 that will be cloned to. One will be created if none passed.
-        * @return {Kiwi.Geom.Vector2} Either a new cloned Vector2 or the output vector with cloned components.
-        * @public
-	    */
-        public clone(output: Vector2= new Vector2): Vector2 {
-
-            return output.setTo(this.x, this.y);
-
-        }
-
-        /**
-	    * Copy components from another Vector2.
-        * @method copyFrom
-        * @param source {Kiwi.Geom.Vector2} A Vector2 to copy from.
-        * @return {Kiwi.Geom.Vector2} This object.
-        * @public
-	    */
-        public copyFrom(source: Vector2): Vector2 {
-            this.x = source.x;
-            this.y = source.y;
-            return this;
-        }
-
-        /**
-	    * Copy components to another Vector2.
-        * @method copyTo
-        * @param target {Kiwi.Geom.Vector2} A Vector2 to copy to.
-        * @return {Kiwi.Geom.Vector2} The supplied Vector2.
-        * @public
-	    */
-        public copyTo(target: Vector2): Vector2 {
-            target.x = this.x;
-            target.y = this.y;
-            return target;
-        }
-
-        /**
-	    * Set components on this Vector2.
-        * @method setTo
-        * @param x {Number} x component to set.
-        * @param y {Number} y component to set.
-        * @return {Kiwi.Geom.Vector2} This object.
-        * @public
-	    */
-        public setTo(x: number, y: number): Vector2 {
-            this.x = x;
-            this.y = y;
-            return this;
-        }
-
-        /**
-	    * Get a string representation of this object.
-        * @method toString
-        * @return {String} This object as a string.
-	    */
-        public toString(): string {
-            return &#x27;[{Vector2 (x=&#x27; + this.x + &#x27; y=&#x27; + this.y + &#x27;)}]&#x27;;
-        }
-
-    }
+		}
+
+		/**
+		* Generate a Vector2 from a point.
+		* @method fromPoint
+		* @param point {Kiwi.Geom.Point} point. 
+		* @return {Kiwi.Geom.Vector2} A new Vector2
+		* @static
+		* @public
+		*/
+		public static fromPoint(point: Point): Vector2 {
+			return new Vector2(point.x,point.y);
+		}
+
+		/**
+		* Add each component of another Vector2 to this vectors components.
+		* @method add
+		* @param {Kiwi.Geom.Vector2} Vector2 to add
+		* @return {Kiwi.Geom.Vector2} A new Vector2 containing the product
+		* @public
+		*/
+		public add(vector2: Vector2): Vector2 {
+			return new Vector2(this.x + vector2.x, this.y + vector2.y);
+		}
+
+		/**
+		* Add only the x component of another Vector2 to this vector.
+		* @method addX
+		* @param vector2 {Kiwi.Geom.Vector2} Vector2 to add
+		* @return {Kiwi.Geom.Vector2} A new Vector2 containing the result
+		* @public
+		*/
+		public addX(vector2: Vector2): Vector2 {
+			return new Vector2(this.x + vector2.x, this.y);
+		}
+
+		/**
+		* Add only the y component of another Vector2 to this vector.
+		* @method addY
+		* @param vector2 {Kiwi.Geom.Vector2} Vector2 to add
+		* @return {Kiwi.Geom.Vector2} A new Vector2 containing the result
+		* @public
+		*/
+		public addY(vector2: Vector2): Vector2 {
+			return new Vector2(this.x, this.y + vector2.y);
+		}
+
+		/**
+		* Subtract each component of another Vector2 from this vectors components.
+		* @method subtract
+		* @param vector2 {Kiwi.Geom.Vector2} Vector2 to subtract
+		* @return {Kiwi.Geom.Vector2} A new Vector2 containing the result
+		* @public
+		*/
+		public subtract (vector2:Vector2):Vector2 {
+			return new Kiwi.Geom.Vector2(this.x - vector2.x, this.y - vector2.y);
+		}
+
+		/**
+		* Multiply each component of another Vector2 with this vectors components.
+		* @method multiply
+		* @param vector2 {Kiwi.Geom.Vector2} Vector2 to multiply
+		* @return {Kiwi.Geom.Vector2} A new Vector2 containing the result
+		* @public
+		*/
+		public multiply (vector2:Vector2):Vector2 {
+			return new Kiwi.Geom.Vector2(this.x * vector2.x, this.y * vector2.y);
+		}
+
+		/**
+		* Multiply each component of this vector with a scalar number.
+		* @method multiplyScalar
+		* @param scalar {Number} Scalar to multiply
+		* @return {Kiwi.Geom.Vector2} A new Vector2 containing the result
+		* @public
+		*/
+		public multiplyScalar (scalar:number):Vector2 {
+			return new Kiwi.Geom.Vector2(this.x * scalar, this.y * scalar);
+		}
+
+		/**
+		* Calculate the dot product if a Vector2 with this Vector2.
+		* @method dot
+		* @param vector2 {Kiwi.Geom.Vector2} Vector2 to dot with this Vector2.
+		* @return {Number} Result of dot product.
+		* @public
+		*/
+		public dot(vector2:Vector2): number {
+			return this.x * vector2.x + this.y * vector2.y;
+		}
+
+		/**
+		* Calculate the square length of this Vector2 (Distance from the origin).
+		* @method lenSqr
+		* @return {Number} The square length.
+		* @public
+		*/
+		public lenSqr(): number {
+			return this.x * this.x + this.y * this.y;
+		}
+
+		/**
+		* Calculate the length of this Vector2 (Distance from the origin).
+		* @method len
+		* @return {Number} The length.
+		* @public
+		*/
+		public len(): number {
+			return Math.sqrt(this.x * this.x + this.y * this.y);
+		}
+
+		/**
+		* Calculate a normalised unit Vector2 from this Vector2.
+		* @method unit
+		* @return {Kiwi.Geom.Vector2} a new Unit Length Vector2.
+		* @public
+		*/
+		public unit(): Vector2 {
+			var invLen = 1.0 / this.len();
+			return this.multiplyScalar(invLen);
+		}
+
+		/**
+		* Reduce each component of the Vector to the closest lower round value.
+		* @method floor
+		* @return {Kiwi.Geom.Vector2} a rounded down Vector2.
+		* @public
+		*/
+		public floor(): Vector2 {
+			return new Vector2(Math.floor(this.x), Math.floor(this.y));
+		}
+
+		/**
+		* Increase each component of the Vector to the closest upper round value.
+		* @method ceil
+		* @return {Kiwi.Geom.Vector2} a rounded up Vector2.
+		* @public
+		*/
+		public ceil(): Vector2 {
+			return new Vector2(Math.ceil(this.x), Math.ceil(this.y));
+		}
+
+		/**
+		* Round each component of the Vector to the closest round value.
+		* @method round
+		* @return {Kiwi.Geom.Vector2} a rounded Vector2.
+		* @public
+		*/
+		public round(): Vector2 {
+			return new Vector2(Math.round(this.x), Math.round(this.y));
+		}
+		
+		/**
+		* Clamp the vector between a maximum and minimum Vector2 range component-wise.
+		* @method clamp
+		* @param min {Kiwi.Geom.Vector2} Minimum values for Vector2.
+		* @param max {Kiwi.Geom.Vector2} Maximum values for Vector2.
+		* @return {Kiwi.Geom.Vector2} a clamped Vector2.
+		* @public
+		*/
+		public clamp(min:Vector2,max:Vector2): Vector2 {
+			return new Vector2(
+								Math.max( Math.min(this.x, max.x), min.x ),
+								Math.max( Math.min(this.y, max.y), min.y )
+							   );
+		}
+
+		/**
+		* Calculate a Vector2 perpendicular to this Vector2.
+		* @method perp
+		* @return {Kiwi.Geom.Vector2} the perpendicular Vector2.
+		* @public
+		*/
+		public perp(): Vector2 {
+			return new Vector2(-this.y, this.x);
+		}
+		
+		/**
+		* Calculate a Vector2 opposite to this Vector2.
+		* @method neg
+		* @return {Kiwi.Geom.Vector2} the opposite Vector2.
+		* @public
+		*/
+		public neg(): Vector2 {
+			return new Vector2( -this.x, -this.y);
+		}
+
+		/**
+		* Check if two Vector2s from equal components.
+		* @method equal
+		* @param vector2 {Kiwi.Geom.Vector2} vector2. Vector2 to check against.
+		* @return {boolean} returns true if equal.
+		* @public
+		*/
+		public equal(vector2: Vector2): boolean {
+			return this.x === vector2.x &amp;&amp; this.y === vector2.y;
+		}
+
+		/**
+		* Get a Point object with the same components as this Vector2.
+		* @method point
+		* @return {Kiwi.Geom.Point} A new Point.
+		* @public
+		*/
+		public point():Point {
+			return new Point(this.x, this.y);
+		}
+
+		/**
+		* Set both components to zero.
+		* @method clear
+		* @return {Kiwi.Geom.Vector2} This object.
+		* @public
+		*/
+		public clear(): Vector2 {
+			this.x = 0;
+			this.y = 0;
+			return this;
+		}
+
+		/**
+		* Get a clone of this Vector2.
+		* @method clone
+		* @param [output] {Kiwi.Geom.Vector2} Optional. A vector2 that will be cloned to. One will be created if none passed.
+		* @return {Kiwi.Geom.Vector2} Either a new cloned Vector2 or the output vector with cloned components.
+		* @public
+		*/
+		public clone(output: Vector2= new Vector2): Vector2 {
+
+			return output.setTo(this.x, this.y);
+
+		}
+
+		/**
+		* Copy components from another Vector2.
+		* @method copyFrom
+		* @param source {Kiwi.Geom.Vector2} A Vector2 to copy from.
+		* @return {Kiwi.Geom.Vector2} This object.
+		* @public
+		*/
+		public copyFrom(source: Vector2): Vector2 {
+			this.x = source.x;
+			this.y = source.y;
+			return this;
+		}
+
+		/**
+		* Copy components to another Vector2.
+		* @method copyTo
+		* @param target {Kiwi.Geom.Vector2} A Vector2 to copy to.
+		* @return {Kiwi.Geom.Vector2} The supplied Vector2.
+		* @public
+		*/
+		public copyTo(target: Vector2): Vector2 {
+			target.x = this.x;
+			target.y = this.y;
+			return target;
+		}
+
+		/**
+		* Set components on this Vector2.
+		* @method setTo
+		* @param x {Number} x component to set.
+		* @param y {Number} y component to set.
+		* @return {Kiwi.Geom.Vector2} This object.
+		* @public
+		*/
+		public setTo(x: number, y: number): Vector2 {
+			this.x = x;
+			this.y = y;
+			return this;
+		}
+
+		/**
+		* Get a string representation of this object.
+		* @method toString
+		* @return {String} This object as a string.
+		*/
+		public toString(): string {
+			return &#x27;[{Vector2 (x=&#x27; + this.x + &#x27; y=&#x27; + this.y + &#x27;)}]&#x27;;
+		}
+
+	}
 
 }
+
     </pre>
 </div>
 
diff --git a/docs/files/src_hud_HUDDisplay.ts.html b/docs/files/src_hud_HUDDisplay.ts.html
index 70d5145..a4baf55 100644
--- a/docs/files/src_hud_HUDDisplay.ts.html
+++ b/docs/files/src_hud_HUDDisplay.ts.html
@@ -373,232 +373,231 @@ <h1 class="file-heading">File: src/hud/HUDDisplay.ts</h1>
 
 module Kiwi.HUD {
 
-    /**
-    * A HUDDisplay is a container for which you can add/removes widget on, and is more used to manage the widgets that are being displayed on it.
-    * A HUDDisplay is created through a games HUDManager and is NOT directly instantiated.
-    * Each game can contain multiple HUDDisplay&#x27;s and each HUDDisplay can contain multiple HUDWidgets.
-    *
-    * @class HUDDisplay
-    * @namespace Kiwi.HUD
-    * @constructor
-    * @param game {Kiwi.Game} The game that this HUD Display belongs to. 
-    * @param name {string} The name of this display.
-    * @return HUDDisplay
-    */
-    export class HUDDisplay {
-        
-        constructor(game: Kiwi.Game,name:string) {
-            this._game = game;
-            this.name = name;
-            this._manager = this._game.huds;
-            this._device = this._game.deviceTargetOption;
-
-            if (this._manager.supported) {
-
-                switch (this._device) {
-                    case Kiwi.TARGET_BROWSER:
-                        this.container = &lt;HTMLDivElement&gt;document.createElement(&quot;div&quot;);
-                        this.container.id = &quot;HUD-layer-&quot; + game.rnd.uuid();
-                        this.container.style.width = &quot;100%&quot;;
-                        this.container.style.height = &quot;100%&quot;;
-                        this.container.style.position = &quot;absolute&quot;;
-                        this._widgets = new Array();
-
-                        break;
-                }
-
-                this.class = &#x27;kiwi-display&#x27;;
-            }
-        }
-
-        /**
-        * Returns the type of object that this is.
-        * @method objType
-        * @return {String} &quot;HUDDisplay&quot;
-        * @public
-        */
-        public objType():string {
-            return &#x27;HUDDisplay&#x27;;
-        }
-
-        /**
-        * The type of device that is being targeted for the game. This is the same as games deviceTargetOption 
-        * Needed as the type of device will detiremine how the items will be added to game or whether it will even work.
-        * 
-        * @property _device
-        * @type number
-        * @private
-        */
-        private _device: number;
-
-        /**
-        * The HUD Manager that this Display belongs to. 
-        * @property _manager
-        * @type Kiwi.HUD.HUDManager
-        * @private
-        */
-        private _manager: Kiwi.HUD.HUDManager;
-
-        /**
-        * Holds the container HTMLDivElement.
-        * @property container
-        * @type HTMLDivElement
-        * @public
-        */
-        public container: HTMLDivElement;
-
-        /**
-        * The name of this HUD Display. 
-        * @property name
-        * @type String
-        * @public
-        */
-        public name: string;
-        
-        /**
-        * The game that this HUD Display is on.
-        * @property _game
-        * @type Kiwi.Game
-        * @private
-        */
-        private _game: Kiwi.Game;
-
-        /**
-        * Contains a list of the widgets that are contained in this HUDDisplay. Each member is of the type Kiwi.HUD.HUDWidget.
-        * @property _widgets
-        * @type Array
-        * @private
-        */
-        private _widgets: Kiwi.HUD.HUDWidget[];
-
-        /**
-        * Adds a widget to the HUDDisplay. Returns a boolean as an indication of whether or not it was successful.
-        *
-        * @method addWidget
-        * @param widget {Kiwi.HUD.HUDWidget}  The widget to be added to the Display
-        * @return {Boolean} If it was successful or not.
-        * @public
-        */
-        public addWidget(widget: Kiwi.HUD.HUDWidget):boolean {
-            if (this._manager.supported) {
-                this._widgets.push(widget);
-                
-                if (this._device == Kiwi.TARGET_BROWSER) {
-                    this.container.appendChild(widget.container);
-                    return true;
-                }
-            }
-            return false;
-        }
-
-        /**
-        * Removes a singular widget from the display. Returns a boolean as an indication of if anything happened or not.
-        * 
-        * @method removeWidget
-        * @param widget {Kiwi.HUD.HUDWidget} The widget to be removed.
-        * @return {boolean} If it was successful or not.
-        * @public
-        */
-        public removeWidget(widget: Kiwi.HUD.HUDWidget):boolean {
-            if (this._manager.supported) {
-                
-                if (this.removeFromContainer(widget)) {
-
-                    var i = this._widgets.indexOf(widget);
-
-                    if (i !== -1) {
-                        this._widgets.splice(i, 1);
-                        return true;
-                    }
-                }
-
-            }
-            return false;
-        }
-
-        /**
-        * Removes all of the widgets on this display.
-        * @method removeAllWidgets
-        * @public
-        */
-        public removeAllWidgets() {
-            for (var i = 0; i &lt; this._widgets.length; i++) {
-                this.removeFromContainer(this._widgets[i]);
-            }
-
-            this._widgets = [];
-        }
-
-        /**
-        * Removes a widget from on the HUDDisplay. 
-        * @method removeFromContainer
-        * @param widget {Kiwi.HUD.HUDWidget} The Widget to be removed.
-        * @returns {boolean}
-        */
-        private removeFromContainer(widget:Kiwi.HUD.HUDWidget):boolean {
-            if (this._manager.supported) {
-                if(this._device == Kiwi.TARGET_BROWSER) {
-
-                    if (this.container.contains(widget.container)) {
-                        this.container.removeChild(widget.container);
-                        return true;
-                    }
-
-                }
-            }
-            return false;
-        }
-
-        /**
-        * Update loop.
-        * @method update
-        * @public
-        */
-        public update() {
-            for (var i = 0; i &lt; this._widgets.length; i++) {
-                this._widgets[i].update();
-            }
-        }
-
-        /**
-        * Shows displays the HUD Display on screen.
-        * @method show
-        * @public
-        */
-        public show() {
-            this.container.style.display = &#x27;block&#x27;;
-        }
-
-        /**
-        * Hides the current HUD Display from the screen.
-        * @method hide
-        * @public
-        */
-        public hide() {
-            this.container.style.display = &#x27;none&#x27;;
-        }
-
-        /**
-        * The class name that the container element that this HUDWidget current has.
-        * @property class
-        * @type {String} 
-        * @public
-        */
-        public set class(cssClass: string) {
-            if (this._device == Kiwi.TARGET_BROWSER) {
-                this.container.className = cssClass;
-            }
-        }
-        public get class(): string {
-            if (this._device == Kiwi.TARGET_BROWSER) {
-                return this.container.className;
-            }
-        }
-
-    }
+	/**
+	* A HUDDisplay is a container for which you can add/removes widget on, and is more used to manage the widgets that are being displayed on it.
+	* A HUDDisplay is created through a games HUDManager and is NOT directly instantiated.
+	* Each game can contain multiple HUDDisplay&#x27;s and each HUDDisplay can contain multiple HUDWidgets.
+	*
+	* @class HUDDisplay
+	* @namespace Kiwi.HUD
+	* @constructor
+	* @param game {Kiwi.Game} The game that this HUD Display belongs to. 
+	* @param name {string} The name of this display.
+	* @return HUDDisplay
+	*/
+	export class HUDDisplay {
+
+		constructor(game: Kiwi.Game,name:string) {
+			this._game = game;
+			this.name = name;
+			this._manager = this._game.huds;
+			this._device = this._game.deviceTargetOption;
+
+			if (this._manager.supported) {
+
+				switch (this._device) {
+					case Kiwi.TARGET_BROWSER:
+						this.container = &lt;HTMLDivElement&gt;document.createElement(&quot;div&quot;);
+						this.container.id = &quot;HUD-layer-&quot; + game.rnd.uuid();
+						this.container.style.width = &quot;100%&quot;;
+						this.container.style.height = &quot;100%&quot;;
+						this.container.style.position = &quot;absolute&quot;;
+						this._widgets = new Array();
+
+						break;
+				}
+
+				this.class = &#x27;kiwi-display&#x27;;
+			}
+		}
+
+		/**
+		* Returns the type of object that this is.
+		* @method objType
+		* @return {String} &quot;HUDDisplay&quot;
+		* @public
+		*/
+		public objType():string {
+			return &#x27;HUDDisplay&#x27;;
+		}
+
+		/**
+		* The type of device that is being targeted for the game. This is the same as games deviceTargetOption 
+		* Needed as the type of device will detiremine how the items will be added to game or whether it will even work.
+		* 
+		* @property _device
+		* @type number
+		* @private
+		*/
+		private _device: number;
+
+		/**
+		* The HUD Manager that this Display belongs to. 
+		* @property _manager
+		* @type Kiwi.HUD.HUDManager
+		* @private
+		*/
+		private _manager: Kiwi.HUD.HUDManager;
+
+		/**
+		* Holds the container HTMLDivElement.
+		* @property container
+		* @type HTMLDivElement
+		* @public
+		*/
+		public container: HTMLDivElement;
+
+		/**
+		* The name of this HUD Display. 
+		* @property name
+		* @type String
+		* @public
+		*/
+		public name: string;
+		
+		/**
+		* The game that this HUD Display is on.
+		* @property _game
+		* @type Kiwi.Game
+		* @private
+		*/
+		private _game: Kiwi.Game;
+
+		/**
+		* Contains a list of the widgets that are contained in this HUDDisplay. Each member is of the type Kiwi.HUD.HUDWidget.
+		* @property _widgets
+		* @type Array
+		* @private
+		*/
+		private _widgets: Kiwi.HUD.HUDWidget[];
+
+		/**
+		* Adds a widget to the HUDDisplay. Returns a boolean as an indication of whether or not it was successful.
+		*
+		* @method addWidget
+		* @param widget {Kiwi.HUD.HUDWidget}  The widget to be added to the Display
+		* @return {Boolean} If it was successful or not.
+		* @public
+		*/
+		public addWidget(widget: Kiwi.HUD.HUDWidget):boolean {
+			if (this._manager.supported) {
+				this._widgets.push(widget);
+				
+				if (this._device == Kiwi.TARGET_BROWSER) {
+					this.container.appendChild(widget.container);
+					return true;
+				}
+			}
+			return false;
+		}
+
+		/**
+		* Removes a singular widget from the display. Returns a boolean as an indication of if anything happened or not.
+		* 
+		* @method removeWidget
+		* @param widget {Kiwi.HUD.HUDWidget} The widget to be removed.
+		* @return {boolean} If it was successful or not.
+		* @public
+		*/
+		public removeWidget(widget: Kiwi.HUD.HUDWidget):boolean {
+			if (this._manager.supported) {
+				
+				if (this.removeFromContainer(widget)) {
+
+					var i = this._widgets.indexOf(widget);
+
+					if (i !== -1) {
+						this._widgets.splice(i, 1);
+						return true;
+					}
+				}
+
+			}
+			return false;
+		}
+
+		/**
+		* Removes all of the widgets on this display.
+		* @method removeAllWidgets
+		* @public
+		*/
+		public removeAllWidgets() {
+			for (var i = 0; i &lt; this._widgets.length; i++) {
+				this.removeFromContainer(this._widgets[i]);
+			}
+
+			this._widgets = [];
+		}
+
+		/**
+		* Removes a widget from on the HUDDisplay. 
+		* @method removeFromContainer
+		* @param widget {Kiwi.HUD.HUDWidget} The Widget to be removed.
+		* @returns {boolean}
+		*/
+		private removeFromContainer(widget:Kiwi.HUD.HUDWidget):boolean {
+			if (this._manager.supported) {
+				if(this._device == Kiwi.TARGET_BROWSER) {
+
+					if (this.container.contains(widget.container)) {
+						this.container.removeChild(widget.container);
+						return true;
+					}
+
+				}
+			}
+			return false;
+		}
+
+		/**
+		* Update loop.
+		* @method update
+		* @public
+		*/
+		public update() {
+			for (var i = 0; i &lt; this._widgets.length; i++) {
+				this._widgets[i].update();
+			}
+		}
+
+		/**
+		* Shows displays the HUD Display on screen.
+		* @method show
+		* @public
+		*/
+		public show() {
+			this.container.style.display = &#x27;block&#x27;;
+		}
+
+		/**
+		* Hides the current HUD Display from the screen.
+		* @method hide
+		* @public
+		*/
+		public hide() {
+			this.container.style.display = &#x27;none&#x27;;
+		}
+
+		/**
+		* The class name that the container element that this HUDWidget current has.
+		* @property class
+		* @type {String} 
+		* @public
+		*/
+		public set class(cssClass: string) {
+			if (this._device == Kiwi.TARGET_BROWSER) {
+				this.container.className = cssClass;
+			}
+		}
+		public get class(): string {
+			if (this._device == Kiwi.TARGET_BROWSER) {
+				return this.container.className;
+			}
+		}
+
+	}
 }
 
-
     </pre>
 </div>
 
diff --git a/docs/files/src_hud_HUDManager.ts.html b/docs/files/src_hud_HUDManager.ts.html
index c36ae6f..c673957 100644
--- a/docs/files/src_hud_HUDManager.ts.html
+++ b/docs/files/src_hud_HUDManager.ts.html
@@ -375,288 +375,287 @@ <h1 class="file-heading">File: src/hud/HUDManager.ts</h1>
 
 module Kiwi.HUD {
 
-    /**
-    * This class manages all of the various HUDDisplays that are currently used on this Managers game.
-    * Using this class you can create/add and remove HUDDisplays from this game,
-    * change the HUDDisplay that is currently being display (also known as the currentHUD) and show/hide the currentHUD.
-    * Each HUDManager also has at least one HUDDisplay which is called the &#x27;defaultHUD&#x27; you cannot remove,
-    * but you can reassign the defaultHUD to be a different HUDDisplay if you want. 
-    * 
-    *
-    * @class HUDManager
-    * @namespace Kiwi.HUD
-    * @constructor
-    * @param game {Kiwi.Game} game
-    * @return {Kiwi.HUD.HUDManager}
-    */
-    export class HUDManager {
-        
-        constructor(game: Kiwi.Game) {
-            this._game = game;
-            this._device = this._game.deviceTargetOption;
-        }
-
-        /**
-        * The game that this HUDManager belongs to.
-        * @property _game
-        * @type Kiwi.Game
-        * @private
-        */
-        private _game: Kiwi.Game;
-
-        /**
-        * The device that this game is being target at. The same as the deviceTargetOption property on the root Game.
-        * This is needed as it detirmines if HUD is supported on the device or not and if so, how it is implemented. 
-        * @property _device
-        * @type number
-        * @private
-        */
-        private _device: number;
-
-        /**
-        * If the HUD is supported on the DEVICE that is being targeted. Gets set during the BOOT sequence.
-        * @property _supported
-        * @type boolean
-        * @private
-        */
-        private _supported: boolean;
-
-        /**
-        * Returns the _supported property indicating whether HUD is supported or not.
-        * @property supported
-        * @type boolean
-        * @public
-        */
-        public get supported():boolean {
-            return this._supported;
-        }
-
-        /**
-        * The HTMLDivElement that is being used as the container for the whole manager.
-        * @property _hudContainer
-        * @type HTMLDivElement
-        * @private
-        */
-        private _hudContainer: HTMLDivElement;
-
-        /**
-        * The DOM is ready, so if the current state is pending we can boot up the HUD now.
-        * @method boot
-        * @public
-        */
-        public boot() {
-
-            if (this._device === Kiwi.TARGET_BROWSER) {
-                this._supported = true;
-
-                this._hudContainer = &lt;HTMLDivElement&gt;document.createElement(&quot;div&quot;);
-                this._hudContainer.id = &quot;HUDContainer&quot;;
-                this._hudContainer.style.position = &quot;absolute&quot;;
-                this._hudContainer.style.width = &quot;100%&quot;;
-                this._hudContainer.style.height = &quot;100%&quot;;
-                this._hudContainer.style.top = &#x27;0&#x27;;
-                this._hudContainer.style.left = &#x27;0&#x27;;
-                this._game.stage.container.appendChild(this._hudContainer);
-
-                this._huds = new Array&lt;HUDDisplay&gt;();
-
-                this._defaultHUD = this.createHUD(&quot;defaultHUD&quot;);
-                this._currentHUD = this._defaultHUD;
-                this.setHUD(this._defaultHUD);
-
-            } else {
-                this._supported = false;
-            }
-
-        }
-
-        /**
-        * Returns the type of object this is.
-        * @method objType
-        * @return {String} &quot;HUDManager&quot;
-        * @public
-        */
-        public objType():string {
-            return &quot;HUDManager&quot;;
-        }
-
-        /**
-        * An array containing all of the HUDDisplays that are currently active on this HUDManager.
-        * @property _huds
-        * @type Array
-        * @private
-        */
-        private _huds: Kiwi.HUD.HUDDisplay[];
-
-        /**
-        * The defaultHUD that is being used.
-        * The defaultHUD cannot be removed, but can be swapped out for another HUDDisplay.
-        * @property _defaultHUD
-        * @type Kiwi.HUD.HUDDisplay
-        * @private
-        */
-        private _defaultHUD: Kiwi.HUD.HUDDisplay;
-
-        /**
-        * The currentHUD that is in use. Can be the same as the defaultHUD.
-        * @property _currentHUD
-        * @type Kiwi.HUD.HUDDisplay
-        * @private
-        */
-        private _currentHUD: Kiwi.HUD.HUDDisplay;
-
-        /**
-        * The default HUDDisplay that is to be used.
-        * The defaultHUD cannot be removed, and a game (that supports HUDS) will always contain the defaultHUD.
-        *
-        * @property defaultHUD
-        * @type Kiwi.HUD.HUDDisplay
-        * @public
-        */
-        public set defaultHUD(value: Kiwi.HUD.HUDDisplay) {
-            if (this._currentHUD === this._defaultHUD) {
-                this._currentHUD = value;
-                this.setHUD(this._currentHUD);
-            }
-            this._defaultHUD = value;
-        }
-        public get defaultHUD(): Kiwi.HUD.HUDDisplay {
-            return this._defaultHUD;
-        }
-
-        /**
-        * Changes the currentHUD that is being displayed to one that is passed.
-        * @method setHUD
-        * @param hud {Kiwi.HUD.HUDDisplay} The HUD you want to display. 
-        * @public
-        */
-        public setHUD(hud: Kiwi.HUD.HUDDisplay) {
-            if (this.supported) {
-                this.hideHUD();
-                this._currentHUD = hud;
-                this.showHUD();
-            }
-        }
-
-        /**
-        * Shows the currentHUD (if nothing is passed) or shows a HUDDisplay that is passed.
-        * @method showHUD
-        * @param [hud=currentHUD] {Kiwi.HUD.HUDDisplay} The HUDDisplay you want to show. Defaults to the currentHUD if nothing is passed.
-        * @public
-        */
-        public showHUD(hud:Kiwi.HUD.HUDDisplay=this._currentHUD) {
-            hud.show();
-        }
-
-        /**
-        * Hides the currentHUD (if nothing is passed) or shows a HUDDisplay that is passed.
-        * @method hideHUD 
-        * @param [hud=currentHUD] {Kiwi.HUD.HUDDisplay} The HUDDisplay you want to hude. Defaults to the currentHUD if nothing is passed.
-        * @public
-        */
-        public hideHUD(hud:Kiwi.HUD.HUDDisplay=this._currentHUD) {
-            hud.hide();
-        }
-
-        /**
-        * Creates a new HUDDisplay on this HUDManager.
-        * 
-        * @method createHUD
-        * @param name {string} Name of the new HUDDisplay that is being creates.
-        * @param [switchTo=false] {boolean} Switch to the new HUD that was created. DE
-        * @return {Kiwi.HUD.HUDDisplay} The HUDDisplay that was created.
-        * @public
-        */
-        public createHUD(name: string, switchTo:boolean=false): Kiwi.HUD.HUDDisplay {
-            
-            if (this.supported) {
-
-                var hud: Kiwi.HUD.HUDDisplay = new Kiwi.HUD.HUDDisplay(this._game, name);
-                hud.hide();
-                this.addToContainer(hud);
-                this._huds.push(hud);
-                
-                if(switchTo === true) this.setHUD(hud);
-
-                return hud;
-
-            }
-        }
-
-        /**
-        * Removes a HUDDisplay off this manager. Returns a boolean indicating whether or not this method was a success.
-        *
-        * @method removeHUD
-        * @param hud {Kiwi.HUD.HUDDisplay} The hud you want to remove.
-        * @returns {boolean} If this method succeeded or not.
-        * @public
-        */
-        public removeHUD(hud: Kiwi.HUD.HUDDisplay):boolean {
-            if (this.supported) {
-                if (hud === this._defaultHUD) {
-                    return false;
-                }
-
-                if (this._currentHUD === hud) {
-                    this.setHUD(this._defaultHUD);
-                }
-
-                this.removeFromContainer(hud);
-
-                var i = this._huds.indexOf(hud);
-
-                if (i !== -1) {
-                    this._huds.splice(i, 1);
-                }
-
-                return true;
-            }
-        }
-
-        /**
-        * Adds a HUDDisplays HTMLDivElement to this HUDManagers container element.
-        * @method addToContainer
-        * @param hud {Kiwi.HUD.HUDDisplay} The HUDDisplay that is to be added.
-        * @private
-        */
-        private addToContainer(hud:Kiwi.HUD.HUDDisplay) {
-            if (this._device == Kiwi.TARGET_BROWSER) {
-                this._hudContainer.appendChild(hud.container);
-            }
-        }
-
-        /**
-        * Removes the hud that is passed from this HUD Manager. Checks to see if that hud has this container as a parent first.
-        * @method removeFromContainer
-        * @param hud {Kiwi.HUD.HUDDisplay} The hud to be removed
-        * @private
-        */
-        private removeFromContainer(hud: Kiwi.HUD.HUDDisplay) {
-            if (this._device == Kiwi.TARGET_BROWSER) {
-                if (this._hudContainer.contains(hud.container)) {
-                    this._hudContainer.removeChild(hud.container);
-                }
-            }
-
-        }
-
-        /**
-        * Game loop
-        * @method update
-        * @public
-        */
-        public update() {
-            if (this._supported) {
-                for (var i = 0; i &lt; this._huds.length; i++) {
-                    this._huds[i].update();
-                }
-            }
-        }
-
-    }
+	/**
+	* This class manages all of the various HUDDisplays that are currently used on this Managers game.
+	* Using this class you can create/add and remove HUDDisplays from this game,
+	* change the HUDDisplay that is currently being display (also known as the currentHUD) and show/hide the currentHUD.
+	* Each HUDManager also has at least one HUDDisplay which is called the &#x27;defaultHUD&#x27; you cannot remove,
+	* but you can reassign the defaultHUD to be a different HUDDisplay if you want. 
+	* 
+	*
+	* @class HUDManager
+	* @namespace Kiwi.HUD
+	* @constructor
+	* @param game {Kiwi.Game} game
+	* @return {Kiwi.HUD.HUDManager}
+	*/
+	export class HUDManager {
+
+		constructor(game: Kiwi.Game) {
+			this._game = game;
+			this._device = this._game.deviceTargetOption;
+		}
+
+		/**
+		* The game that this HUDManager belongs to.
+		* @property _game
+		* @type Kiwi.Game
+		* @private
+		*/
+		private _game: Kiwi.Game;
+
+		/**
+		* The device that this game is being target at. The same as the deviceTargetOption property on the root Game.
+		* This is needed as it detirmines if HUD is supported on the device or not and if so, how it is implemented. 
+		* @property _device
+		* @type number
+		* @private
+		*/
+		private _device: number;
+
+		/**
+		* If the HUD is supported on the DEVICE that is being targeted. Gets set during the BOOT sequence.
+		* @property _supported
+		* @type boolean
+		* @private
+		*/
+		private _supported: boolean;
+
+		/**
+		* Returns the _supported property indicating whether HUD is supported or not.
+		* @property supported
+		* @type boolean
+		* @public
+		*/
+		public get supported():boolean {
+			return this._supported;
+		}
+
+		/**
+		* The HTMLDivElement that is being used as the container for the whole manager.
+		* @property _hudContainer
+		* @type HTMLDivElement
+		* @private
+		*/
+		private _hudContainer: HTMLDivElement;
+
+		/**
+		* The DOM is ready, so if the current state is pending we can boot up the HUD now.
+		* @method boot
+		* @public
+		*/
+		public boot() {
+
+			if (this._device === Kiwi.TARGET_BROWSER) {
+				this._supported = true;
+
+				this._hudContainer = &lt;HTMLDivElement&gt;document.createElement(&quot;div&quot;);
+				this._hudContainer.id = &quot;HUDContainer&quot;;
+				this._hudContainer.style.position = &quot;absolute&quot;;
+				this._hudContainer.style.width = &quot;100%&quot;;
+				this._hudContainer.style.height = &quot;100%&quot;;
+				this._hudContainer.style.top = &#x27;0&#x27;;
+				this._hudContainer.style.left = &#x27;0&#x27;;
+				this._game.stage.container.appendChild(this._hudContainer);
+
+				this._huds = new Array&lt;HUDDisplay&gt;();
+
+				this._defaultHUD = this.createHUD(&quot;defaultHUD&quot;);
+				this._currentHUD = this._defaultHUD;
+				this.setHUD(this._defaultHUD);
+
+			} else {
+				this._supported = false;
+			}
+
+		}
+
+		/**
+		* Returns the type of object this is.
+		* @method objType
+		* @return {String} &quot;HUDManager&quot;
+		* @public
+		*/
+		public objType():string {
+			return &quot;HUDManager&quot;;
+		}
+
+		/**
+		* An array containing all of the HUDDisplays that are currently active on this HUDManager.
+		* @property _huds
+		* @type Array
+		* @private
+		*/
+		private _huds: Kiwi.HUD.HUDDisplay[];
+
+		/**
+		* The defaultHUD that is being used.
+		* The defaultHUD cannot be removed, but can be swapped out for another HUDDisplay.
+		* @property _defaultHUD
+		* @type Kiwi.HUD.HUDDisplay
+		* @private
+		*/
+		private _defaultHUD: Kiwi.HUD.HUDDisplay;
+
+		/**
+		* The currentHUD that is in use. Can be the same as the defaultHUD.
+		* @property _currentHUD
+		* @type Kiwi.HUD.HUDDisplay
+		* @private
+		*/
+		private _currentHUD: Kiwi.HUD.HUDDisplay;
+
+		/**
+		* The default HUDDisplay that is to be used.
+		* The defaultHUD cannot be removed, and a game (that supports HUDS) will always contain the defaultHUD.
+		*
+		* @property defaultHUD
+		* @type Kiwi.HUD.HUDDisplay
+		* @public
+		*/
+		public set defaultHUD(value: Kiwi.HUD.HUDDisplay) {
+			if (this._currentHUD === this._defaultHUD) {
+				this._currentHUD = value;
+				this.setHUD(this._currentHUD);
+			}
+			this._defaultHUD = value;
+		}
+		public get defaultHUD(): Kiwi.HUD.HUDDisplay {
+			return this._defaultHUD;
+		}
+
+		/**
+		* Changes the currentHUD that is being displayed to one that is passed.
+		* @method setHUD
+		* @param hud {Kiwi.HUD.HUDDisplay} The HUD you want to display. 
+		* @public
+		*/
+		public setHUD(hud: Kiwi.HUD.HUDDisplay) {
+			if (this.supported) {
+				this.hideHUD();
+				this._currentHUD = hud;
+				this.showHUD();
+			}
+		}
+
+		/**
+		* Shows the currentHUD (if nothing is passed) or shows a HUDDisplay that is passed.
+		* @method showHUD
+		* @param [hud=currentHUD] {Kiwi.HUD.HUDDisplay} The HUDDisplay you want to show. Defaults to the currentHUD if nothing is passed.
+		* @public
+		*/
+		public showHUD(hud:Kiwi.HUD.HUDDisplay=this._currentHUD) {
+			hud.show();
+		}
+
+		/**
+		* Hides the currentHUD (if nothing is passed) or shows a HUDDisplay that is passed.
+		* @method hideHUD 
+		* @param [hud=currentHUD] {Kiwi.HUD.HUDDisplay} The HUDDisplay you want to hude. Defaults to the currentHUD if nothing is passed.
+		* @public
+		*/
+		public hideHUD(hud:Kiwi.HUD.HUDDisplay=this._currentHUD) {
+			hud.hide();
+		}
+
+		/**
+		* Creates a new HUDDisplay on this HUDManager.
+		* 
+		* @method createHUD
+		* @param name {string} Name of the new HUDDisplay that is being creates.
+		* @param [switchTo=false] {boolean} Switch to the new HUD that was created. DE
+		* @return {Kiwi.HUD.HUDDisplay} The HUDDisplay that was created.
+		* @public
+		*/
+		public createHUD(name: string, switchTo:boolean=false): Kiwi.HUD.HUDDisplay {
+			
+			if (this.supported) {
+
+				var hud: Kiwi.HUD.HUDDisplay = new Kiwi.HUD.HUDDisplay(this._game, name);
+				hud.hide();
+				this.addToContainer(hud);
+				this._huds.push(hud);
+				
+				if(switchTo === true) this.setHUD(hud);
+
+				return hud;
+
+			}
+		}
+
+		/**
+		* Removes a HUDDisplay off this manager. Returns a boolean indicating whether or not this method was a success.
+		*
+		* @method removeHUD
+		* @param hud {Kiwi.HUD.HUDDisplay} The hud you want to remove.
+		* @returns {boolean} If this method succeeded or not.
+		* @public
+		*/
+		public removeHUD(hud: Kiwi.HUD.HUDDisplay):boolean {
+			if (this.supported) {
+				if (hud === this._defaultHUD) {
+					return false;
+				}
+
+				if (this._currentHUD === hud) {
+					this.setHUD(this._defaultHUD);
+				}
+
+				this.removeFromContainer(hud);
+
+				var i = this._huds.indexOf(hud);
+
+				if (i !== -1) {
+					this._huds.splice(i, 1);
+				}
+
+				return true;
+			}
+		}
+
+		/**
+		* Adds a HUDDisplays HTMLDivElement to this HUDManagers container element.
+		* @method addToContainer
+		* @param hud {Kiwi.HUD.HUDDisplay} The HUDDisplay that is to be added.
+		* @private
+		*/
+		private addToContainer(hud:Kiwi.HUD.HUDDisplay) {
+			if (this._device == Kiwi.TARGET_BROWSER) {
+				this._hudContainer.appendChild(hud.container);
+			}
+		}
+
+		/**
+		* Removes the hud that is passed from this HUD Manager. Checks to see if that hud has this container as a parent first.
+		* @method removeFromContainer
+		* @param hud {Kiwi.HUD.HUDDisplay} The hud to be removed
+		* @private
+		*/
+		private removeFromContainer(hud: Kiwi.HUD.HUDDisplay) {
+			if (this._device == Kiwi.TARGET_BROWSER) {
+				if (this._hudContainer.contains(hud.container)) {
+					this._hudContainer.removeChild(hud.container);
+				}
+			}
+
+		}
+
+		/**
+		* Game loop
+		* @method update
+		* @public
+		*/
+		public update() {
+			if (this._supported) {
+				for (var i = 0; i &lt; this._huds.length; i++) {
+					this._huds[i].update();
+				}
+			}
+		}
+
+	}
 }
 
-
     </pre>
 </div>
 
diff --git a/docs/files/src_hud_HUDWidget.ts.html b/docs/files/src_hud_HUDWidget.ts.html
index 9bad3e7..1157de0 100644
--- a/docs/files/src_hud_HUDWidget.ts.html
+++ b/docs/files/src_hud_HUDWidget.ts.html
@@ -372,311 +372,310 @@ <h1 class="file-heading">File: src/hud/HUDWidget.ts</h1>
 
 module Kiwi.HUD {
 
-    /**
-    * The HUDWidget is an abstract class containing the fundamental properties and methods that every HUDWidget needs to have.
-    * This class is designed to be extended from and thus objects should not directly instantiate it.
-    *
-    * @class HUDWidget
-    * @namespace Kiwi.HUD
-    * @constructor
-    * @param game {Kiwi.Game}  The game that this HUDWidget belongs to.
-    * @param name {string} Name of the type of HUDWidget.
-    * @param x {number} The coordinates of this HUDWidget on the x-axis.
-    * @param y {number} The coordinates of this HUDWidget on the y-axis.
-    * @return {Kiwi.HUD.HUDWidget}
-    */
-    export class HUDWidget {
-        
-        constructor(game:Kiwi.Game,name: string,x:number,y:number) {
-            this.name = name;
-            this.game = game;
-            this._manager = this.game.huds;
-            this._device = this.game.deviceTargetOption;
-            this.components = new Kiwi.ComponentManager(Kiwi.HUD_WIDGET, this);
-
-            if (this._manager.supported) {
-
-                if(this._device === Kiwi.TARGET_BROWSER) {
-                    this.container = &lt;HTMLDivElement&gt;document.createElement(&quot;div&quot;);
-                    this.container.id = &#x27;HUD-widget-&#x27; + this.game.rnd.uuid();
-                    this.container.className = &#x27;HUD-widget&#x27;;
-                    this.container.style.position = &quot;absolute&quot;;
-                }
-                
-                this.onCoordsUpdate = new Kiwi.Signal();
-                this.x = x;
-                this.y = y;
-            }
-        }
-
-        /**
-        * Returns the type of object that this is.
-        * @method objType
-        * @return {String} &quot;HUDWidget&quot;
-        * @public
-        */
-        public objType(): string {
-            return &#x27;HUDWidget&#x27;;
-        }
-
-        /**
-        * The HUDManager that this widget &#x27;belongs&#x27; to.
-        * This is mainly indented for INTERNAL Kiwi use only and is public so that sub classes can have a reference to it.
-        * @property _manager
-        * @type Kiwi.HUD.HUDManager
-        * @protected
-        */
-        public _manager: Kiwi.HUD.HUDManager;
-        
-        /**
-        * The type of device that this game is being targeted at. Same as the deviceTargetOption on the game class.
-        * Used to detirmine how the HUD is to be managed behind the scenes.
-        * This is mainly indented for INTERNAL Kiwi use only and is public so that sub classes can have a reference to it.
-        * @property _device
-        * @type _device
-        * @protected
-        */
-        public _device: number;
-
-        /**
-        * The game that this HUDWidget belongs to.
-        * @property game
-        * @type Kiwi.Game
-        * @public
-        */
-        public game: Kiwi.Game;
-
-        /**
-        * A quick way to reference the style object that exists on the container element of this widget.
-        * @property style
-        * @type any
-        * @public
-        */
-        public get style():any {
-            if (this._device === Kiwi.TARGET_BROWSER) {
-                return this.container.style;
-            }
-        }
-        public set style(val: any) {
-            if (this._device === Kiwi.TARGET_BROWSER) {
-                this.container.style = val;
-            }
-        }
-
-        /**
-        * Called when the coordinates of the HUD Widget updates.
-        * @property onCoordsUpdate
-        * @type Kiwi.Signal
-        * @public
-        */
-        public onCoordsUpdate: Kiwi.Signal;
-
-        /**
-        * The x coordinate of the widget
-        * @property _x
-        * @type number
-        * @private
-        */
-        private _x: number;
-        
-        /**
-        * Get the x coordinate of the widget
-        * @property x
-        * @type number
-        * @public
-        */
-        public get x():number {
-            return this._x;
-        }
-        public set x(value: number) {
-            if (this._manager.supported) {
-                this._x = value;
-                if(this._device == Kiwi.TARGET_BROWSER) 
-                    this.container.style.left = this.x + &quot;px&quot;;
-                
-                this.onCoordsUpdate.dispatch(this.x, this.y);
-            }
-        }
-        
-        /**
-        * The y coordinate of the widget
-        * @property _y
-        * @type number
-        * @private
-        */
-        private _y: number;
-        
-        /**
-        * Get the y coordinate of the widget
-        * @property y
-        * @type number
-        * @public
-        */
-        public get y(): number {
-            return this._y;
-        }
-        public set y(value: number) {
-            if (this._manager.supported) {
-                this._y = value;
-                if(this._device == Kiwi.TARGET_BROWSER)
-                    this.container.style.top = this.y + &quot;px&quot;;
-
-                this.onCoordsUpdate.dispatch(this.x, this.y);
-            }    
-        }
-        
-        /**
-        * The list of components that the HUDWidget use&#x27;s.
-        * @property components
-        * @type Kiwi.ComponentManager
-        * @public
-        */
-        public components: Kiwi.ComponentManager;
-        
-        /**
-        * The HTMLDivElement that this widget is using.
-        * @property
-        * @type HTMLDivElement
-        * @public
-        */
-        public container: HTMLDivElement;
-
-        /**
-        * The name of the widget which is used to identify the type of widget.
-        * @property
-        * @type string
-        * @public
-        */
-        public name: string;
-
-        /**
-        * When a template has been set, this property will have a reference to the HTMLElement we can place the HUDWidget information into.
-        * Currently doesn&#x27;t have that great support.
-        * @property tempElement
-        * @type HTMLElement
-        * @public
-        */
-        public tempElement: HTMLElement;
-
-        /**
-        * The parent of the template container. So that when removing a template we can place it in the right spot
-        * Currently doesn&#x27;t have that great support.
-        * @property _tempParent
-        * @type HTMLElement
-        * @private
-        */
-        private _tempParent: HTMLElement;
-
-        /**
-        * The container element for the template
-        * Currently doesn&#x27;t have that great support.
-        * @property _tempContainer
-        * @type HTMLElement
-        * @private
-        */
-        private _tempContainer: HTMLElement; 
-
-        /**
-        * This method is used to remove existing DOM elements and place them inside a HUDWidget&#x27;s container element.
-        * Useful so that when making HUD Widgets the developer can style HUDWidgets without having to create/write to much javascript.
-        *
-        * Can be used by itself but maybe more useful if you customise it to suit your own needs. 
-        * Currently doesn&#x27;t have that great support.
-        *
-        * @method setTemplate
-        * @param main {string} main - ID of an HTMLElement. This element should contain all of the elements you would like to place inside the HUDWidget. 
-        * @param [element] {string} element - ID of an HTMLElement that resides inside of the main param. This is the element that the HUDWidget can use to populate with information. E.g. Your score, health remaining, the icon, e.t.c.
-        * @public
-        */
-        public setTemplate(main: string, element?: string, ...paramsArr: any[]) {
-
-            if (this._device == Kiwi.TARGET_BROWSER) {
-                var containerElement: HTMLElement = document.getElementById(main);
-                if (containerElement === undefined) {
-                    return;
-                }
-
-                if (element === undefined) {
-                    var fieldElement = containerElement;
-                } else {
-                    var fieldElement: HTMLElement = document.getElementById(element);
-                    if (fieldElement === undefined || containerElement.contains(fieldElement) === false) {
-                        return;
-                    }
-                }
-                
-                this.tempElement = fieldElement;
-                this._tempContainer = containerElement;
-                this._tempParent = containerElement.parentElement;
-                this._tempParent.removeChild(containerElement);
-                this.container.appendChild(containerElement);
-            }
-
-        }
-
-        /**
-        * Used to remove any the template HTML from this HUDWidget.
-        * Currently doesn&#x27;t have that great support.
-        * 
-        * @method removeTemplate
-        * @public
-        */
-        public removeTemplate() {
-            if (this._device == Kiwi.TARGET_BROWSER) {
-                if (this.tempElement !== undefined) {
-                    this.container.removeChild(this._tempContainer);
-                    this._tempParent.appendChild(this._tempContainer);
-                    this.tempElement = null;
-                    this._tempParent = null;
-                    this._tempContainer = null;
-                }
-            }
-        }
-
-        /**
-        * The class name/s that the container element that this HUDWidget current has.
-        * @property class
-        * @type {String} 
-        * @public
-        */
-        public set class(cssClass: string) {
-            if (this._device == Kiwi.TARGET_BROWSER) {
-                this.container.className = cssClass;
-            }
-        }
-        public get class(): string {
-            if (this._device == Kiwi.TARGET_BROWSER) {
-                return this.container.className;
-            }
-        }
-
-        /**
-        * The game update loop.
-        * @method update
-        * @public
-        */
-        public update() {
-            this.components.update();
-        }
-
-        /**
-        * 
-        * @method destroy
-        * @public
-        */
-        public destroy() {
-            delete this.game;
-            delete this._manager;
-            delete this._device;
-            if (this.onCoordsUpdate) this.onCoordsUpdate.dispose();
-            delete this.onCoordsUpdate;
-            //remove the elements....
-        }
-
-    }
+	/**
+	* The HUDWidget is an abstract class containing the fundamental properties and methods that every HUDWidget needs to have.
+	* This class is designed to be extended from and thus objects should not directly instantiate it.
+	*
+	* @class HUDWidget
+	* @namespace Kiwi.HUD
+	* @constructor
+	* @param game {Kiwi.Game}  The game that this HUDWidget belongs to.
+	* @param name {string} Name of the type of HUDWidget.
+	* @param x {number} The coordinates of this HUDWidget on the x-axis.
+	* @param y {number} The coordinates of this HUDWidget on the y-axis.
+	* @return {Kiwi.HUD.HUDWidget}
+	*/
+	export class HUDWidget {
+
+		constructor(game:Kiwi.Game,name: string,x:number,y:number) {
+			this.name = name;
+			this.game = game;
+			this._manager = this.game.huds;
+			this._device = this.game.deviceTargetOption;
+			this.components = new Kiwi.ComponentManager(Kiwi.HUD_WIDGET, this);
+
+			if (this._manager.supported) {
+
+				if(this._device === Kiwi.TARGET_BROWSER) {
+					this.container = &lt;HTMLDivElement&gt;document.createElement(&quot;div&quot;);
+					this.container.id = &#x27;HUD-widget-&#x27; + this.game.rnd.uuid();
+					this.container.className = &#x27;HUD-widget&#x27;;
+					this.container.style.position = &quot;absolute&quot;;
+				}
+				
+				this.onCoordsUpdate = new Kiwi.Signal();
+				this.x = x;
+				this.y = y;
+			}
+		}
+
+		/**
+		* Returns the type of object that this is.
+		* @method objType
+		* @return {String} &quot;HUDWidget&quot;
+		* @public
+		*/
+		public objType(): string {
+			return &#x27;HUDWidget&#x27;;
+		}
+
+		/**
+		* The HUDManager that this widget &#x27;belongs&#x27; to.
+		* This is mainly indented for INTERNAL Kiwi use only and is public so that sub classes can have a reference to it.
+		* @property _manager
+		* @type Kiwi.HUD.HUDManager
+		* @protected
+		*/
+		public _manager: Kiwi.HUD.HUDManager;
+
+		/**
+		* The type of device that this game is being targeted at. Same as the deviceTargetOption on the game class.
+		* Used to detirmine how the HUD is to be managed behind the scenes.
+		* This is mainly indented for INTERNAL Kiwi use only and is public so that sub classes can have a reference to it.
+		* @property _device
+		* @type _device
+		* @protected
+		*/
+		public _device: number;
+
+		/**
+		* The game that this HUDWidget belongs to.
+		* @property game
+		* @type Kiwi.Game
+		* @public
+		*/
+		public game: Kiwi.Game;
+
+		/**
+		* A quick way to reference the style object that exists on the container element of this widget.
+		* @property style
+		* @type any
+		* @public
+		*/
+		public get style():any {
+			if (this._device === Kiwi.TARGET_BROWSER) {
+				return this.container.style;
+			}
+		}
+		public set style(val: any) {
+			if (this._device === Kiwi.TARGET_BROWSER) {
+				this.container.style = val;
+			}
+		}
+
+		/**
+		* Called when the coordinates of the HUD Widget updates.
+		* @property onCoordsUpdate
+		* @type Kiwi.Signal
+		* @public
+		*/
+		public onCoordsUpdate: Kiwi.Signal;
+
+		/**
+		* The x coordinate of the widget
+		* @property _x
+		* @type number
+		* @private
+		*/
+		private _x: number;
+
+		/**
+		* Get the x coordinate of the widget
+		* @property x
+		* @type number
+		* @public
+		*/
+		public get x():number {
+			return this._x;
+		}
+		public set x(value: number) {
+			if (this._manager.supported) {
+				this._x = value;
+				if(this._device == Kiwi.TARGET_BROWSER) 
+					this.container.style.left = this.x + &quot;px&quot;;
+				
+				this.onCoordsUpdate.dispatch(this.x, this.y);
+			}
+		}
+
+		/**
+		* The y coordinate of the widget
+		* @property _y
+		* @type number
+		* @private
+		*/
+		private _y: number;
+
+		/**
+		* Get the y coordinate of the widget
+		* @property y
+		* @type number
+		* @public
+		*/
+		public get y(): number {
+			return this._y;
+		}
+		public set y(value: number) {
+			if (this._manager.supported) {
+				this._y = value;
+				if(this._device == Kiwi.TARGET_BROWSER)
+					this.container.style.top = this.y + &quot;px&quot;;
+
+				this.onCoordsUpdate.dispatch(this.x, this.y);
+			}
+		}
+
+		/**
+		* The list of components that the HUDWidget use&#x27;s.
+		* @property components
+		* @type Kiwi.ComponentManager
+		* @public
+		*/
+		public components: Kiwi.ComponentManager;
+
+		/**
+		* The HTMLDivElement that this widget is using.
+		* @property
+		* @type HTMLDivElement
+		* @public
+		*/
+		public container: HTMLDivElement;
+
+		/**
+		* The name of the widget which is used to identify the type of widget.
+		* @property
+		* @type string
+		* @public
+		*/
+		public name: string;
+
+		/**
+		* When a template has been set, this property will have a reference to the HTMLElement we can place the HUDWidget information into.
+		* Currently doesn&#x27;t have that great support.
+		* @property tempElement
+		* @type HTMLElement
+		* @public
+		*/
+		public tempElement: HTMLElement;
+
+		/**
+		* The parent of the template container. So that when removing a template we can place it in the right spot
+		* Currently doesn&#x27;t have that great support.
+		* @property _tempParent
+		* @type HTMLElement
+		* @private
+		*/
+		private _tempParent: HTMLElement;
+
+		/**
+		* The container element for the template
+		* Currently doesn&#x27;t have that great support.
+		* @property _tempContainer
+		* @type HTMLElement
+		* @private
+		*/
+		private _tempContainer: HTMLElement; 
+
+		/**
+		* This method is used to remove existing DOM elements and place them inside a HUDWidget&#x27;s container element.
+		* Useful so that when making HUD Widgets the developer can style HUDWidgets without having to create/write to much javascript.
+		*
+		* Can be used by itself but maybe more useful if you customise it to suit your own needs. 
+		* Currently doesn&#x27;t have that great support.
+		*
+		* @method setTemplate
+		* @param main {string} main - ID of an HTMLElement. This element should contain all of the elements you would like to place inside the HUDWidget. 
+		* @param [element] {string} element - ID of an HTMLElement that resides inside of the main param. This is the element that the HUDWidget can use to populate with information. E.g. Your score, health remaining, the icon, e.t.c.
+		* @public
+		*/
+		public setTemplate(main: string, element?: string, ...paramsArr: any[]) {
+
+			if (this._device == Kiwi.TARGET_BROWSER) {
+				var containerElement: HTMLElement = document.getElementById(main);
+				if (containerElement === undefined) {
+					return;
+				}
+
+				if (element === undefined) {
+					var fieldElement = containerElement;
+				} else {
+					var fieldElement: HTMLElement = document.getElementById(element);
+					if (fieldElement === undefined || containerElement.contains(fieldElement) === false) {
+						return;
+					}
+				}
+				
+				this.tempElement = fieldElement;
+				this._tempContainer = containerElement;
+				this._tempParent = containerElement.parentElement;
+				this._tempParent.removeChild(containerElement);
+				this.container.appendChild(containerElement);
+			}
+
+		}
+
+		/**
+		* Used to remove any the template HTML from this HUDWidget.
+		* Currently doesn&#x27;t have that great support.
+		* 
+		* @method removeTemplate
+		* @public
+		*/
+		public removeTemplate() {
+			if (this._device == Kiwi.TARGET_BROWSER) {
+				if (this.tempElement !== undefined) {
+					this.container.removeChild(this._tempContainer);
+					this._tempParent.appendChild(this._tempContainer);
+					this.tempElement = null;
+					this._tempParent = null;
+					this._tempContainer = null;
+				}
+			}
+		}
+
+		/**
+		* The class name/s that the container element that this HUDWidget current has.
+		* @property class
+		* @type {String} 
+		* @public
+		*/
+		public set class(cssClass: string) {
+			if (this._device == Kiwi.TARGET_BROWSER) {
+				this.container.className = cssClass;
+			}
+		}
+		public get class(): string {
+			if (this._device == Kiwi.TARGET_BROWSER) {
+				return this.container.className;
+			}
+		}
+
+		/**
+		* The game update loop.
+		* @method update
+		* @public
+		*/
+		public update() {
+			this.components.update();
+		}
+
+		/**
+		* 
+		* @method destroy
+		* @public
+		*/
+		public destroy() {
+			delete this.game;
+			delete this._manager;
+			delete this._device;
+			if (this.onCoordsUpdate) this.onCoordsUpdate.dispose();
+			delete this.onCoordsUpdate;
+			//remove the elements....
+		}
+
+	}
 }
 
-
     </pre>
 </div>
 
diff --git a/docs/files/src_hud_components_Counter.ts.html b/docs/files/src_hud_components_Counter.ts.html
index 273c81e..50a0cbb 100644
--- a/docs/files/src_hud_components_Counter.ts.html
+++ b/docs/files/src_hud_components_Counter.ts.html
@@ -374,190 +374,189 @@ <h1 class="file-heading">File: src/hud/components/Counter.ts</h1>
 
 module Kiwi.HUD.HUDComponents {
 
-    /**
-    * The Counter component handles a incrementation/decrementation of a singular numeric value. 
-    * You can also specifiy maximum/minimum values that the numeric value has be within but by default there is no max/min.
-    *
-    * @class Counter
-    * @extends Kiwi.Component
-    * @namespace Kiwi.HUD.HUDComponents
-    * @constructor
-    * @param owner {any} The object that this Component belongs to.
-    * @param current {number} The current value.
-    * @param [max=null] {number} The maximum value it can be. Default is null which means no maximum.
-    * @param [min=null] {number} The minimum value that the current can be. Default is null which means no minium.
-    * @return {Kiwi.HUD.HUDComponents.Counter}
-    */
-    export class Counter extends Kiwi.Component {
-        
-        constructor(owner: any, current: number, max: number= null, min: number= null) {
-            super(owner, &quot;counter&quot;);
-
-            this._current = current;
-            this._max = max;
-            this._min = min;
-
-            //signals!!!
-            this.updated = new Kiwi.Signal();
-        }
-
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} &#x27;CounterComponent&#x27;
-        * @public
-        */
-        public objType(): string {
-            return &#x27;CounterComponent&#x27;;
-        }
-
-        /**
-        * The current value of the range.
-        * @property _current
-        * @type number
-        * @private
-        */
-        private _current: number;
-
-        /**
-        * The maximum value that of the range.
-        * @property _max
-        * @type number
-        * @private
-        */
-        private _max: number;
-
-        /**
-        * The minimum value that of the range.
-        * @property _min
-        * @type number
-        * @default 0
-        * @private
-        */
-        private _min: number;
-
-        /**
-        * A Kiwi.Signal that dispatches an event when a value has changed.
-        * @property updated
-        * @type Kiwi.Signal
-        * @public
-        */
-        public updated: Kiwi.Signal;
-
-        /**
-        * Set allows setting of the maximum value that the range can be in. 
-        * Get returns the maximum value.
-        *
-        * @property max
-        * @type number
-        * @public
-        */
-        public set max(val: number) {
-            this._max = val;
-            this.updated.dispatch(this._current, this._max, this._min);
-        }
-        public get max(): number {
-            return this._max;
-        }
-
-        /**
-        * Set allows setting of the minimum value that the range can be in. 
-        * Get returns the minimum value.
-        *
-        * @property min
-        * @type number
-        * @public
-        */
-        public set min(val: number) {
-
-            this._min = val;
-            this.updated.dispatch(this._current, this._max, this._min);
-        
-        }
-        public get min(): number {
-            return this._min;
-        }
-
-        /**
-        * Set allows setting of the current value that the range can be in. 
-        * The current value will only change if it is within the maximum/minimum values.
-        * Get returns the current value.
-        *
-        * @property current
-        * @type number
-        * @public
-        */
-        public set current(val: number) {
-            if (this._max !== null &amp;&amp; val &gt; this._max) {
-                this._current = this._max;
-            } else if (this._min !== null &amp;&amp; val &lt; this._min) {
-                this._current = this._min;
-            } else {
-                this._current = val;
-            }
-            this.updated.dispatch(this._current, this._max, this._min);
-        }
-        public get current(): number {
-            return this._current;
-        }
-
-        /**
-        * Decreases the current value by the amount past. 
-        * If the new amount would be less than the minimun it goes to the min instead.
-        *
-        * @method decrease
-        * @param [val=1] {number} The amount that you want to decrease the current value by. Default is 1.
-        * @return {number}
-        * @public
-        */
-        public decrease(val: number= 1): number {
-            if (this._min === null || this._current &gt; this._min) {
-                if (this._min !== null &amp;&amp; this._current - val &lt; this._min) {
-                    this._current = this._min;
-                } else {
-                    this._current -= val;
-                }
-                this.updated.dispatch(this._current, this._max, this._min);
-            }
-            return this._current;
-        }
-
-        /**
-        * Increases the current value by the amount past. 
-        * If the new amount would be greater than the maximum it goes to the max instead.
-        *
-        * @method increase
-        * @param [val=1] {number} The amount that you want to increase the current value by. Default is 1.
-        * @return {number}
-        * @public
-        */
-        public increase(val: number= 1): number {
-            if (this._max === null || this._current &lt; this._max) {
-                if (this._max !== null &amp;&amp; this._current + val &gt; this._max) {
-                    this._current = this._max;
-                } else {
-                    this._current += val;
-                }
-                this.updated.dispatch(this._current, this._max, this._min);
-            }
-            return this._current;
-        }
-
-        /**
-        * @method currentPercent
-        * @return {number}
-        * @public
-        */
-        public currentPercent(): number {
-            if(this.max !== null) 
-            return ((this.current) / (this.max)) * 100;
-        }
-
-    }
+	/**
+	* The Counter component handles a incrementation/decrementation of a singular numeric value. 
+	* You can also specifiy maximum/minimum values that the numeric value has be within but by default there is no max/min.
+	*
+	* @class Counter
+	* @extends Kiwi.Component
+	* @namespace Kiwi.HUD.HUDComponents
+	* @constructor
+	* @param owner {any} The object that this Component belongs to.
+	* @param current {number} The current value.
+	* @param [max=null] {number} The maximum value it can be. Default is null which means no maximum.
+	* @param [min=null] {number} The minimum value that the current can be. Default is null which means no minium.
+	* @return {Kiwi.HUD.HUDComponents.Counter}
+	*/
+	export class Counter extends Kiwi.Component {
+
+		constructor(owner: any, current: number, max: number= null, min: number= null) {
+			super(owner, &quot;counter&quot;);
+
+			this._current = current;
+			this._max = max;
+			this._min = min;
+
+			//signals!!!
+			this.updated = new Kiwi.Signal();
+		}
+
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} &#x27;CounterComponent&#x27;
+		* @public
+		*/
+		public objType(): string {
+			return &#x27;CounterComponent&#x27;;
+		}
+
+		/**
+		* The current value of the range.
+		* @property _current
+		* @type number
+		* @private
+		*/
+		private _current: number;
+
+		/**
+		* The maximum value that of the range.
+		* @property _max
+		* @type number
+		* @private
+		*/
+		private _max: number;
+
+		/**
+		* The minimum value that of the range.
+		* @property _min
+		* @type number
+		* @default 0
+		* @private
+		*/
+		private _min: number;
+
+		/**
+		* A Kiwi.Signal that dispatches an event when a value has changed.
+		* @property updated
+		* @type Kiwi.Signal
+		* @public
+		*/
+		public updated: Kiwi.Signal;
+
+		/**
+		* Set allows setting of the maximum value that the range can be in. 
+		* Get returns the maximum value.
+		*
+		* @property max
+		* @type number
+		* @public
+		*/
+		public set max(val: number) {
+			this._max = val;
+			this.updated.dispatch(this._current, this._max, this._min);
+		}
+		public get max(): number {
+			return this._max;
+		}
+
+		/**
+		* Set allows setting of the minimum value that the range can be in. 
+		* Get returns the minimum value.
+		*
+		* @property min
+		* @type number
+		* @public
+		*/
+		public set min(val: number) {
+
+			this._min = val;
+			this.updated.dispatch(this._current, this._max, this._min);
+		
+		}
+		public get min(): number {
+			return this._min;
+		}
+
+		/**
+		* Set allows setting of the current value that the range can be in. 
+		* The current value will only change if it is within the maximum/minimum values.
+		* Get returns the current value.
+		*
+		* @property current
+		* @type number
+		* @public
+		*/
+		public set current(val: number) {
+			if (this._max !== null &amp;&amp; val &gt; this._max) {
+				this._current = this._max;
+			} else if (this._min !== null &amp;&amp; val &lt; this._min) {
+				this._current = this._min;
+			} else {
+				this._current = val;
+			}
+			this.updated.dispatch(this._current, this._max, this._min);
+		}
+		public get current(): number {
+			return this._current;
+		}
+
+		/**
+		* Decreases the current value by the amount past. 
+		* If the new amount would be less than the minimun it goes to the min instead.
+		*
+		* @method decrease
+		* @param [val=1] {number} The amount that you want to decrease the current value by. Default is 1.
+		* @return {number}
+		* @public
+		*/
+		public decrease(val: number= 1): number {
+			if (this._min === null || this._current &gt; this._min) {
+				if (this._min !== null &amp;&amp; this._current - val &lt; this._min) {
+					this._current = this._min;
+				} else {
+					this._current -= val;
+				}
+				this.updated.dispatch(this._current, this._max, this._min);
+			}
+			return this._current;
+		}
+
+		/**
+		* Increases the current value by the amount past. 
+		* If the new amount would be greater than the maximum it goes to the max instead.
+		*
+		* @method increase
+		* @param [val=1] {number} The amount that you want to increase the current value by. Default is 1.
+		* @return {number}
+		* @public
+		*/
+		public increase(val: number= 1): number {
+			if (this._max === null || this._current &lt; this._max) {
+				if (this._max !== null &amp;&amp; this._current + val &gt; this._max) {
+					this._current = this._max;
+				} else {
+					this._current += val;
+				}
+				this.updated.dispatch(this._current, this._max, this._min);
+			}
+			return this._current;
+		}
+
+		/**
+		* @method currentPercent
+		* @return {number}
+		* @public
+		*/
+		public currentPercent(): number {
+			if(this.max !== null) 
+			return ((this.current) / (this.max)) * 100;
+		}
+
+	}
 
 }
 
-
     </pre>
 </div>
 
diff --git a/docs/files/src_hud_components_Time.ts.html b/docs/files/src_hud_components_Time.ts.html
index 194eccb..fe4c1de 100644
--- a/docs/files/src_hud_components_Time.ts.html
+++ b/docs/files/src_hud_components_Time.ts.html
@@ -373,274 +373,273 @@ <h1 class="file-heading">File: src/hud/components/Time.ts</h1>
 
 module Kiwi.HUD.HUDComponents {
 
-    /**
-    * A Component to manage and display a Time in a particular format.
-    * The Time Component creates a new clock on the Time Manager and it uses that clock to keep track of the time.
-    * When you create a new Time Component you can specify a format that you want the time to display in, which is a string based on keywords.
-    * Current supported keywords for the format are:
-    *  &#x27;s&#x27; = &#x27;seconds&#x27;
-    *  &#x27;m&#x27; = &#x27;minutes&#x27;
-    *  &#x27;ms&#x27; = milliseconds&#x27;
-    *  &#x27;ss&#x27; = &#x27;seconds with leading zero&#x27;
-    *  &#x27;mm&#x27; = &#x27;minutes with leading zero&#x27;
-    *
-    * @class Time
-    * @extends Kiwi.Component
-    * @namespace Kiwi.HUD.HUDComponents
-    * @constructor
-    * @param owner {any} The object that this component belongs to.
-    * @param [format=&#x27;&#x27;] {string} The format that the time is to be displayed in. Leave blank for the default time.
-    * @return {Kiwi.HUD.HUDComponents.Counter}
-    */
-    export class Time extends Kiwi.Component {
-
-        constructor(owner:any, format:string=&#x27;&#x27;) {
-            super(owner, &quot;time&quot;); 
-            
-            this.clock = this.game.time.addClock(name + &#x27;-clock&#x27;, 1000);
-            this.format = format;
-
-        }
-
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} &#x27;TimeComponent&#x27;
-        * @public
-        */
-        public objType(): string {
-            return &#x27;TimeComponent&#x27;;
-        }
-
-        /**
-        * The clock that this component creates and uses to manage the current time.
-        * @property clock
-        * @type Kiwi.Time.Clock
-        * @private
-        */
-        public clock: Kiwi.Time.Clock;
-
-        /**
-        * Indicates whether or not the clock is currently running or not, and thus whether or not the time is playing or not.
-        * @property isRunning
-        * @type boolean
-        * @public
-        */
-        public get isRunning():boolean {
-            return this.clock.isRunning();
-        }
-
-        /**
-        * Pauses the clock where is stands. Calls the pause method on the clock.
-        * @method pause
-        * @public
-        */
-        public pause() {
-            this.clock.pause();
-        }
-
-        /**
-        * Stops the clock and thus the time. Calls the stop method of the clock.
-        * @method stop
-        * @public
-        */
-        public stop() {
-            this.clock.stop();
-        }
-
-        /**
-        * Starts the clock and thus the time. 
-        * @method start
-        * @public
-        */
-        public start() {
-            this.clock.start();
-            this._timeBefore = this.clock.elapsed();
-        }
-
-        /**
-        * Resumes the clock and thus the time.
-        * @method resume
-        * @public
-        */
-        public resume() {
-            this.clock.resume();
-        }
-
-        /**
-        * The format that they want the time to be displayed.
-        * @property _format
-        * @type string
-        * @private
-        */
-        private _format: string;
-
-        /**
-        * The format that you want the time to be displayed in.
-        * @property format
-        * @type string
-        * @public
-        */
-        public set format(val: string) {
-            this._format = val;
-        }
-        public get format(): string {
-            return this._format;
-        }
-
-        /**
-        * If the clock should &#x27;count down&#x27; instead of up.
-        * @property countDown
-        * @type boolean
-        * @default false
-        * @public
-        */
-        public countDown: boolean = false;
-
-        /**
-        * Used during the formatting stage of displaying the time.
-        * @property _displayString
-        * @type string
-        * @private
-        */
-        private _displayString: string = &#x27;&#x27;;
-
-        /**
-        * The current time in seconds.
-        * @property _currentTime
-        * @type number
-        * @private
-        */
-        private _currentTime: number = 0;
-
-        /**
-        * The current time in seconds. This is READ ONLY.
-        * @property currentTime
-        * @type number
-        * @public
-        */
-        public get currentTime(): number {
-            return this._currentTime;
-        }
-
-        /**
-        * The last time that the timer update. Used to calculate the time delta.
-        * @property _timeBefore
-        * @type number
-        * @private
-        */
-        private _timeBefore: number = 0;
-
-        /**
-        * Sets the current time of the timer.
-        * @method setTime
-        * @param milli {number} The number of milliseconds.
-        * @param [sec=0] {number} The number of seconds to add.
-        * @param [minutes=0] {number} The number of minutes to add.
-        * @public
-        */
-        public setTime(milli: number, sec: number= 0, minutes: number= 0) {
-            this._currentTime = milli;
-            if(sec != 0) this._currentTime += (sec * 1000);
-            if(minutes != 0) this._currentTime += (minutes * 60 * 1000);
-        }
-
-        /**
-        * Increases the current time by the amount passed.
-        * @method addTime
-        * @param milli {number} The number of milliseconds.
-        * @param [sec=0] {number} The number of seconds to add.
-        * @param [minutes=0] {number} The number of minutes to add.
-        * @public
-        */
-        public addTime(milli:number, sec:number= 0,minutes:number= 0) {
-            this._currentTime += milli;
-            if(sec != 0) this._currentTime += (sec * 1000);
-            if (minutes != 0) this._currentTime += (minutes * 60 * 1000);
-        }
-        
-        /**
-        * Decreases the current time by the amount passed.
-        * @method removeTime
-        * @param milli {number} The number of milliseconds.
-        * @param [sec=0] {number} The number of seconds to add.
-        * @param [minutes=0] {number} The number of minutes to add.
-        * @public
-        */
-        public removeTime(milli: number, sec: number= 0, minutes: number= 0) {
-            this._currentTime -= milli;
-            if (sec != 0) this._currentTime -= (sec * 1000);
-            if (minutes != 0) this._currentTime -= (minutes * 60 * 1000);
-        }
-
-        /**
-        * The speed at which the time will increase/decrease by. 
-        * Modify this property to make the time count down slower/faster.
-        * @property _speed
-        * @type number
-        * @default 1
-        * @private
-        */
-        public speed: number = 1;
-        
-        /**
-        * Returns a string with the current time that this component is upto in the format that was passed.
-        *
-        * @method updateTime
-        * @return string
-        * @public
-        */
-        public getTime():string {
-            if (this.countDown) {
-                this._currentTime -= (this.clock.elapsed() - this._timeBefore) * this.speed;
-            } else {
-                this._currentTime += (this.clock.elapsed() - this._timeBefore) * this.speed;
-            }
-            this._timeBefore = this.clock.elapsed();
-
-            //format time
-            if (this._format !== &#x27;&#x27;) {
-                this._displayString = this._format;
-
-                //milliseconds
-                if (this._displayString.indexOf(&#x27;ms&#x27;) !== -1) {
-                    var t = String(Math.floor(this._currentTime * 1000) % 1000);
-                    this._displayString = this._displayString.replace(&#x27;ms&#x27;, t);
-                }
-                //seconds - leading
-                if (this._displayString.indexOf(&#x27;ss&#x27;) != -1) {
-                    var t = String(Math.floor(this._currentTime) % 60);
-                    if (t.length &lt; 2) t = &#x27;0&#x27; + t;
-                    this._displayString = this._displayString.replace(&#x27;ss&#x27;, t);
-                }
-                //minutes - leading
-                if (this._displayString.indexOf(&#x27;mm&#x27;) !== -1) {
-                    var t = String(Math.floor(this._currentTime / 60) % 60);
-                    if (t.length &lt; 2) t = &#x27;0&#x27; + t;
-                    this._displayString = this._displayString.replace(&#x27;mm&#x27;, t);
-                }
-                //minutes - no leading
-                if (this._displayString.indexOf(&#x27;s&#x27;) != -1) {
-                    var t = String(Math.floor(this._currentTime) % 60);
-                    this._displayString = this._displayString.replace(&#x27;s&#x27;, t);
-                }
-                //seconds - no leading
-                if (this._displayString.indexOf(&#x27;m&#x27;) !== -1) {
-                    var t = String(Math.floor(this._currentTime / 60) % 60);
-                    this._displayString = this._displayString.replace(&#x27;m&#x27;, t);
-                }
-
-                return this._displayString;
-            } else {
-                return String(this._currentTime.toFixed(2));
-            }
-        }
-
-    }
+	/**
+	* A Component to manage and display a Time in a particular format.
+	* The Time Component creates a new clock on the Time Manager and it uses that clock to keep track of the time.
+	* When you create a new Time Component you can specify a format that you want the time to display in, which is a string based on keywords.
+	* Current supported keywords for the format are:
+	*  &#x27;s&#x27; = &#x27;seconds&#x27;
+	*  &#x27;m&#x27; = &#x27;minutes&#x27;
+	*  &#x27;ms&#x27; = milliseconds&#x27;
+	*  &#x27;ss&#x27; = &#x27;seconds with leading zero&#x27;
+	*  &#x27;mm&#x27; = &#x27;minutes with leading zero&#x27;
+	*
+	* @class Time
+	* @extends Kiwi.Component
+	* @namespace Kiwi.HUD.HUDComponents
+	* @constructor
+	* @param owner {any} The object that this component belongs to.
+	* @param [format=&#x27;&#x27;] {string} The format that the time is to be displayed in. Leave blank for the default time.
+	* @return {Kiwi.HUD.HUDComponents.Counter}
+	*/
+	export class Time extends Kiwi.Component {
+
+		constructor(owner:any, format:string=&#x27;&#x27;) {
+			super(owner, &quot;time&quot;); 
+			
+			this.clock = this.game.time.addClock(name + &#x27;-clock&#x27;, 1000);
+			this.format = format;
+
+		}
+
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} &#x27;TimeComponent&#x27;
+		* @public
+		*/
+		public objType(): string {
+			return &#x27;TimeComponent&#x27;;
+		}
+
+		/**
+		* The clock that this component creates and uses to manage the current time.
+		* @property clock
+		* @type Kiwi.Time.Clock
+		* @private
+		*/
+		public clock: Kiwi.Time.Clock;
+
+		/**
+		* Indicates whether or not the clock is currently running or not, and thus whether or not the time is playing or not.
+		* @property isRunning
+		* @type boolean
+		* @public
+		*/
+		public get isRunning():boolean {
+			return this.clock.isRunning();
+		}
+
+		/**
+		* Pauses the clock where is stands. Calls the pause method on the clock.
+		* @method pause
+		* @public
+		*/
+		public pause() {
+			this.clock.pause();
+		}
+
+		/**
+		* Stops the clock and thus the time. Calls the stop method of the clock.
+		* @method stop
+		* @public
+		*/
+		public stop() {
+			this.clock.stop();
+		}
+
+		/**
+		* Starts the clock and thus the time. 
+		* @method start
+		* @public
+		*/
+		public start() {
+			this.clock.start();
+			this._timeBefore = this.clock.elapsed();
+		}
+
+		/**
+		* Resumes the clock and thus the time.
+		* @method resume
+		* @public
+		*/
+		public resume() {
+			this.clock.resume();
+		}
+
+		/**
+		* The format that they want the time to be displayed.
+		* @property _format
+		* @type string
+		* @private
+		*/
+		private _format: string;
+
+		/**
+		* The format that you want the time to be displayed in.
+		* @property format
+		* @type string
+		* @public
+		*/
+		public set format(val: string) {
+			this._format = val;
+		}
+		public get format(): string {
+			return this._format;
+		}
+
+		/**
+		* If the clock should &#x27;count down&#x27; instead of up.
+		* @property countDown
+		* @type boolean
+		* @default false
+		* @public
+		*/
+		public countDown: boolean = false;
+
+		/**
+		* Used during the formatting stage of displaying the time.
+		* @property _displayString
+		* @type string
+		* @private
+		*/
+		private _displayString: string = &#x27;&#x27;;
+
+		/**
+		* The current time in seconds.
+		* @property _currentTime
+		* @type number
+		* @private
+		*/
+		private _currentTime: number = 0;
+
+		/**
+		* The current time in seconds. This is READ ONLY.
+		* @property currentTime
+		* @type number
+		* @public
+		*/
+		public get currentTime(): number {
+			return this._currentTime;
+		}
+
+		/**
+		* The last time that the timer update. Used to calculate the time delta.
+		* @property _timeBefore
+		* @type number
+		* @private
+		*/
+		private _timeBefore: number = 0;
+
+		/**
+		* Sets the current time of the timer.
+		* @method setTime
+		* @param milli {number} The number of milliseconds.
+		* @param [sec=0] {number} The number of seconds to add.
+		* @param [minutes=0] {number} The number of minutes to add.
+		* @public
+		*/
+		public setTime(milli: number, sec: number= 0, minutes: number= 0) {
+			this._currentTime = milli;
+			if(sec != 0) this._currentTime += (sec * 1000);
+			if(minutes != 0) this._currentTime += (minutes * 60 * 1000);
+		}
+
+		/**
+		* Increases the current time by the amount passed.
+		* @method addTime
+		* @param milli {number} The number of milliseconds.
+		* @param [sec=0] {number} The number of seconds to add.
+		* @param [minutes=0] {number} The number of minutes to add.
+		* @public
+		*/
+		public addTime(milli:number, sec:number= 0,minutes:number= 0) {
+			this._currentTime += milli;
+			if(sec != 0) this._currentTime += (sec * 1000);
+			if (minutes != 0) this._currentTime += (minutes * 60 * 1000);
+		}
+		
+		/**
+		* Decreases the current time by the amount passed.
+		* @method removeTime
+		* @param milli {number} The number of milliseconds.
+		* @param [sec=0] {number} The number of seconds to add.
+		* @param [minutes=0] {number} The number of minutes to add.
+		* @public
+		*/
+		public removeTime(milli: number, sec: number= 0, minutes: number= 0) {
+			this._currentTime -= milli;
+			if (sec != 0) this._currentTime -= (sec * 1000);
+			if (minutes != 0) this._currentTime -= (minutes * 60 * 1000);
+		}
+
+		/**
+		* The speed at which the time will increase/decrease by. 
+		* Modify this property to make the time count down slower/faster.
+		* @property _speed
+		* @type number
+		* @default 1
+		* @private
+		*/
+		public speed: number = 1;
+		
+		/**
+		* Returns a string with the current time that this component is upto in the format that was passed.
+		*
+		* @method updateTime
+		* @return string
+		* @public
+		*/
+		public getTime():string {
+			if (this.countDown) {
+				this._currentTime -= (this.clock.elapsed() - this._timeBefore) * this.speed;
+			} else {
+				this._currentTime += (this.clock.elapsed() - this._timeBefore) * this.speed;
+			}
+			this._timeBefore = this.clock.elapsed();
+
+			//format time
+			if (this._format !== &#x27;&#x27;) {
+				this._displayString = this._format;
+
+				//milliseconds
+				if (this._displayString.indexOf(&#x27;ms&#x27;) !== -1) {
+					var t = String(Math.floor(this._currentTime * 1000) % 1000);
+					this._displayString = this._displayString.replace(&#x27;ms&#x27;, t);
+				}
+				//seconds - leading
+				if (this._displayString.indexOf(&#x27;ss&#x27;) != -1) {
+					var t = String(Math.floor(this._currentTime) % 60);
+					if (t.length &lt; 2) t = &#x27;0&#x27; + t;
+					this._displayString = this._displayString.replace(&#x27;ss&#x27;, t);
+				}
+				//minutes - leading
+				if (this._displayString.indexOf(&#x27;mm&#x27;) !== -1) {
+					var t = String(Math.floor(this._currentTime / 60) % 60);
+					if (t.length &lt; 2) t = &#x27;0&#x27; + t;
+					this._displayString = this._displayString.replace(&#x27;mm&#x27;, t);
+				}
+				//minutes - no leading
+				if (this._displayString.indexOf(&#x27;s&#x27;) != -1) {
+					var t = String(Math.floor(this._currentTime) % 60);
+					this._displayString = this._displayString.replace(&#x27;s&#x27;, t);
+				}
+				//seconds - no leading
+				if (this._displayString.indexOf(&#x27;m&#x27;) !== -1) {
+					var t = String(Math.floor(this._currentTime / 60) % 60);
+					this._displayString = this._displayString.replace(&#x27;m&#x27;, t);
+				}
+
+				return this._displayString;
+			} else {
+				return String(this._currentTime.toFixed(2));
+			}
+		}
+
+	}
 
 }
 
-
     </pre>
 </div>
 
diff --git a/docs/files/src_hud_components_WidgetInput.ts.html b/docs/files/src_hud_components_WidgetInput.ts.html
index 042daa6..9f2e46e 100644
--- a/docs/files/src_hud_components_WidgetInput.ts.html
+++ b/docs/files/src_hud_components_WidgetInput.ts.html
@@ -372,193 +372,191 @@ <h1 class="file-heading">File: src/hud/components/WidgetInput.ts</h1>
 */
 
 module Kiwi.HUD.HUDComponents {
-    
-    /**
-    * The WidgetInput Component handles the input events that you may want to listen to on a widget.
-    * This Component is essentually another version of the normal Input Component but instead of for GameObjects this is for HUDWidgets.
-    *
-    * @class WidgetInput
-    * @extends Kiwi.Component
-    * @namespace Kiwi.HUD.HUDComponents
-    * @constructor
-    * @param owner {any} The object that this WidgetInput belongs to.
-    * @param container {HTMLElement} The HTMLElement that the events will occur on/to.
-    * @return {Kiwi.HUD.HUDComponents.WidgetInput} 
-    */
-    export class WidgetInput extends Component {
-
-        constructor(owner:any, container:HTMLElement) {
-            super(owner, &#x27;WidgetInput&#x27;);
-            this._container = container;
-
-            //signals!!
-            this.onUp = new Kiwi.Signal;
-            this.onDown = new Kiwi.Signal;
-            this.onOver = new Kiwi.Signal;
-            this.onOut = new Kiwi.Signal;
-
-            this._addEvents();
-        }
-
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} &#x27;WidgetInputComponent&#x27;
-        * @public
-        */
-        public objType(): string {
-            return &#x27;WidgetInputComponent&#x27;;
-        }
-
-        /**
-        * A Signal that dispatches events when the user releases the mouse on top of the HTMLElement.
-        * @property onUp
-        * @type Kiwi.Signal
-        * @public
-        */
-        public onUp: Kiwi.Signal;
-
-        /**
-        * A Signal that dispatches events when the user presses the mouse on top of the HTMLElement.
-        * @property onDown
-        * @type Kiwi.Signal
-        * @public
-        */
-        public onDown: Kiwi.Signal;
-
-        /**
-        * A Signal that dispatches events when the user&#x27;s mouse initially goes over the top of the HTMLElement.
-        * @property onOver
-        * @type Kiwi.Signal
-        * @public
-        */
-        public onOver: Kiwi.Signal;
-
-        /**
-        * A Signal that dispatches events when the user&#x27;s mouse leaves the HTMLElement.
-        * @property onOut
-        * @type Kiwi.Signal
-        * @public
-        */
-        public onOut: Kiwi.Signal;
-        
-        /**
-        * The HTMLElement that the events are going to occur on.
-        * @property _container
-        * @type HTMLElement
-        * @private
-        */
-        private _container: HTMLElement;
-
-        /**
-        * Changes the HTMLElement that the events are occuring on to one passed. 
-        * Removes all of the current events from container before changing.
-        * @method setElement
-        * @param container {HTMLElement} The new element that the events are going to occur on.
-        * @public
-        */
-        public setElement(container: HTMLElement) {
-            this._removeEvents();
-            this._container = container;
-            this._addEvents();
-        }
-
-        /**
-        * Creates new bindings and adds the events to the HTMLElement.
-        * @method _addEvents
-        * @private
-        */
-        private _addEvents() {
-            if (!this._active) {
-                this._binds = [];
-                this._binds.push({ &#x27;event&#x27;: &#x27;mouseup&#x27;, &#x27;function&#x27;: this._up.bind(this) });
-                this._binds.push({ &#x27;event&#x27;: &#x27;mousedown&#x27;, &#x27;function&#x27;: this._down.bind(this) });
-                this._binds.push({ &#x27;event&#x27;: &#x27;mouseover&#x27;, &#x27;function&#x27;: this._over.bind(this) });
-                this._binds.push({ &#x27;event&#x27;: &#x27;mouseout&#x27;, &#x27;function&#x27;: this._out.bind(this) });
-
-                for (var i = 0; i &lt; this._binds.length; i++) {
-                    this._container.addEventListener(this._binds[i].event, this._binds[i].function, false);
-                }
-                this._active = true;
-            }
-        }
-
-        /**
-        * Removes the events off of the current container.
-        * @method _removeEvents
-        * @private
-        */
-        private _removeEvents() {
-            if (this._active) {
-                for (var i = 0; i &lt; this._binds.length; i++) {
-                    this._container.removeEventListener(this._binds[i].event, this._binds[i].function, false);
-                }
-                this._binds = [];
-                this._active = false;
-            }
-        }
-
-        /**
-        * An array of objects, that holds the events that are happening and the methods that are bound to the container. 
-        * @property _binds
-        * @type any
-        * @private
-        */
-        private _binds: any;
-
-        /**
-        * If the events are currently actively running or not.
-        * @property active
-        * @type boolean
-        * @private
-        */
-        private _active: boolean = false;
-
-        /**
-        * The method that is called when a mouseup event fires. The onUp Signal is called.
-        * @method _up
-        * @param evt {MouseEvent}
-        * @private
-        */
-        private _up(evt) {
-            this.onUp.dispatch(evt);
-        }
-        
-        /**
-        * The method that is called when a mousedown event fires. The onDown Signal is called.
-        * @method _down
-        * @param evt {MouseEvent}
-        * @private
-        */
-        private _down(evt) {
-            this.onDown.dispatch(evt);
-        }
-        
-        /**
-        * The method that is called when a mouseover event fires. The onOver Signal is called.
-        * @method _over
-        * @param evt {MouseEvent}
-        * @private
-        */
-        private _over(evt) {
-            this.onOver.dispatch(evt);
-        }
-        
-        /**
-        * The method that is called when a mouseout event fires. The onOut Signal is called.
-        * @method _out
-        * @param evt {MouseEvent}
-        * @private
-        */
-        private _out(evt) {
-            this.onOut.dispatch(evt);
-        }
-
-    }
-
-}
 
+	/**
+	* The WidgetInput Component handles the input events that you may want to listen to on a widget.
+	* This Component is essentually another version of the normal Input Component but instead of for GameObjects this is for HUDWidgets.
+	*
+	* @class WidgetInput
+	* @extends Kiwi.Component
+	* @namespace Kiwi.HUD.HUDComponents
+	* @constructor
+	* @param owner {any} The object that this WidgetInput belongs to.
+	* @param container {HTMLElement} The HTMLElement that the events will occur on/to.
+	* @return {Kiwi.HUD.HUDComponents.WidgetInput} 
+	*/
+	export class WidgetInput extends Component {
+
+		constructor(owner:any, container:HTMLElement) {
+			super(owner, &#x27;WidgetInput&#x27;);
+			this._container = container;
+
+			//signals!!
+			this.onUp = new Kiwi.Signal;
+			this.onDown = new Kiwi.Signal;
+			this.onOver = new Kiwi.Signal;
+			this.onOut = new Kiwi.Signal;
+
+			this._addEvents();
+		}
+
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} &#x27;WidgetInputComponent&#x27;
+		* @public
+		*/
+		public objType(): string {
+			return &#x27;WidgetInputComponent&#x27;;
+		}
+
+		/**
+		* A Signal that dispatches events when the user releases the mouse on top of the HTMLElement.
+		* @property onUp
+		* @type Kiwi.Signal
+		* @public
+		*/
+		public onUp: Kiwi.Signal;
+
+		/**
+		* A Signal that dispatches events when the user presses the mouse on top of the HTMLElement.
+		* @property onDown
+		* @type Kiwi.Signal
+		* @public
+		*/
+		public onDown: Kiwi.Signal;
+
+		/**
+		* A Signal that dispatches events when the user&#x27;s mouse initially goes over the top of the HTMLElement.
+		* @property onOver
+		* @type Kiwi.Signal
+		* @public
+		*/
+		public onOver: Kiwi.Signal;
+
+		/**
+		* A Signal that dispatches events when the user&#x27;s mouse leaves the HTMLElement.
+		* @property onOut
+		* @type Kiwi.Signal
+		* @public
+		*/
+		public onOut: Kiwi.Signal;
+		
+		/**
+		* The HTMLElement that the events are going to occur on.
+		* @property _container
+		* @type HTMLElement
+		* @private
+		*/
+		private _container: HTMLElement;
+
+		/**
+		* Changes the HTMLElement that the events are occuring on to one passed. 
+		* Removes all of the current events from container before changing.
+		* @method setElement
+		* @param container {HTMLElement} The new element that the events are going to occur on.
+		* @public
+		*/
+		public setElement(container: HTMLElement) {
+			this._removeEvents();
+			this._container = container;
+			this._addEvents();
+		}
+
+		/**
+		* Creates new bindings and adds the events to the HTMLElement.
+		* @method _addEvents
+		* @private
+		*/
+		private _addEvents() {
+			if (!this._active) {
+				this._binds = [];
+				this._binds.push({ &#x27;event&#x27;: &#x27;mouseup&#x27;, &#x27;function&#x27;: this._up.bind(this) });
+				this._binds.push({ &#x27;event&#x27;: &#x27;mousedown&#x27;, &#x27;function&#x27;: this._down.bind(this) });
+				this._binds.push({ &#x27;event&#x27;: &#x27;mouseover&#x27;, &#x27;function&#x27;: this._over.bind(this) });
+				this._binds.push({ &#x27;event&#x27;: &#x27;mouseout&#x27;, &#x27;function&#x27;: this._out.bind(this) });
+
+				for (var i = 0; i &lt; this._binds.length; i++) {
+					this._container.addEventListener(this._binds[i].event, this._binds[i].function, false);
+				}
+				this._active = true;
+			}
+		}
+
+		/**
+		* Removes the events off of the current container.
+		* @method _removeEvents
+		* @private
+		*/
+		private _removeEvents() {
+			if (this._active) {
+				for (var i = 0; i &lt; this._binds.length; i++) {
+					this._container.removeEventListener(this._binds[i].event, this._binds[i].function, false);
+				}
+				this._binds = [];
+				this._active = false;
+			}
+		}
+
+		/**
+		* An array of objects, that holds the events that are happening and the methods that are bound to the container. 
+		* @property _binds
+		* @type any
+		* @private
+		*/
+		private _binds: any;
+
+		/**
+		* If the events are currently actively running or not.
+		* @property active
+		* @type boolean
+		* @private
+		*/
+		private _active: boolean = false;
+
+		/**
+		* The method that is called when a mouseup event fires. The onUp Signal is called.
+		* @method _up
+		* @param evt {MouseEvent}
+		* @private
+		*/
+		private _up(evt) {
+			this.onUp.dispatch(evt);
+		}
+		
+		/**
+		* The method that is called when a mousedown event fires. The onDown Signal is called.
+		* @method _down
+		* @param evt {MouseEvent}
+		* @private
+		*/
+		private _down(evt) {
+			this.onDown.dispatch(evt);
+		}
+		
+		/**
+		* The method that is called when a mouseover event fires. The onOver Signal is called.
+		* @method _over
+		* @param evt {MouseEvent}
+		* @private
+		*/
+		private _over(evt) {
+			this.onOver.dispatch(evt);
+		}
+		
+		/**
+		* The method that is called when a mouseout event fires. The onOut Signal is called.
+		* @method _out
+		* @param evt {MouseEvent}
+		* @private
+		*/
+		private _out(evt) {
+			this.onOut.dispatch(evt);
+		}
+
+	}
 
+}
 
     </pre>
 </div>
diff --git a/docs/files/src_hud_widgets_Bar.ts.html b/docs/files/src_hud_widgets_Bar.ts.html
index 1374ff5..dcaa8d4 100644
--- a/docs/files/src_hud_widgets_Bar.ts.html
+++ b/docs/files/src_hud_widgets_Bar.ts.html
@@ -370,234 +370,234 @@ <h1 class="file-heading">File: src/hud/widgets/Bar.ts</h1>
 */
 
 module Kiwi.HUD.Widget {
-    
-    /**
-    * Used for displaying of information in a bar like of format. Example: Amount of health remaining for a character.
-    * This class creates a &#x27;innerbar&#x27; div inside of its main container which you can apply styles to.
-    * You can control the minimum/maximum and current values of the bar through the Counter widget.
-    * 
-    * @class Bar
-    * @extends Kiwi.HUD.HUDWidget
-    * @namespace Kiwi.HUD.Widget
-    * @constructor 
-    * @param game {Kiwi.Game} The game that this bar belongs to.
-    * @param current {Number} The current value of the bar.
-    * @param max {Number} The maximum value that there can be.
-    * @param x {Number} The coordinates of this widget on the x-axis.
-    * @param y {Number} The cooridnates of this widget on the y-axis.
-    * @param [width=120] {number} The width of the widget. Defaults to 120.
-    * @param [height=20] {number} The height of the widget. Defaults to 20.
-    * @param [color=&#x27;#000&#x27;] {string} The default color of the inner bar. Defaults to #000 (black).
-    * @return {Kiwi.HUD.Widget.Bar}
-    */
-    export class Bar extends Kiwi.HUD.HUDWidget {
-        
-        constructor(game:Kiwi.Game, current: number, max:number, x:number,y:number, width:number=120, height:number=20, color=&#x27;#000&#x27;) {
-            super(game,&quot;bar&quot;, x, y);
-            this._horizontal = true;
-            this.class = &#x27;kiwi-bar-widget kiwi-widget&#x27;;
-
-            if (this._manager.supported) {
-                if (this._device == Kiwi.TARGET_BROWSER) {
-                    this._bar = document.createElement(&#x27;div&#x27;);
-                    this._bar.className = &#x27;kiwi-innerbar-widget&#x27;;
-                    this._bar.style.backgroundColor = color;
-                    this.bar = this._bar;
-                    this.container.appendChild(this.bar);
-                }
-
-                this.counter = this.components.add(new Kiwi.HUD.HUDComponents.Counter(this, current, max, 0));
-                this.counter.updated.add(this.updateCSS, this);
-
-                this.width = width;
-                this.height = height;
-
-                this._bar.style.height = &#x27;100%&#x27;;
-                this._bar.style.width = &#x27;100%&#x27;;
-
-                this.updateCSS();
-            }
-        }
-
-        /**
-        * Returns the type of object that this is.
-        * @method objType
-        * @return {String} &quot;BarWidget&quot;
-        * @public
-        */
-        public objType(): string {
-            return &#x27;BarWidget&#x27;;
-        }
-
-        /**
-        * The width of the container
-        * @property _width
-        * @type number
-        * @private
-        */
-        private _width: number;
-        
-        /**
-        * The width of the container
-        * @property width
-        * @type number
-        * @public
-        */
-        public get width(): number {
-            return this._width;
-        }
-        public set width(value: number) {
-            if(this._device == Kiwi.TARGET_BROWSER) {
-                this.container.style.width = value + &quot;px&quot;;
-            }
-
-            this._width = value;
-        }
-        
-        /**
-        * The height of the container
-        * @property _height
-        * @type number
-        * @private
-        */
-        private _height: number;
-        
-        /**
-        * The height of the container
-        * @property height
-        * @type number
-        * @public
-        */
-        public get height(): number {
-            return this._height;
-        }
-        public set height(value: number) {
-            if (this._device == Kiwi.TARGET_BROWSER) {
-                this.container.style.height = value + &quot;px&quot;;
-            }
-            this._height = value;
-        }
-        
-        /**
-        * Knows if this bar is ment to be horizontal or veritical
-        * @property _horizontal
-        * @type boolean
-        * @private 
-        */
-        private _horizontal: boolean;
-        
-        /**
-        * The HTMLElement that is currently being used as the &#x27;bar&#x27;.
-        * @property bar
-        * @type HTMLElement
-        * @public
-        */
-        public bar: HTMLElement;
-
-        /**
-        * A reference to the HTMLElement that this class always generates.
-        * @property _bar
-        * @type HTMLElement
-        * @private
-        */
-        private _bar: HTMLElement;
-        
-        /**
-        * The counter component.
-        * @property counter
-        * @type Kiwi.HUD.HUDComponents.Counter
-        * @public
-        */
-        public counter: Kiwi.HUD.HUDComponents.Counter;
-        
-        /**
-        * Used to set the bar to be horizontal or vertical by passing a boolean.
-        * @property horizontal
-        * @type boolean
-        * @public
-        */
-        public get horizontal(): boolean {
-            return this._horizontal;
-        }
-        public set horizontal(val: boolean) {
-            this._horizontal = val;
-            this.updateCSS();
-        }
-
-        /**
-        * Used to set the bar to be horizontal or vertical by passing a boolean.
-        * @property verticle
-        * @type boolean
-        * @public
-        */
-        public get vertical(): boolean {
-            return !this._horizontal;
-        }
-        public set vertical(val: boolean) {
-            this._horizontal = !val;
-            this.updateCSS();
-        }
-
-        /**
-        * This method is used to remove existing DOM elements and place them inside a HUDWidget&#x27;s container element.
-        * Useful so that when making HUD Widgets the developer can style HUDWidgets without having to create/write to much javascript.
-        * Currently not supported. 
-        *
-        * @method setTemplate
-        * @param main {string} ID of an HTMLElement. This element should contain all of the elements you would like to place inside the HUDWidget.
-        * @param innerbar {string} ID of an HTMLElement that resides inside of the main param. This is the element that the HUDWidget can use to populate with information. E.g. Your score, health remaining, the icon, e.t.c.
-        * @public
-        */
-        public setTemplate(main: string, innerbar?: string) {
-
-            if(this._device == Kiwi.TARGET_BROWSER) {
-                super.setTemplate(main, innerbar);
-
-                if (this.tempElement !== undefined) {
-                    this.bar = this.tempElement;
-                }
-            }
-        }
-
-        /**
-        * Used to remove any the template HTML from this HUDWidget.
-        * Current not supported. 
-        *
-        * @method removeTemplate
-        * @public
-        */
-        public removeTemplate() {
-            if (this._device == Kiwi.TARGET_BROWSER) {
-                super.removeTemplate();
-
-                this.bar = this._bar;
-                this.container.appendChild(this.bar);
-                this.updateCSS();
-            }
-        }
-
-        /**
-        * Will be called when the range has been updated and thus you will want to preform the render of the bar here.
-        * This should be overriden by subclasses so that you have your own custom bars. 
-        * @method updateCSS
-        * @public
-        */
-        public updateCSS() {
-            
-            if (this.horizontal === true) {
-                this.bar.style.width = String(this.counter.currentPercent()) + &#x27;%&#x27;;
-                this.bar.style.height = &#x27;100%&#x27;;
-            } else {
-                this.bar.style.height = String(this.counter.currentPercent()) + &#x27;%&#x27;;
-                this.bar.style.width = &#x27;100%&#x27;;
-            }
-
-        }
-
-    }
 
+	/**
+	* Used for displaying of information in a bar like of format. Example: Amount of health remaining for a character.
+	* This class creates a &#x27;innerbar&#x27; div inside of its main container which you can apply styles to.
+	* You can control the minimum/maximum and current values of the bar through the Counter widget.
+	* 
+	* @class Bar
+	* @extends Kiwi.HUD.HUDWidget
+	* @namespace Kiwi.HUD.Widget
+	* @constructor 
+	* @param game {Kiwi.Game} The game that this bar belongs to.
+	* @param current {Number} The current value of the bar.
+	* @param max {Number} The maximum value that there can be.
+	* @param x {Number} The coordinates of this widget on the x-axis.
+	* @param y {Number} The cooridnates of this widget on the y-axis.
+	* @param [width=120] {number} The width of the widget. Defaults to 120.
+	* @param [height=20] {number} The height of the widget. Defaults to 20.
+	* @param [color=&#x27;#000&#x27;] {string} The default color of the inner bar. Defaults to #000 (black).
+	* @return {Kiwi.HUD.Widget.Bar}
+	*/
+	export class Bar extends Kiwi.HUD.HUDWidget {
+
+		constructor(game:Kiwi.Game, current: number, max:number, x:number,y:number, width:number=120, height:number=20, color=&#x27;#000&#x27;) {
+			super(game,&quot;bar&quot;, x, y);
+			this._horizontal = true;
+			this.class = &#x27;kiwi-bar-widget kiwi-widget&#x27;;
+
+			if (this._manager.supported) {
+				if (this._device == Kiwi.TARGET_BROWSER) {
+					this._bar = document.createElement(&#x27;div&#x27;);
+					this._bar.className = &#x27;kiwi-innerbar-widget&#x27;;
+					this._bar.style.backgroundColor = color;
+					this.bar = this._bar;
+					this.container.appendChild(this.bar);
+				}
+
+				this.counter = this.components.add(new Kiwi.HUD.HUDComponents.Counter(this, current, max, 0));
+				this.counter.updated.add(this.updateCSS, this);
+
+				this.width = width;
+				this.height = height;
+
+				this._bar.style.height = &#x27;100%&#x27;;
+				this._bar.style.width = &#x27;100%&#x27;;
+
+				this.updateCSS();
+			}
+		}
+
+		/**
+		* Returns the type of object that this is.
+		* @method objType
+		* @return {String} &quot;BarWidget&quot;
+		* @public
+		*/
+		public objType(): string {
+			return &#x27;BarWidget&#x27;;
+		}
+
+		/**
+		* The width of the container
+		* @property _width
+		* @type number
+		* @private
+		*/
+		private _width: number;
+
+		/**
+		* The width of the container
+		* @property width
+		* @type number
+		* @public
+		*/
+		public get width(): number {
+			return this._width;
+		}
+		public set width(value: number) {
+			if(this._device == Kiwi.TARGET_BROWSER) {
+				this.container.style.width = value + &quot;px&quot;;
+			}
+
+			this._width = value;
+		}
+
+		/**
+		* The height of the container
+		* @property _height
+		* @type number
+		* @private
+		*/
+		private _height: number;
+		
+		/**
+		* The height of the container
+		* @property height
+		* @type number
+		* @public
+		*/
+		public get height(): number {
+			return this._height;
+		}
+		public set height(value: number) {
+			if (this._device == Kiwi.TARGET_BROWSER) {
+				this.container.style.height = value + &quot;px&quot;;
+			}
+			this._height = value;
+		}
+
+		/**
+		* Knows if this bar is ment to be horizontal or veritical
+		* @property _horizontal
+		* @type boolean
+		* @private 
+		*/
+		private _horizontal: boolean;
+
+		/**
+		* The HTMLElement that is currently being used as the &#x27;bar&#x27;.
+		* @property bar
+		* @type HTMLElement
+		* @public
+		*/
+		public bar: HTMLElement;
+
+		/**
+		* A reference to the HTMLElement that this class always generates.
+		* @property _bar
+		* @type HTMLElement
+		* @private
+		*/
+		private _bar: HTMLElement;
+
+		/**
+		* The counter component.
+		* @property counter
+		* @type Kiwi.HUD.HUDComponents.Counter
+		* @public
+		*/
+		public counter: Kiwi.HUD.HUDComponents.Counter;
+
+		/**
+		* Used to set the bar to be horizontal or vertical by passing a boolean.
+		* @property horizontal
+		* @type boolean
+		* @public
+		*/
+		public get horizontal(): boolean {
+			return this._horizontal;
+		}
+		public set horizontal(val: boolean) {
+			this._horizontal = val;
+			this.updateCSS();
+		}
+
+		/**
+		* Used to set the bar to be horizontal or vertical by passing a boolean.
+		* @property verticle
+		* @type boolean
+		* @public
+		*/
+		public get vertical(): boolean {
+			return !this._horizontal;
+		}
+		public set vertical(val: boolean) {
+			this._horizontal = !val;
+			this.updateCSS();
+		}
+
+		/**
+		* This method is used to remove existing DOM elements and place them inside a HUDWidget&#x27;s container element.
+		* Useful so that when making HUD Widgets the developer can style HUDWidgets without having to create/write to much javascript.
+		* Currently not supported. 
+		*
+		* @method setTemplate
+		* @param main {string} ID of an HTMLElement. This element should contain all of the elements you would like to place inside the HUDWidget.
+		* @param innerbar {string} ID of an HTMLElement that resides inside of the main param. This is the element that the HUDWidget can use to populate with information. E.g. Your score, health remaining, the icon, e.t.c.
+		* @public
+		*/
+		public setTemplate(main: string, innerbar?: string) {
+
+			if(this._device == Kiwi.TARGET_BROWSER) {
+				super.setTemplate(main, innerbar);
+
+				if (this.tempElement !== undefined) {
+					this.bar = this.tempElement;
+				}
+			}
+		}
+
+		/**
+		* Used to remove any the template HTML from this HUDWidget.
+		* Current not supported. 
+		*
+		* @method removeTemplate
+		* @public
+		*/
+		public removeTemplate() {
+			if (this._device == Kiwi.TARGET_BROWSER) {
+				super.removeTemplate();
+
+				this.bar = this._bar;
+				this.container.appendChild(this.bar);
+				this.updateCSS();
+			}
+		}
+
+		/**
+		* Will be called when the range has been updated and thus you will want to preform the render of the bar here.
+		* This should be overriden by subclasses so that you have your own custom bars. 
+		* @method updateCSS
+		* @public
+		*/
+		public updateCSS() {
+			
+			if (this.horizontal === true) {
+				this.bar.style.width = String(this.counter.currentPercent()) + &#x27;%&#x27;;
+				this.bar.style.height = &#x27;100%&#x27;;
+			} else {
+				this.bar.style.height = String(this.counter.currentPercent()) + &#x27;%&#x27;;
+				this.bar.style.width = &#x27;100%&#x27;;
+			}
+
+		}
+
+	}
 
 }
+
     </pre>
 </div>
 
diff --git a/docs/files/src_hud_widgets_BasicScore.ts.html b/docs/files/src_hud_widgets_BasicScore.ts.html
index 7119569..7af9cfe 100644
--- a/docs/files/src_hud_widgets_BasicScore.ts.html
+++ b/docs/files/src_hud_widgets_BasicScore.ts.html
@@ -371,59 +371,59 @@ <h1 class="file-heading">File: src/hud/widgets/BasicScore.ts</h1>
 
 module Kiwi.HUD.Widget {
 
-    /**
-    * A subclass of textfield that is primarily used to keep track of a score.
-    * The score can be accessed via the counter component.
-    * 
-    * @class BasicScore
-    * @extends Kiwi.HUD.TextField
-    * @namespace Kiwi.HUD.Widget
-    * @constructor
-    * @param game {Kiwi.Game} The game that this BasicScore belongs to.
-    * @param x {number} The cooridnates of the game on the x-axis.
-    * @param y {number} The cooridnates of the game on the y-axis.
-    * @param [initial=0] {number} The initial score to start off at.
-    * @return {Kiwi.HUD.Widget.BasicScore}
-    */
-    export class BasicScore extends Kiwi.HUD.Widget.TextField {
-       
-        constructor(game: Kiwi.Game, x: number, y: number, initial:number=0) {
-            super(game, &quot;basicScore&quot;, x, y);
-            this.name = &#x27;basicScore&#x27;;
-            this.class = &#x27;kiwi-basicscore-widget kiwi-widget&#x27;;
-            this.counter = this.components.add(new Kiwi.HUD.HUDComponents.Counter(this, initial));
-            this.counter.updated.add(this._updateText, this);
-            this._updateText();
-        }
+	/**
+	* A subclass of textfield that is primarily used to keep track of a score.
+	* The score can be accessed via the counter component.
+	* 
+	* @class BasicScore
+	* @extends Kiwi.HUD.TextField
+	* @namespace Kiwi.HUD.Widget
+	* @constructor
+	* @param game {Kiwi.Game} The game that this BasicScore belongs to.
+	* @param x {number} The cooridnates of the game on the x-axis.
+	* @param y {number} The cooridnates of the game on the y-axis.
+	* @param [initial=0] {number} The initial score to start off at.
+	* @return {Kiwi.HUD.Widget.BasicScore}
+	*/
+	export class BasicScore extends Kiwi.HUD.Widget.TextField {
+	   
+		constructor(game: Kiwi.Game, x: number, y: number, initial:number=0) {
+			super(game, &quot;basicScore&quot;, x, y);
+			this.name = &#x27;basicScore&#x27;;
+			this.class = &#x27;kiwi-basicscore-widget kiwi-widget&#x27;;
+			this.counter = this.components.add(new Kiwi.HUD.HUDComponents.Counter(this, initial));
+			this.counter.updated.add(this._updateText, this);
+			this._updateText();
+		}
 
-        /**
-        * Returns the type of object that this is.
-        * @method objType
-        * @return {String} &quot;BasicScoreWidget&quot;
-        * @public
-        */
-        public objType(): string {
-            return &#x27;BasicScoreWidget&#x27;;
-        }
+		/**
+		* Returns the type of object that this is.
+		* @method objType
+		* @return {String} &quot;BasicScoreWidget&quot;
+		* @public
+		*/
+		public objType(): string {
+			return &#x27;BasicScoreWidget&#x27;;
+		}
 
-        /**
-        * Holds a reference to the counter component.
-        * @property counter
-        * @type Kiwi.HUD.HUDComponents.Counter
-        * @public
-        */
-        public counter: Kiwi.HUD.HUDComponents.Counter;
-        
-        /**
-        * Updates the text inside the textfield.
-        * @method _updateText
-        * @private
-        */
-        public _updateText() {
-            this.text = String(this.counter.current);
-        }
+		/**
+		* Holds a reference to the counter component.
+		* @property counter
+		* @type Kiwi.HUD.HUDComponents.Counter
+		* @public
+		*/
+		public counter: Kiwi.HUD.HUDComponents.Counter;
+		
+		/**
+		* Updates the text inside the textfield.
+		* @method _updateText
+		* @private
+		*/
+		public _updateText() {
+			this.text = String(this.counter.current);
+		}
 
-    }
+	}
 
 }
 
diff --git a/docs/files/src_hud_widgets_Button.ts.html b/docs/files/src_hud_widgets_Button.ts.html
index f92e417..bedd6aa 100644
--- a/docs/files/src_hud_widgets_Button.ts.html
+++ b/docs/files/src_hud_widgets_Button.ts.html
@@ -372,53 +372,54 @@ <h1 class="file-heading">File: src/hud/widgets/Button.ts</h1>
 */
 
 module Kiwi.HUD.Widget {
-    
-    /**
-    * A subclass of the TextField that has its own input component so that you can listen for mouse events on this widget.
-    *
-    * @class Button
-    * @extends Kiwi.HUD.TextField
-    * @namespace Kiwi.HUD.Widget
-    * @constructor
-    * @param game {Kiwi.Game} The game that this belongs to.
-    * @param text {string} The text that you want to display inside the button.
-    * @param x {number} The x-coordnates of this Widget.
-    * @param y {number} The y-coordinates of this Widget.
-    * @return {Kiwi.HUD.Widget.Button}
-    */
-    export class Button extends Kiwi.HUD.Widget.TextField {
 
-        constructor(game: Kiwi.Game, text:string, x: number, y: number) {
+	/**
+	* A subclass of the TextField that has its own input component so that you can listen for mouse events on this widget.
+	*
+	* @class Button
+	* @extends Kiwi.HUD.TextField
+	* @namespace Kiwi.HUD.Widget
+	* @constructor
+	* @param game {Kiwi.Game} The game that this belongs to.
+	* @param text {string} The text that you want to display inside the button.
+	* @param x {number} The x-coordnates of this Widget.
+	* @param y {number} The y-coordinates of this Widget.
+	* @return {Kiwi.HUD.Widget.Button}
+	*/
+	export class Button extends Kiwi.HUD.Widget.TextField {
 
-            super(game, text, x, y);
+		constructor(game: Kiwi.Game, text:string, x: number, y: number) {
 
-            this.name = &#x27;button&#x27;;
-            this.class = &#x27;kiwi-button-widget kiwi-widget&#x27;;
-            
-            this.input = this.components.add(new Kiwi.HUD.HUDComponents.WidgetInput(this, this.container));
-        }
+			super(game, text, x, y);
+
+			this.name = &#x27;button&#x27;;
+			this.class = &#x27;kiwi-button-widget kiwi-widget&#x27;;
+			
+			this.input = this.components.add(new Kiwi.HUD.HUDComponents.WidgetInput(this, this.container));
+		}
 
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} &quot;ButtonWidget&quot;
-        * @public
-        */
-        public objType(): string {
-            return &#x27;ButtonWidget&#x27;;
-        }
-        
-        /**
-        * The WidgetInput component that handles the management of events for this button.
-        * @property input
-        * @type Kiwi.HUD.HUDComponents.WidgetInput
-        * @public
-        */
-        public input: Kiwi.HUD.HUDComponents.WidgetInput;
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} &quot;ButtonWidget&quot;
+		* @public
+		*/
+		public objType(): string {
+			return &#x27;ButtonWidget&#x27;;
+		}
+		
+		/**
+		* The WidgetInput component that handles the management of events for this button.
+		* @property input
+		* @type Kiwi.HUD.HUDComponents.WidgetInput
+		* @public
+		*/
+		public input: Kiwi.HUD.HUDComponents.WidgetInput;
 
-    }
+	}
 
 }
+
     </pre>
 </div>
 
diff --git a/docs/files/src_hud_widgets_Icon.ts.html b/docs/files/src_hud_widgets_Icon.ts.html
index 15bb8c7..f269665 100644
--- a/docs/files/src_hud_widgets_Icon.ts.html
+++ b/docs/files/src_hud_widgets_Icon.ts.html
@@ -372,171 +372,172 @@ <h1 class="file-heading">File: src/hud/widgets/Icon.ts</h1>
 */
 
 module Kiwi.HUD.Widget {
-    
-    /**
-    * Used to display a cell from a TextureAtlas in the HUD. This could be used for portraits of the character, e.t.c.
-    * You can change the current cell that is being used in the TextureAtlas by modifing the cellIndex property.
-    *
-    * @class Icon
-    * @extends Kiwi.HUD.HUDWidget
-    * @namespace Kiwi.HUD.Widget
-    * @constructor
-    * @param game {Kiwi.Game} The game that this icon belongs to.
-    * @param atlas {Kiwi.Textures.TextureAtlas} The image that you would like displayed.
-    * @param x {Number} The coordinate of the icon on the x-axis.
-    * @param y {Number} The coordinate of the icon on the y-axis.
-    * @return {Kiwi.HUD.Widget.Icon}
-    */
-    export class Icon extends Kiwi.HUD.HUDWidget {
-
-        constructor(game:Kiwi.Game, atlas: Kiwi.Textures.TextureAtlas, x:number, y:number) {
-
-            super(game, &#x27;Icon&#x27;, x, y);
-
-            this.class = &#x27;kiwi-icon-widget kiwi-widget&#x27;;
-            this.atlas = atlas;
-            this.icon = this.container;
-            this._applyCSS();
-        }
-
-        /**
-        * Holds the texture atlas that is being used
-        * @property atlas
-        * @type Kiwi.Textures.TextureAtlas
-        * @public
-        */
-        public atlas: Kiwi.Textures.TextureAtlas;
-        
-        /**
-        * The cell inside the texture atlas that this icon is using
-        * @property _cellIndex
-        * @type number
-        * @default 0
-        * @private
-        */
-        private _cellIndex: number = 0;
-        
-        /**
-        * Gets the cell index that is being used.
-        * @property cellIndex
-        * @type number
-        * @default 0 
-        * @public
-        */
-        public get cellIndex(): number {
-            return this._cellIndex;
-        }
-        public set cellIndex(value: number) {
-            this._cellIndex = value;
-            this.width = this.atlas.cells[this.cellIndex].w;
-            this.height = this.atlas.cells[this.cellIndex].h;
-            this._applyCSS();
-        }
-
-        /**
-        * Returns the width of the cell that is being used.
-        * @property width
-        * @type number
-        * @public
-        */
-        public get width(): number {
-            return this.atlas.cells[this.cellIndex].w;
-        }
-        
-        /**
-        * Returns the height of the cell that is being used.
-        * @property height
-        * @type number
-        * @public
-        */
-        public get height(): number {
-            return this.atlas.cells[this.cellIndex].h;
-        }
-
-        /**
-        * Is a reference to the element that the icon CSS is being applyed to.
-        * @property icon
-        * @type HTMLElement
-        * @public
-        */
-        public icon: HTMLElement;
-
-        /**
-        * Removes the CSS from the Icon.
-        * This can happen when setting/removing a template and is public to allow for overriding from subclasses.
-        * @method _removeCSS
-        * @protected
-        */
-        public _removeCSS() {
-            this.icon.style.width = &#x27;&#x27;;
-            this.icon.style.height = &#x27;&#x27;;
-            this.icon.style.backgroundImage = &#x27;&#x27;;
-            this.icon.style.backgroundRepeat = &#x27;&#x27;;
-        }
-
-        /**
-        * Applys the css to the HTMLElement that is to be affected. 
-        * @method _applyCSS
-        * @protected
-        */
-        public _applyCSS() {
-            this.icon.style.width = this.width + &quot;px&quot;;
-            this.icon.style.height = this.height + &quot;px&quot;;
-            this.icon.style.backgroundPositionX = -this.atlas.cells[this.cellIndex].x + &quot;px&quot;;
-            this.icon.style.backgroundPositionY = -this.atlas.cells[this.cellIndex].y + &quot;px&quot;;
-            this.icon.style.backgroundRepeat = &#x27;no-repeat&#x27;;
-
-            if ( Kiwi.Utils.Common.isUndefined( this.atlas.image.src) == false) {
-                this.icon.style.backgroundImage = &#x27;url(&quot;&#x27; + this.atlas.image.src + &#x27;&quot;)&#x27;;
-            } else {
-                this.icon.style.backgroundImage = &#x27;url(&quot;&#x27; + this.atlas.image.toDataURL(&quot;image/png&quot;) + &#x27;&quot;)&#x27;;
-            }
-
-        }
-
-        /**
-        * This method is used to remove existing DOM elements and place them inside a HUDWidget&#x27;s container element.
-        * Useful so that when making HUD Widgets the developer can style HUDWidgets without having to create/write to much javascript.
-        * Currently not supported.
-        *
-        * @method setTemplate
-        * @param main {string} main - ID of an HTMLElement. This element should contain all of the elements you would like to place inside the HUDWidget. 
-        * @param icon {string} icon - ID of an HTMLElement that resides inside of the main param. This is the element that the HUDWidget can use to populate with information. E.g. Your score, health remaining, the icon, e.t.c.
-        * @public
-        */
-        public setTemplate(main: string, icon?: string) {  
-            if (this._device == Kiwi.TARGET_BROWSER) {
-                this._removeCSS();
-
-                super.setTemplate(main, icon);
-                
-                if (this.tempElement !== undefined) {
-                    this.icon = this.tempElement;
-                }
-
-                this._applyCSS();
-            }
-        }
-
-        /**
-        * Used to remove any the template HTML from this HUDWidget.
-        * 
-        * @method removeTemplate
-        * @public
-        */
-        public removeTemplate() {
-            if (this._device == Kiwi.TARGET_BROWSER) {
-                super.removeTemplate();
-
-                this._removeCSS();
-                this.icon = this.container;
-                this._applyCSS();
-            }
-        }
-
-    }
+
+	/**
+	* Used to display a cell from a TextureAtlas in the HUD. This could be used for portraits of the character, e.t.c.
+	* You can change the current cell that is being used in the TextureAtlas by modifing the cellIndex property.
+	*
+	* @class Icon
+	* @extends Kiwi.HUD.HUDWidget
+	* @namespace Kiwi.HUD.Widget
+	* @constructor
+	* @param game {Kiwi.Game} The game that this icon belongs to.
+	* @param atlas {Kiwi.Textures.TextureAtlas} The image that you would like displayed.
+	* @param x {Number} The coordinate of the icon on the x-axis.
+	* @param y {Number} The coordinate of the icon on the y-axis.
+	* @return {Kiwi.HUD.Widget.Icon}
+	*/
+	export class Icon extends Kiwi.HUD.HUDWidget {
+
+		constructor(game:Kiwi.Game, atlas: Kiwi.Textures.TextureAtlas, x:number, y:number) {
+
+			super(game, &#x27;Icon&#x27;, x, y);
+
+			this.class = &#x27;kiwi-icon-widget kiwi-widget&#x27;;
+			this.atlas = atlas;
+			this.icon = this.container;
+			this._applyCSS();
+		}
+
+		/**
+		* Holds the texture atlas that is being used
+		* @property atlas
+		* @type Kiwi.Textures.TextureAtlas
+		* @public
+		*/
+		public atlas: Kiwi.Textures.TextureAtlas;
+
+		/**
+		* The cell inside the texture atlas that this icon is using
+		* @property _cellIndex
+		* @type number
+		* @default 0
+		* @private
+		*/
+		private _cellIndex: number = 0;
+
+		/**
+		* Gets the cell index that is being used.
+		* @property cellIndex
+		* @type number
+		* @default 0 
+		* @public
+		*/
+		public get cellIndex(): number {
+			return this._cellIndex;
+		}
+		public set cellIndex(value: number) {
+			this._cellIndex = value;
+			this.width = this.atlas.cells[this.cellIndex].w;
+			this.height = this.atlas.cells[this.cellIndex].h;
+			this._applyCSS();
+		}
+
+		/**
+		* Returns the width of the cell that is being used.
+		* @property width
+		* @type number
+		* @public
+		*/
+		public get width(): number {
+			return this.atlas.cells[this.cellIndex].w;
+		}
+
+		/**
+		* Returns the height of the cell that is being used.
+		* @property height
+		* @type number
+		* @public
+		*/
+		public get height(): number {
+			return this.atlas.cells[this.cellIndex].h;
+		}
+
+		/**
+		* Is a reference to the element that the icon CSS is being applyed to.
+		* @property icon
+		* @type HTMLElement
+		* @public
+		*/
+		public icon: HTMLElement;
+
+		/**
+		* Removes the CSS from the Icon.
+		* This can happen when setting/removing a template and is public to allow for overriding from subclasses.
+		* @method _removeCSS
+		* @protected
+		*/
+		public _removeCSS() {
+			this.icon.style.width = &#x27;&#x27;;
+			this.icon.style.height = &#x27;&#x27;;
+			this.icon.style.backgroundImage = &#x27;&#x27;;
+			this.icon.style.backgroundRepeat = &#x27;&#x27;;
+		}
+
+		/**
+		* Applys the css to the HTMLElement that is to be affected. 
+		* @method _applyCSS
+		* @protected
+		*/
+		public _applyCSS() {
+			this.icon.style.width = this.width + &quot;px&quot;;
+			this.icon.style.height = this.height + &quot;px&quot;;
+			this.icon.style.backgroundPositionX = -this.atlas.cells[this.cellIndex].x + &quot;px&quot;;
+			this.icon.style.backgroundPositionY = -this.atlas.cells[this.cellIndex].y + &quot;px&quot;;
+			this.icon.style.backgroundRepeat = &#x27;no-repeat&#x27;;
+
+			if ( Kiwi.Utils.Common.isUndefined( this.atlas.image.src) == false) {
+				this.icon.style.backgroundImage = &#x27;url(&quot;&#x27; + this.atlas.image.src + &#x27;&quot;)&#x27;;
+			} else {
+				this.icon.style.backgroundImage = &#x27;url(&quot;&#x27; + this.atlas.image.toDataURL(&quot;image/png&quot;) + &#x27;&quot;)&#x27;;
+			}
+
+		}
+
+		/**
+		* This method is used to remove existing DOM elements and place them inside a HUDWidget&#x27;s container element.
+		* Useful so that when making HUD Widgets the developer can style HUDWidgets without having to create/write to much javascript.
+		* Currently not supported.
+		*
+		* @method setTemplate
+		* @param main {string} main - ID of an HTMLElement. This element should contain all of the elements you would like to place inside the HUDWidget. 
+		* @param icon {string} icon - ID of an HTMLElement that resides inside of the main param. This is the element that the HUDWidget can use to populate with information. E.g. Your score, health remaining, the icon, e.t.c.
+		* @public
+		*/
+		public setTemplate(main: string, icon?: string) {  
+			if (this._device == Kiwi.TARGET_BROWSER) {
+				this._removeCSS();
+
+				super.setTemplate(main, icon);
+				
+				if (this.tempElement !== undefined) {
+					this.icon = this.tempElement;
+				}
+
+				this._applyCSS();
+			}
+		}
+
+		/**
+		* Used to remove any the template HTML from this HUDWidget.
+		* 
+		* @method removeTemplate
+		* @public
+		*/
+		public removeTemplate() {
+			if (this._device == Kiwi.TARGET_BROWSER) {
+				super.removeTemplate();
+
+				this._removeCSS();
+				this.icon = this.container;
+				this._applyCSS();
+			}
+		}
+
+	}
 
 }
+
     </pre>
 </div>
 
diff --git a/docs/files/src_hud_widgets_IconBar.ts.html b/docs/files/src_hud_widgets_IconBar.ts.html
index 06fbff8..86286e8 100644
--- a/docs/files/src_hud_widgets_IconBar.ts.html
+++ b/docs/files/src_hud_widgets_IconBar.ts.html
@@ -372,209 +372,210 @@ <h1 class="file-heading">File: src/hud/widgets/IconBar.ts</h1>
 
 module Kiwi.HUD.Widget {
 
-    /**
-    * The IconBar used to display a series of icons which represent a number of &#x27;something&#x27; the user may have. 
-    * Example: If you had a shooter style game you might want to display the amount of &#x27;ammo&#x27; left in the gun using a series of bullet icons. You could then use this IconBar to display that series.
-    * The amount is based of a counter components current value, so you can set a maximum and minimum number of images to be displayed.
-    *
-    * @class IconBar
-    * @extends Kiwi.HUD.HUDWidget
-    * @namespace Kiwi.HUD.Widget
-    * @constructor
-    * @param game {Kiwi.Game} The game that this icon bar belongs to.
-    * @param atlas {Kiwi.Textures.TextureAtlas} The texture atlas that the icons will have.
-    * @param current {number} The current amount of icons in the bar.
-    * @param max {number} The maximum number of icons.
-    * @param x {number} The x coordinates of the first icon.
-    * @param y {number} The y coordinates of the last icon.
-    * @return {Kiwi.HUD.Widget.IconBar}
-    */
-    export class IconBar extends Kiwi.HUD.HUDWidget {
-
-        constructor(game:Kiwi.Game, atlas: Kiwi.Textures.TextureAtlas, current: number, max: number, x: number, y: number) {
-            
-            super(game, &#x27;IconBar&#x27;, x, y);
-
-            this.class = &#x27;kiwi-iconbar-widget kiwi-widget&#x27;;
-            this.atlas = atlas;
-            this.width = this.atlas.cells[0].w;
-            this.height = this.atlas.cells[0].h;
-            this._horizontal = true;
-            
-            this.counter = this.components.add(new Kiwi.HUD.HUDComponents.Counter(this, current, max, 0));
-            this.counter.updated.add(this._amountChanged, this);
-
-            this._icons = [];
-            this._amountChanged();
-        }
-
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} &quot;IconBarWidget&quot;
-        * @public
-        */
-        public objType():string {
-            return &#x27;IconBarWidget&#x27;;
-        }
-
-        /**
-        * The amount of spacing you want between each icon in the bar. Defaults to 0.
-        * @property iconGap
-        * @type number
-        * @default 0
-        * @public
-        */
-        public iconGap: number = 0;
-
-        /**
-        * The texture atlas that each Icon inside the IconBar will use.
-        * @property atlas
-        * @type Kiwi.Textures.TextureAtlas
-        * @public
-        */
-        public atlas: Kiwi.Textures.TextureAtlas;
-
-        /**
-        * The width of a single Icon in the bar. This is based on the width of the first cell in the atlas.
-        * @property width
-        * @type number
-        * @private
-        */
-        private width: number;
-
-        /**
-        * The height of a single Icon in the bar. This is based on the height of the first cell in the atlas.
-        * @property height
-        * @type number
-        * @private
-        */
-        private height: number;
-
-        /**
-        * Knowledge of whether the icons should be horizontal or vertical
-        * @property _horizontal
-        * @type boolean
-        * @default true
-        * @private
-        */
-        private _horizontal: boolean;
-
-        /**
-        * Holds the counter component.
-        * @property counter
-        * @type Kiwi.HUD.HUDComponents.Counter
-        * @public
-        */
-        public counter: Kiwi.HUD.HUDComponents.Counter;
-
-        /**
-        * An array of all of the icons on the screen. Each item in the array is of the type Kiwi.HUD.Widget.Icon
-        * @property icons
-        * @type Array
-        * @private
-        */
-        private _icons: Kiwi.HUD.Widget.Icon[];
-
-        /**
-        * Gets called when the range has updated and then it updates the size of the bar.
-        * @method _changeSize
-        * @private
-        */
-        private _amountChanged() {
-
-            //do we need to do something to the icons?!?
-            if (this.counter.max !== this._icons.length) {
-                if ((this.counter.max) &gt; this._icons.length) {
-                    //add more
-                    var amount = (this.counter.max) - this._icons.length;
-                    for (var i = 0; i &lt; amount; i++) {
-                        this._addIcon();
-                    }
-                } else {
-                    //remove some
-                    for (var i = this.counter.max; i &lt; this._icons.length; i++) {
-                        this._removeIcon(this._icons[i]);
-                        this._icons[i].destroy();
-                        this._icons.splice(i, 1);
-                        i--;
-                    }
-                }
-            }
-
-            //display them all!
-            for (var i = 0; i &lt; this._icons.length; i++) {
-                if (i &gt; (this.counter.current - 1)) {
-                    this._icons[i].style.display = &#x27;none&#x27;;
-                } else {
-                    this._icons[i].style.display = &#x27;block&#x27;;
-                }
-            }
-        }
-
-        /**
-        * Creates a new Icon and adds it to this IconBar.
-        * @method _addIcon
-        * @private
-        */
-        private _addIcon() {
-            if (this.horizontal) {
-                var i: Kiwi.HUD.Widget.Icon = new Kiwi.HUD.Widget.Icon(this.game, this.atlas, this.x + ((this.width + this.iconGap) * (this._icons.length - 1)), this.y);
-            } else {
-                var i: Kiwi.HUD.Widget.Icon = new Kiwi.HUD.Widget.Icon(this.game, this.atlas, this.x, ((this.height + this.iconGap) * (this._icons.length - 1)) + this.y);
-            }
-
-            this._icons.push(i);
-            if (this._device == Kiwi.TARGET_BROWSER) {
-                this.container.appendChild(i.container);
-            }
-        }
-
-        /**
-        * Removes a Icon from the container.
-        * @method _removeIcon
-        * @param icon {Kiwi.HUD.Widget.Icon} The icon that you want to remove.
-        * @private
-        */
-        private _removeIcon(icon:Kiwi.HUD.Widget.Icon) {
-            if (this._device == Kiwi.TARGET_BROWSER) {
-                this.container.removeChild(icon.container);
-            }
-        }
-        
-        /**
-        * Used to set the bar to be horizontal or vertical by passing a boolean.
-        * @property horizontal
-        * @type boolean
-        * @default true
-        * @public
-        */
-        public get horizontal(): boolean {
-            return this._horizontal;
-        }
-        public set horizontal(val: boolean) {
-            this._horizontal = val;
-            this._amountChanged();
-        }
-
-        /**
-        * Used to set the bar to be horizontal or vertical by passing a boolean.
-        * @property vertical
-        * @type boolean
-        * @default false
-        * @public
-        */
-        public get vertical(): boolean {
-            return !this._horizontal;
-        }
-        public set vertical(val: boolean) {
-            this._horizontal = !val;
-            this._amountChanged();
-        }
-
-    }
+	/**
+	* The IconBar used to display a series of icons which represent a number of &#x27;something&#x27; the user may have. 
+	* Example: If you had a shooter style game you might want to display the amount of &#x27;ammo&#x27; left in the gun using a series of bullet icons. You could then use this IconBar to display that series.
+	* The amount is based of a counter components current value, so you can set a maximum and minimum number of images to be displayed.
+	*
+	* @class IconBar
+	* @extends Kiwi.HUD.HUDWidget
+	* @namespace Kiwi.HUD.Widget
+	* @constructor
+	* @param game {Kiwi.Game} The game that this icon bar belongs to.
+	* @param atlas {Kiwi.Textures.TextureAtlas} The texture atlas that the icons will have.
+	* @param current {number} The current amount of icons in the bar.
+	* @param max {number} The maximum number of icons.
+	* @param x {number} The x coordinates of the first icon.
+	* @param y {number} The y coordinates of the last icon.
+	* @return {Kiwi.HUD.Widget.IconBar}
+	*/
+	export class IconBar extends Kiwi.HUD.HUDWidget {
+
+		constructor(game:Kiwi.Game, atlas: Kiwi.Textures.TextureAtlas, current: number, max: number, x: number, y: number) {
+			
+			super(game, &#x27;IconBar&#x27;, x, y);
+
+			this.class = &#x27;kiwi-iconbar-widget kiwi-widget&#x27;;
+			this.atlas = atlas;
+			this.width = this.atlas.cells[0].w;
+			this.height = this.atlas.cells[0].h;
+			this._horizontal = true;
+			
+			this.counter = this.components.add(new Kiwi.HUD.HUDComponents.Counter(this, current, max, 0));
+			this.counter.updated.add(this._amountChanged, this);
+
+			this._icons = [];
+			this._amountChanged();
+		}
+
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} &quot;IconBarWidget&quot;
+		* @public
+		*/
+		public objType():string {
+			return &#x27;IconBarWidget&#x27;;
+		}
+
+		/**
+		* The amount of spacing you want between each icon in the bar. Defaults to 0.
+		* @property iconGap
+		* @type number
+		* @default 0
+		* @public
+		*/
+		public iconGap: number = 0;
+
+		/**
+		* The texture atlas that each Icon inside the IconBar will use.
+		* @property atlas
+		* @type Kiwi.Textures.TextureAtlas
+		* @public
+		*/
+		public atlas: Kiwi.Textures.TextureAtlas;
+
+		/**
+		* The width of a single Icon in the bar. This is based on the width of the first cell in the atlas.
+		* @property width
+		* @type number
+		* @private
+		*/
+		private width: number;
+
+		/**
+		* The height of a single Icon in the bar. This is based on the height of the first cell in the atlas.
+		* @property height
+		* @type number
+		* @private
+		*/
+		private height: number;
+
+		/**
+		* Knowledge of whether the icons should be horizontal or vertical
+		* @property _horizontal
+		* @type boolean
+		* @default true
+		* @private
+		*/
+		private _horizontal: boolean;
+
+		/**
+		* Holds the counter component.
+		* @property counter
+		* @type Kiwi.HUD.HUDComponents.Counter
+		* @public
+		*/
+		public counter: Kiwi.HUD.HUDComponents.Counter;
+
+		/**
+		* An array of all of the icons on the screen. Each item in the array is of the type Kiwi.HUD.Widget.Icon
+		* @property icons
+		* @type Array
+		* @private
+		*/
+		private _icons: Kiwi.HUD.Widget.Icon[];
+
+		/**
+		* Gets called when the range has updated and then it updates the size of the bar.
+		* @method _changeSize
+		* @private
+		*/
+		private _amountChanged() {
+
+			//do we need to do something to the icons?!?
+			if (this.counter.max !== this._icons.length) {
+				if ((this.counter.max) &gt; this._icons.length) {
+					//add more
+					var amount = (this.counter.max) - this._icons.length;
+					for (var i = 0; i &lt; amount; i++) {
+						this._addIcon();
+					}
+				} else {
+					//remove some
+					for (var i = this.counter.max; i &lt; this._icons.length; i++) {
+						this._removeIcon(this._icons[i]);
+						this._icons[i].destroy();
+						this._icons.splice(i, 1);
+						i--;
+					}
+				}
+			}
+
+			//display them all!
+			for (var i = 0; i &lt; this._icons.length; i++) {
+				if (i &gt; (this.counter.current - 1)) {
+					this._icons[i].style.display = &#x27;none&#x27;;
+				} else {
+					this._icons[i].style.display = &#x27;block&#x27;;
+				}
+			}
+		}
+
+		/**
+		* Creates a new Icon and adds it to this IconBar.
+		* @method _addIcon
+		* @private
+		*/
+		private _addIcon() {
+			if (this.horizontal) {
+				var i: Kiwi.HUD.Widget.Icon = new Kiwi.HUD.Widget.Icon(this.game, this.atlas, this.x + ((this.width + this.iconGap) * (this._icons.length - 1)), this.y);
+			} else {
+				var i: Kiwi.HUD.Widget.Icon = new Kiwi.HUD.Widget.Icon(this.game, this.atlas, this.x, ((this.height + this.iconGap) * (this._icons.length - 1)) + this.y);
+			}
+
+			this._icons.push(i);
+			if (this._device == Kiwi.TARGET_BROWSER) {
+				this.container.appendChild(i.container);
+			}
+		}
+
+		/**
+		* Removes a Icon from the container.
+		* @method _removeIcon
+		* @param icon {Kiwi.HUD.Widget.Icon} The icon that you want to remove.
+		* @private
+		*/
+		private _removeIcon(icon:Kiwi.HUD.Widget.Icon) {
+			if (this._device == Kiwi.TARGET_BROWSER) {
+				this.container.removeChild(icon.container);
+			}
+		}
+
+		/**
+		* Used to set the bar to be horizontal or vertical by passing a boolean.
+		* @property horizontal
+		* @type boolean
+		* @default true
+		* @public
+		*/
+		public get horizontal(): boolean {
+			return this._horizontal;
+		}
+		public set horizontal(val: boolean) {
+			this._horizontal = val;
+			this._amountChanged();
+		}
+
+		/**
+		* Used to set the bar to be horizontal or vertical by passing a boolean.
+		* @property vertical
+		* @type boolean
+		* @default false
+		* @public
+		*/
+		public get vertical(): boolean {
+			return !this._horizontal;
+		}
+		public set vertical(val: boolean) {
+			this._horizontal = !val;
+			this._amountChanged();
+		}
+
+	}
 
 }
+
     </pre>
 </div>
 
diff --git a/docs/files/src_hud_widgets_Menu.ts.html b/docs/files/src_hud_widgets_Menu.ts.html
index 58a6d5a..f73a907 100644
--- a/docs/files/src_hud_widgets_Menu.ts.html
+++ b/docs/files/src_hud_widgets_Menu.ts.html
@@ -370,190 +370,191 @@ <h1 class="file-heading">File: src/hud/widgets/Menu.ts</h1>
 */
 
 module Kiwi.HUD.Widget {
-    
-    /**
-    * A Widget for that is used for the management/displaying of a Menu. 
-    * This class is primarily used as a manager of MenuItems, so on this class you can create/add MenuItems
-    * and styles that you want applyed to all MenuItems. 
-    * 
-    * @class Menu
-    * @extends Kiwi.HUD.HUDWidget
-    * @namespace Kiwi.HUD.Widget
-    * @constructor
-    * @param game {Kiwi.Game} The game that this Menu belongs to.
-    * @param x {number} Its position on the x-axis.
-    * @param y {number} Its position on the y -axis.
-    * @return {Kiwi.HUD.Widget.Menu}
-    */
-    export class Menu extends Kiwi.HUD.HUDWidget {
-        
-        constructor(game: Kiwi.Game, x: number, y: number) {
-            super(game, &#x27;menu&#x27;, x, y);
-
-            this._menuItems = [];
-            this._styles = [];
-            this.class = &#x27;kiwi-menu-widget kiwi-widget&#x27;;
-        }
-        
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {string} &quot;MenuWidget&quot;
-        * @public
-        */
-        public objType():string {
-            return &#x27;MenuWidget&#x27;;
-        }
-        
-        /**
-        * Contains a list of all of the menu items that are currently on this menu. Each item in the list is of the type Kiwi.HUD.Widget.MenuItem.
-        * @property _menuItems
-        * @type Array.
-        * @private
-        */
-        private _menuItems: Kiwi.HUD.Widget.MenuItem[];
-
-        /**
-        * Sets the style of all of the icons that will be on this menu.
-        * @method setStyle
-        * @param index {string}
-        * @param value {string}
-        * @public
-        */
-        public setIconStyle(index: string, value: string) {
-            this._styles.push(({ &#x27;index&#x27;: index, &#x27;value&#x27;: value }));
-
-            for (var i = 0; i &lt; this._menuItems.length; i++) {
-                this._menuItems[i].style[index] = value;
-            }
-        }
-
-        /**
-        * An array containing all of the styles that are/will be applyed to each MenuIcon.
-        * @property _styles
-        * @type Array
-        * @private
-        */
-        private _styles: any[];
-
-        /**
-        * Returns a list that contains all of the menu items (buttons) that are currently on this menu.
-        * Each item in the list is of the type Kiwi.HUD.Widget.MenuItem.
-        * Note: The array itself is READ ONLY but you can modify the objects contained inside of it.
-        * @property menuItems
-        * @type Array
-        * @public
-        */
-        public get menuItems(): Kiwi.HUD.Widget.MenuItem[] {
-            return this._menuItems;
-        }
-        
-        /**
-        * Creates a new menu item and add&#x27;s it to this menu.
-        * @method createMenuItem
-        * @param text {string} The text that you would like the menu item to have.
-        * @param x {number} The x position of the menu item you are wanting to add.
-        * @param y {number} The y position of the menu item you are wanting to add.
-        * @return {Kiwi.HUD.Widget.MenuItem} The newly created MenuItem.
-        * @public
-        */
-        public createMenuItem(text:string,x:number,y:number): Kiwi.HUD.Widget.MenuItem {
-            return this.addMenuItem(new Kiwi.HUD.Widget.MenuItem(this.game, text, x, y));
-        }
-
-        /**
-        * Adds a MenuItem to this menu.
-        * @method addMenuItem
-        * @param item {Kiwi.HUD.Widget.MenuItem} The MenuItem that you would like to add to this menu.
-        * @return {Kiwi.HUD.Widget.MenuItem}
-        * @public 
-        */
-        public addMenuItem(item: Kiwi.HUD.Widget.MenuItem): Kiwi.HUD.Widget.MenuItem {
-            this._menuItems.push(item);
-            item.menu = this;
-
-            for (var i = 0; i &lt; this._styles.length; i++) {
-                item.style[this._styles[i].index] = this._styles[i].value;
-            }
-
-            if (this._device == Kiwi.TARGET_BROWSER) {
-                this.container.appendChild(item.container);
-            }
-
-            return item;
-        }
-
-        /**
-        * Adds multiple MenuItems to this Menu. Each item in the array you would like to add needs to be of the type Kiwi.HUD.Widget.MenuItem.
-        * @method addMenuItems
-        * @param items {Array} The array containing all of the menu items you want to add.
-        * @public 
-        */
-        public addMenuItems(items: Kiwi.HUD.Widget.MenuItem[]) {
-            for (var i = 0; i &lt; items.length; i++) {
-                this.addMenuItem(items[i]);
-            }
-        }
-
-        /**
-        * Returns a MenuItem based on its corresponding numeric position that you pass in the array. 
-        * @method getMenuItem
-        * @param val {Number} 
-        * @return {Kiwi.HUD.Widget.MenuItem}
-        * @public
-        */
-        public getMenuItem(val: number):Kiwi.HUD.Widget.MenuItem {
-            return this._menuItems[val];
-        }
-
-        /**
-        * Currently not supported or working.
-        * @method setTemplate 
-        * @param main {string}
-        * @param [sub] {string}
-        * @public
-        */
-        public setTemplate(main: string, sub?: string) {
-            if (false) {
-                var mainElement = document.getElementById(main)
-                if (mainElement === undefined) {
-                    return;
-                }
-
-                var subElements = mainElement.getElementsByTagName(sub);
-                if (subElements === undefined) {
-                    return;
-                }
-
-                super.setTemplate(main);
-                //do something with each item
-            }
-        }
-
-        /**
-        * Currently not supported or working.
-        * @method removeTemplate
-        * @public 
-        */
-        public removeTemplate() {
-
-        }
-        
-        /**
-        * The update loop.
-        * @method update
-        * @public 
-        */
-        public update() {
-            for (var i = 0; i &lt; this._menuItems.length; i++) {
-                this._menuItems[i].update();
-            }
-            super.update();
-        }
-
-    }
+
+	/**
+	* A Widget for that is used for the management/displaying of a Menu. 
+	* This class is primarily used as a manager of MenuItems, so on this class you can create/add MenuItems
+	* and styles that you want applyed to all MenuItems. 
+	* 
+	* @class Menu
+	* @extends Kiwi.HUD.HUDWidget
+	* @namespace Kiwi.HUD.Widget
+	* @constructor
+	* @param game {Kiwi.Game} The game that this Menu belongs to.
+	* @param x {number} Its position on the x-axis.
+	* @param y {number} Its position on the y -axis.
+	* @return {Kiwi.HUD.Widget.Menu}
+	*/
+	export class Menu extends Kiwi.HUD.HUDWidget {
+
+		constructor(game: Kiwi.Game, x: number, y: number) {
+			super(game, &#x27;menu&#x27;, x, y);
+
+			this._menuItems = [];
+			this._styles = [];
+			this.class = &#x27;kiwi-menu-widget kiwi-widget&#x27;;
+		}
+
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {string} &quot;MenuWidget&quot;
+		* @public
+		*/
+		public objType():string {
+			return &#x27;MenuWidget&#x27;;
+		}
+
+		/**
+		* Contains a list of all of the menu items that are currently on this menu. Each item in the list is of the type Kiwi.HUD.Widget.MenuItem.
+		* @property _menuItems
+		* @type Array.
+		* @private
+		*/
+		private _menuItems: Kiwi.HUD.Widget.MenuItem[];
+
+		/**
+		* Sets the style of all of the icons that will be on this menu.
+		* @method setStyle
+		* @param index {string}
+		* @param value {string}
+		* @public
+		*/
+		public setIconStyle(index: string, value: string) {
+			this._styles.push(({ &#x27;index&#x27;: index, &#x27;value&#x27;: value }));
+
+			for (var i = 0; i &lt; this._menuItems.length; i++) {
+				this._menuItems[i].style[index] = value;
+			}
+		}
+
+		/**
+		* An array containing all of the styles that are/will be applyed to each MenuIcon.
+		* @property _styles
+		* @type Array
+		* @private
+		*/
+		private _styles: any[];
+
+		/**
+		* Returns a list that contains all of the menu items (buttons) that are currently on this menu.
+		* Each item in the list is of the type Kiwi.HUD.Widget.MenuItem.
+		* Note: The array itself is READ ONLY but you can modify the objects contained inside of it.
+		* @property menuItems
+		* @type Array
+		* @public
+		*/
+		public get menuItems(): Kiwi.HUD.Widget.MenuItem[] {
+			return this._menuItems;
+		}
+
+		/**
+		* Creates a new menu item and add&#x27;s it to this menu.
+		* @method createMenuItem
+		* @param text {string} The text that you would like the menu item to have.
+		* @param x {number} The x position of the menu item you are wanting to add.
+		* @param y {number} The y position of the menu item you are wanting to add.
+		* @return {Kiwi.HUD.Widget.MenuItem} The newly created MenuItem.
+		* @public
+		*/
+		public createMenuItem(text:string,x:number,y:number): Kiwi.HUD.Widget.MenuItem {
+			return this.addMenuItem(new Kiwi.HUD.Widget.MenuItem(this.game, text, x, y));
+		}
+
+		/**
+		* Adds a MenuItem to this menu.
+		* @method addMenuItem
+		* @param item {Kiwi.HUD.Widget.MenuItem} The MenuItem that you would like to add to this menu.
+		* @return {Kiwi.HUD.Widget.MenuItem}
+		* @public 
+		*/
+		public addMenuItem(item: Kiwi.HUD.Widget.MenuItem): Kiwi.HUD.Widget.MenuItem {
+			this._menuItems.push(item);
+			item.menu = this;
+
+			for (var i = 0; i &lt; this._styles.length; i++) {
+				item.style[this._styles[i].index] = this._styles[i].value;
+			}
+
+			if (this._device == Kiwi.TARGET_BROWSER) {
+				this.container.appendChild(item.container);
+			}
+
+			return item;
+		}
+
+		/**
+		* Adds multiple MenuItems to this Menu. Each item in the array you would like to add needs to be of the type Kiwi.HUD.Widget.MenuItem.
+		* @method addMenuItems
+		* @param items {Array} The array containing all of the menu items you want to add.
+		* @public 
+		*/
+		public addMenuItems(items: Kiwi.HUD.Widget.MenuItem[]) {
+			for (var i = 0; i &lt; items.length; i++) {
+				this.addMenuItem(items[i]);
+			}
+		}
+
+		/**
+		* Returns a MenuItem based on its corresponding numeric position that you pass in the array. 
+		* @method getMenuItem
+		* @param val {Number} 
+		* @return {Kiwi.HUD.Widget.MenuItem}
+		* @public
+		*/
+		public getMenuItem(val: number):Kiwi.HUD.Widget.MenuItem {
+			return this._menuItems[val];
+		}
+
+		/**
+		* Currently not supported or working.
+		* @method setTemplate 
+		* @param main {string}
+		* @param [sub] {string}
+		* @public
+		*/
+		public setTemplate(main: string, sub?: string) {
+			if (false) {
+				var mainElement = document.getElementById(main)
+				if (mainElement === undefined) {
+					return;
+				}
+
+				var subElements = mainElement.getElementsByTagName(sub);
+				if (subElements === undefined) {
+					return;
+				}
+
+				super.setTemplate(main);
+				//do something with each item
+			}
+		}
+
+		/**
+		* Currently not supported or working.
+		* @method removeTemplate
+		* @public 
+		*/
+		public removeTemplate() {
+
+		}
+
+		/**
+		* The update loop.
+		* @method update
+		* @public 
+		*/
+		public update() {
+			for (var i = 0; i &lt; this._menuItems.length; i++) {
+				this._menuItems[i].update();
+			}
+			super.update();
+		}
+
+	}
 
 }
+
     </pre>
 </div>
 
diff --git a/docs/files/src_hud_widgets_MenuItem.ts.html b/docs/files/src_hud_widgets_MenuItem.ts.html
index 73a4192..1eaaa67 100644
--- a/docs/files/src_hud_widgets_MenuItem.ts.html
+++ b/docs/files/src_hud_widgets_MenuItem.ts.html
@@ -370,53 +370,54 @@ <h1 class="file-heading">File: src/hud/widgets/MenuItem.ts</h1>
 */
 
 module Kiwi.HUD.Widget {
-    
-    /**
-    * A MenuItem extends the Button Widget and is typically contained inside of a Menu Widget. 
-    * Since a MenuItem extends the Button Widget you can access the Input Component that it has to listen to mouse events.
-    *
-    * @class MenuItem
-    * @extends Kiwi.HUD.Widget.Button
-    * @namespace Kiwi.HUD.Widget
-    * @contructor
-    * @param game {Kiwi.Game} The game that this MenuItem belongs to.
-    * @param text {string} The text that is to be inside the menuitem.
-    * @param x {number} The position of this menu item on the x-axis.
-    * @param y {number} The position of this menu item on the y-axis.
-    * @return {Kiwi.HUD.Widget.MenuItem}
-    */
-    export class MenuItem extends Kiwi.HUD.Widget.Button {
 
-        constructor(game:Kiwi.Game, text:string, x: number, y: number) {
-            
-            super(game, text, x, y);
+	/**
+	* A MenuItem extends the Button Widget and is typically contained inside of a Menu Widget. 
+	* Since a MenuItem extends the Button Widget you can access the Input Component that it has to listen to mouse events.
+	*
+	* @class MenuItem
+	* @extends Kiwi.HUD.Widget.Button
+	* @namespace Kiwi.HUD.Widget
+	* @contructor
+	* @param game {Kiwi.Game} The game that this MenuItem belongs to.
+	* @param text {string} The text that is to be inside the menuitem.
+	* @param x {number} The position of this menu item on the x-axis.
+	* @param y {number} The position of this menu item on the y-axis.
+	* @return {Kiwi.HUD.Widget.MenuItem}
+	*/
+	export class MenuItem extends Kiwi.HUD.Widget.Button {
+
+		constructor(game:Kiwi.Game, text:string, x: number, y: number) {
+			
+			super(game, text, x, y);
 
-            this.name = &#x27;menuItem&#x27;;
-            this.class = &#x27;kiwi-menuitem-widget kiwi-widget&#x27;;
+			this.name = &#x27;menuItem&#x27;;
+			this.class = &#x27;kiwi-menuitem-widget kiwi-widget&#x27;;
 
-        }
+		}
 
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {string} &quot;MenuItem&quot;
-        * @public
-        */
-        public objType():string {
-            return &#x27;MenuItem&#x27;;
-        }
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {string} &quot;MenuItem&quot;
+		* @public
+		*/
+		public objType():string {
+			return &#x27;MenuItem&#x27;;
+		}
 
-        /**
-        * The Menu that this belongs to.
-        * @property menu
-        * @type Kiwi.HUD.Widget.Menu
-        * @public
-        */
-        public menu: Kiwi.HUD.Widget.Menu;
+		/**
+		* The Menu that this belongs to.
+		* @property menu
+		* @type Kiwi.HUD.Widget.Menu
+		* @public
+		*/
+		public menu: Kiwi.HUD.Widget.Menu;
 
-    }
+	}
 
 }
+
     </pre>
 </div>
 
diff --git a/docs/files/src_hud_widgets_TextField.ts.html b/docs/files/src_hud_widgets_TextField.ts.html
index 8df0d7e..931aed4 100644
--- a/docs/files/src_hud_widgets_TextField.ts.html
+++ b/docs/files/src_hud_widgets_TextField.ts.html
@@ -376,184 +376,184 @@ <h1 class="file-heading">File: src/hud/widgets/TextField.ts</h1>
 
 module Kiwi.HUD.Widget {
 
-    /**
-    * A Widget that is used for the displaying of text on the HUD. 
-    * Foreach TextField you can add some prefix/suffix text, which is more useful on classes extending this one.
-    *
-    * @class TextField
-    * @extends Kiwi.HUD.HUDWidget
-    * @namespace Kiwi.HUD.Widget
-    * @constructor
-    * @param game {Kiwi.Game} The game that this textfield belongs to.
-    * @param text {string} The text on this textfield.
-    * @param x {number} The x coordinates
-    * @param y {number} The y coordinates
-    * @return {Kiwi.HUD.Widget.TextField} 
-    */
-    export class TextField extends Kiwi.HUD.HUDWidget {
-        
-        constructor(game:Kiwi.Game,text:string,x:number,y:number) {
-            super(game, &quot;textField&quot;, x, y);
-
-            this.class = &#x27;kiwi-textfield-widget kiwi-widget&#x27;;
-
-            if (this._manager.supported) {
-                if (this._device === Kiwi.TARGET_BROWSER) {
-                    this._textField = this.container;
-                    this._textField.innerHTML = text;
-                }
-            }
-        }
-
-        /**
-        * Returns the type of object that this is.
-        * @method objType
-        * @return {String} &#x27;TextFieldWidget&#x27;
-        * @public
-        */
-        public objType(): string {
-            return &#x27;TextFieldWidget&#x27;;
-        }
-
-        /**
-        * The text current being displayed inside this textfield.
-        * @property _text
-        * @type string
-        * @private
-        */
-        private _text: string;
-
-        /**
-        * The htmlelement that is being used as the textfield.
-        * Initially when created this is the same as the container HTMLDivElement.
-        * @property _textField
-        * @type HTMLElement
-        * @private
-        */
-        private _textField: HTMLElement;
-        
-        /**
-        * This method is used to remove existing DOM elements and place them inside a HUDWidget&#x27;s container element.
-        * Useful so that when making HUD Widgets the developer can style HUDWidgets without having to create/write to much javascript.
-        * 
-        * Currently doesn&#x27;t have great support.
-        *
-        * @method setTemplate
-        * @param main {string} ID of an HTMLElement. This element should contain all of the elements you would like to place inside the HUDWidget. 
-        * @param icon {string} ID of an HTMLElement that resides inside of the main param. This is the element that the HUDWidget can use to populate with information. E.g. Your score, health remaining, the icon, e.t.c.
-        * @public
-        */
-        public setTemplate(main: string, field?: string) {
-            if (this._device === Kiwi.TARGET_BROWSER) {
-                this._textField.innerText = &#x27;&#x27;;
-                super.setTemplate(main, field);
-
-                if (this.tempElement !== undefined) {
-                    this._textField = this.tempElement;
-                }
-                this._textField.innerHTML = this._text;
-            }
-        }
-
-        /**
-        * Used to remove any the template HTML from this HUDWidget.
-        * Currently doesn&#x27;t have great support.
-        *
-        * @method removeTemplate
-        * @public
-        */
-        public removeTemplate() {
-            if (this._device === Kiwi.TARGET_BROWSER) {
-                super.removeTemplate();
-
-                if (this._device === Kiwi.TARGET_BROWSER) {
-                    this._textField = this.container;
-                    this._textField.innerHTML = this._text;
-                }
-            }
-        }
-
-        /**
-        * The text that is currently being displayed inside the textfield.
-        * @property text
-        * @type string
-        * @public
-        */
-        public set text(val: string) {
-            if (this._manager.supported) {
-                if (this._device === Kiwi.TARGET_BROWSER) {
-
-                    if (this._prefix !== &#x27;&#x27;) val = this._prefix + val;
-                    if (this._suffix !== &#x27;&#x27;) val += this._suffix;
-
-                    this._text = val;
-                    this._textField.innerHTML = this._text;
-                }
-            }
-        }
-        public get text():string {
-            return this._text;
-        }
-        
-        /**
-        * A string that is to be added in-front of the score. Can contain HTMLElements.
-        * @property _prefix
-        * @type string
-        * @default &#x27;&#x27;
-        * @private
-        */
-        private _prefix: string = &#x27;&#x27;;
-
-        /**
-        * A string that is to be added after the score. Can contain HTMLElements.
-        * @property _suffix
-        * @type string
-        * @default &#x27;&#x27;
-        * @private
-        */
-        private _suffix: string = &#x27;&#x27;;
-
-        /**
-        * A string that is to be added after the score. Can contain HTMLElements.
-        * @property _suffix
-        * @type string
-        * @default &#x27;&#x27;
-        * @public
-        */
-        public set suffix(val: string) {
-            this._suffix = val;
-            this._updateText();
-        }
-        public get suffix(): string {
-            return this._suffix;
-        }
-
-        /**
-        * A string that is to be added in-front of the score. Can contain HTMLElements.
-        * @property _prefix
-        * @type string
-        * @default &#x27;&#x27;
-        * @public
-        */
-        public set prefix(val: string) {
-            this._prefix = val;
-            this._updateText();
-        }
-        public get prefix(): string {
-            return this._prefix;
-        }
-
-        /**
-        * This method is intended to be overriden by subclasses which functions update the text being displayed.
-        * @method _updateText
-        * @protected
-        */
-        public _updateText() {
-            //..your code here
-            this.text = this._text;
-        }
-
-    }
+	/**
+	* A Widget that is used for the displaying of text on the HUD. 
+	* Foreach TextField you can add some prefix/suffix text, which is more useful on classes extending this one.
+	*
+	* @class TextField
+	* @extends Kiwi.HUD.HUDWidget
+	* @namespace Kiwi.HUD.Widget
+	* @constructor
+	* @param game {Kiwi.Game} The game that this textfield belongs to.
+	* @param text {string} The text on this textfield.
+	* @param x {number} The x coordinates
+	* @param y {number} The y coordinates
+	* @return {Kiwi.HUD.Widget.TextField} 
+	*/
+	export class TextField extends Kiwi.HUD.HUDWidget {
+		
+		constructor(game:Kiwi.Game,text:string,x:number,y:number) {
+			super(game, &quot;textField&quot;, x, y);
+
+			this.class = &#x27;kiwi-textfield-widget kiwi-widget&#x27;;
+
+			if (this._manager.supported) {
+				if (this._device === Kiwi.TARGET_BROWSER) {
+					this._textField = this.container;
+					this._textField.innerHTML = text;
+				}
+			}
+		}
+
+		/**
+		* Returns the type of object that this is.
+		* @method objType
+		* @return {String} &#x27;TextFieldWidget&#x27;
+		* @public
+		*/
+		public objType(): string {
+			return &#x27;TextFieldWidget&#x27;;
+		}
+
+		/**
+		* The text current being displayed inside this textfield.
+		* @property _text
+		* @type string
+		* @private
+		*/
+		private _text: string;
+
+		/**
+		* The htmlelement that is being used as the textfield.
+		* Initially when created this is the same as the container HTMLDivElement.
+		* @property _textField
+		* @type HTMLElement
+		* @private
+		*/
+		private _textField: HTMLElement;
+		
+		/**
+		* This method is used to remove existing DOM elements and place them inside a HUDWidget&#x27;s container element.
+		* Useful so that when making HUD Widgets the developer can style HUDWidgets without having to create/write to much javascript.
+		* 
+		* Currently doesn&#x27;t have great support.
+		*
+		* @method setTemplate
+		* @param main {string} ID of an HTMLElement. This element should contain all of the elements you would like to place inside the HUDWidget. 
+		* @param icon {string} ID of an HTMLElement that resides inside of the main param. This is the element that the HUDWidget can use to populate with information. E.g. Your score, health remaining, the icon, e.t.c.
+		* @public
+		*/
+		public setTemplate(main: string, field?: string) {
+			if (this._device === Kiwi.TARGET_BROWSER) {
+				this._textField.innerText = &#x27;&#x27;;
+				super.setTemplate(main, field);
+
+				if (this.tempElement !== undefined) {
+					this._textField = this.tempElement;
+				}
+				this._textField.innerHTML = this._text;
+			}
+		}
+
+		/**
+		* Used to remove any the template HTML from this HUDWidget.
+		* Currently doesn&#x27;t have great support.
+		*
+		* @method removeTemplate
+		* @public
+		*/
+		public removeTemplate() {
+			if (this._device === Kiwi.TARGET_BROWSER) {
+				super.removeTemplate();
+
+				if (this._device === Kiwi.TARGET_BROWSER) {
+					this._textField = this.container;
+					this._textField.innerHTML = this._text;
+				}
+			}
+		}
+
+		/**
+		* The text that is currently being displayed inside the textfield.
+		* @property text
+		* @type string
+		* @public
+		*/
+		public set text(val: string) {
+			if (this._manager.supported) {
+				if (this._device === Kiwi.TARGET_BROWSER) {
+
+					if (this._prefix !== &#x27;&#x27;) val = this._prefix + val;
+					if (this._suffix !== &#x27;&#x27;) val += this._suffix;
+
+					this._text = val;
+					this._textField.innerHTML = this._text;
+				}
+			}
+		}
+		public get text():string {
+			return this._text;
+		}
+
+		/**
+		* A string that is to be added in-front of the score. Can contain HTMLElements.
+		* @property _prefix
+		* @type string
+		* @default &#x27;&#x27;
+		* @private
+		*/
+		private _prefix: string = &#x27;&#x27;;
+
+		/**
+		* A string that is to be added after the score. Can contain HTMLElements.
+		* @property _suffix
+		* @type string
+		* @default &#x27;&#x27;
+		* @private
+		*/
+		private _suffix: string = &#x27;&#x27;;
+
+		/**
+		* A string that is to be added after the score. Can contain HTMLElements.
+		* @property _suffix
+		* @type string
+		* @default &#x27;&#x27;
+		* @public
+		*/
+		public set suffix(val: string) {
+			this._suffix = val;
+			this._updateText();
+		}
+		public get suffix(): string {
+			return this._suffix;
+		}
+
+		/**
+		* A string that is to be added in-front of the score. Can contain HTMLElements.
+		* @property _prefix
+		* @type string
+		* @default &#x27;&#x27;
+		* @public
+		*/
+		public set prefix(val: string) {
+			this._prefix = val;
+			this._updateText();
+		}
+		public get prefix(): string {
+			return this._prefix;
+		}
+
+		/**
+		* This method is intended to be overriden by subclasses which functions update the text being displayed.
+		* @method _updateText
+		* @protected
+		*/
+		public _updateText() {
+			//..your code here
+			this.text = this._text;
+		}
+
+	}
 
 }
 
diff --git a/docs/files/src_hud_widgets_Time.ts.html b/docs/files/src_hud_widgets_Time.ts.html
index b51115b..a28f013 100644
--- a/docs/files/src_hud_widgets_Time.ts.html
+++ b/docs/files/src_hud_widgets_Time.ts.html
@@ -374,102 +374,103 @@ <h1 class="file-heading">File: src/hud/widgets/Time.ts</h1>
 * TO DO---- SIGNALS/CALLBACKS
 */
 module Kiwi.HUD.Widget {
-    
-    /**
-    * A subclass of TextField which manages the displaying of a Time/Timer by creating a new clock on the Time Manager.
-    * The time is managed by a Time Component which contains a format property that handles how the time should be formatted.
-    * 
-    * @class Time
-    * @extends Kiwi.HUD.Widget.TextField
-    * @namespace Kiwi.HUD.Widget
-    * @constructor
-    * @param game {Kiwi.Game} The game that this object belongs to.
-    * @param format {string} The format that you want the time to be displayed in. Leave it empty to display as normal.
-    * @param x {number} The position of this text on the field.
-    * @param y {number} The position of this text on the field.
-    * @return {Kiwi.HUD.Widget.Time}
-    */
-    export class Time extends Kiwi.HUD.Widget.TextField {
-        
-        constructor(game:Kiwi.Game,format:string,x:number,y:number) {
-            super(game, &#x27;time&#x27;, x, y);
-            this.name = &#x27;time&#x27;;
-            this.class = &#x27;kiwi-time-widget kiwi-widget&#x27;;
-            this.time = this.components.add(new Kiwi.HUD.HUDComponents.Time(this, format) );
-        }
 
-        /**
-        * Holds the time component which manages the counting/formating of the time.
-        *
-        * @property time
-        * @type Kiwi.HUD.HUDComponents.Time
-        * @public
-        */
-        public time: Kiwi.HUD.HUDComponents.Time;
+	/**
+	* A subclass of TextField which manages the displaying of a Time/Timer by creating a new clock on the Time Manager.
+	* The time is managed by a Time Component which contains a format property that handles how the time should be formatted.
+	* 
+	* @class Time
+	* @extends Kiwi.HUD.Widget.TextField
+	* @namespace Kiwi.HUD.Widget
+	* @constructor
+	* @param game {Kiwi.Game} The game that this object belongs to.
+	* @param format {string} The format that you want the time to be displayed in. Leave it empty to display as normal.
+	* @param x {number} The position of this text on the field.
+	* @param y {number} The position of this text on the field.
+	* @return {Kiwi.HUD.Widget.Time}
+	*/
+	export class Time extends Kiwi.HUD.Widget.TextField {
+		
+		constructor(game:Kiwi.Game,format:string,x:number,y:number) {
+			super(game, &#x27;time&#x27;, x, y);
+			this.name = &#x27;time&#x27;;
+			this.class = &#x27;kiwi-time-widget kiwi-widget&#x27;;
+			this.time = this.components.add(new Kiwi.HUD.HUDComponents.Time(this, format) );
+		}
 
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} &#x27;TimeWidget&#x27;
-        * @public
-        */
-        public objType(): string {
-            return &#x27;TimeWidget&#x27;;
-        }
-        
-        /**
-        * Pauses the clock where is stands. Calls the pause method on the clock.
-        * @method pause
-        * @public
-        */
-        public pause() {
-            this.time.pause();
-        }
+		/**
+		* Holds the time component which manages the counting/formating of the time.
+		*
+		* @property time
+		* @type Kiwi.HUD.HUDComponents.Time
+		* @public
+		*/
+		public time: Kiwi.HUD.HUDComponents.Time;
 
-        /**
-        * Stops the clock and thus the time. Calls the stop method of the clock.
-        * @method stop
-        * @public
-        */
-        public stop() {
-            this.time.stop();
-        }
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} &#x27;TimeWidget&#x27;
+		* @public
+		*/
+		public objType(): string {
+			return &#x27;TimeWidget&#x27;;
+		}
+		
+		/**
+		* Pauses the clock where is stands. Calls the pause method on the clock.
+		* @method pause
+		* @public
+		*/
+		public pause() {
+			this.time.pause();
+		}
 
-        /**
-        * Starts the clock and thus the time. 
-        * @method start
-        * @public
-        */
-        public start() {
-            this.time.start();
-        }
+		/**
+		* Stops the clock and thus the time. Calls the stop method of the clock.
+		* @method stop
+		* @public
+		*/
+		public stop() {
+			this.time.stop();
+		}
 
-        /**
-        * Resumes the clock and thus the time.
-        * @method resume
-        * @public
-        */
-        public resume() {
-            this.time.resume();
-        }
+		/**
+		* Starts the clock and thus the time. 
+		* @method start
+		* @public
+		*/
+		public start() {
+			this.time.start();
+		}
 
-        /**
-        * The update loop.
-        * @method update
-        * @public
-        */
-        public update() {
-            super.update();
+		/**
+		* Resumes the clock and thus the time.
+		* @method resume
+		* @public
+		*/
+		public resume() {
+			this.time.resume();
+		}
 
-            //update the time
-            if(this.time.isRunning) {
-                this.text = this.time.getTime();
-            }
-        }
+		/**
+		* The update loop.
+		* @method update
+		* @public
+		*/
+		public update() {
+			super.update();
 
-    }
+			//update the time
+			if(this.time.isRunning) {
+				this.text = this.time.getTime();
+			}
+		}
+
+	}
 
 }
+
     </pre>
 </div>
 
diff --git a/docs/files/src_input_Finger.ts.html b/docs/files/src_input_Finger.ts.html
index 19a824e..a783a85 100644
--- a/docs/files/src_input_Finger.ts.html
+++ b/docs/files/src_input_Finger.ts.html
@@ -369,81 +369,81 @@ <h1 class="file-heading">File: src/input/Finger.ts</h1>
 * @module Kiwi
 * @submodule Input
 * 
-*/ 
- 
+*/
+
 module Kiwi.Input {
 
-    /**
-    * Used with the Touch manager class, this object holds information about a
-    * single touch point/location (or, you know, a finger). By default a Finger
-    * has a diameter of 44 pixels (random average size of a finger) which can
-    * be used for collision/overlap detection. That value can be modified.
-    * Note: A Finger is only active whilst the user is &#x27;pressing&#x27; down on stage. 
-    *
-    * @class Finger
-    * @extends Pointer
-    * @namespace Kiwi.Input
-    * @constructor
-    * @param game {Kiwi.Game} The game that this finger belongs to.
-    * @return Finger
-    */
-    export class Finger extends Pointer {
-        
-        constructor(game: Kiwi.Game) {
-            super(game);
-            this.circle.diameter = 44; //The diameter of your average finger!
-        }
+	/**
+	* Used with the Touch manager class, this object holds information about a
+	* single touch point/location (or, you know, a finger). By default a Finger
+	* has a diameter of 44 pixels (random average size of a finger) which can
+	* be used for collision/overlap detection. That value can be modified.
+	* Note: A Finger is only active whilst the user is &#x27;pressing&#x27; down on stage. 
+	*
+	* @class Finger
+	* @extends Pointer
+	* @namespace Kiwi.Input
+	* @constructor
+	* @param game {Kiwi.Game} The game that this finger belongs to.
+	* @return Finger
+	*/
+	export class Finger extends Pointer {
+
+		constructor(game: Kiwi.Game) {
+			super(game);
+			this.circle.diameter = 44; //The diameter of your average finger!
+		}
 
-        /**
-        * The type of object this is. 
-        * @method objType
-        * @return {string} &quot;Finger&quot;
-        * @public
-        */
-        public objType(): string {
-            return &quot;Finger&quot;;
-        }
+		/**
+		* The type of object this is. 
+		* @method objType
+		* @return {string} &quot;Finger&quot;
+		* @public
+		*/
+		public objType(): string {
+			return &quot;Finger&quot;;
+		}
 
-        /** 
-        * @method start
-        * @param {Any} event
-        * @public
-        */
-        public start(event) {
-            this.active = true;
-            super.start(event);
-        }
+		/** 
+		* @method start
+		* @param {Any} event
+		* @public
+		*/
+		public start(event) {
+			this.active = true;
+			super.start(event);
+		}
 
-        /**
-        * @method stop
-        * @param event {Any}
-        * @public
-        */
-        public stop(event) {
-            this.active = false;
-            super.stop(event);
-        }
+		/**
+		* @method stop
+		* @param event {Any}
+		* @public
+		*/
+		public stop(event) {
+			this.active = false;
+			super.stop(event);
+		}
 
-        /** 
-        * @method leave
-        * @param event {Any} 
-        * @public
-        */
-        public leave(event) {
-            this.withinGame = false;
-            this.move(event);
-        }
+		/** 
+		* @method leave
+		* @param event {Any} 
+		* @public
+		*/
+		public leave(event) {
+			this.withinGame = false;
+			this.move(event);
+		}
 
-        /**
-        * @method reset
-        * @public
-        */
-        public reset() {
-            this.active = false;
-            super.reset();
-        }
+		/**
+		* @method reset
+		* @public
+		*/
+		public reset() {
+			this.active = false;
+			super.reset();
+		}
 
-    }
+	}
 
 }
 
diff --git a/docs/files/src_input_InputManager.ts.html b/docs/files/src_input_InputManager.ts.html
index bb3468a..a61567b 100644
--- a/docs/files/src_input_InputManager.ts.html
+++ b/docs/files/src_input_InputManager.ts.html
@@ -370,267 +370,268 @@ <h1 class="file-heading">File: src/input/InputManager.ts</h1>
 * @module Kiwi
 * @submodule Input
 * @main Input
-*/ 
+*/
 
 module Kiwi.Input {
 
-    /**
-    * Handles the initialization and management of the various ways a user can interact with the device/game,
-    * whether this is through a Keyboard and Mouse or by a Touch. Also contains some of the general callbacks that are &#x27;global&#x27; between both Desktop and Mobile based devices.
-    * 
-    * @class InputManager
-    * @constructor
-    * @namespace Kiwi.Input
-    * @param game {Kiwi.Game} The game that this object belongs to.
-    * @return {Kiwi.Input.InputManager} This object.
-    *
-    */
-    export class InputManager {
-         
-        constructor (game: Kiwi.Game) {
-            this.game = game;
-
-        }
-
-        /**
-        * The type of object this is.
-        * @method objType
-        * @return {String} &quot;InputManager&quot;
-        * @public
-        */
-        public objType() {
-            return &quot;InputManager&quot;;
-        }
-
-        /**
-        * A Signal that dispatches a event when any Pointer is pressed from the game.
-        * @property onDown
-        * @type Signal
-        * @public
-        */
-        public onDown: Kiwi.Signal;
-        
-        /**
-        * A Signal that dispatches a event when any Pointer is released from the game.
-        * @property onUp
-        * @type Signal
-        * @public
-        */
-        public onUp: Kiwi.Signal;
-
-        /** 
-        * The game that this manager belongs to.
-        * @property game
-        * @type Game
-        * @public
-        */
-        public game: Kiwi.Game;
-
-        /** 
-        * A reference to the mouse manager.
-        * @property mouse
-        * @type Mouse
-        * @public
-        */
-        public mouse:Kiwi.Input.Mouse;
-
-        /** 
-        * The keyboard manager
-        * @property keyboard
-        * @type Keyboard
-        * @public
-        */
-        public keyboard:Kiwi.Input.Keyboard;
-
-        /** 
-        * The touch manager.
-        * @property touch
-        * @type Touch
-        * @public
-        */
-        public touch:Kiwi.Input.Touch;
-        
-        /**
-        * An array containing all of the pointers that are active on the stage.
-        * @property _pointers
-        * @type Array
-        * @private
-        */
-        private _pointers: Kiwi.Input.Pointer[];
-
-
-        /**
-        * Returns all of the pointers that can be used on the Input Manager. This is READ only.
-        * @property pointers
-        * @type Array
-        * @public
-        */
-        public get pointers(): Kiwi.Input.Pointer[] {
-            return this._pointers;
-        }
-
-        /** 
-        * This method is executed when the DOM has loaded and the manager is ready to load.
-        * @method boot 
-        * @public
-        */
-        public boot() {
-            this._pointers = [];
-
-            this.mouse = new Kiwi.Input.Mouse(this.game);
-            this.mouse.boot();
-
-            this.keyboard = new Kiwi.Input.Keyboard(this.game);
-            this.keyboard.boot();
-
-            this.touch = new Kiwi.Input.Touch(this.game);
-            this.touch.boot();
-
-            this.mouse.onDown.add(this._onDownEvent, this);
-            this.mouse.onUp.add(this._onUpEvent, this);
-
-            this.touch.touchDown.add(this._onDownEvent, this);
-            this.touch.touchUp.add(this._onUpEvent, this);
-
-            /*
-            * Add the fingers/cursors to the list of &#x27;pointers&#x27;
-            */
-            this._pointers = this.touch.fingers.slice();
-            this._pointers.push(this.mouse.cursor);
-
-
-            this.isDown = false;
-            this.position = new Kiwi.Geom.Point();
-             
-            this.onDown = new Kiwi.Signal();
-            this.onUp = new Kiwi.Signal();
-        }
-
-        /**
-        * A private method that gets dispatched when either the mouse or touch manager dispatches a down event
-        * @method _onDownEvent
-        * @param x {Number} The x coordinate of the pointer
-        * @param y {Number} The y coordinate of the pointer
-        * @param timeDown {Number} The time that the pointer has been down for.
-        * @param timeUp {Number} The Time that the pointer has been up form
-        * @param duration {Number} 
-        * @param pointer {Kiwi.Input.Pointer} The pointer that was used.
-        * @private
-        */
-        private _onDownEvent(x, y, timeDown, timeUp, duration, pointer) {
-            this.onDown.dispatch(x, y, timeDown, timeUp, duration, pointer);
-        }
-
-        
-        /**
-        * A private method that gets dispatched when either the mouse or touch manager dispatches a up event
-        * @method _onUpEvent
-        * @param x {Number} The x coordinate of the pointer
-        * @param y {Number} The y coordinate of the pointer
-        * @param timeDown {Number} The time that the pointer has been down for.
-        * @param timeUp {Number} The Time that the pointer has been up form
-        * @param duration {Number} 
-        * @param pointer {Kiwi.Input.Pointer} The pointer that was used.
-        * @private
-        */
-        private _onUpEvent(x, y, timeDown, timeUp, duration, pointer) {
-            this.onUp.dispatch(x, y, timeDown, timeUp, duration, pointer);
-        }
-
-        /*
-        * An alias for the onPress signal that goes straight to the onDown.
-        * @property onPressed
-        * @type Signal
-        * @public
-        */
-        public get onPressed(): Kiwi.Signal {
-            return this.onDown;
-        }
-        
-        /**
-        * An alias for the onRelease signal that goes straight to the onUp
-        * @property onReleased
-        * @type Signal
-        * @public
-        */
-        public get onReleased(): Kiwi.Signal {
-            return this.onUp;
-        }
-
-        /** 
-        * The update loop that gets executed every frame.
-        * @method update 
-        * @public
-        */
-        public update() {
-            this.mouse.update();
-            this.keyboard.update();
-            this.touch.update();
-
-            if (this.touch.touchEnabled) {
-                this.position.setTo(this.touch.x, this.touch.y);
-
-            } else {
-                this.position.setTo(this.mouse.x, this.mouse.y);
-
-            }
-
-            this.isDown = this.mouse.isDown || this.touch.isDown;
-
-        }
-
-        /** 
-        * Runs the reset method on the managers.
-        * @method reset
-        */
-        public reset() {
-            this.mouse.reset();
-            this.keyboard.reset();
-            this.touch.reset();
-
-        }
-        
-        /**
-        * The position of the last pointer that was/is active on the stage.
-        * @property position
-        * @type Kiwi.Geom.Point
-        * @public
-        */
-        public position: Kiwi.Geom.Point;
-
-        /**
-        * If an input (either touch or the mouse cursor) is currently down. Not an accurate representation, should use the individual managers.
-        * @property isDown
-        * @type boolean
-        * @public
-        */
-        public isDown: boolean;
+	/**
+	* Handles the initialization and management of the various ways a user can interact with the device/game,
+	* whether this is through a Keyboard and Mouse or by a Touch. Also contains some of the general callbacks that are &#x27;global&#x27; between both Desktop and Mobile based devices.
+	* 
+	* @class InputManager
+	* @constructor
+	* @namespace Kiwi.Input
+	* @param game {Kiwi.Game} The game that this object belongs to.
+	* @return {Kiwi.Input.InputManager} This object.
+	*
+	*/
+	export class InputManager {
+
+		constructor (game: Kiwi.Game) {
+			this.game = game;
+
+		}
+
+		/**
+		* The type of object this is.
+		* @method objType
+		* @return {String} &quot;InputManager&quot;
+		* @public
+		*/
+		public objType() {
+			return &quot;InputManager&quot;;
+		}
+
+		/**
+		* A Signal that dispatches a event when any Pointer is pressed from the game.
+		* @property onDown
+		* @type Signal
+		* @public
+		*/
+		public onDown: Kiwi.Signal;
+
+		/**
+		* A Signal that dispatches a event when any Pointer is released from the game.
+		* @property onUp
+		* @type Signal
+		* @public
+		*/
+		public onUp: Kiwi.Signal;
+
+		/** 
+		* The game that this manager belongs to.
+		* @property game
+		* @type Game
+		* @public
+		*/
+		public game: Kiwi.Game;
+
+		/** 
+		* A reference to the mouse manager.
+		* @property mouse
+		* @type Mouse
+		* @public
+		*/
+		public mouse:Kiwi.Input.Mouse;
+
+		/** 
+		* The keyboard manager
+		* @property keyboard
+		* @type Keyboard
+		* @public
+		*/
+		public keyboard:Kiwi.Input.Keyboard;
+
+		/** 
+		* The touch manager.
+		* @property touch
+		* @type Touch
+		* @public
+		*/
+		public touch:Kiwi.Input.Touch;
+
+		/**
+		* An array containing all of the pointers that are active on the stage.
+		* @property _pointers
+		* @type Array
+		* @private
+		*/
+		private _pointers: Kiwi.Input.Pointer[];
+
+
+		/**
+		* Returns all of the pointers that can be used on the Input Manager. This is READ only.
+		* @property pointers
+		* @type Array
+		* @public
+		*/
+		public get pointers(): Kiwi.Input.Pointer[] {
+			return this._pointers;
+		}
+
+		/** 
+		* This method is executed when the DOM has loaded and the manager is ready to load.
+		* @method boot 
+		* @public
+		*/
+		public boot() {
+			this._pointers = [];
+
+			this.mouse = new Kiwi.Input.Mouse(this.game);
+			this.mouse.boot();
+
+			this.keyboard = new Kiwi.Input.Keyboard(this.game);
+			this.keyboard.boot();
+
+			this.touch = new Kiwi.Input.Touch(this.game);
+			this.touch.boot();
+
+			this.mouse.onDown.add(this._onDownEvent, this);
+			this.mouse.onUp.add(this._onUpEvent, this);
+
+			this.touch.touchDown.add(this._onDownEvent, this);
+			this.touch.touchUp.add(this._onUpEvent, this);
+
+			/*
+			* Add the fingers/cursors to the list of &#x27;pointers&#x27;
+			*/
+			this._pointers = this.touch.fingers.slice();
+			this._pointers.push(this.mouse.cursor);
+
+
+			this.isDown = false;
+			this.position = new Kiwi.Geom.Point();
+			 
+			this.onDown = new Kiwi.Signal();
+			this.onUp = new Kiwi.Signal();
+		}
+
+		/**
+		* A private method that gets dispatched when either the mouse or touch manager dispatches a down event
+		* @method _onDownEvent
+		* @param x {Number} The x coordinate of the pointer
+		* @param y {Number} The y coordinate of the pointer
+		* @param timeDown {Number} The time that the pointer has been down for.
+		* @param timeUp {Number} The Time that the pointer has been up form
+		* @param duration {Number} 
+		* @param pointer {Kiwi.Input.Pointer} The pointer that was used.
+		* @private
+		*/
+		private _onDownEvent(x, y, timeDown, timeUp, duration, pointer) {
+			this.onDown.dispatch(x, y, timeDown, timeUp, duration, pointer);
+		}
+
+
+		/**
+		* A private method that gets dispatched when either the mouse or touch manager dispatches a up event
+		* @method _onUpEvent
+		* @param x {Number} The x coordinate of the pointer
+		* @param y {Number} The y coordinate of the pointer
+		* @param timeDown {Number} The time that the pointer has been down for.
+		* @param timeUp {Number} The Time that the pointer has been up form
+		* @param duration {Number} 
+		* @param pointer {Kiwi.Input.Pointer} The pointer that was used.
+		* @private
+		*/
+		private _onUpEvent(x, y, timeDown, timeUp, duration, pointer) {
+			this.onUp.dispatch(x, y, timeDown, timeUp, duration, pointer);
+		}
+
+		/*
+		* An alias for the onPress signal that goes straight to the onDown.
+		* @property onPressed
+		* @type Signal
+		* @public
+		*/
+		public get onPressed(): Kiwi.Signal {
+			return this.onDown;
+		}
+
+		/**
+		* An alias for the onRelease signal that goes straight to the onUp
+		* @property onReleased
+		* @type Signal
+		* @public
+		*/
+		public get onReleased(): Kiwi.Signal {
+			return this.onUp;
+		}
+
+		/** 
+		* The update loop that gets executed every frame.
+		* @method update 
+		* @public
+		*/
+		public update() {
+			this.mouse.update();
+			this.keyboard.update();
+			this.touch.update();
+
+			if (this.touch.touchEnabled) {
+				this.position.setTo(this.touch.x, this.touch.y);
+
+			} else {
+				this.position.setTo(this.mouse.x, this.mouse.y);
+
+			}
+
+			this.isDown = this.mouse.isDown || this.touch.isDown;
+
+		}
+
+		/** 
+		* Runs the reset method on the managers.
+		* @method reset
+		*/
+		public reset() {
+			this.mouse.reset();
+			this.keyboard.reset();
+			this.touch.reset();
+
+		}
+
+		/**
+		* The position of the last pointer that was/is active on the stage.
+		* @property position
+		* @type Kiwi.Geom.Point
+		* @public
+		*/
+		public position: Kiwi.Geom.Point;
+
+		/**
+		* If an input (either touch or the mouse cursor) is currently down. Not an accurate representation, should use the individual managers.
+		* @property isDown
+		* @type boolean
+		* @public
+		*/
+		public isDown: boolean;
  
-        /**
-        * Populated x coordinate based on the most recent click/touch event
-        * @property x
-        * @type Number
-        * @public
-        */
-        public get x(): number {
-            return this.position.x;
-
-        }
-
-        /**
-        * Populated y coordinate based on the most recent click/touch event
-        * @property y
-        * @type Number
-        * @public
-        */
-        public get y(): number {
-            return this.position.y;
-
-        }
-
-    }
+		/**
+		* Populated x coordinate based on the most recent click/touch event
+		* @property x
+		* @type Number
+		* @public
+		*/
+		public get x(): number {
+			return this.position.x;
+
+		}
+
+		/**
+		* Populated y coordinate based on the most recent click/touch event
+		* @property y
+		* @type Number
+		* @public
+		*/
+		public get y(): number {
+			return this.position.y;
+
+		}
+
+	}
 
 }
+
     </pre>
 </div>
 
diff --git a/docs/files/src_input_Key.ts.html b/docs/files/src_input_Key.ts.html
index 3d88ed0..0728327 100644
--- a/docs/files/src_input_Key.ts.html
+++ b/docs/files/src_input_Key.ts.html
@@ -369,265 +369,266 @@ <h1 class="file-heading">File: src/input/Key.ts</h1>
 * @module Kiwi
 * @submodule Input
 * 
-*/ 
+*/
 
 module Kiwi.Input {
-    
-    /**
-    * A compact object that holds the most important details about a Keyboard Event response.
-    *
-    * @class Key
-    * @constructor
-    * @namespace Kiwi.Input
-    * @param manager {Kiwi.Input.Keyboard} The keyboard manager that this key belongs to. 
-    * @param keycode {Number} The keycode that this key is. 
-    * @param [event] {KeyboardEvent} The keyboard event (if there was one) when this was created.
-    * @return {Kiwi.Input.Key} This object.
-    *
-    */
-    export class Key {
-
-        constructor (manager: Kiwi.Input.Keyboard, keycode: number, event?: KeyboardEvent) {
-
-            this._manager = manager;
-            this.game = this._manager.game;
-            this.keyCode = keycode;
-
-            if (event) {
-                this.update(event);
-            }
-
-        }
-
-        /**
-        * If the default action for this Key should be prevented or not. 
-        * For example. If your game use&#x27;s the spacebar you would want its default action (which is to make the website scrolldown) prevented, 
-        * So you can set this to true.
-        * @property preventDefault
-        * @type Boolean
-        * @default false
-        * @public
-        */
-        public preventDefault: boolean = false;
-
-        /**
-        * The game that this key belongs to.
-        * @property game
-        * @type Kiwi.Game
-        * @public
-        */
-        public game: Kiwi.Game;
-
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} &quot;Key&quot;
-        * @public
-        */
-        public objType() {
-            return &quot;Key&quot;;
-        }
-
-        /** 
-        * The keyboard manager that this key belongs to.
-        * @property _manager
-        * @type Kiwi.Input.Keyboard
-        * @private
-        */
-        private _manager: Kiwi.Input.Keyboard;
-
-        /** 
-        * The keycode that this key is.
-        * @property keyCode
-        * @type Number
-        * @public
-        */
-        public keyCode: number;
-
-        /** 
-        * Indicated whether or not the key is currently down.
-        * @property isDown
-        * @type boolean
-        * @default false
-        * @public
-        */
-        public isDown: boolean = false;
-
-        /** 
-        * Indicates whether or not the key is currently up.
-        * @property isUp
-        * @type boolean
-        * @default true
-        * @public 
-        */
-        public isUp: boolean = true;
-
-        /** 
-        * If the alt key was held at the time of the event happening.
-        * @property altKey
-        * @type boolean
-        * @default false
-        * @public 
-        */
-        public altKey: boolean = false;
-
-        /** 
-        * If the ctrl key was held at the time of the event happening.
-        * @property ctrlKey
-        * @type boolean
-        * @default false
-        * @public
-        */
-        public ctrlKey: boolean = false;
-
-        /** 
-        * If the shift key was held at the time of the event happening.
-        * @property shiftKey
-        * @type boolean
-        * @default false
-        * @public
-        */
-        public shiftKey: boolean = false;
-
-        /** 
-        * The time that the key was pressed initially.
-        * @property timeDown
-        * @type Number
-        * @default 0
-        * @public
-        */
-        public timeDown: number = 0;
-
-        /** 
-        * The duration (in milliseconds) that the key has been down for.
-        * This is property is READ ONLY.
-        * @property duration
-        * @type Number
-        * @default 0
-        * @public
-        */
-        public get duration(): number {
-
-            //If the key is down when the dev is getting the duration, then update the duration.
-            if (this.isDown) {
-                this.timeDown = this.game.time.now();
-            }
-
-            return (this.timeDown &lt; this.timeUp) ? 0 : this.timeDown - this.timeUp;
-        }
-
-        /** 
-        * The time at which the key was released. 
-        * @property timeUp
-        * @type Number
-        * @default 0
-        * @public
-        */
-        public timeUp: number = 0;
-
-        /** 
-        * If this key is being &#x27;held&#x27; down, this property will indicate the amount of times the &#x27;onkeydown&#x27; event has fired.
-        * This is reset each time the key is pressed.
-        * @property repeats
-        * @type Number
-        * @default 0
-        * @public
-        */
-        public repeats: number = 0;
-
-        /** 
-        * The &#x27;update&#x27; method fires when an event occur&#x27;s. Updates the keys properties
-        * @method update
-        * @param event {KeyboardEvent} 
-        * @public
-        */
-        public update(event: KeyboardEvent) {
-
-            this.keyCode = event.keyCode;
-
-            //Are we needing to prevent the default action?
-            if (this.preventDefault) event.preventDefault();
-
-            if (event.type === &#x27;keydown&#x27;) {
-                this.altKey = event.altKey;
-                this.ctrlKey = event.ctrlKey;
-                this.shiftKey = event.shiftKey;
-
-                if (this.isDown === true) {
-                    // Key was already held down, this must be a repeat rate based event
-                    this.repeats++;
-                    this.timeDown = this.game.time.now();
-                } else {
-                    this.isDown = true;
-                    this.isUp = false;
-                    this.timeDown = this.game.time.now();
-                    this.repeats = 0;
-                }
-
-            } else if (event.type === &#x27;keyup&#x27;) {
-                this.isDown = false;
-                this.isUp = true;
-                this.timeUp = this.game.time.now();
-
-            }
-
-        }
-
-        /** 
-        * Returns a boolean indicating whether or not this key was just pressed.
-        * @method justPressed
-        * @param [duration] {Number} The duration at which determines if a key was just pressed. Defaults to the managers just pressed rate.
-        * @return {boolean} 
-        * @public
-        */
-        public justPressed(duration: number = this._manager.justPressedRate): boolean {
-
-            if (this.isDown === true &amp;&amp; (this.timeDown + duration) &gt; this.game.time.now()) {
-                return true;
-            } else {
-                return false;
-            }
-
-        }
-
-        /** 
-        * Returns a boolean indicating whether or not this key was just released.
-        * @method justReleased
-        * @param [duration] {Number} The duration at which determines if a key was just released. Defaults to the managers just pressed rate.
-        * @return {boolean} 
-        * @public
-        */
-        public justReleased(duration: number = this._manager.justReleasedRate): boolean {
-
-            if (this.isUp === true &amp;&amp; (this.timeUp + duration) &gt; this.game.time.now()) {
-                return true;
-            }
-            else
-            {
-                return false;
-            }
-
-        }
-
-        /**
-        * Resets all of the properties on the Key to their default values. 
-        * @method reset
-        * @public
-        */
-        public reset() {
-            this.isDown = false;
-            this.isUp = true;
-            this.timeUp = 0;
-            this.timeDown = 0;
-            this.repeats = 0;
-            this.altKey = false;
-            this.shiftKey = false;
-            this.ctrlKey = false;
-        }
-
-    }
+	
+	/**
+	* A compact object that holds the most important details about a Keyboard Event response.
+	*
+	* @class Key
+	* @constructor
+	* @namespace Kiwi.Input
+	* @param manager {Kiwi.Input.Keyboard} The keyboard manager that this key belongs to. 
+	* @param keycode {Number} The keycode that this key is. 
+	* @param [event] {KeyboardEvent} The keyboard event (if there was one) when this was created.
+	* @return {Kiwi.Input.Key} This object.
+	*
+	*/
+	export class Key {
+
+		constructor (manager: Kiwi.Input.Keyboard, keycode: number, event?: KeyboardEvent) {
+
+			this._manager = manager;
+			this.game = this._manager.game;
+			this.keyCode = keycode;
+
+			if (event) {
+				this.update(event);
+			}
+
+		}
+
+		/**
+		* If the default action for this Key should be prevented or not. 
+		* For example. If your game use&#x27;s the spacebar you would want its default action (which is to make the website scrolldown) prevented, 
+		* So you can set this to true.
+		* @property preventDefault
+		* @type Boolean
+		* @default false
+		* @public
+		*/
+		public preventDefault: boolean = false;
+
+		/**
+		* The game that this key belongs to.
+		* @property game
+		* @type Kiwi.Game
+		* @public
+		*/
+		public game: Kiwi.Game;
+
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} &quot;Key&quot;
+		* @public
+		*/
+		public objType() {
+			return &quot;Key&quot;;
+		}
+
+		/** 
+		* The keyboard manager that this key belongs to.
+		* @property _manager
+		* @type Kiwi.Input.Keyboard
+		* @private
+		*/
+		private _manager: Kiwi.Input.Keyboard;
+
+		/** 
+		* The keycode that this key is.
+		* @property keyCode
+		* @type Number
+		* @public
+		*/
+		public keyCode: number;
+
+		/** 
+		* Indicated whether or not the key is currently down.
+		* @property isDown
+		* @type boolean
+		* @default false
+		* @public
+		*/
+		public isDown: boolean = false;
+
+		/** 
+		* Indicates whether or not the key is currently up.
+		* @property isUp
+		* @type boolean
+		* @default true
+		* @public 
+		*/
+		public isUp: boolean = true;
+
+		/** 
+		* If the alt key was held at the time of the event happening.
+		* @property altKey
+		* @type boolean
+		* @default false
+		* @public 
+		*/
+		public altKey: boolean = false;
+
+		/** 
+		* If the ctrl key was held at the time of the event happening.
+		* @property ctrlKey
+		* @type boolean
+		* @default false
+		* @public
+		*/
+		public ctrlKey: boolean = false;
+
+		/** 
+		* If the shift key was held at the time of the event happening.
+		* @property shiftKey
+		* @type boolean
+		* @default false
+		* @public
+		*/
+		public shiftKey: boolean = false;
+
+		/** 
+		* The time that the key was pressed initially.
+		* @property timeDown
+		* @type Number
+		* @default 0
+		* @public
+		*/
+		public timeDown: number = 0;
+
+		/** 
+		* The duration (in milliseconds) that the key has been down for.
+		* This is property is READ ONLY.
+		* @property duration
+		* @type Number
+		* @default 0
+		* @public
+		*/
+		public get duration(): number {
+
+			//If the key is down when the dev is getting the duration, then update the duration.
+			if (this.isDown) {
+				this.timeDown = this.game.time.now();
+			}
+
+			return (this.timeDown &lt; this.timeUp) ? 0 : this.timeDown - this.timeUp;
+		}
+
+		/** 
+		* The time at which the key was released. 
+		* @property timeUp
+		* @type Number
+		* @default 0
+		* @public
+		*/
+		public timeUp: number = 0;
+
+		/** 
+		* If this key is being &#x27;held&#x27; down, this property will indicate the amount of times the &#x27;onkeydown&#x27; event has fired.
+		* This is reset each time the key is pressed.
+		* @property repeats
+		* @type Number
+		* @default 0
+		* @public
+		*/
+		public repeats: number = 0;
+
+		/** 
+		* The &#x27;update&#x27; method fires when an event occur&#x27;s. Updates the keys properties
+		* @method update
+		* @param event {KeyboardEvent} 
+		* @public
+		*/
+		public update(event: KeyboardEvent) {
+
+			this.keyCode = event.keyCode;
+
+			//Are we needing to prevent the default action?
+			if (this.preventDefault) event.preventDefault();
+
+			if (event.type === &#x27;keydown&#x27;) {
+				this.altKey = event.altKey;
+				this.ctrlKey = event.ctrlKey;
+				this.shiftKey = event.shiftKey;
+
+				if (this.isDown === true) {
+					// Key was already held down, this must be a repeat rate based event
+					this.repeats++;
+					this.timeDown = this.game.time.now();
+				} else {
+					this.isDown = true;
+					this.isUp = false;
+					this.timeDown = this.game.time.now();
+					this.repeats = 0;
+				}
+
+			} else if (event.type === &#x27;keyup&#x27;) {
+				this.isDown = false;
+				this.isUp = true;
+				this.timeUp = this.game.time.now();
+
+			}
+
+		}
+
+		/** 
+		* Returns a boolean indicating whether or not this key was just pressed.
+		* @method justPressed
+		* @param [duration] {Number} The duration at which determines if a key was just pressed. Defaults to the managers just pressed rate.
+		* @return {boolean} 
+		* @public
+		*/
+		public justPressed(duration: number = this._manager.justPressedRate): boolean {
+
+			if (this.isDown === true &amp;&amp; (this.timeDown + duration) &gt; this.game.time.now()) {
+				return true;
+			} else {
+				return false;
+			}
+
+		}
+
+		/** 
+		* Returns a boolean indicating whether or not this key was just released.
+		* @method justReleased
+		* @param [duration] {Number} The duration at which determines if a key was just released. Defaults to the managers just pressed rate.
+		* @return {boolean} 
+		* @public
+		*/
+		public justReleased(duration: number = this._manager.justReleasedRate): boolean {
+
+			if (this.isUp === true &amp;&amp; (this.timeUp + duration) &gt; this.game.time.now()) {
+				return true;
+			}
+			else
+			{
+				return false;
+			}
+
+		}
+
+		/**
+		* Resets all of the properties on the Key to their default values. 
+		* @method reset
+		* @public
+		*/
+		public reset() {
+			this.isDown = false;
+			this.isUp = true;
+			this.timeUp = 0;
+			this.timeDown = 0;
+			this.repeats = 0;
+			this.altKey = false;
+			this.shiftKey = false;
+			this.ctrlKey = false;
+		}
+
+	}
 
 }
+
     </pre>
 </div>
 
diff --git a/docs/files/src_input_Keyboard.ts.html b/docs/files/src_input_Keyboard.ts.html
index 17dd9fe..b958575 100644
--- a/docs/files/src_input_Keyboard.ts.html
+++ b/docs/files/src_input_Keyboard.ts.html
@@ -369,309 +369,309 @@ <h1 class="file-heading">File: src/input/Keyboard.ts</h1>
 * @module Kiwi
 * @submodule Input
 * 
-*/ 
+*/
 
 module Kiwi.Input {
-    
-    /**
-    * Handles and Manages the dispatching of keyboard events. When the user press&#x27;s a button a new Key object is created.
-    *
-    * @class Keyboard
-    * @constructor
-    * @namespace Kiwi.Input
-    * @param game {Kiwi.Game}
-    * @return {Kiwi.Input.Keyboard} This object.
-    *
-    */
-    export class Keyboard {
-         
-        constructor (game: Kiwi.Game) {
-
-            this.game = game;
-
-        }
-
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} &quot;Keyboard&quot;
-        * @public
-        */
-        public objType() {
-            return &quot;Keyboard&quot;;
-        }
-
-        /** 
-        * The game that this Keyboard belongs to.
-        * @property game
-        * @type Kiwi.Game
-        * @public
-        */
-        public game: Kiwi.Game;
-         
-        /** 
-        * Contains a reference to each Key object when they are either added to this Keyboard manager (by the developer), or when an event fires with that keycode.
-        * @property _keys
-        * @type Key[]
-        * @private
-        */
-        private _keys:Key[] = [];
-
-        /**
-        * Returns all of the Key objects that currently exist. This is READ ONLY.
-        * @property keys
-        * @type Keys[]
-        * @public
-        */
-        public get keys():Key[] {
-            return this._keys;
-        }
-
-        /** 
-        * The time in milliseconds which determines if a key was just pressed or not.
-        * @property justPressedRate
-        * @type Number
-        * @default 200
-        * @public
-        */
-        public justPressedRate: number = 200;
-        
-        /** 
-        * The time in milliseconds which determines if a key was just released or not.
-        * @property justReleasedRate
-        * @type Number
-        * @default 200
-        * @public
-        */
-        public justReleasedRate: number = 200;
-
-        /** 
-        * Is executed when the DOMElements that are need to get the game going are loaded and thus the game can &#x27;boot&#x27;
-        * @method boot
-        * @public
-        */
-        public boot() {
-            this.onKeyUp = new Kiwi.Signal;
-            this.onKeyDown = new Kiwi.Signal;
-            this.onKeyDownOnce = new Kiwi.Signal;
-            this.start();
-        }
-
-        /** 
-        * The update loop that is executed every frame.
-        * @method update
-        * @public
-        */
-        public update() {
-
-        }
-        
-        /**
-        * A Signal that dispatches events when a key is released/is now up.
-        * Callbacks fired by this Signal will contain two parameters, the keyCode and key object.
-        * 1) KeyCode - The keyCode of the key that was just released.
-        * 2) Key - The key object for that keycode.
-        * @property onKeyUp
-        * @type Kiwi.Signal
-        * @public
-        */
-        public onKeyUp: Kiwi.Signal;
-        
-        /**
-        * A Signal that dispatches events when a key is pressed/is down.
-        * This mimics the natural &#x27;keydown&#x27; event listener, so it will keep dispatching events if the user holds the key down. 
-        * Note: This fires after the &#x27;onKeyDownOnce&#x27; signal.
-        * Callbacks fired by this Signal will contain two parameters, the keyCode and key object.
-        * 1) KeyCode - The keyCode of the key that was just released.
-        * 2) Key - The key object for that keycode.
-        *
-        * @property onKeyDown
-        * @type Kiwi.Signal
-        * @public
-        */
-        public onKeyDown: Kiwi.Signal;
-
-        /**
-        * A Signal that dispatches events when a key is pressed/is down initially. 
-        * This event only fires the first time that the key is pressed, so it won&#x27;t dispatch events if the user is holding the key down.
-        * Note: This fires before the &#x27;onKeyDown&#x27; signal;
-        * Callbacks fired by this Signal will contain two parameters, the keyCode and key object.
-        * 1) KeyCode - The keyCode of the key that was just released.
-        * 2) Key - The key object for that keycode.
-        *
-        * @property onKeyDownOnce
-        * @type Kiwi.Signal
-        * @public
-        */
-        public onKeyDownOnce: Kiwi.Signal;
-
-        /** 
-        * Adds the event listeners to the browser to listen for key events.
-        * @method start
-        * @public 
-        */
-        public start() {
-            if (this.game.deviceTargetOption=== Kiwi.TARGET_BROWSER) {
-                //this._domElement.addEventListener(&#x27;keydown&#x27;, (event:KeyboardEvent) =&gt; this.onKeyDown(event), false);
-                //this._domElement.addEventListener(&#x27;keyup&#x27;, (event:KeyboardEvent) =&gt; this.onKeyUp(event), false);
-                document.body.addEventListener(&#x27;keydown&#x27;, (event: KeyboardEvent) =&gt; this._keyPressed(event), false);
-                document.body.addEventListener(&#x27;keyup&#x27;, (event: KeyboardEvent) =&gt; this._keyReleased(event), false);
-            }
-        }
-
-        /** 
-        * Removes the event listeners and so effectively &#x27;stops&#x27; all keyboard events.
-        * @method stop
-        * @public
-        */
-        public stop() {
-            if (this.game.deviceTargetOption === Kiwi.TARGET_BROWSER) {
-                //this._domElement.removeEventListener(&#x27;keydown&#x27;, (event:KeyboardEvent) =&gt; this.onKeyDown(event), false);
-                //this._domElement.removeEventListener(&#x27;keyup&#x27;, (event:KeyboardEvent) =&gt; this.onKeyUp(event), false);
-                document.body.removeEventListener(&#x27;keydown&#x27;, (event: KeyboardEvent) =&gt; this._keyPressed(event), false);
-                document.body.removeEventListener(&#x27;keyup&#x27;, (event: KeyboardEvent) =&gt; this._keyReleased(event), false);
-            }
-        }
-
-        /** 
-        * Is executed when a key is pressed/is down. This then either creates a new Key (if one does not currently exist) for that keycode, 
-        * or it updates the key that was pressed (if one does exist). 
-        * @method onKeyDown
-        * @param {KeyboardEvent} event.
-        * @private
-        */
-        private _keyPressed(event:KeyboardEvent) {
-
-            if (this._keys[event.keyCode]) {
-                this._keys[event.keyCode].update(event);
-
-            } else {
-                this._keys[event.keyCode] = new Kiwi.Input.Key(this, event.keyCode, event);
-
-            }
-
-            if (this._keys[event.keyCode].repeats == 0) this.onKeyDownOnce.dispatch(event.keyCode, this._keys[event.keyCode]);
-
-            this.onKeyDown.dispatch(event.keyCode, this._keys[event.keyCode]);
-        }
-
-        /** 
-        * Is executed when a key is release/is now up. This then either creates a new Key (if one does not currently exist) for that keycode, 
-        * or it updates the key that was released (if one does exist). 
-        * @method onKeyUp
-        * @param {KeyboardEvent} event.
-        * @private
-        */
-        private _keyReleased(event:KeyboardEvent) {
-
-            if (this._keys[event.keyCode]) {
-                this._keys[event.keyCode].update(event);
-
-            } else {
-                this._keys[event.keyCode] = new Kiwi.Input.Key(this, event.keyCode, event);
-
-            }
-            this.onKeyUp.dispatch(event.keyCode, this._keys[event.keyCode]);
-        }
-
-        /** 
-        * Creates a new Key object for a keycode that is specified.
-        * Not strictly needed (as one will be created once an event occurs on that keycode) but can be good for setting the game up
-        * and choosing whether to prevent that keys any default action.
-        * @method addKey
-        * @param keycode {Number} The keycode of the key that you want to add. 
-        * @param [preventDefault=false] {Boolean} If the default action for that key should be prevented or not when an event fires.
-        * @return {Kiwi.Input.Key}
-        * @public
-        */
-        public addKey(keycode: number, preventDefault:boolean = false): Key {
-
-            var key = new Kiwi.Input.Key(this, keycode);
-            key.preventDefault = preventDefault;
-
-            return this._keys[keycode] = key;
-
-        }
-
-        /** 
-        * Returns a boolean indicating if a key (that you pass via a keycode) was just pressed or not. 
-        * @method justPressed
-        * @param keycode {Number} The keycode of the key that you would like to check against.
-        * @param [duration=this.justPressedRate] {Number} The duration at which determines if a key was &#x27;just&#x27; pressed or not. If not specified defaults to the justPressedRate
-        * @public
-        */
-        public justPressed(keycode, duration:number=this.justPressedRate):boolean {
-
-            if (this._keys[keycode]) {
-                return this._keys[keycode].justPressed(duration);
-            } 
-
-            return false;
-        }
-
-        
-        /** 
-        * Returns a boolean indicating if a key (that you pass via a keycode) was just released or not. 
-        * @method justReleased
-        * @param keycode {Number} The keycode of the key that you would like to check against.
-        * @param [duration=this.justReleasedRate] {Number} The duration at which determines if a key was &#x27;just&#x27; released or not. If not specified defaults to the justReleasedRate
-        * @public
-        */
-        public justReleased(keycode, duration:number=this.justReleasedRate):boolean {
-
-            if (this._keys[keycode]) {
-                return this._keys[keycode].justReleased(duration);
-            }
-
-            return false;
-        }
-
-        /** 
-        * Returns a boolean indicating whether a key (that you pass via its keycode) is down or not.
-        * @method isDown
-        * @param keycode {Number} The keycode of the key that you are checking.
-        * @return {boolean}
-        * @public
-        */
-        public isDown(keycode: number): boolean {
-
-            if (this._keys[keycode]) {
-                return this._keys[keycode].isDown;
-            } else {
-                return false;
-            }
-
-        }
-
-        /** 
-        * Returns a boolean indicating whether a key (that you pass via its keycode) is up or not.
-        * @method isUp
-        * @param keycode {Number} The keycode of the key that you are checking.
-        * @return {boolean}
-        * @public
-        */
-        public isUp(keycode: number): boolean {
-
-            if (this._keys[keycode]) {
-                return this._keys[keycode].isUp;
-            } else {
-                return false;
-            }
-
-        }
-        
-        /**
-        * Executes the reset method on every Key that currently exists.
-        * @method reset
-        * @public
-        */
-        public reset() {
-            for (var index in this._keys) {
-                this._keys[index].reset();
-            }
-        }
-
-    }
+
+	/**
+	* Handles and Manages the dispatching of keyboard events. When the user press&#x27;s a button a new Key object is created.
+	*
+	* @class Keyboard
+	* @constructor
+	* @namespace Kiwi.Input
+	* @param game {Kiwi.Game}
+	* @return {Kiwi.Input.Keyboard} This object.
+	*
+	*/
+	export class Keyboard {
+
+		constructor (game: Kiwi.Game) {
+
+			this.game = game;
+
+		}
+
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} &quot;Keyboard&quot;
+		* @public
+		*/
+		public objType() {
+			return &quot;Keyboard&quot;;
+		}
+
+		/** 
+		* The game that this Keyboard belongs to.
+		* @property game
+		* @type Kiwi.Game
+		* @public
+		*/
+		public game: Kiwi.Game;
+
+		/** 
+		* Contains a reference to each Key object when they are either added to this Keyboard manager (by the developer), or when an event fires with that keycode.
+		* @property _keys
+		* @type Key[]
+		* @private
+		*/
+		private _keys:Key[] = [];
+
+		/**
+		* Returns all of the Key objects that currently exist. This is READ ONLY.
+		* @property keys
+		* @type Keys[]
+		* @public
+		*/
+		public get keys():Key[] {
+			return this._keys;
+		}
+
+		/** 
+		* The time in milliseconds which determines if a key was just pressed or not.
+		* @property justPressedRate
+		* @type Number
+		* @default 200
+		* @public
+		*/
+		public justPressedRate: number = 200;
+
+		/** 
+		* The time in milliseconds which determines if a key was just released or not.
+		* @property justReleasedRate
+		* @type Number
+		* @default 200
+		* @public
+		*/
+		public justReleasedRate: number = 200;
+
+		/** 
+		* Is executed when the DOMElements that are need to get the game going are loaded and thus the game can &#x27;boot&#x27;
+		* @method boot
+		* @public
+		*/
+		public boot() {
+			this.onKeyUp = new Kiwi.Signal;
+			this.onKeyDown = new Kiwi.Signal;
+			this.onKeyDownOnce = new Kiwi.Signal;
+			this.start();
+		}
+
+		/** 
+		* The update loop that is executed every frame.
+		* @method update
+		* @public
+		*/
+		public update() {
+
+		}
+
+		/**
+		* A Signal that dispatches events when a key is released/is now up.
+		* Callbacks fired by this Signal will contain two parameters, the keyCode and key object.
+		* 1) KeyCode - The keyCode of the key that was just released.
+		* 2) Key - The key object for that keycode.
+		* @property onKeyUp
+		* @type Kiwi.Signal
+		* @public
+		*/
+		public onKeyUp: Kiwi.Signal;
+
+		/**
+		* A Signal that dispatches events when a key is pressed/is down.
+		* This mimics the natural &#x27;keydown&#x27; event listener, so it will keep dispatching events if the user holds the key down. 
+		* Note: This fires after the &#x27;onKeyDownOnce&#x27; signal.
+		* Callbacks fired by this Signal will contain two parameters, the keyCode and key object.
+		* 1) KeyCode - The keyCode of the key that was just released.
+		* 2) Key - The key object for that keycode.
+		*
+		* @property onKeyDown
+		* @type Kiwi.Signal
+		* @public
+		*/
+		public onKeyDown: Kiwi.Signal;
+
+		/**
+		* A Signal that dispatches events when a key is pressed/is down initially. 
+		* This event only fires the first time that the key is pressed, so it won&#x27;t dispatch events if the user is holding the key down.
+		* Note: This fires before the &#x27;onKeyDown&#x27; signal;
+		* Callbacks fired by this Signal will contain two parameters, the keyCode and key object.
+		* 1) KeyCode - The keyCode of the key that was just released.
+		* 2) Key - The key object for that keycode.
+		*
+		* @property onKeyDownOnce
+		* @type Kiwi.Signal
+		* @public
+		*/
+		public onKeyDownOnce: Kiwi.Signal;
+
+		/** 
+		* Adds the event listeners to the browser to listen for key events.
+		* @method start
+		* @public 
+		*/
+		public start() {
+			if (this.game.deviceTargetOption=== Kiwi.TARGET_BROWSER) {
+				//this._domElement.addEventListener(&#x27;keydown&#x27;, (event:KeyboardEvent) =&gt; this.onKeyDown(event), false);
+				//this._domElement.addEventListener(&#x27;keyup&#x27;, (event:KeyboardEvent) =&gt; this.onKeyUp(event), false);
+				document.body.addEventListener(&#x27;keydown&#x27;, (event: KeyboardEvent) =&gt; this._keyPressed(event), false);
+				document.body.addEventListener(&#x27;keyup&#x27;, (event: KeyboardEvent) =&gt; this._keyReleased(event), false);
+			}
+		}
+
+		/** 
+		* Removes the event listeners and so effectively &#x27;stops&#x27; all keyboard events.
+		* @method stop
+		* @public
+		*/
+		public stop() {
+			if (this.game.deviceTargetOption === Kiwi.TARGET_BROWSER) {
+				//this._domElement.removeEventListener(&#x27;keydown&#x27;, (event:KeyboardEvent) =&gt; this.onKeyDown(event), false);
+				//this._domElement.removeEventListener(&#x27;keyup&#x27;, (event:KeyboardEvent) =&gt; this.onKeyUp(event), false);
+				document.body.removeEventListener(&#x27;keydown&#x27;, (event: KeyboardEvent) =&gt; this._keyPressed(event), false);
+				document.body.removeEventListener(&#x27;keyup&#x27;, (event: KeyboardEvent) =&gt; this._keyReleased(event), false);
+			}
+		}
+
+		/** 
+		* Is executed when a key is pressed/is down. This then either creates a new Key (if one does not currently exist) for that keycode, 
+		* or it updates the key that was pressed (if one does exist). 
+		* @method onKeyDown
+		* @param {KeyboardEvent} event.
+		* @private
+		*/
+		private _keyPressed(event:KeyboardEvent) {
+
+			if (this._keys[event.keyCode]) {
+				this._keys[event.keyCode].update(event);
+
+			} else {
+				this._keys[event.keyCode] = new Kiwi.Input.Key(this, event.keyCode, event);
+
+			}
+
+			if (this._keys[event.keyCode].repeats == 0) this.onKeyDownOnce.dispatch(event.keyCode, this._keys[event.keyCode]);
+
+			this.onKeyDown.dispatch(event.keyCode, this._keys[event.keyCode]);
+		}
+
+		/** 
+		* Is executed when a key is release/is now up. This then either creates a new Key (if one does not currently exist) for that keycode, 
+		* or it updates the key that was released (if one does exist). 
+		* @method onKeyUp
+		* @param {KeyboardEvent} event.
+		* @private
+		*/
+		private _keyReleased(event:KeyboardEvent) {
+
+			if (this._keys[event.keyCode]) {
+				this._keys[event.keyCode].update(event);
+
+			} else {
+				this._keys[event.keyCode] = new Kiwi.Input.Key(this, event.keyCode, event);
+
+			}
+			this.onKeyUp.dispatch(event.keyCode, this._keys[event.keyCode]);
+		}
+
+		/** 
+		* Creates a new Key object for a keycode that is specified.
+		* Not strictly needed (as one will be created once an event occurs on that keycode) but can be good for setting the game up
+		* and choosing whether to prevent that keys any default action.
+		* @method addKey
+		* @param keycode {Number} The keycode of the key that you want to add. 
+		* @param [preventDefault=false] {Boolean} If the default action for that key should be prevented or not when an event fires.
+		* @return {Kiwi.Input.Key}
+		* @public
+		*/
+		public addKey(keycode: number, preventDefault:boolean = false): Key {
+
+			var key = new Kiwi.Input.Key(this, keycode);
+			key.preventDefault = preventDefault;
+
+			return this._keys[keycode] = key;
+
+		}
+
+		/** 
+		* Returns a boolean indicating if a key (that you pass via a keycode) was just pressed or not. 
+		* @method justPressed
+		* @param keycode {Number} The keycode of the key that you would like to check against.
+		* @param [duration=this.justPressedRate] {Number} The duration at which determines if a key was &#x27;just&#x27; pressed or not. If not specified defaults to the justPressedRate
+		* @public
+		*/
+		public justPressed(keycode, duration:number=this.justPressedRate):boolean {
+
+			if (this._keys[keycode]) {
+				return this._keys[keycode].justPressed(duration);
+			} 
+
+			return false;
+		}
+
+
+		/** 
+		* Returns a boolean indicating if a key (that you pass via a keycode) was just released or not. 
+		* @method justReleased
+		* @param keycode {Number} The keycode of the key that you would like to check against.
+		* @param [duration=this.justReleasedRate] {Number} The duration at which determines if a key was &#x27;just&#x27; released or not. If not specified defaults to the justReleasedRate
+		* @public
+		*/
+		public justReleased(keycode, duration:number=this.justReleasedRate):boolean {
+
+			if (this._keys[keycode]) {
+				return this._keys[keycode].justReleased(duration);
+			}
+
+			return false;
+		}
+
+		/** 
+		* Returns a boolean indicating whether a key (that you pass via its keycode) is down or not.
+		* @method isDown
+		* @param keycode {Number} The keycode of the key that you are checking.
+		* @return {boolean}
+		* @public
+		*/
+		public isDown(keycode: number): boolean {
+
+			if (this._keys[keycode]) {
+				return this._keys[keycode].isDown;
+			} else {
+				return false;
+			}
+
+		}
+
+		/** 
+		* Returns a boolean indicating whether a key (that you pass via its keycode) is up or not.
+		* @method isUp
+		* @param keycode {Number} The keycode of the key that you are checking.
+		* @return {boolean}
+		* @public
+		*/
+		public isUp(keycode: number): boolean {
+
+			if (this._keys[keycode]) {
+				return this._keys[keycode].isUp;
+			} else {
+				return false;
+			}
+
+		}
+
+		/**
+		* Executes the reset method on every Key that currently exists.
+		* @method reset
+		* @public
+		*/
+		public reset() {
+			for (var index in this._keys) {
+				this._keys[index].reset();
+			}
+		}
+
+	}
 
 }
 
diff --git a/docs/files/src_input_Keycodes.ts.html b/docs/files/src_input_Keycodes.ts.html
index 2c98056..57ef5d4 100644
--- a/docs/files/src_input_Keycodes.ts.html
+++ b/docs/files/src_input_Keycodes.ts.html
@@ -369,916 +369,916 @@ <h1 class="file-heading">File: src/input/Keycodes.ts</h1>
 * @module Kiwi
 * @submodule Input
 * 
-*/ 
+*/
 
 module Kiwi.Input {
 
-    /**
-    * A Static class which has a property associated with all all of the character codes on a typical keyboard. While you don&#x27;t need this class for your game to work, it is quite handy to use as it can speed up the development process.
-    *
-    * @class Keycodes
-    * @namespace Kiwi.Input
-    * @static
-    */
-    export class Keycodes {
-
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {string} &quot;Keycodes&quot;
-        * @public
-        */
-        public objType() {
-            return &quot;Keycodes&quot;;
-        }
-
-        /**
-        * A Static property that holds the keycode for the character A
-        * @property A
-        * @static
-        * @final
-        * @public
-        */
-        public static A: number = &quot;A&quot;.charCodeAt(0);
-
-        /**
-        * A Static property that holds the keycode for the character B
-        * @property B
-        * @static
-        * @final
-        * @public
-        */
-        public static B: number = &quot;B&quot;.charCodeAt(0);
-
-        /**
-        * A Static property that holds the keycode for the character C
-        * @property C
-        * @static
-        * @final
-        * @public
-        */
-        public static C: number = &quot;C&quot;.charCodeAt(0);
-
-        /**
-        * A Static property that holds the keycode for the character D
-        * @property D
-        * @static
-        * @final
-        * @public
-        */
-        public static D: number = &quot;D&quot;.charCodeAt(0);
-
-        /**
-        * A Static property that holds the keycode for the character E
-        * @property E
-        * @static
-        * @final
-        * @public
-        */
-        public static E: number = &quot;E&quot;.charCodeAt(0);
-
-        /**
-        * A Static property that holds the keycode for the character F
-        * @property F
-        * @static
-        * @final
-        * @public
-        */
-        public static F: number = &quot;F&quot;.charCodeAt(0);
-
-        /**
-        * A Static property that holds the keycode for the character G
-        * @property G
-        * @static
-        * @final
-        * @public
-        */
-        public static G: number = &quot;G&quot;.charCodeAt(0);
-
-        /**
-        * A Static property that holds the keycode for the character H
-        * @property H
-        * @static
-        * @final
-        * @public
-        */
-        public static H: number = &quot;H&quot;.charCodeAt(0);
-
-        /**
-        * A Static property that holds the keycode for the character I
-        * @property I
-        * @static
-        * @final
-        * @public
-        */
-        public static I: number = &quot;I&quot;.charCodeAt(0);
-
-        /**
-        * A Static property that holds the keycode for the character J
-        * @property J
-        * @static
-        * @final
-        * @public
-        */
-        public static J: number = &quot;J&quot;.charCodeAt(0);
-
-        /**
-        * A Static property that holds the keycode for the character K
-        * @property K
-        * @static
-        * @final
-        * @public
-        */
-        public static K: number = &quot;K&quot;.charCodeAt(0);
-
-        /**
-        * A Static property that holds the keycode for the character L
-        * @property L
-        * @static
-        * @final
-        * @public
-        */
-        public static L: number = &quot;L&quot;.charCodeAt(0);
-
-        /**
-        * A Static property that holds the keycode for the character M
-        * @property M
-        * @static
-        * @final
-        * @public
-        */
-        public static M: number = &quot;M&quot;.charCodeAt(0);
-
-        /**
-        * A Static property that holds the keycode for the character N
-        * @property N
-        * @static
-        * @final
-        * @public
-        */
-        public static N: number = &quot;N&quot;.charCodeAt(0);
-
-        /**
-        * A Static property that holds the keycode for the character O
-        * @property O
-        * @static
-        * @final
-        * @public
-        */
-        public static O: number = &quot;O&quot;.charCodeAt(0);
-
-        /**
-        * A Static property that holds the keycode for the character P
-        * @property P
-        * @static
-        * @final
-        * @public
-        */
-        public static P: number = &quot;P&quot;.charCodeAt(0);
-
-        /**
-        * A Static property that holds the keycode for the character Q
-        * @property Q
-        * @static
-        * @final
-        * @public
-        */
-        public static Q: number = &quot;Q&quot;.charCodeAt(0);
-
-        /**
-        * A Static property that holds the keycode for the character R
-        * @property R
-        * @static
-        * @final
-        * @public
-        */
-        public static R: number = &quot;R&quot;.charCodeAt(0);
-
-        /**
-        * A Static property that holds the keycode for the character S
-        * @property S
-        * @static
-        * @final
-        * @public
-        */
-        public static S: number = &quot;S&quot;.charCodeAt(0);
-
-        /**
-        * A Static property that holds the keycode for the character T
-        * @property T
-        * @static
-        * @final
-        * @public
-        */
-        public static T: number = &quot;T&quot;.charCodeAt(0);
-
-        /**
-        * A Static property that holds the keycode for the character U
-        * @property U
-        * @static
-        * @final
-        * @public
-        */
-        public static U: number = &quot;U&quot;.charCodeAt(0);
-
-        /**
-        * A Static property that holds the keycode for the character V
-        * @property V
-        * @static
-        * @final
-        * @public
-        */
-        public static V: number = &quot;V&quot;.charCodeAt(0);
-
-        /**
-        * A Static property that holds the keycode for the character W
-        * @property W
-        * @static
-        * @final
-        * @public
-        */
-        public static W: number = &quot;W&quot;.charCodeAt(0);
-
-        /**
-        * A Static property that holds the keycode for the character X
-        * @property X
-        * @static
-        * @final
-        * @public
-        */
-        public static X: number = &quot;X&quot;.charCodeAt(0);
-
-        /**
-        * A Static property that holds the keycode for the character Y
-        * @property Y
-        * @static
-        * @final
-        * @public
-        */
-        public static Y: number = &quot;Y&quot;.charCodeAt(0);
-
-	    /**
-        * A Static property that holds the keycode for the character Z
-        * @property Z
-        * @static
-        * @final
-        * @public
-        */
-	    public static Z:number = &quot;Z&quot;.charCodeAt(0);
-
-
-        /**
-        * A Static property that holds the keycode for the character 0
-        * @property ZERO
-        * @static
-        * @final
-        * @public
-        */
-        public static ZERO: number = &quot;0&quot;.charCodeAt(0);
-
-        /**
-        * A Static property that holds the keycode for the character 1
-        * @property ONE
-        * @static
-        * @final
-        * @public
-        */
-        public static ONE: number = &quot;1&quot;.charCodeAt(0);
-
-        /**
-        * A Static property that holds the keycode for the character 2
-        * @property TWO
-        * @static
-        * @final
-        * @public
-        */
-        public static TWO: number = &quot;2&quot;.charCodeAt(0);
-
-        /**
-        * A Static property that holds the keycode for the character 3
-        * @property THREE
-        * @static
-        * @final
-        * @public
-        */
-        public static THREE: number = &quot;3&quot;.charCodeAt(0);
-
-        /**
-        * A Static property that holds the keycode for the character 4
-        * @property FOUR
-        * @static
-        * @final
-        * @public
-        */
-        public static FOUR: number = &quot;4&quot;.charCodeAt(0);
-
-        /**
-        * A Static property that holds the keycode for the character 5
-        * @property FIVE
-        * @static
-        * @final
-        * @public
-        */
-        public static FIVE: number = &quot;5&quot;.charCodeAt(0);
-
-        /**
-        * A Static property that holds the keycode for the character 6
-        * @property SIX
-        * @static
-        * @final
-        * @public
-        */
-        public static SIX: number = &quot;6&quot;.charCodeAt(0);
-
-        /**
-        * A Static property that holds the keycode for the character 7
-        * @property SEVEN
-        * @static
-        * @final
-        * @public
-        */
-        public static SEVEN: number = &quot;7&quot;.charCodeAt(0);
-
-        /**
-        * A Static property that holds the keycode for the character 8
-        * @property EIGHT
-        * @static
-        * @final
-        * @public
-        */
-        public static EIGHT: number = &quot;8&quot;.charCodeAt(0);
-
-	    /**
-        * A Static property that holds the keycode for the character 9
-        * @property NINE
-        * @static
-        * @final
-        * @public
-        */
-	    public static NINE:number = &quot;9&quot;.charCodeAt(0);
-        
-
-        /**
-        * A Static property that holds the keycode for the character number pad 0
-        * @property NUMPAD_0
-        * @static
-        * @final
-        * @public
-        */
-        public static NUMPAD_0: number = 96;
-
-        /**
-        * A Static property that holds the keycode for the character number pad 1
-        * @property NUMPAD_1
-        * @static
-        * @final
-        * @public
-        */
-        public static NUMPAD_1: number = 97;
-
-        /**
-        * A Static property that holds the keycode for the character number pad 2
-        * @property NUMPAD_2
-        * @static
-        * @final
-        * @public
-        */
-        public static NUMPAD_2: number = 98;
-
-        /**
-        * A Static property that holds the keycode for the character number pad 3
-        * @property NUMPAD_3
-        * @static
-        * @final
-        * @public
-        */
-        public static NUMPAD_3: number = 99;
-
-        /**
-        * A Static property that holds the keycode for the character number pad 4
-        * @property NUMPAD_4
-        * @static
-        * @final
-        * @public
-        */
-        public static NUMPAD_4: number = 100;
-
-        /**
-        * A Static property that holds the keycode for the character number pad 5
-        * @property NUMPAD_5
-        * @static
-        * @final
-        * @public
-        */
-        public static NUMPAD_5: number = 101;
-
-        /**
-        * A Static property that holds the keycode for the character number pad 6
-        * @property NUMPAD_6
-        * @static
-        * @final
-        * @public
-        */
-        public static NUMPAD_6: number = 102;
-
-        /**
-        * A Static property that holds the keycode for the character number pad 7
-        * @property NUMPAD_7
-        * @static
-        * @final
-        * @public
-        */
-        public static NUMPAD_7: number = 103;
-
-        /**
-        * A Static property that holds the keycode for the character number pad 8
-        * @property NUMPAD_8
-        * @static
-        * @final
-        * @public
-        */
-        public static NUMPAD_8: number = 104;
-
-        /**
-        * A Static property that holds the keycode for the character number pad 9
-        * @property NUMPAD_9
-        * @static
-        * @final
-        * @public
-        */
-        public static NUMPAD_9: number = 105;
-
-        /**
-        * A Static property that holds the keycode for the character number pad *
-        * @property NUMPAD_MULTIPLY
-        * @static
-        * @final
-        * @public
-        */
-        public static NUMPAD_MULTIPLY: number = 106;
-
-        /**
-        * A Static property that holds the keycode for the character number pad +
-        * @property NUMPAD_ADD
-        * @static
-        * @final
-        * @public
-        */
-        public static NUMPAD_ADD: number = 107;
-
-        /**
-        * A Static property that holds the keycode for the character on the number pad enter
-        * @property NUMPAD_ENTER
-        * @static
-        * @final
-        * @public
-        */
-        public static NUMPAD_ENTER: number = 108;
-
-        /**
-        * A Static property that holds the keycode for the character number pad -
-        * @property NUMPAD_SUBTRACT
-        * @static
-        * @final
-        * @public
-        */
-        public static NUMPAD_SUBTRACT: number = 109;
-
-        /**
-        * A Static property that holds the keycode for the character number pad .
-        * @property NUMPAD_DECIMAL
-        * @static
-        * @final
-        * @public
-        */
-        public static NUMPAD_DECIMAL: number = 110;
-
-	    /**
-        * A Static property that holds the keycode for the character /
-        * @property NUMPAD_DIVIDE
-        * @static
-        * @final
-        * @public
-        */
-	    public static NUMPAD_DIVIDE:number = 111;
-        
-
-        /**
-        * A Static property that holds the keycode for the character F1
-        * @property F1
-        * @static
-        * @final
-        * @public
-        */
-        public static F1: number = 112;
-
-        /**
-        * A Static property that holds the keycode for the character F2
-        * @property F2
-        * @static
-        * @final
-        * @public
-        */
-        public static F2: number = 113;
-
-        /**
-        * A Static property that holds the keycode for the character F3
-        * @property F3
-        * @static
-        * @final
-        * @public
-        */
-        public static F3: number = 114;
-
-        /**
-        * A Static property that holds the keycode for the character F4
-        * @property F4
-        * @static
-        * @final
-        * @public
-        */
-        public static F4: number = 115;
-
-        /**
-        * A Static property that holds the keycode for the character F5
-        * @property F5
-        * @static
-        * @final
-        * @public
-        */
-        public static F5: number = 116;
-
-        /**
-        * A Static property that holds the keycode for the character F6
-        * @property F6
-        * @static
-        * @final
-        * @public
-        */
-        public static F6: number = 117;
-
-        /**
-        * A Static property that holds the keycode for the character F7
-        * @property F7
-        * @static
-        * @final
-        * @public
-        */
-        public static F7: number = 118;
-
-        /**
-        * A Static property that holds the keycode for the character F8
-        * @property F8
-        * @static
-        * @final
-        * @public
-        */
-        public static F8: number = 119;
-
-        /**
-        * A Static property that holds the keycode for the character F9
-        * @property F9
-        * @static
-        * @final
-        * @public
-        */
-        public static F9: number = 120;
-
-        /**
-        * A Static property that holds the keycode for the character F10
-        * @property F10
-        * @static
-        * @final
-        * @public
-        */
-        public static F10: number = 121;
-
-        /**
-        * A Static property that holds the keycode for the character F11
-        * @property F11
-        * @static
-        * @final
-        * @public
-        */
-        public static F11: number = 122;
-
-        /**
-        * A Static property that holds the keycode for the character F12
-        * @property F12
-        * @static
-        * @final
-        * @public
-        */
-        public static F12: number = 123;
-
-        /**
-        * A Static property that holds the keycode for the character F13
-        * @property F13
-        * @static
-        * @final
-        * @public
-        */
-        public static F13: number = 124;
-
-        /**
-        * A Static property that holds the keycode for the character F14
-        * @property F14
-        * @static
-        * @final
-        * @public
-        */
-        public static F14: number = 125;
-
-	    /**
-        * A Static property that holds the keycode for the character F15
-        * @property F15
-        * @static
-        * @final
-        * @public
-        */
-	    public static F15:number = 126;
-
-	    /**
-        * A Static property that holds the keycode for the character COLON
-        * @property COLON
-        * @static
-        * @final
-        * @public
-        */
-        public static COLON: number = 186;
-
-        /**
-        * A Static property that holds the keycode for the character =
-        * @property EQUALS
-        * @static
-        * @final
-        * @public
-        */
-        public static EQUALS: number = 187;
-
-        /**
-        * A Static property that holds the keycode for the character UNDERSCORE
-        * @property UNDERSCORE
-        * @static
-        * @final
-        * @public
-        */
-        public static UNDERSCORE: number = 189;
-
-        /**
-        * A Static property that holds the keycode for the character QUESTION_MARK
-        * @property QUESTION_MARK
-        * @static
-        * @final
-        * @public
-        */
-        public static QUESTION_MARK: number = 191;
-
-        /**
-        * A Static property that holds the keycode for the character TILDE
-        * @property TILDE
-        * @static
-        * @final
-        * @public
-        */
-        public static TILDE: number = 192;
-
-        /**
-        * A Static property that holds the keycode for the character OPEN_BRAKET
-        * @property OPEN_BRACKET
-        * @static
-        * @final
-        * @public
-        */
-        public static OPEN_BRACKET: number = 219;
-
-        /**
-        * A Static property that holds the keycode for the character BACKWARD_SLASH
-        * @property BACKWARD_SLASH
-        * @static
-        * @final
-        * @public
-        */
-        public static BACKWARD_SLASH: number = 220;
-
-        /**
-        * A Static property that holds the keycode for the character CLOSED_BRACKET
-        * @property CLOSED_BRACKET
-        * @static
-        * @final
-        * @public
-        */
-        public static CLOSED_BRACKET: number = 221;
-
-	    /**
-        * A Static property that holds the keycode for the character QUOTES
-        * @property QUOTES
-        * @static
-        * @final
-        * @public
-        */
-	    public static QUOTES:number = 222;
-        
-
-        /**
-        * A Static property that holds the keycode for the character BACKSPACE
-        * @property BACKSPACE
-        * @static
-        * @final
-        * @public
-        */
-        public static BACKSPACE: number = 8;
-
-        /**
-        * A Static property that holds the keycode for the character TAB
-        * @property TAB
-        * @static
-        * @final
-        * @public
-        */
-        public static TAB: number = 9;
-
-        /**
-        * A Static property that holds the keycode for the character CLEAR
-        * @property CLEAR
-        * @static
-        * @final
-        * @public
-        */
-        public static CLEAR: number = 12;
-
-        /**
-        * A Static property that holds the keycode for the character ENTER
-        * @property ENTER
-        * @static
-        * @final
-        * @public
-        */
-        public static ENTER: number = 13;
-
-        /**
-        * A Static property that holds the keycode for the character SHIFT
-        * @property SHIFT
-        * @static
-        * @final
-        * @public
-        */
-        public static SHIFT: number = 16;
-
-        /**
-        * A Static property that holds the keycode for the character CONTROL
-        * @property CONTROL
-        * @static
-        * @final
-        * @public
-        */
-        public static CONTROL: number = 17;
-
-        /**
-        * A Static property that holds the keycode for the character ALT
-        * @property ALT
-        * @static
-        * @final
-        * @public
-        */
-        public static ALT: number = 18;
-
-        /**
-        * A Static property that holds the keycode for the character CAPS_LOCK
-        * @property CAPS_LOCK
-        * @static
-        * @final
-        * @public
-        */
-        public static CAPS_LOCK: number = 20;
-
-        /**
-        * A Static property that holds the keycode for the character ESC
-        * @property ESC
-        * @static
-        * @final
-        * @public
-        */
-        public static ESC: number = 27;
-
-        /**
-        * A Static property that holds the keycode for the character SPACEBAR
-        * @property SPACEBAR
-        * @static
-        * @final
-        * @public
-        */
-        public static SPACEBAR: number = 32;
-
-        /**
-        * A Static property that holds the keycode for the character PAGE_UP
-        * @property PAGE_UP
-        * @static
-        * @final
-        * @public
-        */
-        public static PAGE_UP: number = 33;
-
-        /**
-        * A Static property that holds the keycode for the character PAGE_DOWN
-        * @property PAGE_DOWN
-        * @static
-        * @final
-        * @public
-        */
-        public static PAGE_DOWN: number = 34;
-
-        /**
-        * A Static property that holds the keycode for the character END
-        * @property END
-        * @static
-        * @final
-        * @public
-        */
-        public static END: number = 35;
-
-        /**
-        * A Static property that holds the keycode for the character HOME
-        * @property HOME
-        * @static
-        * @final
-        * @public
-        */
-        public static HOME: number = 36;
-
-        /**
-        * A Static property that holds the keycode for the character LEFT
-        * @property LEFT
-        * @static
-        * @final
-        * @public
-        */
-        public static LEFT: number = 37;
-
-        /**
-        * A Static property that holds the keycode for the character UP
-        * @property UP
-        * @static
-        * @final
-        * @public
-        */
-        public static UP: number = 38;
-
-        /**
-        * A Static property that holds the keycode for the character RIGHT
-        * @property RIGHT
-        * @static
-        * @final
-        * @public
-        */
-        public static RIGHT: number = 39;
-
-        /**
-        * A Static property that holds the keycode for the character DOWN
-        * @property DOWN
-        * @static
-        * @final
-        * @public
-        */
-        public static DOWN: number = 40;
-
-        /**
-        * A Static property that holds the keycode for the character INSERT
-        * @property INSERT
-        * @static
-        * @final
-        * @public
-        */
-        public static INSERT: number = 45;
-
-        /**
-        * A Static property that holds the keycode for the character DELETE
-        * @property DELETE
-        * @static
-        * @final
-        * @public
-        */
-        public static DELETE: number = 46;
-
-        /**
-        * A Static property that holds the keycode for the character HELP
-        * @property HELP
-        * @static
-        * @final
-        * @public
-        */
-        public static HELP: number = 47;
-
-	    /**
-        * A Static property that holds the keycode for the character NUM_LOCK
-        * @property NUM_LOCK
-        * @static
-        * @final
-        * @public
-        */
-	    public static NUM_LOCK: number = 144;
-
-    }
+	/**
+	* A Static class which has a property associated with all all of the character codes on a typical keyboard. While you don&#x27;t need this class for your game to work, it is quite handy to use as it can speed up the development process.
+	*
+	* @class Keycodes
+	* @namespace Kiwi.Input
+	* @static
+	*/
+	export class Keycodes {
+
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {string} &quot;Keycodes&quot;
+		* @public
+		*/
+		public objType() {
+			return &quot;Keycodes&quot;;
+		}
+
+		/**
+		* A Static property that holds the keycode for the character A
+		* @property A
+		* @static
+		* @final
+		* @public
+		*/
+		public static A: number = &quot;A&quot;.charCodeAt(0);
+
+		/**
+		* A Static property that holds the keycode for the character B
+		* @property B
+		* @static
+		* @final
+		* @public
+		*/
+		public static B: number = &quot;B&quot;.charCodeAt(0);
+
+		/**
+		* A Static property that holds the keycode for the character C
+		* @property C
+		* @static
+		* @final
+		* @public
+		*/
+		public static C: number = &quot;C&quot;.charCodeAt(0);
+
+		/**
+		* A Static property that holds the keycode for the character D
+		* @property D
+		* @static
+		* @final
+		* @public
+		*/
+		public static D: number = &quot;D&quot;.charCodeAt(0);
+
+		/**
+		* A Static property that holds the keycode for the character E
+		* @property E
+		* @static
+		* @final
+		* @public
+		*/
+		public static E: number = &quot;E&quot;.charCodeAt(0);
+
+		/**
+		* A Static property that holds the keycode for the character F
+		* @property F
+		* @static
+		* @final
+		* @public
+		*/
+		public static F: number = &quot;F&quot;.charCodeAt(0);
+
+		/**
+		* A Static property that holds the keycode for the character G
+		* @property G
+		* @static
+		* @final
+		* @public
+		*/
+		public static G: number = &quot;G&quot;.charCodeAt(0);
+
+		/**
+		* A Static property that holds the keycode for the character H
+		* @property H
+		* @static
+		* @final
+		* @public
+		*/
+		public static H: number = &quot;H&quot;.charCodeAt(0);
+
+		/**
+		* A Static property that holds the keycode for the character I
+		* @property I
+		* @static
+		* @final
+		* @public
+		*/
+		public static I: number = &quot;I&quot;.charCodeAt(0);
+
+		/**
+		* A Static property that holds the keycode for the character J
+		* @property J
+		* @static
+		* @final
+		* @public
+		*/
+		public static J: number = &quot;J&quot;.charCodeAt(0);
+
+		/**
+		* A Static property that holds the keycode for the character K
+		* @property K
+		* @static
+		* @final
+		* @public
+		*/
+		public static K: number = &quot;K&quot;.charCodeAt(0);
+
+		/**
+		* A Static property that holds the keycode for the character L
+		* @property L
+		* @static
+		* @final
+		* @public
+		*/
+		public static L: number = &quot;L&quot;.charCodeAt(0);
+
+		/**
+		* A Static property that holds the keycode for the character M
+		* @property M
+		* @static
+		* @final
+		* @public
+		*/
+		public static M: number = &quot;M&quot;.charCodeAt(0);
+
+		/**
+		* A Static property that holds the keycode for the character N
+		* @property N
+		* @static
+		* @final
+		* @public
+		*/
+		public static N: number = &quot;N&quot;.charCodeAt(0);
+
+		/**
+		* A Static property that holds the keycode for the character O
+		* @property O
+		* @static
+		* @final
+		* @public
+		*/
+		public static O: number = &quot;O&quot;.charCodeAt(0);
+
+		/**
+		* A Static property that holds the keycode for the character P
+		* @property P
+		* @static
+		* @final
+		* @public
+		*/
+		public static P: number = &quot;P&quot;.charCodeAt(0);
+
+		/**
+		* A Static property that holds the keycode for the character Q
+		* @property Q
+		* @static
+		* @final
+		* @public
+		*/
+		public static Q: number = &quot;Q&quot;.charCodeAt(0);
+
+		/**
+		* A Static property that holds the keycode for the character R
+		* @property R
+		* @static
+		* @final
+		* @public
+		*/
+		public static R: number = &quot;R&quot;.charCodeAt(0);
+
+		/**
+		* A Static property that holds the keycode for the character S
+		* @property S
+		* @static
+		* @final
+		* @public
+		*/
+		public static S: number = &quot;S&quot;.charCodeAt(0);
+
+		/**
+		* A Static property that holds the keycode for the character T
+		* @property T
+		* @static
+		* @final
+		* @public
+		*/
+		public static T: number = &quot;T&quot;.charCodeAt(0);
+
+		/**
+		* A Static property that holds the keycode for the character U
+		* @property U
+		* @static
+		* @final
+		* @public
+		*/
+		public static U: number = &quot;U&quot;.charCodeAt(0);
+
+		/**
+		* A Static property that holds the keycode for the character V
+		* @property V
+		* @static
+		* @final
+		* @public
+		*/
+		public static V: number = &quot;V&quot;.charCodeAt(0);
+
+		/**
+		* A Static property that holds the keycode for the character W
+		* @property W
+		* @static
+		* @final
+		* @public
+		*/
+		public static W: number = &quot;W&quot;.charCodeAt(0);
+
+		/**
+		* A Static property that holds the keycode for the character X
+		* @property X
+		* @static
+		* @final
+		* @public
+		*/
+		public static X: number = &quot;X&quot;.charCodeAt(0);
+
+		/**
+		* A Static property that holds the keycode for the character Y
+		* @property Y
+		* @static
+		* @final
+		* @public
+		*/
+		public static Y: number = &quot;Y&quot;.charCodeAt(0);
+
+		/**
+		* A Static property that holds the keycode for the character Z
+		* @property Z
+		* @static
+		* @final
+		* @public
+		*/
+		public static Z:number = &quot;Z&quot;.charCodeAt(0);
+
+
+		/**
+		* A Static property that holds the keycode for the character 0
+		* @property ZERO
+		* @static
+		* @final
+		* @public
+		*/
+		public static ZERO: number = &quot;0&quot;.charCodeAt(0);
+
+		/**
+		* A Static property that holds the keycode for the character 1
+		* @property ONE
+		* @static
+		* @final
+		* @public
+		*/
+		public static ONE: number = &quot;1&quot;.charCodeAt(0);
+
+		/**
+		* A Static property that holds the keycode for the character 2
+		* @property TWO
+		* @static
+		* @final
+		* @public
+		*/
+		public static TWO: number = &quot;2&quot;.charCodeAt(0);
+
+		/**
+		* A Static property that holds the keycode for the character 3
+		* @property THREE
+		* @static
+		* @final
+		* @public
+		*/
+		public static THREE: number = &quot;3&quot;.charCodeAt(0);
+
+		/**
+		* A Static property that holds the keycode for the character 4
+		* @property FOUR
+		* @static
+		* @final
+		* @public
+		*/
+		public static FOUR: number = &quot;4&quot;.charCodeAt(0);
+
+		/**
+		* A Static property that holds the keycode for the character 5
+		* @property FIVE
+		* @static
+		* @final
+		* @public
+		*/
+		public static FIVE: number = &quot;5&quot;.charCodeAt(0);
+
+		/**
+		* A Static property that holds the keycode for the character 6
+		* @property SIX
+		* @static
+		* @final
+		* @public
+		*/
+		public static SIX: number = &quot;6&quot;.charCodeAt(0);
+
+		/**
+		* A Static property that holds the keycode for the character 7
+		* @property SEVEN
+		* @static
+		* @final
+		* @public
+		*/
+		public static SEVEN: number = &quot;7&quot;.charCodeAt(0);
+
+		/**
+		* A Static property that holds the keycode for the character 8
+		* @property EIGHT
+		* @static
+		* @final
+		* @public
+		*/
+		public static EIGHT: number = &quot;8&quot;.charCodeAt(0);
+
+		/**
+		* A Static property that holds the keycode for the character 9
+		* @property NINE
+		* @static
+		* @final
+		* @public
+		*/
+		public static NINE:number = &quot;9&quot;.charCodeAt(0);
+		
+
+		/**
+		* A Static property that holds the keycode for the character number pad 0
+		* @property NUMPAD_0
+		* @static
+		* @final
+		* @public
+		*/
+		public static NUMPAD_0: number = 96;
+
+		/**
+		* A Static property that holds the keycode for the character number pad 1
+		* @property NUMPAD_1
+		* @static
+		* @final
+		* @public
+		*/
+		public static NUMPAD_1: number = 97;
+
+		/**
+		* A Static property that holds the keycode for the character number pad 2
+		* @property NUMPAD_2
+		* @static
+		* @final
+		* @public
+		*/
+		public static NUMPAD_2: number = 98;
+
+		/**
+		* A Static property that holds the keycode for the character number pad 3
+		* @property NUMPAD_3
+		* @static
+		* @final
+		* @public
+		*/
+		public static NUMPAD_3: number = 99;
+
+		/**
+		* A Static property that holds the keycode for the character number pad 4
+		* @property NUMPAD_4
+		* @static
+		* @final
+		* @public
+		*/
+		public static NUMPAD_4: number = 100;
+
+		/**
+		* A Static property that holds the keycode for the character number pad 5
+		* @property NUMPAD_5
+		* @static
+		* @final
+		* @public
+		*/
+		public static NUMPAD_5: number = 101;
+
+		/**
+		* A Static property that holds the keycode for the character number pad 6
+		* @property NUMPAD_6
+		* @static
+		* @final
+		* @public
+		*/
+		public static NUMPAD_6: number = 102;
+
+		/**
+		* A Static property that holds the keycode for the character number pad 7
+		* @property NUMPAD_7
+		* @static
+		* @final
+		* @public
+		*/
+		public static NUMPAD_7: number = 103;
+
+		/**
+		* A Static property that holds the keycode for the character number pad 8
+		* @property NUMPAD_8
+		* @static
+		* @final
+		* @public
+		*/
+		public static NUMPAD_8: number = 104;
+
+		/**
+		* A Static property that holds the keycode for the character number pad 9
+		* @property NUMPAD_9
+		* @static
+		* @final
+		* @public
+		*/
+		public static NUMPAD_9: number = 105;
+
+		/**
+		* A Static property that holds the keycode for the character number pad *
+		* @property NUMPAD_MULTIPLY
+		* @static
+		* @final
+		* @public
+		*/
+		public static NUMPAD_MULTIPLY: number = 106;
+
+		/**
+		* A Static property that holds the keycode for the character number pad +
+		* @property NUMPAD_ADD
+		* @static
+		* @final
+		* @public
+		*/
+		public static NUMPAD_ADD: number = 107;
+
+		/**
+		* A Static property that holds the keycode for the character on the number pad enter
+		* @property NUMPAD_ENTER
+		* @static
+		* @final
+		* @public
+		*/
+		public static NUMPAD_ENTER: number = 108;
+
+		/**
+		* A Static property that holds the keycode for the character number pad -
+		* @property NUMPAD_SUBTRACT
+		* @static
+		* @final
+		* @public
+		*/
+		public static NUMPAD_SUBTRACT: number = 109;
+
+		/**
+		* A Static property that holds the keycode for the character number pad .
+		* @property NUMPAD_DECIMAL
+		* @static
+		* @final
+		* @public
+		*/
+		public static NUMPAD_DECIMAL: number = 110;
+
+		/**
+		* A Static property that holds the keycode for the character /
+		* @property NUMPAD_DIVIDE
+		* @static
+		* @final
+		* @public
+		*/
+		public static NUMPAD_DIVIDE:number = 111;
+		
+
+		/**
+		* A Static property that holds the keycode for the character F1
+		* @property F1
+		* @static
+		* @final
+		* @public
+		*/
+		public static F1: number = 112;
+
+		/**
+		* A Static property that holds the keycode for the character F2
+		* @property F2
+		* @static
+		* @final
+		* @public
+		*/
+		public static F2: number = 113;
+
+		/**
+		* A Static property that holds the keycode for the character F3
+		* @property F3
+		* @static
+		* @final
+		* @public
+		*/
+		public static F3: number = 114;
+
+		/**
+		* A Static property that holds the keycode for the character F4
+		* @property F4
+		* @static
+		* @final
+		* @public
+		*/
+		public static F4: number = 115;
+
+		/**
+		* A Static property that holds the keycode for the character F5
+		* @property F5
+		* @static
+		* @final
+		* @public
+		*/
+		public static F5: number = 116;
+
+		/**
+		* A Static property that holds the keycode for the character F6
+		* @property F6
+		* @static
+		* @final
+		* @public
+		*/
+		public static F6: number = 117;
+
+		/**
+		* A Static property that holds the keycode for the character F7
+		* @property F7
+		* @static
+		* @final
+		* @public
+		*/
+		public static F7: number = 118;
+
+		/**
+		* A Static property that holds the keycode for the character F8
+		* @property F8
+		* @static
+		* @final
+		* @public
+		*/
+		public static F8: number = 119;
+
+		/**
+		* A Static property that holds the keycode for the character F9
+		* @property F9
+		* @static
+		* @final
+		* @public
+		*/
+		public static F9: number = 120;
+
+		/**
+		* A Static property that holds the keycode for the character F10
+		* @property F10
+		* @static
+		* @final
+		* @public
+		*/
+		public static F10: number = 121;
+
+		/**
+		* A Static property that holds the keycode for the character F11
+		* @property F11
+		* @static
+		* @final
+		* @public
+		*/
+		public static F11: number = 122;
+
+		/**
+		* A Static property that holds the keycode for the character F12
+		* @property F12
+		* @static
+		* @final
+		* @public
+		*/
+		public static F12: number = 123;
+
+		/**
+		* A Static property that holds the keycode for the character F13
+		* @property F13
+		* @static
+		* @final
+		* @public
+		*/
+		public static F13: number = 124;
+
+		/**
+		* A Static property that holds the keycode for the character F14
+		* @property F14
+		* @static
+		* @final
+		* @public
+		*/
+		public static F14: number = 125;
+
+		/**
+		* A Static property that holds the keycode for the character F15
+		* @property F15
+		* @static
+		* @final
+		* @public
+		*/
+		public static F15:number = 126;
+
+		/**
+		* A Static property that holds the keycode for the character COLON
+		* @property COLON
+		* @static
+		* @final
+		* @public
+		*/
+		public static COLON: number = 186;
+
+		/**
+		* A Static property that holds the keycode for the character =
+		* @property EQUALS
+		* @static
+		* @final
+		* @public
+		*/
+		public static EQUALS: number = 187;
+
+		/**
+		* A Static property that holds the keycode for the character UNDERSCORE
+		* @property UNDERSCORE
+		* @static
+		* @final
+		* @public
+		*/
+		public static UNDERSCORE: number = 189;
+
+		/**
+		* A Static property that holds the keycode for the character QUESTION_MARK
+		* @property QUESTION_MARK
+		* @static
+		* @final
+		* @public
+		*/
+		public static QUESTION_MARK: number = 191;
+
+		/**
+		* A Static property that holds the keycode for the character TILDE
+		* @property TILDE
+		* @static
+		* @final
+		* @public
+		*/
+		public static TILDE: number = 192;
+
+		/**
+		* A Static property that holds the keycode for the character OPEN_BRAKET
+		* @property OPEN_BRACKET
+		* @static
+		* @final
+		* @public
+		*/
+		public static OPEN_BRACKET: number = 219;
+
+		/**
+		* A Static property that holds the keycode for the character BACKWARD_SLASH
+		* @property BACKWARD_SLASH
+		* @static
+		* @final
+		* @public
+		*/
+		public static BACKWARD_SLASH: number = 220;
+
+		/**
+		* A Static property that holds the keycode for the character CLOSED_BRACKET
+		* @property CLOSED_BRACKET
+		* @static
+		* @final
+		* @public
+		*/
+		public static CLOSED_BRACKET: number = 221;
+
+		/**
+		* A Static property that holds the keycode for the character QUOTES
+		* @property QUOTES
+		* @static
+		* @final
+		* @public
+		*/
+		public static QUOTES:number = 222;
+		
+
+		/**
+		* A Static property that holds the keycode for the character BACKSPACE
+		* @property BACKSPACE
+		* @static
+		* @final
+		* @public
+		*/
+		public static BACKSPACE: number = 8;
+
+		/**
+		* A Static property that holds the keycode for the character TAB
+		* @property TAB
+		* @static
+		* @final
+		* @public
+		*/
+		public static TAB: number = 9;
+
+		/**
+		* A Static property that holds the keycode for the character CLEAR
+		* @property CLEAR
+		* @static
+		* @final
+		* @public
+		*/
+		public static CLEAR: number = 12;
+
+		/**
+		* A Static property that holds the keycode for the character ENTER
+		* @property ENTER
+		* @static
+		* @final
+		* @public
+		*/
+		public static ENTER: number = 13;
+
+		/**
+		* A Static property that holds the keycode for the character SHIFT
+		* @property SHIFT
+		* @static
+		* @final
+		* @public
+		*/
+		public static SHIFT: number = 16;
+
+		/**
+		* A Static property that holds the keycode for the character CONTROL
+		* @property CONTROL
+		* @static
+		* @final
+		* @public
+		*/
+		public static CONTROL: number = 17;
+
+		/**
+		* A Static property that holds the keycode for the character ALT
+		* @property ALT
+		* @static
+		* @final
+		* @public
+		*/
+		public static ALT: number = 18;
+
+		/**
+		* A Static property that holds the keycode for the character CAPS_LOCK
+		* @property CAPS_LOCK
+		* @static
+		* @final
+		* @public
+		*/
+		public static CAPS_LOCK: number = 20;
+
+		/**
+		* A Static property that holds the keycode for the character ESC
+		* @property ESC
+		* @static
+		* @final
+		* @public
+		*/
+		public static ESC: number = 27;
+
+		/**
+		* A Static property that holds the keycode for the character SPACEBAR
+		* @property SPACEBAR
+		* @static
+		* @final
+		* @public
+		*/
+		public static SPACEBAR: number = 32;
+
+		/**
+		* A Static property that holds the keycode for the character PAGE_UP
+		* @property PAGE_UP
+		* @static
+		* @final
+		* @public
+		*/
+		public static PAGE_UP: number = 33;
+
+		/**
+		* A Static property that holds the keycode for the character PAGE_DOWN
+		* @property PAGE_DOWN
+		* @static
+		* @final
+		* @public
+		*/
+		public static PAGE_DOWN: number = 34;
+
+		/**
+		* A Static property that holds the keycode for the character END
+		* @property END
+		* @static
+		* @final
+		* @public
+		*/
+		public static END: number = 35;
+
+		/**
+		* A Static property that holds the keycode for the character HOME
+		* @property HOME
+		* @static
+		* @final
+		* @public
+		*/
+		public static HOME: number = 36;
+
+		/**
+		* A Static property that holds the keycode for the character LEFT
+		* @property LEFT
+		* @static
+		* @final
+		* @public
+		*/
+		public static LEFT: number = 37;
+
+		/**
+		* A Static property that holds the keycode for the character UP
+		* @property UP
+		* @static
+		* @final
+		* @public
+		*/
+		public static UP: number = 38;
+
+		/**
+		* A Static property that holds the keycode for the character RIGHT
+		* @property RIGHT
+		* @static
+		* @final
+		* @public
+		*/
+		public static RIGHT: number = 39;
+
+		/**
+		* A Static property that holds the keycode for the character DOWN
+		* @property DOWN
+		* @static
+		* @final
+		* @public
+		*/
+		public static DOWN: number = 40;
+
+		/**
+		* A Static property that holds the keycode for the character INSERT
+		* @property INSERT
+		* @static
+		* @final
+		* @public
+		*/
+		public static INSERT: number = 45;
+
+		/**
+		* A Static property that holds the keycode for the character DELETE
+		* @property DELETE
+		* @static
+		* @final
+		* @public
+		*/
+		public static DELETE: number = 46;
+
+		/**
+		* A Static property that holds the keycode for the character HELP
+		* @property HELP
+		* @static
+		* @final
+		* @public
+		*/
+		public static HELP: number = 47;
+
+		/**
+		* A Static property that holds the keycode for the character NUM_LOCK
+		* @property NUM_LOCK
+		* @static
+		* @final
+		* @public
+		*/
+		public static NUM_LOCK: number = 144;
+
+	}
 
 }
 
diff --git a/docs/files/src_input_Mouse.ts.html b/docs/files/src_input_Mouse.ts.html
index a0f9082..37621a5 100644
--- a/docs/files/src_input_Mouse.ts.html
+++ b/docs/files/src_input_Mouse.ts.html
@@ -369,393 +369,394 @@ <h1 class="file-heading">File: src/input/Mouse.ts</h1>
 * @module Kiwi
 * @submodule Input
 * 
-*/ 
+*/
 
 module Kiwi.Input {
 
-    /**
-    * Handles the dispatching/management of Mouse Events on a game. When this class is instantiated a MouseCursor object is also created (on this object) which holds the information that is unique to the mouse cursor, although majority of that information is still accessible inside this object.
-    *
-    * @class Mouse
-    * @constructor
-    * @namespace Kiwi.Input
-    * @param game {Kiwi.Game} The game that this mouse manager belongs to.
-    * @return {Kiwi.Input.Mouse} 
-    *
-    */
-    export class Mouse {
-          
-        constructor (game: Kiwi.Game) {
-            this._game = game;
-        }
-
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} &quot;Mouse&quot;
-        * @public
-        */
-        public objType() {
-            return &quot;Mouse&quot;;
-        }
-         
-        /**
-        * The game that this mouse manager belongs to.
-        * @property _game
-        * @type Kiwi.Game
-        * @private
-        */
-        private _game: Kiwi.Game;
-         
-        /**
-        * The HTMLElement that is being used to apply the mouse events to.
-        * @property _domElement
-        * @type HTMLDivElement
-        * @private
-        */
-        private _domElement:HTMLDivElement = null;
-
-        /**  
-        * The numeric value for the LEFT button.
-        * @property LEFT_BUTTON
-        * @type Number
-        * @static
-        * @public
-        * @final
-        * @default 0
-        */
-        public static LEFT_BUTTON: number = 0;
-
-        /**  
-        * The numeric value for the MIDDLE button.
-        * @property MIDDLE_BUTTON
-        * @type Number
-        * @static
-        * @public 
-        * @final
-        * @default 1
-        */
-        public static MIDDLE_BUTTON: number = 1;
-
-        /**  
-        * The numeric value for the RIGHT button.
-        * @property RIGHT_BUTTON
-        * @type Number
-        * @static
-        * @public
-        * @final 
-        * @default 2
-        */
-        public static RIGHT_BUTTON: number = 2;
-         
-        /**
-        * A Signal that dispatches events when the mouse is pressed down on the stage.
-        * @property onDown 
-        * @type Kiwi.Signal
-        * @public
-        */
-        public onDown: Kiwi.Signal;
-        
-        /**
-        * A Signal that dispatches events when the mouse is released from being down on the stage.
-        * @property onUp 
-        * @type Kiwi.Signal
-        * @public
-        */
-        public onUp: Kiwi.Signal;
-
-        /**
-        * A Signal that dispatches events mouse wheel moves.
-        * @property onWheel 
-        * @type Kiwi.Signal
-        * @public
-        */
-        public onWheel: Kiwi.Signal;
-
-        /**
-        * The MouseCursor that is on the stage. This contains the coordinates and information about the cursor.
-        * @property _cursor
-        * @type Kiwi.Input.MouseCursor
-        * @private
-        */
-        private _cursor: Kiwi.Input.MouseCursor;
-
-        /**
-        * Returns the MouseCursor that is being used on the stage. This is READ ONLY.
-        * @property cursor
-        * @type Kiwi.Input.MouseCursor
-        * @private
-        */
-        public get cursor(): Kiwi.Input.MouseCursor {
-            return this._cursor;
-        }
-
-        /** 
-        * This method is executed when the DOM has finished loading and thus the MouseManager can start listening for events.
-        * @method boot
-        * @public
-        */
-        public boot() {
-
-            this._domElement = this._game.stage.container;
-
-            this._cursor = new Kiwi.Input.MouseCursor(this._game);
-            this._cursor.active = true;
-            this._cursor.id = 1;
-            
-            this.onDown = new Kiwi.Signal();
-            this.onUp = new Kiwi.Signal();
-            this.onWheel = new Kiwi.Signal();
-
-            this.start();
-        }
-
-        /**
-        * Indicates whether or not the cursor is currently down. This is READ ONLY.
-        * @property isDown
-        * @type boolean
-        * @default false
-        * @public
-        */
-        public get isDown(): boolean {
-            return this._cursor.isDown;
-        }
-
-        /**
-        * Indicates whether or not the cursor is currently up. This is READ ONLY.
-        * @property isUp
-        * @type boolean
-        * @default true
-        * @public
-        */
-        public get isUp(): boolean {
-            return this._cursor.isUp;
-        }
-
-        /**
-        * Gets the duration in Milliseconds that the mouse cursor has either been up or down for.
-        * @property duration
-        * @type number
-        * @public
-        */
-        public get duration(): number {
-            return this._cursor.duration;
-        }
-        
-        /**
-        * Gets the x coordinate of the mouse cursor.
-        * @property x
-        * @type number
-        * @public
-        */
-        public get x(): number {
-            return this._cursor.x;
-        }
-        
-        /**
-        * Gets the y coordinate of the mouse cursor.
-        * @property y
-        * @type number
-        * @public
-        */
-        public get y(): number {
-            return this._cursor.y;
-        }
-
-        /**
-        * Gets the wheelDeltaX coordinate of the mouse cursors wheel.
-        * @property wheelDeltaX
-        * @type number
-        * @public
-        */
-        public get wheelDeltaX(): number {
-            return this._cursor.wheelDeltaX;
-        }
-
-        /**
-        * Gets the wheelDeltaY coordinate of the mouse cursors wheel.
-        * @property wheelDeltaY
-        * @type number
-        * @public
-        */
-        public get wheelDeltaY(): number {
-            return this._cursor.wheelDeltaY;
-        }
-
-        /**
-        * Indicates if the ctrl key is down.
-        * @property ctrlKey
-        * @type boolean
-        * @default false
-        * @public
-        */
-        public get ctrlKey(): boolean {
-            return this._cursor.ctrlKey;
-        }
-
-        /**
-        * Indicates if the shift key is down.
-        * @property shiftKey
-        * @type boolean
-        * @default false
-        * @public
-        */
-        public get shiftKey(): boolean {
-            return this._cursor.shiftKey;
-        }
-
-        /**
-        * Indicates if the alt key is down.
-        * @property altKey
-        * @type boolean
-        * @default false
-        * @public
-        */
-        public get altKey(): boolean {
-            return this._cursor.altKey;
-        }
-
-        /**
-        * Returns a number indicating the button that was used. This can be used with the STATIC button properties.
-        * @property button
-        * @type number
-        * @public
-        */
-        public get button(): number {
-            return this._cursor.button;
-        }
-         
-        /**
-        * The update loop for the cursor.
-        * @method update
-        * @public
-        */
-        public update() { 
-            this._cursor.update();
-        }
-
-        /**  
-        * Start the mouse event listeners on the game. Automatically called by the boot.
-        * @method start 
-        * @public
-        */
-        public start() {
-            if (this._game.deviceTargetOption === Kiwi.TARGET_BROWSER) {
-                if (Kiwi.DEVICE.ie &amp;&amp; Kiwi.DEVICE.ieVersion &lt; 9) { //remove possibably?
-                    this._domElement.attachEvent(&#x27;onmousedown&#x27;, (event: MouseEvent) =&gt; this.onMouseDown(event));
-                    this._domElement.attachEvent(&#x27;onmousemove&#x27;, (event: MouseEvent) =&gt; this.onMouseMove(event));
-                    this._domElement.attachEvent(&#x27;onmouseup&#x27;, (event: MouseEvent) =&gt; this.onMouseUp(event));
-                    this._domElement.attachEvent(&#x27;onmousewheel&#x27;, (event: WheelEvent) =&gt; this.onMouseWheel(event));
-                } else {
-                    this._domElement.addEventListener(&#x27;mousedown&#x27;, (event: MouseEvent) =&gt; this.onMouseDown(event), true);
-                    this._domElement.addEventListener(&#x27;mousemove&#x27;, (event: MouseEvent) =&gt; this.onMouseMove(event), true);
-                    this._domElement.addEventListener(&#x27;mouseup&#x27;, (event: MouseEvent) =&gt; this.onMouseUp(event), true);
-                    this._domElement.addEventListener(&#x27;mousewheel&#x27;, (event: WheelEvent) =&gt; this.onMouseWheel(event), true);
-                    this._domElement.addEventListener(&#x27;DOMMouseScroll&#x27;, (event: WheelEvent) =&gt; this.onMouseWheel(event), true);
-                }
-            } else if (this._game.deviceTargetOption === Kiwi.TARGET_COCOON) {
-                this._game.stage.canvas.addEventListener(&#x27;mousedown&#x27;, (event: MouseEvent) =&gt; this.onMouseDown(event), true);
-                this._game.stage.canvas.addEventListener(&#x27;mousemove&#x27;, (event: MouseEvent) =&gt; this.onMouseMove(event), true);
-                this._game.stage.canvas.addEventListener(&#x27;mouseup&#x27;, (event: MouseEvent) =&gt; this.onMouseUp(event), true);
-                this._game.stage.canvas.addEventListener(&#x27;mousewheel&#x27;, (event: WheelEvent) =&gt; this.onMouseWheel(event), true);
-                this._game.stage.canvas.addEventListener(&#x27;DOMMouseScroll&#x27;, (event: WheelEvent) =&gt; this.onMouseWheel(event), true);
-            }
-        }
-
-        /**  
-        * Stops the mouse event listeners from working. Useful if you no longer want the mouse to &#x27;work&#x27;/be listened to.
-        * @method stop 
-        * @public
-        */
-        public stop() {
-            if (this._game.deviceTargetOption === Kiwi.TARGET_BROWSER) {
-                this._domElement.removeEventListener(&#x27;mousedown&#x27;, (event: MouseEvent) =&gt; this.onMouseDown(event), false);
-                this._domElement.removeEventListener(&#x27;mousedown&#x27;, this.onMouseDown, false);
-                this._domElement.removeEventListener(&#x27;mousemove&#x27;, this.onMouseMove, false);
-                this._domElement.removeEventListener(&#x27;mouseup&#x27;, this.onMouseUp, false);
-                this._domElement.removeEventListener(&#x27;mousewheel&#x27;, this.onMouseWheel, false);
-                this._domElement.removeEventListener(&#x27;DOMMouseScroll&#x27;, this.onMouseWheel, false);
-            }
-        }
-
-        /**  
-        * Method that gets fired when the mouse is pressed on the stage.
-        * @method onMouseDown
-        * @param {MouseEvent} event. 
-        * @private
-        */
-        private onMouseDown(event: MouseEvent) { 
-            this._cursor.start(event); 
-            this.onDown.dispatch(this._cursor.x, this._cursor.y, this._cursor.timeDown, this._cursor.timeUp, this.duration, this._cursor); 
-        }
-
-        /**  
-        * Method that gets fired when the mouse moves anywhere on the stage.
-        * @method onMouseMove
-        * @param {MouseEvent} event. 
-        * @private
-        */
-        private onMouseMove(event: MouseEvent) {
-            event.preventDefault();
-            this._cursor.move(event);
-        }
-
-        /**  
-        * Method that gets fired when the mouse is released on the stage.
-        * @method onMouseUp
-        * @param {MouseEvent} event. 
-        * @private
-        */
-        private onMouseUp(event: MouseEvent) {
-            this._cursor.stop(event);
-            this.onUp.dispatch(this._cursor.x, this._cursor.y, this._cursor.timeDown, this._cursor.timeUp, this.duration, this._cursor); 
-        }
-        
-        /**  
-        * Method that gets fired when the mousewheel is moved.
-        * @method onMouseWheel
-        * @param {MouseEvent} event. 
-        * @private
-        */
-        private onMouseWheel(event: WheelEvent) {
-            this._cursor.wheel(event);
-            this.onWheel.dispatch(this._cursor.wheelDeltaX, this._cursor.wheelDeltaY, this._cursor);
-        }
-
-        /**  
-        * Returns a boolean indicating if the mouse was &#x27;justPressed&#x27; within a certain timeframe. The default timeframe is 200 milliseconds.
-        * @method justPressed
-        * @param [duration=200] {Number} The timeframe that it could have occured in. 
-        * @return {boolean}
-        * @public
-        */
-        public justPressed(duration: number = this._cursor.justPressedRate): boolean { 
-            return this._cursor.justPressed(duration);
-        }
-
-        /**  
-        * Returns a boolean indicating if the mouse was &#x27;justReleased&#x27; within a certain timeframe. The default timeframe is 200 milliseconds.
-        * @method justReleased
-        * @param [duration=200] {Number} The timeframe that it could have occured in.. 
-        * @return {boolean}
-        * @public
-        */
-        public justReleased(duration: number = this._cursor.justReleasedRate): boolean { 
-            return this._cursor.justReleased(duration); 
-        }
-
-        /** 
-        * Runs the Reset method on the MouseCursor.
-        * @method reset
-        * @public
-        */
-        public reset() {
-            this._cursor.reset();
-        }
-
-    }
+	/**
+	* Handles the dispatching/management of Mouse Events on a game. When this class is instantiated a MouseCursor object is also created (on this object) which holds the information that is unique to the mouse cursor, although majority of that information is still accessible inside this object.
+	*
+	* @class Mouse
+	* @constructor
+	* @namespace Kiwi.Input
+	* @param game {Kiwi.Game} The game that this mouse manager belongs to.
+	* @return {Kiwi.Input.Mouse} 
+	*
+	*/
+	export class Mouse {
+
+		constructor (game: Kiwi.Game) {
+			this._game = game;
+		}
+
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} &quot;Mouse&quot;
+		* @public
+		*/
+		public objType() {
+			return &quot;Mouse&quot;;
+		}
+
+		/**
+		* The game that this mouse manager belongs to.
+		* @property _game
+		* @type Kiwi.Game
+		* @private
+		*/
+		private _game: Kiwi.Game;
+
+		/**
+		* The HTMLElement that is being used to apply the mouse events to.
+		* @property _domElement
+		* @type HTMLDivElement
+		* @private
+		*/
+		private _domElement:HTMLDivElement = null;
+
+		/**  
+		* The numeric value for the LEFT button.
+		* @property LEFT_BUTTON
+		* @type Number
+		* @static
+		* @public
+		* @final
+		* @default 0
+		*/
+		public static LEFT_BUTTON: number = 0;
+
+		/**  
+		* The numeric value for the MIDDLE button.
+		* @property MIDDLE_BUTTON
+		* @type Number
+		* @static
+		* @public 
+		* @final
+		* @default 1
+		*/
+		public static MIDDLE_BUTTON: number = 1;
+
+		/**  
+		* The numeric value for the RIGHT button.
+		* @property RIGHT_BUTTON
+		* @type Number
+		* @static
+		* @public
+		* @final 
+		* @default 2
+		*/
+		public static RIGHT_BUTTON: number = 2;
+
+		/**
+		* A Signal that dispatches events when the mouse is pressed down on the stage.
+		* @property onDown 
+		* @type Kiwi.Signal
+		* @public
+		*/
+		public onDown: Kiwi.Signal;
+
+		/**
+		* A Signal that dispatches events when the mouse is released from being down on the stage.
+		* @property onUp 
+		* @type Kiwi.Signal
+		* @public
+		*/
+		public onUp: Kiwi.Signal;
+
+		/**
+		* A Signal that dispatches events mouse wheel moves.
+		* @property onWheel 
+		* @type Kiwi.Signal
+		* @public
+		*/
+		public onWheel: Kiwi.Signal;
+
+		/**
+		* The MouseCursor that is on the stage. This contains the coordinates and information about the cursor.
+		* @property _cursor
+		* @type Kiwi.Input.MouseCursor
+		* @private
+		*/
+		private _cursor: Kiwi.Input.MouseCursor;
+
+		/**
+		* Returns the MouseCursor that is being used on the stage. This is READ ONLY.
+		* @property cursor
+		* @type Kiwi.Input.MouseCursor
+		* @private
+		*/
+		public get cursor(): Kiwi.Input.MouseCursor {
+			return this._cursor;
+		}
+
+		/** 
+		* This method is executed when the DOM has finished loading and thus the MouseManager can start listening for events.
+		* @method boot
+		* @public
+		*/
+		public boot() {
+
+			this._domElement = this._game.stage.container;
+
+			this._cursor = new Kiwi.Input.MouseCursor(this._game);
+			this._cursor.active = true;
+			this._cursor.id = 1;
+			
+			this.onDown = new Kiwi.Signal();
+			this.onUp = new Kiwi.Signal();
+			this.onWheel = new Kiwi.Signal();
+
+			this.start();
+		}
+
+		/**
+		* Indicates whether or not the cursor is currently down. This is READ ONLY.
+		* @property isDown
+		* @type boolean
+		* @default false
+		* @public
+		*/
+		public get isDown(): boolean {
+			return this._cursor.isDown;
+		}
+
+		/**
+		* Indicates whether or not the cursor is currently up. This is READ ONLY.
+		* @property isUp
+		* @type boolean
+		* @default true
+		* @public
+		*/
+		public get isUp(): boolean {
+			return this._cursor.isUp;
+		}
+
+		/**
+		* Gets the duration in Milliseconds that the mouse cursor has either been up or down for.
+		* @property duration
+		* @type number
+		* @public
+		*/
+		public get duration(): number {
+			return this._cursor.duration;
+		}
+
+		/**
+		* Gets the x coordinate of the mouse cursor.
+		* @property x
+		* @type number
+		* @public
+		*/
+		public get x(): number {
+			return this._cursor.x;
+		}
+
+		/**
+		* Gets the y coordinate of the mouse cursor.
+		* @property y
+		* @type number
+		* @public
+		*/
+		public get y(): number {
+			return this._cursor.y;
+		}
+
+		/**
+		* Gets the wheelDeltaX coordinate of the mouse cursors wheel.
+		* @property wheelDeltaX
+		* @type number
+		* @public
+		*/
+		public get wheelDeltaX(): number {
+			return this._cursor.wheelDeltaX;
+		}
+
+		/**
+		* Gets the wheelDeltaY coordinate of the mouse cursors wheel.
+		* @property wheelDeltaY
+		* @type number
+		* @public
+		*/
+		public get wheelDeltaY(): number {
+			return this._cursor.wheelDeltaY;
+		}
+
+		/**
+		* Indicates if the ctrl key is down.
+		* @property ctrlKey
+		* @type boolean
+		* @default false
+		* @public
+		*/
+		public get ctrlKey(): boolean {
+			return this._cursor.ctrlKey;
+		}
+
+		/**
+		* Indicates if the shift key is down.
+		* @property shiftKey
+		* @type boolean
+		* @default false
+		* @public
+		*/
+		public get shiftKey(): boolean {
+			return this._cursor.shiftKey;
+		}
+
+		/**
+		* Indicates if the alt key is down.
+		* @property altKey
+		* @type boolean
+		* @default false
+		* @public
+		*/
+		public get altKey(): boolean {
+			return this._cursor.altKey;
+		}
+
+		/**
+		* Returns a number indicating the button that was used. This can be used with the STATIC button properties.
+		* @property button
+		* @type number
+		* @public
+		*/
+		public get button(): number {
+			return this._cursor.button;
+		}
+
+		/**
+		* The update loop for the cursor.
+		* @method update
+		* @public
+		*/
+		public update() { 
+			this._cursor.update();
+		}
+
+		/**  
+		* Start the mouse event listeners on the game. Automatically called by the boot.
+		* @method start 
+		* @public
+		*/
+		public start() {
+			if (this._game.deviceTargetOption === Kiwi.TARGET_BROWSER) {
+				if (Kiwi.DEVICE.ie &amp;&amp; Kiwi.DEVICE.ieVersion &lt; 9) { //remove possibably?
+					this._domElement.attachEvent(&#x27;onmousedown&#x27;, (event: MouseEvent) =&gt; this.onMouseDown(event));
+					this._domElement.attachEvent(&#x27;onmousemove&#x27;, (event: MouseEvent) =&gt; this.onMouseMove(event));
+					this._domElement.attachEvent(&#x27;onmouseup&#x27;, (event: MouseEvent) =&gt; this.onMouseUp(event));
+					this._domElement.attachEvent(&#x27;onmousewheel&#x27;, (event: WheelEvent) =&gt; this.onMouseWheel(event));
+				} else {
+					this._domElement.addEventListener(&#x27;mousedown&#x27;, (event: MouseEvent) =&gt; this.onMouseDown(event), true);
+					this._domElement.addEventListener(&#x27;mousemove&#x27;, (event: MouseEvent) =&gt; this.onMouseMove(event), true);
+					this._domElement.addEventListener(&#x27;mouseup&#x27;, (event: MouseEvent) =&gt; this.onMouseUp(event), true);
+					this._domElement.addEventListener(&#x27;mousewheel&#x27;, (event: WheelEvent) =&gt; this.onMouseWheel(event), true);
+					this._domElement.addEventListener(&#x27;DOMMouseScroll&#x27;, (event: WheelEvent) =&gt; this.onMouseWheel(event), true);
+				}
+			} else if (this._game.deviceTargetOption === Kiwi.TARGET_COCOON) {
+				this._game.stage.canvas.addEventListener(&#x27;mousedown&#x27;, (event: MouseEvent) =&gt; this.onMouseDown(event), true);
+				this._game.stage.canvas.addEventListener(&#x27;mousemove&#x27;, (event: MouseEvent) =&gt; this.onMouseMove(event), true);
+				this._game.stage.canvas.addEventListener(&#x27;mouseup&#x27;, (event: MouseEvent) =&gt; this.onMouseUp(event), true);
+				this._game.stage.canvas.addEventListener(&#x27;mousewheel&#x27;, (event: WheelEvent) =&gt; this.onMouseWheel(event), true);
+				this._game.stage.canvas.addEventListener(&#x27;DOMMouseScroll&#x27;, (event: WheelEvent) =&gt; this.onMouseWheel(event), true);
+			}
+		}
+
+		/**  
+		* Stops the mouse event listeners from working. Useful if you no longer want the mouse to &#x27;work&#x27;/be listened to.
+		* @method stop 
+		* @public
+		*/
+		public stop() {
+			if (this._game.deviceTargetOption === Kiwi.TARGET_BROWSER) {
+				this._domElement.removeEventListener(&#x27;mousedown&#x27;, (event: MouseEvent) =&gt; this.onMouseDown(event), false);
+				this._domElement.removeEventListener(&#x27;mousedown&#x27;, this.onMouseDown, false);
+				this._domElement.removeEventListener(&#x27;mousemove&#x27;, this.onMouseMove, false);
+				this._domElement.removeEventListener(&#x27;mouseup&#x27;, this.onMouseUp, false);
+				this._domElement.removeEventListener(&#x27;mousewheel&#x27;, this.onMouseWheel, false);
+				this._domElement.removeEventListener(&#x27;DOMMouseScroll&#x27;, this.onMouseWheel, false);
+			}
+		}
+
+		/**  
+		* Method that gets fired when the mouse is pressed on the stage.
+		* @method onMouseDown
+		* @param {MouseEvent} event. 
+		* @private
+		*/
+		private onMouseDown(event: MouseEvent) { 
+			this._cursor.start(event); 
+			this.onDown.dispatch(this._cursor.x, this._cursor.y, this._cursor.timeDown, this._cursor.timeUp, this.duration, this._cursor); 
+		}
+
+		/**  
+		* Method that gets fired when the mouse moves anywhere on the stage.
+		* @method onMouseMove
+		* @param {MouseEvent} event. 
+		* @private
+		*/
+		private onMouseMove(event: MouseEvent) {
+			event.preventDefault();
+			this._cursor.move(event);
+		}
+
+		/**  
+		* Method that gets fired when the mouse is released on the stage.
+		* @method onMouseUp
+		* @param {MouseEvent} event. 
+		* @private
+		*/
+		private onMouseUp(event: MouseEvent) {
+			this._cursor.stop(event);
+			this.onUp.dispatch(this._cursor.x, this._cursor.y, this._cursor.timeDown, this._cursor.timeUp, this.duration, this._cursor); 
+		}
+
+		/**  
+		* Method that gets fired when the mousewheel is moved.
+		* @method onMouseWheel
+		* @param {MouseEvent} event. 
+		* @private
+		*/
+		private onMouseWheel(event: WheelEvent) {
+			this._cursor.wheel(event);
+			this.onWheel.dispatch(this._cursor.wheelDeltaX, this._cursor.wheelDeltaY, this._cursor);
+		}
+
+		/**  
+		* Returns a boolean indicating if the mouse was &#x27;justPressed&#x27; within a certain timeframe. The default timeframe is 200 milliseconds.
+		* @method justPressed
+		* @param [duration=200] {Number} The timeframe that it could have occured in. 
+		* @return {boolean}
+		* @public
+		*/
+		public justPressed(duration: number = this._cursor.justPressedRate): boolean { 
+			return this._cursor.justPressed(duration);
+		}
+
+		/**  
+		* Returns a boolean indicating if the mouse was &#x27;justReleased&#x27; within a certain timeframe. The default timeframe is 200 milliseconds.
+		* @method justReleased
+		* @param [duration=200] {Number} The timeframe that it could have occured in.. 
+		* @return {boolean}
+		* @public
+		*/
+		public justReleased(duration: number = this._cursor.justReleasedRate): boolean { 
+			return this._cursor.justReleased(duration); 
+		}
+
+		/** 
+		* Runs the Reset method on the MouseCursor.
+		* @method reset
+		* @public
+		*/
+		public reset() {
+			this._cursor.reset();
+		}
+
+	}
 
 }
+
     </pre>
 </div>
 
diff --git a/docs/files/src_input_MouseCursor.ts.html b/docs/files/src_input_MouseCursor.ts.html
index e21827a..b7c2f50 100644
--- a/docs/files/src_input_MouseCursor.ts.html
+++ b/docs/files/src_input_MouseCursor.ts.html
@@ -369,161 +369,161 @@ <h1 class="file-heading">File: src/input/MouseCursor.ts</h1>
 * @module Kiwi
 * @submodule Input
 * 
-*/ 
+*/
 
 module Kiwi.Input {
-    
-    /**
-    * Holds the information about a Mouse Cursor, such as the position of the
-    * cursor, the mouse wheel&#x27;s delta, the button that was used, e.t.c.
-    * Note: A mouse cursor is always active.
-    *
-    * @class MouseCursor
-    * @namespace Kiwi.Input
-    * @extends Pointer
-    */
-    export class MouseCursor extends Pointer {
-
-        /**
-        * The type of object this class is.
-        * @method objType
-        * @return {string} &quot;MouseCursor&quot;
-        * @public
-        */
-        public objType(): string {
-            return &quot;MouseCursor&quot;;
-        }
-
-        /**
-        * The offset of the mouse wheel on the X axis.
-        * @property wheelDeltaX
-        * @type number
-        * @default 0 
-        * @public
-        */
-        public wheelDeltaX: number = 0;
-
-        /**
-        * The offset of the mouse wheel on the Y axis.
-        * @property wheelDeltaY
-        * @type number
-        * @default 0 
-        * @public
-        */
-        public wheelDeltaY: number = 0;
-
-        /**
-        * If the ctrl key is down.
-        * @property ctrlKey
-        * @type boolean
-        * @public
-        */
-        public ctrlKey: boolean;
-
-        /**
-        * If the shift key is down.
-        * @property shiftKey
-        * @type boolean
-        * @public
-        */
-        public shiftKey: boolean;
-
-        /**
-        * If the alt key is down.
-        * @property altKey
-        * @type boolean
-        * @public
-        */
-        public altKey: boolean;
-
-        /**
-        * The button that got pressed. Eg. If the LEFT mouse button was pressed this number would be 0
-        * @property button
-        * @type number
-        * @public
-        */
-        public button: number;
-
-        /**
-        * Indicates if the &quot;preventDefault&quot; method should be executed whenever a &#x27;down&#x27; mouse event occurs.
-        * @property preventDown
-        * @type boolean
-        * @public
-        */
-        public preventDown: boolean = true;
-
-        /**
-        * Indicates if the &quot;preventDefault&quot; method should be executed whenever a &#x27;up&#x27; mouse event occurs.
-        * @property preventUp
-        * @type boolean
-        * @public
-        */
-        public preventUp: boolean = true;
-
-        /**
-        * Indicates if the &quot;preventDefault&quot; method should be executed whenever a &#x27;wheel&#x27; mouse event occurs.
-        * @property preventWheel
-        * @type boolean
-        * @public
-        */
-        public preventWheel: boolean = true;
-
-        /**
-        * Gets executed when the mouse cursor gets initally pressed.
-        * @method start
-        * @param {event} event
-        * @public
-        */
-        public start(event) {
-
-            if (this.preventDown)  event.preventDefault();
-            
-            this.ctrlKey = event.ctrlKey;
-            this.shiftKey = event.shiftKey;
-            this.altKey = event.altKey;
-            this.button = event.button;
-
-            super.start(event);
-        }
-        
-        /**
-        * Gets executed when the mouse cursor gets initally released.
-        * @method stop
-        * @param {event} event
-        * @public
-        */
-        public stop(event) {
-
-            if (this.preventUp)  event.preventDefault();
-
-            this.move(event);
-            super.stop(event);
-        }
-
-        /**
-        * When the mouse wheel event fires and the mouse&#x27;s delta changes.
-        * @method wheel
-        * @param {event} event
-        * @public
-        */
-        public wheel(event) { 
-
-            if (this.preventWheel)  event.preventDefault();
-
-            if (event[&#x27;wheelDeltaX&#x27;]) {
-                this.wheelDeltaX = event[&#x27;wheelDeltaX&#x27;];
-            } else {
-                this.wheelDeltaX = event.deltaX;
-            }
-
-            if (event[&#x27;wheelDeltaY&#x27;]) {
-                this.wheelDeltaY = event[&#x27;wheelDeltaY&#x27;];
-            } else {
-                this.wheelDeltaY = event.deltaY;
-            }
-        }
-
-    }
+
+	/**
+	* Holds the information about a Mouse Cursor, such as the position of the
+	* cursor, the mouse wheel&#x27;s delta, the button that was used, e.t.c.
+	* Note: A mouse cursor is always active.
+	*
+	* @class MouseCursor
+	* @namespace Kiwi.Input
+	* @extends Pointer
+	*/
+	export class MouseCursor extends Pointer {
+
+		/**
+		* The type of object this class is.
+		* @method objType
+		* @return {string} &quot;MouseCursor&quot;
+		* @public
+		*/
+		public objType(): string {
+			return &quot;MouseCursor&quot;;
+		}
+
+		/**
+		* The offset of the mouse wheel on the X axis.
+		* @property wheelDeltaX
+		* @type number
+		* @default 0 
+		* @public
+		*/
+		public wheelDeltaX: number = 0;
+
+		/**
+		* The offset of the mouse wheel on the Y axis.
+		* @property wheelDeltaY
+		* @type number
+		* @default 0 
+		* @public
+		*/
+		public wheelDeltaY: number = 0;
+
+		/**
+		* If the ctrl key is down.
+		* @property ctrlKey
+		* @type boolean
+		* @public
+		*/
+		public ctrlKey: boolean;
+
+		/**
+		* If the shift key is down.
+		* @property shiftKey
+		* @type boolean
+		* @public
+		*/
+		public shiftKey: boolean;
+
+		/**
+		* If the alt key is down.
+		* @property altKey
+		* @type boolean
+		* @public
+		*/
+		public altKey: boolean;
+
+		/**
+		* The button that got pressed. Eg. If the LEFT mouse button was pressed this number would be 0
+		* @property button
+		* @type number
+		* @public
+		*/
+		public button: number;
+
+		/**
+		* Indicates if the &quot;preventDefault&quot; method should be executed whenever a &#x27;down&#x27; mouse event occurs.
+		* @property preventDown
+		* @type boolean
+		* @public
+		*/
+		public preventDown: boolean = true;
+
+		/**
+		* Indicates if the &quot;preventDefault&quot; method should be executed whenever a &#x27;up&#x27; mouse event occurs.
+		* @property preventUp
+		* @type boolean
+		* @public
+		*/
+		public preventUp: boolean = true;
+
+		/**
+		* Indicates if the &quot;preventDefault&quot; method should be executed whenever a &#x27;wheel&#x27; mouse event occurs.
+		* @property preventWheel
+		* @type boolean
+		* @public
+		*/
+		public preventWheel: boolean = true;
+
+		/**
+		* Gets executed when the mouse cursor gets initally pressed.
+		* @method start
+		* @param {event} event
+		* @public
+		*/
+		public start(event) {
+
+			if (this.preventDown)  event.preventDefault();
+
+			this.ctrlKey = event.ctrlKey;
+			this.shiftKey = event.shiftKey;
+			this.altKey = event.altKey;
+			this.button = event.button;
+
+			super.start(event);
+		}
+
+		/**
+		* Gets executed when the mouse cursor gets initally released.
+		* @method stop
+		* @param {event} event
+		* @public
+		*/
+		public stop(event) {
+
+			if (this.preventUp)  event.preventDefault();
+
+			this.move(event);
+			super.stop(event);
+		}
+
+		/**
+		* When the mouse wheel event fires and the mouse&#x27;s delta changes.
+		* @method wheel
+		* @param {event} event
+		* @public
+		*/
+		public wheel(event) { 
+
+			if (this.preventWheel)  event.preventDefault();
+
+			if (event[&#x27;wheelDeltaX&#x27;]) {
+				this.wheelDeltaX = event[&#x27;wheelDeltaX&#x27;];
+			} else {
+				this.wheelDeltaX = event.deltaX;
+			}
+
+			if (event[&#x27;wheelDeltaY&#x27;]) {
+				this.wheelDeltaY = event[&#x27;wheelDeltaY&#x27;];
+			} else {
+				this.wheelDeltaY = event.deltaY;
+			}
+		}
+
+	}
 
 }
 
diff --git a/docs/files/src_input_Pointer.ts.html b/docs/files/src_input_Pointer.ts.html
index fec419b..fc54f90 100644
--- a/docs/files/src_input_Pointer.ts.html
+++ b/docs/files/src_input_Pointer.ts.html
@@ -369,407 +369,407 @@ <h1 class="file-heading">File: src/input/Pointer.ts</h1>
 * @module Kiwi
 * @submodule Input
 * 
-*/ 
+*/
 
 module Kiwi.Input {
 
-    /**
-    * Is a generic class that holds the properties/methods that are common across various different methods of inputs from the user, mainly between Touch and Mouse based events. This abstract class and such it is suppose to be extended from for individual implementations. 
-    *
-    * @class Pointer
-    * @constructor
-    * @namespace Kiwi.Input
-    * @param {Kiwi.Game} game
-    * @return {Kiwi.Input.Pointer}
-    *
-    */
-    export class Pointer {
-
-        constructor(game:Kiwi.Game) {
-            this._game = game;
-            this.point = new Kiwi.Geom.Point();
-            this.circle = new Kiwi.Geom.Circle(0, 0, 1);
-            this.startPoint = new Kiwi.Geom.Point();
-            this.endPoint = new Kiwi.Geom.Point();
-        }
-
-        /**
-        * The type of object this class is.
-        * @method objType
-        * @return {string} &quot;Pointer&quot;
-        * @public
-        */
-        public objType():string {
-            return &quot;Pointer&quot;;
-        }
-
-        /**
-        * The game that this pointer belongs to.
-        * @property _game
-        * @type Game
-        * @private
-        */
-        private _game: Kiwi.Game;
-
-        /**
-        * Get the game that this pointer belongs to.
-        * @type Game
-        * @public
-        */
-        public get game(): Kiwi.Game {
-            return this._game;
-        }
-
-        /**
-        * The unique identifier for this pointer.
-        * @property _id
-        * @type number
-        * @private
-        */
-        public id: number;
-
-        /**
-        * The horizontal coordinate of point relative to the game element
-        * @property x
-        * @type Number
-        * @default -1
-        * @public
-        */
-        public x: number = -1;
-
-        /**
-        * The vertical coordinate of point relative to the game element
-        * @property y
-        * @type Number
-        * @default -1
-        * @public
-        */
-        public y: number = -1;
-
-        /**
-        * The horizontal coordinate of point relative to the viewport in pixels, excluding any scroll offset
-        * @property clientX
-        * @type Number
-        * @default -1
-        * @public
-        */
-        public clientX: number = -1;
-
-        /**
-        * The vertical coordinate of point relative to the viewport in pixels, excluding any scroll offset
-        * @property clientY
-        * @type Number
-        * @default -1
-        * @public
-        */
-        public clientY: number = -1;
-
-        /**
-        * The horizontal coordinate of point relative to the viewport in pixels, including any scroll offset
-        * @property pageX
-        * @type Number
-        * @default -1
-        * @public
-        */
-        public pageX: number = -1;
-
-        /**
-        * The vertical coordinate of point relative to the viewport in pixels, including any scroll offset
-        * @property pageY
-        * @type Number
-        * @default -1
-        * @public
-        */
-        public pageY: number = -1;
-
-        /**
-        * The horizontal coordinate of point relative to the screen in pixels
-        * @property screenX
-        * @type Number
-        * @default -1
-        * @public
-        */
-        public screenX: number = -1;
-
-        /**
-        * The vertical coordinate of point relative to the screen in pixels
-        * @property screenY
-        * @type Number
-        * @default -1
-        * @public
-        */
-        public screenY: number = -1;
-
-        /**
-        * The point that this pointer is at. Same coordinates as X/Y properties.
-        * @property point
-        * @type Kiwi.Geom.Point
-        * @public
-        */
-        public point: Kiwi.Geom.Point;
-
-        /**
-        * A circle that is representative of the area this point covers.
-        * @property circle
-        * @type Kiwi.Geom.Circle
-        * @public
-        */
-        public circle: Kiwi.Geom.Circle;
-
-        /**
-        * Indicates if this pointer is currently down.
-        * @property isDown
-        * @type boolean
-        * @default false
-        * @public
-        */
-        public isDown: boolean = false;
-
-        /**
-        * Indicates if this pointer is currently up.
-        * @property isUp
-        * @default true
-        * @type boolean
-        * @public
-        */
-        public isUp: boolean = true;
-
-        /**
-        * Indicates if this pointer is currently within the game.
-        * @property withinGame
-        * @type boolean
-        * @default false
-        * @public
-        */
-        public withinGame: boolean = false;
-
-        /**
-        * Indicates if this pointer is active. Note a mouse is always &#x27;active&#x27; where as a finger is only active when it is down.
-        * @property active
-        * @type boolean
-        * @default false
-        * @public
-        */
-        public active: boolean = false;
-
-        /**
-        * Indicates the time that the pointer was pressed initially.
-        * @property timeDown
-        * @type number
-        * @default 0
-        * @public
-        */
-        public timeDown: number = 0;
-
-        /**
-        * Indicates the time that the pointer was released initially.
-        * @property timeUp
-        * @type number
-        * @default 0
-        * @public
-        */
-        public timeUp: number = 0;
-
-        /**
-        * The duration that the pointer has been down for in milliseconds.
-        * @property duration
-        * @type number
-        * @default 0
-        * @public
-        */
-        public duration: number = 0;
-
-        /**
-        * The duration that the pointer has been down for in frames.
-        * @property frameDuration
-        * @type number
-        * @default 0
-        * @public
-        */
-        public frameDuration: number = 0;
-
-        /**
-        * A time that is used to calculate if someone justPressed the pointer.
-        * @property justPressedRate
-        * @type number
-        * @defeault 200
-        * @public
-        */
-        public justPressedRate: number = 200;
-
-        /**
-        * A time that is used to calculate if someone justReleased the pointer.
-        * @property justReleasedRate
-        * @type number
-        * @default 200
-        * @public
-        */
-        public justReleasedRate: number = 200;
-
-        /**
-        * The points inital coordinates when pressed down.
-        * @property startPoint
-        * @type Kiwi.Geom.Point
-        * @public
-        */
-        public startPoint: Kiwi.Geom.Point;
-
-        /**
-        * The coordinates where the user released the pointer.
-        * @property endPoint
-        * @type Kiwi.Geom.Point
-        * @public
-        */
-        public endPoint: Kiwi.Geom.Point;
-
-        /**
-        * The method that gets executed when the pointer presses/initially goes down on the screen.
-        * From the event passed the coordinates are calculated.
-        * @method start
-        * @param {event} event
-        * @public
-        */
-        public start(event) {
-            this.move(event); 
-            this.startPoint.setTo(this.x, this.y);
-            this.frameDuration = 0;
-            this.withinGame = true;
-            this.isDown = true;
-            this.isUp = false;
-            this.timeDown = this.game.time.now();
-        }
-
-        /**
-        * The stop method is to be called when the pointer gets released initially. 
-        * @method stop
-        * @param {event} event
-        * @public
-        */
-        public stop(event) {
-            this.withinGame = false;
-            this.endPoint.setTo(this.x, this.y);
-            this.isDown = false;
-            this.isUp = true;
-
-            this.timeUp = this.game.time.now();
-            this.duration = this.timeUp - this.timeDown;
-        }
-
-        /**
-        * Used to get the cooridnates of a pointer and inputs them to the correct properties.  
-        * @method move
-        * @param {event} event
-        * @public
-        */
-        public move(event) { 
-            this.clientX = event.clientX;
-            this.clientY = event.clientY;
-
-            this.pageX = event.pageX;
-            this.pageY = event.pageY;
-
-            this.screenX = event.screenX;
-            this.screenY = event.screenY;
-
-            this.x = (this.pageX - this.game.stage.offset.x) * this.game.stage.scaleX;
-            this.y = (this.pageY - this.game.stage.offset.y) * this.game.stage.scaleY;
-
-            this.point.setTo(this.x, this.y);
-            this.circle.x = this.x;
-            this.circle.y = this.y;
-
-            this.duration = this.game.time.now() - this.timeDown;
-        }
-
-        /**
-        * Indicates if the pointer was just pressed. This is based of the justPressedRate unless otherwise specifieds.
-        * @method justPressed
-        * @param {Number} duration
-        * @return boolean
-        * @public
-        */
-        public justPressed(duration: number = this.justPressedRate): boolean {
-
-            if (this.isDown === true &amp;&amp; (this.timeDown + duration) &gt; this._game.time.now()) {
-                return true;
-            } else {
-                return false;
-            }
-
-        }
-
-        /**
-        * Indicates if the pointer was just released. This is based of the justReleasedRate unless otherwise specified.
-        * @method justReleased
-        * @param {Number} duration
-        * @return boolean
-        * @public
-        */
-        public justReleased(duration: number = this.justReleasedRate): boolean {
-
-            if (this.isUp === true &amp;&amp; (this.timeUp + duration) &gt; this._game.time.now()) {
-                return true;
-            } else {
-                return false;
-            }
-
-        }
-
-        /**
-        * READ ONLY: Indicates if this pointer was pressed on the last frame or not. 
-        * This is only true on the frame that the point was &#x27;justPressed&#x27; and is not a constant like &#x27;isDown&#x27;
-        *
-        * @property pressed
-        * @type boolean
-        * @readOnly
-        * @public
-        */
-        public get pressed():boolean {
-            return ( this.timeDown &gt;= this._game.time.now() - this._game.time.delta() );
-        }
-        
-
-        /**
-        * READ ONLY: Indicates if this pointer was released on the last frame or not. 
-        * This is only true on the frame that the point was &#x27;justReleased&#x27; and is not a constant like &#x27;isUp&#x27;
-        *
-        * @property released
-        * @type boolean
-        * @readOnly
-        * @public
-        */
-        public get released(): boolean {
-            return ( this.timeUp &gt;= this._game.time.now() - this._game.time.delta() );
-        }
-
-        
-        /**
-        * Resets the pointer properties to the default ones. Assumes that the pointer is no longer down.
-        * @method reset
-        * @public
-        */
-        public reset() {
-            this.isDown = false;
-            this.isUp = true;
-            this.timeDown = 0;
-            this.timeUp = 0;
-            this.duration = 0;
-            this.frameDuration = 0;
-        }
-
-        /**
-        * The update loop for the pointer. Used only if down to update the duration.
-        * @method update
-        * @public
-        */
-        public update() {
-            if (this.isDown === true) {
-                this.frameDuration ++;
-                this.duration = this._game.time.now() - this.timeDown;
-            } 
-        }
-
-    }
+	/**
+	* Is a generic class that holds the properties/methods that are common across various different methods of inputs from the user, mainly between Touch and Mouse based events. This abstract class and such it is suppose to be extended from for individual implementations. 
+	*
+	* @class Pointer
+	* @constructor
+	* @namespace Kiwi.Input
+	* @param {Kiwi.Game} game
+	* @return {Kiwi.Input.Pointer}
+	*
+	*/
+	export class Pointer {
+
+		constructor(game:Kiwi.Game) {
+			this._game = game;
+			this.point = new Kiwi.Geom.Point();
+			this.circle = new Kiwi.Geom.Circle(0, 0, 1);
+			this.startPoint = new Kiwi.Geom.Point();
+			this.endPoint = new Kiwi.Geom.Point();
+		}
+
+		/**
+		* The type of object this class is.
+		* @method objType
+		* @return {string} &quot;Pointer&quot;
+		* @public
+		*/
+		public objType():string {
+			return &quot;Pointer&quot;;
+		}
+
+		/**
+		* The game that this pointer belongs to.
+		* @property _game
+		* @type Game
+		* @private
+		*/
+		private _game: Kiwi.Game;
+
+		/**
+		* Get the game that this pointer belongs to.
+		* @type Game
+		* @public
+		*/
+		public get game(): Kiwi.Game {
+			return this._game;
+		}
+
+		/**
+		* The unique identifier for this pointer.
+		* @property _id
+		* @type number
+		* @private
+		*/
+		public id: number;
+
+		/**
+		* The horizontal coordinate of point relative to the game element
+		* @property x
+		* @type Number
+		* @default -1
+		* @public
+		*/
+		public x: number = -1;
+
+		/**
+		* The vertical coordinate of point relative to the game element
+		* @property y
+		* @type Number
+		* @default -1
+		* @public
+		*/
+		public y: number = -1;
+
+		/**
+		* The horizontal coordinate of point relative to the viewport in pixels, excluding any scroll offset
+		* @property clientX
+		* @type Number
+		* @default -1
+		* @public
+		*/
+		public clientX: number = -1;
+
+		/**
+		* The vertical coordinate of point relative to the viewport in pixels, excluding any scroll offset
+		* @property clientY
+		* @type Number
+		* @default -1
+		* @public
+		*/
+		public clientY: number = -1;
+
+		/**
+		* The horizontal coordinate of point relative to the viewport in pixels, including any scroll offset
+		* @property pageX
+		* @type Number
+		* @default -1
+		* @public
+		*/
+		public pageX: number = -1;
+
+		/**
+		* The vertical coordinate of point relative to the viewport in pixels, including any scroll offset
+		* @property pageY
+		* @type Number
+		* @default -1
+		* @public
+		*/
+		public pageY: number = -1;
+
+		/**
+		* The horizontal coordinate of point relative to the screen in pixels
+		* @property screenX
+		* @type Number
+		* @default -1
+		* @public
+		*/
+		public screenX: number = -1;
+
+		/**
+		* The vertical coordinate of point relative to the screen in pixels
+		* @property screenY
+		* @type Number
+		* @default -1
+		* @public
+		*/
+		public screenY: number = -1;
+
+		/**
+		* The point that this pointer is at. Same coordinates as X/Y properties.
+		* @property point
+		* @type Kiwi.Geom.Point
+		* @public
+		*/
+		public point: Kiwi.Geom.Point;
+
+		/**
+		* A circle that is representative of the area this point covers.
+		* @property circle
+		* @type Kiwi.Geom.Circle
+		* @public
+		*/
+		public circle: Kiwi.Geom.Circle;
+
+		/**
+		* Indicates if this pointer is currently down.
+		* @property isDown
+		* @type boolean
+		* @default false
+		* @public
+		*/
+		public isDown: boolean = false;
+
+		/**
+		* Indicates if this pointer is currently up.
+		* @property isUp
+		* @default true
+		* @type boolean
+		* @public
+		*/
+		public isUp: boolean = true;
+
+		/**
+		* Indicates if this pointer is currently within the game.
+		* @property withinGame
+		* @type boolean
+		* @default false
+		* @public
+		*/
+		public withinGame: boolean = false;
+
+		/**
+		* Indicates if this pointer is active. Note a mouse is always &#x27;active&#x27; where as a finger is only active when it is down.
+		* @property active
+		* @type boolean
+		* @default false
+		* @public
+		*/
+		public active: boolean = false;
+
+		/**
+		* Indicates the time that the pointer was pressed initially.
+		* @property timeDown
+		* @type number
+		* @default 0
+		* @public
+		*/
+		public timeDown: number = 0;
+
+		/**
+		* Indicates the time that the pointer was released initially.
+		* @property timeUp
+		* @type number
+		* @default 0
+		* @public
+		*/
+		public timeUp: number = 0;
+
+		/**
+		* The duration that the pointer has been down for in milliseconds.
+		* @property duration
+		* @type number
+		* @default 0
+		* @public
+		*/
+		public duration: number = 0;
+
+		/**
+		* The duration that the pointer has been down for in frames.
+		* @property frameDuration
+		* @type number
+		* @default 0
+		* @public
+		*/
+		public frameDuration: number = 0;
+
+		/**
+		* A time that is used to calculate if someone justPressed the pointer.
+		* @property justPressedRate
+		* @type number
+		* @defeault 200
+		* @public
+		*/
+		public justPressedRate: number = 200;
+
+		/**
+		* A time that is used to calculate if someone justReleased the pointer.
+		* @property justReleasedRate
+		* @type number
+		* @default 200
+		* @public
+		*/
+		public justReleasedRate: number = 200;
+
+		/**
+		* The points inital coordinates when pressed down.
+		* @property startPoint
+		* @type Kiwi.Geom.Point
+		* @public
+		*/
+		public startPoint: Kiwi.Geom.Point;
+
+		/**
+		* The coordinates where the user released the pointer.
+		* @property endPoint
+		* @type Kiwi.Geom.Point
+		* @public
+		*/
+		public endPoint: Kiwi.Geom.Point;
+
+		/**
+		* The method that gets executed when the pointer presses/initially goes down on the screen.
+		* From the event passed the coordinates are calculated.
+		* @method start
+		* @param {event} event
+		* @public
+		*/
+		public start(event) {
+			this.move(event); 
+			this.startPoint.setTo(this.x, this.y);
+			this.frameDuration = 0;
+			this.withinGame = true;
+			this.isDown = true;
+			this.isUp = false;
+			this.timeDown = this.game.time.now();
+		}
+
+		/**
+		* The stop method is to be called when the pointer gets released initially. 
+		* @method stop
+		* @param {event} event
+		* @public
+		*/
+		public stop(event) {
+			this.withinGame = false;
+			this.endPoint.setTo(this.x, this.y);
+			this.isDown = false;
+			this.isUp = true;
+
+			this.timeUp = this.game.time.now();
+			this.duration = this.timeUp - this.timeDown;
+		}
+
+		/**
+		* Used to get the cooridnates of a pointer and inputs them to the correct properties.  
+		* @method move
+		* @param {event} event
+		* @public
+		*/
+		public move(event) { 
+			this.clientX = event.clientX;
+			this.clientY = event.clientY;
+
+			this.pageX = event.pageX;
+			this.pageY = event.pageY;
+
+			this.screenX = event.screenX;
+			this.screenY = event.screenY;
+
+			this.x = (this.pageX - this.game.stage.offset.x) * this.game.stage.scaleX;
+			this.y = (this.pageY - this.game.stage.offset.y) * this.game.stage.scaleY;
+
+			this.point.setTo(this.x, this.y);
+			this.circle.x = this.x;
+			this.circle.y = this.y;
+
+			this.duration = this.game.time.now() - this.timeDown;
+		}
+
+		/**
+		* Indicates if the pointer was just pressed. This is based of the justPressedRate unless otherwise specifieds.
+		* @method justPressed
+		* @param {Number} duration
+		* @return boolean
+		* @public
+		*/
+		public justPressed(duration: number = this.justPressedRate): boolean {
+
+			if (this.isDown === true &amp;&amp; (this.timeDown + duration) &gt; this._game.time.now()) {
+				return true;
+			} else {
+				return false;
+			}
+
+		}
+
+		/**
+		* Indicates if the pointer was just released. This is based of the justReleasedRate unless otherwise specified.
+		* @method justReleased
+		* @param {Number} duration
+		* @return boolean
+		* @public
+		*/
+		public justReleased(duration: number = this.justReleasedRate): boolean {
+
+			if (this.isUp === true &amp;&amp; (this.timeUp + duration) &gt; this._game.time.now()) {
+				return true;
+			} else {
+				return false;
+			}
+
+		}
+
+		/**
+		* READ ONLY: Indicates if this pointer was pressed on the last frame or not. 
+		* This is only true on the frame that the point was &#x27;justPressed&#x27; and is not a constant like &#x27;isDown&#x27;
+		*
+		* @property pressed
+		* @type boolean
+		* @readOnly
+		* @public
+		*/
+		public get pressed():boolean {
+			return ( this.timeDown &gt;= this._game.time.now() - this._game.time.delta() );
+		}
+
+
+		/**
+		* READ ONLY: Indicates if this pointer was released on the last frame or not. 
+		* This is only true on the frame that the point was &#x27;justReleased&#x27; and is not a constant like &#x27;isUp&#x27;
+		*
+		* @property released
+		* @type boolean
+		* @readOnly
+		* @public
+		*/
+		public get released(): boolean {
+			return ( this.timeUp &gt;= this._game.time.now() - this._game.time.delta() );
+		}
+
+
+		/**
+		* Resets the pointer properties to the default ones. Assumes that the pointer is no longer down.
+		* @method reset
+		* @public
+		*/
+		public reset() {
+			this.isDown = false;
+			this.isUp = true;
+			this.timeDown = 0;
+			this.timeUp = 0;
+			this.duration = 0;
+			this.frameDuration = 0;
+		}
+
+		/**
+		* The update loop for the pointer. Used only if down to update the duration.
+		* @method update
+		* @public
+		*/
+		public update() {
+			if (this.isDown === true) {
+				this.frameDuration ++;
+				this.duration = this._game.time.now() - this.timeDown;
+			}
+		}
+
+	}
 
 }
 
diff --git a/docs/files/src_input_Touch.ts.html b/docs/files/src_input_Touch.ts.html
index 0902796..127d4d7 100644
--- a/docs/files/src_input_Touch.ts.html
+++ b/docs/files/src_input_Touch.ts.html
@@ -369,812 +369,809 @@ <h1 class="file-heading">File: src/input/Touch.ts</h1>
 * @module Kiwi
 * @submodule Input
 * 
-*/ 
+*/
 
 module Kiwi.Input {
 
-    /**
-    * Handles the dispatching and management of touch based events for the game. When the Touch manager is created TEN finger objects are created and used when the user interacts with the screen. Those finger are what you can use to create games that make the most out of multitouch events. 
-    * 
-    * @class Touch
-    * @constructor
-    * @namespace Kiwi.Input
-    * @param game {Game} the game that this touch manager belongs to.
-    * @return {Touch} This object.
-    *
-    */
-    export class Touch {
-         
-        constructor(game: Kiwi.Game) {
-            this._game = game;
-        }
-
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} &quot;TouchManager&quot;
-        * @public
-        */
-        public objType():string {
-            return &quot;TouchManager&quot;;
-        }
-
-        /**
-        * If the touch inputs are enabled on the current device (and so if the events will fire) or not.
-        * @property touchEnabled
-        * @type boolean
-        * @public
-        */
-        public touchEnabled: boolean;
-
-        /** 
-        * The game that this touch manager belongs to.
-        * @property _game
-        * @type Game
-        * @private
-        **/
-        private _game: Kiwi.Game;
-
-        /** 
-        * The dom element that these touch events are to take place on. This is usally set to be the stage/game container.
-        * @property _domElement
-        * @type HTMLElement
-        * @default null
-        * @private
-        **/
-        private _domElement: HTMLElement = null;
-         
-        /** 
-        * Contains a list of all of the fingers that are used for the touch events.
-        * @property _fingers
-        * @type Array
-        * @private
-        */
-        private _fingers: Finger[];
-        
-        /**
-        * Get the fingers that are being used.
-        * @type Finger[]
-        * @public
-        */
-        public get fingers(): Kiwi.Input.Finger[] {
-            return this._fingers;
-        }
-
-        /** 
-        * The first finger that is used for touch events.
-        * @property finger1
-        * @type Finger
-        * @public
-        */
-        public finger1: Kiwi.Input.Finger;
-
-        /** 
-        * The second finger that is used for touch events.
-        * @property finger2
-        * @type Finger
-        * @public
-        */
-        public finger2: Kiwi.Input.Finger;
-
-        /** 
-        * The third finger that is used for touch events.
-        * @property finger3
-        * @type Finger
-        * @public
-        */
-        public finger3: Kiwi.Input.Finger;
-
-        /** 
-        * The fourth finger that is used for touch events.
-        * @property finger4
-        * @type Finger
-        * @public
-        */
-        public finger4: Kiwi.Input.Finger;
-
-        /** 
-        * Finger number five that is used for touch events.
-        * @property finger5
-        * @type Finger
-        * @public
-        */
-        public finger5: Kiwi.Input.Finger;
-
-        /** 
-        * Finger number six, that is used for touch events.
-        * @property finger6
-        * @type Finger
-        * @public
-        */
-        public finger6: Kiwi.Input.Finger;
-
-        /** 
-        * The seventh finger used for touch events.
-        * @property finger7
-        * @type Finger
-        * @public
-        */
-        public finger7: Kiwi.Input.Finger;
-
-        /** 
-        * Finger number eight
-        * @property finger8
-        * @type Finger
-        * @public
-        */
-        public finger8: Kiwi.Input.Finger;
-
-        /** 
-        * The ninth finger that is used for touch events.
-        * @property finger9
-        * @type Finger
-        * @public
-        */
-        public finger9: Kiwi.Input.Finger;
-
-        /** 
-        * The tenth finger that is used for touch events.
-        * @property finger10
-        * @type Finger
-        * @public
-        */
-        public finger10: Kiwi.Input.Finger;
-
-        /** 
-        * The latest finger that was used for any task.
-        * @property latestFinger
-        * @type Finger
-        * @public
-        */
-        public latestFinger: Kiwi.Input.Finger;
-
-        /** 
-        * A boolean that will roughly indicate if any finger is currently down.
-        * @property isDown
-        * @type boolean
-        * @default false
-        * @public
-        */
-        public isDown: boolean = false;
-
-        /** 
-        * If all the fingers are up.
-        * @property isUp
-        * @type boolean
-        * @default true
-        * @public
-        */
-        public isUp: boolean = true;
-
-        /**
-        * A Kiwi Signal that dispatches an event when a user presses down on the stage.
-        * @property touchDown
-        * @type Signal
-        * @public
-        * @deprecated
-        */
-        public touchDown: Kiwi.Signal;
-
-        /**
-        * A Kiwi Signal that dispatches an event when a user presses down on the stage.
-        * @property onDown
-        * @type Signal
-        * @public
-        */
-        public get onDown(): Kiwi.Signal {
-            return this.touchDown;
-        }
-        
-        /**
-        * A Kiwi Signal that dispatches an event when a user releases a finger off of the stage.
-        * @property touchUp
-        * @type Signal
-        * @public
-        * @deprecated
-        */
-        public touchUp: Kiwi.Signal;
-
-        /**
-        * A Kiwi Signal that dispatches an event when a user releases a finger off of the stage.
-        * @property onUp
-        * @type Signal
-        * @public
-        */
-        public get onUp(): Kiwi.Signal {
-            return this.touchUp;
-        }
-
-        /**
-        * A Kiwi Signal that dispatches an event when a touch event is cancelled for the some reason.
-        * @property touchCancel
-        * @type Signal
-        * @public
-        * @deprecated
-        */
-        public touchCancel: Kiwi.Signal;
-
-        /**
-        * A Kiwi Signal that dispatches an event when a touch event is cancelled for the some reason.
-        * @property onCancel
-        * @type Signal
-        * @public
-        */
-        public get onCancel(): Kiwi.Signal {
-            return this.touchCancel;
-        }
-
-        /** 
-        * An internal Kiwi method that runs when the DOM is loaded and the touch manager can now &#x27;boot&#x27; up.
-        * @method boot
-        * @public
-        */
-        public boot() {
-            this._domElement = this._game.stage.container;
-
-            this.finger1 = new Kiwi.Input.Finger(this._game);
-            this.finger2 = new Kiwi.Input.Finger(this._game);
-            this.finger3 = new Kiwi.Input.Finger(this._game);
-            this.finger4 = new Kiwi.Input.Finger(this._game);
-            this.finger5 = new Kiwi.Input.Finger(this._game);
-            this.finger6 = new Kiwi.Input.Finger(this._game);
-            this.finger7 = new Kiwi.Input.Finger(this._game);
-            this.finger8 = new Kiwi.Input.Finger(this._game);
-            this.finger9 = new Kiwi.Input.Finger(this._game);
-            this.finger10 = new Kiwi.Input.Finger(this._game);
-
-            this._fingers = [this.finger1, this.finger2, this.finger3, this.finger4, this.finger5, this.finger6, this.finger7, this.finger8, this.finger9, this.finger10];
-            this.latestFinger = this.finger1;
-
-            this.touchDown = new Kiwi.Signal();
-            this.touchUp = new Kiwi.Signal();
-            this.touchCancel = new Kiwi.Signal();
-             
-            this.start();
-        }
-
-        /** 
-        * Starts up the event listeners that are being used on the touch manager.
-        * @method start
-        * @public
-        */
-        public start() {
-
-            if (Kiwi.DEVICE.touch) {
-                this.touchEnabled = true;
-
-                if (this._game.deviceTargetOption === Kiwi.TARGET_BROWSER) {
-
-                    //If IE....
-                    if (Kiwi.DEVICE.pointerEnabled) {
-                        var pointerUp = &#x27;pointerup&#x27;,
-                            pointerDown = &#x27;pointerdown&#x27;,
-                            pointerEnter = &#x27;pointerenter&#x27;,
-                            pointerLeave = &#x27;pointerleave&#x27;,
-                            pointerCancel = &#x27;pointercancel&#x27;,
-                            pointerMove = &#x27;pointermove&#x27;;
-
-                        if ((window.navigator.msPointerEnabled)) {
-                            var pointerUp = &#x27;MSPointerUp&#x27;,
-                                pointerDown = &#x27;MSPointerDown&#x27;,
-                                pointerEnter = &#x27;MSPointerEnter&#x27;,
-                                pointerLeave = &#x27;MSPointerLeave&#x27;,
-                                pointerCancel = &#x27;MSPointerCancel&#x27;,
-                                pointerMove = &#x27;MSPointerMove&#x27;;
-                        }
-
-                        this._domElement.addEventListener(pointerUp, (event:MSPointerEvent) =&gt; this.onPointerStart(event), false);
-                        this._domElement.addEventListener(pointerDown, (event: MSPointerEvent) =&gt; this.onPointerEnd(event), false);
-                        this._domElement.addEventListener(pointerEnter, (event: MSPointerEvent) =&gt; this.onPointerEnter(event), false);
-                        this._domElement.addEventListener(pointerLeave, (event: MSPointerEvent) =&gt; this.onPointerLeave(event), false);
-                        this._domElement.addEventListener(pointerCancel, (event: MSPointerEvent) =&gt; this.onPointerCancel(event), false);
-                        this._domElement.addEventListener(pointerMove, (event: MSPointerEvent) =&gt; this.onPointerMove(event), false);
-
-                    } else {
-                        this._domElement.addEventListener(&#x27;touchstart&#x27;, (event) =&gt; this.onTouchStart(event), false);
-                        this._domElement.addEventListener(&#x27;touchmove&#x27;, (event) =&gt; this.onTouchMove(event), false);
-                        this._domElement.addEventListener(&#x27;touchend&#x27;, (event) =&gt; this.onTouchEnd(event), false);
-                        this._domElement.addEventListener(&#x27;touchenter&#x27;, (event) =&gt; this.onTouchEnter(event), false);
-                        this._domElement.addEventListener(&#x27;touchleave&#x27;, (event) =&gt; this.onTouchLeave(event), false);
-                        this._domElement.addEventListener(&#x27;touchcancel&#x27;, (event) =&gt; this.onTouchCancel(event), false);
-
-                        document.addEventListener(&#x27;touchmove&#x27;, (event) =&gt; this.consumeTouchMove(event), false);
-
-                    }
-
-
-                } else if (this._game.deviceTargetOption === Kiwi.TARGET_COCOON) {
-
-                    this._game.stage.canvas.addEventListener(&#x27;touchstart&#x27;, (event) =&gt; this.onTouchStart(event), false);
-                    this._game.stage.canvas.addEventListener(&#x27;touchmove&#x27;, (event) =&gt; this.onTouchMove(event), false);
-                    this._game.stage.canvas.addEventListener(&#x27;touchend&#x27;, (event) =&gt; this.onTouchEnd(event), false);
-                    this._game.stage.canvas.addEventListener(&#x27;touchenter&#x27;, (event) =&gt; this.onTouchEnter(event), false);
-                    this._game.stage.canvas.addEventListener(&#x27;touchleave&#x27;, (event) =&gt; this.onTouchLeave(event), false);
-                    this._game.stage.canvas.addEventListener(&#x27;touchcancel&#x27;, (event) =&gt; this.onTouchCancel(event), false);
-                }
-            } else {
-                this.touchEnabled = false;
-            }
-
-        }
-
-        /** 
-        * Prevent iOS bounce-back (doesn&#x27;t work?)
-        * @method consumeTouchMove
-        * @param {Any} event
-        * @public
-        */
-        private consumeTouchMove(event) {
-            event.preventDefault();
-        }
-
-        /** 
-        * Gets the position of the latest finger on the x axis.
-        * @property x
-        * @type number
-        * @public
-        */
-        public get x(): number {
-            return this.latestFinger.x;
-        }
-
-        /**  
-        * Gets the position of the latest finger on the y axis.
-        * @property y
-        * @type number
-        * @public
-        */
-        public get y(): number {
-            return this.latestFinger.y;
-        }
-
-        /**
-        * The developer defined maximum number of touch events.
-        * By default this is set to 10 but this can be set to be lower.
-        * @property _maxPointers
-        * @type number
-        * @default 10
-        * @private
-        */
-        private _maxPointers: number = 10;
-
-        /**
-        * Sets the maximum number of point of contact that are allowed on the game stage at one point.
-        * The maximum number of points that are allowed is 10, and the minimum is 0.
-        * @property maximumPointers
-        * @type number
-        * @public
-        */
-        public set maximumPointers(val:number) {
-            if (val &lt; 0)
-                val = 1;
-            if (val &gt; this._fingers.length) val = this._fingers.length;
-            
-            this._maxPointers = val; 
-        }
-
-        /**
-        * Gets the maximum number of points of contact that are allowed on the game stage at one point.
-        * @type number
-        * @public
-        */
-        public get maximumPointers(): number {
-            return this._maxPointers;
-        }
-
-
-        /**
-        *-------------------------
-        * Generic Methods for Dealing with Pointers
-        *-------------------------
-        */
-
-        /**
-        * This method is in charge of registering a &quot;finger&quot;  (either from a Touch/Pointer start method) and assigning it a Finger,
-        * You have to pass this method a id which is used to idenfied when released/cancelled.
-        * @method _registerFinger
-        * @param event {Any} 
-        * @param id {Number} 
-        * @private
-        */
-        private _registerFinger(event, id:number) {
-            for (var f = 0; f &lt; this._maxPointers; f++) {
-                if (this._fingers[f].active === false) {
-                    this._fingers[f].id = id;
-                    this._fingers[f].start(event);
-                    this.latestFinger = this._fingers[f];
-
-                    this.touchDown.dispatch(this._fingers[f].x, this._fingers[f].y, this._fingers[f].timeDown, this._fingers[f].timeUp, this._fingers[f].duration, this._fingers[f]);
-
-                    this.isDown = true;
-                    this.isUp = false;
-                    break;
-                }
-            }
-        }
-
-        /**
-        * This method is in charge of deregistering (removing) a &quot;finger&quot; when it has been released,
-        * You have to pass this method a id which is used to identfy the finger to deregister.
-        * @method _deregisterFinger
-        * @param event {Any} 
-        * @param id {Number} 
-        * @private
-        */
-        private _deregisterFinger(event, id) {
-
-            var finger = null;
-            for (var f = 0; f &lt; this._fingers.length; f++) {
-                if (this._fingers[f].active &amp;&amp; this._fingers[f].id === id) {
-                    this._fingers[f].stop(event);
-                    this.latestFinger = this._fingers[f];
-                    finger = this._fingers[f];
-                    this.isDown = false;
-                    this.isUp = true;
-                    break;
-                }
-            }
-
-
-            //Loop through the fingers and check to see that none of them are down.
-            for (var i = 0; i &lt; this._fingers.length; i++) {
-                if (this._fingers[i].active === true) {
-                    this.isDown = true;
-                    this.isUp = false;
-                }
-            }
-
-            if (finger !== null) {
-                this.touchUp.dispatch(finger.x, finger.y, finger.timeDown, finger.timeUp, finger.duration, finger);
-            }
-
-        }
-
-        
-        /**
-        * This method is in charge of cancelling (removing) a &quot;finger&quot;.
-        * You have to pass this method a id which is used to idenfied the finger that was cancelled.
-        * @method _cancelFinger
-        * @param event {Any} 
-        * @param id {Number} 
-        * @private
-        */
-        private _cancelFinger(event, id) {
-            for (var f = 0; f &lt; this._fingers.length; f++) {
-                if (this._fingers[f].active &amp;&amp; this._fingers[f].id === id) {
-                    this._fingers[f].stop(event);
-                    this.touchCancel.dispatch(this._fingers[f].x, this._fingers[f].y, this._fingers[f].timeDown, this._fingers[f].timeUp, this._fingers[f].duration, this._fingers[f]);
-                    break;
-                }
-            }
-
-            //loop through the fingers and check to see that none of them are down.
-            for (var i = 0; i &lt; this._fingers.length; i++) {
-                if (this._fingers[i].active) {
-                    this.isDown = true;
-                    this.isUp = false;
-                }
-            }
-        }
-        
-        
-        /**
-        * This method is in charge of creating and assigning (removing) a &quot;finger&quot; when it has entered the dom element.
-        * You have to pass this method a id which is used to idenfied the finger that was cancelled.
-        * @method _enterFinger
-        * @param event {Any} 
-        * @param id {Number} 
-        * @private
-        */
-        private _enterFinger(event, id) {
-            for (var f = 0; f &lt; this._maxPointers; f++) {
-                if (this._fingers[f].active === false) {
-                    this._fingers[f].id = id;
-                    this._fingers[f].start(event);
-                    this.latestFinger = this._fingers[f];
-                    this.isDown = true;
-                    this.isUp = false;
-                    break;
-                }
-            }
-        }
-        
-        /**
-        * This method is in charge of removing an assigned &quot;finger&quot; when it has left the DOM Elemetn.
-        * You have to pass this method a id which is used to idenfied the finger that left.
-        * @method _leaveFinger
-        * @param event {Any} 
-        * @param id {Number} 
-        * @private
-        */
-        private _leaveFinger(event, id) {
-            for (var f = 0; f &lt; this._fingers.length; f++) {
-                if (this._fingers[f].active &amp;&amp; this._fingers[f].id === id) {
-                    this._fingers[f].leave(event);
-                    break;
-                }
-            }
-        }
-        
-        /**
-        * This method is in charge of updating the coordinates of a &quot;finger&quot; when it has moved..
-        * You have to pass this method a id which is used to idenfied the finger that moved.
-        * @method _moveFinger
-        * @param event {Any} 
-        * @param id {Number} 
-        * @private
-        */
-        private _moveFinger(event, id) {
-            for (var f = 0; f &lt; this._fingers.length; f++) {
-                if (this._fingers[f].active &amp;&amp; this._fingers[f].id === id) {
-                    this._fingers[f].move(event);
-                    this.latestFinger = this._fingers[f];
-                    break;
-                }
-            }
-        }
-
-        
-        /**
-        *-------------------
-        * Touch Events
-        *-------------------
-        **/
-
-
-        /** 
-        * This method runs when the a touch start event is fired by the browser and then assigns the event to a pointer that is currently not active.
-        * https://developer.mozilla.org/en-US/docs/DOM/TouchList
-        * @method onTouchStart
-        * @param {Any} event
-        * @private
-        */
-        private onTouchStart(event) {
-
-            //Stop corresponding mouse events from firing.
-            event.preventDefault();
-            
-            for (var i = 0; i &lt; event.changedTouches.length; i++) {
-                this._registerFinger(event.changedTouches[i], event.changedTouches[i].identifier);
-            }
-
-        }
-
-        /** 
-        * Doesn&#x27;t appear to be supported by most browsers yet but if it was it would fire events when a touch is canceled.
-        * http://www.w3.org/TR/touch-events/#dfn-touchcancel
-        * @method onTouchCancel
-        * @param {Any} event
-        * @private
-        */
-        private onTouchCancel(event) {
-
-            event.preventDefault();
-
-            for (var i = 0; i &lt; event.changedTouches.length; i++) {
-                this._cancelFinger(event.changedTouches[i], event.changedTouches[i].identifier);
-            }
-
-        }
-
-        /** 
-        * Doesn&#x27;t appear to be supported by most browsers yet. But if it was would fire events when touch events enter an element. 
-        * @method onTouchEnter
-        * @param {Any} event
-        * @private
-        */
-        private onTouchEnter(event) {
-
-            //Stop corresponding mouse events from firing.
-            event.preventDefault();
-
-            // For touch enter and leave its a list of the touch points that have entered or left the target
-            for (var i = 0; i &lt; event.changedTouches.length; i++) {
-                this._enterFinger(event.changedTouches[i], event.changedTouches[i].identifier);
-            }
-
-        }
-
-        /** 
-        * Doesn&#x27;t appear to be supported by most browsers yet. Would fire events when a &#x27;finger&#x27; leaves an element.     
-        * Would be handly for when an finger &#x27;leaves&#x27; the stage.
-        * @method onTouchLeave
-        * @param {Any} event
-        * @private
-        */
-        private onTouchLeave(event) {
-
-            //Stops corresponding mouse events from firing
-            event.preventDefault();
-
-            // For touch enter and leave its a list of the touch points that have entered or left the target 
-            for (var i = 0; i &lt; event.changedTouches.length; i++) {
-                this._leaveFinger(event.changedTouches[i], event.changedTouches[i].identifier);
-            }
-
-        }
-
-        /** 
-        * When a touch pointer moves. This method updates the appropriate pointer.
-        * @method onTouchMove
-        * @param {Any} event
-        * @private
-        */
-        private onTouchMove(event) {
-
-            //Stop cooresponding mouse events from firing
-            event.preventDefault();
-
-            for (var i = 0; i &lt; event.changedTouches.length; i++) {
-                this._moveFinger(event.changedTouches[i], event.changedTouches[i].identifier);
-            }
-
-        }
-
-        /** 
-        * When a touch event gets released.
-        * https://developer.mozilla.org/en-US/docs/DOM/TouchList
-        * @method onTouchEnd
-        * @param {Any} event
-        * @private
-        */
-        private onTouchEnd(event) {
-
-            //Stop cooresponding mouse events from firing
-            event.preventDefault();
-
-            for (var i = 0; i &lt; event.changedTouches.length; i++) {
-                this._deregisterFinger(event.changedTouches[i], event.changedTouches[i].identifier);
-            }
-            
-        }
-
-
-        /**
-        *-------------------
-        * Pointer Events
-        *-------------------
-        **/
-
-
-        /** 
-        * Event that is fired when a pointer is initially pressed.
-        * @method onPointerStart
-        * @param event {PointerEvent}
-        * @private
-        */
-        private onPointerStart(event: MSPointerEvent) {
-            if (event.type === &#x27;touch&#x27;) {
-                this._registerFinger(event, event.pointerId);
-            }
-        }
-
-        /** 
-        * Event that is fired by a pointer event listener upon a pointer canceling for some reason. 
-        * @method onPointerCancel
-        * @param event {PointerEvent}
-        * @private
-        */
-        private onPointerCancel(event: MSPointerEvent) {
-            if (event.type === &#x27;touch&#x27;) {
-                this._cancelFinger(event, event.pointerId);
-            }
-        }
-
-        /** 
-        * Event that is fired by a pointer event listener upon a pointer entering the DOM Element the event listener is attached to.
-        * @method onPointerEnter
-        * @param event {PointerEvent}
-        * @private
-        */
-        private onPointerEnter(event: MSPointerEvent) {
-            if (event.type === &#x27;touch&#x27;) {
-                this._enterFinger(event, event.pointerId);
-            }
-        }
-
-        /** 
-        * Event that is fired by a pointer event listener upon a pointer being leaving the DOM Element the event listener is attached to.
-        * @method onPointerLeave
-        * @param event {PointerEvent}
-        * @private
-        */
-        private onPointerLeave(event: MSPointerEvent) {
-            if (event.type === &#x27;touch&#x27;) {
-                this._leaveFinger(event, event.pointerId);
-            }
-        }
-
-        /**
-        * Event that is fired by a pointer event listener upon a pointer moving.
-        * @method onPointerMove
-        * @param event {PointerEvent}
-        */
-        private onPointerMove(event: MSPointerEvent) {
-            if (event.type === &#x27;touch&#x27;) {
-                this._moveFinger(event, event.pointerId);
-            }
-        }
-        
-        /** 
-        * Event that is fired by a pointer event listener upon a pointer being released.
-        * @method onPointerEnd
-        * @param event {PointerEvent}
-        * @private
-        */
-        private onPointerEnd(event: MSPointerEvent) {
-            if (event.type === &#x27;touch&#x27;) {
-                this._deregisterFinger(event, event.pointerId);
-            }
-        }
-
-
-        /**
-        *-----------------
-        * Normal Methods 
-        *-----------------
-        **/
-
-
-        /** 
-        * The update loop fro the touch manager.
-        * @method update 
-        * @public
-        */
-        public update() {
-            if (this.touchEnabled &amp;&amp; this.isDown) {
-
-                for (var i = 0; i &lt; this._fingers.length; i++) {
-                    if (this._fingers[i].active) {
-                        this._fingers[i].update();
-                    }
-                }
-
-            }
-        }
-
-
-        /** 
-        * This method removes all of the event listeners and thus &#x27;stops&#x27; the touch manager.
-        * @method stop 
-        * @public
-        */
-        public stop() {
-
-            if (this.touchEnabled) {
-                if (this._game.deviceTargetOption === Kiwi.TARGET_BROWSER) {
-
-                    this._domElement.removeEventListener(&#x27;touchstart&#x27;, (event) =&gt; this.onTouchStart(event), false);
-                    this._domElement.removeEventListener(&#x27;touchmove&#x27;, (event) =&gt; this.onTouchMove(event), false);
-                    this._domElement.removeEventListener(&#x27;touchend&#x27;, (event) =&gt; this.onTouchEnd(event), false);
-                    this._domElement.removeEventListener(&#x27;touchenter&#x27;, (event) =&gt; this.onTouchEnter(event), false);
-                    this._domElement.removeEventListener(&#x27;touchleave&#x27;, (event) =&gt; this.onTouchLeave(event), false);
-                    this._domElement.removeEventListener(&#x27;touchcancel&#x27;, (event) =&gt; this.onTouchCancel(event), false);
-
-                } else if (this._game.deviceTargetOption === Kiwi.TARGET_COCOON) {
-
-                    this._game.stage.canvas.removeEventListener(&#x27;touchstart&#x27;, (event) =&gt; this.onTouchStart(event), false);
-                    this._game.stage.canvas.removeEventListener(&#x27;touchmove&#x27;, (event) =&gt; this.onTouchMove(event), false);
-                    this._game.stage.canvas.removeEventListener(&#x27;touchend&#x27;, (event) =&gt; this.onTouchEnd(event), false);
-                    this._game.stage.canvas.removeEventListener(&#x27;touchenter&#x27;, (event) =&gt; this.onTouchEnter(event), false);
-                    this._game.stage.canvas.removeEventListener(&#x27;touchleave&#x27;, (event) =&gt; this.onTouchLeave(event), false);
-                    this._game.stage.canvas.removeEventListener(&#x27;touchcancel&#x27;, (event) =&gt; this.onTouchCancel(event), false);
-                }
-            }
-        }
-
-        /**  
-        * Resets all of the fingers/pointers to their default states.
-        * @method reset
-        * @public
-        */
-        public reset() {
-            for (var i = 0; i &lt; this._fingers.length; i++) {
-                this._fingers[i].reset();
-            }
-        }
-
-    }
+	/**
+	* Handles the dispatching and management of touch based events for the game. When the Touch manager is created TEN finger objects are created and used when the user interacts with the screen. Those finger are what you can use to create games that make the most out of multitouch events. 
+	* 
+	* @class Touch
+	* @constructor
+	* @namespace Kiwi.Input
+	* @param game {Game} the game that this touch manager belongs to.
+	* @return {Touch} This object.
+	*
+	*/
+	export class Touch {
+
+		constructor(game: Kiwi.Game) {
+			this._game = game;
+		}
+
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} &quot;TouchManager&quot;
+		* @public
+		*/
+		public objType():string {
+			return &quot;TouchManager&quot;;
+		}
+
+		/**
+		* If the touch inputs are enabled on the current device (and so if the events will fire) or not.
+		* @property touchEnabled
+		* @type boolean
+		* @public
+		*/
+		public touchEnabled: boolean;
+
+		/** 
+		* The game that this touch manager belongs to.
+		* @property _game
+		* @type Game
+		* @private
+		**/
+		private _game: Kiwi.Game;
+
+		/** 
+		* The dom element that these touch events are to take place on. This is usally set to be the stage/game container.
+		* @property _domElement
+		* @type HTMLElement
+		* @default null
+		* @private
+		**/
+		private _domElement: HTMLElement = null;
+
+		/** 
+		* Contains a list of all of the fingers that are used for the touch events.
+		* @property _fingers
+		* @type Array
+		* @private
+		*/
+		private _fingers: Finger[];
+
+		/**
+		* Get the fingers that are being used.
+		* @type Finger[]
+		* @public
+		*/
+		public get fingers(): Kiwi.Input.Finger[] {
+			return this._fingers;
+		}
+
+		/** 
+		* The first finger that is used for touch events.
+		* @property finger1
+		* @type Finger
+		* @public
+		*/
+		public finger1: Kiwi.Input.Finger;
+
+		/** 
+		* The second finger that is used for touch events.
+		* @property finger2
+		* @type Finger
+		* @public
+		*/
+		public finger2: Kiwi.Input.Finger;
+
+		/** 
+		* The third finger that is used for touch events.
+		* @property finger3
+		* @type Finger
+		* @public
+		*/
+		public finger3: Kiwi.Input.Finger;
+
+		/** 
+		* The fourth finger that is used for touch events.
+		* @property finger4
+		* @type Finger
+		* @public
+		*/
+		public finger4: Kiwi.Input.Finger;
+
+		/** 
+		* Finger number five that is used for touch events.
+		* @property finger5
+		* @type Finger
+		* @public
+		*/
+		public finger5: Kiwi.Input.Finger;
+
+		/** 
+		* Finger number six, that is used for touch events.
+		* @property finger6
+		* @type Finger
+		* @public
+		*/
+		public finger6: Kiwi.Input.Finger;
+
+		/** 
+		* The seventh finger used for touch events.
+		* @property finger7
+		* @type Finger
+		* @public
+		*/
+		public finger7: Kiwi.Input.Finger;
+
+		/** 
+		* Finger number eight
+		* @property finger8
+		* @type Finger
+		* @public
+		*/
+		public finger8: Kiwi.Input.Finger;
+
+		/** 
+		* The ninth finger that is used for touch events.
+		* @property finger9
+		* @type Finger
+		* @public
+		*/
+		public finger9: Kiwi.Input.Finger;
+
+		/** 
+		* The tenth finger that is used for touch events.
+		* @property finger10
+		* @type Finger
+		* @public
+		*/
+		public finger10: Kiwi.Input.Finger;
+
+		/** 
+		* The latest finger that was used for any task.
+		* @property latestFinger
+		* @type Finger
+		* @public
+		*/
+		public latestFinger: Kiwi.Input.Finger;
+
+		/** 
+		* A boolean that will roughly indicate if any finger is currently down.
+		* @property isDown
+		* @type boolean
+		* @default false
+		* @public
+		*/
+		public isDown: boolean = false;
+
+		/** 
+		* If all the fingers are up.
+		* @property isUp
+		* @type boolean
+		* @default true
+		* @public
+		*/
+		public isUp: boolean = true;
+
+		/**
+		* A Kiwi Signal that dispatches an event when a user presses down on the stage.
+		* @property touchDown
+		* @type Signal
+		* @public
+		* @deprecated
+		*/
+		public touchDown: Kiwi.Signal;
+
+		/**
+		* A Kiwi Signal that dispatches an event when a user presses down on the stage.
+		* @property onDown
+		* @type Signal
+		* @public
+		*/
+		public get onDown(): Kiwi.Signal {
+			return this.touchDown;
+		}
+
+		/**
+		* A Kiwi Signal that dispatches an event when a user releases a finger off of the stage.
+		* @property touchUp
+		* @type Signal
+		* @public
+		* @deprecated
+		*/
+		public touchUp: Kiwi.Signal;
+
+		/**
+		* A Kiwi Signal that dispatches an event when a user releases a finger off of the stage.
+		* @property onUp
+		* @type Signal
+		* @public
+		*/
+		public get onUp(): Kiwi.Signal {
+			return this.touchUp;
+		}
+
+		/**
+		* A Kiwi Signal that dispatches an event when a touch event is cancelled for the some reason.
+		* @property touchCancel
+		* @type Signal
+		* @public
+		* @deprecated
+		*/
+		public touchCancel: Kiwi.Signal;
+
+		/**
+		* A Kiwi Signal that dispatches an event when a touch event is cancelled for the some reason.
+		* @property onCancel
+		* @type Signal
+		* @public
+		*/
+		public get onCancel(): Kiwi.Signal {
+			return this.touchCancel;
+		}
+
+		/** 
+		* An internal Kiwi method that runs when the DOM is loaded and the touch manager can now &#x27;boot&#x27; up.
+		* @method boot
+		* @public
+		*/
+		public boot() {
+			this._domElement = this._game.stage.container;
+
+			this.finger1 = new Kiwi.Input.Finger(this._game);
+			this.finger2 = new Kiwi.Input.Finger(this._game);
+			this.finger3 = new Kiwi.Input.Finger(this._game);
+			this.finger4 = new Kiwi.Input.Finger(this._game);
+			this.finger5 = new Kiwi.Input.Finger(this._game);
+			this.finger6 = new Kiwi.Input.Finger(this._game);
+			this.finger7 = new Kiwi.Input.Finger(this._game);
+			this.finger8 = new Kiwi.Input.Finger(this._game);
+			this.finger9 = new Kiwi.Input.Finger(this._game);
+			this.finger10 = new Kiwi.Input.Finger(this._game);
+
+			this._fingers = [this.finger1, this.finger2, this.finger3, this.finger4, this.finger5, this.finger6, this.finger7, this.finger8, this.finger9, this.finger10];
+			this.latestFinger = this.finger1;
+
+			this.touchDown = new Kiwi.Signal();
+			this.touchUp = new Kiwi.Signal();
+			this.touchCancel = new Kiwi.Signal();
+
+			this.start();
+		}
+
+		/** 
+		* Starts up the event listeners that are being used on the touch manager.
+		* @method start
+		* @public
+		*/
+		public start() {
+
+			if (Kiwi.DEVICE.touch) {
+				this.touchEnabled = true;
+
+				if (this._game.deviceTargetOption === Kiwi.TARGET_BROWSER) {
+
+					//If IE....
+					if (Kiwi.DEVICE.pointerEnabled) {
+						var pointerUp = &#x27;pointerup&#x27;,
+							pointerDown = &#x27;pointerdown&#x27;,
+							pointerEnter = &#x27;pointerenter&#x27;,
+							pointerLeave = &#x27;pointerleave&#x27;,
+							pointerCancel = &#x27;pointercancel&#x27;,
+							pointerMove = &#x27;pointermove&#x27;;
+
+						if ((window.navigator.msPointerEnabled)) {
+							var pointerUp = &#x27;MSPointerUp&#x27;,
+								pointerDown = &#x27;MSPointerDown&#x27;,
+								pointerEnter = &#x27;MSPointerEnter&#x27;,
+								pointerLeave = &#x27;MSPointerLeave&#x27;,
+								pointerCancel = &#x27;MSPointerCancel&#x27;,
+								pointerMove = &#x27;MSPointerMove&#x27;;
+						}
+
+						this._domElement.addEventListener(pointerUp, (event:MSPointerEvent) =&gt; this.onPointerStart(event), false);
+						this._domElement.addEventListener(pointerDown, (event: MSPointerEvent) =&gt; this.onPointerEnd(event), false);
+						this._domElement.addEventListener(pointerEnter, (event: MSPointerEvent) =&gt; this.onPointerEnter(event), false);
+						this._domElement.addEventListener(pointerLeave, (event: MSPointerEvent) =&gt; this.onPointerLeave(event), false);
+						this._domElement.addEventListener(pointerCancel, (event: MSPointerEvent) =&gt; this.onPointerCancel(event), false);
+						this._domElement.addEventListener(pointerMove, (event: MSPointerEvent) =&gt; this.onPointerMove(event), false);
+
+					} else {
+						this._domElement.addEventListener(&#x27;touchstart&#x27;, (event) =&gt; this.onTouchStart(event), false);
+						this._domElement.addEventListener(&#x27;touchmove&#x27;, (event) =&gt; this.onTouchMove(event), false);
+						this._domElement.addEventListener(&#x27;touchend&#x27;, (event) =&gt; this.onTouchEnd(event), false);
+						this._domElement.addEventListener(&#x27;touchenter&#x27;, (event) =&gt; this.onTouchEnter(event), false);
+						this._domElement.addEventListener(&#x27;touchleave&#x27;, (event) =&gt; this.onTouchLeave(event), false);
+						this._domElement.addEventListener(&#x27;touchcancel&#x27;, (event) =&gt; this.onTouchCancel(event), false);
+
+						document.addEventListener(&#x27;touchmove&#x27;, (event) =&gt; this.consumeTouchMove(event), false);
+
+					}
+
+
+				} else if (this._game.deviceTargetOption === Kiwi.TARGET_COCOON) {
+
+					this._game.stage.canvas.addEventListener(&#x27;touchstart&#x27;, (event) =&gt; this.onTouchStart(event), false);
+					this._game.stage.canvas.addEventListener(&#x27;touchmove&#x27;, (event) =&gt; this.onTouchMove(event), false);
+					this._game.stage.canvas.addEventListener(&#x27;touchend&#x27;, (event) =&gt; this.onTouchEnd(event), false);
+					this._game.stage.canvas.addEventListener(&#x27;touchenter&#x27;, (event) =&gt; this.onTouchEnter(event), false);
+					this._game.stage.canvas.addEventListener(&#x27;touchleave&#x27;, (event) =&gt; this.onTouchLeave(event), false);
+					this._game.stage.canvas.addEventListener(&#x27;touchcancel&#x27;, (event) =&gt; this.onTouchCancel(event), false);
+				}
+			} else {
+				this.touchEnabled = false;
+			}
+
+		}
+
+		/** 
+		* Prevent iOS bounce-back (doesn&#x27;t work?)
+		* @method consumeTouchMove
+		* @param {Any} event
+		* @public
+		*/
+		private consumeTouchMove(event) {
+			event.preventDefault();
+		}
+
+		/** 
+		* Gets the position of the latest finger on the x axis.
+		* @property x
+		* @type number
+		* @public
+		*/
+		public get x(): number {
+			return this.latestFinger.x;
+		}
+
+		/**  
+		* Gets the position of the latest finger on the y axis.
+		* @property y
+		* @type number
+		* @public
+		*/
+		public get y(): number {
+			return this.latestFinger.y;
+		}
+
+		/**
+		* The developer defined maximum number of touch events.
+		* By default this is set to 10 but this can be set to be lower.
+		* @property _maxPointers
+		* @type number
+		* @default 10
+		* @private
+		*/
+		private _maxPointers: number = 10;
+
+		/**
+		* Sets the maximum number of point of contact that are allowed on the game stage at one point.
+		* The maximum number of points that are allowed is 10, and the minimum is 0.
+		* @property maximumPointers
+		* @type number
+		* @public
+		*/
+		public set maximumPointers(val:number) {
+			if (val &lt; 0)
+				val = 1;
+			if (val &gt; this._fingers.length) val = this._fingers.length;
+			
+			this._maxPointers = val; 
+		}
+
+		/**
+		* Gets the maximum number of points of contact that are allowed on the game stage at one point.
+		* @type number
+		* @public
+		*/
+		public get maximumPointers(): number {
+			return this._maxPointers;
+		}
+
+
+		/**
+		*-------------------------
+		* Generic Methods for Dealing with Pointers
+		*-------------------------
+		*/
+
+		/**
+		* This method is in charge of registering a &quot;finger&quot;  (either from a Touch/Pointer start method) and assigning it a Finger,
+		* You have to pass this method a id which is used to idenfied when released/cancelled.
+		* @method _registerFinger
+		* @param event {Any} 
+		* @param id {Number} 
+		* @private
+		*/
+		private _registerFinger(event, id:number) {
+			for (var f = 0; f &lt; this._maxPointers; f++) {
+				if (this._fingers[f].active === false) {
+					this._fingers[f].id = id;
+					this._fingers[f].start(event);
+					this.latestFinger = this._fingers[f];
+
+					this.touchDown.dispatch(this._fingers[f].x, this._fingers[f].y, this._fingers[f].timeDown, this._fingers[f].timeUp, this._fingers[f].duration, this._fingers[f]);
+
+					this.isDown = true;
+					this.isUp = false;
+					break;
+				}
+			}
+		}
+
+		/**
+		* This method is in charge of deregistering (removing) a &quot;finger&quot; when it has been released,
+		* You have to pass this method a id which is used to identfy the finger to deregister.
+		* @method _deregisterFinger
+		* @param event {Any} 
+		* @param id {Number} 
+		* @private
+		*/
+		private _deregisterFinger(event, id) {
+
+			var finger = null;
+			for (var f = 0; f &lt; this._fingers.length; f++) {
+				if (this._fingers[f].active &amp;&amp; this._fingers[f].id === id) {
+					this._fingers[f].stop(event);
+					this.latestFinger = this._fingers[f];
+					finger = this._fingers[f];
+					this.isDown = false;
+					this.isUp = true;
+					break;
+				}
+			}
+
+
+			//Loop through the fingers and check to see that none of them are down.
+			for (var i = 0; i &lt; this._fingers.length; i++) {
+				if (this._fingers[i].active === true) {
+					this.isDown = true;
+					this.isUp = false;
+				}
+			}
+
+			if (finger !== null) {
+				this.touchUp.dispatch(finger.x, finger.y, finger.timeDown, finger.timeUp, finger.duration, finger);
+			}
+
+		}
+
+		/**
+		* This method is in charge of cancelling (removing) a &quot;finger&quot;.
+		* You have to pass this method a id which is used to idenfied the finger that was cancelled.
+		* @method _cancelFinger
+		* @param event {Any} 
+		* @param id {Number} 
+		* @private
+		*/
+		private _cancelFinger(event, id) {
+			for (var f = 0; f &lt; this._fingers.length; f++) {
+				if (this._fingers[f].active &amp;&amp; this._fingers[f].id === id) {
+					this._fingers[f].stop(event);
+					this.touchCancel.dispatch(this._fingers[f].x, this._fingers[f].y, this._fingers[f].timeDown, this._fingers[f].timeUp, this._fingers[f].duration, this._fingers[f]);
+					break;
+				}
+			}
+
+			//loop through the fingers and check to see that none of them are down.
+			for (var i = 0; i &lt; this._fingers.length; i++) {
+				if (this._fingers[i].active) {
+					this.isDown = true;
+					this.isUp = false;
+				}
+			}
+		}
+
+		/**
+		* This method is in charge of creating and assigning (removing) a &quot;finger&quot; when it has entered the dom element.
+		* You have to pass this method a id which is used to idenfied the finger that was cancelled.
+		* @method _enterFinger
+		* @param event {Any} 
+		* @param id {Number} 
+		* @private
+		*/
+		private _enterFinger(event, id) {
+			for (var f = 0; f &lt; this._maxPointers; f++) {
+				if (this._fingers[f].active === false) {
+					this._fingers[f].id = id;
+					this._fingers[f].start(event);
+					this.latestFinger = this._fingers[f];
+					this.isDown = true;
+					this.isUp = false;
+					break;
+				}
+			}
+		}
+
+		/**
+		* This method is in charge of removing an assigned &quot;finger&quot; when it has left the DOM Elemetn.
+		* You have to pass this method a id which is used to idenfied the finger that left.
+		* @method _leaveFinger
+		* @param event {Any} 
+		* @param id {Number} 
+		* @private
+		*/
+		private _leaveFinger(event, id) {
+			for (var f = 0; f &lt; this._fingers.length; f++) {
+				if (this._fingers[f].active &amp;&amp; this._fingers[f].id === id) {
+					this._fingers[f].leave(event);
+					break;
+				}
+			}
+		}
+
+		/**
+		* This method is in charge of updating the coordinates of a &quot;finger&quot; when it has moved..
+		* You have to pass this method a id which is used to idenfied the finger that moved.
+		* @method _moveFinger
+		* @param event {Any} 
+		* @param id {Number} 
+		* @private
+		*/
+		private _moveFinger(event, id) {
+			for (var f = 0; f &lt; this._fingers.length; f++) {
+				if (this._fingers[f].active &amp;&amp; this._fingers[f].id === id) {
+					this._fingers[f].move(event);
+					this.latestFinger = this._fingers[f];
+					break;
+				}
+			}
+		}
+
+
+		/**
+		*-------------------
+		* Touch Events
+		*-------------------
+		**/
+
+
+		/** 
+		* This method runs when the a touch start event is fired by the browser and then assigns the event to a pointer that is currently not active.
+		* https://developer.mozilla.org/en-US/docs/DOM/TouchList
+		* @method onTouchStart
+		* @param {Any} event
+		* @private
+		*/
+		private onTouchStart(event) {
+
+			//Stop corresponding mouse events from firing.
+			event.preventDefault();
+			
+			for (var i = 0; i &lt; event.changedTouches.length; i++) {
+				this._registerFinger(event.changedTouches[i], event.changedTouches[i].identifier);
+			}
+
+		}
+
+		/** 
+		* Doesn&#x27;t appear to be supported by most browsers yet but if it was it would fire events when a touch is canceled.
+		* http://www.w3.org/TR/touch-events/#dfn-touchcancel
+		* @method onTouchCancel
+		* @param {Any} event
+		* @private
+		*/
+		private onTouchCancel(event) {
+
+			event.preventDefault();
+
+			for (var i = 0; i &lt; event.changedTouches.length; i++) {
+				this._cancelFinger(event.changedTouches[i], event.changedTouches[i].identifier);
+			}
+
+		}
+
+		/** 
+		* Doesn&#x27;t appear to be supported by most browsers yet. But if it was would fire events when touch events enter an element. 
+		* @method onTouchEnter
+		* @param {Any} event
+		* @private
+		*/
+		private onTouchEnter(event) {
+
+			//Stop corresponding mouse events from firing.
+			event.preventDefault();
+
+			// For touch enter and leave its a list of the touch points that have entered or left the target
+			for (var i = 0; i &lt; event.changedTouches.length; i++) {
+				this._enterFinger(event.changedTouches[i], event.changedTouches[i].identifier);
+			}
+
+		}
+
+		/** 
+		* Doesn&#x27;t appear to be supported by most browsers yet. Would fire events when a &#x27;finger&#x27; leaves an element.     
+		* Would be handly for when an finger &#x27;leaves&#x27; the stage.
+		* @method onTouchLeave
+		* @param {Any} event
+		* @private
+		*/
+		private onTouchLeave(event) {
+
+			//Stops corresponding mouse events from firing
+			event.preventDefault();
+
+			// For touch enter and leave its a list of the touch points that have entered or left the target 
+			for (var i = 0; i &lt; event.changedTouches.length; i++) {
+				this._leaveFinger(event.changedTouches[i], event.changedTouches[i].identifier);
+			}
+
+		}
+
+		/** 
+		* When a touch pointer moves. This method updates the appropriate pointer.
+		* @method onTouchMove
+		* @param {Any} event
+		* @private
+		*/
+		private onTouchMove(event) {
+
+			//Stop cooresponding mouse events from firing
+			event.preventDefault();
+
+			for (var i = 0; i &lt; event.changedTouches.length; i++) {
+				this._moveFinger(event.changedTouches[i], event.changedTouches[i].identifier);
+			}
+
+		}
+
+		/** 
+		* When a touch event gets released.
+		* https://developer.mozilla.org/en-US/docs/DOM/TouchList
+		* @method onTouchEnd
+		* @param {Any} event
+		* @private
+		*/
+		private onTouchEnd(event) {
+
+			//Stop cooresponding mouse events from firing
+			event.preventDefault();
+
+			for (var i = 0; i &lt; event.changedTouches.length; i++) {
+				this._deregisterFinger(event.changedTouches[i], event.changedTouches[i].identifier);
+			}
+		}
+
+
+		/**
+		*-------------------
+		* Pointer Events
+		*-------------------
+		**/
+
+
+		/** 
+		* Event that is fired when a pointer is initially pressed.
+		* @method onPointerStart
+		* @param event {PointerEvent}
+		* @private
+		*/
+		private onPointerStart(event: MSPointerEvent) {
+			if (event.type === &#x27;touch&#x27;) {
+				this._registerFinger(event, event.pointerId);
+			}
+		}
+
+		/** 
+		* Event that is fired by a pointer event listener upon a pointer canceling for some reason. 
+		* @method onPointerCancel
+		* @param event {PointerEvent}
+		* @private
+		*/
+		private onPointerCancel(event: MSPointerEvent) {
+			if (event.type === &#x27;touch&#x27;) {
+				this._cancelFinger(event, event.pointerId);
+			}
+		}
+
+		/** 
+		* Event that is fired by a pointer event listener upon a pointer entering the DOM Element the event listener is attached to.
+		* @method onPointerEnter
+		* @param event {PointerEvent}
+		* @private
+		*/
+		private onPointerEnter(event: MSPointerEvent) {
+			if (event.type === &#x27;touch&#x27;) {
+				this._enterFinger(event, event.pointerId);
+			}
+		}
+
+		/** 
+		* Event that is fired by a pointer event listener upon a pointer being leaving the DOM Element the event listener is attached to.
+		* @method onPointerLeave
+		* @param event {PointerEvent}
+		* @private
+		*/
+		private onPointerLeave(event: MSPointerEvent) {
+			if (event.type === &#x27;touch&#x27;) {
+				this._leaveFinger(event, event.pointerId);
+			}
+		}
+
+		/**
+		* Event that is fired by a pointer event listener upon a pointer moving.
+		* @method onPointerMove
+		* @param event {PointerEvent}
+		*/
+		private onPointerMove(event: MSPointerEvent) {
+			if (event.type === &#x27;touch&#x27;) {
+				this._moveFinger(event, event.pointerId);
+			}
+		}
+
+		/** 
+		* Event that is fired by a pointer event listener upon a pointer being released.
+		* @method onPointerEnd
+		* @param event {PointerEvent}
+		* @private
+		*/
+		private onPointerEnd(event: MSPointerEvent) {
+			if (event.type === &#x27;touch&#x27;) {
+				this._deregisterFinger(event, event.pointerId);
+			}
+		}
+
+
+		/**
+		*-----------------
+		* Normal Methods 
+		*-----------------
+		**/
+
+
+		/** 
+		* The update loop fro the touch manager.
+		* @method update 
+		* @public
+		*/
+		public update() {
+			if (this.touchEnabled &amp;&amp; this.isDown) {
+
+				for (var i = 0; i &lt; this._fingers.length; i++) {
+					if (this._fingers[i].active) {
+						this._fingers[i].update();
+					}
+				}
+
+			}
+		}
+
+
+		/** 
+		* This method removes all of the event listeners and thus &#x27;stops&#x27; the touch manager.
+		* @method stop 
+		* @public
+		*/
+		public stop() {
+
+			if (this.touchEnabled) {
+				if (this._game.deviceTargetOption === Kiwi.TARGET_BROWSER) {
+
+					this._domElement.removeEventListener(&#x27;touchstart&#x27;, (event) =&gt; this.onTouchStart(event), false);
+					this._domElement.removeEventListener(&#x27;touchmove&#x27;, (event) =&gt; this.onTouchMove(event), false);
+					this._domElement.removeEventListener(&#x27;touchend&#x27;, (event) =&gt; this.onTouchEnd(event), false);
+					this._domElement.removeEventListener(&#x27;touchenter&#x27;, (event) =&gt; this.onTouchEnter(event), false);
+					this._domElement.removeEventListener(&#x27;touchleave&#x27;, (event) =&gt; this.onTouchLeave(event), false);
+					this._domElement.removeEventListener(&#x27;touchcancel&#x27;, (event) =&gt; this.onTouchCancel(event), false);
+
+				} else if (this._game.deviceTargetOption === Kiwi.TARGET_COCOON) {
+
+					this._game.stage.canvas.removeEventListener(&#x27;touchstart&#x27;, (event) =&gt; this.onTouchStart(event), false);
+					this._game.stage.canvas.removeEventListener(&#x27;touchmove&#x27;, (event) =&gt; this.onTouchMove(event), false);
+					this._game.stage.canvas.removeEventListener(&#x27;touchend&#x27;, (event) =&gt; this.onTouchEnd(event), false);
+					this._game.stage.canvas.removeEventListener(&#x27;touchenter&#x27;, (event) =&gt; this.onTouchEnter(event), false);
+					this._game.stage.canvas.removeEventListener(&#x27;touchleave&#x27;, (event) =&gt; this.onTouchLeave(event), false);
+					this._game.stage.canvas.removeEventListener(&#x27;touchcancel&#x27;, (event) =&gt; this.onTouchCancel(event), false);
+				}
+			}
+		}
+
+		/**  
+		* Resets all of the fingers/pointers to their default states.
+		* @method reset
+		* @public
+		*/
+		public reset() {
+			for (var i = 0; i &lt; this._fingers.length; i++) {
+				this._fingers[i].reset();
+			}
+		}
+
+	}
 
 }
 
diff --git a/docs/files/src_render_CanvasRenderer.ts.html b/docs/files/src_render_CanvasRenderer.ts.html
index 0f8aeec..8254b19 100644
--- a/docs/files/src_render_CanvasRenderer.ts.html
+++ b/docs/files/src_render_CanvasRenderer.ts.html
@@ -370,13 +370,13 @@ <h1 class="file-heading">File: src/render/CanvasRenderer.ts</h1>
 * 
 */
 interface IRenderManager {
-    render(camera: Kiwi.Camera);
-    boot();
-    initState(state: Kiwi.State);
-    endState(state: Kiwi.State);
-    numDrawCalls: number;
-    requestRendererInstance(rendererID: string,params?: any);
-    requestSharedRenderer(rendererID: string, params?: any);
+	render(camera: Kiwi.Camera);
+	boot();
+	initState(state: Kiwi.State);
+	endState(state: Kiwi.State);
+	numDrawCalls: number;
+	requestRendererInstance(rendererID: string,params?: any);
+	requestSharedRenderer(rendererID: string, params?: any);
 }
 
 /**
@@ -385,150 +385,148 @@ <h1 class="file-heading">File: src/render/CanvasRenderer.ts</h1>
 * @module Kiwi
 * @submodule Renderers
 * @main
-*/ 
+*/
 module Kiwi.Renderers {
 
-    /**
-    *
-    * @class CanvasRenderer
-    * @constructor 
-    * @namespace Kiwi.Renderers
-    * @param game {Kiwi.Game} The game that this canvas renderer belongs to.
-    * @return {Kiwi.Renderes.CanvasRenderer}
-    *
-    */
-    export class CanvasRenderer implements IRenderManager {
-         
-        constructor(game: Kiwi.Game) {
-            this._game = game;
-        }
-
-        /**
-        * The boot method is executed when all of the DOM elements that are needed to play the game are ready.
-        * @method boot
-        * @public
-        */
-        public boot() {
-
-        }
-
-        /**
-        * Returns the type of object that this is.
-        * @method objType
-        * @return {String} &quot;CanvasRenderer&quot;
-        * @public
-        */
-        public objType() {
-            return &quot;CanvasRenderer&quot;;
-        }
-
-        /**
-        * The game that this object belongs to.
-        * @property _game
-        * @type Kiwi.Game
-        * @private
-        */
-        private _game: Kiwi.Game;
-
-        /**
-        * The camera that is currently being used to render upon.
-        * @property _currentCamera
-        * @type Kiwi.Camera
-        * @private
-        */
-        private _currentCamera: Kiwi.Camera;
-
-        /**
-        * This method recursively goes through a State&#x27;s members and runs the render method of each member that is a Entity. 
-        * If it is a Group then this method recursively goes through that Groups members the process that happened to the State&#x27;s members happens to the Group&#x27;s members.
-        * 
-        * @method _recurse
-        * @param child {object} The child that is being checked.
-        * @private
-        */
-        public _recurse(child: IChild) {
+	/**
+	*
+	* @class CanvasRenderer
+	* @constructor 
+	* @namespace Kiwi.Renderers
+	* @param game {Kiwi.Game} The game that this canvas renderer belongs to.
+	* @return {Kiwi.Renderes.CanvasRenderer}
+	*
+	*/
+	export class CanvasRenderer implements IRenderManager {
+
+		constructor(game: Kiwi.Game) {
+			this._game = game;
+		}
+
+		/**
+		* The boot method is executed when all of the DOM elements that are needed to play the game are ready.
+		* @method boot
+		* @public
+		*/
+		public boot() {
+
+		}
+
+		/**
+		* Returns the type of object that this is.
+		* @method objType
+		* @return {String} &quot;CanvasRenderer&quot;
+		* @public
+		*/
+		public objType() {
+			return &quot;CanvasRenderer&quot;;
+		}
+
+		/**
+		* The game that this object belongs to.
+		* @property _game
+		* @type Kiwi.Game
+		* @private
+		*/
+		private _game: Kiwi.Game;
+
+		/**
+		* The camera that is currently being used to render upon.
+		* @property _currentCamera
+		* @type Kiwi.Camera
+		* @private
+		*/
+		private _currentCamera: Kiwi.Camera;
+
+		/**
+		* This method recursively goes through a State&#x27;s members and runs the render method of each member that is a Entity. 
+		* If it is a Group then this method recursively goes through that Groups members the process that happened to the State&#x27;s members happens to the Group&#x27;s members.
+		* 
+		* @method _recurse
+		* @param child {object} The child that is being checked.
+		* @private
+		*/
+		public _recurse(child: IChild) {
 			// Do not render non-visible objects or their children
-            if (!child.visible) return;
-
-            if (child.childType() === Kiwi.GROUP) {
-                for (var i = 0; i &lt; (&lt;Kiwi.Group&gt;child).members.length; i++) {
-                    this._recurse((&lt;Kiwi.Group&gt;child).members[i]);
-                }
-            } else {
-                this.numDrawCalls++;
-                child.render(this._currentCamera);
-
-            }
-
-        }
-
-        //for gl compatibility - refactor me
-        public requestRendererInstance(rendererID: string, params: any = null): Kiwi.Renderers.Renderer {
-            return null;
-        }
-
-        public requestSharedRenderer(rendererID: string, params: any = null): Kiwi.Renderers.Renderer {
-            return null;
-        }
-
-        public initState(state:Kiwi.State) {
-
-        }
-
-        public endState(state: Kiwi.State) {
-
-        }
-
-        public numDrawCalls: number = 0;
-
-        /**
-        * Renders all of the Elements that are on a particular camera.
-        * @method render
-        * @param camera {Kiwi.Camera}
-        * @public
-        */
-        public render(camera: Kiwi.Camera) {
-            var root: IChild[] = this._game.states.current.members;
-            
-            //clear 
-            var fillCol = this._game.stage.rgbaColor;
-            // If there is an alpha, clear the canvas before fill
-            if(fillCol.a &lt; 255) {
-                this._game.stage.ctx.clearRect(0,0, this._game.stage.canvas.width, this._game.stage.canvas.height);
-            }
-            this._game.stage.ctx.fillStyle = &quot;rgba(&quot; + fillCol.r + &quot;,&quot; + fillCol.g + &quot;,&quot; + fillCol.b + &quot;,&quot; + fillCol.a / 255 + &quot;)&quot;;
-            this._game.stage.ctx.fillRect(0, 0, this._game.stage.canvas.width, this._game.stage.canvas.height);
-            
-            // Stop drawing if there is nothing to draw
-            if ( root.length == 0 ) {
-                return;
-            }
-            
-            this.numDrawCalls = 0;    
-            this._currentCamera = camera;
-            
-            //apply camera transform, accounting for rotPoint offsets
-            var cm: Kiwi.Geom.Matrix = camera.transform.getConcatenatedMatrix();
-            var ct: Kiwi.Geom.Transform = camera.transform;
-
-            this._game.stage.ctx.save();
-            this._game.stage.ctx.setTransform(cm.a, cm.b, cm.c, cm.d, cm.tx, cm.ty);
-            this._game.stage.ctx.transform( 1,0,0,1, -ct.rotPointX, -ct.rotPointY );
-
-
-            for (var i = 0; i &lt; root.length; i++) {
-                this._recurse(root[i]);
-            }
-            this._game.stage.ctx.restore();
-
-        }
-        
-
-    }
+			if (!child.visible) return;
+
+			if (child.childType() === Kiwi.GROUP) {
+				for (var i = 0; i &lt; (&lt;Kiwi.Group&gt;child).members.length; i++) {
+					this._recurse((&lt;Kiwi.Group&gt;child).members[i]);
+				}
+			} else {
+				this.numDrawCalls++;
+				child.render(this._currentCamera);
+
+			}
+
+		}
+
+		//for gl compatibility - refactor me
+		public requestRendererInstance(rendererID: string, params: any = null): Kiwi.Renderers.Renderer {
+			return null;
+		}
+
+		public requestSharedRenderer(rendererID: string, params: any = null): Kiwi.Renderers.Renderer {
+			return null;
+		}
+
+		public initState(state:Kiwi.State) {
+
+		}
+
+		public endState(state: Kiwi.State) {
+
+		}
+
+		public numDrawCalls: number = 0;
+
+		/**
+		* Renders all of the Elements that are on a particular camera.
+		* @method render
+		* @param camera {Kiwi.Camera}
+		* @public
+		*/
+		public render(camera: Kiwi.Camera) {
+			var root: IChild[] = this._game.states.current.members;
+			
+			//clear 
+			var fillCol = this._game.stage.rgbaColor;
+			// If there is an alpha, clear the canvas before fill
+			if(fillCol.a &lt; 255) {
+				this._game.stage.ctx.clearRect(0,0, this._game.stage.canvas.width, this._game.stage.canvas.height);
+			}
+			this._game.stage.ctx.fillStyle = &quot;rgba(&quot; + fillCol.r + &quot;,&quot; + fillCol.g + &quot;,&quot; + fillCol.b + &quot;,&quot; + fillCol.a / 255 + &quot;)&quot;;
+			this._game.stage.ctx.fillRect(0, 0, this._game.stage.canvas.width, this._game.stage.canvas.height);
+			
+			// Stop drawing if there is nothing to draw
+			if ( root.length == 0 ) {
+				return;
+			}
+			
+			this.numDrawCalls = 0;    
+			this._currentCamera = camera;
+			
+			//apply camera transform, accounting for rotPoint offsets
+			var cm: Kiwi.Geom.Matrix = camera.transform.getConcatenatedMatrix();
+			var ct: Kiwi.Geom.Transform = camera.transform;
+
+			this._game.stage.ctx.save();
+			this._game.stage.ctx.setTransform(cm.a, cm.b, cm.c, cm.d, cm.tx, cm.ty);
+			this._game.stage.ctx.transform( 1,0,0,1, -ct.rotPointX, -ct.rotPointY );
+
+
+			for (var i = 0; i &lt; root.length; i++) {
+				this._recurse(root[i]);
+			}
+			this._game.stage.ctx.restore();
+
+		}
+
+	}
 
 }
 
-
     </pre>
 </div>
 
diff --git a/docs/files/src_render_GLArrayBuffer.ts.html b/docs/files/src_render_GLArrayBuffer.ts.html
index f864588..4d17161 100644
--- a/docs/files/src_render_GLArrayBuffer.ts.html
+++ b/docs/files/src_render_GLArrayBuffer.ts.html
@@ -373,186 +373,185 @@ <h1 class="file-heading">File: src/render/GLArrayBuffer.ts</h1>
 
 module Kiwi.Renderers {
 
-    /**
-    * Encapsulates a WebGL Array Buffer
-    * @class GLArrayBuffer
-    * @constructor
-    * @namespace Kiwi.Renderers
-    * @param gl {WebGLRenderingContext} 
-    * @param [_itemSize] {number}
-    * @param [items] {number[]}
-    * @param [init=true] {boolean}
-    * @return {Kiwi.RenderersGLArrayBuffer}
-    */
-    export class GLArrayBuffer {
-
-        constructor(gl: WebGLRenderingContext, _itemSize?: number, items?: number[], upload: boolean = true) {
-
-            this.items = items || GLArrayBuffer.squareVertices;
-            this.itemSize = _itemSize || 2;
-            this.numItems = this.items.length / this.itemSize;
-            this.createBuffer(gl);
-            if (upload) {
-                this.uploadBuffer(gl,this.items);
-            }
-        }
-
-        /**
-        * Returns whether the buffer has been created
-        * @property created
-        * @type boolean
-        * @public
-        * @readonly
-        */
-
-        private _created: boolean = false;
-        public get created(): boolean {
-            return this._created;
-        }
-
-        /**
-        * Returns whether the buffer has been uploaded to video memory 
-        * @property created
-        * @type boolean
-        * @public
-        * @readonly
-        */
-        private _uploaded: boolean = false;
-        public get uploaded(): boolean {
-            return this._uploaded;
-        }
-
-        /**
-        * The items ito upload to the buffer
-        * @property items
-        * @type number[]
-        * @public
-        */
-        public items: number[];
-        
-        /**
-        * The WebGL buffer Object
-        * @property buffer
-        * @type WebGLBuffer
-        * @public
-        */
-        public buffer: WebGLBuffer;
-        
-        /**
-        * The size of each item in the buffer.
-        * @property itemSize
-        * @type number
-        * @public
-        */
-        public itemSize: number;
-        
-        /**
-        * The number of items in the buffer
-        * @property numItems
-        * @type number
-        * @public
-        */
-        public numItems: number;
-
-        /**
-        * Clears the item array.
-        * @method clear
-        * @public
-        */
-        public clear() {
-            this.items = new Array();
-        }
-
-        /**
-        * Creates the array buffer.
-        * @method createBuffer
-        * @param gl {WebGLRenderingContext}
-        * @return {WebGLBuffer}
-        * @public
-        */
-        public createBuffer(gl: WebGLRenderingContext): boolean {
-            this.buffer = gl.createBuffer();
-            this._created = true;
-            return true;
-        }
-
-        /**
-        * Uploads the array buffer.
-        * @method uploadBuffer
-        * @param gl {WebGLRenderingContext}
-        * @param items {Array}
-        * @return {boolean}
-        * @public
-        */
-        public uploadBuffer(gl: WebGLRenderingContext, items: number[]): boolean {
-            this.items = items;
-            this.numItems = this.items.length / this.itemSize;
-            var f32: Float32Array = new Float32Array(this.items);
-            gl.bindBuffer(gl.ARRAY_BUFFER, this.buffer);
-            gl.bufferData(gl.ARRAY_BUFFER, f32, gl.DYNAMIC_DRAW);
-            this._uploaded = true;
-            return true;
-        }
-
-        /**
-        * Deletes the array buffer.
-        * @method deleteBuffer
-        * @param gl {WebGLRenderingContext}
-        * @return {boolean}
-        * @public
-        */
-        public deleteBuffer(gl: WebGLRenderingContext): boolean {
-            gl.bindBuffer(gl.ARRAY_BUFFER,this.buffer);
-            gl.deleteBuffer(this.buffer);   
-            this.uploaded = false;
-            this.created = false;
-            return true;
-        }
-
-        /**
-        * 
-        * @property squareVertices
-        * @type number[]
-        * @static
-        * @default [0, 0, 100, 0, 100, 100, 0, 100]
-        * @public
-        */
-        public static squareVertices: number[] = [
-            0, 0,
-            100, 0,
-            100, 100,
-            0, 100
-        ];
-        
-        /**
-        * 
-        * @property squareUVs
-        * @type number[]
-        * @static
-        * @default [0, 0, .1, 0, .1, .1, 0, .1]
-        * @public
-        */
-        public static squareUVs: number[] = [
-            0, 0,
-            .1, 0,
-            .1, .1,
-            0, .1
-        ];
-        
-        /**
-        * 
-        * @property squareCols
-        * @type number[]
-        * @static
-        * @default [1, 1, 1, 1]
-        * @public
-        */
-        public static squareCols: number[] = [
-            1, 1, 1, 1
-
-        ]
-
-    }
+	/**
+	* Encapsulates a WebGL Array Buffer
+	* @class GLArrayBuffer
+	* @constructor
+	* @namespace Kiwi.Renderers
+	* @param gl {WebGLRenderingContext} 
+	* @param [_itemSize] {number}
+	* @param [items] {number[]}
+	* @param [init=true] {boolean}
+	* @return {Kiwi.RenderersGLArrayBuffer}
+	*/
+	export class GLArrayBuffer {
+
+		constructor(gl: WebGLRenderingContext, _itemSize?: number, items?: number[], upload: boolean = true) {
+
+			this.items = items || GLArrayBuffer.squareVertices;
+			this.itemSize = _itemSize || 2;
+			this.numItems = this.items.length / this.itemSize;
+			this.createBuffer(gl);
+			if (upload) {
+				this.uploadBuffer(gl,this.items);
+			}
+		}
+
+		/**
+		* Returns whether the buffer has been created
+		* @property created
+		* @type boolean
+		* @public
+		* @readonly
+		*/
+
+		private _created: boolean = false;
+		public get created(): boolean {
+			return this._created;
+		}
+
+		/**
+		* Returns whether the buffer has been uploaded to video memory 
+		* @property created
+		* @type boolean
+		* @public
+		* @readonly
+		*/
+		private _uploaded: boolean = false;
+		public get uploaded(): boolean {
+			return this._uploaded;
+		}
+
+		/**
+		* The items ito upload to the buffer
+		* @property items
+		* @type number[]
+		* @public
+		*/
+		public items: number[];
+
+		/**
+		* The WebGL buffer Object
+		* @property buffer
+		* @type WebGLBuffer
+		* @public
+		*/
+		public buffer: WebGLBuffer;
+
+		/**
+		* The size of each item in the buffer.
+		* @property itemSize
+		* @type number
+		* @public
+		*/
+		public itemSize: number;
+
+		/**
+		* The number of items in the buffer
+		* @property numItems
+		* @type number
+		* @public
+		*/
+		public numItems: number;
+
+		/**
+		* Clears the item array.
+		* @method clear
+		* @public
+		*/
+		public clear() {
+			this.items = new Array();
+		}
+
+		/**
+		* Creates the array buffer.
+		* @method createBuffer
+		* @param gl {WebGLRenderingContext}
+		* @return {WebGLBuffer}
+		* @public
+		*/
+		public createBuffer(gl: WebGLRenderingContext): boolean {
+			this.buffer = gl.createBuffer();
+			this._created = true;
+			return true;
+		}
+
+		/**
+		* Uploads the array buffer.
+		* @method uploadBuffer
+		* @param gl {WebGLRenderingContext}
+		* @param items {Array}
+		* @return {boolean}
+		* @public
+		*/
+		public uploadBuffer(gl: WebGLRenderingContext, items: number[]): boolean {
+			this.items = items;
+			this.numItems = this.items.length / this.itemSize;
+			var f32: Float32Array = new Float32Array(this.items);
+			gl.bindBuffer(gl.ARRAY_BUFFER, this.buffer);
+			gl.bufferData(gl.ARRAY_BUFFER, f32, gl.DYNAMIC_DRAW);
+			this._uploaded = true;
+			return true;
+		}
+
+		/**
+		* Deletes the array buffer.
+		* @method deleteBuffer
+		* @param gl {WebGLRenderingContext}
+		* @return {boolean}
+		* @public
+		*/
+		public deleteBuffer(gl: WebGLRenderingContext): boolean {
+			gl.bindBuffer(gl.ARRAY_BUFFER,this.buffer);
+			gl.deleteBuffer(this.buffer);   
+			this.uploaded = false;
+			this.created = false;
+			return true;
+		}
+
+		/**
+		* 
+		* @property squareVertices
+		* @type number[]
+		* @static
+		* @default [0, 0, 100, 0, 100, 100, 0, 100]
+		* @public
+		*/
+		public static squareVertices: number[] = [
+			0, 0,
+			100, 0,
+			100, 100,
+			0, 100
+		];
+
+		/**
+		* 
+		* @property squareUVs
+		* @type number[]
+		* @static
+		* @default [0, 0, .1, 0, .1, .1, 0, .1]
+		* @public
+		*/
+		public static squareUVs: number[] = [
+			0, 0,
+			.1, 0,
+			.1, .1,
+			0, .1
+		];
+
+		/**
+		* 
+		* @property squareCols
+		* @type number[]
+		* @static
+		* @default [1, 1, 1, 1]
+		* @public
+		*/
+		public static squareCols: number[] = [
+			1, 1, 1, 1
+		];
+
+	}
 
 }
 
diff --git a/docs/files/src_render_GLBlendMode.ts.html b/docs/files/src_render_GLBlendMode.ts.html
index 727af70..2df8a04 100644
--- a/docs/files/src_render_GLBlendMode.ts.html
+++ b/docs/files/src_render_GLBlendMode.ts.html
@@ -378,29 +378,29 @@ <h1 class="file-heading">File: src/render/GLBlendMode.ts</h1>
 	* @class GLBlendMode
 	* @constructor
 	* @namespace Kiwi.Renderers
-    * @param gl {WebGLRenderingContext}
-    * @param params {Object}
+	* @param gl {WebGLRenderingContext}
+	* @param params {Object}
 	* @return {Kiwi.Renderers.GLBlendMode}
 	* @ since 1.1.0
 	*/
 	export class GLBlendMode {
 
 		constructor(gl: WebGLRenderingContext, params: any) {
-            this.gl = gl;
+			this.gl = gl;
 
-            this.dirty = true;
+			this.dirty = true;
 
-            // Set default parameters
-            this._srcRGB = gl.SRC_ALPHA;
-            this._dstRGB = gl.ONE_MINUS_SRC_ALPHA;
-            this._srcAlpha = gl.ONE;
-            this._dstAlpha = gl.ONE;
-            this._modeRGB = gl.FUNC_ADD;
-            this._modeAlpha = gl.FUNC_ADD;
-            
-            // Process params
-            if(typeof params === &quot;undefined&quot;)   { params = null; }
-            if(params)  this.readConfig(params);
+			// Set default parameters
+			this._srcRGB = gl.SRC_ALPHA;
+			this._dstRGB = gl.ONE_MINUS_SRC_ALPHA;
+			this._srcAlpha = gl.ONE;
+			this._dstAlpha = gl.ONE;
+			this._modeRGB = gl.FUNC_ADD;
+			this._modeAlpha = gl.FUNC_ADD;
+
+			// Process params
+			if(typeof params === &quot;undefined&quot;)   { params = null; }
+			if(params)  this.readConfig(params);
 		}
 
 		/**
@@ -468,240 +468,241 @@ <h1 class="file-heading">File: src/render/GLBlendMode.ts</h1>
 		private _modeAlpha: number;
 
 		/**
-        * Set a blend mode from a param object.
-        *
-        * This is the main method for configuring blend modes on a renderer. It resolves to a pair of calls to blendEquationSeparate and blendFuncSeparate. The params object should specify compatible terms, namely { srcRGB: a, dstRGB: b, srcAlpha: c, dstAlpha: d, modeRGB: e, modeAlpha: f }. You should set abcdef using either direct calls to a gl context (ie. gl.SRC_ALPHA) or by using predefined strings.
-        *
-        * The predefined string parameters for blendEquationSeparate are:
-        *
-        * FUNC_ADD, FUNC_SUBTRACT, and FUNC_REVERSE_SUBTRACT.
-        *
-        * The predefined string parameters for blendFuncSeparate are:
-        *
-        * ZERO, ONE, SRC_COLOR, ONE_MINUS_SRC_COLOR, DST_COLOR, ONE_MINUS_DST_COLOR, SRC_ALPHA, ONE_MINUS_SRC_ALPHA, DST_ALPHA, ONE_MINUS_DST_ALPHA, SRC_ALPHA_SATURATE, CONSTANT_COLOR, ONE_MINUS_CONSTANT_COLOR, CONSTANT_ALPHA, and ONE_MINUS_CONSTANT_ALPHA.
-        *
-        * @method readConfig
-        * @param params {Object}
-        * @public
-        */
-        public readConfig(params: any) {
-            if(params.mode !== undefined)
-                this.setMode(params.mode);
-            else {
-                // Expecting a series of constants in &quot;number&quot; type from a GL object, or valid string names corresponding to same.
-                // Sanitise input - do not change unspecified values
-                params.srcRGB = this.makeConstant(params.srcRGB);
-                if(typeof params.srcRGB !== &quot;undefined&quot;)
-                    this._srcRGB = params.srcRGB;
-                params.dstRGB = this.makeConstant(params.dstRGB);
-                if(typeof params.dstRGB !== &quot;undefined&quot;)
-                    this._dstRGB = params.dstRGB;
-                params.srcAlpha = this.makeConstant(params.srcAlpha);
-                if(typeof params.srcAlpha !== &quot;undefined&quot;)
-                    this._srcAlpha = params.srcAlpha;
-                params.dstAlpha = this.makeConstant(params.dstAlpha);
-                if(typeof params.dstAlpha !== &quot;undefined&quot;)
-                    this._dstAlpha = params.dstAlpha;
-                params.modeRGB = this.makeConstant(params.modeRGB);
-                if(typeof params.modeRGB !== &quot;undefined&quot;)
-                    this._modeRGB = params.modeRGB;
-                params.modeAlpha = this.makeConstant(params.modeAlpha);
-                if(typeof params.modeAlpha !== &quot;undefined&quot;)
-                    this._modeAlpha = params.modeAlpha;
-            }
-            this.dirty = true;
-        }
-
-        /**
-        * Formats a parameter into a GL context-compatible number. This recognises valid constant names, such as &quot;SRC_ALPHA&quot; or &quot;REVERSE_AND_SUBTRACT&quot;, with some tolerance for case. It does not check for valid numeric codes.
-        * @method makeConstant
-        * @param code {String}
-        * @return {number}
-        * @private
-        */
-        private makeConstant(code: any) {
-            // Numbers are assumed to be correct.
-            if(typeof code == &quot;number&quot;)
-                return( code );
-
-            if(typeof code == &quot;string&quot;)
-                code = code.toUpperCase();
-
-            switch( code ) {
-                case &quot;ZERO&quot;:
-                    code = this.gl.ZERO;
-                    break;
-                case &quot;ONE&quot;:
-                    code = this.gl.ONE;
-                    break;
-                case &quot;SRC_COLOR&quot;:
-                case &quot;SRC_COLOUR&quot;:
-                    code = this.gl.SRC_COLOR;
-                    break;
-                case &quot;ONE_MINUS_SRC_COLOR&quot;:
-                case &quot;ONE_MINUS_SRC_COLOUR&quot;:
-                    code = this.gl.ONE_MINUS_SRC_COLOR;
-                    break;
-                case &quot;DST_COLOR&quot;:
-                case &quot;DST_COLOUR&quot;:
-                    code = this.gl.DST_COLOR;
-                    break;
-                case &quot;ONE_MINUS_DST_COLOR&quot;:
-                case &quot;ONE_MINUS_DST_COLOUR&quot;:
-                    code = this.gl.ONE_MINUS_DST_COLOR;
-                    break;
-                case &quot;SRC_ALPHA&quot;:
-                    code = this.gl.SRC_ALPHA;
-                    break;
-                case &quot;ONE_MINUS_SRC_ALPHA&quot;:
-                    code = this.gl.ONE_MINUS_SRC_ALPHA;
-                    break;
-                case &quot;DST_ALPHA&quot;:
-                    code = this.gl.DST_ALPHA;
-                    break;
-                case &quot;ONE_MINUS_DST_ALPHA&quot;:
-                    code = this.gl.ONE_MINUS_DST_ALPHA;
-                    break;
-                case &quot;SRC_ALPHA_SATURATE&quot;:
-                    code = this.gl.SRC_ALPHA_SATURATE;
-                    break;
-                case &quot;CONSTANT_COLOR&quot;:
-                case &quot;CONSTANT_COLOUR&quot;:
-                    code = this.gl.CONSTANT_COLOR;
-                    break;
-                case &quot;ONE_MINUS_CONSTANT_COLOR&quot;:
-                case &quot;ONE_MINUS_CONSTANT_COLOUR&quot;:
-                    code = this.gl.ONE_MINUS_CONSTANT_COLOR;
-                    break;
-                case &quot;CONSTANT_ALPHA&quot;:
-                    code = this.gl.CONSTANT_ALPHA;
-                    break;
-                case &quot;ONE_MINUS_CONSTANT_ALPHA&quot;:
-                    code = this.gl.ONE_MINUS_CONSTANT_ALPHA;
-                    break;
-                case &quot;FUNC_ADD&quot;:
-                    code = this.gl.FUNC_ADD;
-                    break;
-                case &quot;FUNC_SUBTRACT&quot;:
-                    code = this.gl.FUNC_SUBTRACT;
-                    break;
-                case &quot;FUNC_REVERSE_SUBTRACT&quot;:
-                    code = this.gl.FUNC_REVERSE_SUBTRACT;
-                    break;
-                default:
-                    code = undefined;
-                    break;
-                }
-            return( code );
-        }
-
-        /**
-        * Sets a blend mode by name. Name is case-tolerant.
-        *
-        * These are shortcuts to setting the blend function parameters manually. A listing of valid modes follows. Each is listed with the parameters modeRGB, modeAlpha, srcRGB, dstRGB, srcAlpha, and dstAlpha, constants used in the gl calls &quot;blendEquationSeparate(modeRGB, modeAlpha)&quot; and &quot;blendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha&quot;. This is very technical, and will probably only be useful if you are developing your own shaders for Kiwi.js.
-        *
-        * &quot;NORMAL&quot; or any non-recognised string will draw as normal, blending colour via alpha. FUNC_ADD, FUNC_ADD, SRC_ALPHA, ONE_MINUS_SRC_ALPHA, ONE, ONE.
-        *
-        * &quot;ADD&quot; or &quot;ADDITIVE&quot; will add pixels to the background, creating a lightening effect. FUNC_ADD, FUNC_ADD, SRC_ALPHA, ONE, ONE, ONE.
-        *
-        * &quot;SUBTRACT&quot; or &quot;SUBTRACTIVE&quot; will subtract pixels from the background, creating an eerie dark effect. FUNC_REVERSE_SUBTRACT, FUNC_ADD, SRC_ALPHA, ONE, ONE, ONE.
-        *
-        * &quot;ERASE&quot; or &quot;ERASER&quot; will erase the game canvas itself, allowing the page background to show through. You can later draw over this erased region. FUNC_REVERSE_SUBTRACT, FUNC_REVERSE_SUBTRACT, SRC_ALPHA, ONE_MINUS_SRC_ALPHA, ONE, ONE.
-        *
-        * &quot;BLACK&quot; or &quot;BLACKEN&quot; will turn all colour black, but preserve alpha. FUNC_ADD, FUNC_ADD, ZERO, ONE_MINUS_SRC_ALPHA, ONE, ONE.
-        *
-        * Blend modes as seen in Adobe Photoshop are not reliably available via WebGL blend modes. Such blend modes require shaders to create.
-        * @method setMode
-        * @param mode {String}
-        * @public
-        */
-        public setMode(mode: string) {
-            mode = mode.toUpperCase();
-            switch( mode ) {
-                case &quot;ADDITIVE&quot;:
-                case &quot;ADD&quot;:
-                    this._srcRGB = this.gl.SRC_ALPHA;
-                    this._dstRGB = this.gl.ONE;
-                    this._srcAlpha = this.gl.ONE;
-                    this._dstAlpha = this.gl.ONE;
-                    this._modeRGB = this.gl.FUNC_ADD;
-                    this._modeAlpha = this.gl.FUNC_ADD;
-                    break;
-                case &quot;SUBTRACT&quot;:
-                case &quot;SUBTRACTIVE&quot;:
-                    this._srcRGB = this.gl.SRC_ALPHA;
-                    this._dstRGB = this.gl.ONE;
-                    this._srcAlpha = this.gl.ONE;
-                    this._dstAlpha = this.gl.ONE;
-                    this._modeRGB = this.gl.FUNC_REVERSE_SUBTRACT;
-                    this._modeAlpha = this.gl.FUNC_ADD;
-                    break;
-                case &quot;ERASE&quot;:
-                case &quot;ERASER&quot;:
-                    this._srcRGB = this.gl.SRC_ALPHA;
-                    this._dstRGB = this.gl.ONE_MINUS_SRC_ALPHA;
-                    this._srcAlpha = this.gl.ONE;
-                    this._dstAlpha = this.gl.ONE;
-                    this._modeRGB = this.gl.FUNC_REVERSE_SUBTRACT;
-                    this._modeAlpha = this.gl.FUNC_REVERSE_SUBTRACT;
-                    break;
-                case &quot;BLACK&quot;:
-                case &quot;BLACKEN&quot;:
-                    this._srcRGB = this.gl.ZERO;
-                    this._dstRGB = this.gl.ONE_MINUS_SRC_ALPHA;
-                    this._srcAlpha = this.gl.ONE;
-                    this._dstAlpha = this.gl.ONE;
-                    this._modeRGB = this.gl.FUNC_ADD;
-                    this._modeAlpha = this.gl.FUNC_ADD;
-                    break;
-                case &quot;NORMAL&quot;:
-                default:
-                    this._srcRGB = this.gl.SRC_ALPHA;
-                    this._dstRGB = this.gl.ONE_MINUS_SRC_ALPHA;
-                    this._srcAlpha = this.gl.ONE;
-                    this._dstAlpha = this.gl.ONE;
-                    this._modeRGB = this.gl.FUNC_ADD;
-                    this._modeAlpha = this.gl.FUNC_ADD;
-                    break;
-            }
-            this.dirty = true;
-        }
-
-        /**
-        * Compares against another GLBlendMode
-        * @method isIdentical
-        * @return {Boolean} Is this GLBlendMode identical to the passed GLBlendMode?
-        * @param blendMode {Kiwi.Renderers.GLBlendMode}
-        * @public
-        */
-        public isIdentical(blendMode: GLBlendMode) {
-            if(this == blendMode)
-            	return( true );
-            if(     this._srcRGB == blendMode._srcRGB
-                &amp;&amp;  this._dstRGB == blendMode._dstRGB
-                &amp;&amp;  this._srcAlpha == blendMode._srcAlpha
-                &amp;&amp;  this._dstAlpha == blendMode._dstAlpha
-                &amp;&amp;  this._modeRGB == blendMode._modeRGB
-                &amp;&amp;  this._modeAlpha == blendMode._modeAlpha)
-            	return( true );
-            return( false );
-        }
-
-        /**
-        * Sets the blend mode on the video card
-        * @method apply
-        * @param gl {WebGLRenderingContext}
-        * @public
-        */
-        public apply(gl: WebGLRenderingContext)
-        {
-            gl.blendEquationSeparate(this._modeRGB, this._modeAlpha);
-            gl.blendFuncSeparate(this._srcRGB, this._dstRGB, this._srcAlpha, this._dstAlpha);
-            // Remove dirty flag
-            this.dirty = false;
-        }
+		* Set a blend mode from a param object.
+		*
+		* This is the main method for configuring blend modes on a renderer. It resolves to a pair of calls to blendEquationSeparate and blendFuncSeparate. The params object should specify compatible terms, namely { srcRGB: a, dstRGB: b, srcAlpha: c, dstAlpha: d, modeRGB: e, modeAlpha: f }. You should set abcdef using either direct calls to a gl context (ie. gl.SRC_ALPHA) or by using predefined strings.
+		*
+		* The predefined string parameters for blendEquationSeparate are:
+		*
+		* FUNC_ADD, FUNC_SUBTRACT, and FUNC_REVERSE_SUBTRACT.
+		*
+		* The predefined string parameters for blendFuncSeparate are:
+		*
+		* ZERO, ONE, SRC_COLOR, ONE_MINUS_SRC_COLOR, DST_COLOR, ONE_MINUS_DST_COLOR, SRC_ALPHA, ONE_MINUS_SRC_ALPHA, DST_ALPHA, ONE_MINUS_DST_ALPHA, SRC_ALPHA_SATURATE, CONSTANT_COLOR, ONE_MINUS_CONSTANT_COLOR, CONSTANT_ALPHA, and ONE_MINUS_CONSTANT_ALPHA.
+		*
+		* @method readConfig
+		* @param params {Object}
+		* @public
+		*/
+		public readConfig(params: any) {
+			if(params.mode !== undefined)
+				this.setMode(params.mode);
+			else {
+				// Expecting a series of constants in &quot;number&quot; type from a GL object, or valid string names corresponding to same.
+				// Sanitise input - do not change unspecified values
+				params.srcRGB = this.makeConstant(params.srcRGB);
+				if(typeof params.srcRGB !== &quot;undefined&quot;)
+					this._srcRGB = params.srcRGB;
+				params.dstRGB = this.makeConstant(params.dstRGB);
+				if(typeof params.dstRGB !== &quot;undefined&quot;)
+					this._dstRGB = params.dstRGB;
+				params.srcAlpha = this.makeConstant(params.srcAlpha);
+				if(typeof params.srcAlpha !== &quot;undefined&quot;)
+					this._srcAlpha = params.srcAlpha;
+				params.dstAlpha = this.makeConstant(params.dstAlpha);
+				if(typeof params.dstAlpha !== &quot;undefined&quot;)
+					this._dstAlpha = params.dstAlpha;
+				params.modeRGB = this.makeConstant(params.modeRGB);
+				if(typeof params.modeRGB !== &quot;undefined&quot;)
+					this._modeRGB = params.modeRGB;
+				params.modeAlpha = this.makeConstant(params.modeAlpha);
+				if(typeof params.modeAlpha !== &quot;undefined&quot;)
+					this._modeAlpha = params.modeAlpha;
+			}
+			this.dirty = true;
+		}
+
+		/**
+		* Formats a parameter into a GL context-compatible number. This recognises valid constant names, such as &quot;SRC_ALPHA&quot; or &quot;REVERSE_AND_SUBTRACT&quot;, with some tolerance for case. It does not check for valid numeric codes.
+		* @method makeConstant
+		* @param code {String}
+		* @return {number}
+		* @private
+		*/
+		private makeConstant(code: any) {
+			// Numbers are assumed to be correct.
+			if(typeof code == &quot;number&quot;)
+				return( code );
+
+			if(typeof code == &quot;string&quot;)
+				code = code.toUpperCase();
+
+			switch( code ) {
+				case &quot;ZERO&quot;:
+					code = this.gl.ZERO;
+					break;
+				case &quot;ONE&quot;:
+					code = this.gl.ONE;
+					break;
+				case &quot;SRC_COLOR&quot;:
+				case &quot;SRC_COLOUR&quot;:
+					code = this.gl.SRC_COLOR;
+					break;
+				case &quot;ONE_MINUS_SRC_COLOR&quot;:
+				case &quot;ONE_MINUS_SRC_COLOUR&quot;:
+					code = this.gl.ONE_MINUS_SRC_COLOR;
+					break;
+				case &quot;DST_COLOR&quot;:
+				case &quot;DST_COLOUR&quot;:
+					code = this.gl.DST_COLOR;
+					break;
+				case &quot;ONE_MINUS_DST_COLOR&quot;:
+				case &quot;ONE_MINUS_DST_COLOUR&quot;:
+					code = this.gl.ONE_MINUS_DST_COLOR;
+					break;
+				case &quot;SRC_ALPHA&quot;:
+					code = this.gl.SRC_ALPHA;
+					break;
+				case &quot;ONE_MINUS_SRC_ALPHA&quot;:
+					code = this.gl.ONE_MINUS_SRC_ALPHA;
+					break;
+				case &quot;DST_ALPHA&quot;:
+					code = this.gl.DST_ALPHA;
+					break;
+				case &quot;ONE_MINUS_DST_ALPHA&quot;:
+					code = this.gl.ONE_MINUS_DST_ALPHA;
+					break;
+				case &quot;SRC_ALPHA_SATURATE&quot;:
+					code = this.gl.SRC_ALPHA_SATURATE;
+					break;
+				case &quot;CONSTANT_COLOR&quot;:
+				case &quot;CONSTANT_COLOUR&quot;:
+					code = this.gl.CONSTANT_COLOR;
+					break;
+				case &quot;ONE_MINUS_CONSTANT_COLOR&quot;:
+				case &quot;ONE_MINUS_CONSTANT_COLOUR&quot;:
+					code = this.gl.ONE_MINUS_CONSTANT_COLOR;
+					break;
+				case &quot;CONSTANT_ALPHA&quot;:
+					code = this.gl.CONSTANT_ALPHA;
+					break;
+				case &quot;ONE_MINUS_CONSTANT_ALPHA&quot;:
+					code = this.gl.ONE_MINUS_CONSTANT_ALPHA;
+					break;
+				case &quot;FUNC_ADD&quot;:
+					code = this.gl.FUNC_ADD;
+					break;
+				case &quot;FUNC_SUBTRACT&quot;:
+					code = this.gl.FUNC_SUBTRACT;
+					break;
+				case &quot;FUNC_REVERSE_SUBTRACT&quot;:
+					code = this.gl.FUNC_REVERSE_SUBTRACT;
+					break;
+				default:
+					code = undefined;
+					break;
+				}
+			return( code );
+		}
+
+		/**
+		* Sets a blend mode by name. Name is case-tolerant.
+		*
+		* These are shortcuts to setting the blend function parameters manually. A listing of valid modes follows. Each is listed with the parameters modeRGB, modeAlpha, srcRGB, dstRGB, srcAlpha, and dstAlpha, constants used in the gl calls &quot;blendEquationSeparate(modeRGB, modeAlpha)&quot; and &quot;blendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha&quot;. This is very technical, and will probably only be useful if you are developing your own shaders for Kiwi.js.
+		*
+		* &quot;NORMAL&quot; or any non-recognised string will draw as normal, blending colour via alpha. FUNC_ADD, FUNC_ADD, SRC_ALPHA, ONE_MINUS_SRC_ALPHA, ONE, ONE.
+		*
+		* &quot;ADD&quot; or &quot;ADDITIVE&quot; will add pixels to the background, creating a lightening effect. FUNC_ADD, FUNC_ADD, SRC_ALPHA, ONE, ONE, ONE.
+		*
+		* &quot;SUBTRACT&quot; or &quot;SUBTRACTIVE&quot; will subtract pixels from the background, creating an eerie dark effect. FUNC_REVERSE_SUBTRACT, FUNC_ADD, SRC_ALPHA, ONE, ONE, ONE.
+		*
+		* &quot;ERASE&quot; or &quot;ERASER&quot; will erase the game canvas itself, allowing the page background to show through. You can later draw over this erased region. FUNC_REVERSE_SUBTRACT, FUNC_REVERSE_SUBTRACT, SRC_ALPHA, ONE_MINUS_SRC_ALPHA, ONE, ONE.
+		*
+		* &quot;BLACK&quot; or &quot;BLACKEN&quot; will turn all colour black, but preserve alpha. FUNC_ADD, FUNC_ADD, ZERO, ONE_MINUS_SRC_ALPHA, ONE, ONE.
+		*
+		* Blend modes as seen in Adobe Photoshop are not reliably available via WebGL blend modes. Such blend modes require shaders to create.
+		* @method setMode
+		* @param mode {String}
+		* @public
+		*/
+		public setMode(mode: string) {
+			mode = mode.toUpperCase();
+			switch( mode ) {
+				case &quot;ADDITIVE&quot;:
+				case &quot;ADD&quot;:
+					this._srcRGB = this.gl.SRC_ALPHA;
+					this._dstRGB = this.gl.ONE;
+					this._srcAlpha = this.gl.ONE;
+					this._dstAlpha = this.gl.ONE;
+					this._modeRGB = this.gl.FUNC_ADD;
+					this._modeAlpha = this.gl.FUNC_ADD;
+					break;
+				case &quot;SUBTRACT&quot;:
+				case &quot;SUBTRACTIVE&quot;:
+					this._srcRGB = this.gl.SRC_ALPHA;
+					this._dstRGB = this.gl.ONE;
+					this._srcAlpha = this.gl.ONE;
+					this._dstAlpha = this.gl.ONE;
+					this._modeRGB = this.gl.FUNC_REVERSE_SUBTRACT;
+					this._modeAlpha = this.gl.FUNC_ADD;
+					break;
+				case &quot;ERASE&quot;:
+				case &quot;ERASER&quot;:
+					this._srcRGB = this.gl.SRC_ALPHA;
+					this._dstRGB = this.gl.ONE_MINUS_SRC_ALPHA;
+					this._srcAlpha = this.gl.ONE;
+					this._dstAlpha = this.gl.ONE;
+					this._modeRGB = this.gl.FUNC_REVERSE_SUBTRACT;
+					this._modeAlpha = this.gl.FUNC_REVERSE_SUBTRACT;
+					break;
+				case &quot;BLACK&quot;:
+				case &quot;BLACKEN&quot;:
+					this._srcRGB = this.gl.ZERO;
+					this._dstRGB = this.gl.ONE_MINUS_SRC_ALPHA;
+					this._srcAlpha = this.gl.ONE;
+					this._dstAlpha = this.gl.ONE;
+					this._modeRGB = this.gl.FUNC_ADD;
+					this._modeAlpha = this.gl.FUNC_ADD;
+					break;
+				case &quot;NORMAL&quot;:
+				default:
+					this._srcRGB = this.gl.SRC_ALPHA;
+					this._dstRGB = this.gl.ONE_MINUS_SRC_ALPHA;
+					this._srcAlpha = this.gl.ONE;
+					this._dstAlpha = this.gl.ONE;
+					this._modeRGB = this.gl.FUNC_ADD;
+					this._modeAlpha = this.gl.FUNC_ADD;
+					break;
+			}
+			this.dirty = true;
+		}
+
+		/**
+		* Compares against another GLBlendMode
+		* @method isIdentical
+		* @return {Boolean} Is this GLBlendMode identical to the passed GLBlendMode?
+		* @param blendMode {Kiwi.Renderers.GLBlendMode}
+		* @public
+		*/
+		public isIdentical(blendMode: GLBlendMode) {
+			if(this == blendMode)
+				return( true );
+			if(     this._srcRGB == blendMode._srcRGB
+				&amp;&amp;  this._dstRGB == blendMode._dstRGB
+				&amp;&amp;  this._srcAlpha == blendMode._srcAlpha
+				&amp;&amp;  this._dstAlpha == blendMode._dstAlpha
+				&amp;&amp;  this._modeRGB == blendMode._modeRGB
+				&amp;&amp;  this._modeAlpha == blendMode._modeAlpha)
+				return( true );
+			return( false );
+		}
+
+		/**
+		* Sets the blend mode on the video card
+		* @method apply
+		* @param gl {WebGLRenderingContext}
+		* @public
+		*/
+		public apply(gl: WebGLRenderingContext)
+		{
+			gl.blendEquationSeparate(this._modeRGB, this._modeAlpha);
+			gl.blendFuncSeparate(this._srcRGB, this._dstRGB, this._srcAlpha, this._dstAlpha);
+			// Remove dirty flag
+			this.dirty = false;
+		}
 	}
 }
+
     </pre>
 </div>
 
diff --git a/docs/files/src_render_GLElementArrayBuffer.ts.html b/docs/files/src_render_GLElementArrayBuffer.ts.html
index d2ba766..40c19ee 100644
--- a/docs/files/src_render_GLElementArrayBuffer.ts.html
+++ b/docs/files/src_render_GLElementArrayBuffer.ts.html
@@ -373,115 +373,115 @@ <h1 class="file-heading">File: src/render/GLElementArrayBuffer.ts</h1>
 
 module Kiwi.Renderers {
 
-    /**
-    * Encapsulates a WebGL Element Array Buffer
-    * @class GLElementArrayBuffer
-    * @constructor
-    * @namespace Kiwi.Renderers
-    * @param gl {WebGLRenderingContent}
-    * @param [_itemSize] {number}
-    * @param [_indices] {number[]}
-    * @param [init=true] {boolean}
-    * @return {GLElementArrayBuffer}
-    */
-    export class GLElementArrayBuffer {
+	/**
+	* Encapsulates a WebGL Element Array Buffer
+	* @class GLElementArrayBuffer
+	* @constructor
+	* @namespace Kiwi.Renderers
+	* @param gl {WebGLRenderingContent}
+	* @param [_itemSize] {number}
+	* @param [_indices] {number[]}
+	* @param [init=true] {boolean}
+	* @return {GLElementArrayBuffer}
+	*/
+	export class GLElementArrayBuffer {
 
-        constructor(gl: WebGLRenderingContext, _itemSize?: number, _indices?: number[], init: boolean = true) {
+		constructor(gl: WebGLRenderingContext, _itemSize?: number, _indices?: number[], init: boolean = true) {
 
-            this.indices = _indices || GLElementArrayBuffer.square;
-            this.itemSize = _itemSize || 1;
-            this.numItems = this.indices.length / this.itemSize;
-            if (init) {
-                this.buffer = this.init(gl);
-            }
-        }
-        
-        /**
-        * An array of indices
-        * @property indices
-        * @type number[]
-        * @public
-        */
-        public indices: number[];
-        
-        /**
-        * The Element Array Buffer object
-        * @property buffer
-        * @type WebGLBuffer
-        * @public
-        */
-        public buffer: WebGLBuffer;
-        
-        /**
-        * The size of each buffer item
-        * @property itemSize
-        * @type number
-        * @public
-        */
-        public itemSize: number;
-        
-        /**
-        * The numbe of items in the buffer
-        * @property numItems
-        * @type number
-        * @public
-        */
-        public numItems: number;
-        
-        /**
-        * Clears the indices array.
-        * @method clear
-        * @public
-        */
-        public clear() {
-            this.indices = new Array();
-        }
+			this.indices = _indices || GLElementArrayBuffer.square;
+			this.itemSize = _itemSize || 1;
+			this.numItems = this.indices.length / this.itemSize;
+			if (init) {
+				this.buffer = this.init(gl);
+			}
+		}
 
-        /**
-        * Initialises the Element Array Buffer
-        * @method init
-        * @param gl {WebGLRenderingContext}
-        * @return {WebGLBuffer}
-        * @public
-        */
-        public init(gl: WebGLRenderingContext): WebGLBuffer {
-            var buffer: WebGLBuffer = gl.createBuffer();
-            gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, buffer);
-            gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array(this.indices), gl.STATIC_DRAW);
+		/**
+		* An array of indices
+		* @property indices
+		* @type number[]
+		* @public
+		*/
+		public indices: number[];
 
-            return buffer;
-        }
-        
-        /**
-        * Refreshes the Element Array Buffer
-        * @method refresh
-        * @param gl {WebGLRenderingContext}
-        * @param indices {number[]} 
-        * @return {WebGLBuffer}
-        * @public
-        */
-        public refresh(gl: WebGLRenderingContext,indices:number[]): WebGLBuffer {
-            this.numItems = this.indices.length / this.itemSize;
-            gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.buffer);
-            gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array(this.indices), gl.STATIC_DRAW);
+		/**
+		* The Element Array Buffer object
+		* @property buffer
+		* @type WebGLBuffer
+		* @public
+		*/
+		public buffer: WebGLBuffer;
 
-            return this.buffer;
-        }
-        
-        /**
-        * The required indices for a single quad.
-        * @property square 
-        * @static
-        * @type number[]
-        * @default [0,1,2,0,2,3]
-        * @public
-        */
-        public static square: number[] = [
-            0, 1, 2,
-            0, 2, 3
-        ];
+		/**
+		* The size of each buffer item
+		* @property itemSize
+		* @type number
+		* @public
+		*/
+		public itemSize: number;
 
-    }
+		/**
+		* The numbe of items in the buffer
+		* @property numItems
+		* @type number
+		* @public
+		*/
+		public numItems: number;
+
+		/**
+		* Clears the indices array.
+		* @method clear
+		* @public
+		*/
+		public clear() {
+			this.indices = new Array();
+		}
+
+		/**
+		* Initialises the Element Array Buffer
+		* @method init
+		* @param gl {WebGLRenderingContext}
+		* @return {WebGLBuffer}
+		* @public
+		*/
+		public init(gl: WebGLRenderingContext): WebGLBuffer {
+			var buffer: WebGLBuffer = gl.createBuffer();
+			gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, buffer);
+			gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array(this.indices), gl.STATIC_DRAW);
+
+			return buffer;
+		}
+
+		/**
+		* Refreshes the Element Array Buffer
+		* @method refresh
+		* @param gl {WebGLRenderingContext}
+		* @param indices {number[]} 
+		* @return {WebGLBuffer}
+		* @public
+		*/
+		public refresh(gl: WebGLRenderingContext,indices:number[]): WebGLBuffer {
+			this.numItems = this.indices.length / this.itemSize;
+			gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.buffer);
+			gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array(this.indices), gl.STATIC_DRAW);
+
+			return this.buffer;
+		}
+
+		/**
+		* The required indices for a single quad.
+		* @property square 
+		* @static
+		* @type number[]
+		* @default [0,1,2,0,2,3]
+		* @public
+		*/
+		public static square: number[] = [
+			0, 1, 2,
+			0, 2, 3
+		];
+
+	}
 
 }
 
diff --git a/docs/files/src_render_GLRenderManager.ts.html b/docs/files/src_render_GLRenderManager.ts.html
index 8637c75..d34188c 100644
--- a/docs/files/src_render_GLRenderManager.ts.html
+++ b/docs/files/src_render_GLRenderManager.ts.html
@@ -364,466 +364,464 @@ <h1 class="file-heading">File: src/render/GLRenderManager.ts</h1>
 
 <div class="file">
     <pre class="code prettyprint linenums">
-
 //used for ts recognition of matrix-gl
 declare var mat2d, mat3, vec2, vec3, mat4;
 
-
-
 /**
-* 
-* 
 * @module Kiwi
 * @submodule Renderers 
 * @main Renderers
 * @namespace Kiwi.Renderers
-*/ 
+*/
 
 module Kiwi.Renderers {
-    
-    /**
-    * Manages all rendering using WebGL. Requires the inclusion of gl-matrix.js / g-matrix.min.js -  https://github.com/toji/gl-matrix
-    * Directly manages renderer objects, including factory methods for their creation. 
-    * Creates manager objects for shaders and textures.
-    * Manages gl state at game initialisation, at state start and end, and per frame.
-    * Runs the recursive scene graph rendering sequence every frame. 
-    * @class GLRenderManager
-    * @extends IRenderer
-    * @constructor
-    * @param game {Kiwi.Game} The game that this renderer belongs to.
-    * @return {Kiwi.Renderers.GLRenderManager}
-    */
-    export class GLRenderManager implements IRenderManager {
-
-       
-        constructor(game: Kiwi.Game) {
-            this._game = game;
-            if (typeof mat4 === &quot;undefined&quot;) {
-                throw &quot;ERROR: gl-matrix.js is missing&quot;;
-            }
-            this._currentBlendMode = new Kiwi.Renderers.GLBlendMode(this._game.stage.gl, {mode:&quot;DEFAULT&quot;} );
-        }
-
-        /**
-        * Initialises all WebGL rendering services
-        * @method boot
-        * @public
-        */
-        public boot() {
-            this._textureManager = new GLTextureManager();
-            this._shaderManager = new Kiwi.Shaders.ShaderManager();
-            //this.filters = new Kiwi.Filters.GLFilterManager(this._game, this._shaderManager);
-            this._init();
-            
-        }
-        
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} &quot;GLRenderManager&quot;
-        * @public
-        */
-        public objType() {
-            return &quot;GLRenderManager&quot;;
-        }
-
-        /**
-        * The game that this renderer is used with.
-        * @property _game
-        * @type Game
-        * @private
-        */
-        private _game: Kiwi.Game;
-
-        /**
-        * The texture manager object used to allocate GL Textures.
-        * @property _textureManager
-        * @type Kiwi.Renderes.GLTextureManager
-        * @private
-        */
-        private _textureManager: GLTextureManager;
-       
-        /**
-        * The shader manager object used to allocate GL Shaders.
-        * @property _shaderManager
-        * @type Kiwi.Renderes.GLShaderManager
-        * @private
-        */
-       
-        private _shaderManager: Kiwi.Shaders.ShaderManager;
-
-        //public filters: Kiwi.Filters.GLFilterManager;
-
-        /**
-        * The stage resolution in pixels
-        * @property _stageResolution
-        * @type Float32Array
-        * @private
-        */
-        private _stageResolution: Float32Array;
-
-        /**
-        * The renderer object that is in use during a rendering batch.
-        * @property _currentRenderer
-        * @type Kiwi.Renderers.Renderer
-        * @private
-        */
-        private _currentRenderer: Renderer = null;
-
-        /**
-        * The current blend mode.
-        * @property _currentBlendMode
-        * @type Kiwi.Renderers.GLBlendMode
-        * @private
-        * @since 1.1.0
-        */
-        private _currentBlendMode: GLBlendMode;
-        
-        /**
-        * Tally of number of entities rendered per frame 
-        * @property _entityCount
-        * @type number
-        * @default 0
-        * @private
-        */
-        private _entityCount: number = 0;
-
-         /**
-        * Tally of number of draw calls per frame
-        * @property numDrawCalls
-        * @type number
-        * @default 0
-        * @public
-        */
-        public numDrawCalls: number = 0;
-        
-        /**
-        * Maximum allowable sprites to render per frame
-        * Note:Not currently used  - candidate for deletion
-        * @property _maxItems
-        * @type number
-        * @default 1000
-        * @private
-        */
-        private _maxItems: number = 1000;
-         
-        
-        public camMatrix: Float32Array;
-        
-        
-        /**
-        * The most recently bound texture atlas.
-        * @property _currentTextureAtlas
-        * @type TextureAtlas
-        * @private
-        */
-        private _currentTextureAtlas: Kiwi.Textures.TextureAtlas = null;
-        
-        /**
-        * Adds a texture to the Texture Manager. 
-        * @method addTexture
-        * @param {WebGLRenderingContext} gl
-        * @param {Kiwi.Textures.TextureAtlas} atlas
-        * @public
-        */
-        public addTexture(gl: WebGLRenderingContext, atlas: Kiwi.Textures.TextureAtlas) {
-            this._textureManager.uploadTexture(gl, atlas);
-        }
-
-        /**
-        * An array of renderers. Shared renderers are used for batch rendering. Multiple gameobjects can use the same renderer
-        * instance and add rendering info to a batch rather than rendering individually. 
-        * This means only one draw call is necessary to render a number of objects. The most common use of this is standard 2d sprite rendering,
-        * and the TextureAtlasRenderer is added by default as a shared renderer. Sprites, StaticImages and Tilemaps (core gameobjects) can all use the
-        * same renderer/shader combination and be drawn as part of the same batch.
-        * Custom gameobjects can also choose to use a shared renderer, fo example in the case that a custom gameobject&#x27;s rendering requirements matched the TextureAtlasRenderer
-        * capabilities.
-        *  
-        * @property _sharedRenderers
-        * @type Array
-        * @private
-        */
-        private _sharedRenderers: any = {};
-
-        /**
-        * Adds a renderer to the sharedRenderer array. The rendererID is a string that must match a renderer property of the Kiwi.Renderers object. 
-        * If a match is found and an instance does not already exist, then a renderer is instantiated and added to the array.
-        * @method addSharedRenderer
-        * @param {String} rendererID
-        * @param {Object} params
-        * @return {Boolean} success
-        * @public
-        */
-
-        public addSharedRenderer(rendererID:string,params:any = null):boolean {
-            //does renderer exist?
-            if (Kiwi.Renderers[rendererID]) {
-              
-                //already added?
-                if (!(rendererID in this._sharedRenderers)) {
-                    this._sharedRenderers[rendererID] = new Kiwi.Renderers[rendererID](this._game.stage.gl,this._shaderManager,params);
-                    return true;
-                }
-            }
-            return false;
-        }
-
-
-        /**
-        * Adds a cloned renderer to the sharedRenderer array. The rendererID is a string that must match a renderer property of the Kiwi.Renderers object. The cloneID is the name for the cloned renderer.
-        *
-        * If a match is found and an instance does not already exist, then a renderer is instantiated and added to the array.
-        *
-        * Cloned shared renderers are useful if some items in your scene will use a special shader or blend mode, but others will not. You can subsequently access the clones with a normal requestSharedRenderer() call. You should use this instead of requestRendererInstance() whenever possible, because shared renderers are more efficient than instances.
-        *
-        * @method addSharedRendererClone
-        * @param {String} rendererID
-        * @param {String} cloneID
-        * @param {Object} params
-        * @return {Boolean} success
-        * @public
-        * @since 1.1.0
-        */
-        public addSharedRendererClone(rendererID: string, cloneID: string, params: any = null): boolean {
-            if (typeof params === &quot;undefined&quot;) { params = null; }
-            //does renderer exist?
-            if (Kiwi.Renderers[rendererID]) {
-                //already added?
-                if (!(cloneID in this._sharedRenderers)) {
-                    this._sharedRenderers[cloneID] = new Kiwi.Renderers[rendererID](this._game.stage.gl, this._shaderManager, params);
-                    return true;
-                }
-            }
-            return false;
-        }
-
-
-        /**
-	    * Requests a shared renderer. A game object that wants to use a shared renderer uses this method to obtain a reference to the shared renderer instance.
-	    * @method requestSharedRenderer
-        * @param {String} rendererID
-        * @param {Object} params
-        * @return {Kiwi.Renderers.Renderer} A shared renderer or null if none found.
-        * @public
-	    */
-
-        public requestSharedRenderer(rendererID: string,params:any = null): Kiwi.Renderers.Renderer {
-            var renderer: Kiwi.Renderers.Renderer = this._sharedRenderers[rendererID];
-            if (renderer) {
-                return renderer;
-            } else {
-                if (this.addSharedRenderer(rendererID,params)) {
-                    return this._sharedRenderers[rendererID];
-                } else {
-                    Kiwi.Log.log(&quot;No renderer called &quot; + rendererID, &#x27;#renderer&#x27;, &#x27;#webgl&#x27;);
-                }
-            }
-            //failed request
-            return null;
-
-        }
-
-
-        /**
-	    * Requests a new renderer instance. This factory method is the only way gameobjects should instantiate their own renderer. 
-        * The rendererID is a string that must match a renderer property of the Kiwi.Renderers object. 
-        * If a match is found then a renderer is instantiated and returned. Gameobjects which have rendering requirements that do not suit
-        * batch rendering use this technique.
-	    * @method requestRendererInstance
-        * @param {String} rendererID The name of the requested renderer
-        * @param {Object} params
-        * @return {Kiwi.Renderers.Renderer} A renderer or null if none found.
-        * @public
-	    */
-
-        public requestRendererInstance(rendererID: string, params: any = null): Kiwi.Renderers.Renderer {
-            if (rendererID in Kiwi.Renderers) {
-                var renderer = new Kiwi.Renderers[rendererID](this._game.stage.gl, this._shaderManager, params); 
-                return renderer
-            } else {
-                Kiwi.Log.log(&quot;No renderer with id &quot; + rendererID + &quot; exists&quot;, &#x27;#renderer&#x27;, &#x27;#webgl&#x27;);
-            }
-            return null; //fail
-        } 
-
-        /*
-        public get filtersEnabled(): boolean {
-            return this._filtersEnabled;
-        }
-
-        public set filtersEnabled(val: boolean) {
-            this._filtersEnabled = val;
-        }
-
-        private _filtersEnabled: boolean = false;
-        
-        /**
-        * Performs initialisation required for single game instance - happens once, at bootup
-        * Sets global GL state.
-        * Initialises managers for shaders and textures.
-        * Instantiates the default shared renderer (TextureAtlasRenderer)
-        * @method _init
-        * @private
-        */
-        private _init() {
-            Kiwi.Log.log(&quot;Initialising WebGL&quot;, &#x27;#renderer&#x27;, &#x27;#webgl&#x27;);
-
-            var gl: WebGLRenderingContext = this._game.stage.gl;
-
-            //init stage and viewport
-            this._stageResolution = new Float32Array([this._game.stage.width, this._game.stage.height]);
-            // Manually override scaling under CocoonJS
-            if( this._game.deviceTargetOption === Kiwi.TARGET_COCOON ) {
-                this.scaleViewport( gl, this._game.stage.scaleType, window.innerWidth, window.innerHeight );
-            }
-            else {
-                this.scaleViewport( gl, Kiwi.Stage.SCALE_NONE, this._game.stage.width, this._game.stage.height );
-            }
-
-            //set default gl state
-            gl.enable(gl.BLEND);
-            this._switchBlendMode(gl, this._currentBlendMode);
-
-            //shader manager
-            this._shaderManager.init(gl, &quot;TextureAtlasShader&quot;);
-            
-            //camera matrix
-            this.camMatrix = mat3.create();
-            
-            //stage res needs update on stage resize
-            this._game.stage.onResize.add(function (width, height) {
-                this._stageResolution = new Float32Array([width, height]);
-                if (this.currentRenderer) this._currentRenderer.updateStageResolution(gl, this._stageResolution);
-                //this.filters.updateFilterResolution(gl,width, height);
-                // Manually override scaling under CocoonJS
-                if( this._game.deviceTargetOption === Kiwi.TARGET_COCOON ) {
-                    this.scaleViewport( gl, this._game.stage.scaleType, window.innerWidth, window.innerHeight );
-                }
-                else {
-                    this.scaleViewport( gl, Kiwi.Stage.SCALE_NONE, width, height );
-                }
-            },this);
-
-           /* if (this.filtersEnabled &amp;&amp; !this.filters.isEmpty) {
-                this.filters.enableFrameBuffers(gl);
-            }*/
-
-       }
-
-        /**
-        * Scales the viewport according to a scale mode and space dimensions.
-        *
-        * This is used internally for compatibility with CocoonJS and should not be called.
-        * @method scaleViewport
-        * @param gl {WebGLRenderingContext}
-        * @param mode {number} The scale mode; should be either Kiwi.Stage.SCALE_FIT, Kiwi.Stage.SCALE_STRETCH, or Kiwi.Stage.SCALE_NONE. Defaults to Kiwi.Stage.SCALE_NONE.
-        * @param width {number} Width of the target space.
-        * @param height {number} Height of the target space.
-        * @public
-        * @since 1.1.1
-        */
-        public scaleViewport( gl:WebGLRenderingContext, mode:number, width:number, height:number ) {
-            var offset = new Kiwi.Geom.Point(0, 0);
-            switch( mode ) {
-                case Kiwi.Stage.SCALE_FIT:
-                    // Compute aspect ratios
-                    var arStage = this._game.stage.width / this._game.stage.height;
-                    var arSpace = width / height;
-                    if(arStage &lt; arSpace) {
-                        // Width is too wide
-                        var newWidth = height * arStage;
-                        offset.x = (width - newWidth) / 2;
-                        // Compress target space
-                        width = newWidth;
-                    }
-                    else {
-                        // Height is too wide
-                        var newHeight = width / arStage;
-                        offset.y = (height - newHeight) / 2;
-                        // Compress target space
-                        height = newHeight;
-                    }
-                    break;
-                case Kiwi.Stage.SCALE_STRETCH:
-                    break;
-                case Kiwi.Stage.SCALE_NONE:
-                    width = this._game.stage.width;
-                    height = this._game.stage.height;
-                    break;
-                default:
-                    break;
-            }
-
-            gl.viewport(offset.x, offset.y, width, height);
-        }
-
-        
-        /**
-        * Performs initialisation required when switching to a different state. Called when a state has been switched to.
-        * The textureManager is told to clear its contents from video memory, then rebuild its cache of textures from the state&#x27;s texture library.
-        * @method initState
-        * @public
-        */
-
-        public initState(state: Kiwi.State) {
-            this._textureManager.clearTextures(this._game.stage.gl);
-            this._textureManager.uploadTextureLibrary(this._game.stage.gl, state.textureLibrary);
-        }
-
-        /**
-        * Performs cleanup required before switching to a different state. Called whwn a state is about to be switched from. The textureManager is told to empty its cache.
-        * @method endState
-        * @param state {Kiwi.State}
-        * @public
-        */
-
-        public endState(state: Kiwi.State) {
-            this._textureManager.clearTextures(this._game.stage.gl);
-            Kiwi.Log.log(&quot;Ending WebGL on State&quot;, &#x27;#renderer&#x27;, &#x27;#webgl&#x27;);
-        }
-        
-        /**
-        * Manages rendering of the scene graph - called once per frame.
-        * Sets up per frame gl uniforms such as the view matrix and camera offset.
-        * Clears the current renderer ready for a new batch. 
-        * Initiates recursive render of scene graph starting at the root. 
-        * @method render
-        * @param camera {Camera}
-        * @public
-        */
-        public render(camera: Kiwi.Camera) {
-                     
-            var gl: WebGLRenderingContext = this._game.stage.gl;
-               
-            //clear stage every frame
-            var col = this._game.stage.normalizedColor;
-            // Colour must be multiplied by alpha to create consistent results.
-            // This is probably due to browsers implementing an inferior blendfunc:
-            // ONE, ONE_MINUS_SRC_ALPHA is most common, and gives bad results with alphas.
-            // When this is used on a partially transparent game canvas, it does not blend correctly.
-            // Without being able to override the browser&#x27;s own object renderer, this is a necessary kludge.
-            // The &quot;clean&quot; solution is as follows:
-            // gl.clearColor(col.r, col.g, col.b, col.a);
-            gl.clearColor(col.r * col.a, col.g * col.a, col.b * col.a, col.a);
-            gl.clear(gl.COLOR_BUFFER_BIT);
-            
-            // Stop drawing if there is nothing to draw
-            if (this._game.states.current.members.length == 0) {
-                return;
-            }
-                                       
-            //reset stats
-            this.numDrawCalls = 0;
-            this._textureManager.numTextureWrites = 0;
-            this._entityCount = 0;
-            
-            //set cam matrix uniform
-            var cm: Kiwi.Geom.Matrix = camera.transform.getConcatenatedMatrix();
-            var ct: Kiwi.Geom.Transform = camera.transform;
-
-            var rotOffset = vec2.create();
-            var scale = vec2.create();
-            var translate = vec2.create();
+
+	/**
+	* Manages all rendering using WebGL. Requires the inclusion of gl-matrix.js / g-matrix.min.js -  https://github.com/toji/gl-matrix
+	* Directly manages renderer objects, including factory methods for their creation. 
+	* Creates manager objects for shaders and textures.
+	* Manages gl state at game initialisation, at state start and end, and per frame.
+	* Runs the recursive scene graph rendering sequence every frame. 
+	* @class GLRenderManager
+	* @extends IRenderer
+	* @constructor
+	* @param game {Kiwi.Game} The game that this renderer belongs to.
+	* @return {Kiwi.Renderers.GLRenderManager}
+	*/
+	export class GLRenderManager implements IRenderManager {
+
+		constructor(game: Kiwi.Game) {
+			this._game = game;
+			if (typeof mat4 === &quot;undefined&quot;) {
+				throw &quot;ERROR: gl-matrix.js is missing&quot;;
+			}
+			this._currentBlendMode = new Kiwi.Renderers.GLBlendMode(this._game.stage.gl, {mode:&quot;DEFAULT&quot;} );
+		}
+
+		/**
+		* Initialises all WebGL rendering services
+		* @method boot
+		* @public
+		*/
+		public boot() {
+			this._textureManager = new GLTextureManager();
+			this._shaderManager = new Kiwi.Shaders.ShaderManager();
+			//this.filters = new Kiwi.Filters.GLFilterManager(this._game, this._shaderManager);
+			this._init();
+			
+		}
+
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} &quot;GLRenderManager&quot;
+		* @public
+		*/
+		public objType() {
+			return &quot;GLRenderManager&quot;;
+		}
+
+		/**
+		* The game that this renderer is used with.
+		* @property _game
+		* @type Game
+		* @private
+		*/
+		private _game: Kiwi.Game;
+
+		/**
+		* The texture manager object used to allocate GL Textures.
+		* @property _textureManager
+		* @type Kiwi.Renderes.GLTextureManager
+		* @private
+		*/
+		private _textureManager: GLTextureManager;
+
+		/**
+		* The shader manager object used to allocate GL Shaders.
+		* @property _shaderManager
+		* @type Kiwi.Renderes.GLShaderManager
+		* @private
+		*/
+
+		private _shaderManager: Kiwi.Shaders.ShaderManager;
+
+		//public filters: Kiwi.Filters.GLFilterManager;
+
+		/**
+		* The stage resolution in pixels
+		* @property _stageResolution
+		* @type Float32Array
+		* @private
+		*/
+		private _stageResolution: Float32Array;
+
+		/**
+		* The renderer object that is in use during a rendering batch.
+		* @property _currentRenderer
+		* @type Kiwi.Renderers.Renderer
+		* @private
+		*/
+		private _currentRenderer: Renderer = null;
+
+		/**
+		* The current blend mode.
+		* @property _currentBlendMode
+		* @type Kiwi.Renderers.GLBlendMode
+		* @private
+		* @since 1.1.0
+		*/
+		private _currentBlendMode: GLBlendMode;
+
+		/**
+		* Tally of number of entities rendered per frame 
+		* @property _entityCount
+		* @type number
+		* @default 0
+		* @private
+		*/
+		private _entityCount: number = 0;
+
+		 /**
+		* Tally of number of draw calls per frame
+		* @property numDrawCalls
+		* @type number
+		* @default 0
+		* @public
+		*/
+		public numDrawCalls: number = 0;
+
+		/**
+		* Maximum allowable sprites to render per frame
+		* Note:Not currently used  - candidate for deletion
+		* @property _maxItems
+		* @type number
+		* @default 1000
+		* @private
+		*/
+		private _maxItems: number = 1000;
+
+		/**
+		* Camera matrix used on graphics card
+		* @property camMatrix
+		* @type Float32Array
+		* @public
+		*/
+		public camMatrix: Float32Array;
+
+		/**
+		* The most recently bound texture atlas.
+		* @property _currentTextureAtlas
+		* @type TextureAtlas
+		* @private
+		*/
+		private _currentTextureAtlas: Kiwi.Textures.TextureAtlas = null;
+
+		/**
+		* Adds a texture to the Texture Manager. 
+		* @method addTexture
+		* @param {WebGLRenderingContext} gl
+		* @param {Kiwi.Textures.TextureAtlas} atlas
+		* @public
+		*/
+		public addTexture(gl: WebGLRenderingContext, atlas: Kiwi.Textures.TextureAtlas) {
+			this._textureManager.uploadTexture(gl, atlas);
+		}
+
+		/**
+		* An array of renderers. Shared renderers are used for batch rendering. Multiple gameobjects can use the same renderer
+		* instance and add rendering info to a batch rather than rendering individually. 
+		* This means only one draw call is necessary to render a number of objects. The most common use of this is standard 2d sprite rendering,
+		* and the TextureAtlasRenderer is added by default as a shared renderer. Sprites, StaticImages and Tilemaps (core gameobjects) can all use the
+		* same renderer/shader combination and be drawn as part of the same batch.
+		* Custom gameobjects can also choose to use a shared renderer, fo example in the case that a custom gameobject&#x27;s rendering requirements matched the TextureAtlasRenderer
+		* capabilities.
+		*  
+		* @property _sharedRenderers
+		* @type Array
+		* @private
+		*/
+		private _sharedRenderers: any = {};
+
+		/**
+		* Adds a renderer to the sharedRenderer array. The rendererID is a string that must match a renderer property of the Kiwi.Renderers object. 
+		* If a match is found and an instance does not already exist, then a renderer is instantiated and added to the array.
+		* @method addSharedRenderer
+		* @param {String} rendererID
+		* @param {Object} params
+		* @return {Boolean} success
+		* @public
+		*/
+
+		public addSharedRenderer(rendererID:string,params:any = null):boolean {
+			//does renderer exist?
+			if (Kiwi.Renderers[rendererID]) {
+			  
+				//already added?
+				if (!(rendererID in this._sharedRenderers)) {
+					this._sharedRenderers[rendererID] = new Kiwi.Renderers[rendererID](this._game.stage.gl,this._shaderManager,params);
+					return true;
+				}
+			}
+			return false;
+		}
+
+
+		/**
+		* Adds a cloned renderer to the sharedRenderer array. The rendererID is a string that must match a renderer property of the Kiwi.Renderers object. The cloneID is the name for the cloned renderer.
+		*
+		* If a match is found and an instance does not already exist, then a renderer is instantiated and added to the array.
+		*
+		* Cloned shared renderers are useful if some items in your scene will use a special shader or blend mode, but others will not. You can subsequently access the clones with a normal requestSharedRenderer() call. You should use this instead of requestRendererInstance() whenever possible, because shared renderers are more efficient than instances.
+		*
+		* @method addSharedRendererClone
+		* @param {String} rendererID
+		* @param {String} cloneID
+		* @param {Object} params
+		* @return {Boolean} success
+		* @public
+		* @since 1.1.0
+		*/
+		public addSharedRendererClone(rendererID: string, cloneID: string, params: any = null): boolean {
+			if (typeof params === &quot;undefined&quot;) { params = null; }
+			//does renderer exist?
+			if (Kiwi.Renderers[rendererID]) {
+				//already added?
+				if (!(cloneID in this._sharedRenderers)) {
+					this._sharedRenderers[cloneID] = new Kiwi.Renderers[rendererID](this._game.stage.gl, this._shaderManager, params);
+					return true;
+				}
+			}
+			return false;
+		}
+
+
+		/**
+		* Requests a shared renderer. A game object that wants to use a shared renderer uses this method to obtain a reference to the shared renderer instance.
+		* @method requestSharedRenderer
+		* @param {String} rendererID
+		* @param {Object} params
+		* @return {Kiwi.Renderers.Renderer} A shared renderer or null if none found.
+		* @public
+		*/
+
+		public requestSharedRenderer(rendererID: string,params:any = null): Kiwi.Renderers.Renderer {
+			var renderer: Kiwi.Renderers.Renderer = this._sharedRenderers[rendererID];
+			if (renderer) {
+				return renderer;
+			} else {
+				if (this.addSharedRenderer(rendererID,params)) {
+					return this._sharedRenderers[rendererID];
+				} else {
+					Kiwi.Log.log(&quot;No renderer called &quot; + rendererID, &#x27;#renderer&#x27;, &#x27;#webgl&#x27;);
+				}
+			}
+			//failed request
+			return null;
+
+		}
+
+
+		/**
+		* Requests a new renderer instance. This factory method is the only way gameobjects should instantiate their own renderer. 
+		* The rendererID is a string that must match a renderer property of the Kiwi.Renderers object. 
+		* If a match is found then a renderer is instantiated and returned. Gameobjects which have rendering requirements that do not suit
+		* batch rendering use this technique.
+		* @method requestRendererInstance
+		* @param {String} rendererID The name of the requested renderer
+		* @param {Object} params
+		* @return {Kiwi.Renderers.Renderer} A renderer or null if none found.
+		* @public
+		*/
+
+		public requestRendererInstance(rendererID: string, params: any = null): Kiwi.Renderers.Renderer {
+			if (rendererID in Kiwi.Renderers) {
+				var renderer = new Kiwi.Renderers[rendererID](this._game.stage.gl, this._shaderManager, params); 
+				return renderer
+			} else {
+				Kiwi.Log.log(&quot;No renderer with id &quot; + rendererID + &quot; exists&quot;, &#x27;#renderer&#x27;, &#x27;#webgl&#x27;);
+			}
+			return null; //fail
+		}
+
+		/*
+		public get filtersEnabled(): boolean {
+			return this._filtersEnabled;
+		}
+
+		public set filtersEnabled(val: boolean) {
+			this._filtersEnabled = val;
+		}
+
+		private _filtersEnabled: boolean = false;
+		
+		/**
+		* Performs initialisation required for single game instance - happens once, at bootup
+		* Sets global GL state.
+		* Initialises managers for shaders and textures.
+		* Instantiates the default shared renderer (TextureAtlasRenderer)
+		* @method _init
+		* @private
+		*/
+		private _init() {
+			Kiwi.Log.log(&quot;Initialising WebGL&quot;, &#x27;#renderer&#x27;, &#x27;#webgl&#x27;);
+
+			var gl: WebGLRenderingContext = this._game.stage.gl;
+
+			//init stage and viewport
+			this._stageResolution = new Float32Array([this._game.stage.width, this._game.stage.height]);
+			// Manually override scaling under CocoonJS
+			if( this._game.deviceTargetOption === Kiwi.TARGET_COCOON ) {
+				this.scaleViewport( gl, this._game.stage.scaleType, window.innerWidth, window.innerHeight );
+			}
+			else {
+				this.scaleViewport( gl, Kiwi.Stage.SCALE_NONE, this._game.stage.width, this._game.stage.height );
+			}
+
+			//set default gl state
+			gl.enable(gl.BLEND);
+			this._switchBlendMode(gl, this._currentBlendMode);
+
+			//shader manager
+			this._shaderManager.init(gl, &quot;TextureAtlasShader&quot;);
+			
+			//camera matrix
+			this.camMatrix = mat3.create();
+			
+			//stage res needs update on stage resize
+			this._game.stage.onResize.add(function (width, height) {
+				this._stageResolution = new Float32Array([width, height]);
+				if (this.currentRenderer) this._currentRenderer.updateStageResolution(gl, this._stageResolution);
+				//this.filters.updateFilterResolution(gl,width, height);
+				// Manually override scaling under CocoonJS
+				if( this._game.deviceTargetOption === Kiwi.TARGET_COCOON ) {
+					this.scaleViewport( gl, this._game.stage.scaleType, window.innerWidth, window.innerHeight );
+				}
+				else {
+					this.scaleViewport( gl, Kiwi.Stage.SCALE_NONE, width, height );
+				}
+			},this);
+
+			/* if (this.filtersEnabled &amp;&amp; !this.filters.isEmpty) {
+				this.filters.enableFrameBuffers(gl);
+			}*/
+
+		}
+
+		/**
+		* Scales the viewport according to a scale mode and space dimensions.
+		*
+		* This is used internally for compatibility with CocoonJS and should not be called.
+		* @method scaleViewport
+		* @param gl {WebGLRenderingContext}
+		* @param mode {number} The scale mode; should be either Kiwi.Stage.SCALE_FIT, Kiwi.Stage.SCALE_STRETCH, or Kiwi.Stage.SCALE_NONE. Defaults to Kiwi.Stage.SCALE_NONE.
+		* @param width {number} Width of the target space.
+		* @param height {number} Height of the target space.
+		* @public
+		* @since 1.1.1
+		*/
+		public scaleViewport( gl:WebGLRenderingContext, mode:number, width:number, height:number ) {
+			var offset = new Kiwi.Geom.Point(0, 0);
+			switch( mode ) {
+				case Kiwi.Stage.SCALE_FIT:
+					// Compute aspect ratios
+					var arStage = this._game.stage.width / this._game.stage.height;
+					var arSpace = width / height;
+					if(arStage &lt; arSpace) {
+						// Width is too wide
+						var newWidth = height * arStage;
+						offset.x = (width - newWidth) / 2;
+						// Compress target space
+						width = newWidth;
+					}
+					else {
+						// Height is too wide
+						var newHeight = width / arStage;
+						offset.y = (height - newHeight) / 2;
+						// Compress target space
+						height = newHeight;
+					}
+					break;
+				case Kiwi.Stage.SCALE_STRETCH:
+					break;
+				case Kiwi.Stage.SCALE_NONE:
+					width = this._game.stage.width;
+					height = this._game.stage.height;
+					break;
+				default:
+					break;
+			}
+
+			gl.viewport(offset.x, offset.y, width, height);
+		}
+
+
+		/**
+		* Performs initialisation required when switching to a different state. Called when a state has been switched to.
+		* The textureManager is told to clear its contents from video memory, then rebuild its cache of textures from the state&#x27;s texture library.
+		* @method initState
+		* @public
+		*/
+
+		public initState(state: Kiwi.State) {
+			this._textureManager.clearTextures(this._game.stage.gl);
+			this._textureManager.uploadTextureLibrary(this._game.stage.gl, state.textureLibrary);
+		}
+
+		/**
+		* Performs cleanup required before switching to a different state. Called whwn a state is about to be switched from. The textureManager is told to empty its cache.
+		* @method endState
+		* @param state {Kiwi.State}
+		* @public
+		*/
+
+		public endState(state: Kiwi.State) {
+			this._textureManager.clearTextures(this._game.stage.gl);
+			Kiwi.Log.log(&quot;Ending WebGL on State&quot;, &#x27;#renderer&#x27;, &#x27;#webgl&#x27;);
+		}
+
+		/**
+		* Manages rendering of the scene graph - called once per frame.
+		* Sets up per frame gl uniforms such as the view matrix and camera offset.
+		* Clears the current renderer ready for a new batch. 
+		* Initiates recursive render of scene graph starting at the root. 
+		* @method render
+		* @param camera {Camera}
+		* @public
+		*/
+		public render(camera: Kiwi.Camera) {
+
+			var gl: WebGLRenderingContext = this._game.stage.gl;
+
+			//clear stage every frame
+			var col = this._game.stage.normalizedColor;
+			// Colour must be multiplied by alpha to create consistent results.
+			// This is probably due to browsers implementing an inferior blendfunc:
+			// ONE, ONE_MINUS_SRC_ALPHA is most common, and gives bad results with alphas.
+			// When this is used on a partially transparent game canvas, it does not blend correctly.
+			// Without being able to override the browser&#x27;s own object renderer, this is a necessary kludge.
+			// The &quot;clean&quot; solution is as follows:
+			// gl.clearColor(col.r, col.g, col.b, col.a);
+			gl.clearColor(col.r * col.a, col.g * col.a, col.b * col.a, col.a);
+			gl.clear(gl.COLOR_BUFFER_BIT);
+
+			// Stop drawing if there is nothing to draw
+			if (this._game.states.current.members.length == 0) {
+				return;
+			}
+
+			//reset stats
+			this.numDrawCalls = 0;
+			this._textureManager.numTextureWrites = 0;
+			this._entityCount = 0;
+			
+			//set cam matrix uniform
+			var cm: Kiwi.Geom.Matrix = camera.transform.getConcatenatedMatrix();
+			var ct: Kiwi.Geom.Transform = camera.transform;
+
+			var rotOffset = vec2.create();
+			var scale = vec2.create();
+			var translate = vec2.create();
 
 			vec2.set(scale, ct.scaleX, ct.scaleY);
 			vec2.set(rotOffset, -ct.rotPointX, -ct.rotPointY);
@@ -834,208 +832,207 @@ <h1 class="file-heading">File: src/render/GLRenderManager.ts</h1>
 			mat3.scale(this.camMatrix, this.camMatrix, scale);
 			mat3.translate(this.camMatrix, this.camMatrix, rotOffset);
 
-            // Mandate blend mode in CocoonJS
-            // This must be called per-frame, because CocoonJS seems to interfere with blend modes on a per-frame basis.
-            if( this._game.deviceTargetOption == Kiwi.TARGET_COCOON ) {
-                this._switchBlendMode( gl, this._currentBlendMode );
-            }
-            
-            this.collateRenderSequence();
-            this.collateBatches();
-            this.renderBatches(gl, camera);
-          
-            /*if (this._filtersEnabled &amp;&amp; !this.filters.isEmpty) {
-                this.filters.applyFilters(gl);
-                gl.useProgram(this._shaderManager.currentShader.shaderProgram);
-                gl.bindTexture(gl.TEXTURE_2D, this._currentTextureAtlas.glTextureWrapper.texture);
-            }*/
-        }
-
-        private _sequence: any[];
-        private _batches: any[];
-
-
-        /**
-        * Creates a new render sequence
-        * @method collateRenderSequence
-        * @public
-        */
-        public collateRenderSequence() {
-            this._sequence = [];
-            var root: IChild = this._game.states.current;
-            this.collateChild(root);
-        }
-
-        /**
-        * Adds a child to the render sequence (may be a group with children of it&#x27;s own)
-        * @method collateChild
-        * @public
-        */
-        public collateChild(child:IChild) {
-        	// Do not render non-visible objects or their children
-        	if( !child.visible) return;
-        	
-            if (child.childType() === Kiwi.GROUP) {
-                for (var i = 0; i &lt; (&lt;Kiwi.Group&gt;child).members.length; i++) {
-                    this.collateChild( (&lt;Kiwi.Group&gt;child).members[i]);
-                }
-            } else {
-                var entity: Entity = &lt;Entity&gt;child;
-                this._sequence.push({
-                    entity: entity,
-                    renderer: entity.glRenderer,
-                    shader: entity.glRenderer.shaderPair,
-                    isBatchRenderer: entity.glRenderer.isBatchRenderer,
-                    texture: entity.atlas
-                });
-            }
-        }
-
-        /**
-        * Sorts the render sequence into batches. Each batch requires the same renderer/shader/texture combination. 
-        * @method collateBatches
-        * @public
-        */
-        public collateBatches() {
-            var currentRenderer: Renderer = null;
-            var currentShader: Shaders.ShaderPair = null;
-            var currentTexture: Textures.TextureAtlas = null;
-
-            this._batches = [];
-            var batchIndex:number;
-
-            for (var i = 0; i &lt; this._sequence.length; i++) {
-                if (!this._sequence[i].isBatchRenderer ||
-                    this._sequence[i].renderer !== currentRenderer ||
-                    this._sequence[i].shader !== currentShader ||
-                    this._sequence[i].texture !== currentTexture) {
-                    //create a new batch
-                    var batchIndex = this._batches.push(new Array()) - 1;
-                    currentRenderer = this._sequence[i].renderer; 
-                    currentShader = this._sequence[i].shader;
-                    currentTexture = this._sequence[i].texture;
-
-                } 
-                this._batches[batchIndex].push(this._sequence[i]);
-            }
-        }
-
-        /**
-        * Renders all the batches 
-        * @method renderBatches
-        * @param {WebGLRenderingContext} gl
-        * @param {Kiwi.Camera} camera
-        * @public
-        */
-        public renderBatches(gl: WebGLRenderingContext, camera) {
-            for (var i = 0; i &lt; this._batches.length; i++)
-                this.renderBatch( gl, this._batches[i], camera );
-        }
-
-        /**
-        * Renders a single batch 
-        * @method renderBatch
-        * @param {WebGLRenderingContext} gl
-        * @param {Object} batch
-        * @param {Kiwi.Camera} camera
-        * @public
-        */
-        public renderBatch(gl, batch, camera) {
-            // Acquire renderer
-            var rendererSwitched = false;
-            if (batch[0].entity.glRenderer !== this._currentRenderer) {
-                rendererSwitched = true;
-                this._switchRenderer(gl, batch[0].entity);
-            }
-
-            // Clear renderer for fresh data
-            this._currentRenderer.clear(gl, { camMatrix: this.camMatrix });
-
-            // Call render functions
-            for( var i = 0;  i &lt; batch.length;  i++ )
-                batch[i].entity.renderGL(gl, camera);
-
-            // Upload textures
-            if( batch[0].entity.atlas !== this._currentTextureAtlas  ||  batch[0].entity.atlas.dirty ||  (rendererSwitched  &amp;&amp;  batch[0].entity.atlas == this._currentTextureAtlas) )
-                this._switchTexture(gl, batch[0].entity);
-
-            // Manage blend mode
-            // We must always apply BlendMode under CocoonJS, because some (but not all) operations on other canvases may silently change the blend mode and not change it back.
-            if( !this._currentBlendMode.isIdentical( batch[0].entity.glRenderer.blendMode )  ||  this._currentBlendMode.dirty  ||  this._game.deviceTargetOption === Kiwi.TARGET_COCOON )
-                this._switchBlendMode(gl, batch[0].entity.glRenderer.blendMode);
-
-            // Render
-            this._currentRenderer.draw(gl);
-        }
-
-        /**
-        * Calls the render function on a single entity
-        * @method renderEntity
-        * @param {WebGLRenderingContext} gl
-        * @param {Kiwi.Entity} entity
-        * @param {Kiwi.Camera} camera
-        * @public
-        * @deprecated Used internally; should not be called from external functions
-        */
-        public renderEntity(gl: WebGLRenderingContext, entity: any, camera) {
-            this.renderBatch( gl, [entity], camera );
-        }
-
-        /**
-        * Ensures the atlas and renderer needed for a batch is setup
-        * @method setupGLState
-        * @param {WebGLRenderingContext} gl
-        * @public
-        * @deprecated Used internally; should not be called from external functions.
-        */
-        public setupGLState(gl:WebGLRenderingContext,entity) {
-            if (entity.atlas !== this._currentTextureAtlas) this._switchTexture(gl, entity);
-            if (entity.glRenderer !== this._currentRenderer) this._switchRenderer(gl, entity);
-        }
-              
-        /**
-        * Switch renderer to the one needed by the entity that needs rendering
-        * @method _switchRenderer
-        * @param gl {WebGLRenderingContext}
-        * @param entity {Kiwi.Entity}
-        * @private
-        */
-        private _switchRenderer(gl: WebGLRenderingContext, entity: Entity) {
-            if (this._currentRenderer) this._currentRenderer.disable(gl);
-            this._currentRenderer = entity.glRenderer;
-            this._currentRenderer.enable(gl, { camMatrix: this.camMatrix, stageResolution: this._stageResolution });
-        }
-        
-        /**
-        * Switch texture to the one needed by the entity that needs rendering
-        * @method _switchTexture
-        * @param gl {WebGLRenderingContext}
-        * @param entity {Kiwi.Entity}
-        * @private
-        */
-        private _switchTexture(gl: WebGLRenderingContext, entity: Entity) {
-            this._currentTextureAtlas = entity.atlas;
-            entity.atlas.enableGL(gl, this._currentRenderer, this._textureManager);
-        }
-
-        /**
-        * Switch blend mode to a new set of constants
-        * @method _switchBlendMode
-        * @param gl {WebGLRenderingContext}
-        * @param blendMode {Kiwi.Renderers.GLBlendMode}
-        * @private
-        * @since 1.1.0
-        */
-        private _switchBlendMode(gl: WebGLRenderingContext, blendMode: GLBlendMode) {
-            this._currentBlendMode = blendMode;
-            this._currentBlendMode.apply(gl);
-        }
-        
-    }
+			// Mandate blend mode in CocoonJS
+			// This must be called per-frame, because CocoonJS seems to interfere with blend modes on a per-frame basis.
+			if( this._game.deviceTargetOption == Kiwi.TARGET_COCOON ) {
+				this._switchBlendMode( gl, this._currentBlendMode );
+			}
+
+			this.collateRenderSequence();
+			this.collateBatches();
+			this.renderBatches(gl, camera);
+
+			/*if (this._filtersEnabled &amp;&amp; !this.filters.isEmpty) {
+				this.filters.applyFilters(gl);
+				gl.useProgram(this._shaderManager.currentShader.shaderProgram);
+				gl.bindTexture(gl.TEXTURE_2D, this._currentTextureAtlas.glTextureWrapper.texture);
+			}*/
+		}
+
+		private _sequence: any[];
+		private _batches: any[];
+
+
+		/**
+		* Creates a new render sequence
+		* @method collateRenderSequence
+		* @public
+		*/
+		public collateRenderSequence() {
+			this._sequence = [];
+			var root: IChild = this._game.states.current;
+			this.collateChild(root);
+		}
+
+		/**
+		* Adds a child to the render sequence (may be a group with children of it&#x27;s own)
+		* @method collateChild
+		* @public
+		*/
+		public collateChild(child:IChild) {
+			// Do not render non-visible objects or their children
+			if( !child.visible) return;
+			
+			if (child.childType() === Kiwi.GROUP) {
+				for (var i = 0; i &lt; (&lt;Kiwi.Group&gt;child).members.length; i++) {
+					this.collateChild( (&lt;Kiwi.Group&gt;child).members[i]);
+				}
+			} else {
+				var entity: Entity = &lt;Entity&gt;child;
+				this._sequence.push({
+					entity: entity,
+					renderer: entity.glRenderer,
+					shader: entity.glRenderer.shaderPair,
+					isBatchRenderer: entity.glRenderer.isBatchRenderer,
+					texture: entity.atlas
+				});
+			}
+		}
+
+		/**
+		* Sorts the render sequence into batches. Each batch requires the same renderer/shader/texture combination. 
+		* @method collateBatches
+		* @public
+		*/
+		public collateBatches() {
+			var currentRenderer: Renderer = null;
+			var currentShader: Shaders.ShaderPair = null;
+			var currentTexture: Textures.TextureAtlas = null;
+
+			this._batches = [];
+			var batchIndex:number;
+
+			for (var i = 0; i &lt; this._sequence.length; i++) {
+				if (!this._sequence[i].isBatchRenderer ||
+					this._sequence[i].renderer !== currentRenderer ||
+					this._sequence[i].shader !== currentShader ||
+					this._sequence[i].texture !== currentTexture) {
+					//create a new batch
+					var batchIndex = this._batches.push(new Array()) - 1;
+					currentRenderer = this._sequence[i].renderer; 
+					currentShader = this._sequence[i].shader;
+					currentTexture = this._sequence[i].texture;
+
+				} 
+				this._batches[batchIndex].push(this._sequence[i]);
+			}
+		}
+
+		/**
+		* Renders all the batches 
+		* @method renderBatches
+		* @param {WebGLRenderingContext} gl
+		* @param {Kiwi.Camera} camera
+		* @public
+		*/
+		public renderBatches(gl: WebGLRenderingContext, camera) {
+			for (var i = 0; i &lt; this._batches.length; i++)
+				this.renderBatch( gl, this._batches[i], camera );
+		}
+
+		/**
+		* Renders a single batch 
+		* @method renderBatch
+		* @param {WebGLRenderingContext} gl
+		* @param {Object} batch
+		* @param {Kiwi.Camera} camera
+		* @public
+		*/
+		public renderBatch(gl, batch, camera) {
+			// Acquire renderer
+			var rendererSwitched = false;
+			if (batch[0].entity.glRenderer !== this._currentRenderer) {
+				rendererSwitched = true;
+				this._switchRenderer(gl, batch[0].entity);
+			}
+
+			// Clear renderer for fresh data
+			this._currentRenderer.clear(gl, { camMatrix: this.camMatrix });
+
+			// Call render functions
+			for( var i = 0;  i &lt; batch.length;  i++ )
+				batch[i].entity.renderGL(gl, camera);
+
+			// Upload textures
+			if( batch[0].entity.atlas !== this._currentTextureAtlas  ||  batch[0].entity.atlas.dirty ||  (rendererSwitched  &amp;&amp;  batch[0].entity.atlas == this._currentTextureAtlas) )
+				this._switchTexture(gl, batch[0].entity);
+
+			// Manage blend mode
+			// We must always apply BlendMode under CocoonJS, because some (but not all) operations on other canvases may silently change the blend mode and not change it back.
+			if( !this._currentBlendMode.isIdentical( batch[0].entity.glRenderer.blendMode )  ||  this._currentBlendMode.dirty  ||  this._game.deviceTargetOption === Kiwi.TARGET_COCOON )
+				this._switchBlendMode(gl, batch[0].entity.glRenderer.blendMode);
+
+			// Render
+			this._currentRenderer.draw(gl);
+		}
+
+		/**
+		* Calls the render function on a single entity
+		* @method renderEntity
+		* @param {WebGLRenderingContext} gl
+		* @param {Kiwi.Entity} entity
+		* @param {Kiwi.Camera} camera
+		* @public
+		* @deprecated Used internally; should not be called from external functions
+		*/
+		public renderEntity(gl: WebGLRenderingContext, entity: any, camera) {
+			this.renderBatch( gl, [entity], camera );
+		}
+
+		/**
+		* Ensures the atlas and renderer needed for a batch is setup
+		* @method setupGLState
+		* @param {WebGLRenderingContext} gl
+		* @public
+		* @deprecated Used internally; should not be called from external functions.
+		*/
+		public setupGLState(gl:WebGLRenderingContext,entity) {
+			if (entity.atlas !== this._currentTextureAtlas) this._switchTexture(gl, entity);
+			if (entity.glRenderer !== this._currentRenderer) this._switchRenderer(gl, entity);
+		}
+
+		/**
+		* Switch renderer to the one needed by the entity that needs rendering
+		* @method _switchRenderer
+		* @param gl {WebGLRenderingContext}
+		* @param entity {Kiwi.Entity}
+		* @private
+		*/
+		private _switchRenderer(gl: WebGLRenderingContext, entity: Entity) {
+			if (this._currentRenderer) this._currentRenderer.disable(gl);
+			this._currentRenderer = entity.glRenderer;
+			this._currentRenderer.enable(gl, { camMatrix: this.camMatrix, stageResolution: this._stageResolution });
+		}
+
+		/**
+		* Switch texture to the one needed by the entity that needs rendering
+		* @method _switchTexture
+		* @param gl {WebGLRenderingContext}
+		* @param entity {Kiwi.Entity}
+		* @private
+		*/
+		private _switchTexture(gl: WebGLRenderingContext, entity: Entity) {
+			this._currentTextureAtlas = entity.atlas;
+			entity.atlas.enableGL(gl, this._currentRenderer, this._textureManager);
+		}
+
+		/**
+		* Switch blend mode to a new set of constants
+		* @method _switchBlendMode
+		* @param gl {WebGLRenderingContext}
+		* @param blendMode {Kiwi.Renderers.GLBlendMode}
+		* @private
+		* @since 1.1.0
+		*/
+		private _switchBlendMode(gl: WebGLRenderingContext, blendMode: GLBlendMode) {
+			this._currentBlendMode = blendMode;
+			this._currentBlendMode.apply(gl);
+		}
+
+	}
 
 }
 
-
     </pre>
 </div>
 
diff --git a/docs/files/src_render_GLShaderManager.ts.html b/docs/files/src_render_GLShaderManager.ts.html
index fea7565..ea4dbc5 100644
--- a/docs/files/src_render_GLShaderManager.ts.html
+++ b/docs/files/src_render_GLShaderManager.ts.html
@@ -364,7 +364,6 @@ <h1 class="file-heading">File: src/render/GLShaderManager.ts</h1>
 
 <div class="file">
     <pre class="code prettyprint linenums">
-
 /**
 * GLSL ES Shaders are used for WebGL rendering.
 * ShaderPair objects encapsulate GLSL ES vertex and fragment shader programs. 
@@ -384,157 +383,155 @@ <h1 class="file-heading">File: src/render/GLShaderManager.ts</h1>
 * @submodule Shaders 
 * @main Shaders
 * @namespace Kiwi.Shaders
-*/ 
+*/
 
 module Kiwi.Shaders {
 
-    /**
-    * Manages all WebGL Shaders. Maintains a list of ShaderPairs 
-    *  
-    * Provides an interface for using a specific ShaderPair, adding new ShaderPairs, and requesting a reference to a ShaderPair instance.
-    * Renderes use shaderPairs to draw. Multiple renderers may use the same compiled shader program.
-    * This Manager ensures only one compiled instance of each program is created
-    * @class ShaderManager
-    * @extends IRenderer
-    * @constructor
-    * @return {Kiwi.Shaders.ShaderManager}
-    */
-    export class ShaderManager {
-
-        constructor() {
-            
-        }
-        
-
-         /**
-        * An object containing a set of properties each of which references a ShaderPair. 
-        * @property _shaderPairs
-        * @type Object
-        * @private
-        */
-        private _shaderPairs: any = {};
-
-        /**
-        * The shader program that is currently set to be used useing gl.useProgram.
-        * @property currentShader
-        * @type Array
-        * @private
-        */
-
-        public get currentShader(): ShaderPair {
-            return this._currentShader;
-        }
-        private _currentShader: ShaderPair;
-
-
-        /**
-	    * Sets up a default shaderPair.
-	    * @method init
-        * @param {WebGLRenderingContext} gl
-        * @param {String} defaultShaderID
-        * @public
-	    */
-        public init(gl: WebGLRenderingContext, defaultShaderID: string) {
-            this._currentShader = this.requestShader(gl, defaultShaderID);
-        }
-
-
-        /**
-	    * Provides a reference to a ShaderPair. If the requested ShaderPair exists as a property on the _shaderPairs object it will be returned if already loaded,
-        * otherwise it will be loaded, then returned.
-        *
-        * If the request is not on the list, the Kiwi.Shaders object will  be checked for a property name that matches shaderID and a new ShaderPair
-        * will be instantiated, loaded, and set for use.
-
-	    * @method requestShader
-        * @param {WebGLRenderingContext} gl
-        * @param {String} shaderID
-        * @param {boolean} use
-        * @return {Kiwi.Shaders.ShaderPair} a ShaderPair instance - null on fail
-        * @public
-	    */
-        public requestShader(gl: WebGLRenderingContext,shaderID: string,use:boolean = true):ShaderPair {
-
-            var shader: ShaderPair;
-            //in list already?
-            if (shaderID in this._shaderPairs) {
-                shader = this._shaderPairs[shaderID];
-                if (!shader.loaded) {
-                    this._loadShader(gl, shader);
-                }
-                if(use)
-                    this._useShader(gl, shader);
-                return shader;
-            } else {
-                //not in list, does it exist?
-                if ( this.shaderExists(gl, shaderID) ) {
-                    shader = this._addShader(gl, shaderID);
-                    this._loadShader(gl, shader);
-                    if(use)
-                        this._useShader(gl, shader);
-                    return shader;
-                } else {
-                    Kiwi.Log.log(&quot;Shader &quot; + shaderID + &quot; does not exist.&quot;, &#x27;#renderer&#x27;, &#x27;#webgl&#x27;);
-                }
-            }
-            //unsuccessful request
-            return null;
-        }
-
-        /**
-	    * Tests to see if a ShaderPair property named ShaderID exists on Kiwi.Shaders. Can be used to test for the availability of specific shaders (for fallback)
-	    * @method shaderExists
-        * @param {WebGLRenderingContext} gl
-        * @param {String} shaderID
-        * @return {Boolean} success
-        * @public
-	    */
-        public shaderExists(gl: WebGLRenderingContext, shaderID: string):boolean {
-            return shaderID in Kiwi.Shaders;
-        }
-
-        /**
-	    * Creates a new instance of a ShaderPair and adds a reference to the _shaderPairs object
-	    * @method _addShader
-        * @param {WebGLRenderingContext} gl
-        * @param {String} shaderID
-        * @return {Kiwi.Shaders.ShaderPair} 
-        * @private
-	    */
-        private _addShader(gl: WebGLRenderingContext, shaderID: string):ShaderPair {
-            this._shaderPairs[shaderID] = new Kiwi.Shaders[shaderID]();
-            return this._shaderPairs[shaderID];
-        }
-
-        /**
-	    * Tells a ShaderPair to load (compile and link)
-	    * @method _loadShader
-        * @param {WebGLRenderingContext} gl
-        * @param {Kiwi.Shaders.ShaderPair} shader
-        * @private
-	    */
-        private _loadShader(gl: WebGLRenderingContext,shader:ShaderPair) {
-            shader.init(gl);
-        }
-
-        /**
-	    * Changes gl state so that the shaderProgram contined in a ShaderPir is bound for use
-	    * @method _useShader
-        * @param {WebGLRenderingContext} gl
-        * @param {Kiwi.Shaders.ShaderPair} shader
-        * @private
-	    */
-        private _useShader(gl: WebGLRenderingContext, shader: ShaderPair) {
-            if (shader !== this._currentShader) {
-                this._currentShader = shader;
-            }
-            gl.useProgram(shader.shaderProgram);
-        }
-
-
-    }
+	/**
+	* Manages all WebGL Shaders. Maintains a list of ShaderPairs 
+	*  
+	* Provides an interface for using a specific ShaderPair, adding new ShaderPairs, and requesting a reference to a ShaderPair instance.
+	* Renderes use shaderPairs to draw. Multiple renderers may use the same compiled shader program.
+	* This Manager ensures only one compiled instance of each program is created
+	* @class ShaderManager
+	* @extends IRenderer
+	* @constructor
+	* @return {Kiwi.Shaders.ShaderManager}
+	*/
+	export class ShaderManager {
+
+		constructor() {}
+
+
+		/**
+		* An object containing a set of properties each of which references a ShaderPair. 
+		* @property _shaderPairs
+		* @type Object
+		* @private
+		*/
+		private _shaderPairs: any = {};
+
+		/**
+		* The shader program that is currently set to be used useing gl.useProgram.
+		* @property currentShader
+		* @type Array
+		* @private
+		*/
+
+		public get currentShader(): ShaderPair {
+			return this._currentShader;
+		}
+		private _currentShader: ShaderPair;
+
+
+		/**
+		* Sets up a default shaderPair.
+		* @method init
+		* @param {WebGLRenderingContext} gl
+		* @param {String} defaultShaderID
+		* @public
+		*/
+		public init(gl: WebGLRenderingContext, defaultShaderID: string) {
+			this._currentShader = this.requestShader(gl, defaultShaderID);
+		}
+
+
+		/**
+		* Provides a reference to a ShaderPair. If the requested ShaderPair exists as a property on the _shaderPairs object it will be returned if already loaded,
+		* otherwise it will be loaded, then returned.
+		*
+		* If the request is not on the list, the Kiwi.Shaders object will  be checked for a property name that matches shaderID and a new ShaderPair
+		* will be instantiated, loaded, and set for use.
+
+		* @method requestShader
+		* @param {WebGLRenderingContext} gl
+		* @param {String} shaderID
+		* @param {boolean} use
+		* @return {Kiwi.Shaders.ShaderPair} a ShaderPair instance - null on fail
+		* @public
+		*/
+		public requestShader(gl: WebGLRenderingContext,shaderID: string,use:boolean = true):ShaderPair {
+
+			var shader: ShaderPair;
+			//in list already?
+			if (shaderID in this._shaderPairs) {
+				shader = this._shaderPairs[shaderID];
+				if (!shader.loaded) {
+					this._loadShader(gl, shader);
+				}
+				if(use)
+					this._useShader(gl, shader);
+				return shader;
+			} else {
+				//not in list, does it exist?
+				if ( this.shaderExists(gl, shaderID) ) {
+					shader = this._addShader(gl, shaderID);
+					this._loadShader(gl, shader);
+					if(use)
+						this._useShader(gl, shader);
+					return shader;
+				} else {
+					Kiwi.Log.log(&quot;Shader &quot; + shaderID + &quot; does not exist.&quot;, &#x27;#renderer&#x27;, &#x27;#webgl&#x27;);
+				}
+			}
+			//unsuccessful request
+			return null;
+		}
+
+		/**
+		* Tests to see if a ShaderPair property named ShaderID exists on Kiwi.Shaders. Can be used to test for the availability of specific shaders (for fallback)
+		* @method shaderExists
+		* @param {WebGLRenderingContext} gl
+		* @param {String} shaderID
+		* @return {Boolean} success
+		* @public
+		*/
+		public shaderExists(gl: WebGLRenderingContext, shaderID: string):boolean {
+			return shaderID in Kiwi.Shaders;
+		}
+
+		/**
+		* Creates a new instance of a ShaderPair and adds a reference to the _shaderPairs object
+		* @method _addShader
+		* @param {WebGLRenderingContext} gl
+		* @param {String} shaderID
+		* @return {Kiwi.Shaders.ShaderPair} 
+		* @private
+		*/
+		private _addShader(gl: WebGLRenderingContext, shaderID: string):ShaderPair {
+			this._shaderPairs[shaderID] = new Kiwi.Shaders[shaderID]();
+			return this._shaderPairs[shaderID];
+		}
+
+		/**
+		* Tells a ShaderPair to load (compile and link)
+		* @method _loadShader
+		* @param {WebGLRenderingContext} gl
+		* @param {Kiwi.Shaders.ShaderPair} shader
+		* @private
+		*/
+		private _loadShader(gl: WebGLRenderingContext,shader:ShaderPair) {
+			shader.init(gl);
+		}
+
+		/**
+		* Changes gl state so that the shaderProgram contined in a ShaderPir is bound for use
+		* @method _useShader
+		* @param {WebGLRenderingContext} gl
+		* @param {Kiwi.Shaders.ShaderPair} shader
+		* @private
+		*/
+		private _useShader(gl: WebGLRenderingContext, shader: ShaderPair) {
+			if (shader !== this._currentShader) {
+				this._currentShader = shader;
+			}
+			gl.useProgram(shader.shaderProgram);
+		}
+
+	}
 
 }
+
     </pre>
 </div>
 
diff --git a/docs/files/src_render_GLTextureManager.ts.html b/docs/files/src_render_GLTextureManager.ts.html
index a1bdca2..88aa8a1 100644
--- a/docs/files/src_render_GLTextureManager.ts.html
+++ b/docs/files/src_render_GLTextureManager.ts.html
@@ -364,7 +364,6 @@ <h1 class="file-heading">File: src/render/GLTextureManager.ts</h1>
 
 <div class="file">
     <pre class="code prettyprint linenums">
-
 /**
 * 
 * 
@@ -372,259 +371,257 @@ <h1 class="file-heading">File: src/render/GLTextureManager.ts</h1>
 * @submodule Renderers 
 * @main Renderers
 * @namespace Kiwi.Renderers
-*/ 
+*/
 
 module Kiwi.Renderers {
 
-     /**
-    * Manages GL Texture objects, including creation, uploading, destruction and memory management
-    * @class GLTextureManager
-    * @constructor
-    * @return {GLTextureManager}
-    */
-    export class GLTextureManager {
-
-        constructor() {
-            this._numTexturesUsed = 0;
-            this._usedTextureMem = 0;
-            this.maxTextureMem = GLTextureManager.DEFAULT_MAX_TEX_MEM_MB * 1024 * 1024;
-            this._textureWrapperCache = new Array();
-        }
-
-        /**
-        * The default maximum amount of texture memory to use before swapping textures
-        * @property DEFAULT_MAX_TEX_MEM_MB
-        * @type number
-        * @public
-        * @static
-        */
-        public static DEFAULT_MAX_TEX_MEM_MB: number = 1024; 
-
-        /**
-        * The maximum amount of texture memory to use before swapping textures, initialised from DEFAULT_MAX_TEX_MEM_MB
-        * @property maxTextureMem
-        * @type number
-        * @public
-        */
-        public maxTextureMem: number;
-     
-        /**
-        * The amount of texture memory currently uplaoded
-        * @property usedTextureMem
-        * @type number
-        * @public
-        */
-        private _usedTextureMem: number;
-        public get usedTextureMem(): number {
-            return this._usedTextureMem;
-        }
-
-        /**
-        * The number of textures currently uplaoded
-        * @property usedTextureMem
-        * @type number
-        * @public
-        */
-        private _numTexturesUsed: number;
-        public get numTexturesUsed(): number {
-            return this._numTexturesUsed;
-        }
-        
-        /**
-        * The number of textures uploads in the last frame
-        * @property numTextureWrites
-        * @type number
-        * @public
-        */
-        public numTextureWrites: number = 0;
-        
-        
-        /**
-        * An array of references to all texture wrappers
-        * @property _textureWrapperCache
-        * @type GLTextureWrapper[]
-        * @private
-        */
-        private _textureWrapperCache: GLTextureWrapper[];
-
-        /**
-        * Adds a texture wrapper to the cache
-        * @method _addTextureToCache
-        * @param glTexture {GLTextureWrapper}
-        * @private
-        */
-        private _addTextureToCache(glTexture: GLTextureWrapper) {
-            this._textureWrapperCache.push(glTexture);
-        }
-        
-        /**
-        * Deletes a texture from memory and removes the wrapper from the cache
-        * @method _deleteTexture
-        * @param gl {WebGLRenderingContext}
-        * @param idx {number}
-        * @private
-        */
-        private _deleteTexture(gl:WebGLRenderingContext,idx:number) {
-            
-            this._textureWrapperCache[idx].deleteTexture(gl);
-            this._usedTextureMem -= this._textureWrapperCache[idx].numBytes;
-            this._numTexturesUsed--;
-        }
-
-        /**
-        * Uploads a texture to video memory 
-        * @method _uploadTexture
-        * @param gl {WebGLRenderingContext}
-        * @param glTextureWrapper {GLTextureWrapper}
-        * @return boolean
-        * @private
-        */
-        private _uploadTexture(gl: WebGLRenderingContext, glTextureWrapper: GLTextureWrapper):boolean {
-            //only upload it if it fits
-            if (glTextureWrapper.numBytes + this._usedTextureMem &lt;= this.maxTextureMem) {
-                glTextureWrapper.uploadTexture(gl);
-                this._usedTextureMem += glTextureWrapper.numBytes;
-                this._numTexturesUsed++;
-                
-                return true;
-            }
-            return false;
-                
-        }
-
-        /**
-        * Uploads a texture library to video memory 
-        * @method uploadTextureLibrary
-        * @param gl {WebGLRenderingContext}
-        * @param textureLibrary {Kiwi.Textures.TextureLibrary}
-        * @public
-        */
-        public uploadTextureLibrary(gl: WebGLRenderingContext, textureLibrary: Kiwi.Textures.TextureLibrary) {
-            this._textureWrapperCache = new Array();
-            for (var tex in textureLibrary.textures) {
-                // Tell the atlas to prepare its wrappers
-                textureLibrary.textures[tex].createGLTextureWrapper( gl, this );
-            }
-        }
-
-        /**
-        * Uploads a single texture to video memory
-        * @method uploadTexture
-        * @param gl {WebGLRenderingContext}
-        * @param textureAtlas {Kiwi.Textures.TextureAtlas}
-        * @public
-        */
-        public uploadTexture(gl: WebGLRenderingContext, textureAtlas: Kiwi.Textures.TextureAtlas) {
-            textureAtlas.createGLTextureWrapper( gl, this );
-        }
-
-        /**
-        * Adds a texture wrapper to the manager. This both adds the wrapper to the manager cache, and attempts to upload the attached texture to video memory.
-        * @method registerTextureWrapper
-        * @param gl {WebGLRenderingContext}
-        * @param glTextureWrapper {GLTextureWrapper}
-        * @public
-        * @since 1.1.0
-        */
-        public registerTextureWrapper( gl: WebGLRenderingContext, glTextureWrapper: GLTextureWrapper ) {
-            this._addTextureToCache( glTextureWrapper );
-            // Only upload it if it fits
-            if (!this._uploadTexture(gl, glTextureWrapper)) {
-                Kiwi.Log.log(&quot;...skipped uploading texture due to allocated texture memory exceeded.&quot;, &#x27;#renderer&#x27;, &#x27;#webgl&#x27;);
-            }
-        }
-
-        /**
-        * Removes all textures from video memory and clears the wrapper cache
-        * @method clearTextures
-        * @param gl {WebGLRenderingContext}
-        * @public
-        */
-        public clearTextures(gl: WebGLRenderingContext) {
-            for (var i = 0; i &lt; this._textureWrapperCache.length; i++) {
-                // Delete from graphics memory
-                this._deleteTexture(gl, i);
-                //kill the reference on the atlas
-                this._textureWrapperCache[i].textureAtlas.glTextureWrapper = null;
-            }    
-            this._textureWrapperCache = new Array();
-           
-        }
-
-
-        /**
-        * Binds the texture ready for use, uploads it if it isn&#x27;t already
-        * @method useTexture
-        * @param gl {WebGLRenderingContext}
-        * @param glTextureWrapper {GLTextureWrappery}
-        * @param [textureUnit=0] {number} Optional parameter for multitexturing. You can have up to 32 textures available to a shader at one time, in the range 0-31. If you don&#x27;t need multiple textures, this is perfectly safe to ignore.
-        * @return boolean
-        * @public
-        */
-        public useTexture(gl:WebGLRenderingContext,glTextureWrapper: GLTextureWrapper, textureUnit: number = 0):boolean {
-            textureUnit = Kiwi.Utils.GameMath.clamp( Kiwi.Utils.GameMath.truncate(textureUnit), 31);    // Convert to integer in range 0-31.
-            
-            if (!glTextureWrapper.created || !glTextureWrapper.uploaded) {
-                if(!this._uploadTexture(gl, glTextureWrapper)) {
-                    this._freeSpace(gl, glTextureWrapper.numBytes);
-                    this._uploadTexture(gl, glTextureWrapper);
-                }
-                this.numTextureWrites++;
-            }
-                
-            //use texture
-            if (glTextureWrapper.created &amp;&amp; glTextureWrapper.uploaded) {
-                // Determine target texture unit
-                // This could be determined as:
-                //   var targetTextureUnit = &quot;TEXTURE&quot; + textureUnit;
-                //   gl.activeTexture(gl[targetTextureUnit]);
-                // But because the Khronos WebGL spec defines 
-                // the glenums of TEXTURE0-31 to be consecutive,
-                // this should be safe and fast:
-                var targetTextureUnit = gl.TEXTURE0 + textureUnit;
-                gl.activeTexture(targetTextureUnit);
-                // Bind texture to unit
-                gl.bindTexture(gl.TEXTURE_2D, glTextureWrapper.texture);
-
-                //gl.uniform2fv(textureSizeUniform, new Float32Array([glTextureWrapper.image.width, glTextureWrapper.image.height]));
-                return true;
-            }
-            
-            return false;
-        }
-        
-        /**
-        * Attempts to free space in video memory.
-        *
-        * This removes textures sequentially, starting from the first cached texture. This may remove textures that are in use. These should automatically re-upload into the last position. After a few frames, this will push in-use textures to the safe end of the queue.
-        *
-        * If there are too many textures in use to fit in memory, they will all be cycled every frame, even if it would be more efficient to swap out one or two very large textures and preserve several smaller ones. This is an issue with this implementation and should be fixed.
-        *
-        * This behaviour was changed in v1.1.0. Previous versions used a different memory freeing algorithm.
-        * @method _freeSpace
-        * @param gl {WebGLRenderingContext}
-        * @param numBytesToRemove {number}
-        * @return boolean
-        * @private
-        */
-        private _freeSpace(gl: WebGLRenderingContext, numBytesToRemove: number): boolean {
-            // Sequential remover
-            var bytesRemoved = 0;
-            for( var i = 0;  i &lt; this._textureWrapperCache.length;  i++ ) {
-                // Scrub uploaded textures
-                if(this._textureWrapperCache[i].uploaded) {
-                    bytesRemoved += this._textureWrapperCache[i].numBytes;
-                    this._deleteTexture(gl, i);
-                }
-                // Break on reaching or exceeding free target
-                if( numBytesToRemove &lt;= bytesRemoved )
-                    return true;
-            }
-                        
-            return false;
-        }
-
-    }
+	 /**
+	* Manages GL Texture objects, including creation, uploading, destruction and memory management
+	* @class GLTextureManager
+	* @constructor
+	* @return {GLTextureManager}
+	*/
+	export class GLTextureManager {
+
+		constructor() {
+			this._numTexturesUsed = 0;
+			this._usedTextureMem = 0;
+			this.maxTextureMem = GLTextureManager.DEFAULT_MAX_TEX_MEM_MB * 1024 * 1024;
+			this._textureWrapperCache = new Array();
+		}
+
+		/**
+		* The default maximum amount of texture memory to use before swapping textures
+		* @property DEFAULT_MAX_TEX_MEM_MB
+		* @type number
+		* @public
+		* @static
+		*/
+		public static DEFAULT_MAX_TEX_MEM_MB: number = 1024; 
+
+		/**
+		* The maximum amount of texture memory to use before swapping textures, initialised from DEFAULT_MAX_TEX_MEM_MB
+		* @property maxTextureMem
+		* @type number
+		* @public
+		*/
+		public maxTextureMem: number;
+
+		/**
+		* The amount of texture memory currently uplaoded
+		* @property usedTextureMem
+		* @type number
+		* @public
+		*/
+		private _usedTextureMem: number;
+		public get usedTextureMem(): number {
+			return this._usedTextureMem;
+		}
+
+		/**
+		* The number of textures currently uplaoded
+		* @property usedTextureMem
+		* @type number
+		* @public
+		*/
+		private _numTexturesUsed: number;
+		public get numTexturesUsed(): number {
+			return this._numTexturesUsed;
+		}
+
+		/**
+		* The number of textures uploads in the last frame
+		* @property numTextureWrites
+		* @type number
+		* @public
+		*/
+		public numTextureWrites: number = 0;
+
+
+		/**
+		* An array of references to all texture wrappers
+		* @property _textureWrapperCache
+		* @type GLTextureWrapper[]
+		* @private
+		*/
+		private _textureWrapperCache: GLTextureWrapper[];
+
+		/**
+		* Adds a texture wrapper to the cache
+		* @method _addTextureToCache
+		* @param glTexture {GLTextureWrapper}
+		* @private
+		*/
+		private _addTextureToCache(glTexture: GLTextureWrapper) {
+			this._textureWrapperCache.push(glTexture);
+		}
+
+		/**
+		* Deletes a texture from memory and removes the wrapper from the cache
+		* @method _deleteTexture
+		* @param gl {WebGLRenderingContext}
+		* @param idx {number}
+		* @private
+		*/
+		private _deleteTexture(gl:WebGLRenderingContext,idx:number) {
+			
+			this._textureWrapperCache[idx].deleteTexture(gl);
+			this._usedTextureMem -= this._textureWrapperCache[idx].numBytes;
+			this._numTexturesUsed--;
+		}
+
+		/**
+		* Uploads a texture to video memory 
+		* @method _uploadTexture
+		* @param gl {WebGLRenderingContext}
+		* @param glTextureWrapper {GLTextureWrapper}
+		* @return boolean
+		* @private
+		*/
+		private _uploadTexture(gl: WebGLRenderingContext, glTextureWrapper: GLTextureWrapper):boolean {
+			//only upload it if it fits
+			if (glTextureWrapper.numBytes + this._usedTextureMem &lt;= this.maxTextureMem) {
+				glTextureWrapper.uploadTexture(gl);
+				this._usedTextureMem += glTextureWrapper.numBytes;
+				this._numTexturesUsed++;
+				
+				return true;
+			}
+			return false;
+
+		}
+
+		/**
+		* Uploads a texture library to video memory 
+		* @method uploadTextureLibrary
+		* @param gl {WebGLRenderingContext}
+		* @param textureLibrary {Kiwi.Textures.TextureLibrary}
+		* @public
+		*/
+		public uploadTextureLibrary(gl: WebGLRenderingContext, textureLibrary: Kiwi.Textures.TextureLibrary) {
+			this._textureWrapperCache = new Array();
+			for (var tex in textureLibrary.textures) {
+				// Tell the atlas to prepare its wrappers
+				textureLibrary.textures[tex].createGLTextureWrapper( gl, this );
+			}
+		}
+
+		/**
+		* Uploads a single texture to video memory
+		* @method uploadTexture
+		* @param gl {WebGLRenderingContext}
+		* @param textureAtlas {Kiwi.Textures.TextureAtlas}
+		* @public
+		*/
+		public uploadTexture(gl: WebGLRenderingContext, textureAtlas: Kiwi.Textures.TextureAtlas) {
+			textureAtlas.createGLTextureWrapper( gl, this );
+		}
+
+		/**
+		* Adds a texture wrapper to the manager. This both adds the wrapper to the manager cache, and attempts to upload the attached texture to video memory.
+		* @method registerTextureWrapper
+		* @param gl {WebGLRenderingContext}
+		* @param glTextureWrapper {GLTextureWrapper}
+		* @public
+		* @since 1.1.0
+		*/
+		public registerTextureWrapper( gl: WebGLRenderingContext, glTextureWrapper: GLTextureWrapper ) {
+			this._addTextureToCache( glTextureWrapper );
+			// Only upload it if it fits
+			if (!this._uploadTexture(gl, glTextureWrapper)) {
+				Kiwi.Log.log(&quot;...skipped uploading texture due to allocated texture memory exceeded.&quot;, &#x27;#renderer&#x27;, &#x27;#webgl&#x27;);
+			}
+		}
+
+		/**
+		* Removes all textures from video memory and clears the wrapper cache
+		* @method clearTextures
+		* @param gl {WebGLRenderingContext}
+		* @public
+		*/
+		public clearTextures(gl: WebGLRenderingContext) {
+			for (var i = 0; i &lt; this._textureWrapperCache.length; i++) {
+				// Delete from graphics memory
+				this._deleteTexture(gl, i);
+				//kill the reference on the atlas
+				this._textureWrapperCache[i].textureAtlas.glTextureWrapper = null;
+			}    
+			this._textureWrapperCache = new Array();
+		}
+
+
+		/**
+		* Binds the texture ready for use, uploads it if it isn&#x27;t already
+		* @method useTexture
+		* @param gl {WebGLRenderingContext}
+		* @param glTextureWrapper {GLTextureWrappery}
+		* @param [textureUnit=0] {number} Optional parameter for multitexturing. You can have up to 32 textures available to a shader at one time, in the range 0-31. If you don&#x27;t need multiple textures, this is perfectly safe to ignore.
+		* @return boolean
+		* @public
+		*/
+		public useTexture(gl:WebGLRenderingContext,glTextureWrapper: GLTextureWrapper, textureUnit: number = 0):boolean {
+			textureUnit = Kiwi.Utils.GameMath.clamp( Kiwi.Utils.GameMath.truncate(textureUnit), 31);    // Convert to integer in range 0-31.
+			
+			if (!glTextureWrapper.created || !glTextureWrapper.uploaded) {
+				if(!this._uploadTexture(gl, glTextureWrapper)) {
+					this._freeSpace(gl, glTextureWrapper.numBytes);
+					this._uploadTexture(gl, glTextureWrapper);
+				}
+				this.numTextureWrites++;
+			}
+				
+			//use texture
+			if (glTextureWrapper.created &amp;&amp; glTextureWrapper.uploaded) {
+				// Determine target texture unit
+				// This could be determined as:
+				//   var targetTextureUnit = &quot;TEXTURE&quot; + textureUnit;
+				//   gl.activeTexture(gl[targetTextureUnit]);
+				// But because the Khronos WebGL spec defines 
+				// the glenums of TEXTURE0-31 to be consecutive,
+				// this should be safe and fast:
+				var targetTextureUnit = gl.TEXTURE0 + textureUnit;
+				gl.activeTexture(targetTextureUnit);
+				// Bind texture to unit
+				gl.bindTexture(gl.TEXTURE_2D, glTextureWrapper.texture);
+
+				//gl.uniform2fv(textureSizeUniform, new Float32Array([glTextureWrapper.image.width, glTextureWrapper.image.height]));
+				return true;
+			}
+
+			return false;
+		}
+
+		/**
+		* Attempts to free space in video memory.
+		*
+		* This removes textures sequentially, starting from the first cached texture. This may remove textures that are in use. These should automatically re-upload into the last position. After a few frames, this will push in-use textures to the safe end of the queue.
+		*
+		* If there are too many textures in use to fit in memory, they will all be cycled every frame, even if it would be more efficient to swap out one or two very large textures and preserve several smaller ones. This is an issue with this implementation and should be fixed.
+		*
+		* This behaviour was changed in v1.1.0. Previous versions used a different memory freeing algorithm.
+		* @method _freeSpace
+		* @param gl {WebGLRenderingContext}
+		* @param numBytesToRemove {number}
+		* @return boolean
+		* @private
+		*/
+		private _freeSpace(gl: WebGLRenderingContext, numBytesToRemove: number): boolean {
+			// Sequential remover
+			var bytesRemoved = 0;
+			for( var i = 0;  i &lt; this._textureWrapperCache.length;  i++ ) {
+				// Scrub uploaded textures
+				if(this._textureWrapperCache[i].uploaded) {
+					bytesRemoved += this._textureWrapperCache[i].numBytes;
+					this._deleteTexture(gl, i);
+				}
+				// Break on reaching or exceeding free target
+				if( numBytesToRemove &lt;= bytesRemoved )
+					return true;
+			}
+			return false;
+		}
+
+	}
 
 }
 
diff --git a/docs/files/src_render_GLTextureWrapper.ts.html b/docs/files/src_render_GLTextureWrapper.ts.html
index 6b4cefc..90f975c 100644
--- a/docs/files/src_render_GLTextureWrapper.ts.html
+++ b/docs/files/src_render_GLTextureWrapper.ts.html
@@ -364,8 +364,6 @@ <h1 class="file-heading">File: src/render/GLTextureWrapper.ts</h1>
 
 <div class="file">
     <pre class="code prettyprint linenums">
-
-
 /**
 *  
 * @module Kiwi
@@ -375,166 +373,169 @@ <h1 class="file-heading">File: src/render/GLTextureWrapper.ts</h1>
 */
 
 module Kiwi.Renderers {
-     
-    /**
-    * Wraps a webGL texture object
-    * @class GLTextureWrapper
-    * @constructor
-    * @param gl {WebGLRenderingContext}
-    * @param atlas {Kiwi.Textures.TextureAtlas} The wrapper will default to wrapping atlas.image.
-    * @return {Kiwi.Renderers.GLTextureWrapper}
-    */
-    export class GLTextureWrapper {
-
-        constructor(gl: WebGLRenderingContext, atlas: Kiwi.Textures.TextureAtlas,upload:boolean = false) {
-            this.textureAtlas = atlas;
-            this._image = atlas.image;
-            this._numBytes = this._image.width * this._image.height * 4;
-            this.createTexture(gl);
-            if (upload) this.uploadTexture(gl);
-       
-        }
-
-        /**
-        * The textureAtlas used by the GLTexture
-        * @property textureAtlas
-        * @type Kiwi.Textures.TextureAtlas
-        */
-
-        public textureAtlas: Kiwi.Textures.TextureAtlas;
-
-        /**
-        * The number of bytes in the texture
-        * @property numBytes
-        * @type Kiwi.Textures.TextureAtlas
-        */
-
-        private _numBytes: number;
-        public get numBytes(): number {
-            return this._numBytes;
-        }
-
-        /**
-        * Returns whether the texture has been created
-        * @property created
-        * @type boolean
-        */
-        private _created: boolean = false;
-        public get created(): boolean {
-            return this._created;
-        }
-        
-        /**
-        * Returns whether the texture has been uploaded to video memory
-        * @property uploaded
-        * @type boolean
-        */
-        private _uploaded: boolean = false;
-        public get uploaded(): boolean {
-            return this._uploaded;
-        }
-
-        /**
-        *
-        * @property texture
-        * @type WebGLTexture
-        * @public
-        */
-        public texture: WebGLTexture;
-        
-        /**
-        * The image wrapped by this wrapper.
-        * @property image
-        * @type HTMLImageElement
-        * @public
-        */
-        private _image: HTMLImageElement;
-        public get image(): HTMLImageElement {
-            return( this._image );
-        }
-        public set image(image: HTMLImageElement) {
-            this._image = image;
-            this._numBytes = this._image.width * this._image.height * 4;
-            this._uploaded = false;
-        }
-
-        //force : if true then other textures will be removed until there is room.
-
-
-        /**
-        * Creates a webgl texture object
-        * @method createTexture
-        * @param gl {WebGLRenderingContext}
-        * @public
-        */
-        public createTexture(gl: WebGLRenderingContext): boolean {
-            this.texture = gl.createTexture();
-            this._created = true;
-            return true;
-        }
-
-        
-        /**
-        * Uploads a webgl texture object to video memory
-        * @method uploadTexture
-        * @param gl {WebGLRenderingContext}
-        * @public
-        */
-        public uploadTexture(gl: WebGLRenderingContext):boolean {
-            var success: boolean = false;
-            if (!this.created) {
-                this.createTexture(gl);
-            }
-
-            if (this.uploaded) {
-                Kiwi.Log.log(&quot;...not uploading:the image is already uploaded.&quot;, &#x27;#renderer&#x27;, &#x27;#webgl&#x27;); 
-            } else {
-                gl.bindTexture(gl.TEXTURE_2D, this.texture);
-                gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, 0);
-                gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, this._image);
-                gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
-                gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
-            
-                gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
-                gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
-                gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
-                gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
-                gl.bindTexture(gl.TEXTURE_2D, null);
-                //check gl error here
-                this._uploaded = true;
-                success = true;
-            }
-
-            return success;
-        }
-
-        /**
-        * Re-uploads a webgl texture object to video memory
-        * @method refreshTexture
-        * @param gl {WebGLRenderingContext}
-        * @public
-        */
-        public refreshTexture(gl: WebGLRenderingContext) {
-            this.numBytes = this._image.width * this._image.height * 4;
-            gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, this._image);
-        }
-
-        /**
-        * Deletes a webgl texture
-        * @method deleteTexture
-        * @param gl {WebGLRenderingContext}
-        * @public
-        */
-        public deleteTexture(gl: WebGLRenderingContext) :boolean{
-            gl.deleteTexture(this.texture);
-            this._uploaded = false;
-            this._created = false;
-            return true;
-        }
-
-
-      
-    }
+
+	/**
+	* Wraps a webGL texture object
+	* @class GLTextureWrapper
+	* @constructor
+	* @param gl {WebGLRenderingContext}
+	* @param atlas {Kiwi.Textures.TextureAtlas} The wrapper will default to wrapping atlas.image.
+	* @return {Kiwi.Renderers.GLTextureWrapper}
+	*/
+	export class GLTextureWrapper {
+
+		constructor(gl: WebGLRenderingContext, atlas: Kiwi.Textures.TextureAtlas,upload:boolean = false) {
+			this.textureAtlas = atlas;
+			this._image = atlas.image;
+			this._numBytes = this._image.width * this._image.height * 4;
+			this.createTexture(gl);
+			if (upload) this.uploadTexture(gl);
+
+		}
+
+		/**
+		* The textureAtlas used by the GLTexture
+		* @property textureAtlas
+		* @type Kiwi.Textures.TextureAtlas
+		*/
+
+		public textureAtlas: Kiwi.Textures.TextureAtlas;
+
+		/**
+		* The number of bytes in the texture
+		* @property numBytes
+		* @type Kiwi.Textures.TextureAtlas
+		*/
+
+		private _numBytes: number;
+		public get numBytes(): number {
+			return this._numBytes;
+		}
+
+		/**
+		* Returns whether the texture has been created
+		* @property created
+		* @type boolean
+		*/
+		private _created: boolean = false;
+		public get created(): boolean {
+			return this._created;
+		}
+
+		/**
+		* Returns whether the texture has been uploaded to video memory
+		* @property uploaded
+		* @type boolean
+		*/
+		private _uploaded: boolean = false;
+		public get uploaded(): boolean {
+			return this._uploaded;
+		}
+
+		/**
+		*
+		* @property texture
+		* @type WebGLTexture
+		* @public
+		*/
+		public texture: WebGLTexture;
+
+		/**
+		* The image wrapped by this wrapper.
+		* @property _image
+		* @type HTMLImageElement
+		* @private
+		*/
+		private _image: HTMLImageElement;
+
+		/**
+		* The image wrapped by this wrapper.
+		* @property image
+		* @type HTMLImageElement
+		* @public
+		*/
+		public get image(): HTMLImageElement {
+			return( this._image );
+		}
+		public set image(image: HTMLImageElement) {
+			this._image = image;
+			this._numBytes = this._image.width * this._image.height * 4;
+			this._uploaded = false;
+		}
+
+
+		/**
+		* Creates a webgl texture object
+		* @method createTexture
+		* @param gl {WebGLRenderingContext}
+		* @public
+		*/
+		public createTexture(gl: WebGLRenderingContext): boolean {
+			this.texture = gl.createTexture();
+			this._created = true;
+			return true;
+		}
+
+
+		/**
+		* Uploads a webgl texture object to video memory
+		* @method uploadTexture
+		* @param gl {WebGLRenderingContext}
+		* @public
+		*/
+		public uploadTexture(gl: WebGLRenderingContext):boolean {
+			var success: boolean = false;
+			if (!this.created) {
+				this.createTexture(gl);
+			}
+
+			if (this.uploaded) {
+				Kiwi.Log.log(&quot;...not uploading:the image is already uploaded.&quot;, &#x27;#renderer&#x27;, &#x27;#webgl&#x27;); 
+			} else {
+				gl.bindTexture(gl.TEXTURE_2D, this.texture);
+				gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, 0);
+				gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, this._image);
+				gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
+				gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
+			
+				gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
+				gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
+				gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
+				gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
+				gl.bindTexture(gl.TEXTURE_2D, null);
+				//check gl error here
+				this._uploaded = true;
+				success = true;
+			}
+
+			return success;
+		}
+
+		/**
+		* Re-uploads a webgl texture object to video memory
+		* @method refreshTexture
+		* @param gl {WebGLRenderingContext}
+		* @public
+		*/
+		public refreshTexture(gl: WebGLRenderingContext) {
+			this.numBytes = this._image.width * this._image.height * 4;
+			gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, this._image);
+		}
+
+		/**
+		* Deletes a webgl texture
+		* @method deleteTexture
+		* @param gl {WebGLRenderingContext}
+		* @public
+		*/
+		public deleteTexture(gl: WebGLRenderingContext) :boolean{
+			gl.deleteTexture(this.texture);
+			this._uploaded = false;
+			this._created = false;
+			return true;
+		}
+
+	}
 
 }
 
diff --git a/docs/files/src_render_renderers_Renderer.ts.html b/docs/files/src_render_renderers_Renderer.ts.html
index c25b8d2..1e3e3ce 100644
--- a/docs/files/src_render_renderers_Renderer.ts.html
+++ b/docs/files/src_render_renderers_Renderer.ts.html
@@ -364,7 +364,6 @@ <h1 class="file-heading">File: src/render/renderers/Renderer.ts</h1>
 
 <div class="file">
     <pre class="code prettyprint linenums">
-
 /**
 *  
 * @module Kiwi
@@ -375,153 +374,154 @@ <h1 class="file-heading">File: src/render/renderers/Renderer.ts</h1>
 module Kiwi.Renderers {
 
 
-    export class Renderer {
-
-       /**
-        * Base class for WebGL Renderers. Not for instantiation.
-        * @class Renderer
-        * @constructor
-        * @namespace Kiwi.Renderers
-        * @param gl {WebGLRenderingContext} 
-          * @param shaderManager {Kiwi.Shaders.ShaderManager}
-        * @param [params=null] {object}
-        * @return {Kiwi.Renderers.Renderer}
-        */
-        constructor(gl: WebGLRenderingContext,shaderManager:Kiwi.Shaders.ShaderManager,isBatchRenderer:boolean = false) {
-            this.shaderManager = shaderManager;
-            this._isBatchRenderer = isBatchRenderer;
-            this.loaded = true;
-            this.blendMode = new Kiwi.Renderers.GLBlendMode(gl, {mode:&quot;NORMAL&quot;} );
-        }
-
-        /**
-        * Identifier for this renderer
-        * @property RENDERER_ID
-        * @type String
-        * @public
-        * @static
-        */
-        public static RENDERER_ID: string = &quot;Renderer&quot;;
-        
-        /**
-        * The camera matrix
-        * @property camMatrix
-        * @type Float32Array
-        * @public
-        */
-        public camMatrix: Float32Array;
-
-        /**
-        *
-        * @property loaded
-        * @type Array
-        * @public
-        */
-        public loaded: boolean = false;
-
-        /**
-        * Reference to the shaderManager - used for requesting shaders.
-        * @property shaderManager
-        * @type Array
-        * @public
-        */
-        public shaderManager: Kiwi.Shaders.ShaderManager;
-
-        /**
-        * Enables the renderer (for override)
-        * @method enable
-        * @param gl {WebGLRenderingContext}
-        * @param [params=null] {object}
-        * @public
-        */
-        public enable(gl: WebGLRenderingContext, params: any = null) {
-            
-        }
-
-        /**
-        * Enables the renderer (for override)
-        * @method disable
-        * @param gl {WebGLRenderingContext}
-        * @param [params=null] {object}
-        * @public
-        */
-        public disable(gl: WebGLRenderingContext) {
-
-        }
-
-        /**
-        * Enables the renderer (for override)
-        * @method clear
-        * @param gl {WebGLRenderingContext}
-        * @param [params=null] {object}
-        * @public
-        */
-        public clear(gl: WebGLRenderingContext, params: any) {
-        }
-
-        /**
-        * Draw to the draw or frame buffer (for override)
-        * @method draw
-        * @param gl {WebGLRenderingContext}
-        * @public
-        */
-        public draw(gl: WebGLRenderingContext) {
-        }
-
-        /**
-        * Updates the stage resolution uniforms (for override)
-        * @method updateStageResolution
-        * @param gl {WebGLRenderingContext}
-        * @param res {Float32Array}
-        * @public
-        */
-        public updateStageResolution(gl: WebGLRenderingContext, res: Float32Array) {
-        }
-
-         /**
-        * Updates the texture size uniforms (for override)
-        * @method updateTextureSize
-        * @param gl {WebGLRenderingContext}
-        * @param size {Float32Array}
-        * @public
-        */
-        public updateTextureSize(gl: WebGLRenderingContext, size: Float32Array) {
-        }
-
-
-        /**
-        * The shader pair used by the renderer
-        * @property shaderPair
-        * @type {Kiwi.Shaders.ShaderPair}
-        * @public
-        */
-        public shaderPair: Kiwi.Shaders.ShaderPair;
-
-
-        /**
-        * This renderer&#x27;s blend mode data.
-        * @property blendMode
-        * @type Kiwi.Renderers.GLBlendMode
-        * @public
-        * @since 1.1.0
-        */
-        public blendMode: Kiwi.Renderers.GLBlendMode;
-
-
-        /**
-        * Returns whether this is a batch renderer.
-        * @property isBatchRenderer
-        * @type boolean
-        * @public
-        */
-        private _isBatchRenderer: boolean = false;
-        public get isBatchRenderer(): boolean {
-            return this._isBatchRenderer;
-        }
-
-    }
+	export class Renderer {
+
+		/**
+		* Base class for WebGL Renderers. Not for instantiation.
+		* @class Renderer
+		* @constructor
+		* @namespace Kiwi.Renderers
+		* @param gl {WebGLRenderingContext} 
+		* @param shaderManager {Kiwi.Shaders.ShaderManager}
+		* @param [params=null] {object}
+		* @return {Kiwi.Renderers.Renderer}
+		*/
+		constructor(gl: WebGLRenderingContext,shaderManager:Kiwi.Shaders.ShaderManager,isBatchRenderer:boolean = false) {
+			this.shaderManager = shaderManager;
+			this._isBatchRenderer = isBatchRenderer;
+			this.loaded = true;
+			this.blendMode = new Kiwi.Renderers.GLBlendMode(gl, {mode:&quot;NORMAL&quot;} );
+		}
+
+		/**
+		* Identifier for this renderer
+		* @property RENDERER_ID
+		* @type String
+		* @public
+		* @static
+		*/
+		public static RENDERER_ID: string = &quot;Renderer&quot;;
+
+		/**
+		* The camera matrix
+		* @property camMatrix
+		* @type Float32Array
+		* @public
+		*/
+		public camMatrix: Float32Array;
+
+		/**
+		*
+		* @property loaded
+		* @type Array
+		* @public
+		*/
+		public loaded: boolean = false;
+
+		/**
+		* Reference to the shaderManager - used for requesting shaders.
+		* @property shaderManager
+		* @type Array
+		* @public
+		*/
+		public shaderManager: Kiwi.Shaders.ShaderManager;
+
+		/**
+		* Enables the renderer (for override)
+		* @method enable
+		* @param gl {WebGLRenderingContext}
+		* @param [params=null] {object}
+		* @public
+		*/
+		public enable(gl: WebGLRenderingContext, params: any = null) {
+			
+		}
+
+		/**
+		* Enables the renderer (for override)
+		* @method disable
+		* @param gl {WebGLRenderingContext}
+		* @param [params=null] {object}
+		* @public
+		*/
+		public disable(gl: WebGLRenderingContext) {
+
+		}
+
+		/**
+		* Enables the renderer (for override)
+		* @method clear
+		* @param gl {WebGLRenderingContext}
+		* @param [params=null] {object}
+		* @public
+		*/
+		public clear(gl: WebGLRenderingContext, params: any) {
+		}
+
+		/**
+		* Draw to the draw or frame buffer (for override)
+		* @method draw
+		* @param gl {WebGLRenderingContext}
+		* @public
+		*/
+		public draw(gl: WebGLRenderingContext) {
+		}
+
+		/**
+		* Updates the stage resolution uniforms (for override)
+		* @method updateStageResolution
+		* @param gl {WebGLRenderingContext}
+		* @param res {Float32Array}
+		* @public
+		*/
+		public updateStageResolution(gl: WebGLRenderingContext, res: Float32Array) {
+		}
+
+		 /**
+		* Updates the texture size uniforms (for override)
+		* @method updateTextureSize
+		* @param gl {WebGLRenderingContext}
+		* @param size {Float32Array}
+		* @public
+		*/
+		public updateTextureSize(gl: WebGLRenderingContext, size: Float32Array) {
+		}
+
+
+		/**
+		* The shader pair used by the renderer
+		* @property shaderPair
+		* @type {Kiwi.Shaders.ShaderPair}
+		* @public
+		*/
+		public shaderPair: Kiwi.Shaders.ShaderPair;
+
+
+		/**
+		* This renderer&#x27;s blend mode data.
+		* @property blendMode
+		* @type Kiwi.Renderers.GLBlendMode
+		* @public
+		* @since 1.1.0
+		*/
+		public blendMode: Kiwi.Renderers.GLBlendMode;
+
+
+		/**
+		* Returns whether this is a batch renderer.
+		* @property isBatchRenderer
+		* @type boolean
+		* @public
+		*/
+		private _isBatchRenderer: boolean = false;
+		public get isBatchRenderer(): boolean {
+			return this._isBatchRenderer;
+		}
+
+	}
 
 }
+
     </pre>
 </div>
 
diff --git a/docs/files/src_render_renderers_TextureAtlasRenderer.ts.html b/docs/files/src_render_renderers_TextureAtlasRenderer.ts.html
index 1dd276c..0c0cff5 100644
--- a/docs/files/src_render_renderers_TextureAtlasRenderer.ts.html
+++ b/docs/files/src_render_renderers_TextureAtlasRenderer.ts.html
@@ -364,7 +364,6 @@ <h1 class="file-heading">File: src/render/renderers/TextureAtlasRenderer.ts</h1>
 
 <div class="file">
     <pre class="code prettyprint linenums">
-
 /**
 *  
 * @module Kiwi
@@ -374,235 +373,234 @@ <h1 class="file-heading">File: src/render/renderers/TextureAtlasRenderer.ts</h1>
 
 module Kiwi.Renderers {
 
-    export class TextureAtlasRenderer extends Renderer {
-
-        /**
-        * The Renderer object for rendering Texture Atlases
-        * @class TextureAtlasRenderer
-        * @constructor
-        * @extends Kiwi.Renderers.Renderer
-        * @namespace Kiwi.Renderers
-        * @param gl {WebGLRenderingContext} 
-        * @param shaderManager {Kiwi.Shaders.ShaderManager}
-        * @param [params=null] {object}
-        * @return {Kiwi.Renderers.TextureAtlasRenderer}
-        */
-        constructor(gl: WebGLRenderingContext, shaderManager: Kiwi.Shaders.ShaderManager, params: any = null) {
-            super(gl, shaderManager, true);
-            var bufferItemSize = 5;
-            this._vertexBuffer = new GLArrayBuffer(gl, bufferItemSize);
-            var vertsPerQuad = 6;
-            this._indexBuffer = new GLElementArrayBuffer(gl, 1, this._generateIndices(this._maxItems * vertsPerQuad));
-
-            this.shaderPair = this.shaderManager.requestShader(gl, this._shaderPairName);
-        }
-
-        /**
-        * The identifier for this renderer.
-        * @property RENDERER_ID
-        * @type Array
-        * @public
-        * @static
-        */
-        public static RENDERER_ID: string = &quot;TextureAtlasRenderer&quot;;
-
-        /**
-        * The shaderPair that this renderer uses.
-        * @property shaderPair
-        * @type Kiwi.Shaders.TextureAtlasShade
-        * @public
-        */
-        public shaderPair: Kiwi.Shaders.TextureAtlasShader;
-
-        /**
-        * The reference to the shaderPair.
-        * @property _shaderPairName
-        * @type String
-        * @private
-        * @since 1.1.0
-        */
-        private _shaderPairName: string = &quot;TextureAtlasShader&quot;;
-
-        /**
-        * The maximum number of items that can be rendered by the renderer (not enforced)
-        * @property _maxItems
-        * @type number
-        * @private
-        */
-        private _maxItems: number = 1000;
-
-        /**
-        * The Vertex Buffer
-        * @property _vertexBuffer
-        * @type Kiwi.Renderers.GLArrayBuffer
-        * @private
-        */
-        private _vertexBuffer: GLArrayBuffer;
-
-        /**
-        * The Index Buffer
-        * @property _indexBuffer
-        * @type Kiwi.Renderers.GLElementArrayBuffer
-        * @private
-        */
-        private _indexBuffer: GLElementArrayBuffer;
-
-        /**
-        * Enables the renderer ready for drawing
-        * @method enable
-        * @param gl {WebGLRenderingContext}
-        * @param [params=null] {object}
-        * @public
-        */
-        public enable(gl: WebGLRenderingContext, params: any = null) {
-        
-            //this.shaderPair = &lt;Kiwi.Shaders.TextureAtlasShader&gt;this.shaderManager.requestShader(gl, &quot;TextureAtlasShader&quot;, true);
-            this.shaderPair = this.shaderManager.requestShader(gl, this._shaderPairName, true);
-            
-            //Texture
-            gl.uniform1i(this.shaderPair.uniforms.uSampler.location, 0);
-
-            //Other uniforms
-            gl.uniform2fv(this.shaderPair.uniforms.uResolution.location, params.stageResolution);
-            gl.uniformMatrix3fv(this.shaderPair.uniforms.uCamMatrix.location, false, params.camMatrix);
-        }
-
-        /**
-        * Disables the renderer
-        * @method disable
-        * @param gl {WebGLRenderingContext}
-        * @public
-        */
-        public disable(gl: WebGLRenderingContext) {
-            gl.disableVertexAttribArray(this.shaderPair.attributes.aXYUV);
-            gl.disableVertexAttribArray(this.shaderPair.attributes.aAlpha);
-        }
-
-        /**
-        * Clears the vertex buffer.
-        * @method clear
-        * @param gl {WebGLRenderingContext}
-        * @public
-        */
-        public clear(gl: WebGLRenderingContext, params: any) {
-            this._vertexBuffer.clear();
-            gl.uniformMatrix3fv(this.shaderPair.uniforms.uCamMatrix.location, false, params.camMatrix);
-        }
-
-        /**
-        * Makes a draw call, this is where things actually get rendered to the draw buffer (or a framebuffer).
-        * @method draw
-        * @param gl {WebGLRenderingContext}
-        * @public
-        */
-        public draw(gl: WebGLRenderingContext) {
-            this._vertexBuffer.uploadBuffer(gl, this._vertexBuffer.items);
-
-            gl.enableVertexAttribArray(this.shaderPair.attributes.aXYUV);
-            gl.vertexAttribPointer(this.shaderPair.attributes.aXYUV, 4, gl.FLOAT, false, 20, 0);
-    
-            gl.enableVertexAttribArray(this.shaderPair.attributes.aAlpha);
-            gl.vertexAttribPointer(this.shaderPair.attributes.aAlpha, 1, gl.FLOAT, false, 20, 16);
-           
-            gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this._indexBuffer.buffer);
-            gl.drawElements(gl.TRIANGLES, (this._vertexBuffer.items.length / 20) * 6, gl.UNSIGNED_SHORT, 0);
-        
-        }
-
-        /**
-        * Generates quad indices
-        * @method _generateIndices
-        * @param numQuads {number}
-        * @private
-        */
-        private _generateIndices(numQuads: number): number[] {
-
-            var quads: number[] = new Array();
-            for (var i = 0; i &lt; numQuads; i++) {
-                quads.push(i * 4 + 0, i * 4 + 1, i * 4 + 2, i * 4 + 0, i * 4 + 2, i * 4 + 3);
-            }
-            return quads;
-        }
-
-        /**
-        * Updates the stage resolution uniforms
-        * @method updateStageResolution
-        * @param gl {WebGLRenderingContext}
-        * @param res {Float32Array}
-        * @public
-        */
-        public updateStageResolution(gl: WebGLRenderingContext, res: Float32Array) {
-            gl.uniform2fv(this.shaderPair.uniforms.uResolution.location, res);
-        }
-
-        /**
-        * Updates the texture size uniforms
-        * @method updateTextureSize
-        * @param gl {WebGLRenderingContext}
-        * @param size {Float32Array}
-        * @public
-        */
-        public updateTextureSize(gl: WebGLRenderingContext, size: Float32Array) {
-            gl.uniform2fv(this.shaderPair.uniforms.uTextureSize.location, size);
-        }
-
-        /**
-        * Sets shader pair by name
-        * @method setShaderPair
-        * @param shaderPair {String}
-        * @public
-        * @since 1.1.0
-        */
-        public setShaderPair(shaderPair: string) {
-            if(typeof shaderPair == &quot;string&quot;)
-                this._shaderPairName = shaderPair;
-        }
-
-        /**
-        * Collates all xy and uv coordinates into a buffer ready for upload to video memory
-        * @method addToBatch
-        * @param gl {WebGLRenderingContext}
-        * @param entity {Kiwi.Entity}
-        * @param camera {Camera}
-        * @public
-        */
-        public addToBatch(gl: WebGLRenderingContext, entity: Entity, camera: Kiwi.Camera) {
-            // Skip if it&#x27;s invisible due to zero alpha
-            if( entity.alpha &lt;= 0 )
-                return;
-            var t: Kiwi.Geom.Transform = entity.transform;
-            var m: Kiwi.Geom.Matrix = t.getConcatenatedMatrix();
-
-            var cell = entity.atlas.cells[entity.cellIndex];
-
-            var pt1: Kiwi.Geom.Point = new Kiwi.Geom.Point(0 - t.rotPointX, 0 - t.rotPointY);
-            var pt2: Kiwi.Geom.Point = new Kiwi.Geom.Point(cell.w - t.rotPointX, 0 - t.rotPointY);
-            var pt3: Kiwi.Geom.Point = new Kiwi.Geom.Point(cell.w - t.rotPointX, cell.h - t.rotPointY);
-            var pt4: Kiwi.Geom.Point = new Kiwi.Geom.Point(0 - t.rotPointX, cell.h - t.rotPointY);
-
-            pt1 = m.transformPoint(pt1);
-            pt2 = m.transformPoint(pt2);
-            pt3 = m.transformPoint(pt3);
-            pt4 = m.transformPoint(pt4);
-
-            this._vertexBuffer.items.push(
-                pt1.x, pt1.y, cell.x, cell.y, entity.alpha,
-                pt2.x, pt2.y, cell.x + cell.w, cell.y, entity.alpha,
-                pt3.x, pt3.y, cell.x + cell.w, cell.y + cell.h, entity.alpha,
-                pt4.x, pt4.y, cell.x, cell.y + cell.h, entity.alpha
-                );
-        }
-
-        /**
-        * Adds an array of precalculated xyuv values to the item array
-        * @method concatBatch
-        * @param vertexItems {array}
-        * @public
-        */
-        public concatBatch(vertexItems: Array&lt;number&gt;) {
-            this._vertexBuffer.items = this._vertexBuffer.items.concat(vertexItems);
-        }
-    }
+	export class TextureAtlasRenderer extends Renderer {
+
+		/**
+		* The Renderer object for rendering Texture Atlases
+		* @class TextureAtlasRenderer
+		* @constructor
+		* @extends Kiwi.Renderers.Renderer
+		* @namespace Kiwi.Renderers
+		* @param gl {WebGLRenderingContext} 
+		* @param shaderManager {Kiwi.Shaders.ShaderManager}
+		* @param [params=null] {object}
+		* @return {Kiwi.Renderers.TextureAtlasRenderer}
+		*/
+		constructor(gl: WebGLRenderingContext, shaderManager: Kiwi.Shaders.ShaderManager, params: any = null) {
+			super(gl, shaderManager, true);
+			var bufferItemSize = 5;
+			this._vertexBuffer = new GLArrayBuffer(gl, bufferItemSize);
+			var vertsPerQuad = 6;
+			this._indexBuffer = new GLElementArrayBuffer(gl, 1, this._generateIndices(this._maxItems * vertsPerQuad));
+
+			this.shaderPair = this.shaderManager.requestShader(gl, this._shaderPairName);
+		}
+
+		/**
+		* The identifier for this renderer.
+		* @property RENDERER_ID
+		* @type Array
+		* @public
+		* @static
+		*/
+		public static RENDERER_ID: string = &quot;TextureAtlasRenderer&quot;;
+
+		/**
+		* The shaderPair that this renderer uses.
+		* @property shaderPair
+		* @type Kiwi.Shaders.TextureAtlasShade
+		* @public
+		*/
+		public shaderPair: Kiwi.Shaders.TextureAtlasShader;
+
+		/**
+		* The reference to the shaderPair.
+		* @property _shaderPairName
+		* @type String
+		* @private
+		* @since 1.1.0
+		*/
+		private _shaderPairName: string = &quot;TextureAtlasShader&quot;;
+
+		/**
+		* The maximum number of items that can be rendered by the renderer (not enforced)
+		* @property _maxItems
+		* @type number
+		* @private
+		*/
+		private _maxItems: number = 1000;
+
+		/**
+		* The Vertex Buffer
+		* @property _vertexBuffer
+		* @type Kiwi.Renderers.GLArrayBuffer
+		* @private
+		*/
+		private _vertexBuffer: GLArrayBuffer;
+
+		/**
+		* The Index Buffer
+		* @property _indexBuffer
+		* @type Kiwi.Renderers.GLElementArrayBuffer
+		* @private
+		*/
+		private _indexBuffer: GLElementArrayBuffer;
+
+		/**
+		* Enables the renderer ready for drawing
+		* @method enable
+		* @param gl {WebGLRenderingContext}
+		* @param [params=null] {object}
+		* @public
+		*/
+		public enable(gl: WebGLRenderingContext, params: any = null) {
+
+			//this.shaderPair = &lt;Kiwi.Shaders.TextureAtlasShader&gt;this.shaderManager.requestShader(gl, &quot;TextureAtlasShader&quot;, true);
+			this.shaderPair = this.shaderManager.requestShader(gl, this._shaderPairName, true);
+			
+			//Texture
+			gl.uniform1i(this.shaderPair.uniforms.uSampler.location, 0);
+
+			//Other uniforms
+			gl.uniform2fv(this.shaderPair.uniforms.uResolution.location, params.stageResolution);
+			gl.uniformMatrix3fv(this.shaderPair.uniforms.uCamMatrix.location, false, params.camMatrix);
+		}
+
+		/**
+		* Disables the renderer
+		* @method disable
+		* @param gl {WebGLRenderingContext}
+		* @public
+		*/
+		public disable(gl: WebGLRenderingContext) {
+			gl.disableVertexAttribArray(this.shaderPair.attributes.aXYUV);
+			gl.disableVertexAttribArray(this.shaderPair.attributes.aAlpha);
+		}
+
+		/**
+		* Clears the vertex buffer.
+		* @method clear
+		* @param gl {WebGLRenderingContext}
+		* @public
+		*/
+		public clear(gl: WebGLRenderingContext, params: any) {
+			this._vertexBuffer.clear();
+			gl.uniformMatrix3fv(this.shaderPair.uniforms.uCamMatrix.location, false, params.camMatrix);
+		}
+
+		/**
+		* Makes a draw call, this is where things actually get rendered to the draw buffer (or a framebuffer).
+		* @method draw
+		* @param gl {WebGLRenderingContext}
+		* @public
+		*/
+		public draw(gl: WebGLRenderingContext) {
+			this._vertexBuffer.uploadBuffer(gl, this._vertexBuffer.items);
+
+			gl.enableVertexAttribArray(this.shaderPair.attributes.aXYUV);
+			gl.vertexAttribPointer(this.shaderPair.attributes.aXYUV, 4, gl.FLOAT, false, 20, 0);
+
+			gl.enableVertexAttribArray(this.shaderPair.attributes.aAlpha);
+			gl.vertexAttribPointer(this.shaderPair.attributes.aAlpha, 1, gl.FLOAT, false, 20, 16);
+
+			gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this._indexBuffer.buffer);
+			gl.drawElements(gl.TRIANGLES, (this._vertexBuffer.items.length / 20) * 6, gl.UNSIGNED_SHORT, 0);
+		}
+
+		/**
+		* Generates quad indices
+		* @method _generateIndices
+		* @param numQuads {number}
+		* @private
+		*/
+		private _generateIndices(numQuads: number): number[] {
+
+			var quads: number[] = new Array();
+			for (var i = 0; i &lt; numQuads; i++) {
+				quads.push(i * 4 + 0, i * 4 + 1, i * 4 + 2, i * 4 + 0, i * 4 + 2, i * 4 + 3);
+			}
+			return quads;
+		}
+
+		/**
+		* Updates the stage resolution uniforms
+		* @method updateStageResolution
+		* @param gl {WebGLRenderingContext}
+		* @param res {Float32Array}
+		* @public
+		*/
+		public updateStageResolution(gl: WebGLRenderingContext, res: Float32Array) {
+			gl.uniform2fv(this.shaderPair.uniforms.uResolution.location, res);
+		}
+
+		/**
+		* Updates the texture size uniforms
+		* @method updateTextureSize
+		* @param gl {WebGLRenderingContext}
+		* @param size {Float32Array}
+		* @public
+		*/
+		public updateTextureSize(gl: WebGLRenderingContext, size: Float32Array) {
+			gl.uniform2fv(this.shaderPair.uniforms.uTextureSize.location, size);
+		}
+
+		/**
+		* Sets shader pair by name
+		* @method setShaderPair
+		* @param shaderPair {String}
+		* @public
+		* @since 1.1.0
+		*/
+		public setShaderPair(shaderPair: string) {
+			if(typeof shaderPair == &quot;string&quot;)
+				this._shaderPairName = shaderPair;
+		}
+
+		/**
+		* Collates all xy and uv coordinates into a buffer ready for upload to video memory
+		* @method addToBatch
+		* @param gl {WebGLRenderingContext}
+		* @param entity {Kiwi.Entity}
+		* @param camera {Camera}
+		* @public
+		*/
+		public addToBatch(gl: WebGLRenderingContext, entity: Entity, camera: Kiwi.Camera) {
+			// Skip if it&#x27;s invisible due to zero alpha
+			if( entity.alpha &lt;= 0 )
+				return;
+			var t: Kiwi.Geom.Transform = entity.transform;
+			var m: Kiwi.Geom.Matrix = t.getConcatenatedMatrix();
+
+			var cell = entity.atlas.cells[entity.cellIndex];
+
+			var pt1: Kiwi.Geom.Point = new Kiwi.Geom.Point(0 - t.rotPointX, 0 - t.rotPointY);
+			var pt2: Kiwi.Geom.Point = new Kiwi.Geom.Point(cell.w - t.rotPointX, 0 - t.rotPointY);
+			var pt3: Kiwi.Geom.Point = new Kiwi.Geom.Point(cell.w - t.rotPointX, cell.h - t.rotPointY);
+			var pt4: Kiwi.Geom.Point = new Kiwi.Geom.Point(0 - t.rotPointX, cell.h - t.rotPointY);
+
+			pt1 = m.transformPoint(pt1);
+			pt2 = m.transformPoint(pt2);
+			pt3 = m.transformPoint(pt3);
+			pt4 = m.transformPoint(pt4);
+
+			this._vertexBuffer.items.push(
+				pt1.x, pt1.y, cell.x, cell.y, entity.alpha,
+				pt2.x, pt2.y, cell.x + cell.w, cell.y, entity.alpha,
+				pt3.x, pt3.y, cell.x + cell.w, cell.y + cell.h, entity.alpha,
+				pt4.x, pt4.y, cell.x, cell.y + cell.h, entity.alpha
+				);
+		}
+
+		/**
+		* Adds an array of precalculated xyuv values to the item array
+		* @method concatBatch
+		* @param vertexItems {array}
+		* @public
+		*/
+		public concatBatch(vertexItems: Array&lt;number&gt;) {
+			this._vertexBuffer.items = this._vertexBuffer.items.concat(vertexItems);
+		}
+	}
 }
 
     </pre>
diff --git a/docs/files/src_render_shaders_ShaderPair.ts.html b/docs/files/src_render_shaders_ShaderPair.ts.html
index d2545c1..425ecbf 100644
--- a/docs/files/src_render_shaders_ShaderPair.ts.html
+++ b/docs/files/src_render_shaders_ShaderPair.ts.html
@@ -374,203 +374,200 @@ <h1 class="file-heading">File: src/render/shaders/ShaderPair.ts</h1>
 
 module Kiwi.Shaders {
 
-    /**
-    * Base class for shader pairs which encapsulate a GLSL vertex and fragment shader
-    * @class ShaderPair
-    * @constructor
-    * @namespace Kiwi.Shaders
-    * @return {Kiwi.Shaders.ShaderPair}
-    */
-    export class ShaderPair {
-
-        constructor() {
-          
-        }
-
-        /**
-        *
-        * @property RENDERER_ID
-        * @type string
-        * @public
-        * @static
-        */
-        public static RENDERER_ID: string = &quot;ShaderPair&quot;;
-
-        /**
-        * Initialise the shader pair.
-        * @method init
-        * @param gl {WebGLRenderingCotext}
-        * @public
-        */
-        public init(gl: WebGLRenderingContext) {
-         
-            this.vertShader = this.compile(gl, this.vertSource.join(&quot;\n&quot;), gl.VERTEX_SHADER);
-            this.fragShader = this.compile(gl, this.fragSource.join(&quot;\n&quot;), gl.FRAGMENT_SHADER);
-            this.shaderProgram = this.attach(gl, this.vertShader, this.fragShader);
-            this.loaded = true;
-        }
-
-        /**
-        * Returns whether the shader pair has been loaded and compiled.
-        * @property loaded
-        * @type boolean
-        * @public
-        */
-        public loaded: boolean = false;
-
-        /**
-        * Vertex shader
-        * @property vertShader
-        * @type WebGLShader
-        * @public
-        */
-        public vertShader: WebGLShader;
-
-        /**
-        * Fragment shader 
-        * @property fragShader
-        * @type WebGLShader
-        * @public
-        */
-        public fragShader: WebGLShader;
-
-        /**
-        * The WebGl shader program
-        * @property shaderProgram
-        * @type WebGLProgram
-        * @public
-        */
-        public shaderProgram: WebGLProgram;
-
-        /**
-        * Attaches the shaders to the program and links them
-        * @method attach
-        * @param gl {WebGLRenderingContext}
-        * @param vertShader {WebGLShader}
-        * @param fragShader {WebGLShader}
-        * @return {WebGLProgram}
-        * @public
-        */
-        public attach(gl: WebGLRenderingContext, vertShader: WebGLShader, fragShader: WebGLShader): WebGLProgram {
-            var shaderProgram: WebGLProgram = gl.createProgram();
-            gl.attachShader(shaderProgram, fragShader);
-            gl.attachShader(shaderProgram, vertShader);
-            gl.linkProgram(shaderProgram);
-            return shaderProgram;
-        }
-
-        /**
-        * Compiles the shaders
-        * @method compile
-        * @param gl {WebGLRenderingContext}
-        * @param src {string}
-        * @param shaderType {number}
-        * @return {WebGLShader}
-        * @public
-        */
-        public compile(gl: WebGLRenderingContext, src: string, shaderType: number): WebGLShader {
-            var shader: WebGLShader = gl.createShader(shaderType);
-            gl.shaderSource(shader, src);
-            gl.compileShader(shader);
-
-            if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
-                return null;
-            }
-            return shader;
-        }
-
-        /**
-        * Uniform descriptors
-        * @property uniforms
-        * @type Array
-        * @public
-        */
-        public uniforms: any;
-
-        /**
-        * Attribute descriptors
-        * @property attributes
-        * @type Array
-        * @public
-        */
-        public attributes: any;
-
-
-        /**
-        * Shader frag source (for override)
-        * @property texture2DFrag
-        * @type Array
-        * @public
-        */
-        public fragSource: Array&lt;any&gt;;
-
-        /**
-        * Shader vert source (for override)
-        * @property texture2DVert
-        * @type Array
-        * @public
-        */
-        public vertSource: Array&lt;any&gt;;
-
-        /**
-        * Sets a single uniform value and marks it as dirty.
-        * @method setParam
-        * @param uniformName {string}
-        * @param value {*}
-        * @public
-        */
-        public setParam(uniformName: string, value: any) {
-            this.uniforms[uniformName].value = value;
-            this.uniforms[uniformName].dirty = true;
-        }
-
-        /**
-        * Applies all uniforms to the uploaded program
-        * @method applyUniforms
-        * @param gl {WebGLRenderingCotext}
-        * @public
-        */
-        public applyUniforms(gl: WebGLRenderingContext) {
-            for (var u in this.uniforms) {
-                this.applyUniform(gl, u);
-            }
-        }
-
-         /**
-        * Applies a single uniforms to the uploaded program
-        * @method applyUniform
-        * @param gl {WebGLRenderingCotext}
-        * @param name {string}
-        * @public
-        */
-        public applyUniform(gl: WebGLRenderingContext, name: string) {
-            var u = this.uniforms[name]
-            if (this.uniforms[name].dirty) {
-                gl[&quot;uniform&quot; + u.type](u.location, u.value);
-                this.uniforms[name].dirty = false;
-            }
-        }
-
-        /**
-        * Initialises all uniforms
-        * @method initUniforms
-        * @param gl {WebGLRenderingCotext}
-        * @public
-        */
-        public initUniforms(gl: WebGLRenderingContext) {
-            for (var uniformName in this.uniforms) {
-                var uniform = this.uniforms[uniformName];
-                uniform.location = gl.getUniformLocation(this.shaderProgram, uniformName);
-                uniform.dirty = true;
-                uniform.value = null;
-
-            }
-        }
-
-    }
-
+	/**
+	* Base class for shader pairs which encapsulate a GLSL vertex and fragment shader
+	* @class ShaderPair
+	* @constructor
+	* @namespace Kiwi.Shaders
+	* @return {Kiwi.Shaders.ShaderPair}
+	*/
+	export class ShaderPair {
+
+		constructor() {}
+
+		/**
+		*
+		* @property RENDERER_ID
+		* @type string
+		* @public
+		* @static
+		*/
+		public static RENDERER_ID: string = &quot;ShaderPair&quot;;
+
+		/**
+		* Initialise the shader pair.
+		* @method init
+		* @param gl {WebGLRenderingCotext}
+		* @public
+		*/
+		public init(gl: WebGLRenderingContext) {
+			this.vertShader = this.compile(gl, this.vertSource.join(&quot;\n&quot;), gl.VERTEX_SHADER);
+			this.fragShader = this.compile(gl, this.fragSource.join(&quot;\n&quot;), gl.FRAGMENT_SHADER);
+			this.shaderProgram = this.attach(gl, this.vertShader, this.fragShader);
+			this.loaded = true;
+		}
+
+		/**
+		* Returns whether the shader pair has been loaded and compiled.
+		* @property loaded
+		* @type boolean
+		* @public
+		*/
+		public loaded: boolean = false;
+
+		/**
+		* Vertex shader
+		* @property vertShader
+		* @type WebGLShader
+		* @public
+		*/
+		public vertShader: WebGLShader;
+
+		/**
+		* Fragment shader 
+		* @property fragShader
+		* @type WebGLShader
+		* @public
+		*/
+		public fragShader: WebGLShader;
+
+		/**
+		* The WebGl shader program
+		* @property shaderProgram
+		* @type WebGLProgram
+		* @public
+		*/
+		public shaderProgram: WebGLProgram;
+
+		/**
+		* Attaches the shaders to the program and links them
+		* @method attach
+		* @param gl {WebGLRenderingContext}
+		* @param vertShader {WebGLShader}
+		* @param fragShader {WebGLShader}
+		* @return {WebGLProgram}
+		* @public
+		*/
+		public attach(gl: WebGLRenderingContext, vertShader: WebGLShader, fragShader: WebGLShader): WebGLProgram {
+			var shaderProgram: WebGLProgram = gl.createProgram();
+			gl.attachShader(shaderProgram, fragShader);
+			gl.attachShader(shaderProgram, vertShader);
+			gl.linkProgram(shaderProgram);
+			return shaderProgram;
+		}
+
+		/**
+		* Compiles the shaders
+		* @method compile
+		* @param gl {WebGLRenderingContext}
+		* @param src {string}
+		* @param shaderType {number}
+		* @return {WebGLShader}
+		* @public
+		*/
+		public compile(gl: WebGLRenderingContext, src: string, shaderType: number): WebGLShader {
+			var shader: WebGLShader = gl.createShader(shaderType);
+			gl.shaderSource(shader, src);
+			gl.compileShader(shader);
+
+			if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
+				return null;
+			}
+			return shader;
+		}
+
+		/**
+		* Uniform descriptors
+		* @property uniforms
+		* @type Array
+		* @public
+		*/
+		public uniforms: any;
+
+		/**
+		* Attribute descriptors
+		* @property attributes
+		* @type Array
+		* @public
+		*/
+		public attributes: any;
+
+
+		/**
+		* Shader frag source (for override)
+		* @property texture2DFrag
+		* @type Array
+		* @public
+		*/
+		public fragSource: Array&lt;any&gt;;
+
+		/**
+		* Shader vert source (for override)
+		* @property texture2DVert
+		* @type Array
+		* @public
+		*/
+		public vertSource: Array&lt;any&gt;;
+
+		/**
+		* Sets a single uniform value and marks it as dirty.
+		* @method setParam
+		* @param uniformName {string}
+		* @param value {*}
+		* @public
+		*/
+		public setParam(uniformName: string, value: any) {
+			this.uniforms[uniformName].value = value;
+			this.uniforms[uniformName].dirty = true;
+		}
+
+		/**
+		* Applies all uniforms to the uploaded program
+		* @method applyUniforms
+		* @param gl {WebGLRenderingCotext}
+		* @public
+		*/
+		public applyUniforms(gl: WebGLRenderingContext) {
+			for (var u in this.uniforms) {
+				this.applyUniform(gl, u);
+			}
+		}
+
+		/**
+		* Applies a single uniforms to the uploaded program
+		* @method applyUniform
+		* @param gl {WebGLRenderingCotext}
+		* @param name {string}
+		* @public
+		*/
+		public applyUniform(gl: WebGLRenderingContext, name: string) {
+			var u = this.uniforms[name]
+			if (this.uniforms[name].dirty) {
+				gl[&quot;uniform&quot; + u.type](u.location, u.value);
+				this.uniforms[name].dirty = false;
+			}
+		}
+
+		/**
+		* Initialises all uniforms
+		* @method initUniforms
+		* @param gl {WebGLRenderingCotext}
+		* @public
+		*/
+		public initUniforms(gl: WebGLRenderingContext) {
+			for (var uniformName in this.uniforms) {
+				var uniform = this.uniforms[uniformName];
+				uniform.location = gl.getUniformLocation(this.shaderProgram, uniformName);
+				uniform.dirty = true;
+				uniform.value = null;
+
+			}
+		}
+
+	}
 
 }
+
     </pre>
 </div>
 
diff --git a/docs/files/src_render_shaders_TextureAtlasShader.ts.html b/docs/files/src_render_shaders_TextureAtlasShader.ts.html
index 5d8e6b8..f7d697b 100644
--- a/docs/files/src_render_shaders_TextureAtlasShader.ts.html
+++ b/docs/files/src_render_shaders_TextureAtlasShader.ts.html
@@ -373,111 +373,111 @@ <h1 class="file-heading">File: src/render/shaders/TextureAtlasShader.ts</h1>
 
 module Kiwi.Shaders {
 
-    /**
-    * Shader wrapper for rendering Texture Atlases
-    * @class TextureAtlasShader
-    * @extends Kiwi.Shaders.ShaderPair
-    * @constructor
-    * @namespace Kiwi.Shaders
-    * @return {Kiwi.Shaders.TextureAtlasShader}
-    */
-    export class TextureAtlasShader extends ShaderPair {
+	/**
+	* Shader wrapper for rendering Texture Atlases
+	* @class TextureAtlasShader
+	* @extends Kiwi.Shaders.ShaderPair
+	* @constructor
+	* @namespace Kiwi.Shaders
+	* @return {Kiwi.Shaders.TextureAtlasShader}
+	*/
+	export class TextureAtlasShader extends ShaderPair {
 
-        constructor() {
-            super();
-        }
+		constructor() {
+			super();
+		}
 
-        /**
-        * Initialise the shaderPair
-        * @method init
-        * @param gl {WebGLRenderingCotext}
-        * @return {WebGLBuffer}
-        * @public
-        */
-        public init(gl: WebGLRenderingContext) {
-            super.init(gl);
+		/**
+		* Initialise the shaderPair
+		* @method init
+		* @param gl {WebGLRenderingCotext}
+		* @return {WebGLBuffer}
+		* @public
+		*/
+		public init(gl: WebGLRenderingContext) {
+			super.init(gl);
 
-            this.attributes.aXYUV = gl.getAttribLocation(this.shaderProgram, &quot;aXYUV&quot;);
-            this.attributes.aAlpha = gl.getAttribLocation(this.shaderProgram, &quot;aAlpha&quot;);
-            
-            this.initUniforms(gl);
-        }
+			this.attributes.aXYUV = gl.getAttribLocation(this.shaderProgram, &quot;aXYUV&quot;);
+			this.attributes.aAlpha = gl.getAttribLocation(this.shaderProgram, &quot;aAlpha&quot;);
+			
+			this.initUniforms(gl);
+		}
 
-        /**
-        * Shader attribute references
-        * @property attributes
-        * @type object
-        * @public
-        */
-        public attributes: any = {
-            aXYUV: null,
-            aAlpha: null,
-        };
+		/**
+		* Shader attribute references
+		* @property attributes
+		* @type object
+		* @public
+		*/
+		public attributes: any = {
+			aXYUV: null,
+			aAlpha: null,
+		};
 
-        /**
-        * Shader uniform descriptors
-        * @property uniforms
-        * @type object
-        * @public
-        */
-        public uniforms: any = {
-            uCamMatrix: {
-                type: &quot;mat3&quot;,
-            },
-            uResolution: {
-                type: &quot;2fv&quot;,
-            },
-            uTextureSize: {
-                type: &quot;2fv&quot;,
-            },
-            uSampler: {
-                type: &quot;1i&quot;,
-            }
-        }
+		/**
+		* Shader uniform descriptors
+		* @property uniforms
+		* @type object
+		* @public
+		*/
+		public uniforms: any = {
+			uCamMatrix: {
+				type: &quot;mat3&quot;,
+			},
+			uResolution: {
+				type: &quot;2fv&quot;,
+			},
+			uTextureSize: {
+				type: &quot;2fv&quot;,
+			},
+			uSampler: {
+				type: &quot;1i&quot;,
+			}
+		}
 
 
-        /**
-        * The source for the GLSL fragment shader
-        * @property fragSource
-        * @type Array
-        * @public
-        */
-        public fragSource: Array&lt;string&gt; = [
-            &quot;precision mediump float;&quot;,
-            &quot;varying vec2 vTextureCoord;&quot;,
-            &quot;varying float vAlpha;&quot;,
-            &quot;uniform sampler2D uSampler;&quot;,
-            &quot;void main(void) {&quot;,
-            &quot;gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));&quot;,
-            &quot;gl_FragColor.a *= vAlpha;&quot;,
-            &quot;}&quot;
-        ];
+		/**
+		* The source for the GLSL fragment shader
+		* @property fragSource
+		* @type Array
+		* @public
+		*/
+		public fragSource: Array&lt;string&gt; = [
+			&quot;precision mediump float;&quot;,
+			&quot;varying vec2 vTextureCoord;&quot;,
+			&quot;varying float vAlpha;&quot;,
+			&quot;uniform sampler2D uSampler;&quot;,
+			&quot;void main(void) {&quot;,
+			&quot;gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));&quot;,
+			&quot;gl_FragColor.a *= vAlpha;&quot;,
+			&quot;}&quot;
+		];
 
 
-        /**
-        * The source for the GLSL vertex shader
-        * @property vertSource
-        * @type Array
-        * @public
-        */
-        public vertSource: Array&lt;string&gt; = [
-            &quot;attribute vec4 aXYUV;&quot;,
-            &quot;attribute float aAlpha;&quot;,
-            &quot;uniform mat3 uCamMatrix;&quot;,
-            &quot;uniform vec2 uResolution;&quot;,
-            &quot;uniform vec2 uTextureSize;&quot;,
-            &quot;varying vec2 vTextureCoord;&quot;,
-            &quot;varying float vAlpha;&quot;,
-            &quot;void main(void) {&quot;,
-            &quot;   vec2 pos = (uCamMatrix * vec3(aXYUV.xy,1)).xy; &quot;,
-            &quot;   gl_Position = vec4((pos / uResolution * 2.0 - 1.0) * vec2(1, -1), 0, 1);&quot;,
-            &quot;   vTextureCoord = aXYUV.zw / uTextureSize;&quot;,
-            &quot;   vAlpha = aAlpha;&quot;,
-            &quot;}&quot;
-        ];
+		/**
+		* The source for the GLSL vertex shader
+		* @property vertSource
+		* @type Array
+		* @public
+		*/
+		public vertSource: Array&lt;string&gt; = [
+			&quot;attribute vec4 aXYUV;&quot;,
+			&quot;attribute float aAlpha;&quot;,
+			&quot;uniform mat3 uCamMatrix;&quot;,
+			&quot;uniform vec2 uResolution;&quot;,
+			&quot;uniform vec2 uTextureSize;&quot;,
+			&quot;varying vec2 vTextureCoord;&quot;,
+			&quot;varying float vAlpha;&quot;,
+			&quot;void main(void) {&quot;,
+			&quot;   vec2 pos = (uCamMatrix * vec3(aXYUV.xy,1)).xy; &quot;,
+			&quot;   gl_Position = vec4((pos / uResolution * 2.0 - 1.0) * vec2(1, -1), 0, 1);&quot;,
+			&quot;   vTextureCoord = aXYUV.zw / uTextureSize;&quot;,
+			&quot;   vAlpha = aAlpha;&quot;,
+			&quot;}&quot;
+		];
 
 
-    }
+	}
 
 }
 
diff --git a/docs/files/src_sound_Audio.ts.html b/docs/files/src_sound_Audio.ts.html
index edcff81..9f0f1a0 100644
--- a/docs/files/src_sound_Audio.ts.html
+++ b/docs/files/src_sound_Audio.ts.html
@@ -373,852 +373,852 @@ <h1 class="file-heading">File: src/sound/Audio.ts</h1>
 
 module Kiwi.Sound {
 
-    /**
-    * The Audio Object contains the functionality for playing a singular sound in a Kiwi Game. 
-    * The Audio can contain Audio Sprites which is a nice way to play audio on mobile devices. 
-    * Audio Objects do not &#x27;die&#x27; when game states are switched or changed. 
-    *
-    * @class Audio
-    * @constructor
-    * @namespace Kiwi.Sound
-    * @param game {Kiwi.Game} The game that this piece of audio belongs to.
-    * @param key {string} The key to which which piece of audio should be loaded from the AudioLibrary.
-    * @param volume {number} A number between 0 (silence) and 1 (loud).
-    * @param loop {boolean} If the audio should loop when it is finished or just stop.
-    * @return {Kiwi.Sound.Audio} This object
-    *
-    */
-    export class Audio {
-        
-        constructor(game: Kiwi.Game, key: string, volume: number, loop: boolean) {
-
-            this.ready = false;
-            this._game = game;
-            this._game.audio.registerSound(this);
-
-            this._usingAudioTag = this._game.audio.usingAudioTag;
-            this._usingWebAudio = this._game.audio.usingWebAudio;
-
-            this._playable = (this._game.audio.locked == true) ? false : true;
-
-            this.duration = 0;
-            this._volume = volume;
-            this._muteVolume = volume;
-            this._muted = this._game.audio.mute;
-            this._loop = loop;
-            this.key = key;
-
-            //If audio isn&#x27;t supported OR the file does not exist
-            if (this._game.audio.noAudio || this._game.fileStore.exists(this.key) === false) {
-                Kiwi.Log.log(&#x27;Could not play Audio. Either the browser doesn\&#x27;t support audio or the Audio file was not found on the filestore.&#x27;, &#x27;#audio&#x27;, &#x27;#notfound&#x27;);
-                return;
-            }
-
-            //Setup the Web AUDIO API Sound
-            if (this._usingWebAudio) {
-                this._setAudio();
-
-                if (this.ready) {
-                    this.context = this._game.audio.context;
-                    this.masterGainNode = this._game.audio.masterGain;
-
-                    //create our gain node
-                    if (typeof this.context.createGain === &#x27;undefined&#x27;) {
-                        this.gainNode = this.context.createGainNode();
-                    } else {
-                        this.gainNode = this.context.createGain();
-                    }
-
-                    //make sure the audio is decoded.
-                    this._decode();
-
-                    this.gainNode.gain.value = this.volume * this._game.audio.volume;      //this may need to change.....
-                    this.gainNode.connect(this.masterGainNode);
-                }
-
-            //Set-up the Audio Tag Sound
-            } else if (this._usingAudioTag) {
-
-                if (this._playable === true) {
-                    this._setAudio();
-
-                    if (this.ready) {
-
-                        this.totalDuration = this._sound.duration;
-                        this._sound.volume = this.volume * this._game.audio.volume;
-
-                        if (isNaN(this.totalDuration) || this.totalDuration == 0) this._pending = true;
-                    }    
-                }
-
-            }
-
-            this.addMarker(&#x27;default&#x27;, 0, this.totalDuration, this._loop);
-            this._currentMarker = &#x27;default&#x27;;
-
-            //tonnes of signals to go here.
-            this.onPlay = new Kiwi.Signal();
-            this.onStop = new Kiwi.Signal();
-            this.onPause = new Kiwi.Signal();
-            this.onResume = new Kiwi.Signal();
-            this.onLoop = new Kiwi.Signal();
-            this.onMute = new Kiwi.Signal();
-
-        }
-        
-        /**
-        * A unique ID that this audio gets assigned by the audio manager it belongs to when it is created.
-        * @property id
-        * @type number
-        * @public
-        */
-        public id: string;
-
-        /**
-        * A flag that indicates whether the sound is ready to be played or not.
-        * If not then this indicates that we are awaiting a user event.
-        * @property _playable
-        * @type boolean
-        * @private
-        */
-        private _playable: boolean;
-
-        /**
-        * Returns whether or not the sound is &#x27;playable&#x27; or not. 
-        * The only time the sound would be not &#x27;playable&#x27; is on iOS devices when a mouse/touch event has not fired.
-        * Devs should treat this property as READ ONLY.
-        * @property playable
-        * @type boolean
-        * @private
-        */
-        public get playable():boolean {
-            return this._playable;
-        }
-        public set playable(val: boolean) {
-
-            if (this._playable !== true &amp;&amp; val == true) {
-
-                this._playable = val;
-                this._setAudio();
-
-                if (this.ready &amp;&amp; this._usingAudioTag) {
-                    this.totalDuration = this._sound.duration;
-                    this._sound.volume = this.volume * this._game.audio.volume;
-
-                }
-            }
-        }
-
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} &quot;Audio&quot;
-        * @public
-        */
-        public objType() {
-            return &quot;Audio&quot;;
-        }
-
-        /**
-        * The game that this sound belongs to.
-        * @property _game
-        * @type Kiwi.Game
-        * @private
-        */
-        private _game: Kiwi.Game;
-
-        /**
-        * Web Audio API ONLY - A reference to the audio context that the game&#x27;s audio manager has.
-        * @property context
-        * @type Any
-        * @public
-        */
-        public context: any;
-        
-        /**
-        * Web Audio API ONLY - A reference to the master gain node on the audio manager.
-        * @property masterGainNode
-        * @type Any
-        * @public
-        */
-        public masterGainNode: any;
-
-        /**
-        * Web Audio API ONLY - This sounds local gainNode that it uses.
-        * @property gainNode
-        * @type Any
-        * @public
-        */
-        public gainNode: any;
-
-        /**
-        * A boolean indicating whether or not that audio tags are being used to generate sounds.
-        * @property _usingAudioTag
-        * @type boolean
-        * @private
-        */
-        private _usingAudioTag: boolean;
-
-        /**
-        * A boolean indicating whether or not the webAuduio api is being used. 
-        * @property _usingWebAudio
-        * @type boolean
-        * @private
-        */
-        private _usingWebAudio: boolean;
-
-        /**
-        * A private indicator of whether this audio is currently muted or not.
-        * @property _muted
-        * @type boolean
-        * @default false
-        * @private
-        */
-        private _muted: boolean = false;  
-        
-        /**
-        * A number between 0 and 1 representing the current volume of this audio piece. 
-        * @property _volume
-        * @type number
-        * @default 1
-        * @private
-        */
-        private _volume: number;  
-        
-        /**
-        * A boolean indicating whether this piece of audio should loop or not.
-        * @property _loop
-        * @type boolean
-        * @private
-        */
-        private _loop: boolean;
-
-        /**
-        * READ ONLY: Returns a boolean indicating if the current audio marker playing is/will loop.
-        * @property loop
-        * @readOnly
-        * @type Boolean
-        * @public
-        */
-        public get loop():boolean {
-            return this._loop;
-        }
-
-        /**
-        * The key that was used to get the audio from the AudioLibrary.
-        * @property key
-        * @type string
-        * @public
-        */
-        public key: string;
-        
-        /**
-        * The property containing the file information about the audio.
-        * @property _file
-        * @type File
-        * @private
-        */
-        private _file: Kiwi.Files.File;
-        
-        /**
-        * This is the piece of audio that either method will use to play audio. E.g.
-        * In the case of the Web Audio API this is the sound buffer source, in which the audio plays from. 
-        * In the case of Audio Tags this is the Audio Tag itself.
-        * @property _sound
-        * @type Any
-        * @private
-        */
-        private _sound: any;
-
-        /**
-        * A boolean that controls/knows if the audio is ready to be played or not.
-        * This is just an indicator of if the file has been retrieved successfully from the file store or not.
-        * @property ready
-        * @type boolean
-        * @public
-        */
-        public ready: boolean;
-
-        /**
-        * The total duration of the audio in seconds.
-        * @property totalDuration
-        * @type number
-        * @public
-        */
-        public totalDuration: number = 0;
-        
-        /**
-        * The current duration of the section of audio that is being played. In milliseconds.
-        * @property duration
-        * @type number
-        * @public
-        */
-        public duration: number;
-        
-        /**
-        * Web Audio API ONLY - The audio buffer that is to be used when playing audio segments.
-        * @property _buffer
-        * @type any
-        * @private
-        */
-        private _buffer:any = null;
-
-        /**
-        * Web Audio API ONLY - A boolean to indicate if the audio has been decoded or not yet. If not you will need to run the decode() method.
-        * @property _decoded
-        * @type boolean
-        * @default false
-        * @private
-        */
-        private _decoded: boolean = false;
-
-        /**
-        * A private property that holds the volume before the sound was muted. Used so that when unmuted the sound will resume at its old spot.
-        * @property _muteVolume
-        * @type number
-        * @private
-        */
-        private _muteVolume: number;
-
-        /**
-        * Indicates whether or not the sound is currently playing.
-        * @property isPlaying
-        * @type boolean
-        * @default false
-        * @public
-        */
-        public isPlaying: boolean;
-
-        /**
-        * A indicator of if the sound is currently paused.
-        * @property paused
-        * @type boolean
-        * @default false
-        * @public
-        */
-        public paused: boolean;
-
-        /**
-        * If the sound needs to be played but we are waiting on particular condition.
-        * In the case of CocoonJS, we generally are waiting for the audio &#x27;length&#x27; property to have a value.
-        * @property _pending
-        * @type boolean
-        * @private 
-        */
-        private _pending: boolean;
-
-        /**
-        * When the audio started playing. In milliseconds
-        * @property _startTime
-        * @type number
-        * @private 
-        */
-        private _startTime: number;
-
-        /**
-        * When the audio is playing, this is the current time we are at with it playing. In milliseconds
-        * @property _currentTime
-        * @type number
-        * @private
-        */
-        private _currentTime: number;
-
-        /**
-        * The time at which the audio should stop playing. In milliseconds. This is assuming that the audio is not on loop.
-        * @property _stopTime
-        * @type number
-        * @private
-        */
-        private _stopTime: number;
-
-        /**
-        * An array of all of the markers that are on this piece of audio. 
-        * @property _markers
-        * @type Array
-        * @private
-        */
-        private _markers: any = [];
-
-        /**
-        * The current marker that is being used.
-        * @property _currentMarker
-        * @type String
-        * @default &#x27;default&#x27;
-        * @private
-        */
-        private _currentMarker: string = &#x27;default&#x27;;
-
-        /**
-        * A Kiwi Signal that dispatches a event when the audio starts playing.
-        * @property onPlay
-        * @type Kiwi.Signal
-        * @public
-        */
-        public onPlay: Kiwi.Signal;
-
-        /**
-        * A Kiwi Signal that dispatches a event when the audio stops playing.
-        * @property onStop
-        * @type Kiwi.Signal
-        * @public
-        */
-        public onStop: Kiwi.Signal;
-        
-        /**
-        * A Kiwi Signal that dispatches a event when the audio gets paused.
-        * @property onPause
-        * @type Kiwi.Signal
-        * @public
-        */
-        public onPause: Kiwi.Signal;
-        
-        /**
-        * A Kiwi Signal that dispatches a event when the audio resumes.
-        * @property onResume
-        * @type Kiwi.Signal
-        * @public
-        */
-        public onResume: Kiwi.Signal;
-        
-        /**
-        * A Kiwi Signal that dispatches a event when the audio finishes and starts again, due to it looping.
-        * @property onLoop
-        * @type Kiwi.Signal
-        * @public
-        */
-        public onLoop: Kiwi.Signal;
-        
-        /**
-        * A Kiwi Signal that dispatches a event when the audio gets muted.
-        * @property onMute
-        * @type Kiwi.Signal
-        * @public
-        */
-        public onMute: Kiwi.Signal;
-
-        /**
-        * Retrieves the audio data from the file store.
-        * @method _setAudio
-        * @private
-        */
-        private _setAudio() {
-            
-            this._file = this._game.fileStore.getFile(this.key);
-            
-            //Does the data actually exist?
-            if (typeof this._file.data == &quot;undefined&quot;) return;
-
-            //force the browser to play it at least for a little bit
-            if (this._usingAudioTag) {
-                //clone the audio node
-                this._sound = this._file.data.cloneNode(true);
-
-                if (this._game.deviceTargetOption == Kiwi.TARGET_BROWSER) { //Tells the browser to play the piece of audio
-                    this._sound.play();
-                    this._sound.pause();
-                }
-            } else {
-
-                this._sound = this._file.data;
-            }
-            
-            this.ready = true;
-
-        } 
-
-        /**
-        * Decodes the audio data to make it playable. By default the audio should already have been decoded when it was loaded.
-        * 
-        * @method _decode
-        * @private
-        */
-        private _decode() {
-            //You only decode when using the web audio api, when the audio has loaded and if it hasn&#x27;t been decoded already
-            if (this.ready == false || this._usingAudioTag) return;
-
-            //has the 
-            if (this._file.data.decoded === true &amp;&amp; this._file.data.buffer !== null) {
-                this._buffer = this._file.data.buffer;
-                this._decoded = true;
-                return;
-            }
-
-            var that = this;
-            this.context.decodeAudioData(this._file.data.raw, function (buffer) {
-                that._buffer = buffer;
-                that._decoded = true;
-            });
-
-        }
-        
-        /**
-        * Used to control the current volume for this sound. 0 is silent, 1 is full volume.
-        * 
-        * @property volume
-        * @type number
-        * @public
-        */
-        public set volume(val: number) {
-
-            if (this._game.audio.noAudio || this.ready === false) return;
-
-            val = Kiwi.Utils.GameMath.clamp(val, 1, 0);
-
-            this._volume = val;
-
-            if (this._muted) {
-                this._muteVolume = this._volume;
-            }
-
-            if (this._playable) {
-                if (this._usingWebAudio) {
-                    this.gainNode.gain.value = this._volume * this._game.audio.volume;            //this may need to change....
-
-                } else if (this._usingAudioTag) {
-                    this._sound.volume = this._volume * this._game.audio.volume;
-                    
-                }
-            }
-        }
-        public get volume(): number {
-
-            return this._volume;
-
-        }
-
-        /**
-        * Mutes the sound and makes it &#x27;silent&#x27;. 
-        * This will not stop the sound from playing, or events from being dispatched due when the sound has finished/is looping.
-        *
-        * @property mute
-        * @type boolean
-        * @public
-        */
-        public set mute(val: boolean) {
-
-            if (this._game.audio.noAudio) return;
-
-            if (val !== undefined &amp;&amp; this._muted !== val) {
-                if (val === true) {
-                    this._muteVolume = this._volume;
-                    this.volume = 0;
-                    this._muted = true;
-                } else {
-                    this._muted = false;
-                    this.volume = this._muteVolume;
-                }
-                this.onMute.dispatch(this._muted);
-            }
-        }
-        public get mute(): boolean {
-
-            return this._muted;
-
-        }
-
-        /**
-        * Adds a new marker to the audio which will then allow for that section of audio to be played.
-        * 
-        * @method addMarker
-        * @param name {string} The name of the marker that you are adding.
-        * @param start {number} The starting point of the audio. In seconds.
-        * @param stop {number} The stopping point of the audio. In seconds.
-        * @param [loop=false] {boolean} If the marker&#x27;s pieve of audio should loop or not.
-        * @public 
-        */
-        public addMarker(name: string, start: number, stop: number, loop: boolean = false) {
-            this._markers[name] = { start: start, stop: stop, duration: stop - start, loop: loop };
-        }
-
-        /**
-        * Removes a currently existing marker from this audio.
-        *
-        * @method removeMarker
-        * @param name {String} name of the audio that you want to remove.
-        * @public
-        */
-        public removeMarker(name: string) {
-            if (name === &#x27;default&#x27;) return; //cannot delete the default
-
-            if (this.isPlaying &amp;&amp; this._currentMarker == name) {
-                this.stop();    
-                this._currentMarker = &#x27;default&#x27;;
-            }
-            delete this._markers[name];
-        }
-
-
-        /**
-        * Plays the current sound/audio from the start.
-        *
-        * @method play
-        * @param [marker] {string} The marker that is to be played. If no marker is specified then it will play the current marker (which would be the whole audio piece if no marker was ever added).
-        * @param [forceRestart=false] {boolean} Force the audio to stop and start again. Otherwise if the audio was already playing it would ignore the play.
-        * @public
-        */
-        public play(marker: string= this._currentMarker, forceRestart: boolean = false) {
-
-            if (this.isPlaying &amp;&amp; !forceRestart || this._game.audio.noAudio) return;
-
-            if (forceRestart  &amp;&amp; !this._pending ) this.stop();
-
-            if (typeof this._markers[marker] == &quot;undefined&quot;) return;
-
-            //If its the current marker that is playing and shouldn&#x27;t force restart then stop
-            if(this._currentMarker === marker &amp;&amp; this.isPlaying &amp;&amp; forceRestart == false) return;
-            
-            this.paused = false;
-            this._currentMarker = marker; 
-            this.duration = this._markers[this._currentMarker].duration * 1000;
-            this._loop = this._markers[this._currentMarker].loop;
-            
-            if (this._playable === false) {
-                this._pending = true;
-                return;
-            }
-
-            if (this._usingWebAudio) {
-                if (this._decoded === true) {
-
-                    if (this._buffer == null) this._buffer = this._file.data.buffer;
-
-                    this._sound = this.context.createBufferSource();
-                    this._sound.buffer = this._buffer;
-                    this._sound.connect(this.gainNode);
-                    this.totalDuration = this._sound.buffer.duration;
-
-                    if (this.duration == 0) this.duration = this.totalDuration * 1000;
-
-                    if (this._loop) this._sound.loop = true;
-
-                    //start
-                    if (this._sound.start === undefined) {
-                        this._sound.noteGrainOn(0, this._markers[this._currentMarker].start, this.duration / 1000);
-                    } else {
-                        this._sound.start(0, this._markers[this._currentMarker].start, this.duration / 1000);
-                    }
-                    
-                    this.isPlaying = true;
-                    this._startTime = this._game.time.now();
-                    this._currentTime = 0;
-                    this._stopTime = this._startTime + this.duration;
-                    this.onPlay.dispatch();
-
-                } else {
-                    this._pending = true;
-                    this._decode();
-                }
-
-            } else if (this._usingAudioTag) {
-
-                if (this._sound &amp;&amp; this._sound.readyState == 4 || this._game.deviceTargetOption == Kiwi.TARGET_COCOON) {
-
-                    if (this.duration == 0 || isNaN(this.duration)) this.duration = this.totalDuration * 1000;
-
-                    if (this._muted) this._sound.volume = 0;
-                    else this._sound.volume = this._volume;
-
-                    this._sound.currentTime = this._markers[this._currentMarker].start;
-                    this._sound.play();
-                    this.isPlaying = true;
-                    this._startTime = this._game.time.now();
-                    this._currentTime = 0;
-                    this._stopTime = this._startTime + this.duration;
-
-                    if (!this.paused) this.onPlay.dispatch();
-                } else {
-                    this._pending = true;
-                }
-            }
-        }
-
-        /**
-        * Stop the sound from playing.
-        * @method stop
-        * @public
-        */
-        public stop() {
-
-            if (this.isPlaying &amp;&amp; this._sound) {
-                if (this._usingWebAudio) {
-
-                    if (this._sound.stop === undefined) {
-                        this._sound.noteOff(0);
-                    } else {
-                        this._sound.stop(0);
-                    }
-
-                } else if (this._usingAudioTag) {
-                    this._sound.pause();
-                    this._sound.currentTime = 0;
-                }
-                
-                this.isPlaying = false;
-
-                if(this.paused == false) this.onStop.dispatch();
-            }
-
-        }
-        
-        /**
-        * Pauses the sound so that you can resume it from at point to paused it at.
-        * @method pause
-        * @public
-        */
-        public pause() {
-            if (this.isPlaying) {
-                this.paused = true;
-                this.stop();
-                this.onPause.dispatch();
-            }
-        }
-        
-        /**
-        * Plays the sound from when you paused the sound.
-        * @method resume
-        * @public
-        */
-        public resume() {
-
-            if (this.paused &amp;&amp; this.isPlaying == false) {
-                if (this._usingWebAudio) {
-                    
-                    if (this._buffer == null) this._buffer = this._file.data.buffer;
-
-                    this._sound = this.context.createBufferSource();
-                    this._sound.buffer = this._buffer;
-                    this._sound.connect(this.gainNode);
-
-                    if (this._loop) this._sound.loop = true;
-
-                    if (this._sound.start === undefined) {
-                        this._sound.noteGrainOn(0, this._markers[this._currentMarker].start + (this._currentTime / 1000), this.duration / 1000);
-                    } else {
-                        this._sound.start(0, this._markers[this._currentMarker].start + (this._currentTime / 1000), this.duration / 1000);
-                    }
-
-                } else {
-                    this._sound.currentTime = this._markers[this._currentMarker].start + this._currentTime / 1000;
-                    this._sound.play();
-                }
-
-                this.paused = false;
-                this.isPlaying = true;
-                this.onResume.dispatch();
-
-            }
-
-        }
-        
-        /**
-        * The update loop that gets executed every frame. 
-        * @method update
-        * @public
-        */
-        public update() {
-            //Check to see that the audio is ready
-            if (!this.ready) return;
-
-            //Is the audio ready to be played and was waiting?
-            if (this._playable &amp;&amp; this._pending) {
-
-
-                //Is it the using the Web Audio API (can tell otherwise the audio would not be decoding otherwise) and it is now ready to be played?
-                if (this._decoded === true || this._file.data &amp;&amp; this._file.data.decoded) { //Most likely unneeded now due to the fact that audio is decoded at load.
-                    this._pending = false;
-                    this.play();
-
-                //If we are using Audio tags and the audio is pending then that must be because we are waiting for the audio to load.
-                    // Also the work around for CocoonJS
-                } else if (this._usingAudioTag &amp;&amp; !isNaN(this._sound.duration) || this._game.deviceTargetOption == Kiwi.TARGET_COCOON &amp;&amp; this._sound.duration !== 0) {
-                    this.totalDuration = this._sound.duration;
-                    this._markers[&#x27;default&#x27;].duration = this.totalDuration;
-                    this._pending = false;      //again shouldn&#x27;t need once audio tag loader works.
-
-                    if(this.isPlaying &amp;&amp; this._currentMarker == &#x27;default&#x27;) this.duration = this.totalDuration;
-                }
-            } 
-
-            //if the audio is playing
-            if (this.isPlaying) {
-
-                this._currentTime = this._game.time.now() - this._startTime;
-                
-                if (this._currentTime &gt;= this.duration) {
-                    if (this._usingWebAudio) {
-
-                        if (this._loop) {
-
-                            if (this._currentMarker == &#x27;default&#x27;) {
-                                this._currentTime = 0;
-                                this._startTime = this._game.time.now();
-                            } else {
-                                this.play(this._currentMarker, true);
-                            }
-
-                            this.onLoop.dispatch();
-                        } else {
-                            this.stop();
-                        }
-
-                    } else if(this._usingAudioTag) {
-
-                        if (this._loop) {
-
-                            this.play(this._currentMarker, true);
-                            this.onLoop.dispatch();
-                        } else {
-                            this.stop();
-                        }
-
-                    }
-                }
-            }
-
-        }
-        
-        /**
-        * This method handles the destruction of all of the properties when this audio is not longer needed. 
-        * You call this method when you want this method to be removed on the next garbage collection cycle.
-        *
-        * @method destroy
-        * @public
-        */
-        public destroy() {
-            if (this._game) {
-                this._game.audio.remove(this, false);
-            }
-            if (this.onLoop) this.onLoop.dispose();
-            if (this.onStop) this.onStop.dispose();
-            if (this.onPlay) this.onPlay.dispose();
-            if (this.onMute) this.onMute.dispose();
-            if (this.onPause) this.onPause.dispose();
-            if (this.onResume) this.onResume.dispose();
-            
-            delete this.onLoop;
-            delete this.onStop;
-            delete this.onPause;
-            delete this.onMute;
-            delete this.onPlay;
-            delete this.onResume;
-            delete this._game;
-            delete this._sound;
-            delete this._currentTime;
-            delete this._startTime;
-            delete this._stopTime;
-            delete this._pending;
-            delete this.masterGainNode;
-            delete this.gainNode;
-            delete this.totalDuration;
-            delete this.duration;
-            delete this._file;
-            delete this._buffer;
-            delete this._decoded;
-        }
-
-    }
+	/**
+	* The Audio Object contains the functionality for playing a singular sound in a Kiwi Game. 
+	* The Audio can contain Audio Sprites which is a nice way to play audio on mobile devices. 
+	* Audio Objects do not &#x27;die&#x27; when game states are switched or changed. 
+	*
+	* @class Audio
+	* @constructor
+	* @namespace Kiwi.Sound
+	* @param game {Kiwi.Game} The game that this piece of audio belongs to.
+	* @param key {string} The key to which which piece of audio should be loaded from the AudioLibrary.
+	* @param volume {number} A number between 0 (silence) and 1 (loud).
+	* @param loop {boolean} If the audio should loop when it is finished or just stop.
+	* @return {Kiwi.Sound.Audio} This object
+	*
+	*/
+	export class Audio {
+
+		constructor(game: Kiwi.Game, key: string, volume: number, loop: boolean) {
+
+			this.ready = false;
+			this._game = game;
+			this._game.audio.registerSound(this);
+
+			this._usingAudioTag = this._game.audio.usingAudioTag;
+			this._usingWebAudio = this._game.audio.usingWebAudio;
+
+			this._playable = (this._game.audio.locked == true) ? false : true;
+
+			this.duration = 0;
+			this._volume = volume;
+			this._muteVolume = volume;
+			this._muted = this._game.audio.mute;
+			this._loop = loop;
+			this.key = key;
+
+			//If audio isn&#x27;t supported OR the file does not exist
+			if (this._game.audio.noAudio || this._game.fileStore.exists(this.key) === false) {
+				Kiwi.Log.log(&#x27;Could not play Audio. Either the browser doesn\&#x27;t support audio or the Audio file was not found on the filestore.&#x27;, &#x27;#audio&#x27;, &#x27;#notfound&#x27;);
+				return;
+			}
+
+			//Setup the Web AUDIO API Sound
+			if (this._usingWebAudio) {
+				this._setAudio();
+
+				if (this.ready) {
+					this.context = this._game.audio.context;
+					this.masterGainNode = this._game.audio.masterGain;
+
+					//create our gain node
+					if (typeof this.context.createGain === &#x27;undefined&#x27;) {
+						this.gainNode = this.context.createGainNode();
+					} else {
+						this.gainNode = this.context.createGain();
+					}
+
+					//make sure the audio is decoded.
+					this._decode();
+
+					this.gainNode.gain.value = this.volume * this._game.audio.volume;      //this may need to change.....
+					this.gainNode.connect(this.masterGainNode);
+				}
+
+			//Set-up the Audio Tag Sound
+			} else if (this._usingAudioTag) {
+
+				if (this._playable === true) {
+					this._setAudio();
+
+					if (this.ready) {
+
+						this.totalDuration = this._sound.duration;
+						this._sound.volume = this.volume * this._game.audio.volume;
+
+						if (isNaN(this.totalDuration) || this.totalDuration == 0) this._pending = true;
+					}
+				}
+
+			}
+
+			this.addMarker(&#x27;default&#x27;, 0, this.totalDuration, this._loop);
+			this._currentMarker = &#x27;default&#x27;;
+
+			//tonnes of signals to go here.
+			this.onPlay = new Kiwi.Signal();
+			this.onStop = new Kiwi.Signal();
+			this.onPause = new Kiwi.Signal();
+			this.onResume = new Kiwi.Signal();
+			this.onLoop = new Kiwi.Signal();
+			this.onMute = new Kiwi.Signal();
+
+		}
+
+		/**
+		* A unique ID that this audio gets assigned by the audio manager it belongs to when it is created.
+		* @property id
+		* @type number
+		* @public
+		*/
+		public id: string;
+
+		/**
+		* A flag that indicates whether the sound is ready to be played or not.
+		* If not then this indicates that we are awaiting a user event.
+		* @property _playable
+		* @type boolean
+		* @private
+		*/
+		private _playable: boolean;
+
+		/**
+		* Returns whether or not the sound is &#x27;playable&#x27; or not. 
+		* The only time the sound would be not &#x27;playable&#x27; is on iOS devices when a mouse/touch event has not fired.
+		* Devs should treat this property as READ ONLY.
+		* @property playable
+		* @type boolean
+		* @private
+		*/
+		public get playable():boolean {
+			return this._playable;
+		}
+		public set playable(val: boolean) {
+
+			if (this._playable !== true &amp;&amp; val == true) {
+
+				this._playable = val;
+				this._setAudio();
+
+				if (this.ready &amp;&amp; this._usingAudioTag) {
+					this.totalDuration = this._sound.duration;
+					this._sound.volume = this.volume * this._game.audio.volume;
+
+				}
+			}
+		}
+
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} &quot;Audio&quot;
+		* @public
+		*/
+		public objType() {
+			return &quot;Audio&quot;;
+		}
+
+		/**
+		* The game that this sound belongs to.
+		* @property _game
+		* @type Kiwi.Game
+		* @private
+		*/
+		private _game: Kiwi.Game;
+
+		/**
+		* Web Audio API ONLY - A reference to the audio context that the game&#x27;s audio manager has.
+		* @property context
+		* @type Any
+		* @public
+		*/
+		public context: any;
+
+		/**
+		* Web Audio API ONLY - A reference to the master gain node on the audio manager.
+		* @property masterGainNode
+		* @type Any
+		* @public
+		*/
+		public masterGainNode: any;
+
+		/**
+		* Web Audio API ONLY - This sounds local gainNode that it uses.
+		* @property gainNode
+		* @type Any
+		* @public
+		*/
+		public gainNode: any;
+
+		/**
+		* A boolean indicating whether or not that audio tags are being used to generate sounds.
+		* @property _usingAudioTag
+		* @type boolean
+		* @private
+		*/
+		private _usingAudioTag: boolean;
+
+		/**
+		* A boolean indicating whether or not the webAuduio api is being used. 
+		* @property _usingWebAudio
+		* @type boolean
+		* @private
+		*/
+		private _usingWebAudio: boolean;
+
+		/**
+		* A private indicator of whether this audio is currently muted or not.
+		* @property _muted
+		* @type boolean
+		* @default false
+		* @private
+		*/
+		private _muted: boolean = false;  
+
+		/**
+		* A number between 0 and 1 representing the current volume of this audio piece. 
+		* @property _volume
+		* @type number
+		* @default 1
+		* @private
+		*/
+		private _volume: number;  
+
+		/**
+		* A boolean indicating whether this piece of audio should loop or not.
+		* @property _loop
+		* @type boolean
+		* @private
+		*/
+		private _loop: boolean;
+
+		/**
+		* READ ONLY: Returns a boolean indicating if the current audio marker playing is/will loop.
+		* @property loop
+		* @readOnly
+		* @type Boolean
+		* @public
+		*/
+		public get loop():boolean {
+			return this._loop;
+		}
+
+		/**
+		* The key that was used to get the audio from the AudioLibrary.
+		* @property key
+		* @type string
+		* @public
+		*/
+		public key: string;
+
+		/**
+		* The property containing the file information about the audio.
+		* @property _file
+		* @type File
+		* @private
+		*/
+		private _file: Kiwi.Files.File;
+
+		/**
+		* This is the piece of audio that either method will use to play audio. E.g.
+		* In the case of the Web Audio API this is the sound buffer source, in which the audio plays from. 
+		* In the case of Audio Tags this is the Audio Tag itself.
+		* @property _sound
+		* @type Any
+		* @private
+		*/
+		private _sound: any;
+
+		/**
+		* A boolean that controls/knows if the audio is ready to be played or not.
+		* This is just an indicator of if the file has been retrieved successfully from the file store or not.
+		* @property ready
+		* @type boolean
+		* @public
+		*/
+		public ready: boolean;
+
+		/**
+		* The total duration of the audio in seconds.
+		* @property totalDuration
+		* @type number
+		* @public
+		*/
+		public totalDuration: number = 0;
+
+		/**
+		* The current duration of the section of audio that is being played. In milliseconds.
+		* @property duration
+		* @type number
+		* @public
+		*/
+		public duration: number;
+
+		/**
+		* Web Audio API ONLY - The audio buffer that is to be used when playing audio segments.
+		* @property _buffer
+		* @type any
+		* @private
+		*/
+		private _buffer:any = null;
+
+		/**
+		* Web Audio API ONLY - A boolean to indicate if the audio has been decoded or not yet. If not you will need to run the decode() method.
+		* @property _decoded
+		* @type boolean
+		* @default false
+		* @private
+		*/
+		private _decoded: boolean = false;
+
+		/**
+		* A private property that holds the volume before the sound was muted. Used so that when unmuted the sound will resume at its old spot.
+		* @property _muteVolume
+		* @type number
+		* @private
+		*/
+		private _muteVolume: number;
+
+		/**
+		* Indicates whether or not the sound is currently playing.
+		* @property isPlaying
+		* @type boolean
+		* @default false
+		* @public
+		*/
+		public isPlaying: boolean;
+
+		/**
+		* A indicator of if the sound is currently paused.
+		* @property paused
+		* @type boolean
+		* @default false
+		* @public
+		*/
+		public paused: boolean;
+
+		/**
+		* If the sound needs to be played but we are waiting on particular condition.
+		* In the case of CocoonJS, we generally are waiting for the audio &#x27;length&#x27; property to have a value.
+		* @property _pending
+		* @type boolean
+		* @private 
+		*/
+		private _pending: boolean;
+
+		/**
+		* When the audio started playing. In milliseconds
+		* @property _startTime
+		* @type number
+		* @private 
+		*/
+		private _startTime: number;
+
+		/**
+		* When the audio is playing, this is the current time we are at with it playing. In milliseconds
+		* @property _currentTime
+		* @type number
+		* @private
+		*/
+		private _currentTime: number;
+
+		/**
+		* The time at which the audio should stop playing. In milliseconds. This is assuming that the audio is not on loop.
+		* @property _stopTime
+		* @type number
+		* @private
+		*/
+		private _stopTime: number;
+
+		/**
+		* An array of all of the markers that are on this piece of audio. 
+		* @property _markers
+		* @type Array
+		* @private
+		*/
+		private _markers: any = [];
+
+		/**
+		* The current marker that is being used.
+		* @property _currentMarker
+		* @type String
+		* @default &#x27;default&#x27;
+		* @private
+		*/
+		private _currentMarker: string = &#x27;default&#x27;;
+
+		/**
+		* A Kiwi Signal that dispatches a event when the audio starts playing.
+		* @property onPlay
+		* @type Kiwi.Signal
+		* @public
+		*/
+		public onPlay: Kiwi.Signal;
+
+		/**
+		* A Kiwi Signal that dispatches a event when the audio stops playing.
+		* @property onStop
+		* @type Kiwi.Signal
+		* @public
+		*/
+		public onStop: Kiwi.Signal;
+
+		/**
+		* A Kiwi Signal that dispatches a event when the audio gets paused.
+		* @property onPause
+		* @type Kiwi.Signal
+		* @public
+		*/
+		public onPause: Kiwi.Signal;
+
+		/**
+		* A Kiwi Signal that dispatches a event when the audio resumes.
+		* @property onResume
+		* @type Kiwi.Signal
+		* @public
+		*/
+		public onResume: Kiwi.Signal;
+
+		/**
+		* A Kiwi Signal that dispatches a event when the audio finishes and starts again, due to it looping.
+		* @property onLoop
+		* @type Kiwi.Signal
+		* @public
+		*/
+		public onLoop: Kiwi.Signal;
+
+		/**
+		* A Kiwi Signal that dispatches a event when the audio gets muted.
+		* @property onMute
+		* @type Kiwi.Signal
+		* @public
+		*/
+		public onMute: Kiwi.Signal;
+
+		/**
+		* Retrieves the audio data from the file store.
+		* @method _setAudio
+		* @private
+		*/
+		private _setAudio() {
+
+			this._file = this._game.fileStore.getFile(this.key);
+			
+			//Does the data actually exist?
+			if (typeof this._file.data == &quot;undefined&quot;) return;
+
+			//force the browser to play it at least for a little bit
+			if (this._usingAudioTag) {
+				//clone the audio node
+				this._sound = this._file.data.cloneNode(true);
+
+				if (this._game.deviceTargetOption == Kiwi.TARGET_BROWSER) { //Tells the browser to play the piece of audio
+					this._sound.play();
+					this._sound.pause();
+				}
+			} else {
+
+				this._sound = this._file.data;
+			}
+
+			this.ready = true;
+
+		}
+
+		/**
+		* Decodes the audio data to make it playable. By default the audio should already have been decoded when it was loaded.
+		* 
+		* @method _decode
+		* @private
+		*/
+		private _decode() {
+			//You only decode when using the web audio api, when the audio has loaded and if it hasn&#x27;t been decoded already
+			if (this.ready == false || this._usingAudioTag) return;
+
+			//has the 
+			if (this._file.data.decoded === true &amp;&amp; this._file.data.buffer !== null) {
+				this._buffer = this._file.data.buffer;
+				this._decoded = true;
+				return;
+			}
+
+			var that = this;
+			this.context.decodeAudioData(this._file.data.raw, function (buffer) {
+				that._buffer = buffer;
+				that._decoded = true;
+			});
+
+		}
+
+		/**
+		* Used to control the current volume for this sound. 0 is silent, 1 is full volume.
+		* 
+		* @property volume
+		* @type number
+		* @public
+		*/
+		public set volume(val: number) {
+
+			if (this._game.audio.noAudio || this.ready === false) return;
+
+			val = Kiwi.Utils.GameMath.clamp(val, 1, 0);
+
+			this._volume = val;
+
+			if (this._muted) {
+				this._muteVolume = this._volume;
+			}
+
+			if (this._playable) {
+				if (this._usingWebAudio) {
+					this.gainNode.gain.value = this._volume * this._game.audio.volume;            //this may need to change....
+
+				} else if (this._usingAudioTag) {
+					this._sound.volume = this._volume * this._game.audio.volume;
+				}
+			}
+		}
+		public get volume(): number {
+
+			return this._volume;
+
+		}
+
+		/**
+		* Mutes the sound and makes it &#x27;silent&#x27;. 
+		* This will not stop the sound from playing, or events from being dispatched due when the sound has finished/is looping.
+		*
+		* @property mute
+		* @type boolean
+		* @public
+		*/
+		public set mute(val: boolean) {
+
+			if (this._game.audio.noAudio) return;
+
+			if (val !== undefined &amp;&amp; this._muted !== val) {
+				if (val === true) {
+					this._muteVolume = this._volume;
+					this.volume = 0;
+					this._muted = true;
+				} else {
+					this._muted = false;
+					this.volume = this._muteVolume;
+				}
+				this.onMute.dispatch(this._muted);
+			}
+		}
+		public get mute(): boolean {
+
+			return this._muted;
+
+		}
+
+		/**
+		* Adds a new marker to the audio which will then allow for that section of audio to be played.
+		* 
+		* @method addMarker
+		* @param name {string} The name of the marker that you are adding.
+		* @param start {number} The starting point of the audio. In seconds.
+		* @param stop {number} The stopping point of the audio. In seconds.
+		* @param [loop=false] {boolean} If the marker&#x27;s pieve of audio should loop or not.
+		* @public 
+		*/
+		public addMarker(name: string, start: number, stop: number, loop: boolean = false) {
+			this._markers[name] = { start: start, stop: stop, duration: stop - start, loop: loop };
+		}
+
+		/**
+		* Removes a currently existing marker from this audio.
+		*
+		* @method removeMarker
+		* @param name {String} name of the audio that you want to remove.
+		* @public
+		*/
+		public removeMarker(name: string) {
+			if (name === &#x27;default&#x27;) return; //cannot delete the default
+
+			if (this.isPlaying &amp;&amp; this._currentMarker == name) {
+				this.stop();    
+				this._currentMarker = &#x27;default&#x27;;
+			}
+			delete this._markers[name];
+		}
+
+
+		/**
+		* Plays the current sound/audio from the start.
+		*
+		* @method play
+		* @param [marker] {string} The marker that is to be played. If no marker is specified then it will play the current marker (which would be the whole audio piece if no marker was ever added).
+		* @param [forceRestart=false] {boolean} Force the audio to stop and start again. Otherwise if the audio was already playing it would ignore the play.
+		* @public
+		*/
+		public play(marker: string= this._currentMarker, forceRestart: boolean = false) {
+
+			if (this.isPlaying &amp;&amp; !forceRestart || this._game.audio.noAudio) return;
+
+			if (forceRestart  &amp;&amp; !this._pending ) this.stop();
+
+			if (typeof this._markers[marker] == &quot;undefined&quot;) return;
+
+			//If its the current marker that is playing and shouldn&#x27;t force restart then stop
+			if(this._currentMarker === marker &amp;&amp; this.isPlaying &amp;&amp; forceRestart == false) return;
+			
+			this.paused = false;
+			this._currentMarker = marker; 
+			this.duration = this._markers[this._currentMarker].duration * 1000;
+			this._loop = this._markers[this._currentMarker].loop;
+
+			if (this._playable === false) {
+				this._pending = true;
+				return;
+			}
+
+			if (this._usingWebAudio) {
+				if (this._decoded === true) {
+
+					if (this._buffer == null) this._buffer = this._file.data.buffer;
+
+					this._sound = this.context.createBufferSource();
+					this._sound.buffer = this._buffer;
+					this._sound.connect(this.gainNode);
+					this.totalDuration = this._sound.buffer.duration;
+
+					if (this.duration == 0) this.duration = this.totalDuration * 1000;
+
+					if (this._loop) this._sound.loop = true;
+
+					//start
+					if (this._sound.start === undefined) {
+						this._sound.noteGrainOn(0, this._markers[this._currentMarker].start, this.duration / 1000);
+					} else {
+						this._sound.start(0, this._markers[this._currentMarker].start, this.duration / 1000);
+					}
+
+					this.isPlaying = true;
+					this._startTime = this._game.time.now();
+					this._currentTime = 0;
+					this._stopTime = this._startTime + this.duration;
+					this.onPlay.dispatch();
+
+				} else {
+					this._pending = true;
+					this._decode();
+				}
+
+			} else if (this._usingAudioTag) {
+
+				if (this._sound &amp;&amp; this._sound.readyState == 4 || this._game.deviceTargetOption == Kiwi.TARGET_COCOON) {
+
+					if (this.duration == 0 || isNaN(this.duration)) this.duration = this.totalDuration * 1000;
+
+					if (this._muted) this._sound.volume = 0;
+					else this._sound.volume = this._volume;
+
+					this._sound.currentTime = this._markers[this._currentMarker].start;
+					this._sound.play();
+					this.isPlaying = true;
+					this._startTime = this._game.time.now();
+					this._currentTime = 0;
+					this._stopTime = this._startTime + this.duration;
+
+					if (!this.paused) this.onPlay.dispatch();
+				} else {
+					this._pending = true;
+				}
+			}
+		}
+
+		/**
+		* Stop the sound from playing.
+		* @method stop
+		* @public
+		*/
+		public stop() {
+
+			if (this.isPlaying &amp;&amp; this._sound) {
+				if (this._usingWebAudio) {
+
+					if (this._sound.stop === undefined) {
+						this._sound.noteOff(0);
+					} else {
+						this._sound.stop(0);
+					}
+
+				} else if (this._usingAudioTag) {
+					this._sound.pause();
+					this._sound.currentTime = 0;
+				}
+
+				this.isPlaying = false;
+
+				if(this.paused == false) this.onStop.dispatch();
+			}
+
+		}
+
+		/**
+		* Pauses the sound so that you can resume it from at point to paused it at.
+		* @method pause
+		* @public
+		*/
+		public pause() {
+			if (this.isPlaying) {
+				this.paused = true;
+				this.stop();
+				this.onPause.dispatch();
+			}
+		}
+		
+		/**
+		* Plays the sound from when you paused the sound.
+		* @method resume
+		* @public
+		*/
+		public resume() {
+
+			if (this.paused &amp;&amp; this.isPlaying == false) {
+				if (this._usingWebAudio) {
+					
+					if (this._buffer == null) this._buffer = this._file.data.buffer;
+
+					this._sound = this.context.createBufferSource();
+					this._sound.buffer = this._buffer;
+					this._sound.connect(this.gainNode);
+
+					if (this._loop) this._sound.loop = true;
+
+					if (this._sound.start === undefined) {
+						this._sound.noteGrainOn(0, this._markers[this._currentMarker].start + (this._currentTime / 1000), this.duration / 1000);
+					} else {
+						this._sound.start(0, this._markers[this._currentMarker].start + (this._currentTime / 1000), this.duration / 1000);
+					}
+
+				} else {
+					this._sound.currentTime = this._markers[this._currentMarker].start + this._currentTime / 1000;
+					this._sound.play();
+				}
+
+				this.paused = false;
+				this.isPlaying = true;
+				this.onResume.dispatch();
+
+			}
+
+		}
+
+		/**
+		* The update loop that gets executed every frame. 
+		* @method update
+		* @public
+		*/
+		public update() {
+			//Check to see that the audio is ready
+			if (!this.ready) return;
+
+			//Is the audio ready to be played and was waiting?
+			if (this._playable &amp;&amp; this._pending) {
+
+
+				//Is it the using the Web Audio API (can tell otherwise the audio would not be decoding otherwise) and it is now ready to be played?
+				if (this._decoded === true || this._file.data &amp;&amp; this._file.data.decoded) { //Most likely unneeded now due to the fact that audio is decoded at load.
+					this._pending = false;
+					this.play();
+
+				//If we are using Audio tags and the audio is pending then that must be because we are waiting for the audio to load.
+					// Also the work around for CocoonJS
+				} else if (this._usingAudioTag &amp;&amp; !isNaN(this._sound.duration) || this._game.deviceTargetOption == Kiwi.TARGET_COCOON &amp;&amp; this._sound.duration !== 0) {
+					this.totalDuration = this._sound.duration;
+					this._markers[&#x27;default&#x27;].duration = this.totalDuration;
+					this._pending = false;      //again shouldn&#x27;t need once audio tag loader works.
+
+					if(this.isPlaying &amp;&amp; this._currentMarker == &#x27;default&#x27;) this.duration = this.totalDuration;
+				}
+			}
+
+			//if the audio is playing
+			if (this.isPlaying) {
+
+				this._currentTime = this._game.time.now() - this._startTime;
+				
+				if (this._currentTime &gt;= this.duration) {
+					if (this._usingWebAudio) {
+
+						if (this._loop) {
+
+							if (this._currentMarker == &#x27;default&#x27;) {
+								this._currentTime = 0;
+								this._startTime = this._game.time.now();
+							} else {
+								this.play(this._currentMarker, true);
+							}
+
+							this.onLoop.dispatch();
+						} else {
+							this.stop();
+						}
+
+					} else if(this._usingAudioTag) {
+
+						if (this._loop) {
+
+							this.play(this._currentMarker, true);
+							this.onLoop.dispatch();
+						} else {
+							this.stop();
+						}
+
+					}
+				}
+			}
+
+		}
+
+		/**
+		* This method handles the destruction of all of the properties when this audio is not longer needed. 
+		* You call this method when you want this method to be removed on the next garbage collection cycle.
+		*
+		* @method destroy
+		* @public
+		*/
+		public destroy() {
+			if (this._game) {
+				this._game.audio.remove(this, false);
+			}
+			if (this.onLoop) this.onLoop.dispose();
+			if (this.onStop) this.onStop.dispose();
+			if (this.onPlay) this.onPlay.dispose();
+			if (this.onMute) this.onMute.dispose();
+			if (this.onPause) this.onPause.dispose();
+			if (this.onResume) this.onResume.dispose();
+			
+			delete this.onLoop;
+			delete this.onStop;
+			delete this.onPause;
+			delete this.onMute;
+			delete this.onPlay;
+			delete this.onResume;
+			delete this._game;
+			delete this._sound;
+			delete this._currentTime;
+			delete this._startTime;
+			delete this._stopTime;
+			delete this._pending;
+			delete this.masterGainNode;
+			delete this.gainNode;
+			delete this.totalDuration;
+			delete this.duration;
+			delete this._file;
+			delete this._buffer;
+			delete this._decoded;
+		}
+
+	}
 
 }
+
     </pre>
 </div>
 
diff --git a/docs/files/src_sound_AudioLibrary.ts.html b/docs/files/src_sound_AudioLibrary.ts.html
index 150c878..0d637c6 100644
--- a/docs/files/src_sound_AudioLibrary.ts.html
+++ b/docs/files/src_sound_AudioLibrary.ts.html
@@ -369,111 +369,108 @@ <h1 class="file-heading">File: src/sound/AudioLibrary.ts</h1>
 * @module Kiwi
 * @submodule Sound
 * 
-*/ 
+*/
 
 module Kiwi.Sound {
 
-    /**
-    * Holds a reference to all of the Audio Files (mp3, ogg, e.t.c) that are accessible on the State that this AudioLibrary is on.
-    * 
-    * @class AudioLibrary
-    * @constructor
-    * @namespace Kiwi.Sound
-    * @param game {Kiwi.Game} The game that this audio library is a member of.
-    * @return {Kiwi.Sound.AudioLibrary}
-    */
-    export class AudioLibrary {
-         
-        constructor(game: Kiwi.Game) {
+	/**
+	* Holds a reference to all of the Audio Files (mp3, ogg, e.t.c) that are accessible on the State that this AudioLibrary is on.
+	* 
+	* @class AudioLibrary
+	* @constructor
+	* @namespace Kiwi.Sound
+	* @param game {Kiwi.Game} The game that this audio library is a member of.
+	* @return {Kiwi.Sound.AudioLibrary}
+	*/
+	export class AudioLibrary {
 
-            this._game = game;
-            this.audio = {};
-        }
+		constructor(game: Kiwi.Game) {
 
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} &quot;AudioLibrary&quot;
-        * @public
-        */
-        public objType(): string {
-            return &quot;AudioLibrary&quot;;
-        }
+			this._game = game;
+			this.audio = {};
+		}
 
-        /**
-        * The game that the AudioLibrary belongs to.
-        * @property _game
-        * @type Kiwi.Game
-        * @private
-        */
-        private _game: Kiwi.Game;
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} &quot;AudioLibrary&quot;
+		* @public
+		*/
+		public objType(): string {
+			return &quot;AudioLibrary&quot;;
+		}
 
-        /**
-        * Contains all of the audio files that are available.
-        * @property audio
-        * @type Object
-        * @public
-        */
-        public audio;
+		/**
+		* The game that the AudioLibrary belongs to.
+		* @property _game
+		* @type Kiwi.Game
+		* @private
+		*/
+		private _game: Kiwi.Game;
 
-        /**
-        * Resets the audio library.
-        * @method clear
-        * @public
-        */
-        public clear() {
-            for (var prop in this.audio) {
-                delete this.audio[prop];
-            }
-        }
+		/**
+		* Contains all of the audio files that are available.
+		* @property audio
+		* @type Object
+		* @public
+		*/
+		public audio;
 
+		/**
+		* Resets the audio library.
+		* @method clear
+		* @public
+		*/
+		public clear() {
+			for (var prop in this.audio) {
+				delete this.audio[prop];
+			}
+		}
 
-        /**
-        * Rebuild the library from a fileStore. Clears the library and repopulates it.
-        * @method rebuild
-        * @param {Kiwi.Files.FileStore} fileStore
-        * @param {Kiwi.State} state
-        * @public
-        */
-        public rebuild(fileStore:Kiwi.Files.FileStore,state:Kiwi.State) {
-            this.clear();
-            Kiwi.Log.log(&quot;Kiwi.AudioLibrary: Rebuilding Audio Library.&quot;, &#x27;#audio&#x27;, &#x27;#rebuild&#x27;);
 
-            var fileStoreKeys = fileStore.keys;
-            for (var i = 0; i &lt; fileStoreKeys.length; i++) {
-                var file: Kiwi.Files.File = this._game.fileStore.getFile(fileStoreKeys[i]);
-                if (file.isAudio) {
-                    Kiwi.Log.log(&quot;  Kiwi.AudioLibrary: Adding Audio: &quot; + file.name, &#x27;#audio&#x27;, &#x27;#added&#x27;);
-                    state.audioLibrary.add(file);
-                } 
-            }        
-        }
+		/**
+		* Rebuild the library from a fileStore. Clears the library and repopulates it.
+		* @method rebuild
+		* @param {Kiwi.Files.FileStore} fileStore
+		* @param {Kiwi.State} state
+		* @public
+		*/
+		public rebuild(fileStore:Kiwi.Files.FileStore,state:Kiwi.State) {
+			this.clear();
+			Kiwi.Log.log(&quot;Kiwi.AudioLibrary: Rebuilding Audio Library.&quot;, &#x27;#audio&#x27;, &#x27;#rebuild&#x27;);
 
-        /**
-        * Adds a new audio file to the audio library.
-        * @method add
-        * @param {Kiwi.Files.File} audioFile
-        * @public
-        */
-        public add(audioFile: Kiwi.Files.File) {
+			var fileStoreKeys = fileStore.keys;
+			for (var i = 0; i &lt; fileStoreKeys.length; i++) {
+				var file: Kiwi.Files.File = this._game.fileStore.getFile(fileStoreKeys[i]);
+				if (file.isAudio) {
+					Kiwi.Log.log(&quot;  Kiwi.AudioLibrary: Adding Audio: &quot; + file.name, &#x27;#audio&#x27;, &#x27;#added&#x27;);
+					state.audioLibrary.add(file);
+				}
+			}
+		}
 
-            switch (audioFile.dataType) {
-                case Kiwi.Files.File.AUDIO:
-                    this.audio[audioFile.key] = audioFile;
-                    break;
-               
-                default:
-                    //Audio file is of unknown type and was not added to audio library
-                    break;
-            }
+		/**
+		* Adds a new audio file to the audio library.
+		* @method add
+		* @param {Kiwi.Files.File} audioFile
+		* @public
+		*/
+		public add(audioFile: Kiwi.Files.File) {
 
-        }
+			switch (audioFile.dataType) {
+				case Kiwi.Files.File.AUDIO:
+					this.audio[audioFile.key] = audioFile;
+					break;
+				default:
+					//Audio file is of unknown type and was not added to audio library
+					break;
+			}
 
-       
-    }
+		}
 
-}
+	}
 
+}
 
     </pre>
 </div>
diff --git a/docs/files/src_sound_AudioManager.ts.html b/docs/files/src_sound_AudioManager.ts.html
index b18f2bb..2782195 100644
--- a/docs/files/src_sound_AudioManager.ts.html
+++ b/docs/files/src_sound_AudioManager.ts.html
@@ -371,501 +371,504 @@ <h1 class="file-heading">File: src/sound/AudioManager.ts</h1>
 * @submodule Sound
 * @main Sound 
 * 
-*/ 
+*/
 
 module Kiwi.Sound {
 
-    /**
-    * Manages the initialisation of assets necessary when dealing with audio in the game, either through Audio Tags or the Web Audio API. 
-    * Also provides global sound controls that will be applyed to all Audio objects at the same time, within the Game this manager is a part of. 
-    * 
-    * @class AudioManager
-    * @constructor
-    * @namespace Kiwi.Sound
-    * @param game {Kiwi.Game} The game that this audio manager belongs to.
-    * @return {Kiwi.Sound.AudioManager}
-    */
-    export class AudioManager {
-         
-        constructor(game: Kiwi.Game) {
-            
-            this._game = game;
-
-        }
-
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} &quot;AudioManager&quot;
-        * @public
-        */
-        public objType() {
-            return &quot;AudioManager&quot;;
-        }
-
-        /**
-        * The game that this manager belongs to.
-        * @property _game
-        * @type Kiwi.Game
-        * @private
-        */
-        private _game: Kiwi.Game;
-        
-        /**
-        * The global volume of all of the games audio.
-        * @property _volume
-        * @type number
-        * @default 1
-        * @private
-        */
-        private _volume: number;
-
-        /**
-        * A boolean that controls whether the whole games audio should be muted or not.
-        * @property _muted
-        * @type boolean
-        * @default false
-        * @private
-        */
-        private _muted: boolean;
-
-        /**
-        * An array containing all of the sounds on the game.
-        * @property _sounds
-        * @type Array
-        * @private
-        */
-        private _sounds: any;
-        
-        /**
-        * The number of channels that are supported.
-        * Not in much use at this point in time.
-        * @property channels
-        * @type number
-        * @public
-        */
-        public channels: number;
-
-        /**
-        * If the current game has audio support or not.
-        * Useful because audio support is spotty in mobile browsers.
-        * @property noAudio
-        * @type boolean
-        * @public
-        */
-        public noAudio: boolean = false;
-
-        /**
-        * If the game is currently using the Web Audio API for the sound.
-        * @property usingWebAudio
-        * @type boolean
-        * @public
-        */
-        public usingWebAudio: boolean = false;
-
-        /**
-        * If the game is using audio tags for the sound. This is the fallback if the web audio api is not supported. 
-        * @property usingAudioTag
-        * @type boolean
-        * @public
-        */
-        public usingAudioTag: boolean = false;
-
-        /**
-        * Web Audio API ONLY - The audio context that is used for decoding audio, e.t.c. 
-        * @property context
-        * @type any
-        * @public
-        */
-        public context: any = null;
-
-        /**
-        * Web Audio API ONLY - The master gain node through which all sounds play.
-        * @property masterGain
-        * @type any
-        * @public
-        */
-        public masterGain: any = null;
-
-        /**
-        * The volume of the audio before it was muted. This is used so that when the audio is unmuted the volume will resume at this point.
-        * @property _muteVolume
-        * @type number
-        * @private
-        */
-        private _muteVolume: number;
-        
-        /**
-        * Indicates if the sounds is currently &#x27;locked&#x27; or not. 
-        * If it is &#x27;locked&#x27; then no audio can play until a user touch&#x27;s the device.  
-        * @property _locked
-        * @type boolean
-        * @private
-        */
-        private _locked: boolean;
-        private _unlockedSource: any = null;
-        
-        /**
-        * Returns a boolean indicating whether the device has been touched or not. READ ONLY.
-        * @property locked
-        * @type boolean
-        * @public
-        */
-        public get locked():boolean {
-            return this._locked;
-        }
-
-        /**
-        * The boot method is executed when all of the DOM elements needed for the game are loaded and the game is ready to &#x27;start&#x27; up.
-        *
-        * @method boot
-        * @public
-        */
-        public boot() {
-            
-            this._volume = 1;
-            this._muted = false;
-            this._sounds = [];
-
-            //check to see if it is an iOS device and if it doesn&#x27;t support webAudio
-            if (Kiwi.DEVICE.iOS &amp;&amp; Kiwi.DEVICE.webaudio == false) {
-                this.channels = 1;
-            }
-
-            //Add mouse event here to &#x27;unlock&#x27; the device.
-            if (Kiwi.DEVICE.iOS &amp;&amp; this._game.deviceTargetOption !== Kiwi.TARGET_COCOON) {
-                this._locked = true;
-                this._game.input.onUp.addOnce(this._unlocked, this);
-                
-                Kiwi.Log.log(&#x27;Kiwi.AudioManager: Audio is currently Locked until at touch event.&#x27;, &#x27;#audio&#x27;, &#x27;#locked&#x27;);
-            } else {
-                this._locked = false;
-            }
-
-            this.usingWebAudio = true;  //we hope for the best....
-            this.usingAudioTag = false;
-
-            if (!!window[&#x27;AudioContext&#x27;]) {//if audio context is supported
-                this.context = new window[&#x27;AudioContext&#x27;]();
-            }
-            else if (!!window[&#x27;webkitAudioContext&#x27;]) {//if webkit audio context is supported
-                this.context = new window[&#x27;webkitAudioContext&#x27;]();
-            }
-            else if (!!window[&#x27;Audio&#x27;]) {//no awesome audio support...so maybe the audio tags?
-                this.usingWebAudio = false;
-                this.usingAudioTag = true;
-            }
-            else {//they have no audio support........no sound for you :(
-                this.usingWebAudio = false;
-                this.noAudio = true; //prepared for the worst :(
-            }
-
-            if (this.context !== null) {
-
-                if (this.context.createGain === undefined) {
-                    this.masterGain = this.context.createGainNode();
-                } else {
-                    this.masterGain = this.context.createGain();
-                }
-
-                this.masterGain.gain.value = 1;
-                this.masterGain.connect(this.context.destination);
-            }
-        
-        }
-
-        /**
-        * Is executed when a mouse event is fired on the device. This is used to enabled playback of sounds on the current device if they were awaiting for a user event.
-        * @method _unlocked
-        * @private
-        */
-        private _unlocked() {
-            Kiwi.Log.log(&#x27;Kiwi.AudioManager: Audio now Unlocked.&#x27;, &#x27;#audio&#x27;, &#x27;#unlocked&#x27;);
-
-            if (this.usingAudioTag) {
-                this._locked = false;
-                for (var i = 0; i &lt; this._sounds.length; i++) {
-                    this._sounds[i].playable = true;
-                }
-            } else {
-                // Create empty buffer and play it
-                var buffer = this.context.createBuffer(1, 1, 22050);
-                this._unlockedSource = this.context.createBufferSource();
-                this._unlockedSource.buffer = buffer;
-                this._unlockedSource.connect(this.context.destination);
-                this._unlockedSource.noteOn(0);
-            }
-        }
-
-        /**
-        * Used to mute the audio on the device, or to check to see if the device is muted.
-        * This will not stop audio from being played, will just mean that the audio is silent.
-        * 
-        * @property mute
-        * @type boolean
-        * @default false
-        * @public
-        */
-        public set mute(value: boolean) {
-            
-            if (value === true) {
-                if (this._muted) return;
-                this._muted = true;
-
-                //mute the sounds 
-                if (this.usingWebAudio) {
-                    this._muteVolume = this.masterGain.gain.value;
-                    this.masterGain.gain.value = 0;
-
-                } else if (this.usingAudioTag) {
-                    for (var i = 0; i &lt; this._sounds.length; i++) {
-                        this._sounds[i].mute = true;
-                    }
-                }
-
-            } else {
-                if (this._muted == false) return;
-                this._muted = false;
-
-                if (this.usingWebAudio) {
-                    this.masterGain.gain.value = this._muteVolume;
-
-                } else if (this.usingAudioTag) {
-                    for (var i = 0; i &lt; this._sounds.length; i++) {
-                        this._sounds[i].mute = false;
-                    }
-                }
-            }
-        
-        }
-
-        public get mute(): boolean {
-            return this._muted;
-            
-        }
-
-        /**
-        * Global setting and getting of the volume.
-        * A number between 0 (silence) and 1 (full volume).
-        *
-        * @property volume
-        * @type number  
-        * @default 1
-        * @public
-        */
-        public set volume(value: number) {
-            
-            if (value !== undefined) {
-
-                value = Kiwi.Utils.GameMath.clamp(value, 1, 0);
-                this._volume = value;
-
-                if (this._muted) {
-                    this._muteVolume = this._volume;
-                }
-
-                if (this.usingWebAudio) {
-                    this.masterGain.gain.value = value;
-
-                } else if (this.usingAudioTag) {
-                    for (var i = 0; i &lt; this._sounds.length; i++) {
-                        //for each sound tag to update.
-                        this._sounds[i].volume = this._sounds[i].volume;
-                    }
-                }
-
-            }
-        }
-        public get volume(): number {
-
-            return this._volume;
-
-        }
-
-        /**
-        * Indicates whether or not an Audio Object is registered with this Audio Manager or not. For Kiwi Internal use only.
-        * @method isRegistered
-        * @param sound {Audio} The Audio object you are checking for.
-        * @return {Boolean} If the piece of audio is registered or not.
-        * @public
-        */
-        public isRegistered(sound: Kiwi.Sound.Audio):boolean {
-            if (this.noAudio) return; 
-
-            if (this._sounds.indexOf(sound) !== -1) {
-                return true;
-            } else {
-                return false;
-            }
-        }
-
-        /**
-        * Registers an Audio Object with this audio manager. Also assign&#x27;s the audio piece a unique ID to identify it by. Internal Kiwi use only.
-        * @method registerSound
-        * @param sound {Audio} The audio piece you are wanting to register. 
-        * @return { Boolean } Indication of if the sound was successfully added or not.
-        * @public
-        */
-        public registerSound(sound:Kiwi.Sound.Audio):boolean {
-            if (this.isRegistered(sound) === false) {
-                sound.id = this._game.rnd.uuid();
-                this._sounds.push(sound);
-                return true;
-            }
-            return false;
-        }
-
-        /**
-        * Used to create a new sound on the audio manager. Returns the newly created sound.
-        * 
-        * @method add
-        * @param key {string} The key for the audio file that is to be loaded from the AudioLibrary.
-        * @param [volume=1] {number} The volume for the piece of audio.
-        * @param [loop=false] {boolean} If the audio should keep repeat when it gets to the end.
-        * @return {Kiwi.Sound.Audio}
-        * @public
-        */
-        public add(key: string, volume: number = 1, loop: boolean = false): Kiwi.Sound.Audio {//rename to create
-            
-            if (this.noAudio) return;
-
-            var sound: Kiwi.Sound.Audio = new Kiwi.Sound.Audio(this._game, key, volume, loop);
-            return sound;
-        
-        }
-
-        /**
-        * Removes the passed sound from the AudioManager.
-        * If you remove a Audio Object from the AudioManager, then that Audio Object will not have a update loop.
-        *
-        * @method remove
-        * @param sound {Kiwi.Sound.Audio} The Audio object that you want to remove.
-        * @param [destory=true] If the Audio Object should be removed or not.
-        * @public
-        */
-        public remove(sound: Kiwi.Sound.Audio, destroy:boolean=true) {
-                
-            for (var i = 0; i &lt; this._sounds.length; i++) {
-
-                if (sound.id == this._sounds[i].id) {
-
-
-                    if (this.usingWebAudio &amp;&amp; sound.gainNode) sound.gainNode.disconnect();
-
-                    if (destroy == true) sound.destroy();
-
-                    this._sounds.splice(i, 1);
-
-                    return;
-                }
-
-            }
-
-        }
-        
-        /**
-        * Plays all of the sounds listed in the AudioManager.
-        * @method playAll
-        * @public
-        */
-        public playAll() {
-            for (var i = 0; i &lt; this._sounds.length; i++) {
-
-                if (this._sounds[i]) {
-                    this._sounds[i].play();
-                }
-
-            }
-        }
-    
-        /**
-        * Stops all of the sounds that are listed in the AudioManager from playing.
-        * @method stopAll
-        * @public
-        */
-        public stopAll() {
-            
-            for (var i = 0; i &lt; this._sounds.length; i++) {
-
-                if (this._sounds[i]) {
-                    this._sounds[i].stop();
-                }
-
-            }
-        
-        }
-    
-        /**
-        * Pauses all of the sounds listed in the AudioManager.
-        * @method pauseAll
-        * @public
-        */
-        public pauseAll() {
-            
-            for (var i = 0; i &lt; this._sounds.length; i++) {
-
-                if (this._sounds[i]) {
-                    this._sounds[i].pause();
-                }
-
-            }
-            
-        
-        }
-        
-        /**
-        * Resumes all of the sounds listed in the AudioManager. 
-        * @method resumeAll
-        * @public
-        */
-        public resumeAll() {
-            
-            for (var i = 0; i &lt; this._sounds.length; i++) {
-
-                if (this._sounds[i]) {
-                    this._sounds[i].resume();
-                }
-
-            }
-        
-
-        }
-
-        /**
-        * The update loop that is executed every frame.
-        * @method update
-        * @public
-        */
-        public update() {
-            
-            if (this._locked) {
-
-                if (this.usingWebAudio &amp;&amp; this._unlockedSource !== null) {
-                    if ((this._unlockedSource.playbackState === this._unlockedSource.PLAYING_STATE || this._unlockedSource.playbackState === this._unlockedSource.FINISHED_STATE))
-                    {
-                        this._locked = false;
-                        this._unlockedSource = null;
-                        for (var i = 0; i &lt; this._sounds.length; i++) {
-                            this._sounds[i].playable = true;
-                        }
-                    }
-                }
-
-            }
-            
-            if (!this.noAudio) {
-                for (var i = 0; i &lt; this._sounds.length; i++) {
-                    this._sounds[i].update();
-                }
-            }
-
-            
-        
-        }
-
-    }
+	/**
+	* Manages the initialisation of assets necessary when dealing with audio in the game, either through Audio Tags or the Web Audio API. 
+	* Also provides global sound controls that will be applyed to all Audio objects at the same time, within the Game this manager is a part of. 
+	* 
+	* @class AudioManager
+	* @constructor
+	* @namespace Kiwi.Sound
+	* @param game {Kiwi.Game} The game that this audio manager belongs to.
+	* @return {Kiwi.Sound.AudioManager}
+	*/
+	export class AudioManager {
+
+		constructor(game: Kiwi.Game) {
+
+			this._game = game;
+
+		}
+
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} &quot;AudioManager&quot;
+		* @public
+		*/
+		public objType() {
+			return &quot;AudioManager&quot;;
+		}
+
+		/**
+		* The game that this manager belongs to.
+		* @property _game
+		* @type Kiwi.Game
+		* @private
+		*/
+		private _game: Kiwi.Game;
+
+		/**
+		* The global volume of all of the games audio.
+		* @property _volume
+		* @type number
+		* @default 1
+		* @private
+		*/
+		private _volume: number;
+
+		/**
+		* A boolean that controls whether the whole games audio should be muted or not.
+		* @property _muted
+		* @type boolean
+		* @default false
+		* @private
+		*/
+		private _muted: boolean;
+
+		/**
+		* An array containing all of the sounds on the game.
+		* @property _sounds
+		* @type Array
+		* @private
+		*/
+		private _sounds: any;
+
+		/**
+		* The number of channels that are supported.
+		* Not in much use at this point in time.
+		* @property channels
+		* @type number
+		* @public
+		*/
+		public channels: number;
+
+		/**
+		* If the current game has audio support or not.
+		* Useful because audio support is spotty in mobile browsers.
+		* @property noAudio
+		* @type boolean
+		* @public
+		*/
+		public noAudio: boolean = false;
+
+		/**
+		* If the game is currently using the Web Audio API for the sound.
+		* @property usingWebAudio
+		* @type boolean
+		* @public
+		*/
+		public usingWebAudio: boolean = false;
+
+		/**
+		* If the game is using audio tags for the sound. This is the fallback if the web audio api is not supported. 
+		* @property usingAudioTag
+		* @type boolean
+		* @public
+		*/
+		public usingAudioTag: boolean = false;
+
+		/**
+		* Web Audio API ONLY - The audio context that is used for decoding audio, e.t.c. 
+		* @property context
+		* @type any
+		* @public
+		*/
+		public context: any = null;
+
+		/**
+		* Web Audio API ONLY - The master gain node through which all sounds play.
+		* @property masterGain
+		* @type any
+		* @public
+		*/
+		public masterGain: any = null;
+
+		/**
+		* The volume of the audio before it was muted. This is used so that when the audio is unmuted the volume will resume at this point.
+		* @property _muteVolume
+		* @type number
+		* @private
+		*/
+		private _muteVolume: number;
+
+		/**
+		* Indicates if the sounds is currently &#x27;locked&#x27; or not. 
+		* If it is &#x27;locked&#x27; then no audio can play until a user touch&#x27;s the device.  
+		* @property _locked
+		* @type boolean
+		* @private
+		*/
+		private _locked: boolean;
+
+		/**
+		* Sound buffer
+		* @property _unlockedSource
+		* @type {any}
+		* @private
+		*/
+		private _unlockedSource: any = null;
+
+		/**
+		* Returns a boolean indicating whether the device has been touched or not. READ ONLY.
+		* @property locked
+		* @type boolean
+		* @public
+		*/
+		public get locked():boolean {
+			return this._locked;
+		}
+
+		/**
+		* The boot method is executed when all of the DOM elements needed for the game are loaded and the game is ready to &#x27;start&#x27; up.
+		*
+		* @method boot
+		* @public
+		*/
+		public boot() {
+
+			this._volume = 1;
+			this._muted = false;
+			this._sounds = [];
+
+			//check to see if it is an iOS device and if it doesn&#x27;t support webAudio
+			if (Kiwi.DEVICE.iOS &amp;&amp; Kiwi.DEVICE.webaudio == false) {
+				this.channels = 1;
+			}
+
+			//Add mouse event here to &#x27;unlock&#x27; the device.
+			if (Kiwi.DEVICE.iOS &amp;&amp; this._game.deviceTargetOption !== Kiwi.TARGET_COCOON) {
+				this._locked = true;
+				this._game.input.onUp.addOnce(this._unlocked, this);
+				
+				Kiwi.Log.log(&#x27;Kiwi.AudioManager: Audio is currently Locked until at touch event.&#x27;, &#x27;#audio&#x27;, &#x27;#locked&#x27;);
+			} else {
+				this._locked = false;
+			}
+
+			this.usingWebAudio = true;  //we hope for the best....
+			this.usingAudioTag = false;
+
+			if (!!window[&#x27;AudioContext&#x27;]) {//if audio context is supported
+				this.context = new window[&#x27;AudioContext&#x27;]();
+			}
+			else if (!!window[&#x27;webkitAudioContext&#x27;]) {//if webkit audio context is supported
+				this.context = new window[&#x27;webkitAudioContext&#x27;]();
+			}
+			else if (!!window[&#x27;Audio&#x27;]) {//no awesome audio support...so maybe the audio tags?
+				this.usingWebAudio = false;
+				this.usingAudioTag = true;
+			}
+			else {//they have no audio support........no sound for you :(
+				this.usingWebAudio = false;
+				this.noAudio = true; //prepared for the worst :(
+			}
+
+			if (this.context !== null) {
+
+				if (this.context.createGain === undefined) {
+					this.masterGain = this.context.createGainNode();
+				} else {
+					this.masterGain = this.context.createGain();
+				}
+
+				this.masterGain.gain.value = 1;
+				this.masterGain.connect(this.context.destination);
+			}
+
+		}
+
+		/**
+		* Is executed when a mouse event is fired on the device. This is used to enabled playback of sounds on the current device if they were awaiting for a user event.
+		* @method _unlocked
+		* @private
+		*/
+		private _unlocked() {
+			Kiwi.Log.log(&#x27;Kiwi.AudioManager: Audio now Unlocked.&#x27;, &#x27;#audio&#x27;, &#x27;#unlocked&#x27;);
+
+			if (this.usingAudioTag) {
+				this._locked = false;
+				for (var i = 0; i &lt; this._sounds.length; i++) {
+					this._sounds[i].playable = true;
+				}
+			} else {
+				// Create empty buffer and play it
+				var buffer = this.context.createBuffer(1, 1, 22050);
+				this._unlockedSource = this.context.createBufferSource();
+				this._unlockedSource.buffer = buffer;
+				this._unlockedSource.connect(this.context.destination);
+				this._unlockedSource.noteOn(0);
+			}
+		}
+
+		/**
+		* Used to mute the audio on the device, or to check to see if the device is muted.
+		* This will not stop audio from being played, will just mean that the audio is silent.
+		* 
+		* @property mute
+		* @type boolean
+		* @default false
+		* @public
+		*/
+		public set mute(value: boolean) {
+			
+			if (value === true) {
+				if (this._muted) return;
+				this._muted = true;
+
+				//mute the sounds 
+				if (this.usingWebAudio) {
+					this._muteVolume = this.masterGain.gain.value;
+					this.masterGain.gain.value = 0;
+
+				} else if (this.usingAudioTag) {
+					for (var i = 0; i &lt; this._sounds.length; i++) {
+						this._sounds[i].mute = true;
+					}
+				}
+
+			} else {
+				if (this._muted == false) return;
+				this._muted = false;
+
+				if (this.usingWebAudio) {
+					this.masterGain.gain.value = this._muteVolume;
+
+				} else if (this.usingAudioTag) {
+					for (var i = 0; i &lt; this._sounds.length; i++) {
+						this._sounds[i].mute = false;
+					}
+				}
+			}
+
+		}
+
+		public get mute(): boolean {
+			return this._muted;
+		}
+
+		/**
+		* Global setting and getting of the volume.
+		* A number between 0 (silence) and 1 (full volume).
+		*
+		* @property volume
+		* @type number  
+		* @default 1
+		* @public
+		*/
+		public set volume(value: number) {
+
+			if (value !== undefined) {
+
+				value = Kiwi.Utils.GameMath.clamp(value, 1, 0);
+				this._volume = value;
+
+				if (this._muted) {
+					this._muteVolume = this._volume;
+				}
+
+				if (this.usingWebAudio) {
+					this.masterGain.gain.value = value;
+
+				} else if (this.usingAudioTag) {
+					for (var i = 0; i &lt; this._sounds.length; i++) {
+						//for each sound tag to update.
+						this._sounds[i].volume = this._sounds[i].volume;
+					}
+				}
+
+			}
+		}
+		public get volume(): number {
+
+			return this._volume;
+
+		}
+
+		/**
+		* Indicates whether or not an Audio Object is registered with this Audio Manager or not. For Kiwi Internal use only.
+		* @method isRegistered
+		* @param sound {Audio} The Audio object you are checking for.
+		* @return {Boolean} If the piece of audio is registered or not.
+		* @public
+		*/
+		public isRegistered(sound: Kiwi.Sound.Audio):boolean {
+			if (this.noAudio) return; 
+
+			if (this._sounds.indexOf(sound) !== -1) {
+				return true;
+			} else {
+				return false;
+			}
+		}
+
+		/**
+		* Registers an Audio Object with this audio manager. Also assign&#x27;s the audio piece a unique ID to identify it by. Internal Kiwi use only.
+		* @method registerSound
+		* @param sound {Audio} The audio piece you are wanting to register. 
+		* @return { Boolean } Indication of if the sound was successfully added or not.
+		* @public
+		*/
+		public registerSound(sound:Kiwi.Sound.Audio):boolean {
+			if (this.isRegistered(sound) === false) {
+				sound.id = this._game.rnd.uuid();
+				this._sounds.push(sound);
+				return true;
+			}
+			return false;
+		}
+
+		/**
+		* Used to create a new sound on the audio manager. Returns the newly created sound.
+		* 
+		* @method add
+		* @param key {string} The key for the audio file that is to be loaded from the AudioLibrary.
+		* @param [volume=1] {number} The volume for the piece of audio.
+		* @param [loop=false] {boolean} If the audio should keep repeat when it gets to the end.
+		* @return {Kiwi.Sound.Audio}
+		* @public
+		*/
+		public add(key: string, volume: number = 1, loop: boolean = false): Kiwi.Sound.Audio {//rename to create
+
+			if (this.noAudio) return;
+
+			var sound: Kiwi.Sound.Audio = new Kiwi.Sound.Audio(this._game, key, volume, loop);
+			return sound;
+
+		}
+
+		/**
+		* Removes the passed sound from the AudioManager.
+		* If you remove a Audio Object from the AudioManager, then that Audio Object will not have a update loop.
+		*
+		* @method remove
+		* @param sound {Kiwi.Sound.Audio} The Audio object that you want to remove.
+		* @param [destory=true] If the Audio Object should be removed or not.
+		* @public
+		*/
+		public remove(sound: Kiwi.Sound.Audio, destroy:boolean=true) {
+
+			for (var i = 0; i &lt; this._sounds.length; i++) {
+
+				if (sound.id == this._sounds[i].id) {
+
+
+					if (this.usingWebAudio &amp;&amp; sound.gainNode) sound.gainNode.disconnect();
+
+					if (destroy == true) sound.destroy();
+
+					this._sounds.splice(i, 1);
+
+					return;
+				}
+
+			}
+
+		}
+
+		/**
+		* Plays all of the sounds listed in the AudioManager.
+		* @method playAll
+		* @public
+		*/
+		public playAll() {
+			for (var i = 0; i &lt; this._sounds.length; i++) {
+
+				if (this._sounds[i]) {
+					this._sounds[i].play();
+				}
+
+			}
+		}
+
+		/**
+		* Stops all of the sounds that are listed in the AudioManager from playing.
+		* @method stopAll
+		* @public
+		*/
+		public stopAll() {
+
+			for (var i = 0; i &lt; this._sounds.length; i++) {
+
+				if (this._sounds[i]) {
+					this._sounds[i].stop();
+				}
+
+			}
+
+		}
+
+		/**
+		* Pauses all of the sounds listed in the AudioManager.
+		* @method pauseAll
+		* @public
+		*/
+		public pauseAll() {
+
+			for (var i = 0; i &lt; this._sounds.length; i++) {
+
+				if (this._sounds[i]) {
+					this._sounds[i].pause();
+				}
+
+			}
+
+		}
+
+		/**
+		* Resumes all of the sounds listed in the AudioManager. 
+		* @method resumeAll
+		* @public
+		*/
+		public resumeAll() {
+
+			for (var i = 0; i &lt; this._sounds.length; i++) {
+
+				if (this._sounds[i]) {
+					this._sounds[i].resume();
+				}
+
+			}
+
+		}
+
+		/**
+		* The update loop that is executed every frame.
+		* @method update
+		* @public
+		*/
+		public update() {
+			
+			if (this._locked) {
+
+				if (this.usingWebAudio &amp;&amp; this._unlockedSource !== null) {
+					if ((this._unlockedSource.playbackState === this._unlockedSource.PLAYING_STATE || this._unlockedSource.playbackState === this._unlockedSource.FINISHED_STATE))
+					{
+						this._locked = false;
+						this._unlockedSource = null;
+						for (var i = 0; i &lt; this._sounds.length; i++) {
+							this._sounds[i].playable = true;
+						}
+					}
+				}
+
+			}
+
+			if (!this.noAudio) {
+				for (var i = 0; i &lt; this._sounds.length; i++) {
+					this._sounds[i].update();
+				}
+			}
+
+		}
+
+	}
 
 }
+
     </pre>
 </div>
 
diff --git a/docs/files/src_system_Bootstrap.ts.html b/docs/files/src_system_Bootstrap.ts.html
index ebf184a..ad01ed6 100644
--- a/docs/files/src_system_Bootstrap.ts.html
+++ b/docs/files/src_system_Bootstrap.ts.html
@@ -373,194 +373,195 @@ <h1 class="file-heading">File: src/system/Bootstrap.ts</h1>
 
 module Kiwi.System {
 
-    /**
-    * DOM Boot and Ready functions (based on those used by jQuery)
-    * 
-    * @class Bootstrap
-    * @namespace Kiwi.System
-    *
-    */
-    export class Bootstrap {
-
-        /**
-        *
-        * @property _callback
-        * @type Any
-        * @private
-        */
-        private _callback;
-
-        /**
-        *
-        * @property _domParent
-        * @type String
-        * @private
-        */
-        private _domParent: string;
-
-        /**
-        *
-        * @property _createContainer
-        * @type boolean
-        * @private
-        */
-        private _createContainer: boolean;
-
-        /**
-        *
-        * @property isReady
-        * @type boolean
-        * @public
-        */
-        public isReady: boolean = false;
-        
-        /**
-        * The parent div in which the layers and input live
-        * @property container
-        * @type HTMLDivElement
-        * @public
-        */
-        public container:HTMLDivElement = null;
-
-        /**
-        * This div sits on-top of all layers and captures user input
-        * @property input
-        * @type HTMLDivElement
-        * @public
-        */
-
-        public input: HTMLDivElement = null;
-
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} &quot;Bootstrap&quot;
-        * @public
-        */
-        public objType() {
-            return &quot;Bootstrap&quot;;
-        }
-
-        /**
-        * Called at the start of the game to check to see if the DOM is ready before we do anything requiring it
-        * @method boot
-        * @param {String} domParent 
-        * @param {Any} [callback=null]
-        * @param {boolean} [createContainer=true]
-        * @public
-        */
-        public boot(domParent: string, callback: any = null, createContainer: boolean = true) {
-
-            this._callback = callback;
-            this._domParent = domParent;
-            // if this is true a div will be created in browser
-            this._createContainer = createContainer;
-
-            // wait until DOM is loaded and call ready
-            if (document.readyState === &#x27;complete&#x27; || document.readyState === &#x27;interactive&#x27;)
-            {
-                this.ready();
-            }
-            else
-            {
-                document.addEventListener(&#x27;DOMContentLoaded&#x27;, () =&gt; this.ready(), false);
-                window.addEventListener(&#x27;load&#x27;, () =&gt; this.ready(), false);
-            }
-
-        }
-
-        /**
-        * If the DOM is ready it fires our callback, otherwise sets a short timeout to try again
-        * @method ready
-        * @public
-        */
-        public ready() {
-
-            if (this.isReady === true)
-            {
-                return;
-            }
-
-            if (!document.body)
-            {
-                window.setTimeout(() =&gt; this.ready(), 13);
-            }
-            else
-            {
-                //document.removeEventListener(&#x27;DOMContentLoaded&#x27;, () =&gt; this.ready(), false);
-
-                this.isReady = true;
-
-
-                if (this._createContainer === true)
-                {
-                    //  No domParent was given so we create our own container for the game with a unique ID
-                    if (this._domParent === &#x27;&#x27;)
-                    {
-                        Kiwi.Log.log(&#x27;  Kiwi.Game: No DOM parent specified. Appending the game to the body.&#x27;, &#x27;#dom&#x27;);
-                        this.container = &lt;HTMLDivElement&gt; document.createElement(&#x27;div&#x27;);
-                        this._setupContainer( &#x27;KiwiGame&#x27; + Date.now().toString() );
-                        document.body.appendChild(this.container);
-                    }
-                    else
-                    {
-                        
-                        if ( document.querySelector(this._domParent) )
-                        {
-                            Kiwi.Log.log(&quot;  Kiwi.Game: Game being created inside &#x27;&quot; + this._domParent + &quot;&#x27;.&quot;, &#x27;#dom&#x27;);
-                            this.container = &lt;HTMLDivElement&gt; document.querySelector(this._domParent);
-                            this._setupContainer(); 
-                        }
-                        else if (document.getElementById(this._domParent))
-                        {
-                            Kiwi.Log.log(&quot;  Kiwi.Game: Game being created inside &#x27;&quot; + this._domParent + &quot;&#x27;.&quot;, &#x27;#dom&#x27;);
-                            this.container = &lt;HTMLDivElement&gt; document.getElementById(this._domParent);
-                            this._setupContainer();
-                        }
-                        else
-                        {
-                            Kiwi.Log.log(&quot;  Kiwi.Game: The element &#x27;&quot; + this._domParent + &quot;&#x27; could not be found. Appending the game to the body.&quot;, &#x27;#dom&#x27;);
-                            this.container = &lt;HTMLDivElement&gt; document.createElement(&#x27;div&#x27;);
-                            this._setupContainer(this._domParent);
-                            document.body.appendChild(this.container);
-                        }
-
-                    }
-                }
-
-                if (this._callback !== null)
-                {
-                    this._callback();
-                }
-            }
-
-        }
-
-        /**
-        * 
-        * @method _setupContainer
-        * @param {String} id
-        * @private
-        */
-        private _setupContainer(id: string = &#x27;&#x27;) {
-
-            if (id) {
-                this.container.id = id;
-            }
-
-            //Set the containers width/height of the default values.
-            //If the user has change the constraints then the Stage will handle the update to the container.
-            this.container.style.width = Kiwi.Stage.DEFAULT_WIDTH + &#x27;px&#x27;;
-            this.container.style.height = Kiwi.Stage.DEFAULT_HEIGHT + &#x27;px&#x27;;
-
-            this.container.style.position = &#x27;relative&#x27;;
-            this.container.style.overflow = &#x27;hidden&#x27;;
-
-        }
-
-    }
+	/**
+	* DOM Boot and Ready functions (based on those used by jQuery)
+	* 
+	* @class Bootstrap
+	* @namespace Kiwi.System
+	*
+	*/
+	export class Bootstrap {
+
+		/**
+		*
+		* @property _callback
+		* @type Any
+		* @private
+		*/
+		private _callback;
+
+		/**
+		*
+		* @property _domParent
+		* @type String
+		* @private
+		*/
+		private _domParent: string;
+
+		/**
+		*
+		* @property _createContainer
+		* @type boolean
+		* @private
+		*/
+		private _createContainer: boolean;
+
+		/**
+		*
+		* @property isReady
+		* @type boolean
+		* @public
+		*/
+		public isReady: boolean = false;
+		
+		/**
+		* The parent div in which the layers and input live
+		* @property container
+		* @type HTMLDivElement
+		* @public
+		*/
+		public container:HTMLDivElement = null;
+
+		/**
+		* This div sits on-top of all layers and captures user input
+		* @property input
+		* @type HTMLDivElement
+		* @public
+		*/
+
+		public input: HTMLDivElement = null;
+
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} &quot;Bootstrap&quot;
+		* @public
+		*/
+		public objType() {
+			return &quot;Bootstrap&quot;;
+		}
+
+		/**
+		* Called at the start of the game to check to see if the DOM is ready before we do anything requiring it
+		* @method boot
+		* @param {String} domParent 
+		* @param {Any} [callback=null]
+		* @param {boolean} [createContainer=true]
+		* @public
+		*/
+		public boot(domParent: string, callback: any = null, createContainer: boolean = true) {
+
+			this._callback = callback;
+			this._domParent = domParent;
+			// if this is true a div will be created in browser
+			this._createContainer = createContainer;
+
+			// wait until DOM is loaded and call ready
+			if (document.readyState === &#x27;complete&#x27; || document.readyState === &#x27;interactive&#x27;)
+			{
+				this.ready();
+			}
+			else
+			{
+				document.addEventListener(&#x27;DOMContentLoaded&#x27;, () =&gt; this.ready(), false);
+				window.addEventListener(&#x27;load&#x27;, () =&gt; this.ready(), false);
+			}
+
+		}
+
+		/**
+		* If the DOM is ready it fires our callback, otherwise sets a short timeout to try again
+		* @method ready
+		* @public
+		*/
+		public ready() {
+
+			if (this.isReady === true)
+			{
+				return;
+			}
+
+			if (!document.body)
+			{
+				window.setTimeout(() =&gt; this.ready(), 13);
+			}
+			else
+			{
+				//document.removeEventListener(&#x27;DOMContentLoaded&#x27;, () =&gt; this.ready(), false);
+
+				this.isReady = true;
+
+
+				if (this._createContainer === true)
+				{
+					//  No domParent was given so we create our own container for the game with a unique ID
+					if (this._domParent === &#x27;&#x27;)
+					{
+						Kiwi.Log.log(&#x27;  Kiwi.Game: No DOM parent specified. Appending the game to the body.&#x27;, &#x27;#dom&#x27;);
+						this.container = &lt;HTMLDivElement&gt; document.createElement(&#x27;div&#x27;);
+						this._setupContainer( &#x27;KiwiGame&#x27; + Date.now().toString() );
+						document.body.appendChild(this.container);
+					}
+					else
+					{
+						
+						if ( document.querySelector(this._domParent) )
+						{
+							Kiwi.Log.log(&quot;  Kiwi.Game: Game being created inside &#x27;&quot; + this._domParent + &quot;&#x27;.&quot;, &#x27;#dom&#x27;);
+							this.container = &lt;HTMLDivElement&gt; document.querySelector(this._domParent);
+							this._setupContainer(); 
+						}
+						else if (document.getElementById(this._domParent))
+						{
+							Kiwi.Log.log(&quot;  Kiwi.Game: Game being created inside &#x27;&quot; + this._domParent + &quot;&#x27;.&quot;, &#x27;#dom&#x27;);
+							this.container = &lt;HTMLDivElement&gt; document.getElementById(this._domParent);
+							this._setupContainer();
+						}
+						else
+						{
+							Kiwi.Log.log(&quot;  Kiwi.Game: The element &#x27;&quot; + this._domParent + &quot;&#x27; could not be found. Appending the game to the body.&quot;, &#x27;#dom&#x27;);
+							this.container = &lt;HTMLDivElement&gt; document.createElement(&#x27;div&#x27;);
+							this._setupContainer(this._domParent);
+							document.body.appendChild(this.container);
+						}
+
+					}
+				}
+
+				if (this._callback !== null)
+				{
+					this._callback();
+				}
+			}
+
+		}
+
+		/**
+		* 
+		* @method _setupContainer
+		* @param {String} id
+		* @private
+		*/
+		private _setupContainer(id: string = &#x27;&#x27;) {
+
+			if (id) {
+				this.container.id = id;
+			}
+
+			//Set the containers width/height of the default values.
+			//If the user has change the constraints then the Stage will handle the update to the container.
+			this.container.style.width = Kiwi.Stage.DEFAULT_WIDTH + &#x27;px&#x27;;
+			this.container.style.height = Kiwi.Stage.DEFAULT_HEIGHT + &#x27;px&#x27;;
+
+			this.container.style.position = &#x27;relative&#x27;;
+			this.container.style.overflow = &#x27;hidden&#x27;;
+
+		}
+
+	}
 
 }
+
     </pre>
 </div>
 
diff --git a/docs/files/src_system_Device.ts.html b/docs/files/src_system_Device.ts.html
index 4db38d7..013e6f9 100644
--- a/docs/files/src_system_Device.ts.html
+++ b/docs/files/src_system_Device.ts.html
@@ -368,629 +368,630 @@ <h1 class="file-heading">File: src/system/Device.ts</h1>
 * Kiwi - System
 * @module Kiwi
 * @submodule System
-*/ 
+*/
 
 module Kiwi.System {
 
-    /**
-    * Detects device support capabilities. Using some elements from System.js by MrDoob and Modernizr
-    * https://github.com/Modernizr/Modernizr/blob/master/feature-detects/audio.js
-    *
-    * @class Device
-    * @constructor
-    * @namespace Kiwi.System 
-    *
-    * @author mrdoob
-    * @author Modernizr team
-    * 
-    */
-    export class Device {
-         
-        constructor() {
-
-            this._checkAudio();
-            this._checkBrowser();
-            this._checkDevice();
-            this._checkFeatures();
-            this._checkOS();
-
-        }
-
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} &quot;Device&quot;
-        * @public
-        */
-        public objType() {
-            return &quot;Device&quot;;
-        }
-
-        //  Operating System
-
-        /**
-        * 
-        * @property iOS 
-        * @type boolean
-        * @public
-        */
-        public iOS: boolean = false;
-
-        /**
-        * 
-        * @property android
-        * @type boolean
-        * @public
-        */
-        public android: boolean = false;
-
-        /**
-        * 
-        * @property chromeOS
-        * @type boolean
-        * @public
-        */
-        public chromeOS: boolean = false;
-
-        /**
-        * 
-        * @property linux
-        * @type boolean
-        * @public
-        */
-        public linux: boolean = false;
-
-        /**
-        * 
-        * @property maxOS
-        * @type boolean
-        * @public
-        */
-        public macOS: boolean = false;
-
-        /**
-        * 
-        * @property windows
-        * @type boolean
-        * @public
-        */
-        public windows: boolean = false;
-
-        /**
-        * 
-        * @property windowsPhone 
-        * @type boolean
-        * @public
-        */
-        public windowsPhone: boolean = false;
-
-        //  Features
-
-        /**
-        * 
-        * @property canvas
-        * @type boolean
-        * @public
-        */
-        public canvas: boolean = false;
-
-        /**
-        * 
-        * @property file
-        * @type boolean
-        * @public
-        */
-        public file: boolean = false;
-
-        /**
-        * 
-        * @property fileSystem
-        * @type boolean
-        * @public
-        */
-        public fileSystem: boolean = false;
-
-        /**
-        * 
-        * @property localStorage
-        * @type boolean
-        * @public
-        */
-        public localStorage: boolean = false;
-
-        /**
-        * 
-        * @property webGL
-        * @type boolean
-        * @public
-        */
-        public webGL: boolean = false;
-
-        /**
-        * 
-        * @property worker
-        * @type boolean
-        * @public
-        */
-        public worker: boolean = false;
-
-        /**
-        * 
-        * @property blob
-        * @type boolean
-        * @public
-        */
-        public blob: boolean = false;
-
-
-        /**
-        * 
-        * @property touch
-        * @type boolean
-        * @public
-        */
-        public touch: boolean = false;
-
-        /**
-        * If the type of touch events are pointers (event msPointers)
-        * @property pointerEnabled
-        * @type boolean
-        * @public
-        */
-        public pointerEnabled: boolean = false;
-
-       
-        //  Browser
-
-        /**
-        * 
-        * @property arora
-        * @type boolean
-        * @public
-        */
-        public arora: boolean = false;
-
-        /**
-        * 
-        * @property chrome
-        * @type boolean
-        * @public
-        */
-        public chrome: boolean = false;
-
-        /**
-        * 
-        * @property epiphany
-        * @type boolean
-        * @public
-        */
-        public epiphany: boolean = false;
-
-        /**
-        * 
-        * @property firefox
-        * @type boolean
-        * @public
-        */
-        public firefox: boolean = false;
-
-        /**
-        * 
-        * @property ie
-        * @type boolean
-        * @public
-        */
-        public ie: boolean = false;
-
-        /**
-        * 
-        * @property ieVersion
-        * @type Number
-        * @public
-        */
-        public ieVersion: number = 0;
-
-        /**
-        *
-        * @property ieMobile
-        * @type boolean
-        * @public 
-        */
-        public ieMobile: boolean = false;
-
-        /**
-        * 
-        * @property mobileSafari
-        * @type boolean
-        * @public
-        */
-        public mobileSafari: boolean = false;
-
-        /**
-        * 
-        * @property midori
-        * @type boolean
-        * @public
-        */
-        public midori: boolean = false;
-
-        /**
-        * 
-        * @property opera
-        * @type boolean
-        * @public
-        */
-        public opera: boolean = false;
-
-        /**
-        * 
-        * @property safari
-        * @type boolean 
-        * @public
-        */
-        public safari: boolean = false;
-
-        /**
-        *
-        * @property webApp
-        * @type boolean
-        * @public
-        */
-        public webApp: boolean = false;
-
-        //  Audio
-
-        /**
-        * 
-        * @property audioData
-        * @type boolean
-        * @public
-        */
-        public audioData: boolean = false;
-
-        /**
-        * 
-        * @property webaudio
-        * @type boolean
-        * @public
-        */
-        public webaudio: boolean = false;
-
-        /**
-        * 
-        * @property ogg
-        * @type boolean
-        * @public
-        */
-        public ogg: boolean = false;
-
-        /**
-        * 
-        * @property mp3
-        * @type boolean
-        * @public
-        */
-        public mp3: boolean = false;
-
-        /**
-        * 
-        * @property wav
-        * @type boolean
-        * @public
-        */
-        public wav: boolean = false;
-
-        /**
-        * 
-        * @property m4a
-        * @type boolean
-        * @public
-        */
-        public m4a: boolean = false;
-
-        //  Device
-
-        /**
-        * 
-        * @property iPhone
-        * @type boolean
-        * @public
-        */
-        public iPhone: boolean = false;
-
-        /**
-        * 
-        * @property iPhone4
-        * @type boolean
-        * @public
-        */
-        public iPhone4: boolean = false;
-
-        /**
-        * 
-        * @property iPad
-        * @type boolean
-        * @public
-        */
-        public iPad: boolean = false;
-
-        /**
-        * 
-        * @property pixelRatio
-        * @type Number
-        * @public
-        */
-        public pixelRatio: number = 0;
-
-        /**
-        * 
-        * @method _checkOS
-        * @private
-        */
-        private _checkOS() {
-
-            var ua = navigator.userAgent;
-
-            if (/Android/.test(ua))
-            {
-                this.android = true;
-            }
-            else if (/CrOS/.test(ua))
-            {
-                this.chromeOS = true;
-            }
-            else if (/iP[ao]d|iPhone/i.test(ua))
-            {
-                this.iOS = true;
-            }
-            else if (/Linux/.test(ua))
-            {
-                this.linux = true;
-            }
-            else if (/Mac OS/.test(ua))
-            {
-                this.macOS = true;
-            }
-            else if(/Windows Phone/.test(ua)) {
-                this.windowsPhone = true;
-            }
-            else if (/Windows/.test(ua))
-            {
-                this.windows = true;
-
-            }
-
-        }
-
-        /**
-        * 
-        * @method _checkFeatures
-        * @private
-        */
-        private _checkFeatures() {
-
-            if (typeof window[&#x27;Blob&#x27;] !== &#x27;undefined&#x27;) this.blob = true;
-
-            // Check availability of rendering contexts
-            this.canvas = !!window[&#x27;CanvasRenderingContext2D&#x27;];
-            this.webGL = !!window[&#x27;WebGLRenderingContext&#x27;];
-
-            try
-            {
-                this.localStorage = !!localStorage.getItem;
-            }
-            catch (error)
-            {
-                this.localStorage = false; 
-            }
-
-            this.file = !!window[&#x27;File&#x27;] &amp;&amp; !!window[&#x27;FileReader&#x27;] &amp;&amp; !!window[&#x27;FileList&#x27;] &amp;&amp; !!window[&#x27;Blob&#x27;];
-            this.fileSystem = !!window[&#x27;requestFileSystem&#x27;];
-            this.worker = !!window[&#x27;Worker&#x27;];
-
-            if (&#x27;ontouchstart&#x27; in document.documentElement ||
-               (window.navigator.msPointerEnabled &amp;&amp; window.navigator.msMaxTouchPoints &gt; 0) ||
-               ((&lt;any&gt;window.navigator).pointerEnabled &amp;&amp; (&lt;any&gt;window.navigator).maxTouchPoints &gt; 0))
-            {
-                this.touch = true;
-
-            }
-
-            if ((&lt;any&gt;window.navigator).pointerEnabled || window.navigator.msPointerEnabled ) {
-                this.pointerEnabled = true;
-            }
-
-        }
-
-        /**
-        * 
-        * @method _checkBrowser
-        * @private
-        */
-        private _checkBrowser() {
-
-            var ua = navigator.userAgent;
-            var an = navigator.appName;
-
-            if (/Arora/.test(ua))
-            {
-                this.arora = true;
-            }
-            else if (/Chrome/.test(ua))
-            {
-                this.chrome = true;
-            }
-            else if (/Epiphany/.test(ua))
-            {
-                this.epiphany = true;
-            }
-            else if (/Firefox/.test(ua))
-            {
-                this.firefox = true;
-            }
-            else if (/Mobile Safari/.test(ua))
-            {
-                this.mobileSafari = true;
-            }
-            else if (/MSIE (\d+\.\d+);/.test(ua)) //Will Detect 10- versions of IE
-            {
-                this.ie = true;
-                this.ieVersion = parseInt(RegExp.$1);
-
-                if ( /IEMobile/.test(ua) ) {
-                    this.ieMobile = true;
-                }
-
-            }
-            else if (/Trident/.test(ua))        //Will Detect 11+ versions for IE
-            {
-                this.ie = true;
-                /rv:(\d+\.\d+)\)/.test(ua);
-                this.ieVersion = parseInt(RegExp.$1);
-            }
-            else if (/Midori/.test(ua))
-            {
-                this.midori = true;
-            }
-            else if (/Opera/.test(ua))
-            {
-                this.opera = true;
-            }
-            else if (/Safari/.test(ua))
-            {
-                this.safari = true;
-            }
+	/**
+	* Detects device support capabilities. Using some elements from System.js by MrDoob and Modernizr
+	* https://github.com/Modernizr/Modernizr/blob/master/feature-detects/audio.js
+	*
+	* @class Device
+	* @constructor
+	* @namespace Kiwi.System 
+	*
+	* @author mrdoob
+	* @author Modernizr team
+	* 
+	*/
+	export class Device {
+
+		constructor() {
+
+			this._checkAudio();
+			this._checkBrowser();
+			this._checkDevice();
+			this._checkFeatures();
+			this._checkOS();
+
+		}
+
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} &quot;Device&quot;
+		* @public
+		*/
+		public objType() {
+			return &quot;Device&quot;;
+		}
+
+		//  Operating System
+
+		/**
+		* 
+		* @property iOS 
+		* @type boolean
+		* @public
+		*/
+		public iOS: boolean = false;
+
+		/**
+		* 
+		* @property android
+		* @type boolean
+		* @public
+		*/
+		public android: boolean = false;
+
+		/**
+		* 
+		* @property chromeOS
+		* @type boolean
+		* @public
+		*/
+		public chromeOS: boolean = false;
+
+		/**
+		* 
+		* @property linux
+		* @type boolean
+		* @public
+		*/
+		public linux: boolean = false;
+
+		/**
+		* 
+		* @property maxOS
+		* @type boolean
+		* @public
+		*/
+		public macOS: boolean = false;
+
+		/**
+		* 
+		* @property windows
+		* @type boolean
+		* @public
+		*/
+		public windows: boolean = false;
+
+		/**
+		* 
+		* @property windowsPhone 
+		* @type boolean
+		* @public
+		*/
+		public windowsPhone: boolean = false;
+
+		//  Features
+
+		/**
+		* 
+		* @property canvas
+		* @type boolean
+		* @public
+		*/
+		public canvas: boolean = false;
+
+		/**
+		* 
+		* @property file
+		* @type boolean
+		* @public
+		*/
+		public file: boolean = false;
+
+		/**
+		* 
+		* @property fileSystem
+		* @type boolean
+		* @public
+		*/
+		public fileSystem: boolean = false;
+
+		/**
+		* 
+		* @property localStorage
+		* @type boolean
+		* @public
+		*/
+		public localStorage: boolean = false;
+
+		/**
+		* 
+		* @property webGL
+		* @type boolean
+		* @public
+		*/
+		public webGL: boolean = false;
+
+		/**
+		* 
+		* @property worker
+		* @type boolean
+		* @public
+		*/
+		public worker: boolean = false;
+
+		/**
+		* 
+		* @property blob
+		* @type boolean
+		* @public
+		*/
+		public blob: boolean = false;
+
+
+		/**
+		* 
+		* @property touch
+		* @type boolean
+		* @public
+		*/
+		public touch: boolean = false;
+
+		/**
+		* If the type of touch events are pointers (event msPointers)
+		* @property pointerEnabled
+		* @type boolean
+		* @public
+		*/
+		public pointerEnabled: boolean = false;
+
+	   
+		//  Browser
+
+		/**
+		* 
+		* @property arora
+		* @type boolean
+		* @public
+		*/
+		public arora: boolean = false;
+
+		/**
+		* 
+		* @property chrome
+		* @type boolean
+		* @public
+		*/
+		public chrome: boolean = false;
+
+		/**
+		* 
+		* @property epiphany
+		* @type boolean
+		* @public
+		*/
+		public epiphany: boolean = false;
+
+		/**
+		* 
+		* @property firefox
+		* @type boolean
+		* @public
+		*/
+		public firefox: boolean = false;
+
+		/**
+		* 
+		* @property ie
+		* @type boolean
+		* @public
+		*/
+		public ie: boolean = false;
+
+		/**
+		* 
+		* @property ieVersion
+		* @type Number
+		* @public
+		*/
+		public ieVersion: number = 0;
+
+		/**
+		*
+		* @property ieMobile
+		* @type boolean
+		* @public 
+		*/
+		public ieMobile: boolean = false;
+
+		/**
+		* 
+		* @property mobileSafari
+		* @type boolean
+		* @public
+		*/
+		public mobileSafari: boolean = false;
+
+		/**
+		* 
+		* @property midori
+		* @type boolean
+		* @public
+		*/
+		public midori: boolean = false;
+
+		/**
+		* 
+		* @property opera
+		* @type boolean
+		* @public
+		*/
+		public opera: boolean = false;
+
+		/**
+		* 
+		* @property safari
+		* @type boolean 
+		* @public
+		*/
+		public safari: boolean = false;
+
+		/**
+		*
+		* @property webApp
+		* @type boolean
+		* @public
+		*/
+		public webApp: boolean = false;
+
+		//  Audio
+
+		/**
+		* 
+		* @property audioData
+		* @type boolean
+		* @public
+		*/
+		public audioData: boolean = false;
+
+		/**
+		* 
+		* @property webaudio
+		* @type boolean
+		* @public
+		*/
+		public webaudio: boolean = false;
+
+		/**
+		* 
+		* @property ogg
+		* @type boolean
+		* @public
+		*/
+		public ogg: boolean = false;
+
+		/**
+		* 
+		* @property mp3
+		* @type boolean
+		* @public
+		*/
+		public mp3: boolean = false;
+
+		/**
+		* 
+		* @property wav
+		* @type boolean
+		* @public
+		*/
+		public wav: boolean = false;
+
+		/**
+		* 
+		* @property m4a
+		* @type boolean
+		* @public
+		*/
+		public m4a: boolean = false;
+
+		//  Device
+
+		/**
+		* 
+		* @property iPhone
+		* @type boolean
+		* @public
+		*/
+		public iPhone: boolean = false;
+
+		/**
+		* 
+		* @property iPhone4
+		* @type boolean
+		* @public
+		*/
+		public iPhone4: boolean = false;
+
+		/**
+		* 
+		* @property iPad
+		* @type boolean
+		* @public
+		*/
+		public iPad: boolean = false;
+
+		/**
+		* 
+		* @property pixelRatio
+		* @type Number
+		* @public
+		*/
+		public pixelRatio: number = 0;
+
+		/**
+		* 
+		* @method _checkOS
+		* @private
+		*/
+		private _checkOS() {
+
+			var ua = navigator.userAgent;
+
+			if (/Android/.test(ua))
+			{
+				this.android = true;
+			}
+			else if (/CrOS/.test(ua))
+			{
+				this.chromeOS = true;
+			}
+			else if (/iP[ao]d|iPhone/i.test(ua))
+			{
+				this.iOS = true;
+			}
+			else if (/Linux/.test(ua))
+			{
+				this.linux = true;
+			}
+			else if (/Mac OS/.test(ua))
+			{
+				this.macOS = true;
+			}
+			else if(/Windows Phone/.test(ua)) {
+				this.windowsPhone = true;
+			}
+			else if (/Windows/.test(ua))
+			{
+				this.windows = true;
+
+			}
+
+		}
+
+		/**
+		* 
+		* @method _checkFeatures
+		* @private
+		*/
+		private _checkFeatures() {
+
+			if (typeof window[&#x27;Blob&#x27;] !== &#x27;undefined&#x27;) this.blob = true;
+
+			// Check availability of rendering contexts
+			this.canvas = !!window[&#x27;CanvasRenderingContext2D&#x27;];
+			this.webGL = !!window[&#x27;WebGLRenderingContext&#x27;];
+
+			try
+			{
+				this.localStorage = !!localStorage.getItem;
+			}
+			catch (error)
+			{
+				this.localStorage = false; 
+			}
+
+			this.file = !!window[&#x27;File&#x27;] &amp;&amp; !!window[&#x27;FileReader&#x27;] &amp;&amp; !!window[&#x27;FileList&#x27;] &amp;&amp; !!window[&#x27;Blob&#x27;];
+			this.fileSystem = !!window[&#x27;requestFileSystem&#x27;];
+			this.worker = !!window[&#x27;Worker&#x27;];
+
+			if (&#x27;ontouchstart&#x27; in document.documentElement ||
+			   (window.navigator.msPointerEnabled &amp;&amp; window.navigator.msMaxTouchPoints &gt; 0) ||
+			   ((&lt;any&gt;window.navigator).pointerEnabled &amp;&amp; (&lt;any&gt;window.navigator).maxTouchPoints &gt; 0))
+			{
+				this.touch = true;
+
+			}
+
+			if ((&lt;any&gt;window.navigator).pointerEnabled || window.navigator.msPointerEnabled ) {
+				this.pointerEnabled = true;
+			}
+
+		}
+
+		/**
+		* 
+		* @method _checkBrowser
+		* @private
+		*/
+		private _checkBrowser() {
+
+			var ua = navigator.userAgent;
+			var an = navigator.appName;
+
+			if (/Arora/.test(ua))
+			{
+				this.arora = true;
+			}
+			else if (/Chrome/.test(ua))
+			{
+				this.chrome = true;
+			}
+			else if (/Epiphany/.test(ua))
+			{
+				this.epiphany = true;
+			}
+			else if (/Firefox/.test(ua))
+			{
+				this.firefox = true;
+			}
+			else if (/Mobile Safari/.test(ua))
+			{
+				this.mobileSafari = true;
+			}
+			else if (/MSIE (\d+\.\d+);/.test(ua)) //Will Detect 10- versions of IE
+			{
+				this.ie = true;
+				this.ieVersion = parseInt(RegExp.$1);
+
+				if ( /IEMobile/.test(ua) ) {
+					this.ieMobile = true;
+				}
+
+			}
+			else if (/Trident/.test(ua))        //Will Detect 11+ versions for IE
+			{
+				this.ie = true;
+				/rv:(\d+\.\d+)\)/.test(ua);
+				this.ieVersion = parseInt(RegExp.$1);
+			}
+			else if (/Midori/.test(ua))
+			{
+				this.midori = true;
+			}
+			else if (/Opera/.test(ua))
+			{
+				this.opera = true;
+			}
+			else if (/Safari/.test(ua))
+			{
+				this.safari = true;
+			}
 
 			// WebApp mode in iOS
-            if (navigator[&#x27;standalone&#x27;])
-            {
-                this.webApp = true;
-            }
-
-        }
-
-        /**
-        * 
-        * @method _checkAudio
-        * @private
-        */
-        private _checkAudio() {
-
-            this.audioData = !!(window[&#x27;Audio&#x27;]);
-            this.webaudio = !!(window[&#x27;webkitAudioContext&#x27;] || window[&#x27;AudioContext&#x27;]);
-
-            var audioElement:HTMLAudioElement = &lt;HTMLAudioElement&gt; document.createElement(&#x27;audio&#x27;);
-            var result = false;
-
-            try
-            {
-                if (result = !!audioElement.canPlayType)
-                {
-                    if (audioElement.canPlayType(&#x27;audio/ogg; codecs=&quot;vorbis&quot;&#x27;).replace(/^no$/, &#x27;&#x27;))
-                    {
-                        this.ogg = true;
-                    }
-
-                    if (audioElement.canPlayType(&#x27;audio/mpeg;&#x27;).replace(/^no$/, &#x27;&#x27;))
-                    {
-                        this.mp3 = true;
-                    }
-
-                    // Mimetypes accepted:
-                    //   developer.mozilla.org/En/Media_formats_supported_by_the_audio_and_video_elements
-                    //   bit.ly/iphoneoscodecs
-                    if (audioElement.canPlayType(&#x27;audio/wav; codecs=&quot;1&quot;&#x27;).replace(/^no$/, &#x27;&#x27;))
-                    {
-                        this.wav = true;
-                    }
-
-                    if (audioElement.canPlayType(&#x27;audio/x-m4a;&#x27;) || audioElement.canPlayType(&#x27;audio/aac;&#x27;).replace(/^no$/, &#x27;&#x27;))
-                    {
-                        this.m4a = true;
-                    }
-                }
-            } catch (e) { }
-
-        }
-
-        /**
-        * 
-        * @method _checkDevice
-        * @private
-        */
-        private _checkDevice() {
-
-            this.pixelRatio = window[&#x27;devicePixelRatio&#x27;] || 1;
-            this.iPhone = navigator.userAgent.toLowerCase().indexOf(&#x27;iphone&#x27;) != -1;
-            this.iPhone4 = (this.pixelRatio == 2 &amp;&amp; this.iPhone);
-            this.iPad = navigator.userAgent.toLowerCase().indexOf(&#x27;ipad&#x27;) != -1;
-
-        }
-
-      
-        /**
-        * 
-        * @method getAll
-        * @return {String}
-        * @public
-        */
-        public getAll(): string {
-
-            var output: string = &#x27;&#x27;;
-
-            output = output.concat(&#x27;Device\n&#x27;);
-            output = output.concat(&#x27;iPhone : &#x27; + this.iPhone + &#x27;\n&#x27;);
-            output = output.concat(&#x27;iPhone4 : &#x27; + this.iPhone4 + &#x27;\n&#x27;);
-            output = output.concat(&#x27;iPad : &#x27; + this.iPad + &#x27;\n&#x27;);
-
-            output = output.concat(&#x27;\n&#x27;);
-            output = output.concat(&#x27;Operating System\n&#x27;);
-            output = output.concat(&#x27;iOS: &#x27; + this.iOS + &#x27;\n&#x27;);
-            output = output.concat(&#x27;Android: &#x27; + this.android + &#x27;\n&#x27;);
-            output = output.concat(&#x27;ChromeOS: &#x27; + this.chromeOS + &#x27;\n&#x27;);
-            output = output.concat(&#x27;Linux: &#x27; + this.linux + &#x27;\n&#x27;);
-            output = output.concat(&#x27;MacOS: &#x27; + this.macOS + &#x27;\n&#x27;);
-            output = output.concat(&#x27;Windows: &#x27; + this.windows + &#x27;\n&#x27;);
-
-            output = output.concat(&#x27;\n&#x27;);
-            output = output.concat(&#x27;Browser\n&#x27;);
-            output = output.concat(&#x27;Arora: &#x27; + this.arora + &#x27;\n&#x27;);
-            output = output.concat(&#x27;Chrome: &#x27; + this.chrome + &#x27;\n&#x27;);
-            output = output.concat(&#x27;Epiphany: &#x27; + this.epiphany + &#x27;\n&#x27;);
-            output = output.concat(&#x27;Firefox: &#x27; + this.firefox + &#x27;\n&#x27;);
-            output = output.concat(&#x27;Internet Explorer: &#x27; + this.ie + &#x27; (&#x27; + this.ieVersion + &#x27;)\n&#x27;);
-            output = output.concat(&#x27;Mobile Safari: &#x27; + this.mobileSafari + &#x27;\n&#x27;);
-            output = output.concat(&#x27;Midori: &#x27; + this.midori + &#x27;\n&#x27;);
-            output = output.concat(&#x27;Opera: &#x27; + this.opera + &#x27;\n&#x27;);
-            output = output.concat(&#x27;Safari: &#x27; + this.safari + &#x27;\n&#x27;);
-
-            output = output.concat(&#x27;\n&#x27;);
-            output = output.concat(&#x27;Features\n&#x27;);
-            output = output.concat(&#x27;Blob: &#x27; + this.blob + &#x27;\n&#x27;);
-            output = output.concat(&#x27;Canvas: &#x27; + this.canvas + &#x27;\n&#x27;);
-            output = output.concat(&#x27;File: &#x27; + this.file + &#x27;\n&#x27;);
-            output = output.concat(&#x27;FileSystem: &#x27; + this.fileSystem + &#x27;\n&#x27;);
-            output = output.concat(&#x27;LocalStorage: &#x27; + this.localStorage + &#x27;\n&#x27;);
-            output = output.concat(&#x27;WebGL: &#x27; + this.webGL + &#x27;\n&#x27;);
-            output = output.concat(&#x27;Worker: &#x27; + this.worker + &#x27;\n&#x27;);
-            output = output.concat(&#x27;Touch: &#x27; + this.touch + &#x27;\n&#x27;);
-           
-            output = output.concat(&#x27;\n&#x27;);
-            output = output.concat(&#x27;Audio\n&#x27;);
-            output = output.concat(&#x27;Audio Data: &#x27; + this.canvas + &#x27;\n&#x27;);
-            output = output.concat(&#x27;Web Audio: &#x27; + this.canvas + &#x27;\n&#x27;);
-            output = output.concat(&#x27;Can play OGG: &#x27; + this.canvas + &#x27;\n&#x27;);
-            output = output.concat(&#x27;Can play MP3: &#x27; + this.canvas + &#x27;\n&#x27;);
-            output = output.concat(&#x27;Can play M4A: &#x27; + this.canvas + &#x27;\n&#x27;);
-            output = output.concat(&#x27;Can play WAV: &#x27; + this.canvas + &#x27;\n&#x27;);
-
-            return output;
-
-        }
-
-    }
+			if (navigator[&#x27;standalone&#x27;])
+			{
+				this.webApp = true;
+			}
+
+		}
+
+		/**
+		* 
+		* @method _checkAudio
+		* @private
+		*/
+		private _checkAudio() {
+
+			this.audioData = !!(window[&#x27;Audio&#x27;]);
+			this.webaudio = !!(window[&#x27;webkitAudioContext&#x27;] || window[&#x27;AudioContext&#x27;]);
+
+			var audioElement:HTMLAudioElement = &lt;HTMLAudioElement&gt; document.createElement(&#x27;audio&#x27;);
+			var result = false;
+
+			try
+			{
+				if (result = !!audioElement.canPlayType)
+				{
+					if (audioElement.canPlayType(&#x27;audio/ogg; codecs=&quot;vorbis&quot;&#x27;).replace(/^no$/, &#x27;&#x27;))
+					{
+						this.ogg = true;
+					}
+
+					if (audioElement.canPlayType(&#x27;audio/mpeg;&#x27;).replace(/^no$/, &#x27;&#x27;))
+					{
+						this.mp3 = true;
+					}
+
+					// Mimetypes accepted:
+					//   developer.mozilla.org/En/Media_formats_supported_by_the_audio_and_video_elements
+					//   bit.ly/iphoneoscodecs
+					if (audioElement.canPlayType(&#x27;audio/wav; codecs=&quot;1&quot;&#x27;).replace(/^no$/, &#x27;&#x27;))
+					{
+						this.wav = true;
+					}
+
+					if (audioElement.canPlayType(&#x27;audio/x-m4a;&#x27;) || audioElement.canPlayType(&#x27;audio/aac;&#x27;).replace(/^no$/, &#x27;&#x27;))
+					{
+						this.m4a = true;
+					}
+				}
+			} catch (e) { }
+
+		}
+
+		/**
+		* 
+		* @method _checkDevice
+		* @private
+		*/
+		private _checkDevice() {
+
+			this.pixelRatio = window[&#x27;devicePixelRatio&#x27;] || 1;
+			this.iPhone = navigator.userAgent.toLowerCase().indexOf(&#x27;iphone&#x27;) != -1;
+			this.iPhone4 = (this.pixelRatio == 2 &amp;&amp; this.iPhone);
+			this.iPad = navigator.userAgent.toLowerCase().indexOf(&#x27;ipad&#x27;) != -1;
+
+		}
+
+	  
+		/**
+		* 
+		* @method getAll
+		* @return {String}
+		* @public
+		*/
+		public getAll(): string {
+
+			var output: string = &#x27;&#x27;;
+
+			output = output.concat(&#x27;Device\n&#x27;);
+			output = output.concat(&#x27;iPhone : &#x27; + this.iPhone + &#x27;\n&#x27;);
+			output = output.concat(&#x27;iPhone4 : &#x27; + this.iPhone4 + &#x27;\n&#x27;);
+			output = output.concat(&#x27;iPad : &#x27; + this.iPad + &#x27;\n&#x27;);
+
+			output = output.concat(&#x27;\n&#x27;);
+			output = output.concat(&#x27;Operating System\n&#x27;);
+			output = output.concat(&#x27;iOS: &#x27; + this.iOS + &#x27;\n&#x27;);
+			output = output.concat(&#x27;Android: &#x27; + this.android + &#x27;\n&#x27;);
+			output = output.concat(&#x27;ChromeOS: &#x27; + this.chromeOS + &#x27;\n&#x27;);
+			output = output.concat(&#x27;Linux: &#x27; + this.linux + &#x27;\n&#x27;);
+			output = output.concat(&#x27;MacOS: &#x27; + this.macOS + &#x27;\n&#x27;);
+			output = output.concat(&#x27;Windows: &#x27; + this.windows + &#x27;\n&#x27;);
+
+			output = output.concat(&#x27;\n&#x27;);
+			output = output.concat(&#x27;Browser\n&#x27;);
+			output = output.concat(&#x27;Arora: &#x27; + this.arora + &#x27;\n&#x27;);
+			output = output.concat(&#x27;Chrome: &#x27; + this.chrome + &#x27;\n&#x27;);
+			output = output.concat(&#x27;Epiphany: &#x27; + this.epiphany + &#x27;\n&#x27;);
+			output = output.concat(&#x27;Firefox: &#x27; + this.firefox + &#x27;\n&#x27;);
+			output = output.concat(&#x27;Internet Explorer: &#x27; + this.ie + &#x27; (&#x27; + this.ieVersion + &#x27;)\n&#x27;);
+			output = output.concat(&#x27;Mobile Safari: &#x27; + this.mobileSafari + &#x27;\n&#x27;);
+			output = output.concat(&#x27;Midori: &#x27; + this.midori + &#x27;\n&#x27;);
+			output = output.concat(&#x27;Opera: &#x27; + this.opera + &#x27;\n&#x27;);
+			output = output.concat(&#x27;Safari: &#x27; + this.safari + &#x27;\n&#x27;);
+
+			output = output.concat(&#x27;\n&#x27;);
+			output = output.concat(&#x27;Features\n&#x27;);
+			output = output.concat(&#x27;Blob: &#x27; + this.blob + &#x27;\n&#x27;);
+			output = output.concat(&#x27;Canvas: &#x27; + this.canvas + &#x27;\n&#x27;);
+			output = output.concat(&#x27;File: &#x27; + this.file + &#x27;\n&#x27;);
+			output = output.concat(&#x27;FileSystem: &#x27; + this.fileSystem + &#x27;\n&#x27;);
+			output = output.concat(&#x27;LocalStorage: &#x27; + this.localStorage + &#x27;\n&#x27;);
+			output = output.concat(&#x27;WebGL: &#x27; + this.webGL + &#x27;\n&#x27;);
+			output = output.concat(&#x27;Worker: &#x27; + this.worker + &#x27;\n&#x27;);
+			output = output.concat(&#x27;Touch: &#x27; + this.touch + &#x27;\n&#x27;);
+		   
+			output = output.concat(&#x27;\n&#x27;);
+			output = output.concat(&#x27;Audio\n&#x27;);
+			output = output.concat(&#x27;Audio Data: &#x27; + this.canvas + &#x27;\n&#x27;);
+			output = output.concat(&#x27;Web Audio: &#x27; + this.canvas + &#x27;\n&#x27;);
+			output = output.concat(&#x27;Can play OGG: &#x27; + this.canvas + &#x27;\n&#x27;);
+			output = output.concat(&#x27;Can play MP3: &#x27; + this.canvas + &#x27;\n&#x27;);
+			output = output.concat(&#x27;Can play M4A: &#x27; + this.canvas + &#x27;\n&#x27;);
+			output = output.concat(&#x27;Can play WAV: &#x27; + this.canvas + &#x27;\n&#x27;);
+
+			return output;
+
+		}
+
+	}
 
 }
+
     </pre>
 </div>
 
diff --git a/docs/files/src_textures_SingleImage.ts.html b/docs/files/src_textures_SingleImage.ts.html
index 2ecfd99..d028ba4 100644
--- a/docs/files/src_textures_SingleImage.ts.html
+++ b/docs/files/src_textures_SingleImage.ts.html
@@ -369,92 +369,91 @@ <h1 class="file-heading">File: src/textures/SingleImage.ts</h1>
 * @module Kiwi
 * @submodule Textures
 * 
-*/ 
+*/
 
 module Kiwi.Textures  {
 
-    /**
-    * A special type of TextureAtlas that is used when the user has loaded a single image. This type of TextureAtlas contains only one cell which is generally the whole width/height of the image and starts at the coordinates 0/0. A SingleImage has a space to store sequences but this will not be used.
-    * 
-    * @class SingleImage
-    * @extends TextureAtlas
-    * @namespace Kiwi.Textures
-    * @constructor
-    * @param name {string} The name of the single image
-    * @param image {HTMLImageElement/HTMLCanvasElement} the image that is being used.
-    * @param [width] {number} the width of the image
-    * @param [height] {number} the height of the image
-    * @param [offsetX] {number} the offset of the image on the x axis. Useful if the image has a border that you don&#x27;t want to show.
-    * @param [offsetY] {number} the offset of the image of the y axis. Useful if the image has a border that you don&#x27;t want to show.
-    * @return {Kiwi.SingleImage}
-    */
-    export class SingleImage extends TextureAtlas {
-         
-        constructor(name: string, image, width?: number, height?: number, offsetX?: number, offsetY?: number) {
-            this.width = width || image.width;
-            this.height = height || image.height;
-            this.offsetX = offsetX || 0;
-            this.offsetY = offsetY || 0;
+	/**
+	* A special type of TextureAtlas that is used when the user has loaded a single image. This type of TextureAtlas contains only one cell which is generally the whole width/height of the image and starts at the coordinates 0/0. A SingleImage has a space to store sequences but this will not be used.
+	* 
+	* @class SingleImage
+	* @extends TextureAtlas
+	* @namespace Kiwi.Textures
+	* @constructor
+	* @param name {string} The name of the single image
+	* @param image {HTMLImageElement/HTMLCanvasElement} the image that is being used.
+	* @param [width] {number} the width of the image
+	* @param [height] {number} the height of the image
+	* @param [offsetX] {number} the offset of the image on the x axis. Useful if the image has a border that you don&#x27;t want to show.
+	* @param [offsetY] {number} the offset of the image of the y axis. Useful if the image has a border that you don&#x27;t want to show.
+	* @return {Kiwi.SingleImage}
+	*/
+	export class SingleImage extends TextureAtlas {
 
-            super(name, Kiwi.Textures.TextureAtlas.SINGLE_IMAGE, this.generateAtlasCells(), image);
-        }
+		constructor(name: string, image, width?: number, height?: number, offsetX?: number, offsetY?: number) {
+			this.width = width || image.width;
+			this.height = height || image.height;
+			this.offsetX = offsetX || 0;
+			this.offsetY = offsetY || 0;
 
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {string} &quot;SingleImage&quot;
-        * @public
-        */
-        public objType(): string {
-            return &quot;SingleImage&quot;;
-        }
+			super(name, Kiwi.Textures.TextureAtlas.SINGLE_IMAGE, this.generateAtlasCells(), image);
+		}
 
-        /**
-        * The width of the image.
-        * @property width
-        * @type number
-        * @private
-        */
-        private width: number;
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {string} &quot;SingleImage&quot;
+		* @public
+		*/
+		public objType(): string {
+			return &quot;SingleImage&quot;;
+		}
 
-        /**
-        * The height of the image.
-        * @property height
-        * @type number
-        * @private
-        */
-        private height: number;
-        
-        /**
-        * The offset for the image on the X axis.
-        * @property offsetX
-        * @type number
-        * @private
-        */
-        private offsetX: number;
-        
-        /**
-        * The offset for the image on the Y axis.
-        * @property offsetY
-        * @type number
-        * @private
-        */
-        private offsetY: number;
+		/**
+		* The width of the image.
+		* @property width
+		* @type number
+		* @private
+		*/
+		private width: number;
 
-        /**
-        * This method generates the single image cell based off the information that was passed during instantion.
-        * @method generateAtlasCells
-        * @returns{ Array }
-        * @public
-        */
-        public generateAtlasCells(): Array&lt;any&gt; {
-            return [{ x: this.offsetX, y: this.offsetY, w: this.width, h: this.height, hitboxes: [{ x: 0, y: 0, w: this.width, h: this.height }] }];
-        }
+		/**
+		* The height of the image.
+		* @property height
+		* @type number
+		* @private
+		*/
+		private height: number;
 
-    }
+		/**
+		* The offset for the image on the X axis.
+		* @property offsetX
+		* @type number
+		* @private
+		*/
+		private offsetX: number;
 
-}
+		/**
+		* The offset for the image on the Y axis.
+		* @property offsetY
+		* @type number
+		* @private
+		*/
+		private offsetY: number;
+
+		/**
+		* This method generates the single image cell based off the information that was passed during instantion.
+		* @method generateAtlasCells
+		* @returns{ Array }
+		* @public
+		*/
+		public generateAtlasCells(): Array&lt;any&gt; {
+			return [{ x: this.offsetX, y: this.offsetY, w: this.width, h: this.height, hitboxes: [{ x: 0, y: 0, w: this.width, h: this.height }] }];
+		}
 
+	}
+
+}
 
     </pre>
 </div>
diff --git a/docs/files/src_textures_SpriteSheet.ts.html b/docs/files/src_textures_SpriteSheet.ts.html
index 36876db..aff13f1 100644
--- a/docs/files/src_textures_SpriteSheet.ts.html
+++ b/docs/files/src_textures_SpriteSheet.ts.html
@@ -369,205 +369,204 @@ <h1 class="file-heading">File: src/textures/SpriteSheet.ts</h1>
 * @module Kiwi
 * @submodule Textures
 *
-*/ 
+*/
 
 module Kiwi.Textures  {
 
-    /**
-    * A special type of TextureAtlas that is created when loading in images that are design to be SpriteSheets. A SpriteSheet will generally contain multiple cells and can also contain sequences which are then automatically added as Animations when this texture is used on a Sprite. 
-    *
-    * @class SpriteSheet
-    * @extends TextureAtlas
-    * @namespace Kiwi.Textures
-    * @constructor
-    * @param name {string} The name of the spritesheet.
-    * @param texture {HTMLImageElement/HTMLCanvasElement} The image that is being used for the spritesheet.
-    * @param cellWidth {number} The width of a single cell.
-    * @param cellHeight {number} The height of a single cell.
-    * @param [numCells] {number} The number of cells in total. 
-    * @param [rows] {number} The number of cells that make up a row.
-    * @param [cols] {number} The number of cells that make up a column.
-    * @param [sheetOffsetX] {number} The offset of the whole sheet on the x axis. Useful if the image has a border you don&#x27;t want to show.
-    * @param [sheetOffsetY] {number} The offset of the whole sheet on the y axis. Useful if the image has a border you don&#x27;t want to show.
-    * @param [cellOffsetX] {number} An offset between cells on the x axis. Useful if there is a border between cells which is not to be shown.
-    * @param [cellOffsetY] {number} An offset between cells on the y axis. Useful if there is a border between cells which is not to be shown.
-    * @return {SpriteSheet} 
-    */
-    export class SpriteSheet extends TextureAtlas {
-         
-        constructor(name: string, texture, cellWidth: number, cellHeight: number, numCells?:number,rows?:number,cols?:number,sheetOffsetX?: number, sheetOffsetY?:number,cellOffsetX?:number,cellOffsetY?:number) {
-            
-            this.cellWidth = cellWidth;
-            this.cellHeight = cellHeight;
-            
-            this._cols = cols || texture.width / cellWidth;
-            this._rows = rows || texture.height / cellHeight;
-            this.numCells = numCells || this.cols * this.rows;
-            
-            this.sheetOffsetX = sheetOffsetX || 0;
-            this.sheetOffsetY = sheetOffsetY || 0;
-
-            this.cellOffsetX = cellOffsetX || 0;
-            this.cellOffsetY = cellOffsetY || 0;
-            
-            super(name, Kiwi.Textures.TextureAtlas.SPRITE_SHEET, this.generateAtlasCells(), texture, this.sequences);
-        }
-
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {string} &quot;SpriteSheet&quot;
-        * @public
-        */
-        public objType(): string {
-            return &quot;SpriteSheet&quot;;
-        }
-        
-        /**
-        * The width of a single cell.
-        * @property cellWidth
-        * @type number
-        * @private
-        */
-        private cellWidth: number;
-        
-        /**
-        * The height of a single cell.
-        * @property cellHeight
-        * @type number
-        * @private
-        */
-        private cellHeight: number;
-        
-        /**
-        * The number of cells that are on this spritesheet
-        * @property numCells
-        * @type number
-        * @private
-        */
-        private numCells: number;
-        
-        /**
-        * The number of rows for the spritesheet
-        * @property rows
-        * @type number
-        * @private
-        */
-        private _rows: number;
-        
-        /**
-        * Get the number of rows.
-        * @type number
-        * @public
-        */
-        public get rows(): number {
-            return this._rows;
-        }
-
-        /**
-        * The number of columns that are on this spritesheet
-        * @property cols
-        * @type number
-        * @private
-        */
-        private _cols: number;
-        
-        /**
-        * Get the number of columns.
-        * @type number
-        * @public
-        */
-        public get cols(): number {
-            return this._cols;
-        }
-
-        /**
-        * How much the whole spritesheet should be offset by on the X axis.
-        * @property sheetOffsetX
-        * @type number
-        * @private
-        */
-        private sheetOffsetX: number;
-        
-        /**
-        * How much the whole spritesheet should be offset by on the Y axis.
-        * @property sheetOffsetY
-        * @type number
-        * @private
-        */
-        private sheetOffsetY: number;
-        
-        /**
-        * How much each cell should be offset by on the X axis.
-        * @property cellOffsetX
-        * @type number
-        * @private
-        */
-        private cellOffsetX: number;
-        
-        /**
-        * How much each cell should be offset by on the Y axis.
-        * @property cellOffsetY
-        * @type number
-        * @private
-        */
-        private cellOffsetY: number;
-        
-        /**
-        * Generates the atlas cells based on the information that was provided. 
-        * 
-        * @method generateAtlasCells
-        * @return {Array}
-        * @public
-        */
-        public generateAtlasCells(): Array&lt;any&gt; {
-
-            var cells = new Array();
-            var cellNumeric: number[] = new Array();
-
-            var dx = this.sheetOffsetX;
-            var dy = this.sheetOffsetY;
-            var i = 0;
-            
-            for (var y = 0; y &lt; this.rows; y++) {
-                for (var x = 0; x &lt; this.cols; x++) {
-
-                    if (i &gt;= this.numCells) continue;
-
-                    cells.push({
-                        x: dx,
-                        y: dy,
-                        w: this.cellWidth,
-                        h: this.cellHeight,
-                        hitboxes: [
-                            {
-                                x: 0,
-                                y: 0,
-                                w: this.cellWidth,
-                                h: this.cellHeight
-                            }
-                        ]
-                    });
-
-                    cellNumeric.push(i++);
-
-                    dx += this.cellOffsetX + this.cellWidth;
-                }
-                dx = this.sheetOffsetX;
-                dy += this.cellOffsetY + this.cellHeight;
-            }
-
-            //generate default sequence
-            this.sequences = new Array();
-            this.sequences.push(new Kiwi.Animations.Sequence(&#x27;default&#x27;, cellNumeric)); 
-
-            return cells;
-        }
-
-    }
+	/**
+	* A special type of TextureAtlas that is created when loading in images that are design to be SpriteSheets. A SpriteSheet will generally contain multiple cells and can also contain sequences which are then automatically added as Animations when this texture is used on a Sprite. 
+	*
+	* @class SpriteSheet
+	* @extends TextureAtlas
+	* @namespace Kiwi.Textures
+	* @constructor
+	* @param name {string} The name of the spritesheet.
+	* @param texture {HTMLImageElement/HTMLCanvasElement} The image that is being used for the spritesheet.
+	* @param cellWidth {number} The width of a single cell.
+	* @param cellHeight {number} The height of a single cell.
+	* @param [numCells] {number} The number of cells in total. 
+	* @param [rows] {number} The number of cells that make up a row.
+	* @param [cols] {number} The number of cells that make up a column.
+	* @param [sheetOffsetX] {number} The offset of the whole sheet on the x axis. Useful if the image has a border you don&#x27;t want to show.
+	* @param [sheetOffsetY] {number} The offset of the whole sheet on the y axis. Useful if the image has a border you don&#x27;t want to show.
+	* @param [cellOffsetX] {number} An offset between cells on the x axis. Useful if there is a border between cells which is not to be shown.
+	* @param [cellOffsetY] {number} An offset between cells on the y axis. Useful if there is a border between cells which is not to be shown.
+	* @return {SpriteSheet} 
+	*/
+	export class SpriteSheet extends TextureAtlas {
 
-}
+		constructor(name: string, texture, cellWidth: number, cellHeight: number, numCells?:number,rows?:number,cols?:number,sheetOffsetX?: number, sheetOffsetY?:number,cellOffsetX?:number,cellOffsetY?:number) {
+			
+			this.cellWidth = cellWidth;
+			this.cellHeight = cellHeight;
+
+			this._cols = cols || texture.width / cellWidth;
+			this._rows = rows || texture.height / cellHeight;
+			this.numCells = numCells || this.cols * this.rows;
+			
+			this.sheetOffsetX = sheetOffsetX || 0;
+			this.sheetOffsetY = sheetOffsetY || 0;
+
+			this.cellOffsetX = cellOffsetX || 0;
+			this.cellOffsetY = cellOffsetY || 0;
+			
+			super(name, Kiwi.Textures.TextureAtlas.SPRITE_SHEET, this.generateAtlasCells(), texture, this.sequences);
+		}
+
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {string} &quot;SpriteSheet&quot;
+		* @public
+		*/
+		public objType(): string {
+			return &quot;SpriteSheet&quot;;
+		}
+
+		/**
+		* The width of a single cell.
+		* @property cellWidth
+		* @type number
+		* @private
+		*/
+		private cellWidth: number;
+
+		/**
+		* The height of a single cell.
+		* @property cellHeight
+		* @type number
+		* @private
+		*/
+		private cellHeight: number;
+
+		/**
+		* The number of cells that are on this spritesheet
+		* @property numCells
+		* @type number
+		* @private
+		*/
+		private numCells: number;
+
+		/**
+		* The number of rows for the spritesheet
+		* @property rows
+		* @type number
+		* @private
+		*/
+		private _rows: number;
+		
+		/**
+		* Get the number of rows.
+		* @type number
+		* @public
+		*/
+		public get rows(): number {
+			return this._rows;
+		}
+
+		/**
+		* The number of columns that are on this spritesheet
+		* @property cols
+		* @type number
+		* @private
+		*/
+		private _cols: number;
+
+		/**
+		* Get the number of columns.
+		* @type number
+		* @public
+		*/
+		public get cols(): number {
+			return this._cols;
+		}
+
+		/**
+		* How much the whole spritesheet should be offset by on the X axis.
+		* @property sheetOffsetX
+		* @type number
+		* @private
+		*/
+		private sheetOffsetX: number;
+
+		/**
+		* How much the whole spritesheet should be offset by on the Y axis.
+		* @property sheetOffsetY
+		* @type number
+		* @private
+		*/
+		private sheetOffsetY: number;
+
+		/**
+		* How much each cell should be offset by on the X axis.
+		* @property cellOffsetX
+		* @type number
+		* @private
+		*/
+		private cellOffsetX: number;
 
+		/**
+		* How much each cell should be offset by on the Y axis.
+		* @property cellOffsetY
+		* @type number
+		* @private
+		*/
+		private cellOffsetY: number;
+
+		/**
+		* Generates the atlas cells based on the information that was provided. 
+		* 
+		* @method generateAtlasCells
+		* @return {Array}
+		* @public
+		*/
+		public generateAtlasCells(): Array&lt;any&gt; {
+
+			var cells = new Array();
+			var cellNumeric: number[] = new Array();
+
+			var dx = this.sheetOffsetX;
+			var dy = this.sheetOffsetY;
+			var i = 0;
+
+			for (var y = 0; y &lt; this.rows; y++) {
+				for (var x = 0; x &lt; this.cols; x++) {
+
+					if (i &gt;= this.numCells) continue;
+
+					cells.push({
+						x: dx,
+						y: dy,
+						w: this.cellWidth,
+						h: this.cellHeight,
+						hitboxes: [
+							{
+								x: 0,
+								y: 0,
+								w: this.cellWidth,
+								h: this.cellHeight
+							}
+						]
+					});
+
+					cellNumeric.push(i++);
+
+					dx += this.cellOffsetX + this.cellWidth;
+				}
+				dx = this.sheetOffsetX;
+				dy += this.cellOffsetY + this.cellHeight;
+			}
+
+			//generate default sequence
+			this.sequences = new Array();
+			this.sequences.push(new Kiwi.Animations.Sequence(&#x27;default&#x27;, cellNumeric)); 
+
+			return cells;
+		}
+
+	}
+
+}
 
     </pre>
 </div>
diff --git a/docs/files/src_textures_TextureAtlas.ts.html b/docs/files/src_textures_TextureAtlas.ts.html
index 03fbe0e..f960bf1 100644
--- a/docs/files/src_textures_TextureAtlas.ts.html
+++ b/docs/files/src_textures_TextureAtlas.ts.html
@@ -369,249 +369,245 @@ <h1 class="file-heading">File: src/textures/TextureAtlas.ts</h1>
 * @module Kiwi
 * @submodule Textures
 *
-*/ 
+*/
 
 module Kiwi.Textures {
 
-    /**
-    * A TextureAtlas is the base class that is created for each image that is loaded through Kiwi. Each TextureAtlas contains a name (the same as the key that the user chose when loading the image in),the HTMLImageElement that it is for and a number of cells.
-    * 
-    * @class TextureAtlas
-    * @namespace Kiwi.Textures
-    * @constructor
-    * @param name {string} Name of the texture atlas. This is usually defined by the developer when loading the assets.
-    * @param type {number} The type of texture atlas that this is. There are currently only three types.
-    * @param cells {any} The cells that are within this image..
-    * @param image {HTMLImageElement/HTMLCanvasElement} The image that the texture atlas is using.
-    * @param [sequences] {Sequence[]} Any sequences of cells for this texture atlas. Used for animation.
-    * @return {Kiwi.TextureAtlas}
-    *
-    */
-    export class TextureAtlas {
-         
-        constructor(name: string, type:number, cells, image, sequences?: Kiwi.Animations.Sequence[]) {
-            this.name = name;
-            this.cells = cells || new Array();
-            this.sequences = sequences || new Array();
-            this.image = image;
-            this._type = type;
-        }
-        
-        /**
-        * The type of object that this texture atlas is.
-        * @method objType
-        * @return {string} &quot;TextureAtlas&quot;
-        * @public
-        */
-        public objType(): string {
-            return &quot;TextureAtlas&quot;;
-        }
-
-        /**
-        * The name of this texture atlas
-        * @property name
-        * @type string
-        * @public
-        */
-        public name: string;
-
-
-        /**
-        * Indicates that the image data has changed, and needs to be reuplaoded to the gpu in webGL mode.
-        * @property dirty
-        * @type boolean
-        * @public
-        */
-        public dirty: boolean = false;
-        
-        /**
-        * The image that this texture atlas is holding. Can be an HTMLImageElement or a HTMLCanvasElement
-        * @property image
-        * @type HTMLImageElement/HTMLCanvasElement
-        * @public
-        */
-        public image;
-        
-        /**
-        * The cells for this image.
-        * @property cells
-        * @type Array
-        * @public
-        */
-        public cells;
-        
-        /**
-        * An array of Sequences that are for this texture.
-        * @property sequences
-        * @type Array
-        * @public
-        */
-        public sequences: Kiwi.Animations.Sequence[];
-
-        /**
-        * The cell that is to be render at the start.
-        * @property cellIndex
-        * @type number
-        * @default 0 
-        * @public
-        */
-        public cellIndex: number = 0;
-        
-        /**
-        * The type of texture atlas that this is. This only ever is given a value when the object is instantated. 
-        * @property _type
-        * @type number
-        * @private
-        */
-        private _type: number;
-        
-        /**
-        * The number that defines a single image type of texture atlas
-        * @property SINGLE_IMAGE
-        * @static
-        * @default 0
-        * @type number
-        * @final
-        * @public
-        */
-        public static SINGLE_IMAGE: number = 0;
-    
-        /**
-        * The number that defines a spritesheet type of texture atlas
-        * @property SPRITE_SHEET
-        * @static
-        * @default 1
-        * @type number
-        * @final
-        * @public
-        */
-        public static SPRITE_SHEET: number = 1;
-
-        /**
-        * The number that defines a normal texture atlas
-        * @property TEXTURE_ATLAS
-        * @static
-        * @default 2
-        * @type number
-        * @final
-        * @public
-        */
-        public static TEXTURE_ATLAS: number = 2;
-
-        /**
-        * Will return to you this type of texture atlas. This is READ ONLY.
-        * @type number
-        * @public
-        */
-        public get type(): number {
-            return this._type;
-        }
-        
-
-        public glTextureWrapper: Kiwi.Renderers.GLTextureWrapper;
-
-        /**
-        * Creates a GLTextureWrapper to allow the atlas to communicate efficiently with the video card. This is mostly an internal method.
-        *
-        * If you are extending TextureAtlas to incorporate multiple textures, you will need to override this method.
-        * @method createGLTextureWrapper
-        * @param gl {WebGLRenderingContext} The rendering context.
-        * @param textureManager {Kiwi.Renderers.GLTextureManager} The texture manager.
-        * @public
-        * @since 1.1.0
-        */
-        public createGLTextureWrapper( gl: WebGLRenderingContext, textureManager: Kiwi.Renderers.GLTextureManager ) {
-            // Create a default texture wrapper
-            this.glTextureWrapper = new Kiwi.Renderers.GLTextureWrapper(gl, this);
-            // If this were a multi-texture atlas, we would reassign wrapper values here
-
-            // Register wrapper/s to texture manager
-            textureManager.registerTextureWrapper( gl, this.glTextureWrapper );
-        }
-
-
-        /**
-        * Sends the texture to the video card.
-        * @method enableGL
-        * @param gl {WebGLRenderingContext}
-        * @param renderer {Renderer}
-        * @param textureManager {GLTextureManager}
-        * @public
-        * @since 1.1.0
-        */
-        public enableGL( gl: WebGLRenderingContext, renderer: Kiwi.Renderers.Renderer, textureManager: Kiwi.Renderers.GLTextureManager ) {
-            // Set resolution uniforms
-            renderer.updateTextureSize(gl, new Float32Array([this.image.width, this.image.height]));
-            // Upload texture
-            textureManager.useTexture(gl, this.glTextureWrapper);
-            // If necessary, refresh the texture
-            if(this.dirty)
-                this.refreshTextureGL( gl );
-        }
-
-        /**
-        * Will reload the texture into video memory for WebGL rendering.
-        * 
-        * @method refreshTextureGL
-        * @param glContext {WebGLRenderingContext}
-        * @public
-        * @since 1.0.1
-        */
-        public refreshTextureGL( glContext ) {
-            if(this.glTextureWrapper)
-                this.glTextureWrapper.refreshTexture( glContext );
-            // Clean dirty flag, even if glTextureWrapper failed, so we don&#x27;t keep calling it
-            this.dirty = false;
-
-        }
-
-        /**
-        * Will populate this texture atlas with information based on a JSON file that was passed.
-        * 
-        * @method readJSON
-        * @param {any} atlasJSON
-        * @public 
-        */
-        public readJSON(atlasJSON) {
-            //populate from json
-            var obj = JSON.parse(atlasJSON);
-
-            if(obj.name !== undefined) this.name = obj.name;
-            
-            for (var i = 0; i &lt; obj.cells.length; i++) {
-                this.cells.push(obj.cells[i]);
-
-                if (obj.cells[i].hitboxes === undefined) {
-                    this.cells[i].hitboxes = new Array();
-                    this.cells[i].hitboxes.push({ x: 0, y: 0, w: this.cells[i].w, h: this.cells[i].h });
-                }
-
-            }
-
-            if (obj.sequences) { // leave as empty array if no animations
-
-                for(var i = 0; i &lt; obj.sequences.length; i++) {
-                    
-                    var seq = new Kiwi.Animations.Sequence(obj.sequences[i].name, obj.sequences[i].cells);
-                    
-                    if (obj.sequences[i].speed !== undefined) seq.speed = obj.sequences[i].speed;
-                    if (obj.sequences[i].loop !== undefined)  seq.loop = obj.sequences[i].loop;
-                    
-                    this.sequences.push(seq);
-                }
-            
-            } 
-
-        }
-
-        
-
-
-    }
+	/**
+	* A TextureAtlas is the base class that is created for each image that is loaded through Kiwi. Each TextureAtlas contains a name (the same as the key that the user chose when loading the image in),the HTMLImageElement that it is for and a number of cells.
+	* 
+	* @class TextureAtlas
+	* @namespace Kiwi.Textures
+	* @constructor
+	* @param name {string} Name of the texture atlas. This is usually defined by the developer when loading the assets.
+	* @param type {number} The type of texture atlas that this is. There are currently only three types.
+	* @param cells {any} The cells that are within this image..
+	* @param image {HTMLImageElement/HTMLCanvasElement} The image that the texture atlas is using.
+	* @param [sequences] {Sequence[]} Any sequences of cells for this texture atlas. Used for animation.
+	* @return {Kiwi.TextureAtlas}
+	*
+	*/
+	export class TextureAtlas {
+
+		constructor(name: string, type:number, cells, image, sequences?: Kiwi.Animations.Sequence[]) {
+			this.name = name;
+			this.cells = cells || new Array();
+			this.sequences = sequences || new Array();
+			this.image = image;
+			this._type = type;
+		}
+		
+		/**
+		* The type of object that this texture atlas is.
+		* @method objType
+		* @return {string} &quot;TextureAtlas&quot;
+		* @public
+		*/
+		public objType(): string {
+			return &quot;TextureAtlas&quot;;
+		}
+
+		/**
+		* The name of this texture atlas
+		* @property name
+		* @type string
+		* @public
+		*/
+		public name: string;
+
+
+		/**
+		* Indicates that the image data has changed, and needs to be reuplaoded to the gpu in webGL mode.
+		* @property dirty
+		* @type boolean
+		* @public
+		*/
+		public dirty: boolean = false;
+		
+		/**
+		* The image that this texture atlas is holding. Can be an HTMLImageElement or a HTMLCanvasElement
+		* @property image
+		* @type HTMLImageElement/HTMLCanvasElement
+		* @public
+		*/
+		public image;
+		
+		/**
+		* The cells for this image.
+		* @property cells
+		* @type Array
+		* @public
+		*/
+		public cells;
+		
+		/**
+		* An array of Sequences that are for this texture.
+		* @property sequences
+		* @type Array
+		* @public
+		*/
+		public sequences: Kiwi.Animations.Sequence[];
+
+		/**
+		* The cell that is to be render at the start.
+		* @property cellIndex
+		* @type number
+		* @default 0 
+		* @public
+		*/
+		public cellIndex: number = 0;
+		
+		/**
+		* The type of texture atlas that this is. This only ever is given a value when the object is instantated. 
+		* @property _type
+		* @type number
+		* @private
+		*/
+		private _type: number;
+		
+		/**
+		* The number that defines a single image type of texture atlas
+		* @property SINGLE_IMAGE
+		* @static
+		* @default 0
+		* @type number
+		* @final
+		* @public
+		*/
+		public static SINGLE_IMAGE: number = 0;
+	
+		/**
+		* The number that defines a spritesheet type of texture atlas
+		* @property SPRITE_SHEET
+		* @static
+		* @default 1
+		* @type number
+		* @final
+		* @public
+		*/
+		public static SPRITE_SHEET: number = 1;
+
+		/**
+		* The number that defines a normal texture atlas
+		* @property TEXTURE_ATLAS
+		* @static
+		* @default 2
+		* @type number
+		* @final
+		* @public
+		*/
+		public static TEXTURE_ATLAS: number = 2;
+
+		/**
+		* Will return to you this type of texture atlas. This is READ ONLY.
+		* @type number
+		* @public
+		*/
+		public get type(): number {
+			return this._type;
+		}
+		
+
+		public glTextureWrapper: Kiwi.Renderers.GLTextureWrapper;
+
+		/**
+		* Creates a GLTextureWrapper to allow the atlas to communicate efficiently with the video card. This is mostly an internal method.
+		*
+		* If you are extending TextureAtlas to incorporate multiple textures, you will need to override this method.
+		* @method createGLTextureWrapper
+		* @param gl {WebGLRenderingContext} The rendering context.
+		* @param textureManager {Kiwi.Renderers.GLTextureManager} The texture manager.
+		* @public
+		* @since 1.1.0
+		*/
+		public createGLTextureWrapper( gl: WebGLRenderingContext, textureManager: Kiwi.Renderers.GLTextureManager ) {
+			// Create a default texture wrapper
+			this.glTextureWrapper = new Kiwi.Renderers.GLTextureWrapper(gl, this);
+			// If this were a multi-texture atlas, we would reassign wrapper values here
+
+			// Register wrapper/s to texture manager
+			textureManager.registerTextureWrapper( gl, this.glTextureWrapper );
+		}
+
+
+		/**
+		* Sends the texture to the video card.
+		* @method enableGL
+		* @param gl {WebGLRenderingContext}
+		* @param renderer {Renderer}
+		* @param textureManager {GLTextureManager}
+		* @public
+		* @since 1.1.0
+		*/
+		public enableGL( gl: WebGLRenderingContext, renderer: Kiwi.Renderers.Renderer, textureManager: Kiwi.Renderers.GLTextureManager ) {
+			// Set resolution uniforms
+			renderer.updateTextureSize(gl, new Float32Array([this.image.width, this.image.height]));
+			// Upload texture
+			textureManager.useTexture(gl, this.glTextureWrapper);
+			// If necessary, refresh the texture
+			if(this.dirty)
+				this.refreshTextureGL( gl );
+		}
+
+		/**
+		* Will reload the texture into video memory for WebGL rendering.
+		* 
+		* @method refreshTextureGL
+		* @param glContext {WebGLRenderingContext}
+		* @public
+		* @since 1.0.1
+		*/
+		public refreshTextureGL( glContext ) {
+			if(this.glTextureWrapper)
+				this.glTextureWrapper.refreshTexture( glContext );
+			// Clean dirty flag, even if glTextureWrapper failed, so we don&#x27;t keep calling it
+			this.dirty = false;
+
+		}
+
+		/**
+		* Will populate this texture atlas with information based on a JSON file that was passed.
+		* 
+		* @method readJSON
+		* @param {any} atlasJSON
+		* @public 
+		*/
+		public readJSON(atlasJSON) {
+			//populate from json
+			var obj = JSON.parse(atlasJSON);
+
+			if(obj.name !== undefined) this.name = obj.name;
+			
+			for (var i = 0; i &lt; obj.cells.length; i++) {
+				this.cells.push(obj.cells[i]);
+
+				if (obj.cells[i].hitboxes === undefined) {
+					this.cells[i].hitboxes = new Array();
+					this.cells[i].hitboxes.push({ x: 0, y: 0, w: this.cells[i].w, h: this.cells[i].h });
+				}
+
+			}
+
+			if (obj.sequences) { // leave as empty array if no animations
+
+				for(var i = 0; i &lt; obj.sequences.length; i++) {
+					
+					var seq = new Kiwi.Animations.Sequence(obj.sequences[i].name, obj.sequences[i].cells);
+					
+					if (obj.sequences[i].speed !== undefined) seq.speed = obj.sequences[i].speed;
+					if (obj.sequences[i].loop !== undefined)  seq.loop = obj.sequences[i].loop;
+					
+					this.sequences.push(seq);
+				}
+
+			}
+
+		}
+
+	}
 
 }
 
-
     </pre>
 </div>
 
diff --git a/docs/files/src_textures_TextureLibrary.ts.html b/docs/files/src_textures_TextureLibrary.ts.html
index 1918560..ab6e3af 100644
--- a/docs/files/src_textures_TextureLibrary.ts.html
+++ b/docs/files/src_textures_TextureLibrary.ts.html
@@ -371,235 +371,234 @@ <h1 class="file-heading">File: src/textures/TextureLibrary.ts</h1>
 * @submodule Textures
 * @main Textures
 * 
-*/ 
+*/
 
 module Kiwi.Textures {
 
-    /**
-    * Holds a reference to all of the image files (jpg, png, e.t.c) that are accessible on the State this TextureLibrary is on. 
-    * 
-    * @class TextureLibrary
-    * @namespace Kiwi.Textures
-    * @constructor
-    * @param game {Game} The game that this texture library belongs to.
-    * @return {Kiwi.TextureLibrary}
-    *
-    */
-    export class TextureLibrary {
-         
-        constructor(game: Kiwi.Game) {
-
-            this._game = game;
-            this.textures = new Object();
-        }
-
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {string}
-        * @public
-        */
-        public objType(): string {
-            return &quot;TextureLibrary&quot;;
-        }
-
-        /**
-        * The game that this texture library is on.
-        * @property _game
-        * @type Game
-        * @private
-        */
-        private _game: Kiwi.Game;
-
-        /**
-        * Contains all of the textures that are available.
-        * @property textures
-        * @public
-        */
-        public textures;
-
-        /**
-        * Resets the texture library.
-        * @method clear
-        * @public
-        */
-        public clear() {
-            for (var prop in this.textures) {
-                delete this.textures[prop];
-            }
-        }
-
-       
-
-        /**
-        * Adds a texture atlas to the library.
-        * @method add
-        * @param atlas {Kiwi.Textures.TextureAtlas}
-        * @public
-        */
-        public add(atlas: TextureAtlas) {
-            this.textures[atlas.name] = atlas;
-
-            if (this._game.renderOption === Kiwi.RENDERER_WEBGL) {
-                if (Kiwi.Utils.Common.base2Sizes.indexOf(atlas.image.width) == -1 || Kiwi.Utils.Common.base2Sizes.indexOf(atlas.image.height) == -1) {
-                    Kiwi.Log.log(&quot;Kiwi.TextureLibrary: Warning:Image is not of base2 size and may not render correctly.&quot;, &#x27;#texture&#x27;, &#x27;#base2&#x27;);
-                }
-                var renderManager = &lt;Kiwi.Renderers.GLRenderManager&gt;this._game.renderer;
-                renderManager.addTexture(this._game.stage.gl, atlas);
-            }
-        }
-
-
-        /**
-        * Adds a new image file to the texture library.
-        * @method addFromFile
-        * @param imageFile {Kiwi.File}
-        * @public
-        */
-        public addFromFile(imageFile: Kiwi.Files.File) {
-
-            if (this._game.renderOption === Kiwi.RENDERER_WEBGL &amp;&amp; this._game.deviceTargetOption != Kiwi.TARGET_COCOON) {
-                imageFile = this._rebuildImage(imageFile);
-            }
-
-            switch (imageFile.dataType) {
-                case Kiwi.Files.File.SPRITE_SHEET:
-                    this.textures[imageFile.key] = this._buildSpriteSheet(imageFile);
-                    break;
-                case Kiwi.Files.File.IMAGE:
-                    this.textures[imageFile.key] = this._buildImage(imageFile);
-                    break;
-                case Kiwi.Files.File.TEXTURE_ATLAS:
-                    this.textures[imageFile.key] = this._buildTextureAtlas(imageFile);
-                    break;
-                default:
-                    //Image file is of unknown type and was not added to texture library
-                    break;
-            }
-
-        }
-
-        /**
-        * Used to rebuild a Texture from the FileStore into a base2 size if it doesn&#x27;t have it already.
-        * @method _rebuildImage
-        * @param imageFile {Kiwi.File} The image file that is to be rebuilt.
-        * @return {Kiwi.File} The new image file.
-        * @private
-        */
-        private _rebuildImage(imageFile: Kiwi.Files.File): Kiwi.Files.File {
-
-
-            //Check to see if it is base 2
-            var newImg = Kiwi.Utils.Common.convertToBase2(imageFile.data);
-
-
-            //Was it resized? We can check to see if the width/height has changed.
-            if (imageFile.data.width !== newImg.width || imageFile.data.height !== newImg.height) {
-
-                if (imageFile.dataType === Kiwi.Files.File.SPRITE_SHEET) {
-                    //If no rows were passed then calculate them now.
-                    if (!imageFile.metadata.rows)
-                        imageFile.metadata.rows = imageFile.data.height / imageFile.metadata.frameHeight;
-
-
-                    //If no columns were passed then calculate them again.
-                    if (!imageFile.metadata.cols)
-                        imageFile.metadata.cols = imageFile.data.width / imageFile.metadata.frameWidth;
-
-                } else if (imageFile.dataType === Kiwi.Files.File.IMAGE) {
-
-                    if (!imageFile.metadata.width)
-                        imageFile.metadata.width = imageFile.data.width;
-
-                    if (!imageFile.metadata.height)
-                        imageFile.metadata.height = imageFile.data.height;
-
-                }
-
-                Kiwi.Log.log(&#x27;Kiwi.TextureLibrary: &#x27; + imageFile.name + &#x27; has been rebuilt to be base2.&#x27;, &#x27;#texture&#x27;, &#x27;#base2&#x27;);
-
-                //Assign the new image to the data
-                imageFile.data = newImg;
-            }
-
-            return imageFile;
-        }
-
-        /**
-        * Used to build a new texture atlas based on the image file provided. Internal use only.
-        * @method _buildTextureAtlas
-        * @param imageFile {Kiwi.File} The image file that is to be used.
-        * @return {Kiwi.Textures.TextureAtlas} The new texture atlas that is created.
-        * @private
-        */
-        private _buildTextureAtlas(imageFile: Kiwi.Files.File): Kiwi.Textures.TextureAtlas {
-            var atlas: Kiwi.Textures.TextureAtlas = new Kiwi.Textures.TextureAtlas(imageFile.key, Kiwi.Textures.TextureAtlas.TEXTURE_ATLAS, null, imageFile.data);
-            var m = imageFile.metadata;
-            
-            var json = this._game.fileStore.getFile(m.jsonID).data;
-            json.trim();
-            
-            atlas.readJSON(json);
-            
-            return atlas;
-            
-        }
-    
-        /**
-        * Builds a spritesheet atlas from the an image file that is provided.
-        * @method _buildSpriteSheet
-        * @param imageFile {Kiwi.File} The image file that is to be used.
-        * @return {Kiwi.Textures.SpriteSheet} The SpriteSheet that was just created.
-        * @private
-        */
-        private _buildSpriteSheet(imageFile:Kiwi.Files.File): Kiwi.Textures.SpriteSheet {
-           
-            var m = imageFile.metadata;
-            
-            //BEWARE THE SWITCH TO CELLWIDTH AND FRAMEWIDTH
-            var spriteSheet: Kiwi.Textures.SpriteSheet = new Kiwi.Textures.SpriteSheet(imageFile.key,imageFile.data,m.frameWidth,m.frameHeight,m.numCells,m.rows,m.cols,m.sheetOffsetX,m.sheetOffsetY,m.cellOffsetX,m.cellOffsetY);
-            return spriteSheet;
-        }
-    
-        /**
-        * Builds a single image atlas from a image file that is provided.
-        * @method _buildImage
-        * @param imageFile {File} The image file that is to be used.
-        * @return {Kiwi.Textures.SingleImage} The SingleImage that was created.
-        * @private
-        */
-        private _buildImage(imageFile: Kiwi.Files.File): Kiwi.Textures.SingleImage {
-            var m = imageFile.metadata;
-            return new Kiwi.Textures.SingleImage(imageFile.key,imageFile.data,m.width, m.height, m.offsetX, m.offsetY);
-        }
-
-        /**
-         * Rebuild the library from a fileStore. Clears the library and repopulates it.
-         * @method rebuild
-         * @param {Kiwi.Files.FileStore} fileStore
-         * @param {Kiwi.State} state
-         * @public
-         */
-        public rebuild(fileStore: Kiwi.Files.FileStore, state: Kiwi.State) {
-            this.clear();
-            Kiwi.Log.log(&quot;Kiwi.TextureLibrary: Rebuilding Texture Library&quot;, &#x27;#texture&#x27;, &#x27;#rebuild&#x27;);
-            
-            
-            var fileStoreKeys = fileStore.keys;
-            for (var i = 0; i &lt; fileStoreKeys.length; i++) {
-                var file: Kiwi.Files.File = this._game.fileStore.getFile(fileStoreKeys[i]);
-                if (file.isTexture) {
-                    Kiwi.Log.log(&quot;  Kiwi.TextureLibrary: Adding Texture: &quot; + file.name, &#x27;#texture&#x27;, &#x27;#added&#x27;);
-                    state.textureLibrary.addFromFile(file);
-                }
-            }
-
-        }
-    }
+	/**
+	* Holds a reference to all of the image files (jpg, png, e.t.c) that are accessible on the State this TextureLibrary is on. 
+	* 
+	* @class TextureLibrary
+	* @namespace Kiwi.Textures
+	* @constructor
+	* @param game {Game} The game that this texture library belongs to.
+	* @return {Kiwi.TextureLibrary}
+	*
+	*/
+	export class TextureLibrary {
+
+		constructor(game: Kiwi.Game) {
+
+			this._game = game;
+			this.textures = new Object();
+		}
+
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {string}
+		* @public
+		*/
+		public objType(): string {
+			return &quot;TextureLibrary&quot;;
+		}
+
+		/**
+		* The game that this texture library is on.
+		* @property _game
+		* @type Game
+		* @private
+		*/
+		private _game: Kiwi.Game;
+
+		/**
+		* Contains all of the textures that are available.
+		* @property textures
+		* @public
+		*/
+		public textures;
+
+		/**
+		* Resets the texture library.
+		* @method clear
+		* @public
+		*/
+		public clear() {
+			for (var prop in this.textures) {
+				delete this.textures[prop];
+			}
+		}
+
+	   
+
+		/**
+		* Adds a texture atlas to the library.
+		* @method add
+		* @param atlas {Kiwi.Textures.TextureAtlas}
+		* @public
+		*/
+		public add(atlas: TextureAtlas) {
+			this.textures[atlas.name] = atlas;
+
+			if (this._game.renderOption === Kiwi.RENDERER_WEBGL) {
+				if (Kiwi.Utils.Common.base2Sizes.indexOf(atlas.image.width) == -1 || Kiwi.Utils.Common.base2Sizes.indexOf(atlas.image.height) == -1) {
+					Kiwi.Log.log(&quot;Kiwi.TextureLibrary: Warning:Image is not of base2 size and may not render correctly.&quot;, &#x27;#texture&#x27;, &#x27;#base2&#x27;);
+				}
+				var renderManager = &lt;Kiwi.Renderers.GLRenderManager&gt;this._game.renderer;
+				renderManager.addTexture(this._game.stage.gl, atlas);
+			}
+		}
+
+
+		/**
+		* Adds a new image file to the texture library.
+		* @method addFromFile
+		* @param imageFile {Kiwi.File}
+		* @public
+		*/
+		public addFromFile(imageFile: Kiwi.Files.File) {
+
+			if (this._game.renderOption === Kiwi.RENDERER_WEBGL &amp;&amp; this._game.deviceTargetOption != Kiwi.TARGET_COCOON) {
+				imageFile = this._rebuildImage(imageFile);
+			}
+
+			switch (imageFile.dataType) {
+				case Kiwi.Files.File.SPRITE_SHEET:
+					this.textures[imageFile.key] = this._buildSpriteSheet(imageFile);
+					break;
+				case Kiwi.Files.File.IMAGE:
+					this.textures[imageFile.key] = this._buildImage(imageFile);
+					break;
+				case Kiwi.Files.File.TEXTURE_ATLAS:
+					this.textures[imageFile.key] = this._buildTextureAtlas(imageFile);
+					break;
+				default:
+					//Image file is of unknown type and was not added to texture library
+					break;
+			}
+
+		}
+
+		/**
+		* Used to rebuild a Texture from the FileStore into a base2 size if it doesn&#x27;t have it already.
+		* @method _rebuildImage
+		* @param imageFile {Kiwi.File} The image file that is to be rebuilt.
+		* @return {Kiwi.File} The new image file.
+		* @private
+		*/
+		private _rebuildImage(imageFile: Kiwi.Files.File): Kiwi.Files.File {
+
+
+			//Check to see if it is base 2
+			var newImg = Kiwi.Utils.Common.convertToBase2(imageFile.data);
+
+
+			//Was it resized? We can check to see if the width/height has changed.
+			if (imageFile.data.width !== newImg.width || imageFile.data.height !== newImg.height) {
+
+				if (imageFile.dataType === Kiwi.Files.File.SPRITE_SHEET) {
+					//If no rows were passed then calculate them now.
+					if (!imageFile.metadata.rows)
+						imageFile.metadata.rows = imageFile.data.height / imageFile.metadata.frameHeight;
+
+
+					//If no columns were passed then calculate them again.
+					if (!imageFile.metadata.cols)
+						imageFile.metadata.cols = imageFile.data.width / imageFile.metadata.frameWidth;
+
+				} else if (imageFile.dataType === Kiwi.Files.File.IMAGE) {
+
+					if (!imageFile.metadata.width)
+						imageFile.metadata.width = imageFile.data.width;
+
+					if (!imageFile.metadata.height)
+						imageFile.metadata.height = imageFile.data.height;
+
+				}
+
+				Kiwi.Log.log(&#x27;Kiwi.TextureLibrary: &#x27; + imageFile.name + &#x27; has been rebuilt to be base2.&#x27;, &#x27;#texture&#x27;, &#x27;#base2&#x27;);
+
+				//Assign the new image to the data
+				imageFile.data = newImg;
+			}
+
+			return imageFile;
+		}
+
+		/**
+		* Used to build a new texture atlas based on the image file provided. Internal use only.
+		* @method _buildTextureAtlas
+		* @param imageFile {Kiwi.File} The image file that is to be used.
+		* @return {Kiwi.Textures.TextureAtlas} The new texture atlas that is created.
+		* @private
+		*/
+		private _buildTextureAtlas(imageFile: Kiwi.Files.File): Kiwi.Textures.TextureAtlas {
+			var atlas: Kiwi.Textures.TextureAtlas = new Kiwi.Textures.TextureAtlas(imageFile.key, Kiwi.Textures.TextureAtlas.TEXTURE_ATLAS, null, imageFile.data);
+			var m = imageFile.metadata;
+			
+			var json = this._game.fileStore.getFile(m.jsonID).data;
+			json.trim();
+			
+			atlas.readJSON(json);
+			
+			return atlas;
+			
+		}
+	
+		/**
+		* Builds a spritesheet atlas from the an image file that is provided.
+		* @method _buildSpriteSheet
+		* @param imageFile {Kiwi.File} The image file that is to be used.
+		* @return {Kiwi.Textures.SpriteSheet} The SpriteSheet that was just created.
+		* @private
+		*/
+		private _buildSpriteSheet(imageFile:Kiwi.Files.File): Kiwi.Textures.SpriteSheet {
+		   
+			var m = imageFile.metadata;
+			
+			//BEWARE THE SWITCH TO CELLWIDTH AND FRAMEWIDTH
+			var spriteSheet: Kiwi.Textures.SpriteSheet = new Kiwi.Textures.SpriteSheet(imageFile.key,imageFile.data,m.frameWidth,m.frameHeight,m.numCells,m.rows,m.cols,m.sheetOffsetX,m.sheetOffsetY,m.cellOffsetX,m.cellOffsetY);
+			return spriteSheet;
+		}
+	
+		/**
+		* Builds a single image atlas from a image file that is provided.
+		* @method _buildImage
+		* @param imageFile {File} The image file that is to be used.
+		* @return {Kiwi.Textures.SingleImage} The SingleImage that was created.
+		* @private
+		*/
+		private _buildImage(imageFile: Kiwi.Files.File): Kiwi.Textures.SingleImage {
+			var m = imageFile.metadata;
+			return new Kiwi.Textures.SingleImage(imageFile.key,imageFile.data,m.width, m.height, m.offsetX, m.offsetY);
+		}
+
+		/**
+		 * Rebuild the library from a fileStore. Clears the library and repopulates it.
+		 * @method rebuild
+		 * @param {Kiwi.Files.FileStore} fileStore
+		 * @param {Kiwi.State} state
+		 * @public
+		 */
+		public rebuild(fileStore: Kiwi.Files.FileStore, state: Kiwi.State) {
+			this.clear();
+			Kiwi.Log.log(&quot;Kiwi.TextureLibrary: Rebuilding Texture Library&quot;, &#x27;#texture&#x27;, &#x27;#rebuild&#x27;);
+			
+			
+			var fileStoreKeys = fileStore.keys;
+			for (var i = 0; i &lt; fileStoreKeys.length; i++) {
+				var file: Kiwi.Files.File = this._game.fileStore.getFile(fileStoreKeys[i]);
+				if (file.isTexture) {
+					Kiwi.Log.log(&quot;  Kiwi.TextureLibrary: Adding Texture: &quot; + file.name, &#x27;#texture&#x27;, &#x27;#added&#x27;);
+					state.textureLibrary.addFromFile(file);
+				}
+			}
+
+		}
+	}
 
 }
 
-
     </pre>
 </div>
 
diff --git a/docs/files/src_time_Clock.ts.html b/docs/files/src_time_Clock.ts.html
index 3f415f9..f9deb03 100644
--- a/docs/files/src_time_Clock.ts.html
+++ b/docs/files/src_time_Clock.ts.html
@@ -373,720 +373,720 @@ <h1 class="file-heading">File: src/time/Clock.ts</h1>
 
 module Kiwi.Time {
 
-    /**
-    * The Clock class offers a way of tracking time within a game. When creating a new Clock you should NOT directly instantiate this class but instead use the addClock method on a ClockManager.
-    * - The MasterClock is a property of the Kiwi.Time.Manager class and tracks real world time in milliseconds elapsed since the application started. This happens automatically and there is no need to do anything to set this up.
-    * - An instance of a clock is used to track time in arbitrary units (milliseconds by default)
-    * - A clock can be started, paused, unpaused and stopped. Once stopped, re-starting the clock again will reset it. It can also have its time scale freely transformed.
-    * - Any number of timers can be attached to a clock. See the Kiwi.Time.Timer class for timer details.
-    * - If the clock is paused, any timers attached to the clock will take this into account and not continue to fire events until the clock is unpaused. (Note that this is not the same as pausing timers, which can be done manually and needs to be undone manually.)
-    * - Animations and TweenManagers can use any Clock.
-    * 
-    * @class Clock
-    * @namespace Kiwi.Time
-    * @constructor
-    * @param manager {ClockManager} The ClockManager that this clock belongs to.
-    * @param master {Kiwi.Time.MasterClock} The MasterClock that it is getting the time in relation to.
-    * @param name {String} The name of the clock.
-    * @param [units=1000] {Number} The units that this clock is to operate in per second.
-    * @return {Kiwi.Time.Clock} This Clock object.
-    */
-    export class Clock {
-         
-        constructor (manager:Kiwi.Time.ClockManager, master: Kiwi.Time.MasterClock, name: string, units: number = 1000) {
-
-            this.manager = manager;
-            this.master = master;
-            this.name = name;
-            this.units = units;
-            this.timers = [];
-
-            if (this.units &lt; 1) {
-                this.units = 1;
-            }
-
-            this._lastMasterElapsed = this.master.elapsed();
-            this._currentMasterElapsed = this.master.elapsed();
-        }
-
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} &quot;Clock&quot;
-        * @public
-        */
-        public objType() {
-            return &quot;Clock&quot;;
-        }
-
-        /**
-        * A collection of Timer objects using this clock.
-        * @property timers
-        * @type Timer[]
-        * @private
-        */
-        private timers: Kiwi.Time.Timer[];
-
-        /**
-        * The time the clock was first started relative to the master clock.
-        * @property _timeFirstStarted
-        * @type Number
-        * @default null
-        * @private
-        */
-        private _timeFirstStarted: number = null;
-
-        /**
-        * The number of clock units elapsed since the clock was first started.
-        * @method elapsedSinceFirstStarted.
-        * @return {Number} number of clock units.
-        * @public
-        */
-        public elapsedSinceFirstStarted(): number {
-
-            return (this._timeLastStarted) ? (this.master.elapsed() - this._timeFirstStarted) / this.units : null;
-
-        }
-
-        /**
-        * The time the clock was most recently started relative to the master clock.
-        * @property _timeLastStarted
-        * @type Number
-        * @default null
-        * @private
-        */
-        private _timeLastStarted: number = null;
-
-        /**
-        * Get the most recent time the clock was started relative to the master clock.
-        * @method started
-        * @return {Number} milliseconds.
-        * @public
-        */
-        public started(): number {
-
-            return this._timeLastStarted;
-
-        }
-
-
-        /**
-        * Rate at which time passes on this clock.
-        * 1 is normal speed. 0 is no speed. -1 is backwards.
-        * This mostly affects timers, animations and tweens.
-        * @property timeScale
-        * @type number
-        * @default 1.0
-        * @public
-        * @since 1.2.0
-        */
-        public timeScale: number = 1.0;
-
-        /**
-        * Clock units elapsed since the clock was most recently started,
-        * not including paused time.
-        * @property _elapsed
-        * @type number
-        * @private
-        * @since 1.2.0
-        */
-        private _elapsed: number = 0;
-
-        /**
-        * Master time on last frame
-        * @property _lastMasterElapsed
-        * @type number
-        * @private
-        * @since 1.2.0
-        */
-        private _lastMasterElapsed: number;
-
-        /**
-        * Master time on current frame
-        * @property _currentMasterElapsed
-        * @type number
-        * @private
-        * @since 1.2.0
-        */
-        private _currentMasterElapsed: number;
-
-
-        /**
-        * Rate of time passage, as modified by time scale and frame rate.
-        * Under ideal conditions this should be 1.
-        * If the frame rate drops, this will rise. Multiply transformations
-        * by rate to get smooth change over time.
-        * @property rate
-        * @type number
-        * @public
-        * @since 1.2.0
-        */
-        public rate: number = 1;
-
-        /**
-        * Maximum frame duration. If a frame takes longer than this to render,
-        * the clock will only advance this far, in effect slowing down time.
-        * If this value is 0 or less, it will not be checked and frames can
-        * take any amount of time to render.
-        * @property _maxFrameDuration
-        * @type number
-        * @default -1
-        * @private
-        */
-        private _maxFrameDuration: number = -1;
-
-        /**
-        * Maximum frame duration. If a frame takes longer than this to render,
-        * the clock will only advance this far, in effect slowing down time.
-        * If this value is 0 or less, it will not be checked and frames can
-        * take any amount of time to render.
-        * @property maxFrameDuration
-        * @type number
-        * @default -1
-        * @public
-        */
-        public get maxFrameDuration(): number {
-            return this._maxFrameDuration;
-        }
-
-        public set maxFrameDuration( value: number ) {
-            this._maxFrameDuration = value;
-        }
-
-
-        /**
-        * The number of clock units elapsed since the clock was most recently started (not including time spent paused)
-        * @method elapsed
-        * @return {Number} number of clock units.
-        * @public
-        */
-        public elapsed(): number {
-            return this._elapsed;
-        }
-
-        /**
-        * The time the clock was most recently stopped relative to the master clock.
-        * @property _timeLastStopped
-        * @type Number
-        * @default null
-        * @private
-        */
-        private _timeLastStopped: number = null;
-
-        /**
-        * The number of clock units elapsed since the clock was most recently stopped.
-        * @method elapsedSinceLastStopped.
-        * @return {Number} number of clock units.
-        * @public
-        */
-        public elapsedSinceLastStopped(): number {
-
-            return (this._timeLastStarted) ? (this.master.elapsed() - this._timeLastStopped) / this.units : null;
-
-        }
-
-        /**
-        * The time the clock was most receently paused relative to the master clock.
-        * @property _timeLastPaused
-        * @private
-        * @type Number
-        * @default null
-        * @private
-        */
-        private _timeLastPaused: number = null;
-
-        /**
-        * The number of clock units elapsed since the clock was most recently paused.
-        * @method elapsedSinceLastPaused.
-        * @return {Number} number of clock units.
-        * @public
-        */
-        public elapsedSinceLastPaused(): number {
-
-            return (this._timeLastStarted) ? (this.master.elapsed() - this._timeLastPaused) / this.units : null;
-
-        }
-
-        /**
-        * The time the clock was most recently unpaused relative to the master clock.
-        * @property _timeLastUnpaused
-        * @private
-        * @type Number
-        * @default null
-        * @private
-        */
-        private _timeLastUnpaused: number = null;
-
-        /**
-        * The number of clock units elapsed since the clock was most recently unpaused.
-        * @method elapsedSinceLastUnpaused.
-        * @return {Number} number of clock units.
-        * @public
-        */
-        public elapsedSinceLastUnpaused(): number {
-
-            return (this._timeLastStarted) ? (this.master.elapsed() - this._timeLastUnpaused) / this.units : null;
-
-        }
-
-        /**
-        * The total number of milliseconds the clock has been paused since it was last started.
-        * @property _totalPaused
-        * @private
-        * @type Number
-        * @default 0
-        * @private
-        */
-        private _totalPaused: number = 0;
-
-        /**
-        * Whether the clock is in a running state.
-        * @property _isRunning
-        * @type boolean
-        * @default false
-        * @private
-        */
-        private _isRunning: boolean = false;
-
-        /**
-        * Check if the clock is currently running.
-        * @method isRunning
-        * @return {boolean} true if running.
-        * @public
-        */
-        public isRunning(): boolean {
-
-            return this._isRunning;
-
-        }
-
-        /**
-        * Whether the clock is in a stopped state.
-        * @property _isStopped
-        * @type boolean
-        * @default true
-        * @private
-        */
-        private _isStopped: boolean = true;
-
-        /**
-        * Check if the clock is in the stopped state.
-        * @method isStopped
-        * @return {boolean} true if stopped.
-        * @public
-        */
-        public isStopped(): boolean {
-
-            return this._isStopped;
-
-        }
-
-        /**
-        * Whether the clock is in a paused state.
-        * @property _isPaused
-        * @type boolean
-        * @default false
-        * @private
-        */
-        private _isPaused: boolean = false;
-
-        /**
-        * Check if the clock is in the paused state.
-        * @method isPaused
-        * @return {boolean} true if paused.
-        * @public
-        */
-        public isPaused(): boolean {
-
-            return this._isPaused;
-
-        }
-
-        /**
-        * An internal reference to the state of the elapsed timer
-        * @property _elapsedState
-        * @type Number
-        * @default 0
-        * @private
-        */
-        private _elapsedState: number = 0;
-
-        /**
-        * The time manager that this clock belongs to.
-        * @property manager
-        * @type ClockManager 
-        * @public
-        */
-        public manager: Kiwi.Time.ClockManager = null;
-
-        /**
-        * The master clock.
-        * @property master
-        * @type Kiwi.Time.MasterClock
-        * @public
-        */
-        public master: Kiwi.Time.MasterClock = null;
-
-        /**
-        * Name of the clock
-        * @property name
-        * @type string
-        * @public
-        */
-        public name: string = null;
-
-        /**
-        * The number of milliseconds counted as one unit of time by the clock.
-        * @property units
-        * @type Number
-        * @default 0
-        * @public
-        */
-        public units: number = 0;
-
-        /**
-        * Add an existing Timer to the Clock.
-        * @method addTimer
-        * @param timer {Timer} The Timer object instance to be added to ths Clock.
-        * @return {Kiwi.Time.Clock} This Clock object.
-        * @public
-        */
-        public addTimer(timer: Timer): Clock {
-
-            this.timers.push(timer);
-
-            return this;
-        }
-
-        /**
-        * Creates a new Timer and adds it to this Clock.
-        * @method createTimer
-        * @param name {string} The name of the Timer (must be unique on this Clock).
-        * @param [delay=1] {Number} The number of clock units to wait between firing events (default 1)
-        * @param [repeatCount=0] {Number} The number of times to repeat this Timer (default 0)
-        * @param [start=true] {Boolean} If the timer should start.
-        * @return {Kiwi.Time.Timer} The newly created Timer.
-        * @public
-        */
-        public createTimer(name: string, delay: number = 1, repeatCount: number = 0, start: boolean=true): Timer {
-
-            this.timers.push(new Timer(name, this, delay, repeatCount));
-
-            if (start === true) {
-                this.timers[this.timers.length - 1].start();
-            }
-
-            return this.timers[this.timers.length - 1];
-
-        }
-
-        /**
-        * Remove a Timer from this Clock based on either the Timer object or its name.
-        * @method removeTimer
-        * @param [timer=null] {Timer} The Timer object you wish to remove. If you wish to delete by Timer Name set this to null.
-        * @param [timerName=&#x27;&#x27;] {string} The name of the Timer object to remove.
-        * @return {boolean} True if the Timer was successfully removed, false if not.
-        * @public
-        */
-        public removeTimer(timer: Timer = null, timerName:string = &quot;&quot;): boolean {
-            var index;
-
-            //  Timer object given?
-            if ( timer !== null ) {
-                index = this.timers.indexOf( timer );
-                if ( index !== -1 ) {
-                    this.timers.splice( index, 1 );
-                    return true;
-                }
-            } else if ( timerName !== &quot;&quot; ) {
-                for ( index = 0; index &lt; this.timers.length; index++ ) {
-                    if ( this.timers[ index ].name === timerName ) {
-                        this.timers.splice( index, 1 );
-                        return true;
-                    }
-                }
-            }
-
-            return false;
-        }
-
-        /**
-        * Check if the Timer already exists on this Clock
-        * @method checkExists
-        * @param name {string} The name of the Timer.
-        * @return {boolean} true if the Timer exists, false if not.
-        * @public
-        */
-        public checkExists(name: string): boolean {
-
-            if (this.timers[name])
-            {
-                return true;
-            }
-            else
-            {
-                return false;
-            }
-
-        }
-
-        /**
-        * Stop all timers attached to the clock.
-        * @method stopAllTimers
-        * @return {Clock} This Clock object.
-        * @public
-        */
-        public stopAllTimers(): Clock {
-
-            for (var i = 0; i &lt; this.timers.length; i++)
-            {
-                this.timers[i].stop();
-            }
-
-            return this;
-
-        }
-
-        /**
-        * Convert a number to milliseconds based on clock units.
-        * @method toMilliseconds.
-        * @param time {number} seconds
-        * @return {Number} milliseconds.
-        * @public
-        */
-        public convertToMilliseconds(time: number): number {
-
-            return time * this.units;
-
-        }
-
-        /**
-        * Updates all Timers linked to this Clock.
-        * @method update
-        * @public
-        */
-        public update() {
-            var frameLength = this._currentMasterElapsed - this._lastMasterElapsed;
-
-            if ( this._maxFrameDuration &gt; 0 ) {
-                frameLength = Math.min( frameLength, this._maxFrameDuration );
-            }
-
-            for (var i = 0; i &lt; this.timers.length; i++) {
-                this.timers[i].update();
-            }
-
-            // Compute difference between last master value and this
-            // Scale that difference by timeScale
-            // If clock is running, add that value to the current time
-            this._lastMasterElapsed = this._currentMasterElapsed;
-            this._currentMasterElapsed = this.master.elapsed();
-            if ( this._elapsedState === 0 || this._elapsedState === 2 ) {
-                this._elapsed += this.timeScale * frameLength / this.units;
-            } else if ( this._elapsedState === 1 ) {
-                this._totalPaused += frameLength;
-            }
-
-            // Compute time governance properties
-            // These should really be properties hereafter
-            this.rate = this.timeScale * frameLength / this.master.idealDelta;
-        }
-
-        /**
-        * Start the clock. This resets the clock and starts it running.
-        * @method start
-        * @return {Clock} This Clock object.
-        * @public
-        */
-        public start(): Clock {
-
-            this._timeLastStarted = this.master.elapsed();
-            this._totalPaused = 0;
-
-            if (!this._timeFirstStarted)
-            {
-                this._timeFirstStarted = this._timeLastStarted;
-            }
-
-            this._isRunning = true;
-            this._isPaused = false;
-            this._isStopped = false;
-
-            this._elapsedState = 0;
-
-            return this;
-
-        }
-
-        /**
-        * Pause the clock. The clock can only be paused if it is already running.
-        * @method pause
-        * @return {Kiwi.Time.Clock} This Clock object.
-        * @public
-        */
-        public pause(): Clock {
-
-            if (this._isRunning === true)
-            {
-                this._timeLastPaused = this.master.elapsed();
-                this._isRunning = false;
-                this._isPaused = true;
-                this._isStopped = false;
-
-                this._elapsedState = 1;
-            }
-
-            return this;
-        }
-
-        /**
-        * Resume the clock. The clock can only be resumed if it is already paused.
-        * @method resume
-        * @return {Kiwi.Time.Clock} This Clock object.
-        * @public
-        */
-        public resume(): Clock {
-
-            if (this._isPaused === true)
-            {
-                this._timeLastUnpaused = this.master.elapsed();
-                this._totalPaused += this._timeLastUnpaused - this._timeLastPaused;
-                this._isRunning = true;
-                this._isPaused = false;
-                this._isStopped = false;
-
-                this._elapsedState = 2;
-            }
-
-            return this;
-
-        }
-
-        /**
-        * Stop the clock. Clock can only be stopped if it is already running or is paused.
-        * @method stop
-        * @return {Kiwi.Time.Clock} This Clock object.
-        * @public
-        */
-        public stop(): Clock {
-
-            if (this._isStopped === false)
-            {
-                this._timeLastStopped = this.master.elapsed();
-
-                if (this._isPaused === true)
-                {
-                    this._totalPaused += this._timeLastStopped - this._timeLastPaused;
-                }
-
-                this._isRunning = false;
-                this._isPaused = false;
-                this._isStopped = true;
-
-                this._elapsedState = 3;
-            }
-
-            return this;
-
-        }
-
-	    /**
-	    * Returns a string representation of this object.
-	    * @method toString
-	    * @return {string} a string representation of the instance.
-	    * @public
-        */
-        public toString(): string {
-
-            return &quot;[{Clock (name=&quot; + this.name + &quot; units=&quot; + this.units + &quot; running=&quot; + this._isRunning + &quot;)}]&quot;;
-
-        }
-
-
-        /**
-        * Set a function to execute after a certain time interval.
-        * Emulates window.setTimeout, except attached to a Kiwi.Time.Clock.
-        * This allows you to pause and manipulate time, and the timeout will respect
-        * the clock on which it is created.
-        *
-        * No clearTimeout is provided; you should use Kiwi.Time.Timer functions
-        * to achieve further control.
-        *
-        * Any parameters after &quot;context&quot; will be passed as parameters to the
-        * callback function. Note that you must specify &quot;context&quot; in order for
-        * this to work. You may specify &quot;null&quot;, in which case it will default
-        * to the global scope &quot;window&quot;.
-        *
-        * @method setTimeout
-        * @param callback {function} Function to execute
-        * @param timeout {number} Milliseconds before execution
-        * @param [context] {object} Object to be &quot;this&quot; for the callback
-        * @return {Kiwi.Time.Timer} Kiwi.Time.Timer object which can be used to further
-        *   manipulate the timer
-        * @public
-        */
-        public setTimeout( callback, timeout: number, context, ...args ): Timer {
-            var clock = this,
-                timer = this.createTimer( &quot;timeoutTimer&quot;, timeout / 1000 );
-
-            if ( !context ) {
-                context = this;
-            }
-
-            timer.createTimerEvent( TimerEvent.TIMER_STOP,
-                function() {
-                    callback.apply( context, args );
-                    clock.removeTimer( timer );
-                },
-                context );
-
-            timer.start();
-
-            return timer;
-        }
-
-
-        /**
-        * Set a function to repeatedly execute at fixed time intervals.
-        * Emulates window.setInterval, except attached to a Kiwi.Time.Clock.
-        * This allows you to pause and manipulate time, and the timeout will respect
-        * the clock on which it is created.
-        *
-        * No clearInterval is provided; you should use Kiwi.Time.Timer functions
-        * to achieve further control.
-        *
-        * Any parameters after &quot;context&quot; will be passed as parameters to the
-        * callback function. Note that you must specify &quot;context&quot; in order for
-        * this to work. You may specify &quot;null&quot;, in which case it will default
-        * to the global scope &quot;window&quot;.
-        *
-        * @method setInterval
-        * @param callback {function} Function to execute
-        * @param timeout {number} Milliseconds between executions
-        * @param [context=window] {object} Object to be &quot;this&quot; for the callback
-        * @return {Kiwi.Time.Timer} Kiwi.Time.Timer object
-        *   which can be used to further manipulate the timer
-        * @public
-        */
-        public setInterval( callback, timeout: number, context, ...args ): Timer {
-            var timer = this.createTimer( &quot;timeoutTimer&quot;, timeout / 1000, -1 );
-
-            if ( !context ) {
-                context = this;
-            }
-
-            timer.createTimerEvent( TimerEvent.TIMER_COUNT,
-                function() {
-                    callback.apply( context, args );
-                },
-                context );
-
-            timer.start();
-
-            return timer;
-        }
-
-    }
+	/**
+	* The Clock class offers a way of tracking time within a game. When creating a new Clock you should NOT directly instantiate this class but instead use the addClock method on a ClockManager.
+	* - The MasterClock is a property of the Kiwi.Time.Manager class and tracks real world time in milliseconds elapsed since the application started. This happens automatically and there is no need to do anything to set this up.
+	* - An instance of a clock is used to track time in arbitrary units (milliseconds by default)
+	* - A clock can be started, paused, unpaused and stopped. Once stopped, re-starting the clock again will reset it. It can also have its time scale freely transformed.
+	* - Any number of timers can be attached to a clock. See the Kiwi.Time.Timer class for timer details.
+	* - If the clock is paused, any timers attached to the clock will take this into account and not continue to fire events until the clock is unpaused. (Note that this is not the same as pausing timers, which can be done manually and needs to be undone manually.)
+	* - Animations and TweenManagers can use any Clock.
+	* 
+	* @class Clock
+	* @namespace Kiwi.Time
+	* @constructor
+	* @param manager {ClockManager} The ClockManager that this clock belongs to.
+	* @param master {Kiwi.Time.MasterClock} The MasterClock that it is getting the time in relation to.
+	* @param name {String} The name of the clock.
+	* @param [units=1000] {Number} The units that this clock is to operate in per second.
+	* @return {Kiwi.Time.Clock} This Clock object.
+	*/
+	export class Clock {
+
+		constructor (manager:Kiwi.Time.ClockManager, master: Kiwi.Time.MasterClock, name: string, units: number = 1000) {
+
+			this.manager = manager;
+			this.master = master;
+			this.name = name;
+			this.units = units;
+			this.timers = [];
+
+			if (this.units &lt; 1) {
+				this.units = 1;
+			}
+
+			this._lastMasterElapsed = this.master.elapsed();
+			this._currentMasterElapsed = this.master.elapsed();
+		}
+
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} &quot;Clock&quot;
+		* @public
+		*/
+		public objType() {
+			return &quot;Clock&quot;;
+		}
+
+		/**
+		* A collection of Timer objects using this clock.
+		* @property timers
+		* @type Timer[]
+		* @private
+		*/
+		private timers: Kiwi.Time.Timer[];
+
+		/**
+		* The time the clock was first started relative to the master clock.
+		* @property _timeFirstStarted
+		* @type Number
+		* @default null
+		* @private
+		*/
+		private _timeFirstStarted: number = null;
+
+		/**
+		* The number of clock units elapsed since the clock was first started.
+		* @method elapsedSinceFirstStarted.
+		* @return {Number} number of clock units.
+		* @public
+		*/
+		public elapsedSinceFirstStarted(): number {
+
+			return (this._timeLastStarted) ? (this.master.elapsed() - this._timeFirstStarted) / this.units : null;
+
+		}
+
+		/**
+		* The time the clock was most recently started relative to the master clock.
+		* @property _timeLastStarted
+		* @type Number
+		* @default null
+		* @private
+		*/
+		private _timeLastStarted: number = null;
+
+		/**
+		* Get the most recent time the clock was started relative to the master clock.
+		* @method started
+		* @return {Number} milliseconds.
+		* @public
+		*/
+		public started(): number {
+
+			return this._timeLastStarted;
+
+		}
+
+
+		/**
+		* Rate at which time passes on this clock.
+		* 1 is normal speed. 0 is no speed. -1 is backwards.
+		* This mostly affects timers, animations and tweens.
+		* @property timeScale
+		* @type number
+		* @default 1.0
+		* @public
+		* @since 1.2.0
+		*/
+		public timeScale: number = 1.0;
+
+		/**
+		* Clock units elapsed since the clock was most recently started,
+		* not including paused time.
+		* @property _elapsed
+		* @type number
+		* @private
+		* @since 1.2.0
+		*/
+		private _elapsed: number = 0;
+
+		/**
+		* Master time on last frame
+		* @property _lastMasterElapsed
+		* @type number
+		* @private
+		* @since 1.2.0
+		*/
+		private _lastMasterElapsed: number;
+
+		/**
+		* Master time on current frame
+		* @property _currentMasterElapsed
+		* @type number
+		* @private
+		* @since 1.2.0
+		*/
+		private _currentMasterElapsed: number;
+
+
+		/**
+		* Rate of time passage, as modified by time scale and frame rate.
+		* Under ideal conditions this should be 1.
+		* If the frame rate drops, this will rise. Multiply transformations
+		* by rate to get smooth change over time.
+		* @property rate
+		* @type number
+		* @public
+		* @since 1.2.0
+		*/
+		public rate: number = 1;
+
+		/**
+		* Maximum frame duration. If a frame takes longer than this to render,
+		* the clock will only advance this far, in effect slowing down time.
+		* If this value is 0 or less, it will not be checked and frames can
+		* take any amount of time to render.
+		* @property _maxFrameDuration
+		* @type number
+		* @default -1
+		* @private
+		*/
+		private _maxFrameDuration: number = -1;
+
+		/**
+		* Maximum frame duration. If a frame takes longer than this to render,
+		* the clock will only advance this far, in effect slowing down time.
+		* If this value is 0 or less, it will not be checked and frames can
+		* take any amount of time to render.
+		* @property maxFrameDuration
+		* @type number
+		* @default -1
+		* @public
+		*/
+		public get maxFrameDuration(): number {
+			return this._maxFrameDuration;
+		}
+
+		public set maxFrameDuration( value: number ) {
+			this._maxFrameDuration = value;
+		}
+
+
+		/**
+		* The number of clock units elapsed since the clock was most recently started (not including time spent paused)
+		* @method elapsed
+		* @return {Number} number of clock units.
+		* @public
+		*/
+		public elapsed(): number {
+			return this._elapsed;
+		}
+
+		/**
+		* The time the clock was most recently stopped relative to the master clock.
+		* @property _timeLastStopped
+		* @type Number
+		* @default null
+		* @private
+		*/
+		private _timeLastStopped: number = null;
+
+		/**
+		* The number of clock units elapsed since the clock was most recently stopped.
+		* @method elapsedSinceLastStopped.
+		* @return {Number} number of clock units.
+		* @public
+		*/
+		public elapsedSinceLastStopped(): number {
+
+			return (this._timeLastStarted) ? (this.master.elapsed() - this._timeLastStopped) / this.units : null;
+
+		}
+
+		/**
+		* The time the clock was most receently paused relative to the master clock.
+		* @property _timeLastPaused
+		* @private
+		* @type Number
+		* @default null
+		* @private
+		*/
+		private _timeLastPaused: number = null;
+
+		/**
+		* The number of clock units elapsed since the clock was most recently paused.
+		* @method elapsedSinceLastPaused.
+		* @return {Number} number of clock units.
+		* @public
+		*/
+		public elapsedSinceLastPaused(): number {
+
+			return (this._timeLastStarted) ? (this.master.elapsed() - this._timeLastPaused) / this.units : null;
+
+		}
+
+		/**
+		* The time the clock was most recently unpaused relative to the master clock.
+		* @property _timeLastUnpaused
+		* @private
+		* @type Number
+		* @default null
+		* @private
+		*/
+		private _timeLastUnpaused: number = null;
+
+		/**
+		* The number of clock units elapsed since the clock was most recently unpaused.
+		* @method elapsedSinceLastUnpaused.
+		* @return {Number} number of clock units.
+		* @public
+		*/
+		public elapsedSinceLastUnpaused(): number {
+
+			return (this._timeLastStarted) ? (this.master.elapsed() - this._timeLastUnpaused) / this.units : null;
+
+		}
+
+		/**
+		* The total number of milliseconds the clock has been paused since it was last started.
+		* @property _totalPaused
+		* @private
+		* @type Number
+		* @default 0
+		* @private
+		*/
+		private _totalPaused: number = 0;
+
+		/**
+		* Whether the clock is in a running state.
+		* @property _isRunning
+		* @type boolean
+		* @default false
+		* @private
+		*/
+		private _isRunning: boolean = false;
+
+		/**
+		* Check if the clock is currently running.
+		* @method isRunning
+		* @return {boolean} true if running.
+		* @public
+		*/
+		public isRunning(): boolean {
+
+			return this._isRunning;
+
+		}
+
+		/**
+		* Whether the clock is in a stopped state.
+		* @property _isStopped
+		* @type boolean
+		* @default true
+		* @private
+		*/
+		private _isStopped: boolean = true;
+
+		/**
+		* Check if the clock is in the stopped state.
+		* @method isStopped
+		* @return {boolean} true if stopped.
+		* @public
+		*/
+		public isStopped(): boolean {
+
+			return this._isStopped;
+
+		}
+
+		/**
+		* Whether the clock is in a paused state.
+		* @property _isPaused
+		* @type boolean
+		* @default false
+		* @private
+		*/
+		private _isPaused: boolean = false;
+
+		/**
+		* Check if the clock is in the paused state.
+		* @method isPaused
+		* @return {boolean} true if paused.
+		* @public
+		*/
+		public isPaused(): boolean {
+
+			return this._isPaused;
+
+		}
+
+		/**
+		* An internal reference to the state of the elapsed timer
+		* @property _elapsedState
+		* @type Number
+		* @default 0
+		* @private
+		*/
+		private _elapsedState: number = 0;
+
+		/**
+		* The time manager that this clock belongs to.
+		* @property manager
+		* @type ClockManager 
+		* @public
+		*/
+		public manager: Kiwi.Time.ClockManager = null;
+
+		/**
+		* The master clock.
+		* @property master
+		* @type Kiwi.Time.MasterClock
+		* @public
+		*/
+		public master: Kiwi.Time.MasterClock = null;
+
+		/**
+		* Name of the clock
+		* @property name
+		* @type string
+		* @public
+		*/
+		public name: string = null;
+
+		/**
+		* The number of milliseconds counted as one unit of time by the clock.
+		* @property units
+		* @type Number
+		* @default 0
+		* @public
+		*/
+		public units: number = 0;
+
+		/**
+		* Add an existing Timer to the Clock.
+		* @method addTimer
+		* @param timer {Timer} The Timer object instance to be added to ths Clock.
+		* @return {Kiwi.Time.Clock} This Clock object.
+		* @public
+		*/
+		public addTimer(timer: Timer): Clock {
+
+			this.timers.push(timer);
+
+			return this;
+		}
+
+		/**
+		* Creates a new Timer and adds it to this Clock.
+		* @method createTimer
+		* @param name {string} The name of the Timer (must be unique on this Clock).
+		* @param [delay=1] {Number} The number of clock units to wait between firing events (default 1)
+		* @param [repeatCount=0] {Number} The number of times to repeat this Timer (default 0)
+		* @param [start=true] {Boolean} If the timer should start.
+		* @return {Kiwi.Time.Timer} The newly created Timer.
+		* @public
+		*/
+		public createTimer(name: string, delay: number = 1, repeatCount: number = 0, start: boolean=true): Timer {
+
+			this.timers.push(new Timer(name, this, delay, repeatCount));
+
+			if (start === true) {
+				this.timers[this.timers.length - 1].start();
+			}
+
+			return this.timers[this.timers.length - 1];
+
+		}
+
+		/**
+		* Remove a Timer from this Clock based on either the Timer object or its name.
+		* @method removeTimer
+		* @param [timer=null] {Timer} The Timer object you wish to remove. If you wish to delete by Timer Name set this to null.
+		* @param [timerName=&#x27;&#x27;] {string} The name of the Timer object to remove.
+		* @return {boolean} True if the Timer was successfully removed, false if not.
+		* @public
+		*/
+		public removeTimer(timer: Timer = null, timerName:string = &quot;&quot;): boolean {
+			var index;
+
+			//  Timer object given?
+			if ( timer !== null ) {
+				index = this.timers.indexOf( timer );
+				if ( index !== -1 ) {
+					this.timers.splice( index, 1 );
+					return true;
+				}
+			} else if ( timerName !== &quot;&quot; ) {
+				for ( index = 0; index &lt; this.timers.length; index++ ) {
+					if ( this.timers[ index ].name === timerName ) {
+						this.timers.splice( index, 1 );
+						return true;
+					}
+				}
+			}
+
+			return false;
+		}
+
+		/**
+		* Check if the Timer already exists on this Clock
+		* @method checkExists
+		* @param name {string} The name of the Timer.
+		* @return {boolean} true if the Timer exists, false if not.
+		* @public
+		*/
+		public checkExists(name: string): boolean {
+
+			if (this.timers[name])
+			{
+				return true;
+			}
+			else
+			{
+				return false;
+			}
+
+		}
+
+		/**
+		* Stop all timers attached to the clock.
+		* @method stopAllTimers
+		* @return {Clock} This Clock object.
+		* @public
+		*/
+		public stopAllTimers(): Clock {
+
+			for (var i = 0; i &lt; this.timers.length; i++)
+			{
+				this.timers[i].stop();
+			}
+
+			return this;
+
+		}
+
+		/**
+		* Convert a number to milliseconds based on clock units.
+		* @method toMilliseconds.
+		* @param time {number} seconds
+		* @return {Number} milliseconds.
+		* @public
+		*/
+		public convertToMilliseconds(time: number): number {
+
+			return time * this.units;
+
+		}
+
+		/**
+		* Updates all Timers linked to this Clock.
+		* @method update
+		* @public
+		*/
+		public update() {
+			var frameLength = this._currentMasterElapsed - this._lastMasterElapsed;
+
+			if ( this._maxFrameDuration &gt; 0 ) {
+				frameLength = Math.min( frameLength, this._maxFrameDuration );
+			}
+
+			for (var i = 0; i &lt; this.timers.length; i++) {
+				this.timers[i].update();
+			}
+
+			// Compute difference between last master value and this
+			// Scale that difference by timeScale
+			// If clock is running, add that value to the current time
+			this._lastMasterElapsed = this._currentMasterElapsed;
+			this._currentMasterElapsed = this.master.elapsed();
+			if ( this._elapsedState === 0 || this._elapsedState === 2 ) {
+				this._elapsed += this.timeScale * frameLength / this.units;
+			} else if ( this._elapsedState === 1 ) {
+				this._totalPaused += frameLength;
+			}
+
+			// Compute time governance properties
+			// These should really be properties hereafter
+			this.rate = this.timeScale * frameLength / this.master.idealDelta;
+		}
+
+		/**
+		* Start the clock. This resets the clock and starts it running.
+		* @method start
+		* @return {Clock} This Clock object.
+		* @public
+		*/
+		public start(): Clock {
+
+			this._timeLastStarted = this.master.elapsed();
+			this._totalPaused = 0;
+
+			if (!this._timeFirstStarted)
+			{
+				this._timeFirstStarted = this._timeLastStarted;
+			}
+
+			this._isRunning = true;
+			this._isPaused = false;
+			this._isStopped = false;
+
+			this._elapsedState = 0;
+
+			return this;
+
+		}
+
+		/**
+		* Pause the clock. The clock can only be paused if it is already running.
+		* @method pause
+		* @return {Kiwi.Time.Clock} This Clock object.
+		* @public
+		*/
+		public pause(): Clock {
+
+			if (this._isRunning === true)
+			{
+				this._timeLastPaused = this.master.elapsed();
+				this._isRunning = false;
+				this._isPaused = true;
+				this._isStopped = false;
+
+				this._elapsedState = 1;
+			}
+
+			return this;
+		}
+
+		/**
+		* Resume the clock. The clock can only be resumed if it is already paused.
+		* @method resume
+		* @return {Kiwi.Time.Clock} This Clock object.
+		* @public
+		*/
+		public resume(): Clock {
+
+			if (this._isPaused === true)
+			{
+				this._timeLastUnpaused = this.master.elapsed();
+				this._totalPaused += this._timeLastUnpaused - this._timeLastPaused;
+				this._isRunning = true;
+				this._isPaused = false;
+				this._isStopped = false;
+
+				this._elapsedState = 2;
+			}
+
+			return this;
+
+		}
+
+		/**
+		* Stop the clock. Clock can only be stopped if it is already running or is paused.
+		* @method stop
+		* @return {Kiwi.Time.Clock} This Clock object.
+		* @public
+		*/
+		public stop(): Clock {
+
+			if (this._isStopped === false)
+			{
+				this._timeLastStopped = this.master.elapsed();
+
+				if (this._isPaused === true)
+				{
+					this._totalPaused += this._timeLastStopped - this._timeLastPaused;
+				}
+
+				this._isRunning = false;
+				this._isPaused = false;
+				this._isStopped = true;
+
+				this._elapsedState = 3;
+			}
+
+			return this;
+
+		}
+
+		/**
+		* Returns a string representation of this object.
+		* @method toString
+		* @return {string} a string representation of the instance.
+		* @public
+		*/
+		public toString(): string {
+
+			return &quot;[{Clock (name=&quot; + this.name + &quot; units=&quot; + this.units + &quot; running=&quot; + this._isRunning + &quot;)}]&quot;;
+
+		}
+
+
+		/**
+		* Set a function to execute after a certain time interval.
+		* Emulates window.setTimeout, except attached to a Kiwi.Time.Clock.
+		* This allows you to pause and manipulate time, and the timeout will respect
+		* the clock on which it is created.
+		*
+		* No clearTimeout is provided; you should use Kiwi.Time.Timer functions
+		* to achieve further control.
+		*
+		* Any parameters after &quot;context&quot; will be passed as parameters to the
+		* callback function. Note that you must specify &quot;context&quot; in order for
+		* this to work. You may specify &quot;null&quot;, in which case it will default
+		* to the global scope &quot;window&quot;.
+		*
+		* @method setTimeout
+		* @param callback {function} Function to execute
+		* @param timeout {number} Milliseconds before execution
+		* @param [context] {object} Object to be &quot;this&quot; for the callback
+		* @return {Kiwi.Time.Timer} Kiwi.Time.Timer object which can be used to further
+		*   manipulate the timer
+		* @public
+		*/
+		public setTimeout( callback, timeout: number, context, ...args ): Timer {
+			var clock = this,
+				timer = this.createTimer( &quot;timeoutTimer&quot;, timeout / 1000 );
+
+			if ( !context ) {
+				context = this;
+			}
+
+			timer.createTimerEvent( TimerEvent.TIMER_STOP,
+				function() {
+					callback.apply( context, args );
+					clock.removeTimer( timer );
+				},
+				context );
+
+			timer.start();
+
+			return timer;
+		}
+
+
+		/**
+		* Set a function to repeatedly execute at fixed time intervals.
+		* Emulates window.setInterval, except attached to a Kiwi.Time.Clock.
+		* This allows you to pause and manipulate time, and the timeout will respect
+		* the clock on which it is created.
+		*
+		* No clearInterval is provided; you should use Kiwi.Time.Timer functions
+		* to achieve further control.
+		*
+		* Any parameters after &quot;context&quot; will be passed as parameters to the
+		* callback function. Note that you must specify &quot;context&quot; in order for
+		* this to work. You may specify &quot;null&quot;, in which case it will default
+		* to the global scope &quot;window&quot;.
+		*
+		* @method setInterval
+		* @param callback {function} Function to execute
+		* @param timeout {number} Milliseconds between executions
+		* @param [context=window] {object} Object to be &quot;this&quot; for the callback
+		* @return {Kiwi.Time.Timer} Kiwi.Time.Timer object
+		*   which can be used to further manipulate the timer
+		* @public
+		*/
+		public setInterval( callback, timeout: number, context, ...args ): Timer {
+			var timer = this.createTimer( &quot;timeoutTimer&quot;, timeout / 1000, -1 );
+
+			if ( !context ) {
+				context = this;
+			}
+
+			timer.createTimerEvent( TimerEvent.TIMER_COUNT,
+				function() {
+					callback.apply( context, args );
+				},
+				context );
+
+			timer.start();
+
+			return timer;
+		}
+
+	}
 
 }
 
diff --git a/docs/files/src_time_ClockManager.ts.html b/docs/files/src_time_ClockManager.ts.html
index e7ae27e..dec558c 100644
--- a/docs/files/src_time_ClockManager.ts.html
+++ b/docs/files/src_time_ClockManager.ts.html
@@ -374,192 +374,193 @@ <h1 class="file-heading">File: src/time/ClockManager.ts</h1>
 
 module Kiwi.Time {
 
-    /**
-    * Handles the generation and tracking of Clocks and Time related applications for a single game. 
-    * 
-    * @class ClockManager
-    * @namespace Kiwi.Time
-    * @constructor
-    * @param {Kiwi.Game} game.
-    * @return {Kiwi.Time.ClockManager} This Object.
-    *
-    */
-    export class ClockManager {
-         
-        constructor(game: Kiwi.Game) {
-
-            this._game = game;
-
-        }
-
-        /**
-        * The type of object this is.
-        * @method objType
-        * @return {String} &quot;ClockManager&quot;
-        * @public
-        */
-        public objType() {
-            return &quot;ClockManager&quot;;
-        }
-
-        /**
-        * The game that this belongs to.
-        * @property _game
-        * @type Kiwi.Game
-        * @private
-        */
-        private _game: Kiwi.Game;
-
-        /**
-        * An array containing all of the clocks that exist on this manager.
-        * @property _clocks
-        * @type Array
-        * @private
-        */
-        private _clocks: Clock[] = [];
-
-        /**
-        * Frame rate factor, derived from master clock
-        * @property rate
-        * @type Number
-        * @public
-        * @since 1.1.10
-        */
-        public rate: number = 1;
-
-        /**
-        * The MasterClock for this manager.
-        * @property master
-        * @type Kiwi.Time.MasterClock
-        * @private
-        */
-        private master: Kiwi.Time.MasterClock;
-
-        /**
-        * The default Game Clock - you can use this via this.game.time.clock. Uses a 1000 millisecond time unit.
-        * @property clock
-        * @type Kiwi.Time.Clock
-        * @public
-        */
-        public clock: Kiwi.Time.Clock;
-
-        /**
-        * When all of the DOM elements that the game requires have loaded successfully then this object will &#x27;boot&#x27;.
-        * @method boot
-        * @public
-        */
-        public boot() {
-
-            this.master = new Kiwi.Time.MasterClock();
-
-            this.clock = new Clock(this, this.master, &#x27;default&#x27;, 1000);
-            this.clock.start();
-
-        }
-
-        /**
-        * Creates a Clock class for keeping time relative to the MasterClock.
-        * @method addClock
-        * @param name {string} The name of the Clock.
-        * @param [units=1000] {Number} The number of milliseconds that make up one unit of time on this clock. Default 1000.
-        * @return {Kiwi.Time.Clock} A reference to the newly created Clock object.
-        * @public
-        */
-        public addClock(name: string, units: number = 1000): Clock {
-
-            this._clocks.push(new Clock(this, this.master, name, units));
-
-            return this._clocks[this._clocks.length - 1];
-
-        }
-
-        /**
-        * Returns the Clock with the matching name.
-        * Throws an error if no Clock with that name exists
-        * @method getClock
-        * @param name {string} The name of the Clock to be returned.
-        * @return {Kiwi.Time.Clock} The clock which matches the name given.
-        * @public
-        */
-        public getClock(name: string): Clock {
-
-            for (var i = 0; i &lt; this._clocks.length; i++)
-            {
-                if (this._clocks[i].name === name)
-                {
-                    return this._clocks[i];
-                }
-            }
-
-        }
-
-        /**
-        * Is executed every frame and updates all of the clocks that exist on this manager.
-        * @method update
-        * @public
-        */
-        public update() {
-
-            this.master.update();
-            this.clock.update();
-
-            for (var i = 0; i &lt; this._clocks.length; i++)
-            {
-                this._clocks[i].update();
-            }
-
-            this.rate = this.master.rate;
-        }
-
-        /**
-        * Returns the current time. Based on the master clock.
-        * @method now
-        * @return {Number}
-        * @public
-        */
-        public now(): number {
-
-            return this.master.now;
-
-        }
-
-        /**
-        * Returns the elapsed time. Based on the master clock.
-        * @method elapsed
-        * @return {Number}
-        * @public
-        * @since 1.1.0
-        */
-        public elapsed(): number {
-            return this.master.elapsed();
-        }
-
-        /**
-        * Returns the delta of the master clock.
-        * @method delta
-        * @return {Number}
-        * @public
-        */
-        public delta(): number {
-
-            return this.master.delta;
-
-        }
-
-        /**
-        * Sets the interval on the master clock.
-        * @method setMasterInterval
-        * @param interval {Number} The ideal frame interval in milliseconds.
-        * @public
-        * @since 1.1.0
-        */
-        public setMasterInterval(interval:number) {
-            this.master.idealDelta = interval;
-        }
-
-    }
+	/**
+	* Handles the generation and tracking of Clocks and Time related applications for a single game. 
+	* 
+	* @class ClockManager
+	* @namespace Kiwi.Time
+	* @constructor
+	* @param {Kiwi.Game} game.
+	* @return {Kiwi.Time.ClockManager} This Object.
+	*
+	*/
+	export class ClockManager {
+
+		constructor(game: Kiwi.Game) {
+
+			this._game = game;
+
+		}
+
+		/**
+		* The type of object this is.
+		* @method objType
+		* @return {String} &quot;ClockManager&quot;
+		* @public
+		*/
+		public objType() {
+			return &quot;ClockManager&quot;;
+		}
+
+		/**
+		* The game that this belongs to.
+		* @property _game
+		* @type Kiwi.Game
+		* @private
+		*/
+		private _game: Kiwi.Game;
+
+		/**
+		* An array containing all of the clocks that exist on this manager.
+		* @property _clocks
+		* @type Array
+		* @private
+		*/
+		private _clocks: Clock[] = [];
+
+		/**
+		* Frame rate factor, derived from master clock
+		* @property rate
+		* @type Number
+		* @public
+		* @since 1.1.10
+		*/
+		public rate: number = 1;
+
+		/**
+		* The MasterClock for this manager.
+		* @property master
+		* @type Kiwi.Time.MasterClock
+		* @private
+		*/
+		private master: Kiwi.Time.MasterClock;
+
+		/**
+		* The default Game Clock - you can use this via this.game.time.clock. Uses a 1000 millisecond time unit.
+		* @property clock
+		* @type Kiwi.Time.Clock
+		* @public
+		*/
+		public clock: Kiwi.Time.Clock;
+
+		/**
+		* When all of the DOM elements that the game requires have loaded successfully then this object will &#x27;boot&#x27;.
+		* @method boot
+		* @public
+		*/
+		public boot() {
+
+			this.master = new Kiwi.Time.MasterClock();
+
+			this.clock = new Clock(this, this.master, &#x27;default&#x27;, 1000);
+			this.clock.start();
+
+		}
+
+		/**
+		* Creates a Clock class for keeping time relative to the MasterClock.
+		* @method addClock
+		* @param name {string} The name of the Clock.
+		* @param [units=1000] {Number} The number of milliseconds that make up one unit of time on this clock. Default 1000.
+		* @return {Kiwi.Time.Clock} A reference to the newly created Clock object.
+		* @public
+		*/
+		public addClock(name: string, units: number = 1000): Clock {
+
+			this._clocks.push(new Clock(this, this.master, name, units));
+
+			return this._clocks[this._clocks.length - 1];
+
+		}
+
+		/**
+		* Returns the Clock with the matching name.
+		* Throws an error if no Clock with that name exists
+		* @method getClock
+		* @param name {string} The name of the Clock to be returned.
+		* @return {Kiwi.Time.Clock} The clock which matches the name given.
+		* @public
+		*/
+		public getClock(name: string): Clock {
+
+			for (var i = 0; i &lt; this._clocks.length; i++)
+			{
+				if (this._clocks[i].name === name)
+				{
+					return this._clocks[i];
+				}
+			}
+
+		}
+
+		/**
+		* Is executed every frame and updates all of the clocks that exist on this manager.
+		* @method update
+		* @public
+		*/
+		public update() {
+
+			this.master.update();
+			this.clock.update();
+
+			for (var i = 0; i &lt; this._clocks.length; i++)
+			{
+				this._clocks[i].update();
+			}
+
+			this.rate = this.master.rate;
+		}
+
+		/**
+		* Returns the current time. Based on the master clock.
+		* @method now
+		* @return {Number}
+		* @public
+		*/
+		public now(): number {
+
+			return this.master.now;
+
+		}
+
+		/**
+		* Returns the elapsed time. Based on the master clock.
+		* @method elapsed
+		* @return {Number}
+		* @public
+		* @since 1.1.0
+		*/
+		public elapsed(): number {
+			return this.master.elapsed();
+		}
+
+		/**
+		* Returns the delta of the master clock.
+		* @method delta
+		* @return {Number}
+		* @public
+		*/
+		public delta(): number {
+
+			return this.master.delta;
+
+		}
+
+		/**
+		* Sets the interval on the master clock.
+		* @method setMasterInterval
+		* @param interval {Number} The ideal frame interval in milliseconds.
+		* @public
+		* @since 1.1.0
+		*/
+		public setMasterInterval(interval:number) {
+			this.master.idealDelta = interval;
+		}
+
+	}
 
 }
+
     </pre>
 </div>
 
diff --git a/docs/files/src_time_MasterClock.ts.html b/docs/files/src_time_MasterClock.ts.html
index b17deaa..0523986 100644
--- a/docs/files/src_time_MasterClock.ts.html
+++ b/docs/files/src_time_MasterClock.ts.html
@@ -373,170 +373,171 @@ <h1 class="file-heading">File: src/time/MasterClock.ts</h1>
 
 module Kiwi.Time {
 
-    /**
-    * The MasterClock tracks time elapsed since the application started.
-    * Each ClockManager has only one MasterClock which is automatically generated when the game initially booted.
-    * You should not access it directly, use the Clock and Timer classes instead.
-    *
-    * @class MasterClock
-    * @namespace Kiwi.Time
-    * @constructor
-    * @return {Kiwi.Time.MasterClock} This Object.
-    *
-    */
-    export class MasterClock {
-         
-        constructor () {
-
-            this._started = Date.now();
-            this.time = this._started;
-
-        }
-
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} &quot;MasterClock&quot;
-        * @public
-        */
-        public objType() {
-            return &quot;MasterClock&quot;;
-        }
-
-        /**
-        * The time when the MasterClock was started.
-        * @property _started
-        * @type Number
-        * @private
-        */
-        private _started: number;
-
-        /**
-        * The current time. This is updated every frame but AFTER the delta is calculated.
-        * @property time
-        * @type Number
-        * @public
-        */
-        public time: number = 0;
-
-        /**
-        * The current time, this is straight from the Date.now() method and is updated every frame BEFORE the delta.
-        * @property now
-        * @type Number
-        * @public
-        */
-        public now: number = 0;
-
-        /**
-        * The time it takes for the time to update. Using this you can calculate the fps.
-        * @property delta
-        * @type Number
-        * @public
-        */
-        public delta: number = 0;
-
-        /**
-        * The rate at which ideal frames are passing. Multiply per-frame iterations by this factor to create smooth movement. For example, if the ideal fps is 60, but you&#x27;re only getting 45, rate will equal 1.333.
-        * @property rate
-        * @type Number
-        * @public
-        * @since 1.1.0
-        */
-        public rate = 1;
-
-        /**
-        * The ideal frame delta in milliseconds. This is automatically adjusted when the game sets a new frameRate.
-        * @property idealDelta
-        * @type Number
-        * @public
-        * @since 1.1.0
-        */
-        public idealDelta = 1000/60.0;
-
-        /**
-        * The time that has elapsed since the game started. In milliseconds.
-        * @method elapsed
-        * @return {Number}
-        * @public
-        */
-        public elapsed():number {
-
-            return this.now - this._started;
-
-        }
-
-        /**
-        * The time that has elapsed since the game started but in seconds.
-        * @method totalElapsedSeconds
-        * @return {Number}
-        * @public
-        */
-        public totalElapsedSeconds(): number {
-
-            return (this.now - this._started) * 0.001;
-
-        }
-
-        /**
-        * The update loop that should be executed every frame. Used to update the time.
-        * @method update
-        * @public
-        */
-        public update() {
-
-            //  Not in &lt; IE8 (fixed via polyfill)
-            this.now = Date.now();
-
-            this.delta = this.now - this.time;
-
-    	    this.time = this.now;
-
-            this.rate = this.delta / this.idealDelta;
-
-            //  Apply time scaling
-
-        }
-
-        /**
-        * Used to calculate the elapsed time from a point that is specified. This is returned in Milliseconds.
-        * @method elapsedSince
-        * @param since {Number} The point in time in which you would like to see how many milliseconds have passed. In milliseconds.
-        * @return {Number}
-        * @public
-        */
-        public elapsedSince(since: number): number {
-
-            return this.now - since;
-
-        }
-
-        /**
-        * Used to calculate the elapsed time from a point that is specified BUT this is in seconds.
-        * @method elapsedSecondsSince
-        * @param since {Number} The point in time in which you would like to see how many seconds have passed. In milliseconds.
-        * @return {Number }
-        * @public
-        */
-        public elapsedSecondsSince(since: number): number {
-
-            return (this.now - since) * 0.001;
-
-        }
-
-        /**
-        * Resets the MasterClocks time.
-        * @method reset
-        * @public
-        */
-        public reset() {
+	/**
+	* The MasterClock tracks time elapsed since the application started.
+	* Each ClockManager has only one MasterClock which is automatically generated when the game initially booted.
+	* You should not access it directly, use the Clock and Timer classes instead.
+	*
+	* @class MasterClock
+	* @namespace Kiwi.Time
+	* @constructor
+	* @return {Kiwi.Time.MasterClock} This Object.
+	*
+	*/
+	export class MasterClock {
+
+		constructor () {
+
+			this._started = Date.now();
+			this.time = this._started;
+
+		}
+
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} &quot;MasterClock&quot;
+		* @public
+		*/
+		public objType() {
+			return &quot;MasterClock&quot;;
+		}
+
+		/**
+		* The time when the MasterClock was started.
+		* @property _started
+		* @type Number
+		* @private
+		*/
+		private _started: number;
+
+		/**
+		* The current time. This is updated every frame but AFTER the delta is calculated.
+		* @property time
+		* @type Number
+		* @public
+		*/
+		public time: number = 0;
+
+		/**
+		* The current time, this is straight from the Date.now() method and is updated every frame BEFORE the delta.
+		* @property now
+		* @type Number
+		* @public
+		*/
+		public now: number = 0;
+
+		/**
+		* The time it takes for the time to update. Using this you can calculate the fps.
+		* @property delta
+		* @type Number
+		* @public
+		*/
+		public delta: number = 0;
+
+		/**
+		* The rate at which ideal frames are passing. Multiply per-frame iterations by this factor to create smooth movement. For example, if the ideal fps is 60, but you&#x27;re only getting 45, rate will equal 1.333.
+		* @property rate
+		* @type Number
+		* @public
+		* @since 1.1.0
+		*/
+		public rate = 1;
+
+		/**
+		* The ideal frame delta in milliseconds. This is automatically adjusted when the game sets a new frameRate.
+		* @property idealDelta
+		* @type Number
+		* @public
+		* @since 1.1.0
+		*/
+		public idealDelta = 1000/60.0;
+
+		/**
+		* The time that has elapsed since the game started. In milliseconds.
+		* @method elapsed
+		* @return {Number}
+		* @public
+		*/
+		public elapsed():number {
+
+			return this.now - this._started;
+
+		}
+
+		/**
+		* The time that has elapsed since the game started but in seconds.
+		* @method totalElapsedSeconds
+		* @return {Number}
+		* @public
+		*/
+		public totalElapsedSeconds(): number {
+
+			return (this.now - this._started) * 0.001;
+
+		}
+
+		/**
+		* The update loop that should be executed every frame. Used to update the time.
+		* @method update
+		* @public
+		*/
+		public update() {
+
+			//  Not in &lt; IE8 (fixed via polyfill)
+			this.now = Date.now();
+
+			this.delta = this.now - this.time;
+
+			this.time = this.now;
+
+			this.rate = this.delta / this.idealDelta;
+
+			//  Apply time scaling
+
+		}
+
+		/**
+		* Used to calculate the elapsed time from a point that is specified. This is returned in Milliseconds.
+		* @method elapsedSince
+		* @param since {Number} The point in time in which you would like to see how many milliseconds have passed. In milliseconds.
+		* @return {Number}
+		* @public
+		*/
+		public elapsedSince(since: number): number {
+
+			return this.now - since;
+
+		}
+
+		/**
+		* Used to calculate the elapsed time from a point that is specified BUT this is in seconds.
+		* @method elapsedSecondsSince
+		* @param since {Number} The point in time in which you would like to see how many seconds have passed. In milliseconds.
+		* @return {Number }
+		* @public
+		*/
+		public elapsedSecondsSince(since: number): number {
+
+			return (this.now - since) * 0.001;
+
+		}
+
+		/**
+		* Resets the MasterClocks time.
+		* @method reset
+		* @public
+		*/
+		public reset() {
 
-            this._started = this.now;
+			this._started = this.now;
 
-        }
+		}
 
-    }
+	}
 
 }
+
     </pre>
 </div>
 
diff --git a/docs/files/src_time_Timer.ts.html b/docs/files/src_time_Timer.ts.html
index 4f18292..895d9ad 100644
--- a/docs/files/src_time_Timer.ts.html
+++ b/docs/files/src_time_Timer.ts.html
@@ -369,516 +369,517 @@ <h1 class="file-heading">File: src/time/Timer.ts</h1>
 * @module Kiwi
 * @submodule Time
 *
-*/ 
+*/
 
 module Kiwi.Time {
 
-    /**
-    * The Timer class hooks into a game Clock and allows you run code at a specified point in game time.
-    * Use the start() method to start a timer. Add TimerEvents to set-up code to be run on the timer interval.
-    * Timer objects can run once or repeat at specified intervals to execute code on a schedule.
-    *
-    * @class Timer
-    * @namespace Kiwi.Time
-    * @constructor
-    * @param name {string} The name of the timer.
-    * @param clock {Kiwi.Time.Clock} The game clock instance this Timer is based on.
-    * @param delay {Number} The number of clock units to wait between firing events.
-    * @param [repeatCount=0] {Number} The number of times to repeat the timer before it is expired. If you don&#x27;t want it to ever expire, set a value of -1.
-    * @return {Kiwi.Time.Timer} This object.
-    *
-    */
-    export class Timer {
-         
-        constructor (name: string, clock: Clock, delay: number, repeatCount: number = 0) {
-
-            this._clock = clock;
-
-            this._startEvents = [];
-            this._countEvents = [];
-            this._stopEvents = [];
-
-            this.name = name;
-            this.delay = delay;
-            this.repeatCount = repeatCount;
-
-        }
-
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} &quot;Timer&quot;
-        * @public
-        */
-        public objType() {
-            return &quot;Timer&quot;;
-        }
-
-        /**
-        * The number of times the timer has repeated so far.
-        * @property _currentCount
-        * @type Number
-        * @default 0 
-        * @private
-        */
-        private _currentCount: number = 0;
-
-        /**
-        * Get the number of times the timer has repeated.
-        * @method getCurrentCount
-        * @return {Number}
-        * @public
-        */
-        public currentCount(): number {
-
-            return this._currentCount;
-
-        }
-
-        /**
-        * A collection of the TimerEvents associated with TimerEvent.TIMER_START
-        * @property _startEvents
-        * @type Array
-        * @private
-        */
-        private _startEvents:TimerEvent[] = null;
-
-        /**
-        * A collection of the TimerEvents associated with TimerEvent.TIMER_COUNT
-        * @property _countEvents
-        * @private
-        * @type Array
-        */
-        private _countEvents:TimerEvent[] = null;
-
-        /**
-        * A collection of the TimerEvents associated with TimerEvent.TIMER_STOP
-        * @property _stopEvents
-        * @private
-        * @type Array
-        */
-        private _stopEvents:TimerEvent[] = null;
-
-        /**
-        * The clock which this timer bases its timing on.
-        * @property _clock
-        * @type Kiwi.Time.Clock
-        * @private
-        */
-        private _clock: Clock = null;
-
-        /**
-        * The time the last repeat occurred in clock units.
-        * @property _timeLastCount
-        * @type Number
-        * @private
-        * @deprecated Better time handling in 1.2.0 deprecates this data.
-        */
-        private _timeLastCount: number = null;
-
-        /**
-        * Whether the timer is in a running state.
-        * @property _isRunning
-        * @type boolean
-        * @default false
-        * @private
-        */
-        private _isRunning: boolean = false;
-
-        /**
-        * The Timers current state. True if the Timer is running, otherwise false.
-        * @method running
-        * @return {boolean} 
-        * @public
-        */
-        public isRunning(): boolean {
-
-            return this._isRunning;
-
-        }
-
-        /**
-        * Whether the timer is in a stopped state.
-        * @property _isStopped
-        * @type boolean
-        * @default true 
-        * @private
-        */
-        private _isStopped: boolean = true;
-
-        /**
-        * Whether the timer is in a stopped state.
-        * @method stopped
-        * @return {boolean} 
-        * @public
-        */
-        public isStopped(): boolean {
-
-            return this._isStopped;
-
-        }
-
-        /**
-        * Whether the timer is in a paused state.
-        * @property _isPaused
-        * @type boolean
-        * @default false
-        * @private
-        */
-        private _isPaused: boolean = false;
-
-        /**
-        * Whether the timer is in a paused state.
-        * @method paused
-        * @return {boolean} 
-        * @public
-        */
-        public isPaused(): boolean {
-
-            return this._isPaused;
-
-        }
-
-        /**
-        * The name of the timer.
-        * @property name
-        * @type String
-        * @default null
-        * @public 
-        */
-        public name: string = null;
-
-        /**
-        * The delay, in game clock units, that the timer will wait before firing the event
-        * @property delay
-        * @type Number
-        * @default 0
-        * @public
-        */
-        public delay: number = 0;
-
-        /**
-        * The number of times the timer will repeat before stopping.
-        * @property repeatCount
-        * @type Number
-        * @default 0
-        * @public
-        */
-        public repeatCount: number = 0;
-
-        /**
-        * Time elapsed on the current repetition
-        * @property _elapsed
-        * @type number
-        * @private
-        * @since 1.2.0
-        */
-        private _elapsed: number = 0;
-
-        /**
-        * Clock time on last frame, used to calculate frame length and time elapsed
-        * @property _lastElapsed
-        * @type number
-        * @private
-        * @since 1.2.0
-        */
-        private _lastElapsed: number;
-        
-        /**
-        * Checks the list of TimerEvents added and processes them based on their type.
-        * @method processEvents
-        * @param type {Number} The type of events to dispatch
-        * @private
-        */
-        private processEvents(type: number) {
-
-            if (type === TimerEvent.TIMER_START)
-            {
-                for (var i = 0; i &lt; this._startEvents.length; i++)
-                {
-                    this._startEvents[i].run();
-                }
-            }
-            else if (type === TimerEvent.TIMER_COUNT)
-            {
-                for (var i = 0; i &lt; this._countEvents.length; i++)
-                {
-                    this._countEvents[i].run();
-                }
-            }
-            else if (type === TimerEvent.TIMER_STOP)
-            {
-                for (var i = 0; i &lt; this._stopEvents.length; i++)
-                {
-                    this._stopEvents[i].run();
-                }
-            }
-
-        }
-
-        /**
-        * Internal update loop called by the Clock that this Timer belongs to.
-        * @method update
-        * @public
-        */
-        public update() {
-            var frameLength = this._clock.elapsed() - this._lastElapsed;
-
-            this._lastElapsed = this._clock.elapsed();
-
-            if ( this._isRunning ) {
-                this._elapsed += frameLength;
-            }
-
-            while ( this._elapsed &gt;= this.delay ) {
-                this._currentCount++;
-                this.processEvents( TimerEvent.TIMER_COUNT );
-                this._elapsed -= this.delay;
-
-                if ( this.repeatCount !== -1 &amp;&amp; this._currentCount &gt;= this.repeatCount ) {
-                    this.stop();
-                }
-            }
-
-            while ( this._elapsed &lt; 0 ) {
-                this._currentCount--;
-                this._elapsed += this.delay;
-
-                // Do not process events; they can happen when time flows forwards
-
-                if ( this._currentCount &lt; 0 ) {
-
-                    // Timer has regressed before its creation.
-                    // When time flows forward again, the Timer will probably
-                    // be restarted and repopulated.
-                    // There is a potential memory leak: if a Timer is created
-                    // for a single task, and has a TimerEvent that will
-                    // remove it upon completion, but the Timer is rewound to
-                    // before its creation, that removal will never fire.
-                    this.clear();
-                    this.stop();
-                }
-            }
-        }
-
-        /**
-        * Start the Timer. This will reset the timer and start it. The timer can only be started if it is in a stopped state.
-        * @method start
-        * @return {Kiwi.Time.Timer} this object.
-        * @public
-        */
-        public start(): Timer {
-
-            if (this._isStopped === true)
-            {
-                this._isRunning = true;
-                this._isPaused = false;
-                this._isStopped = false;
-
-                this._currentCount = 0;
-
-                this._elapsed = 0;
-                this._lastElapsed = this._clock.elapsed() || 0;
-
-                this.processEvents(TimerEvent.TIMER_START);
-            }
-
-            return this;
-        }
-
-        /**
-        * Stop the Timer. Only possible when the timer is running or paused.
-        * @method stop
-        * @return {Kiwi.Time.Timer} this object.
-        * @public
-        */
-        public stop():Timer {
-
-            if (this._isRunning === true || this._isPaused === true)
-            {
-                this._isRunning = false;
-                this._isPaused = false;
-                this._isStopped = true;
-
-                this.processEvents(TimerEvent.TIMER_STOP);
-            }
-
-            return this;
-
-        }
-
-        /**
-        * Pause the Timer. Only possible when the timer is running.
-        * @method pause
-        * @return {Kiwi.Time.Timer} this object.
-        * @public
-        */
-        public pause():Timer {
-
-            if (this._isRunning === true)
-            {
-                this._isRunning = false;
-                this._isPaused = true;
-            }
-
-            return this;
-        }
-
-        /**
-        * Resume the Timer. Only possible if the timer has been paused.
-        * @method resume
-        * @return {Kiwi.Time.Timer} this object.
-        * @public
-        */
-        public resume(): Timer {
-
-            if (this._isPaused === true)
-            {
-                this._isRunning = true;
-                this._isPaused = false;
-            }
-
-            return this;
-
-        }
-
-        /**
-        * Adds an existing TimerEvent object to this Timer.
-        * @method addTimerEvent
-        * @param {Kiwi.Time.TimerEvent} A TimerEvent object
-        * @return {Kiwi.Time.TimerEvent} The TimerEvent object
-        * @public
-        */
-        public addTimerEvent(event:TimerEvent):TimerEvent {
-
-            if (event.type === TimerEvent.TIMER_START)
-            {
-                this._startEvents.push(event);
-            }
-            else if (event.type === TimerEvent.TIMER_COUNT)
-            {
-                this._countEvents.push(event);
-            }
-            else if (event.type === TimerEvent.TIMER_STOP)
-            {
-                this._stopEvents.push(event);
-            }
-
-            return event;
-
-        }
-
-        /**
-        * Creates a new TimerEvent and adds it to this Timer
-        * @method createTimerEvent
-        * @param type {Number} The type of TimerEvent to create (TIMER_START, TIMER_COUNT or TIMER_STOP).
-        * @param callback {Function} The function to call when the TimerEvent fires.
-        * @param context {Function} The context in which the given function will run (usually &#x27;this&#x27;)
-        * @return {Kiwi.Time.TimerEvent} The newly created TimerEvent.
-        * @public
-        */
-        public createTimerEvent(type:number, callback, context):TimerEvent {
-
-            if (type === TimerEvent.TIMER_START)
-            {
-                this._startEvents.push(new TimerEvent(type, callback, context));
-                return this._startEvents[this._startEvents.length - 1];
-            }
-            else if (type === TimerEvent.TIMER_COUNT)
-            {
-                this._countEvents.push(new TimerEvent(type, callback, context));
-                return this._countEvents[this._countEvents.length - 1];
-            }
-            else if (type === TimerEvent.TIMER_STOP)
-            {
-                this._stopEvents.push(new TimerEvent(type, callback, context));
-                return this._stopEvents[this._stopEvents.length - 1];
-            }
-
-            return null;
-
-        }
-
-        /**
-        * Removes a TimerEvent object from this Timer
-        * @method removeTimerEvent
-        * @param {Kiwi.Time.TimerEvent} The TimerEvent to remove
-        * @return {boolean} True if the event was removed, otherwise false.
-        * @public
-        */
-        public removeTimerEvent(event:TimerEvent):boolean {
-
-            var removed = [];
-
-            if (event.type === TimerEvent.TIMER_START)
-            {
-                removed = this._startEvents.splice(this._startEvents.indexOf(event), 1);
-            }
-            else if (event.type === TimerEvent.TIMER_COUNT)
-            {
-                removed = this._countEvents.splice(this._countEvents.indexOf(event), 1);
-            }
-            else if (event.type === TimerEvent.TIMER_STOP)
-            {
-                removed = this._stopEvents.splice(this._stopEvents.indexOf(event), 1);
-            }
-
-            if (removed.length === 1)
-            {
-                return true;
-            }
-            else
-            {
-                return false;
-            }
-
-        }
-
-        /**
-        * Removes all TimerEvent objects from this Timer
-        * @method clear
-        * @param type {Number} The type of TimerEvents to remove. Set to zero to remove them all.
-        * @return {boolean} True if the event was removed, otherwise false.
-        * @public
-        */
-        public clear(type:number = 0) {
-
-            if (type === 0)
-            {
-                this._startEvents.length = 0;
-                this._countEvents.length = 0;
-                this._stopEvents.length = 0;
-            }
-            else if (type === TimerEvent.TIMER_START)
-            {
-                this._startEvents.length = 0;
-            }
-            else if (type === TimerEvent.TIMER_COUNT)
-            {
-                this._countEvents.length = 0;
-            }
-            else if (type === TimerEvent.TIMER_STOP)
-            {
-                this._stopEvents.length = 0;
-            }
-
-        }
-
-	    /**
-	    * Returns a string representation of this object.
-	    * @method toString
-	    * @return {string} a string representation of the instance.
-	    * @public
-        */
-        public toString(): string {
-
-            return &quot;[{Timer (name=&quot; + this.name + &quot; delay=&quot; + this.delay + &quot; repeatCount=&quot; + this.repeatCount + &quot; running=&quot; + this._isRunning + &quot;)}]&quot;;
-
-        }
-
-    }
+	/**
+	* The Timer class hooks into a game Clock and allows you run code at a specified point in game time.
+	* Use the start() method to start a timer. Add TimerEvents to set-up code to be run on the timer interval.
+	* Timer objects can run once or repeat at specified intervals to execute code on a schedule.
+	*
+	* @class Timer
+	* @namespace Kiwi.Time
+	* @constructor
+	* @param name {string} The name of the timer.
+	* @param clock {Kiwi.Time.Clock} The game clock instance this Timer is based on.
+	* @param delay {Number} The number of clock units to wait between firing events.
+	* @param [repeatCount=0] {Number} The number of times to repeat the timer before it is expired. If you don&#x27;t want it to ever expire, set a value of -1.
+	* @return {Kiwi.Time.Timer} This object.
+	*
+	*/
+	export class Timer {
+
+		constructor (name: string, clock: Clock, delay: number, repeatCount: number = 0) {
+
+			this._clock = clock;
+
+			this._startEvents = [];
+			this._countEvents = [];
+			this._stopEvents = [];
+
+			this.name = name;
+			this.delay = delay;
+			this.repeatCount = repeatCount;
+
+		}
+
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} &quot;Timer&quot;
+		* @public
+		*/
+		public objType() {
+			return &quot;Timer&quot;;
+		}
+
+		/**
+		* The number of times the timer has repeated so far.
+		* @property _currentCount
+		* @type Number
+		* @default 0 
+		* @private
+		*/
+		private _currentCount: number = 0;
+
+		/**
+		* Get the number of times the timer has repeated.
+		* @method getCurrentCount
+		* @return {Number}
+		* @public
+		*/
+		public currentCount(): number {
+
+			return this._currentCount;
+
+		}
+
+		/**
+		* A collection of the TimerEvents associated with TimerEvent.TIMER_START
+		* @property _startEvents
+		* @type Array
+		* @private
+		*/
+		private _startEvents:TimerEvent[] = null;
+
+		/**
+		* A collection of the TimerEvents associated with TimerEvent.TIMER_COUNT
+		* @property _countEvents
+		* @private
+		* @type Array
+		*/
+		private _countEvents:TimerEvent[] = null;
+
+		/**
+		* A collection of the TimerEvents associated with TimerEvent.TIMER_STOP
+		* @property _stopEvents
+		* @private
+		* @type Array
+		*/
+		private _stopEvents:TimerEvent[] = null;
+
+		/**
+		* The clock which this timer bases its timing on.
+		* @property _clock
+		* @type Kiwi.Time.Clock
+		* @private
+		*/
+		private _clock: Clock = null;
+
+		/**
+		* The time the last repeat occurred in clock units.
+		* @property _timeLastCount
+		* @type Number
+		* @private
+		* @deprecated Better time handling in 1.2.0 deprecates this data.
+		*/
+		private _timeLastCount: number = null;
+
+		/**
+		* Whether the timer is in a running state.
+		* @property _isRunning
+		* @type boolean
+		* @default false
+		* @private
+		*/
+		private _isRunning: boolean = false;
+
+		/**
+		* The Timers current state. True if the Timer is running, otherwise false.
+		* @method running
+		* @return {boolean} 
+		* @public
+		*/
+		public isRunning(): boolean {
+
+			return this._isRunning;
+
+		}
+
+		/**
+		* Whether the timer is in a stopped state.
+		* @property _isStopped
+		* @type boolean
+		* @default true 
+		* @private
+		*/
+		private _isStopped: boolean = true;
+
+		/**
+		* Whether the timer is in a stopped state.
+		* @method stopped
+		* @return {boolean} 
+		* @public
+		*/
+		public isStopped(): boolean {
+
+			return this._isStopped;
+
+		}
+
+		/**
+		* Whether the timer is in a paused state.
+		* @property _isPaused
+		* @type boolean
+		* @default false
+		* @private
+		*/
+		private _isPaused: boolean = false;
+
+		/**
+		* Whether the timer is in a paused state.
+		* @method paused
+		* @return {boolean} 
+		* @public
+		*/
+		public isPaused(): boolean {
+
+			return this._isPaused;
+
+		}
+
+		/**
+		* The name of the timer.
+		* @property name
+		* @type String
+		* @default null
+		* @public 
+		*/
+		public name: string = null;
+
+		/**
+		* The delay, in game clock units, that the timer will wait before firing the event
+		* @property delay
+		* @type Number
+		* @default 0
+		* @public
+		*/
+		public delay: number = 0;
+
+		/**
+		* The number of times the timer will repeat before stopping.
+		* @property repeatCount
+		* @type Number
+		* @default 0
+		* @public
+		*/
+		public repeatCount: number = 0;
+
+		/**
+		* Time elapsed on the current repetition
+		* @property _elapsed
+		* @type number
+		* @private
+		* @since 1.2.0
+		*/
+		private _elapsed: number = 0;
+
+		/**
+		* Clock time on last frame, used to calculate frame length and time elapsed
+		* @property _lastElapsed
+		* @type number
+		* @private
+		* @since 1.2.0
+		*/
+		private _lastElapsed: number;
+		
+		/**
+		* Checks the list of TimerEvents added and processes them based on their type.
+		* @method processEvents
+		* @param type {Number} The type of events to dispatch
+		* @private
+		*/
+		private processEvents(type: number) {
+
+			if (type === TimerEvent.TIMER_START)
+			{
+				for (var i = 0; i &lt; this._startEvents.length; i++)
+				{
+					this._startEvents[i].run();
+				}
+			}
+			else if (type === TimerEvent.TIMER_COUNT)
+			{
+				for (var i = 0; i &lt; this._countEvents.length; i++)
+				{
+					this._countEvents[i].run();
+				}
+			}
+			else if (type === TimerEvent.TIMER_STOP)
+			{
+				for (var i = 0; i &lt; this._stopEvents.length; i++)
+				{
+					this._stopEvents[i].run();
+				}
+			}
+
+		}
+
+		/**
+		* Internal update loop called by the Clock that this Timer belongs to.
+		* @method update
+		* @public
+		*/
+		public update() {
+			var frameLength = this._clock.elapsed() - this._lastElapsed;
+
+			this._lastElapsed = this._clock.elapsed();
+
+			if ( this._isRunning ) {
+				this._elapsed += frameLength;
+			}
+
+			while ( this._elapsed &gt;= this.delay ) {
+				this._currentCount++;
+				this.processEvents( TimerEvent.TIMER_COUNT );
+				this._elapsed -= this.delay;
+
+				if ( this.repeatCount !== -1 &amp;&amp; this._currentCount &gt;= this.repeatCount ) {
+					this.stop();
+				}
+			}
+
+			while ( this._elapsed &lt; 0 ) {
+				this._currentCount--;
+				this._elapsed += this.delay;
+
+				// Do not process events; they can happen when time flows forwards
+
+				if ( this._currentCount &lt; 0 ) {
+
+					// Timer has regressed before its creation.
+					// When time flows forward again, the Timer will probably
+					// be restarted and repopulated.
+					// There is a potential memory leak: if a Timer is created
+					// for a single task, and has a TimerEvent that will
+					// remove it upon completion, but the Timer is rewound to
+					// before its creation, that removal will never fire.
+					this.clear();
+					this.stop();
+				}
+			}
+		}
+
+		/**
+		* Start the Timer. This will reset the timer and start it. The timer can only be started if it is in a stopped state.
+		* @method start
+		* @return {Kiwi.Time.Timer} this object.
+		* @public
+		*/
+		public start(): Timer {
+
+			if (this._isStopped === true)
+			{
+				this._isRunning = true;
+				this._isPaused = false;
+				this._isStopped = false;
+
+				this._currentCount = 0;
+
+				this._elapsed = 0;
+				this._lastElapsed = this._clock.elapsed() || 0;
+
+				this.processEvents(TimerEvent.TIMER_START);
+			}
+
+			return this;
+		}
+
+		/**
+		* Stop the Timer. Only possible when the timer is running or paused.
+		* @method stop
+		* @return {Kiwi.Time.Timer} this object.
+		* @public
+		*/
+		public stop():Timer {
+
+			if (this._isRunning === true || this._isPaused === true)
+			{
+				this._isRunning = false;
+				this._isPaused = false;
+				this._isStopped = true;
+
+				this.processEvents(TimerEvent.TIMER_STOP);
+			}
+
+			return this;
+
+		}
+
+		/**
+		* Pause the Timer. Only possible when the timer is running.
+		* @method pause
+		* @return {Kiwi.Time.Timer} this object.
+		* @public
+		*/
+		public pause():Timer {
+
+			if (this._isRunning === true)
+			{
+				this._isRunning = false;
+				this._isPaused = true;
+			}
+
+			return this;
+		}
+
+		/**
+		* Resume the Timer. Only possible if the timer has been paused.
+		* @method resume
+		* @return {Kiwi.Time.Timer} this object.
+		* @public
+		*/
+		public resume(): Timer {
+
+			if (this._isPaused === true)
+			{
+				this._isRunning = true;
+				this._isPaused = false;
+			}
+
+			return this;
+
+		}
+
+		/**
+		* Adds an existing TimerEvent object to this Timer.
+		* @method addTimerEvent
+		* @param {Kiwi.Time.TimerEvent} A TimerEvent object
+		* @return {Kiwi.Time.TimerEvent} The TimerEvent object
+		* @public
+		*/
+		public addTimerEvent(event:TimerEvent):TimerEvent {
+
+			if (event.type === TimerEvent.TIMER_START)
+			{
+				this._startEvents.push(event);
+			}
+			else if (event.type === TimerEvent.TIMER_COUNT)
+			{
+				this._countEvents.push(event);
+			}
+			else if (event.type === TimerEvent.TIMER_STOP)
+			{
+				this._stopEvents.push(event);
+			}
+
+			return event;
+
+		}
+
+		/**
+		* Creates a new TimerEvent and adds it to this Timer
+		* @method createTimerEvent
+		* @param type {Number} The type of TimerEvent to create (TIMER_START, TIMER_COUNT or TIMER_STOP).
+		* @param callback {Function} The function to call when the TimerEvent fires.
+		* @param context {Function} The context in which the given function will run (usually &#x27;this&#x27;)
+		* @return {Kiwi.Time.TimerEvent} The newly created TimerEvent.
+		* @public
+		*/
+		public createTimerEvent(type:number, callback, context):TimerEvent {
+
+			if (type === TimerEvent.TIMER_START)
+			{
+				this._startEvents.push(new TimerEvent(type, callback, context));
+				return this._startEvents[this._startEvents.length - 1];
+			}
+			else if (type === TimerEvent.TIMER_COUNT)
+			{
+				this._countEvents.push(new TimerEvent(type, callback, context));
+				return this._countEvents[this._countEvents.length - 1];
+			}
+			else if (type === TimerEvent.TIMER_STOP)
+			{
+				this._stopEvents.push(new TimerEvent(type, callback, context));
+				return this._stopEvents[this._stopEvents.length - 1];
+			}
+
+			return null;
+
+		}
+
+		/**
+		* Removes a TimerEvent object from this Timer
+		* @method removeTimerEvent
+		* @param {Kiwi.Time.TimerEvent} The TimerEvent to remove
+		* @return {boolean} True if the event was removed, otherwise false.
+		* @public
+		*/
+		public removeTimerEvent(event:TimerEvent):boolean {
+
+			var removed = [];
+
+			if (event.type === TimerEvent.TIMER_START)
+			{
+				removed = this._startEvents.splice(this._startEvents.indexOf(event), 1);
+			}
+			else if (event.type === TimerEvent.TIMER_COUNT)
+			{
+				removed = this._countEvents.splice(this._countEvents.indexOf(event), 1);
+			}
+			else if (event.type === TimerEvent.TIMER_STOP)
+			{
+				removed = this._stopEvents.splice(this._stopEvents.indexOf(event), 1);
+			}
+
+			if (removed.length === 1)
+			{
+				return true;
+			}
+			else
+			{
+				return false;
+			}
+
+		}
+
+		/**
+		* Removes all TimerEvent objects from this Timer
+		* @method clear
+		* @param type {Number} The type of TimerEvents to remove. Set to zero to remove them all.
+		* @return {boolean} True if the event was removed, otherwise false.
+		* @public
+		*/
+		public clear(type:number = 0) {
+
+			if (type === 0)
+			{
+				this._startEvents.length = 0;
+				this._countEvents.length = 0;
+				this._stopEvents.length = 0;
+			}
+			else if (type === TimerEvent.TIMER_START)
+			{
+				this._startEvents.length = 0;
+			}
+			else if (type === TimerEvent.TIMER_COUNT)
+			{
+				this._countEvents.length = 0;
+			}
+			else if (type === TimerEvent.TIMER_STOP)
+			{
+				this._stopEvents.length = 0;
+			}
+
+		}
+
+		/**
+		* Returns a string representation of this object.
+		* @method toString
+		* @return {string} a string representation of the instance.
+		* @public
+		*/
+		public toString(): string {
+
+			return &quot;[{Timer (name=&quot; + this.name + &quot; delay=&quot; + this.delay + &quot; repeatCount=&quot; + this.repeatCount + &quot; running=&quot; + this._isRunning + &quot;)}]&quot;;
+
+		}
+
+	}
 
 }
+
     </pre>
 </div>
 
diff --git a/docs/files/src_time_TimerEvent.ts.html b/docs/files/src_time_TimerEvent.ts.html
index 938711a..74c5ec6 100644
--- a/docs/files/src_time_TimerEvent.ts.html
+++ b/docs/files/src_time_TimerEvent.ts.html
@@ -369,115 +369,116 @@ <h1 class="file-heading">File: src/time/TimerEvent.ts</h1>
 * @module Kiwi
 * @submodule Time
 *
-*/ 
+*/
 
 module Kiwi.Time {
 
-    /**
-    * A TimerEvent hooks into a Timer and is an object that is generated when you are wanting to executed a callback at a specific point in time. 
-    *
-    * @class TimerEvent
-    * @namespace Kiwi.Time
-    * @constructor
-    * @param type {Number} The type of TimerEvent that this is. 
-    * @param callback {Any} The method that is to be executed when the event occurs.
-    * @param context {Any} The context that the callback is to be called in.
-    * @return {Kiwi.Time.TimerEvent} This Object.
-    */
-    export class TimerEvent {
-         
-        constructor (type:number, callback, context) {
+	/**
+	* A TimerEvent hooks into a Timer and is an object that is generated when you are wanting to executed a callback at a specific point in time. 
+	*
+	* @class TimerEvent
+	* @namespace Kiwi.Time
+	* @constructor
+	* @param type {Number} The type of TimerEvent that this is. 
+	* @param callback {Any} The method that is to be executed when the event occurs.
+	* @param context {Any} The context that the callback is to be called in.
+	* @return {Kiwi.Time.TimerEvent} This Object.
+	*/
+	export class TimerEvent {
+		 
+		constructor (type:number, callback, context) {
 
-            this.type = type;
-            this._callback = callback;
-            this._callbackContext = context;
+			this.type = type;
+			this._callback = callback;
+			this._callbackContext = context;
 
-        }
+		}
 
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} &quot;TimerEvent&quot;
-        * @public
-        */
-        public objType() {
-            return &quot;TimerEvent&quot;;
-        }
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} &quot;TimerEvent&quot;
+		* @public
+		*/
+		public objType() {
+			return &quot;TimerEvent&quot;;
+		}
 
-        /**
-        * Name for the event fired when a timer starts.
-        * @property TIMER_START
-        * @type number
-        * @final
-        * @static
-        * @public
-        * @default 1
-        */
-        public static TIMER_START: number = 1;
+		/**
+		* Name for the event fired when a timer starts.
+		* @property TIMER_START
+		* @type number
+		* @final
+		* @static
+		* @public
+		* @default 1
+		*/
+		public static TIMER_START: number = 1;
 
-        /**
-        * Name for the event fired when a timer repeats.
-        * @property TIMER_COUNT
-        * @public
-        * @type string
-        * @final
-        * @static
-        * @default 2
-        */
-        public static TIMER_COUNT: number = 2;
+		/**
+		* Name for the event fired when a timer repeats.
+		* @property TIMER_COUNT
+		* @public
+		* @type string
+		* @final
+		* @static
+		* @default 2
+		*/
+		public static TIMER_COUNT: number = 2;
 
-        /**
-        * Name for the event fired when a timer stops.
-        * @property TIMER_STOP
-        * @type string
-        * @final
-        * @static
-        * @public
-        * @default 3
-        */
-        public static TIMER_STOP: number = 3;
+		/**
+		* Name for the event fired when a timer stops.
+		* @property TIMER_STOP
+		* @type string
+		* @final
+		* @static
+		* @public
+		* @default 3
+		*/
+		public static TIMER_STOP: number = 3;
 
-        /**
-        * The callback to be called when this TimerEvent triggers
-        * @property _callback
-        * @type Function
-        * @private
-        */
-        private _callback = null;
+		/**
+		* The callback to be called when this TimerEvent triggers
+		* @property _callback
+		* @type Function
+		* @private
+		*/
+		private _callback = null;
 
-        /**
-        * The context in which the callback will be fired
-        * @property _callbackContext
-        * @type Function
-        * @private
-        */
-        private _callbackContext;
+		/**
+		* The context in which the callback will be fired
+		* @property _callbackContext
+		* @type Function
+		* @private
+		*/
+		private _callbackContext;
 
-        /**
-        * The type of TimerEvent
-        * @property type
-        * @type Function 
-        * @public
-        */
-        public type: number = 0;
-        
-        /**
-        * Fires the callback associated with this TimerEvent
-        * @method run
-        * @public
-        */
-        public run() {
+		/**
+		* The type of TimerEvent
+		* @property type
+		* @type Function 
+		* @public
+		*/
+		public type: number = 0;
+		
+		/**
+		* Fires the callback associated with this TimerEvent
+		* @method run
+		* @public
+		*/
+		public run() {
 
-            if (this._callback)
-            {
-                this._callback.apply(this._callbackContext);
-            }
+			if (this._callback)
+			{
+				this._callback.apply(this._callbackContext);
+			}
 
-        }
+		}
 
-    }
+	}
 
 }
+
     </pre>
 </div>
 
diff --git a/docs/files/src_utils_Canvas.ts.html b/docs/files/src_utils_Canvas.ts.html
index 57c1438..462ee5e 100644
--- a/docs/files/src_utils_Canvas.ts.html
+++ b/docs/files/src_utils_Canvas.ts.html
@@ -371,344 +371,345 @@ <h1 class="file-heading">File: src/utils/Canvas.ts</h1>
 */
 module Kiwi.Utils {
 
-    /**
-    * Creates and the manages a Canvas DOMElement.
-    * 
-    * @class Canvas
-    * @namespace Kiwi.Utils
-    * @constructor
-    * @param width {Number} The width of the canvas.
-    * @param height {Number} The height of the canvas.
-    * @param [visible=true] {boolean} If the canvas is visible or not.
-    * @param [offScreen=false] {boolean} If the canvas is designed to be offscreen or not.
-    * @return {Kiwi.Utils.Canvas} 
-    *
-    */
-    export class Canvas {
-         
-        constructor (width: number, height: number, visible: boolean = true, offScreen: boolean = false) {
-
-            this.domElement = &lt;HTMLCanvasElement&gt; document.createElement(&quot;canvas&quot;);
-            this.domElement.width = width;
-            this.domElement.height = height;
-
-            this._width = width;
-            this._height = height;
-
-            this.context = this.domElement.getContext(&quot;2d&quot;);
-
-            this._offScreen = offScreen;
-            this._visible = visible;
-
-            if (visible === false)
-            {
-                this.domElement.style.display = &quot;none&quot;;
-            }
-
-            this._bgColor = new Kiwi.Utils.Color( 0, 0, 0 );
-
-        }
-
-        /**
-        * The width of this canvas.
-        * @property _width
-        * @type number
-        * @private
-        */
-        private _width: number;
-
-        /**
-        * The width of this canvas.
-        * @property width
-        * @type number
-        * @public
-        */
-        public set width(value: number) {
-            this._width = value;
-            this._updatedSize();
-        }
-        public get width(): number {
-            return this._width;
-        }
-
-        /**
-        * The height of this canvas.
-        * @property _height
-        * @type number
-        * @private
-        */
-        private _height: number;
-
-        /**
-        * The height of this canvas.
-        * @property height
-        * @type number
-        * @private
-        */
-        public set height(value: number) {
-            this._height = value;
-            this._updatedSize();
-        }
-        public get height(): number {
-            return this._height;
-        }
-
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} &quot;Canvas&quot;
-        * @public
-        */
-        public objType() {
-            return &quot;Canvas&quot;;
-        }
-
-        /**
-        * The canvas DOM element.
-        * @property domElement
-        * @type HTMLCanvasElement
-        * @public
-	    */
-        public domElement = &lt;HTMLCanvasElement&gt; null;
-
-        /**
-        * The 2D rendering context that is used to render anything to this canvas.
-        * @property _context
-        * @type CanvasRenderingContext2D
-	    * @public
-        */
-        public context = &lt;CanvasRenderingContext2D&gt; null;
-
-        /**
-        * If the canvas element is visible or not.
-        * @property _visible
-        * @type boolean
-        * @private
-	    */
-        private _visible = true;
-
-        /**
-        * If the canvas is offscreen or not.
-        * @property _offScreen
-        * @type boolean
-        * @private
-	    */
-        private _offScreen = false;
-
-        /**
-        * The method to use when clearing the canvas.
-        * @property _clearMode
-        * @type Number
-        * @private
-	    */
-        private _clearMode: number = 1;
-
-        /**
-        * A STATIC property that holds the number associated with no clear mode.
-        * @property CLEARMODE_NONE
-        * @type Number
-        * @static
-        * @final
-        * @default 0
-        * @public
+	/**
+	* Creates and the manages a Canvas DOMElement.
+	* 
+	* @class Canvas
+	* @namespace Kiwi.Utils
+	* @constructor
+	* @param width {Number} The width of the canvas.
+	* @param height {Number} The height of the canvas.
+	* @param [visible=true] {boolean} If the canvas is visible or not.
+	* @param [offScreen=false] {boolean} If the canvas is designed to be offscreen or not.
+	* @return {Kiwi.Utils.Canvas} 
+	*
+	*/
+	export class Canvas {
+
+		constructor (width: number, height: number, visible: boolean = true, offScreen: boolean = false) {
+
+			this.domElement = &lt;HTMLCanvasElement&gt; document.createElement(&quot;canvas&quot;);
+			this.domElement.width = width;
+			this.domElement.height = height;
+
+			this._width = width;
+			this._height = height;
+
+			this.context = this.domElement.getContext(&quot;2d&quot;);
+
+			this._offScreen = offScreen;
+			this._visible = visible;
+
+			if (visible === false)
+			{
+				this.domElement.style.display = &quot;none&quot;;
+			}
+
+			this._bgColor = new Kiwi.Utils.Color( 0, 0, 0 );
+
+		}
+
+		/**
+		* The width of this canvas.
+		* @property _width
+		* @type number
+		* @private
 		*/
-        public static CLEARMODE_NONE: number = 0;
-
-        /**
-        * A STATIC property that holds the number associated with the clear mode that uses the clearRect method to clear the canvas.
-        * @property CLEARMODE_CLEARRECT
-        * @type Number
-        * @static
-        * @final
-        * @public
-        * @default 1
+		private _width: number;
+
+		/**
+		* The width of this canvas.
+		* @property width
+		* @type number
+		* @public
+		*/
+		public set width(value: number) {
+			this._width = value;
+			this._updatedSize();
+		}
+		public get width(): number {
+			return this._width;
+		}
+
+		/**
+		* The height of this canvas.
+		* @property _height
+		* @type number
+		* @private
+		*/
+		private _height: number;
+
+		/**
+		* The height of this canvas.
+		* @property height
+		* @type number
+		* @private
+		*/
+		public set height(value: number) {
+			this._height = value;
+			this._updatedSize();
+		}
+		public get height(): number {
+			return this._height;
+		}
+
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} &quot;Canvas&quot;
+		* @public
+		*/
+		public objType() {
+			return &quot;Canvas&quot;;
+		}
+
+		/**
+		* The canvas DOM element.
+		* @property domElement
+		* @type HTMLCanvasElement
+		* @public
+		*/
+		public domElement = &lt;HTMLCanvasElement&gt; null;
+
+		/**
+		* The 2D rendering context that is used to render anything to this canvas.
+		* @property _context
+		* @type CanvasRenderingContext2D
+		* @public
+		*/
+		public context = &lt;CanvasRenderingContext2D&gt; null;
+
+		/**
+		* If the canvas element is visible or not.
+		* @property _visible
+		* @type boolean
+		* @private
 		*/
-        public static CLEARMODE_CLEARRECT: number = 1;
-
-        /**
-        * A STATIC property that holds the number associated with the clear mode that uses a filled rectangle to clear the canvas.
-        * @property CLEARMODE_FILLRECT 
-        * @type Number
-        * @static
-        * @final
-        * @public
-        * @default 2
+		private _visible = true;
+
+		/**
+		* If the canvas is offscreen or not.
+		* @property _offScreen
+		* @type boolean
+		* @private
+		*/
+		private _offScreen = false;
+
+		/**
+		* The method to use when clearing the canvas.
+		* @property _clearMode
+		* @type Number
+		* @private
+		*/
+		private _clearMode: number = 1;
+
+		/**
+		* A STATIC property that holds the number associated with no clear mode.
+		* @property CLEARMODE_NONE
+		* @type Number
+		* @static
+		* @final
+		* @default 0
+		* @public
+		*/
+		public static CLEARMODE_NONE: number = 0;
+
+		/**
+		* A STATIC property that holds the number associated with the clear mode that uses the clearRect method to clear the canvas.
+		* @property CLEARMODE_CLEARRECT
+		* @type Number
+		* @static
+		* @final
+		* @public
+		* @default 1
 		*/
-        public static CLEARMODE_FILLRECT: number = 2;
-
-        /**
-        * A STATIC property that holds the number associated with the clear mode that uses the filled alpha rectangle method.
-        * @property CLEARMODE_FILLRECT_ALPHA
-        * @type Number
-        * @static
-        * @final
-        * @public
-        * @default 3
+		public static CLEARMODE_CLEARRECT: number = 1;
+
+		/**
+		* A STATIC property that holds the number associated with the clear mode that uses a filled rectangle to clear the canvas.
+		* @property CLEARMODE_FILLRECT 
+		* @type Number
+		* @static
+		* @final
+		* @public
+		* @default 2
 		*/
-        public static CLEARMODE_FILLRECT_ALPHA: number = 3;
-
-        /**
-        * The background color to use clearing the canvas using a filled rectangle approach.
-        * You may set this with any valid Kiwi.Utils.Color parameter.
-        * If you set with multiple parameters, place them inside an array.
-        * @property bgColor
-        * @type String
-        * @default &quot;#000000&quot;
-        * @public
-        */
-        public get bgColor(): any {
-            return &quot;#&quot; + this._bgColor.getHex();
-        }
-
-        public set bgColor( value: any ) {
-            if ( !Kiwi.Utils.Common.isArray( value ) ) {
-                value = [ value ];
-            }
-            this._bgColor.set.apply( this._bgColor, value );
-        }
-
-        /**
-        * Background color object.
-        * @property _bgColor
-        * @type Kiwi.Utils.Color
-        * @private
-        * @since 1.2.0
-        */
-        private _bgColor: Kiwi.Utils.Color;
-
-        /**
-        * Updates the width/height on the canvas DOM element when either one of its sizes are updated.
-        * @method _updatedSize
-        * @private
-        */
-        private _updatedSize() {
-
-            this.domElement.width = this._width;
-            this.domElement.height = this._height;
-
-        }
-
-        /**
-        * Used to remove the canvas element completely along with this class. [NEEDS IMPLEMENTATION]
-        * @method destroy
-        * @public
+		public static CLEARMODE_FILLRECT: number = 2;
+
+		/**
+		* A STATIC property that holds the number associated with the clear mode that uses the filled alpha rectangle method.
+		* @property CLEARMODE_FILLRECT_ALPHA
+		* @type Number
+		* @static
+		* @final
+		* @public
+		* @default 3
 		*/
-        public destroy() {
-
-            if (this._offScreen === false)
-            {
-                this.domElement.style.display = &quot;none&quot;;
-              
-            }
-
-        }
-
-        /**
-        * If the canvas element is visible or not.
-        * @property visible
-        * @type boolean
-        * @default true
-        * @public
-        */
-        public set visible(value: boolean) {
-
-            if (value !== null &amp;&amp; value !== this._visible)
-            {
-                this._visible = value;
-
-                if (value === true)
-                {
-                    this.domElement.style.display = &quot;block&quot;;
-
-                }
-                else
-                {
-                    this.domElement.style.display = &quot;none&quot;;
-                }
-            }
-
-        }
-        public get visible(): boolean {
-
-            return this._visible;
-
-        }
-
-        /** 
-        * The clearmode the is to be used when clearing the canvas.
-        * @property clearMode
-        * @type Number
-        * @default 1
-        * @public 
-        */
-        public set clearMode(value: number) {
-
-            if (value !== null &amp;&amp; value !== this._clearMode &amp;&amp; value &gt;= Kiwi.Utils.Canvas.CLEARMODE_NONE &amp;&amp; value &lt;= Kiwi.Utils.Canvas.CLEARMODE_FILLRECT_ALPHA)
-            {
-                this._clearMode = value;
-            }
-
-        }
-        public get clearMode(): number {
-
-            return this._clearMode;
-
-        }
-
-        /**
-        * Clears the canvas using the method specified by the clearMode property.
-        * @method clear
-        * @public
+		public static CLEARMODE_FILLRECT_ALPHA: number = 3;
+
+		/**
+		* The background color to use clearing the canvas using a filled rectangle approach.
+		* You may set this with any valid Kiwi.Utils.Color parameter.
+		* If you set with multiple parameters, place them inside an array.
+		* @property bgColor
+		* @type String
+		* @default &quot;#000000&quot;
+		* @public
 		*/
-        public clear() {
-            
-		    if (this._clearMode === Canvas.CLEARMODE_NONE) {
-                //  Do nothing
-		    } else if (this._clearMode === Canvas.CLEARMODE_CLEARRECT) {
-                //  Clear Rect
-			    this.context.clearRect(0, 0, this.domElement.width, this.domElement.height);
-			    
-		    } else if (this._clearMode === Canvas.CLEARMODE_FILLRECT) {
-                //  Fill Rect Solid
-			    this.context.fillStyle = this.bgColor;
-			    this.context.fillRect(0, 0, this.domElement.width, this.domElement.height);
-                
-		    } else if (this._clearMode === Canvas.CLEARMODE_FILLRECT_ALPHA) {
-                //  Clear Rect + Fill Rect (only use if bgColor contains alpha &lt; 255)
-			    this.context.clearRect(0, 0, this.domElement.width, this.domElement.height);
-			    this.context.fillStyle = this.bgColor;
-			    this.context.fillRect(0, 0, this.domElement.width, this.domElement.height);
-		    }
-
-        }
-
-        /**
-        * Returns the canvas current image data as PNG.
-        * @method saveAsPNG
-        * @return String
-        * @public
+		public get bgColor(): any {
+			return &quot;#&quot; + this._bgColor.getHex();
+		}
+
+		public set bgColor( value: any ) {
+			if ( !Kiwi.Utils.Common.isArray( value ) ) {
+				value = [ value ];
+			}
+			this._bgColor.set.apply( this._bgColor, value );
+		}
+
+		/**
+		* Background color object.
+		* @property _bgColor
+		* @type Kiwi.Utils.Color
+		* @private
+		* @since 1.2.0
 		*/
-        public saveAsPNG() {
+		private _bgColor: Kiwi.Utils.Color;
 
-            return this.domElement.toDataURL();
+		/**
+		* Updates the width/height on the canvas DOM element when either one of its sizes are updated.
+		* @method _updatedSize
+		* @private
+		*/
+		private _updatedSize() {
+
+			this.domElement.width = this._width;
+			this.domElement.height = this._height;
+
+		}
 
-        }
+		/**
+		* Used to remove the canvas element completely along with this class. [NEEDS IMPLEMENTATION]
+		* @method destroy
+		* @public
+		*/
+		public destroy() {
+
+			if (this._offScreen === false)
+			{
+				this.domElement.style.display = &quot;none&quot;;
+			  
+			}
+
+		}
+
+		/**
+		* If the canvas element is visible or not.
+		* @property visible
+		* @type boolean
+		* @default true
+		* @public
+		*/
+		public set visible(value: boolean) {
 
-	    /**
-	    * Returns a string representation of this object.
-	    * @method toString
-	    * @return {string} a string representation of the instance.
-        * @public
-	    */
-	    public toString():string {
+			if (value !== null &amp;&amp; value !== this._visible)
+			{
+				this._visible = value;
+
+				if (value === true)
+				{
+					this.domElement.style.display = &quot;block&quot;;
+
+				}
+				else
+				{
+					this.domElement.style.display = &quot;none&quot;;
+				}
+			}
+
+		}
+		public get visible(): boolean {
+
+			return this._visible;
+
+		}
+
+		/** 
+		* The clearmode the is to be used when clearing the canvas.
+		* @property clearMode
+		* @type Number
+		* @default 1
+		* @public 
+		*/
+		public set clearMode(value: number) {
+
+			if (value !== null &amp;&amp; value !== this._clearMode &amp;&amp; value &gt;= Kiwi.Utils.Canvas.CLEARMODE_NONE &amp;&amp; value &lt;= Kiwi.Utils.Canvas.CLEARMODE_FILLRECT_ALPHA)
+			{
+				this._clearMode = value;
+			}
+
+		}
+		public get clearMode(): number {
+
+			return this._clearMode;
+
+		}
+
+		/**
+		* Clears the canvas using the method specified by the clearMode property.
+		* @method clear
+		* @public
+		*/
+		public clear() {
+			
+			if (this._clearMode === Canvas.CLEARMODE_NONE) {
+				//  Do nothing
+			} else if (this._clearMode === Canvas.CLEARMODE_CLEARRECT) {
+				//  Clear Rect
+				this.context.clearRect(0, 0, this.domElement.width, this.domElement.height);
+				
+			} else if (this._clearMode === Canvas.CLEARMODE_FILLRECT) {
+				//  Fill Rect Solid
+				this.context.fillStyle = this.bgColor;
+				this.context.fillRect(0, 0, this.domElement.width, this.domElement.height);
+				
+			} else if (this._clearMode === Canvas.CLEARMODE_FILLRECT_ALPHA) {
+				//  Clear Rect + Fill Rect (only use if bgColor contains alpha &lt; 255)
+				this.context.clearRect(0, 0, this.domElement.width, this.domElement.height);
+				this.context.fillStyle = this.bgColor;
+				this.context.fillRect(0, 0, this.domElement.width, this.domElement.height);
+			}
+
+		}
+
+		/**
+		* Returns the canvas current image data as PNG.
+		* @method saveAsPNG
+		* @return String
+		* @public
+		*/
+		public saveAsPNG() {
+
+			return this.domElement.toDataURL();
+
+		}
+
+		/**
+		* Returns a string representation of this object.
+		* @method toString
+		* @return {string} a string representation of the instance.
+		* @public
+		*/
+		public toString():string {
 		
-		    return &quot;[{Canvas (width=&quot; + this.width + &quot; height=&quot; + this.height + &quot; visible=&quot; + this.visible + &quot; offScreen=&quot; + this._offScreen + &quot; clearMode=&quot; + this.clearMode + &quot;)}]&quot;;
+			return &quot;[{Canvas (width=&quot; + this.width + &quot; height=&quot; + this.height + &quot; visible=&quot; + this.visible + &quot; offScreen=&quot; + this._offScreen + &quot; clearMode=&quot; + this.clearMode + &quot;)}]&quot;;
 
-	    }
+		}
 
-    }
+	}
 
 }
+
     </pre>
 </div>
 
diff --git a/docs/files/src_utils_Common.ts.html b/docs/files/src_utils_Common.ts.html
index a0946c0..1e79d2a 100644
--- a/docs/files/src_utils_Common.ts.html
+++ b/docs/files/src_utils_Common.ts.html
@@ -374,328 +374,328 @@ <h1 class="file-heading">File: src/utils/Common.ts</h1>
 
 module Kiwi.Utils {
 
-    /**
-    * Methods to assist in working with Structs.
-    * A lot of the functions in this class are Copyright 2012 Mauricio Santos and used with permission.
-    * His work is licensed under the Apache License, Version 2.0 (the &quot;License&quot;)
-    *
-    * @class Common
-    * @namespace Kiwi.Utils
-    * @static
-    *
-    * @author Mauricio Santos
-    */
-    export class Common {
-
-        /**
-        * Default function to compare element order.
-        * @method defaultCompare
-        * @param {Any} a.
-        * @param {Any} b.
-        * @return {Number}
-        * @static
-        */
-        public static defaultCompare(a, b) {
-
-            if (a &lt; b)
-            {
-                return -1;
-            }
-            else if (a === b)
-            {
-                return 0;
-            }
-            else
-            {
-                return 1;
-            }
-
-        }
-
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} &quot;Common&quot;
-        * @public
-        */
-        public objType() {
-            return &quot;Common&quot;;
-        }
-
-        /**
-        * Default function to test equality.
-        * @method defaultEquals
-        * @param {Any} a
-        * @param {Any} b
-        * @return {boolean}
-        * @static
-        * @public
-        */
-        public static defaultEquals(a, b) {
-
-            return a === b;
-
-        }
-
-        /**
-        * Default function to convert an object to a string.
-        * @method defaultToString
-        * @param item {Any}
-        * @return {Any}
-        * @static
-        * @public
-        */
-        public static defaultToString(item) {
-
-            if (item === null)
-            {
-                return &#x27;KIWI_NULL&#x27;;
-            }
-            else if (Kiwi.Utils.Common.isUndefined(item))
-            {
-                return &#x27;KIWI_UNDEFINED&#x27;;
-            }
-            else if (Kiwi.Utils.Common.isString(item))
-            {
-                return item;
-            }
-            else
-            {
-                return item.toString();
-            }
-
-        }
-
-        /**
-        * Returns a boolean indicating whether x is between two parameters passed.
-        *
-        * @method isBetween
-        * @param x {Number} The values to be checked
-        * @param min {Number} The minimum value 
-        * @param max {Number} The maximum value
-        * @return {Boolean} 
-        * @static
-        * @public
-        */
-        public static isBetween(x, min, max):boolean {
-
-            return (x &gt; min &amp;&amp; x &lt; max);
-
-        }
-
-        /**
-        * Checks if the given argument is a function.
-        * @method isFunction
-        * @param {Any} func.
-        * @return {boolean}
-        * @static
-        * @public
-        */
-        public static isFunction(func) {
-
-            return (typeof func) === &#x27;function&#x27;;
-
-        }
-
-        /**
-        * Checks if the given value is numeric.
-        * @method isNumeric
-        * @param value {Any}
-        * @return {Boolean}
-        * @static
-        * @public
-        */
-        public static isNumeric(value) {
-
-            return !isNaN(value);
-
-        }
-
-        /**
-        * Checks if the given argument is undefined.
-        * @method isUndefined
-        * @param {Any} obj
-        * @return {boolean}
-        * @static
-        * @public
-        */
-        public static isUndefined(obj) {
-
-            return (typeof obj) === &#x27;undefined&#x27;;
-
-        }
-
-        /**
-        * Checks if the given argument is a string.
-        * @method isString
-        * @param {Any} obj
-        * @return {boolean}
-        * @static
-        * @public
-        */
-        public static isString(obj) {
-
-            return Object.prototype.toString.call(obj) === &#x27;[object String]&#x27;;
-
-        }
-
-        /**
-        * Checks if the given argument is a array.
-        * @method isArray
-        * @param {Any} obj
-        * @return {boolean}
-        * @static
-        * @public
-        */
-        public static isArray(obj) {
-
-            return Object.prototype.toString.call(obj) === &quot;[object Array]&quot;;
-
-        }
-
-        /**
-        * Checks if the given argument is an object.
-        * @method isObject 
-        * @param {Any} obj
-        * @return {boolean}
-        * @static
-        * @public
-        */
-        public static isObject(obj) {
-            return Object.prototype.toString.call(obj) === &quot;[object Object]&quot;;
-        }
-
-        /**
-        * Reverses a compare function.
-        * @method reverseCompareFunction
-        * @param {Any} compareFunction
-        * @return {Number}
-        * @static
-        * @public
-        */
-        public static reverseCompareFunction(compareFunction) {
-
-            if (!Kiwi.Utils.Common.isFunction(compareFunction))
-            {
-                return function (a, b) {
-                    if (a &lt; b)
-                    {
-                        return 1;
-                    }
-                    else if (a === b)
-                    {
-                        return 0;
-                    }
-                    else
-                    {
-                        return -1;
-                    }
-                };
-            }
-            else
-            {
-                return function (d, v) {
-                    return compareFunction(d, v) * -1;
-                };
-            }
-
-        }
-
-        /**
-        * Returns an equal function given a compare function.
-        * @method compareToEquals
-        * @param {Any} compareFunction
-        * @return {boolean}
-        * @static
-        * @public
-        */
-        public static compareToEquals(compareFunction) {
-
-            return function (a, b) {
-                return compareFunction(a, b) === 0;
-            };
-
-        }
-
-        /**
-        * Shuffles the contents of an array given into a random order.
-        * @method shuffleArray
-        * @param array {Any}
-        * @return {Any} What you passed but the with the contents in a new order.
-        * @static
-        * @public
-        */
-        public static shuffleArray(array) {
-
-            for (var i = array.length - 1; i &gt; 0; i--)
-            {
-                var j = Math.floor(Math.random() * (i + 1));
-                var temp = array[i];
-                array[i] = array[j];
-                array[j] = temp;
-            }
-
-            return array;
-
-        }
-
-        /**
-        * An array containing all of the base2sizes that are allowed.
-        * This is used when creating a new TextureAtlas/or resizing a Image to be rendered in WebGL.
-        * @property base2Sizes
-        * @type number[]
-        * @public
-        * @static
-        */
-        public static base2Sizes: number[] = [2, 4, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096];
-
-        /**
-        * A method that checks to see if an Image or Canvas that is passed has base2 proportions. 
-        * If it doesn&#x27;t the image is created on a Canvas and that Canvas is returned.
-        * Used mainly when creating TextureAtlases for WebGL. 
-        * @method convertToBase2
-        * @param imageFile {HTMLImageElement/HTMLCanvasElement} The image or canvas element that is to be converted into a base2size. 
-        * @return {HTMLImageElement/HTMLCanvasElement} The image that was passed (if it was already at base2 dimensions) or a new canvas element if it wasn&#x27;t.
-        * @static
-        * @public
-        */
-        public static convertToBase2(image: any): any {
-            
-            //Get the width/height
-            var width = image.width;
-            var height = image.height
-
-            //Check to see if the width is base2
-            if (this.base2Sizes.indexOf(width) == -1) {
-                var i = 0;
-                while (width &gt; this.base2Sizes[i]) i++;
-                width = this.base2Sizes[i];
-            }
-
-            //Check to see if the height is base2
-            if (this.base2Sizes.indexOf(height) == -1) {
-                var i = 0;
-                while (height &gt; this.base2Sizes[i]) i++;
-                height = this.base2Sizes[i];
-            }
-
-
-            //If either of them did not have a base2 size then create a canvas and create a new canvas.
-            if (image.width !== width || image.height !== height) {
-
-                //Is it already a canvas?
-                var canvas = document.createElement(&#x27;canvas&#x27;);
-                canvas.width = width;
-                canvas.height = height;
-                canvas.getContext(&quot;2d&quot;).drawImage(image, 0, 0);
-
-                return canvas;
-            }
-
-            return image;
-        }
-
-    }
+	/**
+	* Methods to assist in working with Structs.
+	* A lot of the functions in this class are Copyright 2012 Mauricio Santos and used with permission.
+	* His work is licensed under the Apache License, Version 2.0 (the &quot;License&quot;)
+	*
+	* @class Common
+	* @namespace Kiwi.Utils
+	* @static
+	*
+	* @author Mauricio Santos
+	*/
+	export class Common {
+
+		/**
+		* Default function to compare element order.
+		* @method defaultCompare
+		* @param {Any} a.
+		* @param {Any} b.
+		* @return {Number}
+		* @static
+		*/
+		public static defaultCompare(a, b) {
+
+			if (a &lt; b)
+			{
+				return -1;
+			}
+			else if (a === b)
+			{
+				return 0;
+			}
+			else
+			{
+				return 1;
+			}
+
+		}
+
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} &quot;Common&quot;
+		* @public
+		*/
+		public objType() {
+			return &quot;Common&quot;;
+		}
+
+		/**
+		* Default function to test equality.
+		* @method defaultEquals
+		* @param {Any} a
+		* @param {Any} b
+		* @return {boolean}
+		* @static
+		* @public
+		*/
+		public static defaultEquals(a, b) {
+
+			return a === b;
+
+		}
+
+		/**
+		* Default function to convert an object to a string.
+		* @method defaultToString
+		* @param item {Any}
+		* @return {Any}
+		* @static
+		* @public
+		*/
+		public static defaultToString(item) {
+
+			if (item === null)
+			{
+				return &#x27;KIWI_NULL&#x27;;
+			}
+			else if (Kiwi.Utils.Common.isUndefined(item))
+			{
+				return &#x27;KIWI_UNDEFINED&#x27;;
+			}
+			else if (Kiwi.Utils.Common.isString(item))
+			{
+				return item;
+			}
+			else
+			{
+				return item.toString();
+			}
+
+		}
+
+		/**
+		* Returns a boolean indicating whether x is between two parameters passed.
+		*
+		* @method isBetween
+		* @param x {Number} The values to be checked
+		* @param min {Number} The minimum value 
+		* @param max {Number} The maximum value
+		* @return {Boolean} 
+		* @static
+		* @public
+		*/
+		public static isBetween(x, min, max):boolean {
+
+			return (x &gt; min &amp;&amp; x &lt; max);
+
+		}
+
+		/**
+		* Checks if the given argument is a function.
+		* @method isFunction
+		* @param {Any} func.
+		* @return {boolean}
+		* @static
+		* @public
+		*/
+		public static isFunction(func) {
+
+			return (typeof func) === &#x27;function&#x27;;
+
+		}
+
+		/**
+		* Checks if the given value is numeric.
+		* @method isNumeric
+		* @param value {Any}
+		* @return {Boolean}
+		* @static
+		* @public
+		*/
+		public static isNumeric(value) {
+
+			return !isNaN(value);
+
+		}
+
+		/**
+		* Checks if the given argument is undefined.
+		* @method isUndefined
+		* @param {Any} obj
+		* @return {boolean}
+		* @static
+		* @public
+		*/
+		public static isUndefined(obj) {
+
+			return (typeof obj) === &#x27;undefined&#x27;;
+
+		}
+
+		/**
+		* Checks if the given argument is a string.
+		* @method isString
+		* @param {Any} obj
+		* @return {boolean}
+		* @static
+		* @public
+		*/
+		public static isString(obj) {
+
+			return Object.prototype.toString.call(obj) === &#x27;[object String]&#x27;;
+
+		}
+
+		/**
+		* Checks if the given argument is a array.
+		* @method isArray
+		* @param {Any} obj
+		* @return {boolean}
+		* @static
+		* @public
+		*/
+		public static isArray(obj) {
+
+			return Object.prototype.toString.call(obj) === &quot;[object Array]&quot;;
+
+		}
+
+		/**
+		* Checks if the given argument is an object.
+		* @method isObject 
+		* @param {Any} obj
+		* @return {boolean}
+		* @static
+		* @public
+		*/
+		public static isObject(obj) {
+			return Object.prototype.toString.call(obj) === &quot;[object Object]&quot;;
+		}
+
+		/**
+		* Reverses a compare function.
+		* @method reverseCompareFunction
+		* @param {Any} compareFunction
+		* @return {Number}
+		* @static
+		* @public
+		*/
+		public static reverseCompareFunction(compareFunction) {
+
+			if (!Kiwi.Utils.Common.isFunction(compareFunction))
+			{
+				return function (a, b) {
+					if (a &lt; b)
+					{
+						return 1;
+					}
+					else if (a === b)
+					{
+						return 0;
+					}
+					else
+					{
+						return -1;
+					}
+				};
+			}
+			else
+			{
+				return function (d, v) {
+					return compareFunction(d, v) * -1;
+				};
+			}
+
+		}
+
+		/**
+		* Returns an equal function given a compare function.
+		* @method compareToEquals
+		* @param {Any} compareFunction
+		* @return {boolean}
+		* @static
+		* @public
+		*/
+		public static compareToEquals(compareFunction) {
+
+			return function (a, b) {
+				return compareFunction(a, b) === 0;
+			};
+
+		}
+
+		/**
+		* Shuffles the contents of an array given into a random order.
+		* @method shuffleArray
+		* @param array {Any}
+		* @return {Any} What you passed but the with the contents in a new order.
+		* @static
+		* @public
+		*/
+		public static shuffleArray(array) {
+
+			for (var i = array.length - 1; i &gt; 0; i--)
+			{
+				var j = Math.floor(Math.random() * (i + 1));
+				var temp = array[i];
+				array[i] = array[j];
+				array[j] = temp;
+			}
+
+			return array;
+
+		}
+
+		/**
+		* An array containing all of the base2sizes that are allowed.
+		* This is used when creating a new TextureAtlas/or resizing a Image to be rendered in WebGL.
+		* @property base2Sizes
+		* @type number[]
+		* @public
+		* @static
+		*/
+		public static base2Sizes: number[] = [2, 4, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096];
+
+		/**
+		* A method that checks to see if an Image or Canvas that is passed has base2 proportions. 
+		* If it doesn&#x27;t the image is created on a Canvas and that Canvas is returned.
+		* Used mainly when creating TextureAtlases for WebGL. 
+		* @method convertToBase2
+		* @param imageFile {HTMLImageElement/HTMLCanvasElement} The image or canvas element that is to be converted into a base2size. 
+		* @return {HTMLImageElement/HTMLCanvasElement} The image that was passed (if it was already at base2 dimensions) or a new canvas element if it wasn&#x27;t.
+		* @static
+		* @public
+		*/
+		public static convertToBase2(image: any): any {
+			
+			//Get the width/height
+			var width = image.width;
+			var height = image.height
+
+			//Check to see if the width is base2
+			if (this.base2Sizes.indexOf(width) == -1) {
+				var i = 0;
+				while (width &gt; this.base2Sizes[i]) i++;
+				width = this.base2Sizes[i];
+			}
+
+			//Check to see if the height is base2
+			if (this.base2Sizes.indexOf(height) == -1) {
+				var i = 0;
+				while (height &gt; this.base2Sizes[i]) i++;
+				height = this.base2Sizes[i];
+			}
+
+
+			//If either of them did not have a base2 size then create a canvas and create a new canvas.
+			if (image.width !== width || image.height !== height) {
+
+				//Is it already a canvas?
+				var canvas = document.createElement(&#x27;canvas&#x27;);
+				canvas.width = width;
+				canvas.height = height;
+				canvas.getContext(&quot;2d&quot;).drawImage(image, 0, 0);
+
+				return canvas;
+			}
+
+			return image;
+		}
+
+	}
 
 }
 
diff --git a/docs/files/src_utils_GameMath.ts.html b/docs/files/src_utils_GameMath.ts.html
index 9da25b6..ee05ebf 100644
--- a/docs/files/src_utils_GameMath.ts.html
+++ b/docs/files/src_utils_GameMath.ts.html
@@ -371,741 +371,741 @@ <h1 class="file-heading">File: src/utils/GameMath.ts</h1>
 */
 module Kiwi.Utils {
 
-    /**
-    * Adds a set of extra Math functions and extends a few commonly used ones.
-    * Includes some methods written by Dylan Engelman.
-    *
-    * @class GameMath
-    * @namespace Kiwi.Utils
-    * @static
-    *
-    * @author Richard Davey
-    * @author Dylan Engelman
-    */
-    export class GameMath {
-
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} &quot;GameMath&quot;
-        * @public
-        */
-        public objType() {
-            return &quot;GameMath&quot;;
-        }
-
-        /**
-        * Holds the value for PI. Only up to 16 significant figures.
-        * @property PI
-        * @type number
-        * @default 3.141592653589793
-        * @static
-        * @final
-        * @public
-        */
-        public static PI: number = 3.141592653589793; //number pi
-
-        /**
-        * Holds the value for PI / 2 OR 90 degrees. Only up to 17 significant figures. 
-        * @property PI_2
-        * @type number
-        * @default 1.5707963267948965
-        * @static
-        * @final
-        * @public
-        */
-        public static PI_2: number = 1.5707963267948965; //PI / 2 OR 90 deg
-
-        /**
-        * Holds the value for PI / 4 OR 45 degrees. Only up to 16 significant figures.
-        * @property PI_4
-        * @type number
-        * @default 0.7853981633974483
-        * @static
-        * @final
-        * @public
-        */
-        public static PI_4: number = 0.7853981633974483; //PI / 4 OR 45 deg
-
-        /**
-        * Holds the value for PI / 8 OR 22.5 degrees. Only up to 17 significant figures.
-        * @property PI_8
-        * @type number
-        * @default 0.39269908169872413
-        * @static
-        * @final
-        * @public
-        */
-        public static PI_8: number = 0.39269908169872413; //PI / 8 OR 22.5 deg
-
-        /**
-        * Holds the value for PI / 16 OR 11.25 degrees. Only up to 17 significant figures.
-        * @property PI_16
-        * @type number
-        * @default 0.19634954084936206
-        * @static
-        * @final
-        * @public
-        */
-        public static PI_16: number = 0.19634954084936206; //PI / 16 OR 11.25 deg
-
-        /**
-        * Holds the value for 2 * PI OR 180 degrees. Only up to 15 significant figures.
-        * @property TWO_PI
-        * @type number
-        * @default 6.283185307179586
-        * @static
-        * @final
-        * @public
-        */
-        public static TWO_PI: number = 6.283185307179586; //2 * PI OR 180 deg
-
-        /**
-        * Holds the value for 3 * PI_2 OR 270 degrees. Only up to 17 significant figures.
-        * @property THREE_PI_2
-        * @type number
-        * @default 4.7123889803846895
-        * @static
-        * @final
-        * @public
-        */
-        public static THREE_PI_2: number = 4.7123889803846895; //3 * PI_2 OR 270 deg
-
-        /**
-        * Holds the value for &quot;e&quot;: Euler&#x27;s number or Napier&#x27;s constant, to 15 significant figures. This is a mathematically useful number.
-        * @property E
-        * @type number
-        * @default 2.71828182845905
-        * @static
-        * @final
-        * @public
-        */
-        public static E: number = 2.71828182845905; //number e
-
-        /**
-        * Holds the value for the natural logarithm of 10: ln(10). Accurate to 16 significant figures.
-        * @property LN10
-        * @type number
-        * @default 2.302585092994046
-        * @static
-        * @final
-        * @public
-        */
-        public static LN10: number = 2.302585092994046; //ln(10)
-
-        /**
-        * Holds the value for the natural logarithm of 2: ln(10). Accurate to 16 significant figures.
-        * @property LN2
-        * @type number
-        * @default 0.6931471805599453
-        * @static
-        * @final
-        * @public
-        */
-        public static LN2: number = 0.6931471805599453; //ln(2)
-
-        /**
-        * Holds the value for the base 10 logarithm of e (Euler&#x27;s number). Accurate to 16 significant figures.
-        * @property LOG10E
-        * @type number
-        * @default 0.4342944819032518
-        * @static
-        * @final
-        * @public
-        */
-        public static LOG10E: number = 0.4342944819032518; //logB10(e)
-
-        /**
-        * Holds the value for the base 2 logarithm of e (Euler&#x27;s number). Accurate to 19 significant figures.
-        * @property LOG2E
-        * @type number
-        * @default 1.442695040888963387
-        * @static
-        * @final
-        * @public
-        */
-        public static LOG2E: number = 1.442695040888963387; //logB2(e)
-
-        /**
-        * Holds the value for the square root of 0.5 (1/2). Accurate to 16 significant figures.
-        * @property SQRT1_2
-        * @type number
-        * @default 0.7071067811865476
-        * @static
-        * @final
-        * @public
-        */
-        public static SQRT1_2: number = 0.7071067811865476; //sqrt( 1 / 2 )
-
-        /**
-        * Holds the value for the square root of 2. Accurate to 17 significant figures. This is the diagonal distance across a square with side length of 1.
-        * @property SQRT2
-        * @type number
-        * @default 1.4142135623730951
-        * @static
-        * @final
-        * @public
-        */
-        public static SQRT2: number = 1.4142135623730951; //sqrt( 2 )
-
-        /**
-        * Holds the value for PI / 180 which is used to convert degrees to radians.
-        * @property DEG_TO_RAD
-        * @type  number
-        * @default 0.017453292519943294444444444444444
-        * @static
-        * @final
-        * @public
-        */
-        public static DEG_TO_RAD: number = 0.017453292519943294444444444444444; //PI / 180;
-
-        /**
-        * Holds the value for 180 / PI which is used to convert radians to degrees.
-        * @property RAD_TO_DEG
-        * @type number
-        * @default 57.295779513082325225835265587527
-        * @static
-        * @final
-        * @public
-        */
-        public static RAD_TO_DEG: number = 57.295779513082325225835265587527; // 180.0 / PI;
-        
-
-        /**
-        * Holds the value for 2 to the power of 16 (2^16 = 65536). This is the number of values available in 2 bytes.
-        * @property B_16
-        * @type number
-        * @default 65536
-        * @static
-        * @final
-        * @public
-        */
-        public static B_16: number = 65536;//2^16
-
-        /**
-        * Holds the value for 2 to the power of 31 (2^31 = 2147483648). This is the number of values available to 31-bit memory addressing.
-        * @property B_31
-        * @type number
-        * @default 2147483648
-        * @static
-        * @final
-        * @public
-        */
-        public static B_31: number = 2147483648;//2^31
-
-        /**
-        * Holds the value for 2 to the power of 32 (2^32 = 4294967296). This is the number of values available in 4 bytes, such as certain forms of RGBA colour.
-        * @property B_32
-        * @type number
-        * @default 4294967296
-        * @static
-        * @final
-        * @public
-        */
-        public static B_32: number = 4294967296;//2^32
-
-        /**
-        * Holds the value for 2 to the power of 48 (2^48 = 281474976710656). 48-bit colour has 16 bits per channel.
-        * @property B_48
-        * @type number
-        * @default 281474976710656
-        * @static
-        * @final
-        * @public
-        */
-        public static B_48: number = 281474976710656;//2^48
-
-        /**
-        * Holds the value for 2 to the power of 53 (2^53 = 9007199254740992). This is the largest accurate double-precision floating point whole number.
-        * @property B_53
-        * @type number
-        * @default 9007199254740992
-        * @static
-        * @final
-        * @public
-        */
-        public static B_53: number = 9007199254740992;//2^53 !!NOTE!! largest accurate double floating point whole value
-
-        /**
-        * Holds the value for 2 to the power of 64 (2^64 = 18446744073709551616). This number cannot be accurately represented as a double-precision floating point whole number as it is greater than Kiwi.Utils.GameMath.B_53. It is represented as 18446744073709552000 in memory.
-        * @property B_64
-        * @type number
-        * @default 18446744073709551616
-        * @static
-        * @final
-        * @public
-        */
-        public static B_64: number = 18446744073709551616;//2^64 !!NOTE!! Not accurate see B_53
-        
-
-        /**
-        * Holds the value for the fraction 1 / 3 as a number.
-        * @property ONE_THIRD
-        * @type number
-        * @default 0.333333333333333333333333333333333
-        * @static
-        * @final
-        * @public
-        */
-        public static ONE_THIRD: number = 0.333333333333333333333333333333333; // 1.0/3.0;
-
-        /**
-        * Holds the value for the fraction 2 / 3 as a number.
-        * @property TWO_THIRDS
-        * @type number
-        * @default 0.666666666666666666666666666666666
-        * @static
-        * @final
-        * @public
-        */
-        public static TWO_THIRDS: number = 0.666666666666666666666666666666666; // 2.0/3.0;
-
-        /**
-        * Holds the value for the fraction 1 / 6 as a number
-        * @property ONE_SIXTH
-        * @type number
-        * @default 0.166666666666666666666666666666666
-        * @static
-        * @final
-        * @public
-        */
-        public static ONE_SIXTH: number = 0.166666666666666666666666666666666; // 1.0/6.0;
-        
-        /**
-        * Holds the value of cos(pi / 3). This is the length of the shortest side of a triangle with angles in degrees 30, 60, and 90.
-        * @property COS_PI_3
-        * @type number
-        * @default 0.86602540378443864676372317075294
-        * @static
-        * @final
-        * @public
-        */
-        public static COS_PI_3: number = 0.86602540378443864676372317075294;//COS( PI / 3 )
-
-        /**
-        * Holds the value of sin(2 * pi / 3). This is the length of the second-shortest side of a triangle with andles in degrees 30, 60, and 90.
-        * @property SIN_2PI_3
-        * @type number
-        * @default 0.03654595
-        * @static
-        * @final
-        * @public
-        */
-        public static SIN_2PI_3: number = 0.03654595;// SIN( 2*PI/3 )
-        
-        /**
-        * Holds the value for 4 * (Math.sqrt(2) - 1) / 3.0 (approximately 0.5522847).
-        *
-        * This is useful for making circular arcs with Bezier curves. For an arc segment of 90 degrees (PI / 2 radians) or less, you can construct a nice approximation using CIRCLE_ALPHA. If the magic number k = CIRCLE_ALPHA, construct an arc using the following points: [1,0], [1,k], [k,1], [0,1].
-        *
-        * For angles that are smaller by scale n, scale k by n, and displace k along tangents of the arc. For more information, see this article by Hans Muller: http://hansmuller-flex.blogspot.com/2011/04/approximating-circular-arc-with-cubic.html
-        * @property CIRCLE_ALPHA
-        * @type number
-        * @default 0.5522847498307933984022516322796
-        * @static
-        * @final
-        * @public
-        */
-        public static CIRCLE_ALPHA: number = 0.5522847498307933984022516322796; //4*(Math.sqrt(2)-1)/3.0;
-        
-        /**
-        * A boolean that is true.
-        * @property ON
-        * @type boolean
-        * @default true
-        * @static
-        * @final
-        * @public
-        */
-        public static ON: boolean = true;
-
-        /**
-        * A boolean that is false.
-        * @property OFF
-        * @type boolean
-        * @default false
-        * @static
-        * @final
-        * @public
-        */
-        public static OFF: boolean = false;
-        
-
-        /**
-        * Maximum relative error for integers.
-        * @property SHORT_EPSILON
-        * @type number
-        * @default 0.1
-        * @static
-        * @final
-        * @public
-        */
-        public static SHORT_EPSILON: number = 0.1;//round integer epsilon
-
-        /**
-        * Maximum relative error for percentages (where 1% == 0.01).
-        * @property PERC_EPSILON
-        * @type number
-        * @default 0.001
-        * @static
-        * @final
-        * @public
-        */
-        public static PERC_EPSILON: number = 0.001;//percentage epsilon
-
-        /**
-        * Average relative error for single float values.
-        * @property EPSILON
-        * @type number
-        * @default 0.0001
-        * @static
-        * @final
-        * @public
-        */
-        public static EPSILON: number = 0.0001;//single float average epsilon
-
-        /**
-        * Maximum relative error for 8-digit decimal values.
-        * @property LONG_EPSILON
-        * @type number
-        * @default 0.00000001
-        * @static
-        * @final
-        * @public
-        */
-        public static LONG_EPSILON: number = 0.00000001;//arbitrary 8 digit epsilon
-
-        /**
-        * Computes the maximum relative error for this machine.
-        * @method computeMachineEpsilon
-        * @return {Number}
-        * @static
-        * @public
-        */
-        public static computeMachineEpsilon(): number {
-            // Machine epsilon ala Eispack
-            var fourThirds: number = 4.0 / 3.0;
-            var third: number = fourThirds - 1.0;
-            var one: number = third + third + third;
-            return Math.abs(1.0 - one);
-        }
-
-        /**
-        * Computes whether two numbers are identical to the limits of the computer&#x27;s precision, as specified by the epsilon value.
-        * @method fuzzyEqual
-        * @param a {number}
-        * @param b {number}
-        * @param [epsilon=0.0001] {number}
-        * @return {boolean}
-        * @static
-        * @public
-        */
-        public static fuzzyEqual(a: number, b: number, epsilon: number = 0.0001): boolean {
-            return Math.abs(a - b) &lt; epsilon;
-        }
-
-        /**
-        * Computes whether the first parameter is less than the second parameter, to the limits of the computer&#x27;s precision, as specified by the epsilon value.
-        * @method fuzzyLessThan
-        * @param a {number}
-        * @param b {number}
-        * @param [epsilon=0.0001] {number}
-        * @return {boolean}
-        * @static
-        * @public
-        */
-        public static fuzzyLessThan(a: number, b: number, epsilon: number = 0.0001): boolean {
-            return a &lt; b + epsilon;
-        }
-
-        /**
-        * Computes whether the first parameter is greater than the second parameter, to the limits of the computer&#x27;s precision, as specified by the epsilon value.
-        * @method fuzzyGreaterThan
-        * @param a {number}
-        * @param b {number}
-        * @param [epsilon=0.0001] {number}
-        * @return {boolean}
-        * @static
-        * @public
-        */
-        public static fuzzyGreaterThan(a: number, b: number, epsilon: number = 0.0001): boolean {
-            return a &gt; b - epsilon;
-        }
-
-        /**
-        * Computes the integer ceiling of the first parameter, minus a rounding margin defined by epsilon.
-        * @method fuzzyCeil
-        * @param val {number}
-        * @param [epsilon=0.0001] {number}
-        * @return {Number}
-        * @static
-        * @public
-        */
-        public static fuzzyCeil(val: number, epsilon: number = 0.0001): number {
-            return Math.ceil(val - epsilon);
-        }
-
-        /**
-        * Computes the integer floor of the first parameter, plus a rounding margin defined by epsilon.
-        * @method fuzzyFloor
-        * @param val {number}
-        * @param [epsilion=0.0001] {number}
-        * @return {Number}
-        * @static
-        * @public
-        */
-        public static fuzzyFloor(val: number, epsilon: number = 0.0001): number {
-            return Math.floor(val + epsilon);
-        }
-
-        /**
-        * Computes the mean of any number of parameters. For example, average(1,2,3) returns 2.
-        * @method average
-        * @param [args]* {Any[]}
-        * @return {Number}
-        * @static
-        * @public
-        */
-        public static average(...args: any[]): number {
-            var avg: number = 0;
-
-            for (var i = 0; i &lt; args.length; i++)
-            {
-                avg += args[i];
-            }
-
-            return avg / args.length;
-        }
-
-        /**
-        * Computes whether value and target are sufficiently close as to be within the computer&#x27;s margin of error, as defined by epsilon. Returns the target if they are sufficiently close; returns the value if they are not.
-        *
-        * In other words, slam prevents the target from exceeding epsilon.
-        * @method slam
-        * @param value {number}
-        * @param target {number}
-        * @param [epsilon=0.0001] {number}
-        * @return {Number}
-        * @static
-        * @public
-        */
-        public static slam(value: number, target: number, epsilon: number = 0.0001): number {
-            return (Math.abs(value - target) &lt; epsilon) ? target : value;
-        }
-
-        /**
+	/**
+	* Adds a set of extra Math functions and extends a few commonly used ones.
+	* Includes some methods written by Dylan Engelman.
+	*
+	* @class GameMath
+	* @namespace Kiwi.Utils
+	* @static
+	*
+	* @author Richard Davey
+	* @author Dylan Engelman
+	*/
+	export class GameMath {
+
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} &quot;GameMath&quot;
+		* @public
+		*/
+		public objType() {
+			return &quot;GameMath&quot;;
+		}
+
+		/**
+		* Holds the value for PI. Only up to 16 significant figures.
+		* @property PI
+		* @type number
+		* @default 3.141592653589793
+		* @static
+		* @final
+		* @public
+		*/
+		public static PI: number = 3.141592653589793; //number pi
+
+		/**
+		* Holds the value for PI / 2 OR 90 degrees. Only up to 17 significant figures. 
+		* @property PI_2
+		* @type number
+		* @default 1.5707963267948965
+		* @static
+		* @final
+		* @public
+		*/
+		public static PI_2: number = 1.5707963267948965; //PI / 2 OR 90 deg
+
+		/**
+		* Holds the value for PI / 4 OR 45 degrees. Only up to 16 significant figures.
+		* @property PI_4
+		* @type number
+		* @default 0.7853981633974483
+		* @static
+		* @final
+		* @public
+		*/
+		public static PI_4: number = 0.7853981633974483; //PI / 4 OR 45 deg
+
+		/**
+		* Holds the value for PI / 8 OR 22.5 degrees. Only up to 17 significant figures.
+		* @property PI_8
+		* @type number
+		* @default 0.39269908169872413
+		* @static
+		* @final
+		* @public
+		*/
+		public static PI_8: number = 0.39269908169872413; //PI / 8 OR 22.5 deg
+
+		/**
+		* Holds the value for PI / 16 OR 11.25 degrees. Only up to 17 significant figures.
+		* @property PI_16
+		* @type number
+		* @default 0.19634954084936206
+		* @static
+		* @final
+		* @public
+		*/
+		public static PI_16: number = 0.19634954084936206; //PI / 16 OR 11.25 deg
+
+		/**
+		* Holds the value for 2 * PI OR 180 degrees. Only up to 15 significant figures.
+		* @property TWO_PI
+		* @type number
+		* @default 6.283185307179586
+		* @static
+		* @final
+		* @public
+		*/
+		public static TWO_PI: number = 6.283185307179586; //2 * PI OR 180 deg
+
+		/**
+		* Holds the value for 3 * PI_2 OR 270 degrees. Only up to 17 significant figures.
+		* @property THREE_PI_2
+		* @type number
+		* @default 4.7123889803846895
+		* @static
+		* @final
+		* @public
+		*/
+		public static THREE_PI_2: number = 4.7123889803846895; //3 * PI_2 OR 270 deg
+
+		/**
+		* Holds the value for &quot;e&quot;: Euler&#x27;s number or Napier&#x27;s constant, to 15 significant figures. This is a mathematically useful number.
+		* @property E
+		* @type number
+		* @default 2.71828182845905
+		* @static
+		* @final
+		* @public
+		*/
+		public static E: number = 2.71828182845905; //number e
+
+		/**
+		* Holds the value for the natural logarithm of 10: ln(10). Accurate to 16 significant figures.
+		* @property LN10
+		* @type number
+		* @default 2.302585092994046
+		* @static
+		* @final
+		* @public
+		*/
+		public static LN10: number = 2.302585092994046; //ln(10)
+
+		/**
+		* Holds the value for the natural logarithm of 2: ln(10). Accurate to 16 significant figures.
+		* @property LN2
+		* @type number
+		* @default 0.6931471805599453
+		* @static
+		* @final
+		* @public
+		*/
+		public static LN2: number = 0.6931471805599453; //ln(2)
+
+		/**
+		* Holds the value for the base 10 logarithm of e (Euler&#x27;s number). Accurate to 16 significant figures.
+		* @property LOG10E
+		* @type number
+		* @default 0.4342944819032518
+		* @static
+		* @final
+		* @public
+		*/
+		public static LOG10E: number = 0.4342944819032518; //logB10(e)
+
+		/**
+		* Holds the value for the base 2 logarithm of e (Euler&#x27;s number). Accurate to 19 significant figures.
+		* @property LOG2E
+		* @type number
+		* @default 1.442695040888963387
+		* @static
+		* @final
+		* @public
+		*/
+		public static LOG2E: number = 1.442695040888963387; //logB2(e)
+
+		/**
+		* Holds the value for the square root of 0.5 (1/2). Accurate to 16 significant figures.
+		* @property SQRT1_2
+		* @type number
+		* @default 0.7071067811865476
+		* @static
+		* @final
+		* @public
+		*/
+		public static SQRT1_2: number = 0.7071067811865476; //sqrt( 1 / 2 )
+
+		/**
+		* Holds the value for the square root of 2. Accurate to 17 significant figures. This is the diagonal distance across a square with side length of 1.
+		* @property SQRT2
+		* @type number
+		* @default 1.4142135623730951
+		* @static
+		* @final
+		* @public
+		*/
+		public static SQRT2: number = 1.4142135623730951; //sqrt( 2 )
+
+		/**
+		* Holds the value for PI / 180 which is used to convert degrees to radians.
+		* @property DEG_TO_RAD
+		* @type  number
+		* @default 0.017453292519943294444444444444444
+		* @static
+		* @final
+		* @public
+		*/
+		public static DEG_TO_RAD: number = 0.017453292519943294444444444444444; //PI / 180;
+
+		/**
+		* Holds the value for 180 / PI which is used to convert radians to degrees.
+		* @property RAD_TO_DEG
+		* @type number
+		* @default 57.295779513082325225835265587527
+		* @static
+		* @final
+		* @public
+		*/
+		public static RAD_TO_DEG: number = 57.295779513082325225835265587527; // 180.0 / PI;
+		
+
+		/**
+		* Holds the value for 2 to the power of 16 (2^16 = 65536). This is the number of values available in 2 bytes.
+		* @property B_16
+		* @type number
+		* @default 65536
+		* @static
+		* @final
+		* @public
+		*/
+		public static B_16: number = 65536;//2^16
+
+		/**
+		* Holds the value for 2 to the power of 31 (2^31 = 2147483648). This is the number of values available to 31-bit memory addressing.
+		* @property B_31
+		* @type number
+		* @default 2147483648
+		* @static
+		* @final
+		* @public
+		*/
+		public static B_31: number = 2147483648;//2^31
+
+		/**
+		* Holds the value for 2 to the power of 32 (2^32 = 4294967296). This is the number of values available in 4 bytes, such as certain forms of RGBA colour.
+		* @property B_32
+		* @type number
+		* @default 4294967296
+		* @static
+		* @final
+		* @public
+		*/
+		public static B_32: number = 4294967296;//2^32
+
+		/**
+		* Holds the value for 2 to the power of 48 (2^48 = 281474976710656). 48-bit colour has 16 bits per channel.
+		* @property B_48
+		* @type number
+		* @default 281474976710656
+		* @static
+		* @final
+		* @public
+		*/
+		public static B_48: number = 281474976710656;//2^48
+
+		/**
+		* Holds the value for 2 to the power of 53 (2^53 = 9007199254740992). This is the largest accurate double-precision floating point whole number.
+		* @property B_53
+		* @type number
+		* @default 9007199254740992
+		* @static
+		* @final
+		* @public
+		*/
+		public static B_53: number = 9007199254740992;//2^53 !!NOTE!! largest accurate double floating point whole value
+
+		/**
+		* Holds the value for 2 to the power of 64 (2^64 = 18446744073709551616). This number cannot be accurately represented as a double-precision floating point whole number as it is greater than Kiwi.Utils.GameMath.B_53. It is represented as 18446744073709552000 in memory.
+		* @property B_64
+		* @type number
+		* @default 18446744073709551616
+		* @static
+		* @final
+		* @public
+		*/
+		public static B_64: number = 18446744073709551616;//2^64 !!NOTE!! Not accurate see B_53
+		
+
+		/**
+		* Holds the value for the fraction 1 / 3 as a number.
+		* @property ONE_THIRD
+		* @type number
+		* @default 0.333333333333333333333333333333333
+		* @static
+		* @final
+		* @public
+		*/
+		public static ONE_THIRD: number = 0.333333333333333333333333333333333; // 1.0/3.0;
+
+		/**
+		* Holds the value for the fraction 2 / 3 as a number.
+		* @property TWO_THIRDS
+		* @type number
+		* @default 0.666666666666666666666666666666666
+		* @static
+		* @final
+		* @public
+		*/
+		public static TWO_THIRDS: number = 0.666666666666666666666666666666666; // 2.0/3.0;
+
+		/**
+		* Holds the value for the fraction 1 / 6 as a number
+		* @property ONE_SIXTH
+		* @type number
+		* @default 0.166666666666666666666666666666666
+		* @static
+		* @final
+		* @public
+		*/
+		public static ONE_SIXTH: number = 0.166666666666666666666666666666666; // 1.0/6.0;
+		
+		/**
+		* Holds the value of cos(pi / 3). This is the length of the shortest side of a triangle with angles in degrees 30, 60, and 90.
+		* @property COS_PI_3
+		* @type number
+		* @default 0.86602540378443864676372317075294
+		* @static
+		* @final
+		* @public
+		*/
+		public static COS_PI_3: number = 0.86602540378443864676372317075294;//COS( PI / 3 )
+
+		/**
+		* Holds the value of sin(2 * pi / 3). This is the length of the second-shortest side of a triangle with andles in degrees 30, 60, and 90.
+		* @property SIN_2PI_3
+		* @type number
+		* @default 0.03654595
+		* @static
+		* @final
+		* @public
+		*/
+		public static SIN_2PI_3: number = 0.03654595;// SIN( 2*PI/3 )
+		
+		/**
+		* Holds the value for 4 * (Math.sqrt(2) - 1) / 3.0 (approximately 0.5522847).
+		*
+		* This is useful for making circular arcs with Bezier curves. For an arc segment of 90 degrees (PI / 2 radians) or less, you can construct a nice approximation using CIRCLE_ALPHA. If the magic number k = CIRCLE_ALPHA, construct an arc using the following points: [1,0], [1,k], [k,1], [0,1].
+		*
+		* For angles that are smaller by scale n, scale k by n, and displace k along tangents of the arc. For more information, see this article by Hans Muller: http://hansmuller-flex.blogspot.com/2011/04/approximating-circular-arc-with-cubic.html
+		* @property CIRCLE_ALPHA
+		* @type number
+		* @default 0.5522847498307933984022516322796
+		* @static
+		* @final
+		* @public
+		*/
+		public static CIRCLE_ALPHA: number = 0.5522847498307933984022516322796; //4*(Math.sqrt(2)-1)/3.0;
+		
+		/**
+		* A boolean that is true.
+		* @property ON
+		* @type boolean
+		* @default true
+		* @static
+		* @final
+		* @public
+		*/
+		public static ON: boolean = true;
+
+		/**
+		* A boolean that is false.
+		* @property OFF
+		* @type boolean
+		* @default false
+		* @static
+		* @final
+		* @public
+		*/
+		public static OFF: boolean = false;
+		
+
+		/**
+		* Maximum relative error for integers.
+		* @property SHORT_EPSILON
+		* @type number
+		* @default 0.1
+		* @static
+		* @final
+		* @public
+		*/
+		public static SHORT_EPSILON: number = 0.1;//round integer epsilon
+
+		/**
+		* Maximum relative error for percentages (where 1% == 0.01).
+		* @property PERC_EPSILON
+		* @type number
+		* @default 0.001
+		* @static
+		* @final
+		* @public
+		*/
+		public static PERC_EPSILON: number = 0.001;//percentage epsilon
+
+		/**
+		* Average relative error for single float values.
+		* @property EPSILON
+		* @type number
+		* @default 0.0001
+		* @static
+		* @final
+		* @public
+		*/
+		public static EPSILON: number = 0.0001;//single float average epsilon
+
+		/**
+		* Maximum relative error for 8-digit decimal values.
+		* @property LONG_EPSILON
+		* @type number
+		* @default 0.00000001
+		* @static
+		* @final
+		* @public
+		*/
+		public static LONG_EPSILON: number = 0.00000001;//arbitrary 8 digit epsilon
+
+		/**
+		* Computes the maximum relative error for this machine.
+		* @method computeMachineEpsilon
+		* @return {Number}
+		* @static
+		* @public
+		*/
+		public static computeMachineEpsilon(): number {
+			// Machine epsilon ala Eispack
+			var fourThirds: number = 4.0 / 3.0;
+			var third: number = fourThirds - 1.0;
+			var one: number = third + third + third;
+			return Math.abs(1.0 - one);
+		}
+
+		/**
+		* Computes whether two numbers are identical to the limits of the computer&#x27;s precision, as specified by the epsilon value.
+		* @method fuzzyEqual
+		* @param a {number}
+		* @param b {number}
+		* @param [epsilon=0.0001] {number}
+		* @return {boolean}
+		* @static
+		* @public
+		*/
+		public static fuzzyEqual(a: number, b: number, epsilon: number = 0.0001): boolean {
+			return Math.abs(a - b) &lt; epsilon;
+		}
+
+		/**
+		* Computes whether the first parameter is less than the second parameter, to the limits of the computer&#x27;s precision, as specified by the epsilon value.
+		* @method fuzzyLessThan
+		* @param a {number}
+		* @param b {number}
+		* @param [epsilon=0.0001] {number}
+		* @return {boolean}
+		* @static
+		* @public
+		*/
+		public static fuzzyLessThan(a: number, b: number, epsilon: number = 0.0001): boolean {
+			return a &lt; b + epsilon;
+		}
+
+		/**
+		* Computes whether the first parameter is greater than the second parameter, to the limits of the computer&#x27;s precision, as specified by the epsilon value.
+		* @method fuzzyGreaterThan
+		* @param a {number}
+		* @param b {number}
+		* @param [epsilon=0.0001] {number}
+		* @return {boolean}
+		* @static
+		* @public
+		*/
+		public static fuzzyGreaterThan(a: number, b: number, epsilon: number = 0.0001): boolean {
+			return a &gt; b - epsilon;
+		}
+
+		/**
+		* Computes the integer ceiling of the first parameter, minus a rounding margin defined by epsilon.
+		* @method fuzzyCeil
+		* @param val {number}
+		* @param [epsilon=0.0001] {number}
+		* @return {Number}
+		* @static
+		* @public
+		*/
+		public static fuzzyCeil(val: number, epsilon: number = 0.0001): number {
+			return Math.ceil(val - epsilon);
+		}
+
+		/**
+		* Computes the integer floor of the first parameter, plus a rounding margin defined by epsilon.
+		* @method fuzzyFloor
+		* @param val {number}
+		* @param [epsilion=0.0001] {number}
+		* @return {Number}
+		* @static
+		* @public
+		*/
+		public static fuzzyFloor(val: number, epsilon: number = 0.0001): number {
+			return Math.floor(val + epsilon);
+		}
+
+		/**
+		* Computes the mean of any number of parameters. For example, average(1,2,3) returns 2.
+		* @method average
+		* @param [args]* {Any[]}
+		* @return {Number}
+		* @static
+		* @public
+		*/
+		public static average(...args: any[]): number {
+			var avg: number = 0;
+
+			for (var i = 0; i &lt; args.length; i++)
+			{
+				avg += args[i];
+			}
+
+			return avg / args.length;
+		}
+
+		/**
+		* Computes whether value and target are sufficiently close as to be within the computer&#x27;s margin of error, as defined by epsilon. Returns the target if they are sufficiently close; returns the value if they are not.
+		*
+		* In other words, slam prevents the target from exceeding epsilon.
+		* @method slam
+		* @param value {number}
+		* @param target {number}
+		* @param [epsilon=0.0001] {number}
+		* @return {Number}
+		* @static
+		* @public
+		*/
+		public static slam(value: number, target: number, epsilon: number = 0.0001): number {
+			return (Math.abs(value - target) &lt; epsilon) ? target : value;
+		}
+
+		/**
 		* Ratio of value to a range.
-        * @method percentageMinMax
-        * @param val {number}
-        * @param max {number}
-        * @param [min=0] {number}
-        * @return {number}
-        * @static
-        * @public
-		*/
-        public static percentageMinMax(val: number, max: number, min: number = 0): number {
-            val -= min;
-            max -= min;
-
-            if (!max) return 0;
-            else return val / max;
-        }
-
-        /**
+		* @method percentageMinMax
+		* @param val {number}
+		* @param max {number}
+		* @param [min=0] {number}
+		* @return {number}
+		* @static
+		* @public
+		*/
+		public static percentageMinMax(val: number, max: number, min: number = 0): number {
+			val -= min;
+			max -= min;
+
+			if (!max) return 0;
+			else return val / max;
+		}
+
+		/**
 		* A value representing the sign of the value.
 		* -1 for negative, +1 for positive, 0 if value is 0
 		* @method sign
-        * @param n {number}
-        * @return {number}
-        * @static
-        * @public
-        */
-        public static sign(n: number): number {
-            if (n) return n / Math.abs(n);
-            else return 0;
-        }
-
-        /**
-        * Truncates a value by removing all decimal data.
-        * @method truncate
-        * @param n {number}
-        * @return {number}
-        * @static
-        * @public
-        */
-        public static truncate(n: number): number {
-            return (n &gt; 0) ? Math.floor(n) : Math.ceil(n);
-        }
-
-        /**
-        * Removes all non-decimal data from the value.
-        * @method shear
-        * @param n {number}
-        * @return {number}
-        * @static
-        * @public
-        */
-        public static shear(n: number): number {
-            return n % 1;
-        }
-
-        /**
+		* @param n {number}
+		* @return {number}
+		* @static
+		* @public
+		*/
+		public static sign(n: number): number {
+			if (n) return n / Math.abs(n);
+			else return 0;
+		}
+
+		/**
+		* Truncates a value by removing all decimal data.
+		* @method truncate
+		* @param n {number}
+		* @return {number}
+		* @static
+		* @public
+		*/
+		public static truncate(n: number): number {
+			return (n &gt; 0) ? Math.floor(n) : Math.ceil(n);
+		}
+
+		/**
+		* Removes all non-decimal data from the value.
+		* @method shear
+		* @param n {number}
+		* @return {number}
+		* @static
+		* @public
+		*/
+		public static shear(n: number): number {
+			return n % 1;
+		}
+
+		/**
 		* Wrap a value around a range, similar to modulus with a floating minimum
 		* @method wrap
-        * @param val {number}
-        * @param max {number}
-        * @param [min=0] {number}
-        * @return {number}
-        * @static
-        * @public
-        */
-        public static wrap(val: number, max: number, min: number = 0): number {
-            val -= min;
-            max -= min;
-            if (max == 0) return min;
-            val %= max;
-            val += min;
-            while (val &lt; min)
-                val += max;
-
-            return val;
-        }
-
-        /**
+		* @param val {number}
+		* @param max {number}
+		* @param [min=0] {number}
+		* @return {number}
+		* @static
+		* @public
+		*/
+		public static wrap(val: number, max: number, min: number = 0): number {
+			val -= min;
+			max -= min;
+			if (max == 0) return min;
+			val %= max;
+			val += min;
+			while (val &lt; min)
+				val += max;
+
+			return val;
+		}
+
+		/**
 		* Arithmetic version of wrap.
 		* @method arithWrap
-        * @param val {number}
-        * @param max {number}
-        * @param [min=0] {number}
-        * @return {number}
-        * @static
-        * @public
-        */
-        public static arithWrap(value: number, max: number, min: number = 0): number {
-            max -= min;
-            if (max == 0) return min;
-            return value - max * Math.floor((value - min) / max);
-        }
-
-        /**
+		* @param val {number}
+		* @param max {number}
+		* @param [min=0] {number}
+		* @return {number}
+		* @static
+		* @public
+		*/
+		public static arithWrap(value: number, max: number, min: number = 0): number {
+			max -= min;
+			if (max == 0) return min;
+			return value - max * Math.floor((value - min) / max);
+		}
+
+		/**
 		* Force a value within the boundaries of two values
 		* If max &lt; min, min is returned.
 		* @method clamp
-        * @param input {number}
-        * @param max {number}
-        * @param [min=0] {number}
-        * @return {number}
-        * @static
-        * @public
-        */
-        public static clamp(input: number, max: number, min: number = 0): number {
-            return Math.max(min, Math.min(max, input));
-        }
-
-        /**
+		* @param input {number}
+		* @param max {number}
+		* @param [min=0] {number}
+		* @return {number}
+		* @static
+		* @public
+		*/
+		public static clamp(input: number, max: number, min: number = 0): number {
+			return Math.max(min, Math.min(max, input));
+		}
+
+		/**
 		* Snap a value to nearest grid slice, using rounding.
 		* Example if you have an interval gap of 5 and a position of 12... you will snap to 10. Where as 14 will snap to 15
 		* 
-        * @method snapTo
+		* @method snapTo
 		* @param input {number} The value to snap
 		* @param gap {number} The interval gap of the grid
 		* @param [start=0] {number} Optional starting offset for gap
 		* @return {number}
-        * @static
-        * @public
-        */
-        public static snapTo(input: number, gap: number, start: number = 0): number {
-            if (gap == 0) return input;
-
-            input -= start;
-            input = gap * Math.round(input / gap);
-            return start + input;
-        }
-
-        /**
+		* @static
+		* @public
+		*/
+		public static snapTo(input: number, gap: number, start: number = 0): number {
+			if (gap == 0) return input;
+
+			input -= start;
+			input = gap * Math.round(input / gap);
+			return start + input;
+		}
+
+		/**
 		* Snap a value to nearest grid slice, using floor.
 		* Example if you have an interval gap of 5 and a position of 12... you will snap to 10. As will 14 snap to 10... but 16 will snap to 15
 		* 
-        * @method snapToFloor
+		* @method snapToFloor
 		* @param input {number} The value to snap
 		* @param gap {number} The interval gap of the grid
 		* @param [start=0] {number} Optional starting offset for gap
 		* @return {number}
-        * @static
-        * @public
-        */
-        public static snapToFloor(input: number, gap: number, start: number = 0): number {
-            if (gap == 0) return input;
-
-            input -= start;
-            input = gap * Math.floor(input / gap);
-            return start + input;
-        }
-
-        /**
+		* @static
+		* @public
+		*/
+		public static snapToFloor(input: number, gap: number, start: number = 0): number {
+			if (gap == 0) return input;
+
+			input -= start;
+			input = gap * Math.floor(input / gap);
+			return start + input;
+		}
+
+		/**
 		* Snap a value to nearest grid slice, using ceil.
 		* Example if you have an interval gap of 5 and a position of 12... you will snap to 15. As will 14 will snap to 15... but 16 will snap to 20
 		* 
-        * @method snapToCeil
+		* @method snapToCeil
 		* @param input {number} The value to snap
 		* @param gap {number} The interval gap of the grid
 		* @param [start=0] {number} optional starting offset for gap
 		* @return {number}
-        * @static
-        * @public
+		* @static
+		* @public
 		*/
-        public static snapToCeil(input: number, gap: number, start: number = 0): number {
-            if (gap == 0) return input;
+		public static snapToCeil(input: number, gap: number, start: number = 0): number {
+			if (gap == 0) return input;
 
-            input -= start;
-            input = gap * Math.ceil(input / gap);
-            return start + input;
-        }
+			input -= start;
+			input = gap * Math.ceil(input / gap);
+			return start + input;
+		}
 
-        /**
+		/**
 		* Snaps a value to the nearest value in an array.
-        * @method snapToInArray
-        * @param input {number}
-        * @param arr {number[]}
-        * @param [sort=true] {boolean}
+		* @method snapToInArray
+		* @param input {number}
+		* @param arr {number[]}
+		* @param [sort=true] {boolean}
 		* @return {number}
-        * @static
-        * @public
+		* @static
+		* @public
 		*/
-        public static snapToInArray(input: number, arr: number[], sort: boolean = true): number {
+		public static snapToInArray(input: number, arr: number[], sort: boolean = true): number {
 
-            if (sort) arr.sort();
-            if (input &lt; arr[0]) return arr[0];
+			if (sort) arr.sort();
+			if (input &lt; arr[0]) return arr[0];
 
-            var i: number = 1;
+			var i: number = 1;
 
-            while (arr[i] &lt; input)
-                i++;
+			while (arr[i] &lt; input)
+				i++;
 
-            var low: number = arr[i - 1];
-            var high: number = (i &lt; arr.length) ? arr[i] : Number.POSITIVE_INFINITY;
+			var low: number = arr[i - 1];
+			var high: number = (i &lt; arr.length) ? arr[i] : Number.POSITIVE_INFINITY;
 
-            return ((high - input) &lt;= (input - low)) ? high : low;
-        }
+			return ((high - input) &lt;= (input - low)) ? high : low;
+		}
 
-        /**
+		/**
 		* Round to some place comparative to a &#x27;base&#x27;, default is 10 for decimal place.
 		* &#x27;place&#x27; is represented by the power applied to &#x27;base&#x27; to get that place
 		* 
-        * @method roundTo
+		* @method roundTo
 		* @param value {number} The value to round
 		* @param [place=0] {number} The place to round to
 		* @param [base=10] {number} The base to round in... default is 10 for decimal
 		* @return {number}
-        * @static
-        * @public
-        */
-        public static roundTo(value: number, place: number = 0, base: number = 10): number {
-            var p: number = Math.pow(base, -place);
-            return Math.round(value * p) / p;
-        }
-
-        /*
+		* @static
+		* @public
+		*/
+		public static roundTo(value: number, place: number = 0, base: number = 10): number {
+			var p: number = Math.pow(base, -place);
+			return Math.round(value * p) / p;
+		}
+
+		/*
 		* E.g.
 		* 
 		* 2000/7 ~= 285.714285714285714285714 ~= (bin)100011101.1011011011011011
@@ -1134,214 +1134,214 @@ <h1 class="file-heading">File: src/utils/GameMath.ts</h1>
 		* because we are rounding 100011.1011011011011011 which rounds up.
 		*/
 
-        /**
-        * Round down to some place comparative to a &#x27;base&#x27;, default is 10 for decimal place.
-        * &#x27;place&#x27; is represented by the power applied to &#x27;base&#x27; to get that place
-        * @method floorTo
-        * @param value {number}
-        * @param [place=0] {number}
-        * @param [base=10] {number}
+		/**
+		* Round down to some place comparative to a &#x27;base&#x27;, default is 10 for decimal place.
+		* &#x27;place&#x27; is represented by the power applied to &#x27;base&#x27; to get that place
+		* @method floorTo
+		* @param value {number}
+		* @param [place=0] {number}
+		* @param [base=10] {number}
 		* @return {number}
-        * @static
-        * @public
-        */
-        public static floorTo(value: number, place: number = 0, base: number = 10): number {
-            var p: number = Math.pow(base, -place);
-            return Math.floor(value * p) / p;
-        }
-
-        /**
-        * Round down to some place comparative to a &#x27;base&#x27;, default is 10 for decimal place.
-        * &#x27;place&#x27; is represented by the power applied to &#x27;base&#x27; to get that place
-        * @method ceilTo
-        * @param value {number}
-        * @param [place=0] {number}
-        * @param [base=10] {number}
+		* @static
+		* @public
+		*/
+		public static floorTo(value: number, place: number = 0, base: number = 10): number {
+			var p: number = Math.pow(base, -place);
+			return Math.floor(value * p) / p;
+		}
+
+		/**
+		* Round down to some place comparative to a &#x27;base&#x27;, default is 10 for decimal place.
+		* &#x27;place&#x27; is represented by the power applied to &#x27;base&#x27; to get that place
+		* @method ceilTo
+		* @param value {number}
+		* @param [place=0] {number}
+		* @param [base=10] {number}
 		* @return {number}
-        * @static
-        * @public
-        */
-        public static ceilTo(value: number, place: number = 0, base: number = 10): number {
-            var p: number = Math.pow(base, -place);
-            return Math.ceil(value * p) / p;
-        }
-
-        /**
+		* @static
+		* @public
+		*/
+		public static ceilTo(value: number, place: number = 0, base: number = 10): number {
+			var p: number = Math.pow(base, -place);
+			return Math.ceil(value * p) / p;
+		}
+
+		/**
 		* A one dimensional linear interpolation of a value.
 		* @method interpolateFloat
-        * @param a {number}
-        * @param b {number}
-        * @param weight {number}
+		* @param a {number}
+		* @param b {number}
+		* @param weight {number}
 		* @return {number}
-        * @static
-        * @public
-        */
-        public static interpolateFloat(a: number, b: number, weight: number): number {
-            return (b - a) * weight + a;
-        }
-
-        /**
+		* @static
+		* @public
+		*/
+		public static interpolateFloat(a: number, b: number, weight: number): number {
+			return (b - a) * weight + a;
+		}
+
+		/**
 		* Convert radians to degrees
 		* @method radiansToDegrees
-        * @param angle {number}
+		* @param angle {number}
 		* @return {number}
-        * @static
-        * @public
-        */
-        public static radiansToDegrees(angle: number): number {
-            return angle * GameMath.RAD_TO_DEG;
-        }
-
-        /**
+		* @static
+		* @public
+		*/
+		public static radiansToDegrees(angle: number): number {
+			return angle * GameMath.RAD_TO_DEG;
+		}
+
+		/**
 		* Convert degrees to radians
 		* @method degreesToRadians
-        * @param angle {number}
+		* @param angle {number}
 		* @return {number}
-        * @static
-        * @public
-        */
-        public static degreesToRadians(angle: number): number {
-            return angle * GameMath.DEG_TO_RAD;
-        }
-
-        /**
+		* @static
+		* @public
+		*/
+		public static degreesToRadians(angle: number): number {
+			return angle * GameMath.DEG_TO_RAD;
+		}
+
+		/**
 		* Find the angle of a segment from (x1, y1) -&gt; (x2, y2 )
-        * @method angleBetween
-        * @param x1 {number}
-        * @param y1 {number}
-        * @param x2 {number}
-        * @param y2 {number}
+		* @method angleBetween
+		* @param x1 {number}
+		* @param y1 {number}
+		* @param x2 {number}
+		* @param y2 {number}
 		* @return {number}
-        * @static
-        * @public
+		* @static
+		* @public
 		*/
-        public static angleBetween(x1: number, y1: number, x2: number, y2: number): number {
-            return Math.atan2(y2 - y1, x2 - x1);
-        }
+		public static angleBetween(x1: number, y1: number, x2: number, y2: number): number {
+			return Math.atan2(y2 - y1, x2 - x1);
+		}
 
 
-        /**
-        * Set an angle with in the bounds of -PI to PI
-        * @method normalizeAngle
-        * @param angle {number}
-        * @param [radians=true] {boolean}
+		/**
+		* Set an angle with in the bounds of -PI to PI
+		* @method normalizeAngle
+		* @param angle {number}
+		* @param [radians=true] {boolean}
 		* @return {number}
-        * @static
-        * @public
-        */
-        public static normalizeAngle(angle: number, radians: boolean = true): number {
-            var rd: number = (radians) ? GameMath.PI : 180;
-            return GameMath.wrap(angle, rd, -rd);
-        }
-
-        /**
-        * Closest angle between two angles from a1 to a2
-        * absolute value the return for exact angle.
-        * @method nearestAngleBetween 
-        * @param a1 {number}
-        * @param a2 {number}
-        * @param [radians=true] {boolean}
+		* @static
+		* @public
+		*/
+		public static normalizeAngle(angle: number, radians: boolean = true): number {
+			var rd: number = (radians) ? GameMath.PI : 180;
+			return GameMath.wrap(angle, rd, -rd);
+		}
+
+		/**
+		* Closest angle between two angles from a1 to a2
+		* absolute value the return for exact angle.
+		* @method nearestAngleBetween 
+		* @param a1 {number}
+		* @param a2 {number}
+		* @param [radians=true] {boolean}
 		* @return {number}
-        * @static
-        * @public
-        */
-        public static nearestAngleBetween(a1: number, a2: number, radians: boolean = true): number {
+		* @static
+		* @public
+		*/
+		public static nearestAngleBetween(a1: number, a2: number, radians: boolean = true): number {
 
-            var rd: number = (radians) ? GameMath.PI : 180;
+			var rd: number = (radians) ? GameMath.PI : 180;
 
-            a1 = GameMath.normalizeAngle(a1, radians);
-            a2 = GameMath.normalizeAngle(a2, radians);
+			a1 = GameMath.normalizeAngle(a1, radians);
+			a2 = GameMath.normalizeAngle(a2, radians);
 
-            if (a1 &lt; -rd / 2 &amp;&amp; a2 &gt; rd / 2) a1 += rd * 2;
-            if (a2 &lt; -rd / 2 &amp;&amp; a1 &gt; rd / 2) a2 += rd * 2;
+			if (a1 &lt; -rd / 2 &amp;&amp; a2 &gt; rd / 2) a1 += rd * 2;
+			if (a2 &lt; -rd / 2 &amp;&amp; a1 &gt; rd / 2) a2 += rd * 2;
 
-            return a2 - a1;
-        }
+			return a2 - a1;
+		}
 
-        /**
-        * Normalizes independent and then sets dep to the nearest value respective to independent.
-        * For instance if dep=-170 and ind=170 then 190 will be returned as an alternative to -170
-        * @method normalizeAngleToAnother
-        * @param dep {number}
-        * @param ind {number}
-        * @param [radians=true] {boolean}
+		/**
+		* Normalizes independent and then sets dep to the nearest value respective to independent.
+		* For instance if dep=-170 and ind=170 then 190 will be returned as an alternative to -170
+		* @method normalizeAngleToAnother
+		* @param dep {number}
+		* @param ind {number}
+		* @param [radians=true] {boolean}
 		* @return {number}
-        * @static
-        * @public
-        */
-        public static normalizeAngleToAnother(dep: number, ind: number, radians: boolean = true): number {
-            return ind + Kiwi.Utils.GameMath.nearestAngleBetween(ind, dep, radians);
-        }
-
-        /**
-        * Normalize independent and dependent and then set dependent to an angle relative to &#x27;after/clockwise&#x27; independent.
-        * For instance dep=-170 and ind=170, then 190 will be reutrned as alternative to -170
-        * @method normalizeAngleAfterAnother
-        * @param dep {number}
-        * @param ind {number}
-        * @param [radians=true] {boolean}
+		* @static
+		* @public
+		*/
+		public static normalizeAngleToAnother(dep: number, ind: number, radians: boolean = true): number {
+			return ind + Kiwi.Utils.GameMath.nearestAngleBetween(ind, dep, radians);
+		}
+
+		/**
+		* Normalize independent and dependent and then set dependent to an angle relative to &#x27;after/clockwise&#x27; independent.
+		* For instance dep=-170 and ind=170, then 190 will be reutrned as alternative to -170
+		* @method normalizeAngleAfterAnother
+		* @param dep {number}
+		* @param ind {number}
+		* @param [radians=true] {boolean}
 		* @return {number}
-        * @static
-        * @public
-        */
-        public static normalizeAngleAfterAnother(dep: number, ind: number, radians: boolean = true): number {
-
-            dep = Kiwi.Utils.GameMath.normalizeAngle(dep - ind, radians);
-            return ind + dep;
-        }
-
-        /**
-        * Normalizes indendent and dependent and then sets dependent to an angle relative to &#x27;before/counterclockwise&#x27; independent.
-        * For instance dep = 190 and ind = 170, then -170 will be returned as an alternative to 190
-        * @method normalizeAngleBeforeAnother
-        * @param dep {number}
-        * @param ind {number}
-        * @param [radians=true] {boolean}
+		* @static
+		* @public
+		*/
+		public static normalizeAngleAfterAnother(dep: number, ind: number, radians: boolean = true): number {
+
+			dep = Kiwi.Utils.GameMath.normalizeAngle(dep - ind, radians);
+			return ind + dep;
+		}
+
+		/**
+		* Normalizes indendent and dependent and then sets dependent to an angle relative to &#x27;before/counterclockwise&#x27; independent.
+		* For instance dep = 190 and ind = 170, then -170 will be returned as an alternative to 190
+		* @method normalizeAngleBeforeAnother
+		* @param dep {number}
+		* @param ind {number}
+		* @param [radians=true] {boolean}
 		* @return {number}
-        * @static
-        * @public
-        */
-        public static normalizeAngleBeforeAnother(dep: number, ind: number, radians: boolean = true): number {
-
-            dep = Kiwi.Utils.GameMath.normalizeAngle(ind - dep, radians);
-            return ind - dep;
-        }
-
-        /**
-        * Interpolate across the shortest arc between two angles.
-        * @method interpolateAngles
-        * @param a1 {number}
-        * @param a2 {number}
-        * @param weight {number}
-        * @param [radians=true] {boolean}
-        * @param [ease=null] {any}
+		* @static
+		* @public
+		*/
+		public static normalizeAngleBeforeAnother(dep: number, ind: number, radians: boolean = true): number {
+
+			dep = Kiwi.Utils.GameMath.normalizeAngle(ind - dep, radians);
+			return ind - dep;
+		}
+
+		/**
+		* Interpolate across the shortest arc between two angles.
+		* @method interpolateAngles
+		* @param a1 {number}
+		* @param a2 {number}
+		* @param weight {number}
+		* @param [radians=true] {boolean}
+		* @param [ease=null] {any}
 		* @return {number}
-        * @static
-        * @public
-        */
-        public static interpolateAngles(a1: number, a2: number, weight: number, radians: boolean = true, ease = null): number {
+		* @static
+		* @public
+		*/
+		public static interpolateAngles(a1: number, a2: number, weight: number, radians: boolean = true, ease = null): number {
 
-            a1 = Kiwi.Utils.GameMath.normalizeAngle(a1, radians);
-            a2 = Kiwi.Utils.GameMath.normalizeAngleToAnother(a2, a1, radians);
+			a1 = Kiwi.Utils.GameMath.normalizeAngle(a1, radians);
+			a2 = Kiwi.Utils.GameMath.normalizeAngleToAnother(a2, a1, radians);
 
-            return (typeof ease === &#x27;function&#x27;) ? ease(weight, a1, a2 - a1, 1) : Kiwi.Utils.GameMath.interpolateFloat(a1, a2, weight);
-        }
+			return (typeof ease === &#x27;function&#x27;) ? ease(weight, a1, a2 - a1, 1) : Kiwi.Utils.GameMath.interpolateFloat(a1, a2, weight);
+		}
 
-        /**
+		/**
 		* Compute the logarithm of any value of any base.
 		* A logarithm is the exponent that some constant (base) would have to be raised to 
 		* to be equal to value.
 		* @method logBaseOf
-        * @param value {number}
-        * @param base {number}
+		* @param value {number}
+		* @param base {number}
 		* @return {number}
-        * @static
-        * @public
-        */
-        public static logBaseOf(value: number, base: number): number {
-            return Math.log(value) / Math.log(base);
-        }
-        /* 
+		* @static
+		* @public
+		*/
+		public static logBaseOf(value: number, base: number): number {
+			return Math.log(value) / Math.log(base);
+		}
+		/* 
 		* i.e.
 		* 4 ^ x = 16
 		* can be rewritten as to solve for x
@@ -1352,345 +1352,345 @@ <h1 class="file-heading">File: src/utils/GameMath.ts</h1>
 		* which would return 2, because 4^2 = 16
 		*/
 
-        /**
+		/**
 		* Greatest Common Denominator using Euclid&#x27;s algorithm.
-        * @method GCD
-        * @param m {number}
-        * @param n {number}
+		* @method GCD
+		* @param m {number}
+		* @param n {number}
 		* @return {number}
-        * @static
-        * @public
-		*/
-        public static GCD(m: number, n: number): number {
-            var r: number;
-
-            //make sure positive, GCD is always positive
-            m = Math.abs(m);
-            n = Math.abs(n);
-
-            //m must be &gt;= n
-            if (m &lt; n)
-            {
-                r = m;
-                m = n;
-                n = r;
-            }
-
-            //now start loop
-            while (true)
-            {
-                r = m % n;
-                if (!r) return n;
-                m = n;
-                n = r;
-            }
-
-            return 1;
-        }
-
-        /**
+		* @static
+		* @public
+		*/
+		public static GCD(m: number, n: number): number {
+			var r: number;
+
+			//make sure positive, GCD is always positive
+			m = Math.abs(m);
+			n = Math.abs(n);
+
+			//m must be &gt;= n
+			if (m &lt; n)
+			{
+				r = m;
+				m = n;
+				n = r;
+			}
+
+			//now start loop
+			while (true)
+			{
+				r = m % n;
+				if (!r) return n;
+				m = n;
+				n = r;
+			}
+
+			return 1;
+		}
+
+		/**
 		* Lowest Common Multiple
-        * @method LCM
-        * @param m {number}
-        * @param n {number}
+		* @method LCM
+		* @param m {number}
+		* @param n {number}
 		* @return {number}
-        * @static
-        * @public
+		* @static
+		* @public
 		*/
-        public static LCM(m: number, n: number): number {
-            return (m * n) / Kiwi.Utils.GameMath.GCD(m, n);
-        }
+		public static LCM(m: number, n: number): number {
+			return (m * n) / Kiwi.Utils.GameMath.GCD(m, n);
+		}
 
-        /**
+		/**
 		* Factorial - N! Simple product series. By definition:
 		* 0! == 1
-        * @method factorial
-        * @param value {number}
+		* @method factorial
+		* @param value {number}
 		* @return {number}
-        * @static
-        * @public
+		* @static
+		* @public
 		*/
-        public static factorial(value: number): number {
-            if (value == 0) return 1;
+		public static factorial(value: number): number {
+			if (value == 0) return 1;
 
-            var res: number = value;
+			var res: number = value;
 
-            while (--value)
-            {
-                res *= value;
-            }
+			while (--value)
+			{
+				res *= value;
+			}
 
-            return res;
-        }
+			return res;
+		}
 
-        /**
+		/**
 		* Gamma function. Defined: gamma(N) == (N - 1)!
 		* @method gammaFunction
 		* @param value {number}
 		* @return {number}
-        * @static
-        * @public
+		* @static
+		* @public
 		*/
-        public static gammaFunction(value: number): number {
-            return Kiwi.Utils.GameMath.factorial(value - 1);
-        }
+		public static gammaFunction(value: number): number {
+			return Kiwi.Utils.GameMath.factorial(value - 1);
+		}
 
-        /**
+		/**
 		* Falling factorial. Defined: (N)! / (N - x)!
 		* Written subscript: (N)x OR (base)exp
 		* @method fallingFactorial
 		* @param base {number}
 		* @param exp {number}
 		* @return {number}
-        * @static
-        * @public
+		* @static
+		* @public
 		*/
-        public static fallingFactorial(base: number, exp: number): number {
-            return Kiwi.Utils.GameMath.factorial(base) / Kiwi.Utils.GameMath.factorial(base - exp);
-        }
+		public static fallingFactorial(base: number, exp: number): number {
+			return Kiwi.Utils.GameMath.factorial(base) / Kiwi.Utils.GameMath.factorial(base - exp);
+		}
 
-        /**
+		/**
 		* Rising factorial. Defined: (N + x - 1)! / (N - 1)!
 		* Written superscript N^(x) OR base^(exp) 
 		* @method risingFactorial
 		* @param base {number}
 		* @param exp {number}
 		* @return {number}
-        * @static
-        * @public
+		* @static
+		* @public
 		*/
-        public static risingFactorial(base: number, exp: number): number {
-            //expanded from gammaFunction for speed
-            return Kiwi.Utils.GameMath.factorial(base + exp - 1) / Kiwi.Utils.GameMath.factorial(base - 1);
-        }
+		public static risingFactorial(base: number, exp: number): number {
+			//expanded from gammaFunction for speed
+			return Kiwi.Utils.GameMath.factorial(base + exp - 1) / Kiwi.Utils.GameMath.factorial(base - 1);
+		}
 
-        /**
+		/**
 		* Binomial coefficient.
 		* @method binCoef
-        * @param n {number}
-        * @param k {number}
+		* @param n {number}
+		* @param k {number}
 		* @return {number}
-        * @static
-        * @public
-        */
-        public static binCoef(n: number, k: number): number {
-            return Kiwi.Utils.GameMath.fallingFactorial(n, k) / Kiwi.Utils.GameMath.factorial(k);
-        }
-        /*
+		* @static
+		* @public
+		*/
+		public static binCoef(n: number, k: number): number {
+			return Kiwi.Utils.GameMath.fallingFactorial(n, k) / Kiwi.Utils.GameMath.factorial(k);
+		}
+		/*
 		* defined: N! / (k!(N-k)!)
 		* reduced: N! / (N-k)! == (N)k (fallingfactorial)
 		* reduced: (N)k / k!
 		*/
 
-        /**
+		/**
 		* Rising binomial coefficient.
 		* As one can notice in the analysis of binCoef(...) that 
 		* binCoef is the (N)k divided by k!. Similarly rising binCoef 
 		* is merely N^(k) / k! 
-        * @method risingBinCoef
-        * @param n {number}
-        * @param k {number}
+		* @method risingBinCoef
+		* @param n {number}
+		* @param k {number}
 		* @return {number}
-        * @static
-        * @public
-		*/
-        public static risingBinCoef(n: number, k: number): number {
-            return Kiwi.Utils.GameMath.risingFactorial(n, k) / Kiwi.Utils.GameMath.factorial(k);
-        }
-
-        /**
-        * Generate a random boolean result based on the chance value.
-        * Returns true or false based on the chance value (default 50%). For example if you wanted a player to have a 30% chance
-        * of getting a bonus, call chanceRoll(30) - true means the chance passed, false means it failed.
-        * 
-        * @method changeRoll
-        * @param [chance=50] {number} The chance of receiving the value. A number between 0 and 100 (effectively 0% to 100%)
-        * @return {boolean} true if the roll passed, or false
-        * @static
-        * @public
-        */
-        public static chanceRoll(chance: number = 50): boolean {
-
-            if (chance &lt;= 0)
-            {
-                return false;
-            }
-            else if (chance &gt;= 100)
-            {
-                return true;
-            }
-            else
-            {
-                if (Math.random() * 100 &gt;= chance)
-                {
-                    return false;
-                }
-                else
-                {
-                    return true;
-                }
-            }
-
-        }
-
-        /**
+		* @static
+		* @public
+		*/
+		public static risingBinCoef(n: number, k: number): number {
+			return Kiwi.Utils.GameMath.risingFactorial(n, k) / Kiwi.Utils.GameMath.factorial(k);
+		}
+
+		/**
+		* Generate a random boolean result based on the chance value.
+		* Returns true or false based on the chance value (default 50%). For example if you wanted a player to have a 30% chance
+		* of getting a bonus, call chanceRoll(30) - true means the chance passed, false means it failed.
+		* 
+		* @method changeRoll
+		* @param [chance=50] {number} The chance of receiving the value. A number between 0 and 100 (effectively 0% to 100%)
+		* @return {boolean} true if the roll passed, or false
+		* @static
+		* @public
+		*/
+		public static chanceRoll(chance: number = 50): boolean {
+
+			if (chance &lt;= 0)
+			{
+				return false;
+			}
+			else if (chance &gt;= 100)
+			{
+				return true;
+			}
+			else
+			{
+				if (Math.random() * 100 &gt;= chance)
+				{
+					return false;
+				}
+				else
+				{
+					return true;
+				}
+			}
+
+		}
+
+		/**
 		* Adds the given amount to the value, but never lets the value go over the specified maximum.
 		* 
-        * @method maxAdd
+		* @method maxAdd
 		* @param value {number} The value to add the amount to
 		* @param amount {number} The amount to add to the value
 		* @param max {number} The maximum the value is allowed to be
 		* @return {number}
-        * @static
-        * @public
+		* @static
+		* @public
 		*/
-        public static maxAdd(value: number, amount: number, max: number): number {
+		public static maxAdd(value: number, amount: number, max: number): number {
 
-            value += amount;
+			value += amount;
 
-            if (value &gt; max)
-            {
-                value = max;
-            }
+			if (value &gt; max)
+			{
+				value = max;
+			}
 
-            return value;
+			return value;
 
-        }
+		}
 
-        /**
+		/**
 		* Subtracts the given amount from the value, but never lets the value go below the specified minimum.
 		* 
-        * @method minSub
+		* @method minSub
 		* @param value {number} The base value
 		* @param amount {number} The amount to subtract from the base value
 		* @param min {number} The minimum the value is allowed to be
 		* @return {number}
-        * @static
-        * @public
+		* @static
+		* @public
 		*/
-        public static minSub(value: number, amount: number, min: number): number {
+		public static minSub(value: number, amount: number, min: number): number {
 
-            value -= amount;
+			value -= amount;
 
-            if (value &lt; min)
-            {
-                value = min;
-            }
+			if (value &lt; min)
+			{
+				value = min;
+			}
 
-            return value;
-        }
+			return value;
+		}
 
-        /**
+		/**
 		* Adds value to amount and ensures that the result always stays between 0 and max, by wrapping the value around.
 		* Values must be positive integers, and are passed through Math.abs
 		*
-        * @method wrapValue 
+		* @method wrapValue 
 		* @param value {number} The value to add the amount to
 		* @param amount {number} The amount to add to the value
 		* @param max {number} The maximum the value is allowed to be
 		* @return {number} The wrapped value
-        * @static
-        * @public
+		* @static
+		* @public
 		*/
-        public static wrapValue(value: number, amount: number, max: number): number {
+		public static wrapValue(value: number, amount: number, max: number): number {
 
-            var diff: number;
+			var diff: number;
 
-            value = Math.abs(value);
-            amount = Math.abs(amount);
-            max = Math.abs(max);
+			value = Math.abs(value);
+			amount = Math.abs(amount);
+			max = Math.abs(max);
 
-            diff = (value + amount) % max;
+			diff = (value + amount) % max;
 
-            return diff;
+			return diff;
 
-        }
+		}
 
-        /**
+		/**
 		* Randomly returns either a 1 or -1
 		* @method randomSign
 		* @return {number} Either 1 or -1.
-        * @static
-        * @public
-		*/
-        public static randomSign(): number {
-            return (Math.random() &gt; 0.5) ? 1 : -1;
-        }
-
-        /**
-        * Returns true if the number given is odd.
-        * @method isOdd
-        * @param n {number} The number to check
-        * @return {boolean} True if the given number is odd. False if the given number is even.
-        * @static
-        * @public
-        */
-        public static isOdd(n: number): boolean {
-
-            if (n &amp; 1)
-            {
-                return true;
-            }
-            else
-            {
-                return false;
-            }
-
-        }
-
-        /**
-        * Returns true if the number given is even.
-        * @method isEven
-        * @param n {number} The number to check
-        * @return {boolean} True if the given number is even. False if the given number is odd.
-        * @static
-        * @public
-        */
-        public static isEven(n: number): boolean {
-
-            if (n &amp; 1)
-            {
-                return false;
-            }
-            else
-            {
-                return true;
-            }
-
-        }
-
-        /**
+		* @static
+		* @public
+		*/
+		public static randomSign(): number {
+			return (Math.random() &gt; 0.5) ? 1 : -1;
+		}
+
+		/**
+		* Returns true if the number given is odd.
+		* @method isOdd
+		* @param n {number} The number to check
+		* @return {boolean} True if the given number is odd. False if the given number is even.
+		* @static
+		* @public
+		*/
+		public static isOdd(n: number): boolean {
+
+			if (n &amp; 1)
+			{
+				return true;
+			}
+			else
+			{
+				return false;
+			}
+
+		}
+
+		/**
+		* Returns true if the number given is even.
+		* @method isEven
+		* @param n {number} The number to check
+		* @return {boolean} True if the given number is even. False if the given number is odd.
+		* @static
+		* @public
+		*/
+		public static isEven(n: number): boolean {
+
+			if (n &amp; 1)
+			{
+				return false;
+			}
+			else
+			{
+				return true;
+			}
+
+		}
+
+		/**
 		* Keeps an angle value between -180 and +180.
 		* Should be called whenever the angle is updated on the Sprite to stop it from going insane.
 		* @method wrapAngle
 		* @param angle {number} The angle value to check
 		* @return {number} The new angle value, returns the same as the input angle if it was within bounds
 		* @static
-        * @public
-        */
-        public static wrapAngle(angle: number): number {
+		* @public
+		*/
+		public static wrapAngle(angle: number): number {
 
-            var result: number = angle;
+			var result: number = angle;
 
-            //  Nothing needs to change
-            if (angle &gt;= -180 &amp;&amp; angle &lt;= 180)
-            {
-                return angle;
-            }
+			//  Nothing needs to change
+			if (angle &gt;= -180 &amp;&amp; angle &lt;= 180)
+			{
+				return angle;
+			}
 
-            //  Else normalise it to -180, 180
-            result = (angle + 180) % 360;
+			//  Else normalise it to -180, 180
+			result = (angle + 180) % 360;
 
-            if (result &lt; 0)
-            {
-                result += 360;
-            }
+			if (result &lt; 0)
+			{
+				result += 360;
+			}
 
-            return result - 180;
+			return result - 180;
 
-        }
+		}
 
-        /**
+		/**
 		* Keeps an angle value between the given min and max values.
 		* @method angleLimit
 		* @param angle {number} The angle value to check. Must be between -180 and +180
@@ -1698,170 +1698,171 @@ <h1 class="file-heading">File: src/utils/GameMath.ts</h1>
 		* @param max {number} The maximum angle that is allowed (must be 180 or less)
 		* @return {number} The new angle value, returns the same as the input angle if it was within bounds
 		* @static
-        * @public
-        */
-        public static angleLimit(angle: number, min: number, max: number): number {
-
-            var result: number = angle;
-
-            if (angle &gt; max)
-            {
-                result = max;
-            }
-            else if (angle &lt; min)
-            {
-                result = min;
-            }
-
-            return result;
-        }
-
-        /**
-        * Interpolates between neighbouring values in an array using linear interpolation only. For example, linearInterpolation( [ 1,5,4 ], 0.5 ) = 5, and linearInterpolation( [ 1, 2 ], 0.3 ) = 1.3.
-        * @method linearInterpolation
-        * @param v {Array} An array of values through which to interpolate
-        * @param k {number} The position to interpolate, in the range 0-1
+		* @public
+		*/
+		public static angleLimit(angle: number, min: number, max: number): number {
+
+			var result: number = angle;
+
+			if (angle &gt; max)
+			{
+				result = max;
+			}
+			else if (angle &lt; min)
+			{
+				result = min;
+			}
+
+			return result;
+		}
+
+		/**
+		* Interpolates between neighbouring values in an array using linear interpolation only. For example, linearInterpolation( [ 1,5,4 ], 0.5 ) = 5, and linearInterpolation( [ 1, 2 ], 0.3 ) = 1.3.
+		* @method linearInterpolation
+		* @param v {Array} An array of values through which to interpolate
+		* @param k {number} The position to interpolate, in the range 0-1
 		* @return {number}
-        * @static
-        * @public
-        */
-        public static linearInterpolation(v, k):number {
+		* @static
+		* @public
+		*/
+		public static linearInterpolation(v, k):number {
 
-            var m = v.length - 1;
-            var f = m * k;
-            var i = Math.floor(f);
+			var m = v.length - 1;
+			var f = m * k;
+			var i = Math.floor(f);
 
-            if (k &lt; 0) return Kiwi.Utils.GameMath.linear(v[0], v[1], f);
-            if (k &gt; 1) return Kiwi.Utils.GameMath.linear(v[m], v[m - 1], m - f);
+			if (k &lt; 0) return Kiwi.Utils.GameMath.linear(v[0], v[1], f);
+			if (k &gt; 1) return Kiwi.Utils.GameMath.linear(v[m], v[m - 1], m - f);
 
-            return Kiwi.Utils.GameMath.linear(v[i], v[i + 1 &gt; m ? m : i + 1], f - i);
+			return Kiwi.Utils.GameMath.linear(v[i], v[i + 1 &gt; m ? m : i + 1], f - i);
 
-        }
+		}
 
-        /**
-        * Interpolates between values in an array using Bezier curves. This treats the values in the array as control points on a spline. Unlike Catmull-Rom splines, the value is not guaranteed to intersect precisely with these points.
-        * @method bezierInterpolation
-        * @param v {Array} An array of values through which to interpolate
-        * @param k {number} The position to interpolate, in the range 0-1
+		/**
+		* Interpolates between values in an array using Bezier curves. This treats the values in the array as control points on a spline. Unlike Catmull-Rom splines, the value is not guaranteed to intersect precisely with these points.
+		* @method bezierInterpolation
+		* @param v {Array} An array of values through which to interpolate
+		* @param k {number} The position to interpolate, in the range 0-1
 		* @return {number}
-        * @static
-        * @public
-        */
-        public static bezierInterpolation(v, k):number {
+		* @static
+		* @public
+		*/
+		public static bezierInterpolation(v, k):number {
 
-            var b = 0;
-            var n = v.length - 1;
+			var b = 0;
+			var n = v.length - 1;
 
-            for (var i = 0; i &lt;= n; i++)
-            {
-                b += Math.pow(1 - k, n - i) * Math.pow(k, i) * v[i] * Kiwi.Utils.GameMath.bernstein(n, i);
-            }
+			for (var i = 0; i &lt;= n; i++)
+			{
+				b += Math.pow(1 - k, n - i) * Math.pow(k, i) * v[i] * Kiwi.Utils.GameMath.bernstein(n, i);
+			}
 
-            return b;
+			return b;
 
-        }
+		}
 
-        /**
-        * Interpolates between values in an array using Catmull-Rom splines. This treats the values in the array as control points on a spline. Unlike Bezier curves, the value will intersect with every point in the array.
-        * @method catmullRomInterpolation
-        * @param v {Array} An array of values through which to interpolate
-        * @param k {Number} The position to interpolate, in the range 0-1
+		/**
+		* Interpolates between values in an array using Catmull-Rom splines. This treats the values in the array as control points on a spline. Unlike Bezier curves, the value will intersect with every point in the array.
+		* @method catmullRomInterpolation
+		* @param v {Array} An array of values through which to interpolate
+		* @param k {Number} The position to interpolate, in the range 0-1
 		* @return {number}
-        * @static
-        * @public
-        */
-        public static catmullRomInterpolation(v, k):number {
+		* @static
+		* @public
+		*/
+		public static catmullRomInterpolation(v, k):number {
 
-            var m = v.length - 1;
-            var f = m * k;
-            var i = Math.floor(f);
+			var m = v.length - 1;
+			var f = m * k;
+			var i = Math.floor(f);
 
-            if (v[0] === v[m])
-            {
-                if (k &lt; 0) i = Math.floor(f = m * (1 + k));
+			if (v[0] === v[m])
+			{
+				if (k &lt; 0) i = Math.floor(f = m * (1 + k));
 
-                return Kiwi.Utils.GameMath.catmullRom(v[(i - 1 + m) % m], v[i], v[(i + 1) % m], v[(i + 2) % m], f - i);
+				return Kiwi.Utils.GameMath.catmullRom(v[(i - 1 + m) % m], v[i], v[(i + 1) % m], v[(i + 2) % m], f - i);
 
-            }
-            else
-            {
-                if (k &lt; 0) return v[0] - (Kiwi.Utils.GameMath.catmullRom(v[0], v[0], v[1], v[1], -f) - v[0]);
+			}
+			else
+			{
+				if (k &lt; 0) return v[0] - (Kiwi.Utils.GameMath.catmullRom(v[0], v[0], v[1], v[1], -f) - v[0]);
 
-                if (k &gt; 1) return v[m] - (Kiwi.Utils.GameMath.catmullRom(v[m], v[m], v[m - 1], v[m - 1], f - m) - v[m]);
+				if (k &gt; 1) return v[m] - (Kiwi.Utils.GameMath.catmullRom(v[m], v[m], v[m - 1], v[m - 1], f - m) - v[m]);
 
-                return Kiwi.Utils.GameMath.catmullRom(v[i ? i - 1 : 0], v[i], v[m &lt; i + 1 ? m : i + 1], v[m &lt; i + 2 ? m : i + 2], f - i);
-            }
+				return Kiwi.Utils.GameMath.catmullRom(v[i ? i - 1 : 0], v[i], v[m &lt; i + 1 ? m : i + 1], v[m &lt; i + 2 ? m : i + 2], f - i);
+			}
 
-        }
+		}
 
-        /**
-        * Simple linear interpolation, identical to interpolateFloat.
-        * @method linear
-        * @param {Any} p0
-        * @param {Any} p1
-        * @param {Any} t
+		/**
+		* Simple linear interpolation, identical to interpolateFloat.
+		* @method linear
+		* @param {Any} p0
+		* @param {Any} p1
+		* @param {Any} t
 		* @return {number}
-        * @static
-        * @public
-        */
-        public static linear(p0, p1, t):number {
+		* @static
+		* @public
+		*/
+		public static linear(p0, p1, t):number {
 
-            return (p1 - p0) * t + p0;
+			return (p1 - p0) * t + p0;
 
-        }
+		}
 
-        /**
-        * Bernstein polynomial for constructing Bezier curves. Returns n! / i! / (n-i)!
-        * @method bernstein
-        * @param {Any} n
-        * @param {Any} i
+		/**
+		* Bernstein polynomial for constructing Bezier curves. Returns n! / i! / (n-i)!
+		* @method bernstein
+		* @param {Any} n
+		* @param {Any} i
 		* @return {number}
-        * @static
-        * @public
-        */
-        public static bernstein(n, i) :number {
-
-            return Kiwi.Utils.GameMath.factorial(n) / Kiwi.Utils.GameMath.factorial(i) / Kiwi.Utils.GameMath.factorial(n - i);
-
-        }
-
-        /**
-        * Function used to construct a Catmull-Rom interpolation: see catmullRomInterpolation()
-        * @method catmullRom
-        * @param {Any} p0
-        * @param {Any} p1
-        * @param {Any} p2
-        * @param {Any} p3
-        * @param {Any} t
+		* @static
+		* @public
+		*/
+		public static bernstein(n, i) :number {
+
+			return Kiwi.Utils.GameMath.factorial(n) / Kiwi.Utils.GameMath.factorial(i) / Kiwi.Utils.GameMath.factorial(n - i);
+
+		}
+
+		/**
+		* Function used to construct a Catmull-Rom interpolation: see catmullRomInterpolation()
+		* @method catmullRom
+		* @param {Any} p0
+		* @param {Any} p1
+		* @param {Any} p2
+		* @param {Any} p3
+		* @param {Any} t
 		* @return {number}
-        * @static
-        * @public
-        */
-        public static catmullRom(p0, p1, p2, p3, t) {
+		* @static
+		* @public
+		*/
+		public static catmullRom(p0, p1, p2, p3, t) {
 
-            var v0 = (p2 - p0) * 0.5, v1 = (p3 - p1) * 0.5, t2 = t * t, t3 = t * t2;
-            return (2 * p1 - 2 * p2 + v0 + v1) * t3 + (-3 * p1 + 3 * p2 - 2 * v0 - v1) * t2 + v0 * t + p1;
+			var v0 = (p2 - p0) * 0.5, v1 = (p3 - p1) * 0.5, t2 = t * t, t3 = t * t2;
+			return (2 * p1 - 2 * p2 + v0 + v1) * t3 + (-3 * p1 + 3 * p2 - 2 * v0 - v1) * t2 + v0 * t + p1;
 
-        }
+		}
 
-        /**
-        * Returns the difference between a and b.
-        * @method difference
-        * @param a {number}
-        * @param b {number}
+		/**
+		* Returns the difference between a and b.
+		* @method difference
+		* @param a {number}
+		* @param b {number}
 		* @return {number}
-        * @static
-        * @public
-        */ 
-        public static difference(a: number, b: number): number {
+		* @static
+		* @public
+		*/ 
+		public static difference(a: number, b: number): number {
 
-            return Math.abs(a - b);
+			return Math.abs(a - b);
 
-        }
+		}
 
-    }
+	}
 
 }
+
     </pre>
 </div>
 
diff --git a/docs/files/src_utils_Log.ts.html b/docs/files/src_utils_Log.ts.html
index f3f6daa..8d7d59f 100644
--- a/docs/files/src_utils_Log.ts.html
+++ b/docs/files/src_utils_Log.ts.html
@@ -373,434 +373,434 @@ <h1 class="file-heading">File: src/utils/Log.ts</h1>
 */
 module Kiwi.Utils {
 
-    /**
-    * A utilty class used to add management functionality to common console methods. 
-    * You can use this class by either creating a new instance, or using the instance at the namespace &#x27;Kiwi.Log&#x27;.
-    * 
-    * log/error/warn methods contained on this class function just like their &#x27;console&#x27; equivalents except that:
-    * - You can assign a tag to message by adding a &#x27;#&#x27; symbol to the front of a parameter. Example: this.log(&#x27;Hi&#x27;, &#x27;#welcome&#x27;); 
-    * - Messages can have multiple tags. Example: this.log(&#x27;Hi&#x27;, &#x27;#welcome&#x27;, &#x27;#greeting&#x27;);
-    * - Messages are recorded (by default) and you can then search through any messages saved.
-    *
-    * You can use the &#x27;show&#x27; commands to search through recordings and find specific messages. 
-    *
-    * 
-    * @class Log
-    * @namespace Kiwi.Utils
-    * @constructor
-    * @param [params] {Object}
-    *   @param [options.recording=true] {Boolean} If the logs should be recorded.
-    *   @param [options.display=true] {Boolean} If the logs should be displayed or not.
-    *   @param [options.enabled=true] {Boolean} If the Logger is enabled at all.
-    *   @param [options.maxRecordings=Infinity] {Number} The maximum number of recordings to have at a single time.
-    */
-    export class Log {
-
-        constructor(params: any= {}) {
-            this.setDefaultsFromParams(params);
-        }
-
-        /**
-        * Sets the log properties based on a object passed. 
-        * This method is used to set the properties on the Log based on 
-        * gameoptions passed at game creation.
-        * 
-        * @method setDefaultsFromParams
-        * @param [params] {Object}
-        *   @param [options.recording=true] {Boolean} If the logs should be recorded.
-        *   @param [options.display=true] {Boolean} If the logs should be displayed or not.
-        *   @param [options.enabled=true] {Boolean} If the Logger is enabled at all.
-        *   @param [options.maxRecordings=Infinity] {Number} The maximum number of recordings to have at a single time.
-        * @public
-        */
-        public setDefaultsFromParams(params: any= {}) {
-
-            if (!Kiwi.Utils.Common.isUndefined(params.enabled)) {
-                this.enabled = params.enabled;
-            }
-
-            if (!Kiwi.Utils.Common.isUndefined(params.recording)) {
-                this.recording = params.recording;
-            }
-
-            if (!Kiwi.Utils.Common.isUndefined(params.display)) {
-                this.display = params.display;
-            }
-
-            if (!Kiwi.Utils.Common.isUndefined(params.maxRecordings)) {
-                this.maxRecordings = params.maxRecordings;
-            }
-
-        }
-
-        /**
-        * If the log, warn, or error messages should function at all.
-        * When set to false messages won&#x27;t display or be recorded.
-        *
-        * @property enabled
-        * @type Boolean
-        * @default true 
-        * @public
-        */
-        public enabled: boolean = true;
-        
-        /**
-        * If messages should be recorded or not.
-        *
-        * @property record
-        * @type Boolean
-        * @default true 
-        * @public
-        */
-        public recording: boolean = true;
-        
-        /**
-        * If the log, warn, and error methods should display when executed or not.
-        * You may want to set this to &#x27;false&#x27; when releasing a game.
-        *
-        * @property display
-        * @type Boolean
-        * @default true 
-        * @public
-        */
-        public display: boolean = true;
-        
-        /**
-        * The maximum number of recordings to be kept at once.
-        *
-        * @property maxRecordings
-        * @type Number
-        * @default Infinity 
-        * @public
-        */
-        public maxRecordings: number = Infinity;
-        
-        /**
-        * A list containing all messages recorded.
-        *
-        * @property recordings
-        * @type Array
-        * @private 
-        */
-        private recordings: any[] = [];
-        
-        /**
-        * The time (in milliseconds) of the last recording.
-        *
-        * @property lastMessageTime
-        * @type Number
-        * @readOnly
-        * @public
-        */
-        public get lastMessageTime():number {
-            if (this.recordings.length &gt; 0) {
-                return this.recordings[this.recordings.length - 1].time;
-            }
-            return 0;
-        }
-        
-        /**
-        * The number of recordings that have been saved.
-        * Same as the recordings length, and won&#x27;t go above the &#x27;maxRecordings&#x27;.
-        *
-        * @property numRecordings
-        * @type Number
-        * @readOnly
-        * @public
-        */
-        public get numRecordings():number {
-            return this.recordings.length;
-        }
-
-
-        /**
-        * Saves a message to the &#x27;recordings&#x27; array.
-        * That message can then be retrieved later using the &#x27;show&#x27; methods.
-        *
-        * @method recordMessage
-        * @param message {String}
-        * @param [tags=[]] {String}
-        * @param [logMethod=console.log] {String} 
-        * @public
-        */
-        public record(messages: string[], tags:string[]=[], logMethod:any=console.log) {
-
-            if (this.recording) {
-
-                var recording = {
-                    messages: messages,
-                    time: Date.now(),
-                    tags: tags,
-                    logMethod: logMethod
-                };
-
-                if (this.recordings.push(recording) &gt; this.maxRecordings) {
-                    this.recordings.shift();
-                } 
-
-            }
-
-        }
-        
-        /**
-        * Removes recordings from the list. Goes from the oldest to newest. 
-        * By not passing any parameters, the entire log will be cleared.
-        *
-        * @method clearRecordings
-        * @param [start=0] {Number} 
-        * @param [end] {Number} 
-        * @public
-        */
-        public clearRecordings(start: number=0, end: number=this.recordings.length) {
-
-            this.recordings.splice(start, end);
-
-        }
-        
-        /**
-        * Executes a particular array of messages using a method passed.
-        * Takes into account the &#x27;display&#x27; property before executing. 
-        * 
-        * @method _execute
-        * @param method {Any} The method that should be used to log the messages. Generally a console method.
-        * @param context {Any} The context that the method should be executed in. Generally set to the console. 
-        * @param messages {Array} 
-        * @param [force=false] {Array}  
-        * @private
-        */
-        private _execute(method:any, context: any, messages:string[], force:boolean=false) {
-
-            if (this.display || force) {
-                method.apply(context, messages);
-            }
-
-        }
-
-        /**
-        * Accepts an array of strings and returns a new array consisting of all elements considered as a tag.
-        * 
-        * @method getTagsFromArray
-        * @param strings {Array} 
-        * @return {Array} Elements of the array considered as tags
-        * @public
-        */
-        public getTagsFromArray(array: string[]) {
-
-            var i = 0,
-                tags = [];
-
-            while ( i &lt; array.length ) {
-                if ( typeof array[ i ] === &quot;string&quot; ) {
-                    if ( array[ i ].charAt( 0 ) === &quot;#&quot; ) {
-                        tags.push( array[ i ] );
-                    }
-                }
-                i++;
-            }
-
-            return tags;
-
-        }
-        
-        /**
-        * Logs a message using the &#x27;console.log&#x27; method.
-        * Arguments starting with a &#x27;#&#x27; symbol are given that value as a tag.
-        * 
-        * @method log
-        * @param [..args] {Any} The data you would like to log.
-        * @public
-        */
-        public log(...args:any[]) {
-
-            if (!this.enabled) {
-                return;
-            }
-
-            this.record(args, this.getTagsFromArray(args), console.log);
-            this._execute(console.log, console, args);
-
-        }
-        
-
-        /**
-        * Logs a message using the &#x27;console.warn&#x27; method.
-        * Arguments starting with a &#x27;#&#x27; symbol are given that value as a tag.
-        * 
-        * @method warn
-        * @param [..args] {Any} The data you would like to log.
-        * @public
-        */
-        public warn(...args: any[]) {
-
-            if (!this.enabled) {
-                return;
-            }
-
-            this.record(args, this.getTagsFromArray(args), console.warn);
-            this._execute(console.warn, console, args);
-
-        }
-        
-        /**
-        * Logs a message using the &#x27;console.error&#x27; method.
-        * Arguments starting with a &#x27;#&#x27; symbol are given that value as a tag.
-        *
-        * @method error
-        * @param [..args] {Any} The data you would like to log.
-        * @public
-        */
-        public error(...args: any[]) {
-
-            if (!this.enabled) {
-                return;
-            }
-
-            this.record(args, this.getTagsFromArray(args), console.error);
-            this._execute(console.error, console, args);
-
-        }
-
-
-        /**
-        * Method that displays a particular recording passed.
-        *
-        * @method _show
-        * @param recording {Object}
-        * @param tags {Array}
-        * @return {Boolean} If the recording was displayed or not.
-        * @private
-        */
-        private _show( recording, tags:string[] ) {
-
-            if (!recording.logMethod) {
-                return false;
-            }
-
-            //Check that the tags match
-            var n = tags.length;
-            while( n-- ) {
-
-                if ( recording.tags.indexOf( tags[ n ] ) == -1 ) {
-                    return false;
-                }
-
-            }
-
-            this._execute(recording.logMethod, console, recording.messages, true );
-            return true;
-
-        }
-
-
-        /**
-        * Displays the last recording matching the tags passed.
-        * 
-        * @method showLast
-        * @param [...args] {Any} Any tags that the recordings must have.
-        * @public
-        */
-        public showLast(...args:any[]) {
-            var i = this.recordings.length;
-            
-            while(i--) {
-                if (this._show(this.recordings[i], args)) {
-                    return;
-                }
-            }
-        }
-
-
-        /**
-        * Displays all recordings.
-        * 
-        * @method showAll
-        * @param [...args] {Any} Any tags that the recordings must have.
-        * @public
-        */
-        public showAll(...args: any[]) {
-            for (var i = 0; i &lt; this.recordings.length; i++) {
-                this._show(this.recordings[i], args );
-            }
-        }
-
-
-        /**
-        * Displays all logs recorded.
-        * 
-        * @method showLogs
-        * @param [...args] {Any} Any tags that the recordings must have.
-        * @public
-        */
-        public showLogs(...args: any[]) {
-            for (var i = 0; i &lt; this.recordings.length; i++) {
-                if (this.recordings[i].logMethod === console.log) {
-                    this._show(this.recordings[i], args);
-                }
-            }
-        }
-
-
-        /**
-        * Displays all errors recorded.
-        * 
-        * @method showErrors
-        * @param [...args] {Any} Any tags that the recordings must have.
-        * @public
-        */
-        public showErrors(...args: any[]) {
-            for (var i = 0; i &lt; this.recordings.length; i++) {
-                if (this.recordings[i].logMethod === console.error) {
-                    this._show(this.recordings[i], args);
-                }
-            }
-        }
-
-
-        /**
-        * Displays all warnings recorded.
-        *
-        * @method showWarnings
-        * @param [...args] {Any} Any tags that the recordings must have.
-        * @public
-        */
-        public showWarnings(...args: any[]) {
-            for (var i = 0; i &lt; this.recordings.length; i++) {
-                if (this.recordings[i].logMethod === console.warn) {
-                    this._show(this.recordings[i], args);
-                }
-            }
-        }
-
-        /**
-        * Displays a series of recordings within a time period passed. 
-        * Time recorded is in milliseconds
-        * 
-        * @method showTimePeriod
-        * @param [start=0] {Number}
-        * @param [end=Infinity] {Number}
-        * @param [tags] {Array} An tags that the recordings must have.
-        * @public
-        */
-        public showTimePeriod(start: number=0, end: number=Infinity, tags:string[]=[]) {
-
-            var recording;
-
-            for (var i = 0; i &lt; this.recordings.length; i++) {
-
-                recording = this.recordings[i];
-                if (start &lt; recording.time &amp;&amp; end &gt; recording.time) {
-
-                    this._show(recording, tags);
-
-                }
-            }
-
-        }
-
-
-    }
-     
+	/**
+	* A utilty class used to add management functionality to common console methods. 
+	* You can use this class by either creating a new instance, or using the instance at the namespace &#x27;Kiwi.Log&#x27;.
+	* 
+	* log/error/warn methods contained on this class function just like their &#x27;console&#x27; equivalents except that:
+	* - You can assign a tag to message by adding a &#x27;#&#x27; symbol to the front of a parameter. Example: this.log(&#x27;Hi&#x27;, &#x27;#welcome&#x27;); 
+	* - Messages can have multiple tags. Example: this.log(&#x27;Hi&#x27;, &#x27;#welcome&#x27;, &#x27;#greeting&#x27;);
+	* - Messages are recorded (by default) and you can then search through any messages saved.
+	*
+	* You can use the &#x27;show&#x27; commands to search through recordings and find specific messages. 
+	*
+	* 
+	* @class Log
+	* @namespace Kiwi.Utils
+	* @constructor
+	* @param [params] {Object}
+	*   @param [options.recording=true] {Boolean} If the logs should be recorded.
+	*   @param [options.display=true] {Boolean} If the logs should be displayed or not.
+	*   @param [options.enabled=true] {Boolean} If the Logger is enabled at all.
+	*   @param [options.maxRecordings=Infinity] {Number} The maximum number of recordings to have at a single time.
+	*/
+	export class Log {
+
+		constructor(params: any= {}) {
+			this.setDefaultsFromParams(params);
+		}
+
+		/**
+		* Sets the log properties based on a object passed. 
+		* This method is used to set the properties on the Log based on 
+		* gameoptions passed at game creation.
+		* 
+		* @method setDefaultsFromParams
+		* @param [params] {Object}
+		*   @param [options.recording=true] {Boolean} If the logs should be recorded.
+		*   @param [options.display=true] {Boolean} If the logs should be displayed or not.
+		*   @param [options.enabled=true] {Boolean} If the Logger is enabled at all.
+		*   @param [options.maxRecordings=Infinity] {Number} The maximum number of recordings to have at a single time.
+		* @public
+		*/
+		public setDefaultsFromParams(params: any= {}) {
+
+			if (!Kiwi.Utils.Common.isUndefined(params.enabled)) {
+				this.enabled = params.enabled;
+			}
+
+			if (!Kiwi.Utils.Common.isUndefined(params.recording)) {
+				this.recording = params.recording;
+			}
+
+			if (!Kiwi.Utils.Common.isUndefined(params.display)) {
+				this.display = params.display;
+			}
+
+			if (!Kiwi.Utils.Common.isUndefined(params.maxRecordings)) {
+				this.maxRecordings = params.maxRecordings;
+			}
+
+		}
+
+		/**
+		* If the log, warn, or error messages should function at all.
+		* When set to false messages won&#x27;t display or be recorded.
+		*
+		* @property enabled
+		* @type Boolean
+		* @default true 
+		* @public
+		*/
+		public enabled: boolean = true;
+		
+		/**
+		* If messages should be recorded or not.
+		*
+		* @property record
+		* @type Boolean
+		* @default true 
+		* @public
+		*/
+		public recording: boolean = true;
+		
+		/**
+		* If the log, warn, and error methods should display when executed or not.
+		* You may want to set this to &#x27;false&#x27; when releasing a game.
+		*
+		* @property display
+		* @type Boolean
+		* @default true 
+		* @public
+		*/
+		public display: boolean = true;
+		
+		/**
+		* The maximum number of recordings to be kept at once.
+		*
+		* @property maxRecordings
+		* @type Number
+		* @default Infinity 
+		* @public
+		*/
+		public maxRecordings: number = Infinity;
+		
+		/**
+		* A list containing all messages recorded.
+		*
+		* @property recordings
+		* @type Array
+		* @private 
+		*/
+		private recordings: any[] = [];
+		
+		/**
+		* The time (in milliseconds) of the last recording.
+		*
+		* @property lastMessageTime
+		* @type Number
+		* @readOnly
+		* @public
+		*/
+		public get lastMessageTime():number {
+			if (this.recordings.length &gt; 0) {
+				return this.recordings[this.recordings.length - 1].time;
+			}
+			return 0;
+		}
+		
+		/**
+		* The number of recordings that have been saved.
+		* Same as the recordings length, and won&#x27;t go above the &#x27;maxRecordings&#x27;.
+		*
+		* @property numRecordings
+		* @type Number
+		* @readOnly
+		* @public
+		*/
+		public get numRecordings():number {
+			return this.recordings.length;
+		}
+
+
+		/**
+		* Saves a message to the &#x27;recordings&#x27; array.
+		* That message can then be retrieved later using the &#x27;show&#x27; methods.
+		*
+		* @method recordMessage
+		* @param message {String}
+		* @param [tags=[]] {String}
+		* @param [logMethod=console.log] {String} 
+		* @public
+		*/
+		public record(messages: string[], tags:string[]=[], logMethod:any=console.log) {
+
+			if (this.recording) {
+
+				var recording = {
+					messages: messages,
+					time: Date.now(),
+					tags: tags,
+					logMethod: logMethod
+				};
+
+				if (this.recordings.push(recording) &gt; this.maxRecordings) {
+					this.recordings.shift();
+				} 
+
+			}
+
+		}
+		
+		/**
+		* Removes recordings from the list. Goes from the oldest to newest. 
+		* By not passing any parameters, the entire log will be cleared.
+		*
+		* @method clearRecordings
+		* @param [start=0] {Number} 
+		* @param [end] {Number} 
+		* @public
+		*/
+		public clearRecordings(start: number=0, end: number=this.recordings.length) {
+
+			this.recordings.splice(start, end);
+
+		}
+		
+		/**
+		* Executes a particular array of messages using a method passed.
+		* Takes into account the &#x27;display&#x27; property before executing. 
+		* 
+		* @method _execute
+		* @param method {Any} The method that should be used to log the messages. Generally a console method.
+		* @param context {Any} The context that the method should be executed in. Generally set to the console. 
+		* @param messages {Array} 
+		* @param [force=false] {Array}  
+		* @private
+		*/
+		private _execute(method:any, context: any, messages:string[], force:boolean=false) {
+
+			if (this.display || force) {
+				method.apply(context, messages);
+			}
+
+		}
+
+		/**
+		* Accepts an array of strings and returns a new array consisting of all elements considered as a tag.
+		* 
+		* @method getTagsFromArray
+		* @param strings {Array} 
+		* @return {Array} Elements of the array considered as tags
+		* @public
+		*/
+		public getTagsFromArray(array: string[]) {
+
+			var i = 0,
+				tags = [];
+
+			while ( i &lt; array.length ) {
+				if ( typeof array[ i ] === &quot;string&quot; ) {
+					if ( array[ i ].charAt( 0 ) === &quot;#&quot; ) {
+						tags.push( array[ i ] );
+					}
+				}
+				i++;
+			}
+
+			return tags;
+
+		}
+		
+		/**
+		* Logs a message using the &#x27;console.log&#x27; method.
+		* Arguments starting with a &#x27;#&#x27; symbol are given that value as a tag.
+		* 
+		* @method log
+		* @param [..args] {Any} The data you would like to log.
+		* @public
+		*/
+		public log(...args:any[]) {
+
+			if (!this.enabled) {
+				return;
+			}
+
+			this.record(args, this.getTagsFromArray(args), console.log);
+			this._execute(console.log, console, args);
+
+		}
+		
+
+		/**
+		* Logs a message using the &#x27;console.warn&#x27; method.
+		* Arguments starting with a &#x27;#&#x27; symbol are given that value as a tag.
+		* 
+		* @method warn
+		* @param [..args] {Any} The data you would like to log.
+		* @public
+		*/
+		public warn(...args: any[]) {
+
+			if (!this.enabled) {
+				return;
+			}
+
+			this.record(args, this.getTagsFromArray(args), console.warn);
+			this._execute(console.warn, console, args);
+
+		}
+		
+		/**
+		* Logs a message using the &#x27;console.error&#x27; method.
+		* Arguments starting with a &#x27;#&#x27; symbol are given that value as a tag.
+		*
+		* @method error
+		* @param [..args] {Any} The data you would like to log.
+		* @public
+		*/
+		public error(...args: any[]) {
+
+			if (!this.enabled) {
+				return;
+			}
+
+			this.record(args, this.getTagsFromArray(args), console.error);
+			this._execute(console.error, console, args);
+
+		}
+
+
+		/**
+		* Method that displays a particular recording passed.
+		*
+		* @method _show
+		* @param recording {Object}
+		* @param tags {Array}
+		* @return {Boolean} If the recording was displayed or not.
+		* @private
+		*/
+		private _show( recording, tags:string[] ) {
+
+			if (!recording.logMethod) {
+				return false;
+			}
+
+			//Check that the tags match
+			var n = tags.length;
+			while( n-- ) {
+
+				if ( recording.tags.indexOf( tags[ n ] ) == -1 ) {
+					return false;
+				}
+
+			}
+
+			this._execute(recording.logMethod, console, recording.messages, true );
+			return true;
+
+		}
+
+
+		/**
+		* Displays the last recording matching the tags passed.
+		* 
+		* @method showLast
+		* @param [...args] {Any} Any tags that the recordings must have.
+		* @public
+		*/
+		public showLast(...args:any[]) {
+			var i = this.recordings.length;
+			
+			while(i--) {
+				if (this._show(this.recordings[i], args)) {
+					return;
+				}
+			}
+		}
+
+
+		/**
+		* Displays all recordings.
+		* 
+		* @method showAll
+		* @param [...args] {Any} Any tags that the recordings must have.
+		* @public
+		*/
+		public showAll(...args: any[]) {
+			for (var i = 0; i &lt; this.recordings.length; i++) {
+				this._show(this.recordings[i], args );
+			}
+		}
+
+
+		/**
+		* Displays all logs recorded.
+		* 
+		* @method showLogs
+		* @param [...args] {Any} Any tags that the recordings must have.
+		* @public
+		*/
+		public showLogs(...args: any[]) {
+			for (var i = 0; i &lt; this.recordings.length; i++) {
+				if (this.recordings[i].logMethod === console.log) {
+					this._show(this.recordings[i], args);
+				}
+			}
+		}
+
+
+		/**
+		* Displays all errors recorded.
+		* 
+		* @method showErrors
+		* @param [...args] {Any} Any tags that the recordings must have.
+		* @public
+		*/
+		public showErrors(...args: any[]) {
+			for (var i = 0; i &lt; this.recordings.length; i++) {
+				if (this.recordings[i].logMethod === console.error) {
+					this._show(this.recordings[i], args);
+				}
+			}
+		}
+
+
+		/**
+		* Displays all warnings recorded.
+		*
+		* @method showWarnings
+		* @param [...args] {Any} Any tags that the recordings must have.
+		* @public
+		*/
+		public showWarnings(...args: any[]) {
+			for (var i = 0; i &lt; this.recordings.length; i++) {
+				if (this.recordings[i].logMethod === console.warn) {
+					this._show(this.recordings[i], args);
+				}
+			}
+		}
+
+		/**
+		* Displays a series of recordings within a time period passed. 
+		* Time recorded is in milliseconds
+		* 
+		* @method showTimePeriod
+		* @param [start=0] {Number}
+		* @param [end=Infinity] {Number}
+		* @param [tags] {Array} An tags that the recordings must have.
+		* @public
+		*/
+		public showTimePeriod(start: number=0, end: number=Infinity, tags:string[]=[]) {
+
+			var recording;
+
+			for (var i = 0; i &lt; this.recordings.length; i++) {
+
+				recording = this.recordings[i];
+				if (start &lt; recording.time &amp;&amp; end &gt; recording.time) {
+
+					this._show(recording, tags);
+
+				}
+			}
+
+		}
+
+	}
+
 }
+
     </pre>
 </div>
 
diff --git a/docs/files/src_utils_RandomDataGenerator.ts.html b/docs/files/src_utils_RandomDataGenerator.ts.html
index c66f5ee..83b027f 100644
--- a/docs/files/src_utils_RandomDataGenerator.ts.html
+++ b/docs/files/src_utils_RandomDataGenerator.ts.html
@@ -372,419 +372,419 @@ <h1 class="file-heading">File: src/utils/RandomDataGenerator.ts</h1>
 
 module Kiwi.Utils {
 
-    /**
-    * Manages the creation of unique internal game IDs.
-    * Based on Nonsense by Josh Faul https://github.com/jocafa/Nonsense
-    * Random number generator from http://baagoe.org/en/wiki/Better_random_numbers_for_javascript
-    *
-    * @class RandomDataGenerator
-    * @constructor
-    * @namespace Kiwi.Utils
-    * @param [seeds=[]] {String[]}
-    * @return {RandomDataGenerator}
-    *
-    * @author Josh Faul
-    */
-    export class RandomDataGenerator {
-         
-        constructor(seeds: string[] = []) {
-
-            this.sow(seeds);
-
-        }
-
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} &quot;RandomDataGenerator&quot;
-        * @public
-        */
-        public objType() {
-            return &quot;RandomDataGenerator&quot;;
-        }
-
-        /**
-        * [DESCRIPTION REQUIRED]
-        * @property s0
-        * @type Any
-        * @private
-        */
-        private s0;
-
-        /**
-        * [DESCRIPTION REQUIRED]
-        * @property s1
-        * @type Any
-        * @private
-        */
-        private s1;
-
-        /**
-        * [DESCRIPTION REQUIRED]
-        * @property s2
-        * @type Any
-        * @private
-        */
-        private s2;
-
-        /**
-        * [DESCRIPTION REQUIRED]
-        * @property c
-        * @type Number
-        * @default 1
-        * @private
-        */
-        private c: number = 1;
-
-        /**
-        * Used to contain various arrays of data that can be used when randomly generating blocks of text.
-        * @property _data
-        * @type Object
-        * @private
-        */
-        private _data = {
-
-            lipsum: [
-			    &quot;lorem&quot;, &quot;ipsum&quot;, &quot;dolor&quot;, &quot;sit&quot;, &quot;amet&quot;, &quot;consectetur&quot;,
-			    &quot;adipiscing&quot;, &quot;elit&quot;, &quot;nunc&quot;, &quot;sagittis&quot;, &quot;tortor&quot;, &quot;ac&quot;, &quot;mi&quot;,
-			    &quot;pretium&quot;, &quot;sed&quot;, &quot;convallis&quot;, &quot;massa&quot;, &quot;pulvinar&quot;, &quot;curabitur&quot;,
-			    &quot;non&quot;, &quot;turpis&quot;, &quot;velit&quot;, &quot;vitae&quot;, &quot;rutrum&quot;, &quot;odio&quot;, &quot;aliquam&quot;,
-			    &quot;sapien&quot;, &quot;orci&quot;, &quot;tempor&quot;, &quot;sed&quot;, &quot;elementum&quot;, &quot;sit&quot;, &quot;amet&quot;,
-			    &quot;tincidunt&quot;, &quot;sed&quot;, &quot;risus&quot;, &quot;etiam&quot;, &quot;nec&quot;, &quot;lacus&quot;, &quot;id&quot;, &quot;ante&quot;,
-			    &quot;hendrerit&quot;, &quot;malesuada&quot;, &quot;donec&quot;, &quot;porttitor&quot;, &quot;magna&quot;, &quot;eget&quot;,
-			    &quot;libero&quot;, &quot;pharetra&quot;, &quot;sollicitudin&quot;, &quot;aliquam&quot;, &quot;mattis&quot;, &quot;mattis&quot;,
-			    &quot;massa&quot;, &quot;et&quot;, &quot;porta&quot;, &quot;morbi&quot;, &quot;vitae&quot;, &quot;magna&quot;, &quot;augue&quot;,
-			    &quot;vestibulum&quot;, &quot;at&quot;, &quot;lectus&quot;, &quot;sed&quot;, &quot;tellus&quot;, &quot;facilisis&quot;,
-			    &quot;tincidunt&quot;, &quot;suspendisse&quot;, &quot;eros&quot;, &quot;magna&quot;, &quot;consequat&quot;, &quot;at&quot;,
-			    &quot;sollicitudin&quot;, &quot;ac&quot;, &quot;vestibulum&quot;, &quot;vel&quot;, &quot;dolor&quot;, &quot;in&quot;, &quot;egestas&quot;,
-			    &quot;lacus&quot;, &quot;quis&quot;, &quot;lacus&quot;, &quot;placerat&quot;, &quot;et&quot;, &quot;molestie&quot;, &quot;ipsum&quot;,
-			    &quot;scelerisque&quot;, &quot;nullam&quot;, &quot;sit&quot;, &quot;amet&quot;, &quot;tortor&quot;, &quot;dui&quot;, &quot;aenean&quot;,
-			    &quot;pulvinar&quot;, &quot;odio&quot;, &quot;nec&quot;, &quot;placerat&quot;, &quot;fringilla&quot;, &quot;neque&quot;, &quot;dolor&quot;
-            ]
-        };
-
-        /**
-        * [DESCRIPTION REQUIRED]
-        * @method uint32
-        * @return {Any}
-        * @private
-        */
-        private uint32():any {
-
-            return this.rnd.apply(this) * 0x100000000; // 2^32
-
-        }
-
-        /**
-        * [DESCRIPTION REQUIRED]
-        * @method fract32
-        * @return {Any}
-        * @private
-        */
-        private fract32():any {
-
-            return this.rnd.apply(this) + (this.rnd.apply(this) * 0x200000 | 0) * 1.1102230246251565e-16; // 2^-53
-
-        }
-
-        // private random helper
-        /**
-        * [DESCRIPTION REQUIRED]
-        * @method rnd
-        * @return {Any}
-        * @private
-        */
-        private rnd():any {
-
-            var t = 2091639 * this.s0 + this.c * 2.3283064365386963e-10; // 2^-32
-
-            this.c = t | 0;
-            this.s0 = this.s1;
-            this.s1 = this.s2;
-            this.s2 = t - this.c;
-
-            return this.s2;
-        }
-
-        /**
-        * [DESCRIPTION REQUIRED]
-        * @method hash
-        * @param data {Any}
-        * @private
-        */
-        private hash(data):any {
-
-            var h, i, n;
-
-            n = 0xefc8249d;
-
-            data = data.toString();
-
-            for (i = 0; i &lt; data.length; i++)
-            {
-                n += data.charCodeAt(i);
-                h = 0.02519603282416938 * n;
-                n = h &gt;&gt;&gt; 0;
-                h -= n;
-                h *= n;
-                n = h &gt;&gt;&gt; 0;
-                h -= n;
-                n += h * 0x100000000; // 2^32
-            }
-
-            return (n &gt;&gt;&gt; 0) * 2.3283064365386963e-10; // 2^-32
-
-        }
-
-        /**
-        * Reset the seed of the random data generator
-        * @method sow
-        * @param [seeds=[]] {String[]}
-        * @public
-        */
-        public sow(seeds: string[] = []) {
-
-            this.s0 = this.hash(&#x27; &#x27;);
-            this.s1 = this.hash(this.s0);
-            this.s2 = this.hash(this.s1);
-
-            var seed;
-
-            for (var i = 0; seed = seeds[i++];)
-            {
-                this.s0 -= this.hash(seed);
-                this.s0 += ~~(this.s0 &lt; 0);
-
-                this.s1 -= this.hash(seed);
-                this.s1 += ~~(this.s1 &lt; 0);
-
-                this.s2 -= this.hash(seed);
-                this.s2 += ~~(this.s2 &lt; 0);
-            }
-
-        }
-
-        /**
-        * Returns a random integer between 0 and 2^32
-        * @method integer
-        * @return {Number}
-        * @public
-        */
-        public integer(): number {
-
-            return this.uint32();
-
-        }
-
-        /**
-        * Returns a random real number between 0 and 1
-        * @method frac
-        * @return {Number}
-        * @public
-        */
-        public frac(): number {
-
-            return this.fract32();
-
-        }
-
-        /**
-        * Returns a random real number between 0 and 2^32
-        * @method real
-        * @return {Number}
-        * @public
-        */
-        public real(): number {
+	/**
+	* Manages the creation of unique internal game IDs.
+	* Based on Nonsense by Josh Faul https://github.com/jocafa/Nonsense
+	* Random number generator from http://baagoe.org/en/wiki/Better_random_numbers_for_javascript
+	*
+	* @class RandomDataGenerator
+	* @constructor
+	* @namespace Kiwi.Utils
+	* @param [seeds=[]] {String[]}
+	* @return {RandomDataGenerator}
+	*
+	* @author Josh Faul
+	*/
+	export class RandomDataGenerator {
+
+		constructor(seeds: string[] = []) {
+
+			this.sow(seeds);
+
+		}
+
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} &quot;RandomDataGenerator&quot;
+		* @public
+		*/
+		public objType() {
+			return &quot;RandomDataGenerator&quot;;
+		}
+
+		/**
+		* [DESCRIPTION REQUIRED]
+		* @property s0
+		* @type Any
+		* @private
+		*/
+		private s0;
+
+		/**
+		* [DESCRIPTION REQUIRED]
+		* @property s1
+		* @type Any
+		* @private
+		*/
+		private s1;
+
+		/**
+		* [DESCRIPTION REQUIRED]
+		* @property s2
+		* @type Any
+		* @private
+		*/
+		private s2;
+
+		/**
+		* [DESCRIPTION REQUIRED]
+		* @property c
+		* @type Number
+		* @default 1
+		* @private
+		*/
+		private c: number = 1;
+
+		/**
+		* Used to contain various arrays of data that can be used when randomly generating blocks of text.
+		* @property _data
+		* @type Object
+		* @private
+		*/
+		private _data = {
+
+			lipsum: [
+				&quot;lorem&quot;, &quot;ipsum&quot;, &quot;dolor&quot;, &quot;sit&quot;, &quot;amet&quot;, &quot;consectetur&quot;,
+				&quot;adipiscing&quot;, &quot;elit&quot;, &quot;nunc&quot;, &quot;sagittis&quot;, &quot;tortor&quot;, &quot;ac&quot;, &quot;mi&quot;,
+				&quot;pretium&quot;, &quot;sed&quot;, &quot;convallis&quot;, &quot;massa&quot;, &quot;pulvinar&quot;, &quot;curabitur&quot;,
+				&quot;non&quot;, &quot;turpis&quot;, &quot;velit&quot;, &quot;vitae&quot;, &quot;rutrum&quot;, &quot;odio&quot;, &quot;aliquam&quot;,
+				&quot;sapien&quot;, &quot;orci&quot;, &quot;tempor&quot;, &quot;sed&quot;, &quot;elementum&quot;, &quot;sit&quot;, &quot;amet&quot;,
+				&quot;tincidunt&quot;, &quot;sed&quot;, &quot;risus&quot;, &quot;etiam&quot;, &quot;nec&quot;, &quot;lacus&quot;, &quot;id&quot;, &quot;ante&quot;,
+				&quot;hendrerit&quot;, &quot;malesuada&quot;, &quot;donec&quot;, &quot;porttitor&quot;, &quot;magna&quot;, &quot;eget&quot;,
+				&quot;libero&quot;, &quot;pharetra&quot;, &quot;sollicitudin&quot;, &quot;aliquam&quot;, &quot;mattis&quot;, &quot;mattis&quot;,
+				&quot;massa&quot;, &quot;et&quot;, &quot;porta&quot;, &quot;morbi&quot;, &quot;vitae&quot;, &quot;magna&quot;, &quot;augue&quot;,
+				&quot;vestibulum&quot;, &quot;at&quot;, &quot;lectus&quot;, &quot;sed&quot;, &quot;tellus&quot;, &quot;facilisis&quot;,
+				&quot;tincidunt&quot;, &quot;suspendisse&quot;, &quot;eros&quot;, &quot;magna&quot;, &quot;consequat&quot;, &quot;at&quot;,
+				&quot;sollicitudin&quot;, &quot;ac&quot;, &quot;vestibulum&quot;, &quot;vel&quot;, &quot;dolor&quot;, &quot;in&quot;, &quot;egestas&quot;,
+				&quot;lacus&quot;, &quot;quis&quot;, &quot;lacus&quot;, &quot;placerat&quot;, &quot;et&quot;, &quot;molestie&quot;, &quot;ipsum&quot;,
+				&quot;scelerisque&quot;, &quot;nullam&quot;, &quot;sit&quot;, &quot;amet&quot;, &quot;tortor&quot;, &quot;dui&quot;, &quot;aenean&quot;,
+				&quot;pulvinar&quot;, &quot;odio&quot;, &quot;nec&quot;, &quot;placerat&quot;, &quot;fringilla&quot;, &quot;neque&quot;, &quot;dolor&quot;
+			]
+		};
+
+		/**
+		* [DESCRIPTION REQUIRED]
+		* @method uint32
+		* @return {Any}
+		* @private
+		*/
+		private uint32():any {
+
+			return this.rnd.apply(this) * 0x100000000; // 2^32
+
+		}
+
+		/**
+		* [DESCRIPTION REQUIRED]
+		* @method fract32
+		* @return {Any}
+		* @private
+		*/
+		private fract32():any {
+
+			return this.rnd.apply(this) + (this.rnd.apply(this) * 0x200000 | 0) * 1.1102230246251565e-16; // 2^-53
+
+		}
+
+		// private random helper
+		/**
+		* [DESCRIPTION REQUIRED]
+		* @method rnd
+		* @return {Any}
+		* @private
+		*/
+		private rnd():any {
+
+			var t = 2091639 * this.s0 + this.c * 2.3283064365386963e-10; // 2^-32
+
+			this.c = t | 0;
+			this.s0 = this.s1;
+			this.s1 = this.s2;
+			this.s2 = t - this.c;
+
+			return this.s2;
+		}
+
+		/**
+		* [DESCRIPTION REQUIRED]
+		* @method hash
+		* @param data {Any}
+		* @private
+		*/
+		private hash(data):any {
+
+			var h, i, n;
+
+			n = 0xefc8249d;
+
+			data = data.toString();
+
+			for (i = 0; i &lt; data.length; i++)
+			{
+				n += data.charCodeAt(i);
+				h = 0.02519603282416938 * n;
+				n = h &gt;&gt;&gt; 0;
+				h -= n;
+				h *= n;
+				n = h &gt;&gt;&gt; 0;
+				h -= n;
+				n += h * 0x100000000; // 2^32
+			}
+
+			return (n &gt;&gt;&gt; 0) * 2.3283064365386963e-10; // 2^-32
+
+		}
+
+		/**
+		* Reset the seed of the random data generator
+		* @method sow
+		* @param [seeds=[]] {String[]}
+		* @public
+		*/
+		public sow(seeds: string[] = []) {
+
+			this.s0 = this.hash(&#x27; &#x27;);
+			this.s1 = this.hash(this.s0);
+			this.s2 = this.hash(this.s1);
+
+			var seed;
+
+			for (var i = 0; seed = seeds[i++];)
+			{
+				this.s0 -= this.hash(seed);
+				this.s0 += ~~(this.s0 &lt; 0);
+
+				this.s1 -= this.hash(seed);
+				this.s1 += ~~(this.s1 &lt; 0);
+
+				this.s2 -= this.hash(seed);
+				this.s2 += ~~(this.s2 &lt; 0);
+			}
+
+		}
+
+		/**
+		* Returns a random integer between 0 and 2^32
+		* @method integer
+		* @return {Number}
+		* @public
+		*/
+		public integer(): number {
+
+			return this.uint32();
+
+		}
+
+		/**
+		* Returns a random real number between 0 and 1
+		* @method frac
+		* @return {Number}
+		* @public
+		*/
+		public frac(): number {
+
+			return this.fract32();
+
+		}
+
+		/**
+		* Returns a random real number between 0 and 2^32
+		* @method real
+		* @return {Number}
+		* @public
+		*/
+		public real(): number {
 
-            return this.uint32() + this.fract32();
-
-        }
-
-        /**
-        * Returns a random integer between min and max
-        * @method integerInRange
-        * @param min {Number}
-        * @param max {Number}
-        * @return {Number}
-        * @public
-        */
-        public integerInRange(min: number, max: number): number {
-
-            return Math.floor(this.realInRange(min, max));
+			return this.uint32() + this.fract32();
+
+		}
+
+		/**
+		* Returns a random integer between min and max
+		* @method integerInRange
+		* @param min {Number}
+		* @param max {Number}
+		* @return {Number}
+		* @public
+		*/
+		public integerInRange(min: number, max: number): number {
+
+			return Math.floor(this.realInRange(min, max));
 
-        }
+		}
  
-        /**
-        * Returns a random real number between min and max
-        * @method realInRange
-        * @param min {Number}
-        * @param max {Number}
-        * @return {Number}
-        * @public
-        */
-        public realInRange(min: number, max: number): number {
-
-            min = min || 0;
-            max = max || 0;
-
-            return this.frac() * (max - min) + min;
-
-        }
-
-        /**
-        * Returns a random real number between -1 and 1
-        * @method normal
-        * @return {Number}
-        * @public
-        */
-        public normal(): number {
-
-            return 1 - 2 * this.frac();
-
-        }
-
-        /**
-        * Returns a valid v4 UUID hex string (from https://gist.github.com/1308368)
-        * @method uuid
-        * @return {String}
-        * @public
-        */
-        public uuid(): string {
-
-            var a, b;
-
-            for (
-                b = a = &#x27;&#x27;;
-                a++ &lt; 36;
-                b += ~a % 5 | a * 3 &amp; 4 ? (a ^ 15 ? 8 ^ this.frac() * (a ^ 20 ? 16 : 4) : 4).toString(16) : &#x27;-&#x27;
-            );
-
-            return b;
-        }
+		/**
+		* Returns a random real number between min and max
+		* @method realInRange
+		* @param min {Number}
+		* @param max {Number}
+		* @return {Number}
+		* @public
+		*/
+		public realInRange(min: number, max: number): number {
+
+			min = min || 0;
+			max = max || 0;
+
+			return this.frac() * (max - min) + min;
+
+		}
+
+		/**
+		* Returns a random real number between -1 and 1
+		* @method normal
+		* @return {Number}
+		* @public
+		*/
+		public normal(): number {
+
+			return 1 - 2 * this.frac();
+
+		}
+
+		/**
+		* Returns a valid v4 UUID hex string (from https://gist.github.com/1308368)
+		* @method uuid
+		* @return {String}
+		* @public
+		*/
+		public uuid(): string {
+
+			var a, b;
+
+			for (
+				b = a = &#x27;&#x27;;
+				a++ &lt; 36;
+				b += ~a % 5 | a * 3 &amp; 4 ? (a ^ 15 ? 8 ^ this.frac() * (a ^ 20 ? 16 : 4) : 4).toString(16) : &#x27;-&#x27;
+			);
+
+			return b;
+		}
  
-        /**
-        * Returns a random member of &#x60;array&#x60;
-        * @method pick
-        * @param {Any} array
-        * @return {Any}
-        * @public
-        */
-        public pick(array):any {
-
-            return array[this.integerInRange(0, array.length)];
+		/**
+		* Returns a random member of &#x60;array&#x60;
+		* @method pick
+		* @param {Any} array
+		* @return {Any}
+		* @public
+		*/
+		public pick(array):any {
+
+			return array[this.integerInRange(0, array.length)];
 
-        }
-
-        /**
-        * Returns a random member of &#x60;array&#x60;, favoring the earlier entries
-        * @method weightedPick
-        * @param {Any} array
-        * @return {Any}
-        * @public
-        */
-        public weightedPick(array):any {
+		}
+
+		/**
+		* Returns a random member of &#x60;array&#x60;, favoring the earlier entries
+		* @method weightedPick
+		* @param {Any} array
+		* @return {Any}
+		* @public
+		*/
+		public weightedPick(array):any {
 
-            return array[~~(Math.pow(this.frac(), 2) * array.length)];
+			return array[~~(Math.pow(this.frac(), 2) * array.length)];
 
-        }
+		}
 
-        /**
-        * Returns a random word of lipsum
-        * @method word
-        * @return {String}
-        * @public
-        */
-        public word():string {
+		/**
+		* Returns a random word of lipsum
+		* @method word
+		* @return {String}
+		* @public
+		*/
+		public word():string {
 
-            return this.pick(this._data.lipsum);
+			return this.pick(this._data.lipsum);
 
-        }
+		}
 
-        /**
-        * Returns &#x60;n&#x60; random words of lipsum, 3 if not specified
-        * @method words
-        * @param {Number} [quantity=3] Amount of random words to get.
-        * @return {String} 
-        * @public
-        */
-        public words(quantity: number = 3):string {
+		/**
+		* Returns &#x60;n&#x60; random words of lipsum, 3 if not specified
+		* @method words
+		* @param {Number} [quantity=3] Amount of random words to get.
+		* @return {String} 
+		* @public
+		*/
+		public words(quantity: number = 3):string {
 
-            var ret = [];
+			var ret = [];
 
-            for (var i = 0; i &lt; quantity; i++)
-            {
-                ret.push(this.pick(this._data.lipsum));
-            }
+			for (var i = 0; i &lt; quantity; i++)
+			{
+				ret.push(this.pick(this._data.lipsum));
+			}
 
-            return ret.join(&#x27; &#x27;);
+			return ret.join(&#x27; &#x27;);
 
-        }
+		}
 
-        /**
-        * Returns a random lipsum sentence
-        * @method sentence
-        * @return {String}
-        * @public
-        */
-        public sentence():String {
+		/**
+		* Returns a random lipsum sentence
+		* @method sentence
+		* @return {String}
+		* @public
+		*/
+		public sentence():String {
 
-            var ret;
+			var ret;
 
-            ret = this.words(this.integerInRange(2, 16)).replace(/[a-z]/, function (m) {
-                return m.toUpperCase();
-            });
+			ret = this.words(this.integerInRange(2, 16)).replace(/[a-z]/, function (m) {
+				return m.toUpperCase();
+			});
 
-            return ret + &#x27;.&#x27;;
+			return ret + &#x27;.&#x27;;
 
-        }
+		}
 
-        /**
-        * Returns &#x60;n&#x60; random lipsum sentences, 3 if not specified
-        * @method sentences
-        * @param {Number} [quantity=3] The number of sentences to grab.
-        * @return {String}
-        * @public
-        */
-        public sentences(quantity: number = 3) {
+		/**
+		* Returns &#x60;n&#x60; random lipsum sentences, 3 if not specified
+		* @method sentences
+		* @param {Number} [quantity=3] The number of sentences to grab.
+		* @return {String}
+		* @public
+		*/
+		public sentences(quantity: number = 3) {
 
-            var ret = [];
+			var ret = [];
 
-            for (var i = 0; i &lt; quantity; i++)
-            {
-                ret.push(this.sentence());
-            }
+			for (var i = 0; i &lt; quantity; i++)
+			{
+				ret.push(this.sentence());
+			}
 
-            return ret.join(&#x27; &#x27;);
+			return ret.join(&#x27; &#x27;);
 
-        }
+		}
 
-        /**
-        * Returns a random timestamp between min and max, or between the beginning of 2000 and the end of 2020 if min and max aren&#x27;t specified
-        * @method timestamp
-        * @param [min=946684800000] {Number} The lowest timestamp.
-        * @param [max=1577862000000] {Number} The highest timestamp.
-        * @return {Number}
-        * @public
-        */
-        public timestamp(min: number = 946684800000, max: number = 1577862000000):number {
+		/**
+		* Returns a random timestamp between min and max, or between the beginning of 2000 and the end of 2020 if min and max aren&#x27;t specified
+		* @method timestamp
+		* @param [min=946684800000] {Number} The lowest timestamp.
+		* @param [max=1577862000000] {Number} The highest timestamp.
+		* @return {Number}
+		* @public
+		*/
+		public timestamp(min: number = 946684800000, max: number = 1577862000000):number {
 
-            return this.realInRange(min, max);
+			return this.realInRange(min, max);
 
-        }
+		}
 
-        /**
-        * Returns a random angle between -180 and 180
-        * @method angle
-        * @return {Number}
-        * @public
-        */
-        public angle():number {
+		/**
+		* Returns a random angle between -180 and 180
+		* @method angle
+		* @return {Number}
+		* @public
+		*/
+		public angle():number {
 
-            return this.integerInRange(-180, 180);
+			return this.integerInRange(-180, 180);
 
-        }
+		}
 
-    }
+	}
 
 }
 
diff --git a/docs/files/src_utils_RequestAnimationFrame.ts.html b/docs/files/src_utils_RequestAnimationFrame.ts.html
index 187e690..5b8a92c 100644
--- a/docs/files/src_utils_RequestAnimationFrame.ts.html
+++ b/docs/files/src_utils_RequestAnimationFrame.ts.html
@@ -372,228 +372,228 @@ <h1 class="file-heading">File: src/utils/RequestAnimationFrame.ts</h1>
 
 module Kiwi.Utils {
 
-    /**
-    * Abstracts away the use of RAF or setTimeout for the core game update loop. The callback can be re-mapped on the fly.
-    *
-    * @class RequestAnimationFrame
-    * @constructor
-    * @namespace Kiwi.Utils
-    * @param callback {Any}
-    * @return {RequestAnimationFrame} This object.
-    *
-    */
-    export class RequestAnimationFrame {
- 
-        constructor (callback) {
-
-            this._callback = callback;
-
-            var vendors = [&#x27;ms&#x27;, &#x27;moz&#x27;, &#x27;webkit&#x27;, &#x27;o&#x27;];
-
-            for (var x = 0; x &lt; vendors.length &amp;&amp; !window.requestAnimationFrame; x++)
-            {
-                window.requestAnimationFrame = window[vendors[x] + &#x27;RequestAnimationFrame&#x27;];
-                window.cancelAnimationFrame = window[vendors[x] + &#x27;CancelAnimationFrame&#x27;];
-            }
-
-        }
-
-        /**
-        * The type of obect that this is.
-        * @method objType
-        * @return {String} &quot;RequestAnimationFrame&quot;
-        * @public
-        */
-        public objType() {
-            return &quot;RequestAnimationFrame&quot;;
-        }
-
-        /**
-        * The callback method that gets executed every time the RAF is executed.
-        * @property _callback
-        * @type Any
-        * @private
-        */
-        private _callback;
-
-        /**
-        * Sets the callback method that is to be executed each time the RAF is.
-        * @method setCallback
-        * @param {Any} callback
-        * @public
-        */
-        public setCallback(callback) {
-
-            this._callback = callback;
-
-        }
-
-        /**
-        * If the RAF is not supported, then this is the ID of the timeout that will be set.
-        * @property _timeOutID
-        * @type Any
-        * @private
-        */
-        private _timeOutID;
-
-        /**
-        * A boolean indicating whether or not we are using setTimeout for the RequestAnimationFrame or not.
-        * @property _isSetTimeOut
-        * @type boolean
-        * @default false
-        * @private
-        */
-        private _isSetTimeOut: boolean = false;
-
-        /**
-        * Returns a boolean indicating whether or not setTimeout is being used instead of RAF.
-        * @method usingSetTimeOut
-        * @return {boolean}
-        * @public
-        */
-        public isUsingSetTimeOut(): boolean {
-
-            return this._isSetTimeOut;
-
-        }
-
-        /**
-        * Returns a boolean indicating wheather or not we are using the RAF. If false it means we are using setTimeout for our update loop.
-        * @method usingRAF
-        * @return {boolean}
-        * @public
-        */
-        public isUsingRAF(): boolean {
-
-            if (this._isSetTimeOut === true)
-            {
-                return false;
-            } else {
-                return true;
-            }
-
-        }
-
-        /**
-        * The last time at which the RAF was called. This is given a value at the end of the RAF loop.
-        * @property lastTime
-        * @type Number
-        * @public
-        */
-        public lastTime: number = 0;
-
-        /**
-        * A timestamp that has the current time. This is updated each time the RAF loop is executed. Is updated before the last time in the loop.
-        * @property currentTime
-        * @type Number
-        * @public
-        */
-        public currentTime: number = 0;
-
-        /**
-        * A boolean indicating whether or not the RAF is running.
-        * @property isRunning
-        * @type boolean
-        * @default false
-        * @public
-        */
-        public isRunning: boolean = false;
-
-        /**
-        * Starts the RequestAnimationFrame (or setTimeout if RAF not supported).
-        * @method start
-        * @param [callback] {Any} A callback to be executed everyframe. Overrides the callback set at instantiation if passed.
-        * @public
-        */
-        public start(callback = null) {
-
-            if (callback)
-            {
-                this._callback = callback;
-            }
-
-            if (!window.requestAnimationFrame)
-            {
-                this._isSetTimeOut = true;
-                this._timeOutID = window.setTimeout(() =&gt; this.SetTimeoutUpdate(), 0);
-            }
-            else
-            {
-                this._isSetTimeOut = false;
-                window.requestAnimationFrame(() =&gt; this.RAFUpdate());
-            }
-
-            this.isRunning = true;
-
-        }
-
-        /**
-        * Stops the RAF from running.
-        * @method stop 
-        * @public
-        */
-        public stop() {
-
-            if (this._isSetTimeOut)
-            {
-                clearTimeout(this._timeOutID);
-            }
-            else
-            {
-                window.cancelAnimationFrame;
-            }
-
-            this.isRunning = false;
-
-        }
-
-        /**
-        * The update loop that the RAF will continuously call.
-        * @method RAFUpdate 
-        * @public
-        */
-        public RAFUpdate() {
-
-            //  Not in IE8 (but neither is RAF) also doesn&#x27;t use a high performance timer (window.performance.now)
-            this.currentTime = Date.now();
-
-            if (this._callback)
-            {
-                this._callback();
-            }
-
-            var timeToCall: number = Math.max(0, 16 - (this.currentTime - this.lastTime));
-
-            window.requestAnimationFrame(() =&gt; this.RAFUpdate());
-
-            this.lastTime = this.currentTime + timeToCall;
-
-        }
-
-        /**
-        * The update loop that the setTimeout method will continuously call.
-        * @method SetTimeoutUpdate 
-        * @public
-        */
-        public SetTimeoutUpdate() {
-
-            //  Not in IE8
-            this.currentTime = Date.now();
-
-            if (this._callback)
-            {
-                this._callback();
-            }
-
-            var timeToCall: number = Math.max(0, 16 - (this.currentTime - this.lastTime));
-
-            this._timeOutID = window.setTimeout(() =&gt; this.SetTimeoutUpdate(), timeToCall);
-
-            this.lastTime = this.currentTime + timeToCall;
-
-        }
-        
-    }
+	/**
+	* Abstracts away the use of RAF or setTimeout for the core game update loop. The callback can be re-mapped on the fly.
+	*
+	* @class RequestAnimationFrame
+	* @constructor
+	* @namespace Kiwi.Utils
+	* @param callback {Any}
+	* @return {RequestAnimationFrame} This object.
+	*
+	*/
+	export class RequestAnimationFrame {
+
+		constructor (callback) {
+
+			this._callback = callback;
+
+			var vendors = [&#x27;ms&#x27;, &#x27;moz&#x27;, &#x27;webkit&#x27;, &#x27;o&#x27;];
+
+			for (var x = 0; x &lt; vendors.length &amp;&amp; !window.requestAnimationFrame; x++)
+			{
+				window.requestAnimationFrame = window[vendors[x] + &#x27;RequestAnimationFrame&#x27;];
+				window.cancelAnimationFrame = window[vendors[x] + &#x27;CancelAnimationFrame&#x27;];
+			}
+
+		}
+
+		/**
+		* The type of obect that this is.
+		* @method objType
+		* @return {String} &quot;RequestAnimationFrame&quot;
+		* @public
+		*/
+		public objType() {
+			return &quot;RequestAnimationFrame&quot;;
+		}
+
+		/**
+		* The callback method that gets executed every time the RAF is executed.
+		* @property _callback
+		* @type Any
+		* @private
+		*/
+		private _callback;
+
+		/**
+		* Sets the callback method that is to be executed each time the RAF is.
+		* @method setCallback
+		* @param {Any} callback
+		* @public
+		*/
+		public setCallback(callback) {
+
+			this._callback = callback;
+
+		}
+
+		/**
+		* If the RAF is not supported, then this is the ID of the timeout that will be set.
+		* @property _timeOutID
+		* @type Any
+		* @private
+		*/
+		private _timeOutID;
+
+		/**
+		* A boolean indicating whether or not we are using setTimeout for the RequestAnimationFrame or not.
+		* @property _isSetTimeOut
+		* @type boolean
+		* @default false
+		* @private
+		*/
+		private _isSetTimeOut: boolean = false;
+
+		/**
+		* Returns a boolean indicating whether or not setTimeout is being used instead of RAF.
+		* @method usingSetTimeOut
+		* @return {boolean}
+		* @public
+		*/
+		public isUsingSetTimeOut(): boolean {
+
+			return this._isSetTimeOut;
+
+		}
+
+		/**
+		* Returns a boolean indicating wheather or not we are using the RAF. If false it means we are using setTimeout for our update loop.
+		* @method usingRAF
+		* @return {boolean}
+		* @public
+		*/
+		public isUsingRAF(): boolean {
+
+			if (this._isSetTimeOut === true)
+			{
+				return false;
+			} else {
+				return true;
+			}
+
+		}
+
+		/**
+		* The last time at which the RAF was called. This is given a value at the end of the RAF loop.
+		* @property lastTime
+		* @type Number
+		* @public
+		*/
+		public lastTime: number = 0;
+
+		/**
+		* A timestamp that has the current time. This is updated each time the RAF loop is executed. Is updated before the last time in the loop.
+		* @property currentTime
+		* @type Number
+		* @public
+		*/
+		public currentTime: number = 0;
+
+		/**
+		* A boolean indicating whether or not the RAF is running.
+		* @property isRunning
+		* @type boolean
+		* @default false
+		* @public
+		*/
+		public isRunning: boolean = false;
+
+		/**
+		* Starts the RequestAnimationFrame (or setTimeout if RAF not supported).
+		* @method start
+		* @param [callback] {Any} A callback to be executed everyframe. Overrides the callback set at instantiation if passed.
+		* @public
+		*/
+		public start(callback = null) {
+
+			if (callback)
+			{
+				this._callback = callback;
+			}
+
+			if (!window.requestAnimationFrame)
+			{
+				this._isSetTimeOut = true;
+				this._timeOutID = window.setTimeout(() =&gt; this.SetTimeoutUpdate(), 0);
+			}
+			else
+			{
+				this._isSetTimeOut = false;
+				window.requestAnimationFrame(() =&gt; this.RAFUpdate());
+			}
+
+			this.isRunning = true;
+
+		}
+
+		/**
+		* Stops the RAF from running.
+		* @method stop 
+		* @public
+		*/
+		public stop() {
+
+			if (this._isSetTimeOut)
+			{
+				clearTimeout(this._timeOutID);
+			}
+			else
+			{
+				window.cancelAnimationFrame;
+			}
+
+			this.isRunning = false;
+
+		}
+
+		/**
+		* The update loop that the RAF will continuously call.
+		* @method RAFUpdate 
+		* @public
+		*/
+		public RAFUpdate() {
+
+			//  Not in IE8 (but neither is RAF) also doesn&#x27;t use a high performance timer (window.performance.now)
+			this.currentTime = Date.now();
+
+			if (this._callback)
+			{
+				this._callback();
+			}
+
+			var timeToCall: number = Math.max(0, 16 - (this.currentTime - this.lastTime));
+
+			window.requestAnimationFrame(() =&gt; this.RAFUpdate());
+
+			this.lastTime = this.currentTime + timeToCall;
+
+		}
+
+		/**
+		* The update loop that the setTimeout method will continuously call.
+		* @method SetTimeoutUpdate 
+		* @public
+		*/
+		public SetTimeoutUpdate() {
+
+			//  Not in IE8
+			this.currentTime = Date.now();
+
+			if (this._callback)
+			{
+				this._callback();
+			}
+
+			var timeToCall: number = Math.max(0, 16 - (this.currentTime - this.lastTime));
+
+			this._timeOutID = window.setTimeout(() =&gt; this.SetTimeoutUpdate(), timeToCall);
+
+			this.lastTime = this.currentTime + timeToCall;
+
+		}
+
+	}
 
 }
 
diff --git a/docs/files/src_utils_Version.ts.html b/docs/files/src_utils_Version.ts.html
index cd22035..a1447c7 100644
--- a/docs/files/src_utils_Version.ts.html
+++ b/docs/files/src_utils_Version.ts.html
@@ -372,84 +372,84 @@ <h1 class="file-heading">File: src/utils/Version.ts</h1>
 
 module Kiwi.Utils {
 
-    /**
-    * Deals with parsing and comparing semver style version numbers
-    * @class Version
-    * @constructor
-    * @namespace Kiwi.Utils
-    */
-    export class Version {
+	/**
+	* Deals with parsing and comparing semver style version numbers
+	* @class Version
+	* @constructor
+	* @namespace Kiwi.Utils
+	*/
+	export class Version {
 
-        /**
-        * Parses a string such as &quot;1.2.3&quot; and returns an oject containing numeric properties for majorVersion, minorVersion and patchVersion
-        * @method parseVersion
-        * @param version {String}
-        * @return {Object} Object with properties majorVersion, minorVersion, patchVersion.
-        * @public
-        * @static
-        */
-        public static parseVersion(version: string) {
-            var split: Array&lt;string&gt; = version.split(&quot;.&quot;);
-            return {
-                majorVersion: parseInt(split[0]),
-                minorVersion: parseInt(split[1]),
-                patchVersion: parseInt(split[2])
-            }  
-        }
+		/**
+		* Parses a string such as &quot;1.2.3&quot; and returns an oject containing numeric properties for majorVersion, minorVersion and patchVersion
+		* @method parseVersion
+		* @param version {String}
+		* @return {Object} Object with properties majorVersion, minorVersion, patchVersion.
+		* @public
+		* @static
+		*/
+		public static parseVersion(version: string) {
+			var split: Array&lt;string&gt; = version.split(&quot;.&quot;);
+			return {
+				majorVersion: parseInt(split[0]),
+				minorVersion: parseInt(split[1]),
+				patchVersion: parseInt(split[2])
+			}
+		}
 
-        /**
-        * Compares two semver version strings such as &quot;0.1.0&quot; and &quot;0.2.1&quot;.
-        * Returns &quot;greater&quot;, &quot;less&quot; or &quot;equal&quot;.
-        * @method compareVersions
-        * @param version1 {String}
-        * @param version2 {String}
-        * @return {String} &quot;greater&quot;, &quot;less&quot; or &quot;equal&quot;
-        * @public
-        * @static
-        */
-        public static compareVersions(version1: string, version2: string): string {
-            var v1:any = Version.parseVersion(version1);
-            var v2:any = Version.parseVersion(version2);
-            if (v1.majorVersion &gt; v2.majorVersion) {
-                return &quot;greater&quot;;    
-            }
-            if (v1.majorVersion &lt; v2.majorVersion) {
-                return &quot;less&quot;;
-            }
-            // major versions must be equal
-            if (v1.minorVersion &gt; v2.minorVersion) {
-                return &quot;greater&quot;;
-            }
-            if (v1.minorVersion &lt; v2.minorVersion) {
-                return &quot;less&quot;;
-            }
-            //minor versions must be equal
-            if (v1.patchVersion &gt; v2.patchVersion) {
-                return &quot;greater&quot;;
-            }
-            if (v1.patchVersion &lt; v2.patchVersion) {
-                return &quot;less&quot;;
-            }
-            //patch versions must be equal
-            return &quot;equal&quot;;
+		/**
+		* Compares two semver version strings such as &quot;0.1.0&quot; and &quot;0.2.1&quot;.
+		* Returns &quot;greater&quot;, &quot;less&quot; or &quot;equal&quot;.
+		* @method compareVersions
+		* @param version1 {String}
+		* @param version2 {String}
+		* @return {String} &quot;greater&quot;, &quot;less&quot; or &quot;equal&quot;
+		* @public
+		* @static
+		*/
+		public static compareVersions(version1: string, version2: string): string {
+			var v1:any = Version.parseVersion(version1);
+			var v2:any = Version.parseVersion(version2);
+			if (v1.majorVersion &gt; v2.majorVersion) {
+				return &quot;greater&quot;;
+			}
+			if (v1.majorVersion &lt; v2.majorVersion) {
+				return &quot;less&quot;;
+			}
+			// major versions must be equal
+			if (v1.minorVersion &gt; v2.minorVersion) {
+				return &quot;greater&quot;;
+			}
+			if (v1.minorVersion &lt; v2.minorVersion) {
+				return &quot;less&quot;;
+			}
+			//minor versions must be equal
+			if (v1.patchVersion &gt; v2.patchVersion) {
+				return &quot;greater&quot;;
+			}
+			if (v1.patchVersion &lt; v2.patchVersion) {
+				return &quot;less&quot;;
+			}
+			//patch versions must be equal
+			return &quot;equal&quot;;
 
-        }
+		}
 
-        /**
-        * Compares two semver version strings such as &quot;0.1.0&quot; and &quot;0.2.1&quot;. Returns true if version1 is greater than version2. 
-        * @method greaterOrEqual
-        * @param version1 {String}
-        * @param version2 {String}
-        * @return {boolean}
-        * @public
-        * @static
-        */
-        public static greaterOrEqual(version1: string, version2: string): boolean {
-            var comp = Version.compareVersions(version1, version2);
-            return (comp == &quot;greater&quot; || comp == &quot;equal&quot;);
-        }
+		/**
+		* Compares two semver version strings such as &quot;0.1.0&quot; and &quot;0.2.1&quot;. Returns true if version1 is greater than version2. 
+		* @method greaterOrEqual
+		* @param version1 {String}
+		* @param version2 {String}
+		* @return {boolean}
+		* @public
+		* @static
+		*/
+		public static greaterOrEqual(version1: string, version2: string): boolean {
+			var comp = Version.compareVersions(version1, version2);
+			return (comp == &quot;greater&quot; || comp == &quot;equal&quot;);
+		}
 
-    }
+	}
 
 }
 
diff --git a/docs/modules/GameObjects.html b/docs/modules/GameObjects.html
index 46f0760..997ebf3 100644
--- a/docs/modules/GameObjects.html
+++ b/docs/modules/GameObjects.html
@@ -368,7 +368,7 @@ <h2 class="off-left">APIs</h2>
 
     
         <div class="foundat">
-            Defined in: <a href="../files/src_gameobjects_Textfield.ts.html#l493"><code>src&#x2F;gameobjects&#x2F;Textfield.ts:493</code></a>
+            Defined in: <a href="../files/src_gameobjects_Textfield.ts.html#l486"><code>src&#x2F;gameobjects&#x2F;Textfield.ts:486</code></a>
         </div>
     
 
diff --git a/docs/modules/Kiwi.html b/docs/modules/Kiwi.html
index b2e92c8..6922f0d 100644
--- a/docs/modules/Kiwi.html
+++ b/docs/modules/Kiwi.html
@@ -368,7 +368,7 @@ <h2 class="off-left">APIs</h2>
 
     
         <div class="foundat">
-            Defined in: <a href="../files/src_Kiwi.ts.html#l307"><code>src&#x2F;Kiwi.ts:307</code></a>
+            Defined in: <a href="../files/src_Kiwi.ts.html#l306"><code>src&#x2F;Kiwi.ts:306</code></a>
         </div>
     
 
diff --git a/docs/modules/Renderers.html b/docs/modules/Renderers.html
index a2cfe2c..370f05f 100644
--- a/docs/modules/Renderers.html
+++ b/docs/modules/Renderers.html
@@ -368,7 +368,7 @@ <h2 class="off-left">APIs</h2>
 
     
         <div class="foundat">
-            Defined in: <a href="../files/src_render_GLTextureWrapper.ts.html#l13"><code>src&#x2F;render&#x2F;GLTextureWrapper.ts:13</code></a>
+            Defined in: <a href="../files/src_render_GLTextureWrapper.ts.html#l11"><code>src&#x2F;render&#x2F;GLTextureWrapper.ts:11</code></a>
         </div>
     
 
diff --git a/docs/modules/Shaders.html b/docs/modules/Shaders.html
index fbc9e8d..c65207b 100644
--- a/docs/modules/Shaders.html
+++ b/docs/modules/Shaders.html
@@ -368,7 +368,7 @@ <h2 class="off-left">APIs</h2>
 
     
         <div class="foundat">
-            Defined in: <a href="../files/src_render_GLShaderManager.ts.html#l25"><code>src&#x2F;render&#x2F;GLShaderManager.ts:25</code></a>
+            Defined in: <a href="../files/src_render_GLShaderManager.ts.html#l24"><code>src&#x2F;render&#x2F;GLShaderManager.ts:24</code></a>
         </div>
     
 
diff --git a/gruntfile.js b/gruntfile.js
index c89ca4b..ed94436 100644
--- a/gruntfile.js
+++ b/gruntfile.js
@@ -1,98 +1,98 @@
 module.exports = function(grunt) {
 
-  require('matchdep').filterDev('grunt-*').forEach(grunt.loadNpmTasks);
-
-  // Project configuration.
-  grunt.initConfig({
-    pkg: grunt.file.readJSON('package.json'),
-
-    BASE_PATH: '',
-    DEVELOPMENT_PATH: '',
-
-    ts: {
-      build: {
-        src: ["./src/**/*.ts"],
-        out: './build/kiwi.js',
-
-        options: {
-          target: 'es5',
-          module: 'commonjs',
-          sourcemap: false,
-          declaration: true,
-          comments: true
-        },
-      }
-    },
-
-    yuidoc: {
-      compile: {
-        name: '<%= pkg.name %>',
-        description: '<%= pkg.description %>',
-        version: '<%= pkg.version %>',
-        url: '<%= pkg.homepage %>',
-
-        options: {
-          extension: '.ts',
-          paths: '<%= DEVELOPMENT_PATH %>' + 'src/',
-          outdir: '<%= BASE_PATH %>' + 'docs/'
-        }
-      }
-    },
-
-    uglify: {
-      build: {
-        files: {
-          'build/kiwi.min.js': ['build/kiwi.js']
-        }
-      }
-    },
-
-    concat: {
-      build: {
-        src: ['build/kiwi.js', 'src/gl-matrix-min.js'],
-        dest: 'build/kiwi.js'
-      },
-      buildmin: {
-        src: ['build/kiwi.min.js', 'src/gl-matrix-min.js'],
-        dest: 'build/kiwi.min.js'
-      }
-    },
-
-    tslint: {
-      options: {
-        configuration: grunt.file.readJSON("tslint.json")
-      },
-      files: {
-        src: ["./src/**/*.ts"],
-      }
-    },
-
-    copy: {
-      doclogo: {
-        src: 'docstyles/logo.png',
-        dest: 'docs/assets/css/logo.png'
-      },
-
-      docfavicon: {
-        src: 'docstyles/favicon.png',
-        dest: 'docs/assets/favicon.png'
-      },
-
-      docstyles: {
-        src: 'docstyles/main.css',
-        dest: 'docs/assets/css/main.css'
-      },
-
-      templateGame: {
-        src: './build/kiwi.js',
-        dest: './templateGame/lib/kiwi.js'
-      }
-    }
-  });
-
-  grunt.registerTask("default", ["ts:build", "tslint", "concat:build", "uglify:build", "copy:templateGame"]);
-  grunt.registerTask("full", ["ts:build", "concat:build", "uglify:build", "yuidoc:compile", "copy:templateGame", "copy:doclogo", "copy:docstyles"]);
-  grunt.registerTask("docs", ["yuidoc:compile", "copy:doclogo", "copy:docstyles", "copy:docfavicon"]);
-  grunt.registerTask("join", ["concat:build"]);
+	require('matchdep').filterDev('grunt-*').forEach(grunt.loadNpmTasks);
+
+	// Project configuration.
+	grunt.initConfig({
+		pkg: grunt.file.readJSON('package.json'),
+
+		BASE_PATH: '',
+		DEVELOPMENT_PATH: '',
+
+		ts: {
+			build: {
+				src: ["./src/**/*.ts"],
+				out: './build/kiwi.js',
+
+				options: {
+					target: 'es5',
+					module: 'commonjs',
+					sourcemap: false,
+					declaration: true,
+					comments: true
+				},
+			}
+		},
+
+		yuidoc: {
+			compile: {
+				name: '<%= pkg.name %>',
+				description: '<%= pkg.description %>',
+				version: '<%= pkg.version %>',
+				url: '<%= pkg.homepage %>',
+
+				options: {
+					extension: '.ts',
+					paths: '<%= DEVELOPMENT_PATH %>' + 'src/',
+					outdir: '<%= BASE_PATH %>' + 'docs/'
+				}
+			}
+		},
+
+		uglify: {
+			build: {
+				files: {
+					'build/kiwi.min.js': ['build/kiwi.js']
+				}
+			}
+		},
+
+		concat: {
+			build: {
+				src: ['build/kiwi.js', 'src/gl-matrix-min.js'],
+				dest: 'build/kiwi.js'
+			},
+			buildmin: {
+				src: ['build/kiwi.min.js', 'src/gl-matrix-min.js'],
+				dest: 'build/kiwi.min.js'
+			}
+		},
+
+		tslint: {
+			options: {
+				configuration: grunt.file.readJSON("tslint.json")
+			},
+			files: {
+				src: ["./src/**/*.ts"],
+			}
+		},
+
+		copy: {
+			doclogo: {
+				src: 'docstyles/logo.png',
+				dest: 'docs/assets/css/logo.png'
+			},
+
+			docfavicon: {
+				src: 'docstyles/favicon.png',
+				dest: 'docs/assets/favicon.png'
+			},
+
+			docstyles: {
+				src: 'docstyles/main.css',
+				dest: 'docs/assets/css/main.css'
+			},
+
+			templateGame: {
+				src: './build/kiwi.js',
+				dest: './templateGame/lib/kiwi.js'
+			}
+		}
+	});
+
+	grunt.registerTask("default", ["ts:build", "tslint", "concat:build", "uglify:build", "copy:templateGame"]);
+	grunt.registerTask("full", ["ts:build", "concat:build", "uglify:build", "yuidoc:compile", "copy:templateGame", "copy:doclogo", "copy:docstyles"]);
+	grunt.registerTask("docs", ["yuidoc:compile", "copy:doclogo", "copy:docstyles", "copy:docfavicon"]);
+	grunt.registerTask("join", ["concat:build"]);
 
 };
\ No newline at end of file
diff --git a/package.json b/package.json
index 406bdd1..cdd6c1c 100644
--- a/package.json
+++ b/package.json
@@ -1,31 +1,31 @@
 {
-    "name": "Kiwi.js",
-    "version": "1.2.0",
-    "description": "Kiwi.js is a Javascript/Typescript library for creating HTML5 games.",
-    "author": "GameLab",
+	"name": "Kiwi.js",
+	"version": "1.2.0",
+	"description": "Kiwi.js is a Javascript/Typescript library for creating HTML5 games.",
+	"author": "GameLab",
 
-    "homepage": "http://kiwijs.org/",
-    "bugs": "https://github.com/gamelab/kiwi.js/issues?state=open",
-    "license": "MIT",
-    "licenseUrl": "https://github.com/gamelab/kiwi.js/blob/master/license.txt",
+	"homepage": "http://kiwijs.org/",
+	"bugs": "https://github.com/gamelab/kiwi.js/issues?state=open",
+	"license": "MIT",
+	"licenseUrl": "https://github.com/gamelab/kiwi.js/blob/master/license.txt",
 
-    "repository": {
-        "type": "git",
-        "url": "https://github.com/gamelab/kiwi.js"
-    },
+	"repository": {
+		"type": "git",
+		"url": "https://github.com/gamelab/kiwi.js"
+	},
 
-    "main": "kiwi.js",
+	"main": "kiwi.js",
 
-    "dependencies": {},
-    "devDependencies": {
-        "matchdep": "~0.1.2",
-        "grunt": "~0.4.x",
-        "grunt-contrib-uglify": "0.2.x",
-        "typescript": "1.4.x",
-        "grunt-ts" : "latest",
-        "grunt-contrib-concat" : "latest",
-        "grunt-contrib-yuidoc": "0.4.x",
-        "grunt-contrib-copy":  "0.4.x",
-        "grunt-tslint": "latest"
-    }
+	"dependencies": {},
+	"devDependencies": {
+		"matchdep": "~0.1.2",
+		"grunt": "~0.4.x",
+		"grunt-contrib-uglify": "0.2.x",
+		"typescript": "1.4.x",
+		"grunt-ts" : "latest",
+		"grunt-contrib-concat" : "latest",
+		"grunt-contrib-yuidoc": "0.4.x",
+		"grunt-contrib-copy":  "0.4.x",
+		"grunt-tslint": "latest"
+	}
 }
\ No newline at end of file
diff --git a/src/Kiwi.ts b/src/Kiwi.ts
index e8766ba..0ea6a4c 100644
--- a/src/Kiwi.ts
+++ b/src/Kiwi.ts
@@ -140,232 +140,230 @@
 */
 
 module Kiwi {
-    
-    /**
-    * 
-    * @property Log
-    * @static
-    * @type Kiwi.Utils.Log
-    * @public
-    */
-    export var Log: Kiwi.Utils.Log = new Kiwi.Utils.Log();
-    
-    /**
-    * The version of Kiwi that is currently being used.
-    * @property VERSION
-    * @static
-    * @type string
-    * @public
-    */
-    export var VERSION: string = "1.2.0";
-    
-    //DIFFERENT RENDERER STATIC VARIABLES
-    /**
-    * A Static property that contains the number associated with the CANVAS RENDERER.
-    * @property RENDERER_CANVAS
-    * @static
-    * @type number
-    * @default 0
-    * @public
-    */
-    export var RENDERER_CANVAS: number = 0;
-    
-    /**
-    * A Static property that contains the number associated with the WEBGL RENDERER.
-    * @property RENDERER_WEBGL
-    * @static 
-    * @type number
-    * @default 1
-    * @public
-    */
-    export var RENDERER_WEBGL: number = 1;
-
-    /**
-    * A Static property that contains the number associated with RENDERER AUTODETECTION
-    * @property RENDERER_AUTO
-    * @static
-    * @type number
-    * @default 2
-    * @public
-    * @since 1.1.0
-    */
-    export var RENDERER_AUTO: number = 2;
-    
-    // DEVICE TARGET STATIC VARIABLES
-    /**
-    * Contains the number associated with the targetting of browsers. 
-    * @property TARGET_BROWSER
-    * @static
-    * @type number
-    * @default 0
-    * @public
-    */
-    export var TARGET_BROWSER: number = 0;
-    
-    /**
-    * Contains the number associated with the targetting of CocoonJS.
-    * @property TARGET_COCOON
-    * @static
-    * @type number
-    * @default 1
-    * @public
-    */
-    export var TARGET_COCOON: number = 1;
-    
-    //DEBUG OPTION STATIC VARIABLES
-    /**
-    * Contains the number that is used to turn the Debug options on.
-    * @property DEBUG_ON
-    * @static
-    * @type number
-    * @default 0
-    * @public
-    */
-    export var DEBUG_ON: number = 0;
-    
-    /**
-    * Contains the number that is used to turn the Debug options off.
-    * @property DEBUG_OFF
-    * @static
-    * @type number
-    * @default 1
-    * @public
-    */
-    export var DEBUG_OFF: number = 1;
-    
-    /**
-    * Contains the Device class that is used to determine which features are supported by the users browser.
-    * @property DEVICE
-    * @static
-    * @type Device
-    * @public
-    */
-    export var DEVICE: Kiwi.System.Device = null;
-    
-    //STATIC PROPERTIES FOR GENERAL OBJECT TYPE DETECTION
-    /**
-    * Contains a number that is used to identify objects that are a State.
-    * @property STATE
-    * @static
-    * @type number
-    * @default 0
-    * @public
-    */
-    export var STATE: number = 0;
- 
-    /**
-    * Contains a number that is used to identify objects that are a Group.
-    * @property GROUP
-    * @static
-    * @type number
-    * @default 2
-    * @public
-    */
-    export var GROUP: number = 2;
-    
-    /**
-    * Contains a number that is used to identify objects that are a Entity.
-    * @property ENTITY
-    * @static
-    * @type number
-    * @default 3
-    * @public
-    */
-    export var ENTITY: number = 3;
-    
-    /**
-    * Contains a number that is used to identify objects that are a Camera.
-    * @property CAMERA
-    * @static
-    * @type number 
-    * @default 4
-    * @public
-    */
-    export var CAMERA: number = 4;
-
-    /**
-    * Contains a number that is used to identify objects that are a HUD Widget.
-    * @property HUD_WIDGET
-    * @static
-    * @type number
-    * @default 5
-    * @public
-    */
-    export var HUD_WIDGET: number = 5;
-
-    /**
-    * Contains a number that is used to identify objects that are a TILE_LAYER.
-    * @property TILE_LAYER
-    * @static
-    * @type number
-    * @default 6
-    * @public
-    */
-    export var TILE_LAYER: number = 6;
-
-    
-    /**
-    * The GameManager is used to maintain mulitple instances of Kiwi games within a single document.
-    *  
-    * @class GameManager
-    * @namespace Kiwi
-    * @static
-    */
-    export class GameManager {
-
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} "GameManager"
-        * @public
-        */
-        public objType() {
-            return "GameManager";
-        }
-
-        /**
-        * A list of all of the games that are currently on this document.
-        * @property _games
-        * @static
-        * @type Game[]
-        * @private
-        */
-        private static _games: Kiwi.Game[] = [];
-
-        /**
-        * Used to register a new Game with this manager. Returns the new number of games that have been registered.
-        * @method register
-        * @param game {Game} The game you are wanting to register.
-        * @return {Number] The new number of games registered.
-        * @public
-        */
-        public static register(game: Kiwi.Game): number {
-
-            return Kiwi.GameManager._games.push(game);
-
-        }
-
-        /**
-        * Returns the total number of game that are currently registered with this GameManager.
-        * @method total
-        * @return {Number} Total number of registered games.
-        * @public
-        */
-        public static total(): number {
-            return Kiwi.GameManager._games.length;
-        }
-
-    }
-
-
-    export var Plugins = {};
-
-    export var extend:Function = function (d, b) {
-        for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
-        function __() { this.constructor = d; }
-        __.prototype = b.prototype;
-        d.prototype = new __();
-    };
-    
-}
 
+	/**
+	* 
+	* @property Log
+	* @static
+	* @type Kiwi.Utils.Log
+	* @public
+	*/
+	export var Log: Kiwi.Utils.Log = new Kiwi.Utils.Log();
+
+	/**
+	* The version of Kiwi that is currently being used.
+	* @property VERSION
+	* @static
+	* @type string
+	* @public
+	*/
+	export var VERSION: string = "1.2.0";
+
+	//DIFFERENT RENDERER STATIC VARIABLES
+	/**
+	* A Static property that contains the number associated with the CANVAS RENDERER.
+	* @property RENDERER_CANVAS
+	* @static
+	* @type number
+	* @default 0
+	* @public
+	*/
+	export var RENDERER_CANVAS: number = 0;
+
+	/**
+	* A Static property that contains the number associated with the WEBGL RENDERER.
+	* @property RENDERER_WEBGL
+	* @static 
+	* @type number
+	* @default 1
+	* @public
+	*/
+	export var RENDERER_WEBGL: number = 1;
+
+	/**
+	* A Static property that contains the number associated with RENDERER AUTODETECTION
+	* @property RENDERER_AUTO
+	* @static
+	* @type number
+	* @default 2
+	* @public
+	* @since 1.1.0
+	*/
+	export var RENDERER_AUTO: number = 2;
+	
+	// DEVICE TARGET STATIC VARIABLES
+	/**
+	* Contains the number associated with the targetting of browsers. 
+	* @property TARGET_BROWSER
+	* @static
+	* @type number
+	* @default 0
+	* @public
+	*/
+	export var TARGET_BROWSER: number = 0;
+
+	/**
+	* Contains the number associated with the targetting of CocoonJS.
+	* @property TARGET_COCOON
+	* @static
+	* @type number
+	* @default 1
+	* @public
+	*/
+	export var TARGET_COCOON: number = 1;
+
+	//DEBUG OPTION STATIC VARIABLES
+	/**
+	* Contains the number that is used to turn the Debug options on.
+	* @property DEBUG_ON
+	* @static
+	* @type number
+	* @default 0
+	* @public
+	*/
+	export var DEBUG_ON: number = 0;
+
+	/**
+	* Contains the number that is used to turn the Debug options off.
+	* @property DEBUG_OFF
+	* @static
+	* @type number
+	* @default 1
+	* @public
+	*/
+	export var DEBUG_OFF: number = 1;
+
+	/**
+	* Contains the Device class that is used to determine which features are supported by the users browser.
+	* @property DEVICE
+	* @static
+	* @type Device
+	* @public
+	*/
+	export var DEVICE: Kiwi.System.Device = null;
+
+	//STATIC PROPERTIES FOR GENERAL OBJECT TYPE DETECTION
+	/**
+	* Contains a number that is used to identify objects that are a State.
+	* @property STATE
+	* @static
+	* @type number
+	* @default 0
+	* @public
+	*/
+	export var STATE: number = 0;
+
+	/**
+	* Contains a number that is used to identify objects that are a Group.
+	* @property GROUP
+	* @static
+	* @type number
+	* @default 2
+	* @public
+	*/
+	export var GROUP: number = 2;
+
+	/**
+	* Contains a number that is used to identify objects that are a Entity.
+	* @property ENTITY
+	* @static
+	* @type number
+	* @default 3
+	* @public
+	*/
+	export var ENTITY: number = 3;
+
+	/**
+	* Contains a number that is used to identify objects that are a Camera.
+	* @property CAMERA
+	* @static
+	* @type number 
+	* @default 4
+	* @public
+	*/
+	export var CAMERA: number = 4;
+
+	/**
+	* Contains a number that is used to identify objects that are a HUD Widget.
+	* @property HUD_WIDGET
+	* @static
+	* @type number
+	* @default 5
+	* @public
+	*/
+	export var HUD_WIDGET: number = 5;
+
+	/**
+	* Contains a number that is used to identify objects that are a TILE_LAYER.
+	* @property TILE_LAYER
+	* @static
+	* @type number
+	* @default 6
+	* @public
+	*/
+	export var TILE_LAYER: number = 6;
+
+	/**
+	* The GameManager is used to maintain mulitple instances of Kiwi games within a single document.
+	*  
+	* @class GameManager
+	* @namespace Kiwi
+	* @static
+	*/
+	export class GameManager {
+
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} "GameManager"
+		* @public
+		*/
+		public objType() {
+			return "GameManager";
+		}
+
+		/**
+		* A list of all of the games that are currently on this document.
+		* @property _games
+		* @static
+		* @type Game[]
+		* @private
+		*/
+		private static _games: Kiwi.Game[] = [];
+
+		/**
+		* Used to register a new Game with this manager. Returns the new number of games that have been registered.
+		* @method register
+		* @param game {Game} The game you are wanting to register.
+		* @return {Number] The new number of games registered.
+		* @public
+		*/
+		public static register(game: Kiwi.Game): number {
+
+			return Kiwi.GameManager._games.push(game);
+
+		}
+
+		/**
+		* Returns the total number of game that are currently registered with this GameManager.
+		* @method total
+		* @return {Number} Total number of registered games.
+		* @public
+		*/
+		public static total(): number {
+			return Kiwi.GameManager._games.length;
+		}
+
+	}
+
+
+	export var Plugins = {};
+
+	export var extend:Function = function (d, b) {
+		for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
+		function __() { this.constructor = d; }
+		__.prototype = b.prototype;
+		d.prototype = new __();
+	};
+
+}
diff --git a/src/animations/Animation.ts b/src/animations/Animation.ts
index 99c344e..e2f61ee 100644
--- a/src/animations/Animation.ts
+++ b/src/animations/Animation.ts
@@ -8,498 +8,498 @@
 
 module Kiwi.Animations {
 
-    /**
-    * An Animation contains information about a single animation that is held on a AnimationManager. 
-    * The information that is held is unique to this individual animation and will initially be the same as a Sequence,
-    * but if you do ever modify the information held in this Animation the corresponding Sequence will not be updated.
-    * 
-    * @class Animation
-    * @namespace Kiwi.Animations
-    * @constructor
-    * @param name {string} The name of this anim.
-    * @param sequences {Kiwi.Animations.Sequences} The sequence that this anim will be using to animate.
-    * @param clock {Kiwi.Time.Clock} A game clock that this anim will be using to keep record of the time between frames. (Deprecated in v1.2.0, because there is no way to control it.)
-    * @param parent {Kiwi.Components.AnimationManager} The animation manager that this animation belongs to.
-    * @return {Kiwi.Animations.Animation} 
-    * 
-    */
-    export class Animation {
-         
-        constructor(name: string, sequence: Kiwi.Animations.Sequence, clock: Kiwi.Time.Clock, parent: Kiwi.Components.AnimationManager) {
-            
-            this.name = name;
-            this._sequence = sequence;
-            this._speed = sequence.speed;
-            this._loop = sequence.loop;
-            this._parent = parent;
-
-            this._clock = clock;
-
-            this._lastFrameElapsed = this.clock.elapsed();
-        }
-
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} "Animation"
-        * @public
-        */
-        public objType(): string {
-            return "Animation";
-        }
-
-        /**
-        * The AnimationManager that this animation is a child of.
-        * @property _parent
-        * @type Kiwi.Components.AnimationManager
-        * @private
-        */
-        private _parent: Kiwi.Components.AnimationManager;
-
-        /**
-        * The name of this animation.
-        * @property name
-        * @type string
-        * @public
-        */
-        public name: string;
-        
-        /**
-        * The sequence on the texture atlas that this animation is based off.
-        * @property _sequence
-        * @type Kiwi.Animations.Sequence
-        * @private
-        */
-        private _sequence: Kiwi.Animations.Sequence;
-
-        /**
-        * If this animation should loop or not.
-        * @property _loop
-        * @type boolean
-        * @private
-        */
-        private _loop: boolean;
-
-        /**
-        * If once the animation reaches the end, it should start again from the first cell in the sequence or not.
-        * @property loop
-        * @type boolean
-        * @public
-        */
-        public get loop(): boolean {
-            return this._loop;
-        }
-        public set loop(value: boolean) {
-            this._loop = value;
-        }
-
-        /**
-        * The current frame index that the animation is currently upto.
-        * Note: A frame index is the index of a particular cell in the Sequence.
-        * @property _frameIndex
-        * @type number
-        * @private
-        */
-        private _frameIndex: number = 0;
-
-        /**
-        * The current frame index that the animation is currently upto.
-        * Note: A frame index is the index of a particular cell in the Sequence.
-        * @property frameIndex
-        * @type number
-        * @public
-        */
-        public get frameIndex(): number {
-            return this._frameIndex;
-        }
-        public set frameIndex(val: number) {
-            if (this._validateFrame(val)) {
-                this._frameIndex = val;
-            }
-        }
-
-        /**
-        * Returns the current cell that the animation is up to. This is READ ONLY.
-        * @property currentCell
-        * @type number
-        * @public
-        */
-        public get currentCell(): number {
-            return this._sequence.cells[ this.frameIndex ];
-        }
-
-        /**
-        * How fast the transition is between cells. Perhaps change to frames per second to reflect actual game speed?
-        * @property _speed
-        * @type number
-        * @private
-        */
-        private _speed: number;
-
-        /**
-        * How long the each cell should stay on screen for. In seconds.
-        * @property speed
-        * @type number
-        * @public
-        */
-        public get speed(): number {
-            return this._speed;
-        }
-        public set speed(value: number) {
-            this._speed = value;
-        }
-
-        /**
-        * The clock that is to be used to calculate the animations.
-        * @property _clock
-        * @type Kiwi.Time.Clock
-        * @private
-        */
-        private _clock: Kiwi.Time.Clock;
-
-        /**
-        * Clock used by this Animation. If it was not set on creation,
-        * the Animation will use its parent's entity's clock.
-        * @property clock
-        * @type Kiwi.Time.Clock
-        * @public
-        * @since 1.2.0
-        */
-        public get clock(): Kiwi.Time.Clock {
-            if ( this._clock ) {
-                return this._clock;
-            }
-            return this._parent.entity.clock;
-        }
-
-        /**
-        * The starting time of the animation from when it was played. Internal use only.
-        * @property _startTime
-        * @type number
-        * @private
-        */
-        private _startTime: number = null;
-        
-        /**
-        * Indicates whether the animation is playing in reverse or not.
-        * @property _reverse
-        * @type boolean
-        * @private
-        */
-        private _reverse: boolean = false;
-
-        /**
-        * Whether the animation is to be played in reverse.
-        * @property reverse
-        * @type boolean
-        * @public
-        */
-        public set reverse(value: boolean) {
-            this._reverse = value;
-        }
-        public get reverse(): boolean {
-            return this._reverse;
-        }
-
-        /**
-        * The time at which the animation should change to the next cell 
-        * @property _tick
-        * @type number
-        * @private
-        */ 
-        private _tick: number;
-
-        /**
-        * Whether the animation is currently playing or not.
-        * @property _isPlaying
-        * @type boolean
-        * @default false
-        * @private
-        */
-        private _isPlaying: boolean = false;
-
-        /**
-        * Whether the animation is currently playing or not. Read-only.
-        * @property isPlaying
-        * @type boolean
-        * @public
-        */
-        public get isPlaying(): boolean {
-            return this._isPlaying;
-        }
-
-        /**
-        * A Kiwi.Signal that dispatches an event when the animation has stopped playing.
-        * @property _onStop
-        * @type Signal
-        * @public
-        */
-        private _onStop: Kiwi.Signal = null;
-        
-        public get onStop(): Kiwi.Signal {
-            if (this._onStop == null) this._onStop = new Kiwi.Signal; 
-            return this._onStop;
-        }
-
-        /**
-        * A Kiwi.Signal that dispatches an event when the animation has started playing.
-        * @property _onPlay
-        * @type Kiwi.Signal
-        * @public
-        */
-        private _onPlay: Kiwi.Signal = null;
-        
-        public get onPlay(): Kiwi.Signal {
-            if (this._onPlay == null) this._onPlay = new Kiwi.Signal;
-            return this._onPlay;
-        }
-
-        /**
-        * A Kiwi.Signal that dispatches an event when the animation has updated/changed frameIndexs.
-        * @property _onUpdate
-        * @type Kiwi.Signal
-        * @public
-        */
-        private _onUpdate: Kiwi.Signal = null;
-        
-        public get onUpdate(): Kiwi.Signal {
-            if (this._onUpdate == null) this._onUpdate = new Kiwi.Signal;
-            return this._onUpdate;
-        }
-
-        /**
-        * A Kiwi.Signal that dispatches an event when the animation has come to the end of the animation and is going to play again.
-        * @property _onLoop
-        * @type Kiwi.Signal
-        * @public
-        */
-        private _onLoop: Kiwi.Signal = null;
-        
-        public get onLoop(): Kiwi.Signal {
-            if (this._onLoop == null) this._onLoop = new Kiwi.Signal;
-            return this._onLoop;
-        }
-
-        /**
-        * A Kiwi.Signal that dispatches an event when the animation has come to the end of the animation but is not going to play again.
-        * @property _onComplete
-        * @type Kiwi.Signal
-        * @public
-        * @since 1.2.0
-        */
-        private _onComplete: Kiwi.Signal = null;
-        
-        public get onComplete(): Kiwi.Signal {
-            if (this._onComplete == null) this._onComplete = new Kiwi.Signal;
-            return this._onComplete;
-        }
-
-        /**
-        * Clock time on last frame, used to compute current animation frame.
-        * @property _lastFrameElapsed
-        * @type number
-        * @private
-        * @since 1.2.0
-        */
-        private _lastFrameElapsed: number;
-
-        /**
-        * An Internal method used to start the animation.
-        * @method _start
-        * @param [index=null] {number} The index of the frame in the sequence that is to play. If left as null if just starts from where it left off.
-        * @private
-        */
-        private _start(index: number = null) {
-            if (index !== null) {
-                this.frameIndex = index;
-            }
-
-            this._isPlaying = true;
-            this._startTime = this.clock.elapsed();
-            this._tick = this._startTime + this._speed;
-            if(this._onPlay !== null) this._onPlay.dispatch();
-        }
-
-        /**
-        * Plays the animation.
-        * @method play
-        * @public
-        */
-        public play() {
-            //if the animation is at the last frame then start it at the beginning
-            if (this._frameIndex === this.length - 1) this.frameIndex = 0; 
-            
-            this.playAt(this._frameIndex);
-        }
-
-        /**
-        * Plays the animation at a particular frame
-        * @method playAt
-        * @param index {Number} The index of the cell in the sequence that the animation is to start at.
-        * @public
-        */
-        public playAt(index: number) {  
-            this._start(index);
-        }
-
-        /**
-        * Pauses the current animation.
-        * @method pause
-        * @public
-        */
-        public pause() {
-            this.stop();
-        }
-
-        /**
-        * Resumes the current animation after stopping.
-        * @method resume
-        * @public
-        */
-        public resume() {
-            if (this._startTime !== null) { 
-                this._isPlaying = true;
-            }
-        }
-
-        /**
-        * Stops the current animation from playing.
-        * @method stop
-        * @public
-        */
-        public stop() {
-            if (this._isPlaying) {
-                this._isPlaying = false; 
-                if(this._onStop !== null) this._onStop.dispatch();
-            }
-        }
-
-        /**
-        * Makes the animation go to the next frame. If the animation is at the end it goes back to the start.
-        * @method nextFrame
-        * @public
-        */
-        public nextFrame() {
-            this._frameIndex++;
-            if (this._frameIndex >= this.length) this.frameIndex = 0;
-        }
-        
-        /**
-        * Makes the animation go to the previous frame. If the animation is at the first frame it goes to the end.
-        * @method prevFrame
-        * @public
-        */
-        public prevFrame() {
-            this._frameIndex--;
-            if (this._frameIndex < 0) this.frameIndex = this.length - 1;
-        }
-
-        /**
-        * The update loop.
-        * 
-        * @method update
-        * @public
-        */
-        public update() {
-            var frameDelta;
-
-            if ( this._isPlaying ) {
-
-                // How many frames do we move, ahead or behind?
-                frameDelta = ( this.clock.elapsed() -
-                    this._lastFrameElapsed ) / this._speed;
-                if ( this._reverse ) {
-                    frameDelta *= -1;
-                }
-
-                // Round delta, towards zero
-                if ( frameDelta > 0 ) {
-                    frameDelta = Math.floor( frameDelta );
-                } else {
-                    frameDelta = Math.ceil( frameDelta );
-                }
-
-                if ( frameDelta !== 0 ) {
-                    this._frameIndex += frameDelta;
-                    this._lastFrameElapsed = this.clock.elapsed();
-
-                    // Loop check
-                    if ( this._loop ) {
-                        if ( this._frameIndex > this.length - 1 ) {
-                            while ( this._frameIndex > this.length - 1 ) {
-                                this._frameIndex -= this.length;
-                                if ( this._onLoop != null ) {
-                                    this._onLoop.dispatch();
-                                }
-                            }
-                        } else if ( this._frameIndex < 0 ) {
-                            while ( this._frameIndex < 0 ) {
-                                this._frameIndex += this.length;
-                                if ( this._onLoop != null ) {
-                                    this._onLoop.dispatch();
-                                }
-                            }
-                        }
-                    } else if ( this._frameIndex < 0 || this._frameIndex >= this.length ) {
-                        if ( this._onComplete != null ) {
-                            this._onComplete.dispatch();
-                        }
-                        // Execute the stop on the parent 
-                        // to allow the isPlaying boolean to remain consistent
-                        this._parent.stop();
-                        return;
-                    }
-
-                    this._parent.updateCellIndex();
-                    if ( this._onUpdate !== null ) {
-                        this._onUpdate.dispatch();
-                    }
-                }
-            }
-        }
-
-        /**
-        * An internal method used to check to see if frame passed is valid or not
-        * @method _validateFrame
-        * @param frame {Number} The index of the frame that is to be validated.
-        * @private
-        */
-        private _validateFrame(frame: number) {
-            return (frame < this.length && frame >= 0);
-        }
-        
-        /**
-        * Returns the number of frames that in the animation. Thus the animations 'length'. Note this is READ ONLY.
-        * @property length
-        * @type number
-        * @public
-        */
-        public get length():number {
-            return this._sequence.cells.length;
-        }
-
-        /**
-        * Destroys the anim and all of the properties that exist on it.
-        * @method destroy
-        * @public
-        */
-        public destroy() {
-            this._isPlaying = false;
-            delete this._clock;
-            delete this._sequence;
-            delete this._parent;
-            if(this._onLoop) this._onLoop.dispose();
-            if(this._onStop) this._onStop.dispose();
-            if(this._onPlay) this._onPlay.dispose();
-            if(this._onUpdate) this._onUpdate.dispose();
-            delete this._onLoop;
-            delete this._onStop ;
-            delete this._onPlay ;
-            delete this._onUpdate ;
-            delete this.frameIndex ;
-            delete this.loop;
-            delete this._reverse;
-            delete this._tick;
-        }
-    }
+	/**
+	* An Animation contains information about a single animation that is held on a AnimationManager. 
+	* The information that is held is unique to this individual animation and will initially be the same as a Sequence,
+	* but if you do ever modify the information held in this Animation the corresponding Sequence will not be updated.
+	* 
+	* @class Animation
+	* @namespace Kiwi.Animations
+	* @constructor
+	* @param name {string} The name of this anim.
+	* @param sequences {Kiwi.Animations.Sequences} The sequence that this anim will be using to animate.
+	* @param clock {Kiwi.Time.Clock} A game clock that this anim will be using to keep record of the time between frames. (Deprecated in v1.2.0, because there is no way to control it.)
+	* @param parent {Kiwi.Components.AnimationManager} The animation manager that this animation belongs to.
+	* @return {Kiwi.Animations.Animation} 
+	* 
+	*/
+	export class Animation {
+
+		constructor(name: string, sequence: Kiwi.Animations.Sequence, clock: Kiwi.Time.Clock, parent: Kiwi.Components.AnimationManager) {
+			
+			this.name = name;
+			this._sequence = sequence;
+			this._speed = sequence.speed;
+			this._loop = sequence.loop;
+			this._parent = parent;
+
+			this._clock = clock;
+
+			this._lastFrameElapsed = this.clock.elapsed();
+		}
+
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} "Animation"
+		* @public
+		*/
+		public objType(): string {
+			return "Animation";
+		}
+
+		/**
+		* The AnimationManager that this animation is a child of.
+		* @property _parent
+		* @type Kiwi.Components.AnimationManager
+		* @private
+		*/
+		private _parent: Kiwi.Components.AnimationManager;
+
+		/**
+		* The name of this animation.
+		* @property name
+		* @type string
+		* @public
+		*/
+		public name: string;
+
+		/**
+		* The sequence on the texture atlas that this animation is based off.
+		* @property _sequence
+		* @type Kiwi.Animations.Sequence
+		* @private
+		*/
+		private _sequence: Kiwi.Animations.Sequence;
+
+		/**
+		* If this animation should loop or not.
+		* @property _loop
+		* @type boolean
+		* @private
+		*/
+		private _loop: boolean;
+
+		/**
+		* If once the animation reaches the end, it should start again from the first cell in the sequence or not.
+		* @property loop
+		* @type boolean
+		* @public
+		*/
+		public get loop(): boolean {
+			return this._loop;
+		}
+		public set loop(value: boolean) {
+			this._loop = value;
+		}
+
+		/**
+		* The current frame index that the animation is currently upto.
+		* Note: A frame index is the index of a particular cell in the Sequence.
+		* @property _frameIndex
+		* @type number
+		* @private
+		*/
+		private _frameIndex: number = 0;
+
+		/**
+		* The current frame index that the animation is currently upto.
+		* Note: A frame index is the index of a particular cell in the Sequence.
+		* @property frameIndex
+		* @type number
+		* @public
+		*/
+		public get frameIndex(): number {
+			return this._frameIndex;
+		}
+		public set frameIndex(val: number) {
+			if (this._validateFrame(val)) {
+				this._frameIndex = val;
+			}
+		}
+
+		/**
+		* Returns the current cell that the animation is up to. This is READ ONLY.
+		* @property currentCell
+		* @type number
+		* @public
+		*/
+		public get currentCell(): number {
+			return this._sequence.cells[ this.frameIndex ];
+		}
+
+		/**
+		* How fast the transition is between cells. Perhaps change to frames per second to reflect actual game speed?
+		* @property _speed
+		* @type number
+		* @private
+		*/
+		private _speed: number;
+
+		/**
+		* How long the each cell should stay on screen for. In seconds.
+		* @property speed
+		* @type number
+		* @public
+		*/
+		public get speed(): number {
+			return this._speed;
+		}
+		public set speed(value: number) {
+			this._speed = value;
+		}
+
+		/**
+		* The clock that is to be used to calculate the animations.
+		* @property _clock
+		* @type Kiwi.Time.Clock
+		* @private
+		*/
+		private _clock: Kiwi.Time.Clock;
+
+		/**
+		* Clock used by this Animation. If it was not set on creation,
+		* the Animation will use its parent's entity's clock.
+		* @property clock
+		* @type Kiwi.Time.Clock
+		* @public
+		* @since 1.2.0
+		*/
+		public get clock(): Kiwi.Time.Clock {
+			if ( this._clock ) {
+				return this._clock;
+			}
+			return this._parent.entity.clock;
+		}
+
+		/**
+		* The starting time of the animation from when it was played. Internal use only.
+		* @property _startTime
+		* @type number
+		* @private
+		*/
+		private _startTime: number = null;
+		
+		/**
+		* Indicates whether the animation is playing in reverse or not.
+		* @property _reverse
+		* @type boolean
+		* @private
+		*/
+		private _reverse: boolean = false;
+
+		/**
+		* Whether the animation is to be played in reverse.
+		* @property reverse
+		* @type boolean
+		* @public
+		*/
+		public set reverse(value: boolean) {
+			this._reverse = value;
+		}
+		public get reverse(): boolean {
+			return this._reverse;
+		}
+
+		/**
+		* The time at which the animation should change to the next cell 
+		* @property _tick
+		* @type number
+		* @private
+		*/ 
+		private _tick: number;
+
+		/**
+		* Whether the animation is currently playing or not.
+		* @property _isPlaying
+		* @type boolean
+		* @default false
+		* @private
+		*/
+		private _isPlaying: boolean = false;
+
+		/**
+		* Whether the animation is currently playing or not. Read-only.
+		* @property isPlaying
+		* @type boolean
+		* @public
+		*/
+		public get isPlaying(): boolean {
+			return this._isPlaying;
+		}
+
+		/**
+		* A Kiwi.Signal that dispatches an event when the animation has stopped playing.
+		* @property _onStop
+		* @type Signal
+		* @public
+		*/
+		private _onStop: Kiwi.Signal = null;
+		
+		public get onStop(): Kiwi.Signal {
+			if (this._onStop == null) this._onStop = new Kiwi.Signal; 
+			return this._onStop;
+		}
+
+		/**
+		* A Kiwi.Signal that dispatches an event when the animation has started playing.
+		* @property _onPlay
+		* @type Kiwi.Signal
+		* @public
+		*/
+		private _onPlay: Kiwi.Signal = null;
+		
+		public get onPlay(): Kiwi.Signal {
+			if (this._onPlay == null) this._onPlay = new Kiwi.Signal;
+			return this._onPlay;
+		}
+
+		/**
+		* A Kiwi.Signal that dispatches an event when the animation has updated/changed frameIndexs.
+		* @property _onUpdate
+		* @type Kiwi.Signal
+		* @public
+		*/
+		private _onUpdate: Kiwi.Signal = null;
+		
+		public get onUpdate(): Kiwi.Signal {
+			if (this._onUpdate == null) this._onUpdate = new Kiwi.Signal;
+			return this._onUpdate;
+		}
+
+		/**
+		* A Kiwi.Signal that dispatches an event when the animation has come to the end of the animation and is going to play again.
+		* @property _onLoop
+		* @type Kiwi.Signal
+		* @public
+		*/
+		private _onLoop: Kiwi.Signal = null;
+		
+		public get onLoop(): Kiwi.Signal {
+			if (this._onLoop == null) this._onLoop = new Kiwi.Signal;
+			return this._onLoop;
+		}
+
+		/**
+		* A Kiwi.Signal that dispatches an event when the animation has come to the end of the animation but is not going to play again.
+		* @property _onComplete
+		* @type Kiwi.Signal
+		* @public
+		* @since 1.2.0
+		*/
+		private _onComplete: Kiwi.Signal = null;
+		
+		public get onComplete(): Kiwi.Signal {
+			if (this._onComplete == null) this._onComplete = new Kiwi.Signal;
+			return this._onComplete;
+		}
+
+		/**
+		* Clock time on last frame, used to compute current animation frame.
+		* @property _lastFrameElapsed
+		* @type number
+		* @private
+		* @since 1.2.0
+		*/
+		private _lastFrameElapsed: number;
+
+		/**
+		* An Internal method used to start the animation.
+		* @method _start
+		* @param [index=null] {number} The index of the frame in the sequence that is to play. If left as null if just starts from where it left off.
+		* @private
+		*/
+		private _start(index: number = null) {
+			if (index !== null) {
+				this.frameIndex = index;
+			}
+
+			this._isPlaying = true;
+			this._startTime = this.clock.elapsed();
+			this._tick = this._startTime + this._speed;
+			if(this._onPlay !== null) this._onPlay.dispatch();
+		}
+
+		/**
+		* Plays the animation.
+		* @method play
+		* @public
+		*/
+		public play() {
+			//if the animation is at the last frame then start it at the beginning
+			if (this._frameIndex === this.length - 1) this.frameIndex = 0; 
+			
+			this.playAt(this._frameIndex);
+		}
+
+		/**
+		* Plays the animation at a particular frame
+		* @method playAt
+		* @param index {Number} The index of the cell in the sequence that the animation is to start at.
+		* @public
+		*/
+		public playAt(index: number) {  
+			this._start(index);
+		}
+
+		/**
+		* Pauses the current animation.
+		* @method pause
+		* @public
+		*/
+		public pause() {
+			this.stop();
+		}
+
+		/**
+		* Resumes the current animation after stopping.
+		* @method resume
+		* @public
+		*/
+		public resume() {
+			if (this._startTime !== null) { 
+				this._isPlaying = true;
+			}
+		}
+
+		/**
+		* Stops the current animation from playing.
+		* @method stop
+		* @public
+		*/
+		public stop() {
+			if (this._isPlaying) {
+				this._isPlaying = false; 
+				if(this._onStop !== null) this._onStop.dispatch();
+			}
+		}
+
+		/**
+		* Makes the animation go to the next frame. If the animation is at the end it goes back to the start.
+		* @method nextFrame
+		* @public
+		*/
+		public nextFrame() {
+			this._frameIndex++;
+			if (this._frameIndex >= this.length) this.frameIndex = 0;
+		}
+
+		/**
+		* Makes the animation go to the previous frame. If the animation is at the first frame it goes to the end.
+		* @method prevFrame
+		* @public
+		*/
+		public prevFrame() {
+			this._frameIndex--;
+			if (this._frameIndex < 0) this.frameIndex = this.length - 1;
+		}
+
+		/**
+		* The update loop.
+		* 
+		* @method update
+		* @public
+		*/
+		public update() {
+			var frameDelta;
+
+			if ( this._isPlaying ) {
+
+				// How many frames do we move, ahead or behind?
+				frameDelta = ( this.clock.elapsed() -
+					this._lastFrameElapsed ) / this._speed;
+				if ( this._reverse ) {
+					frameDelta *= -1;
+				}
+
+				// Round delta, towards zero
+				if ( frameDelta > 0 ) {
+					frameDelta = Math.floor( frameDelta );
+				} else {
+					frameDelta = Math.ceil( frameDelta );
+				}
+
+				if ( frameDelta !== 0 ) {
+					this._frameIndex += frameDelta;
+					this._lastFrameElapsed = this.clock.elapsed();
+
+					// Loop check
+					if ( this._loop ) {
+						if ( this._frameIndex > this.length - 1 ) {
+							while ( this._frameIndex > this.length - 1 ) {
+								this._frameIndex -= this.length;
+								if ( this._onLoop != null ) {
+									this._onLoop.dispatch();
+								}
+							}
+						} else if ( this._frameIndex < 0 ) {
+							while ( this._frameIndex < 0 ) {
+								this._frameIndex += this.length;
+								if ( this._onLoop != null ) {
+									this._onLoop.dispatch();
+								}
+							}
+						}
+					} else if ( this._frameIndex < 0 || this._frameIndex >= this.length ) {
+						if ( this._onComplete != null ) {
+							this._onComplete.dispatch();
+						}
+						// Execute the stop on the parent 
+						// to allow the isPlaying boolean to remain consistent
+						this._parent.stop();
+						return;
+					}
+
+					this._parent.updateCellIndex();
+					if ( this._onUpdate !== null ) {
+						this._onUpdate.dispatch();
+					}
+				}
+			}
+		}
+
+		/**
+		* An internal method used to check to see if frame passed is valid or not
+		* @method _validateFrame
+		* @param frame {Number} The index of the frame that is to be validated.
+		* @private
+		*/
+		private _validateFrame(frame: number) {
+			return (frame < this.length && frame >= 0);
+		}
+		
+		/**
+		* Returns the number of frames that in the animation. Thus the animations 'length'. Note this is READ ONLY.
+		* @property length
+		* @type number
+		* @public
+		*/
+		public get length():number {
+			return this._sequence.cells.length;
+		}
+
+		/**
+		* Destroys the anim and all of the properties that exist on it.
+		* @method destroy
+		* @public
+		*/
+		public destroy() {
+			this._isPlaying = false;
+			delete this._clock;
+			delete this._sequence;
+			delete this._parent;
+			if(this._onLoop) this._onLoop.dispose();
+			if(this._onStop) this._onStop.dispose();
+			if(this._onPlay) this._onPlay.dispose();
+			if(this._onUpdate) this._onUpdate.dispose();
+			delete this._onLoop;
+			delete this._onStop ;
+			delete this._onPlay ;
+			delete this._onUpdate ;
+			delete this.frameIndex ;
+			delete this.loop;
+			delete this._reverse;
+			delete this._tick;
+		}
+	}
 }
diff --git a/src/animations/Sequence.ts b/src/animations/Sequence.ts
index e21f381..ffdb035 100644
--- a/src/animations/Sequence.ts
+++ b/src/animations/Sequence.ts
@@ -4,64 +4,64 @@
 * @submodule Animations
 * 
 */
- 
+
 module Kiwi.Animations {
 
-    /**
-    * A Sequence is a series of cells that are held on a SpriteSheet/TextureAtlas.
-    * Sequences are generally used with the AnimationManager/Animation sections as a way to initially create Animations on GameObjects that use the same TextureAtlas.
-    * 
-    * @class Sequence
-    * @namespace Kiwi.Animations
-    * @constructor
-    * @param name {String} The name of this sequence. This is not unique.
-    * @param cells {Number[]} The cells that are in this animation.
-    * @param [speed=0.1] {Number} The time an animation should spend on each frame.
-    * @param [loop=true] {boolean} If the sequence should play again if it was animating and the animation reaches the last frame.
-    * @return {Kiwi.Animations.Sequence}
-    * 
-    */
-    export class Sequence {
-        
-        constructor(name:string,cells:number[],speed:number=0.1,loop:boolean=true) {
-            this.name = name;
-            this.cells = cells;
-            this.speed = speed;
-            this.loop = loop;
-        }
+	/**
+	* A Sequence is a series of cells that are held on a SpriteSheet/TextureAtlas.
+	* Sequences are generally used with the AnimationManager/Animation sections as a way to initially create Animations on GameObjects that use the same TextureAtlas.
+	* 
+	* @class Sequence
+	* @namespace Kiwi.Animations
+	* @constructor
+	* @param name {String} The name of this sequence. This is not unique.
+	* @param cells {Number[]} The cells that are in this animation.
+	* @param [speed=0.1] {Number} The time an animation should spend on each frame.
+	* @param [loop=true] {boolean} If the sequence should play again if it was animating and the animation reaches the last frame.
+	* @return {Kiwi.Animations.Sequence}
+	* 
+	*/
+	export class Sequence {
+
+		constructor(name:string,cells:number[],speed:number=0.1,loop:boolean=true) {
+			this.name = name;
+			this.cells = cells;
+			this.speed = speed;
+			this.loop = loop;
+		}
+
+		/**
+		* The name of this sequence.
+		* @property name
+		* @type string
+		* @public
+		*/
+		public name: string;
 
-        /**
-        * The name of this sequence.
-        * @property name
-        * @type string
-        * @public
-        */
-        public name: string;
+		/**
+		* The cells that are in this animation.
+		* These are a reference to the cells that are contained in a texture atlas that this sequence should be a part of.
+		* @property cells
+		* @type number[]
+		* @public
+		*/
+		public cells: number[];
 
-        /**
-        * The cells that are in this animation.
-        * These are a reference to the cells that are contained in a texture atlas that this sequence should be a part of.
-        * @property cells
-        * @type number[]
-        * @public
-        */
-        public cells: number[];
+		/**
+		* The time an animation should spend on each cell.
+		* @property speed
+		* @type boolean
+		* @public
+		*/
+		public speed: number;
 
-        /**
-        * The time an animation should spend on each cell.
-        * @property speed
-        * @type boolean
-        * @public
-        */
-        public speed: number;
-        
-        /**
-        * If the sequence should play again if it was animating and the animation reaches the last frame.
-        * @property loop
-        * @type boolean
-        * @public
-        */
-        public loop: boolean;
+		/**
+		* If the sequence should play again if it was animating and the animation reaches the last frame.
+		* @property loop
+		* @type boolean
+		* @public
+		*/
+		public loop: boolean;
 
-    }
-}
\ No newline at end of file
+	}
+}
diff --git a/src/animations/tweens/Tween.ts b/src/animations/tweens/Tween.ts
index 59bb22a..bf303c4 100644
--- a/src/animations/tweens/Tween.ts
+++ b/src/animations/tweens/Tween.ts
@@ -4,565 +4,565 @@
 * @submodule Tweens 
 * 
 */
- 
+
 module Kiwi.Animations {
 
-    /**
-    * Manages the tweening of properties/values on a single object. A Tween is the animation of a number between an initially value to and final value (that you specify). 
-    * Note: When using a Tween you need to make sure that the Tween has been added to a TweenManager. You can either do this by creating the Tween via the Manager or alternatively using the 'add' method on the TweenManager. Otherwise the tween will not work.
-    *
-    * Based on tween.js by sole. Converted to TypeScript and integrated into Kiwi.
-    * https://github.com/sole/tween.js
-    *
-    * @class Tween
-    * @constructor
-    * @namespace Kiwi.Animations
-    * @param object {Any} The object that this tween is taking affect on.
-    * @param game {Kiwi.Game} The game that this tween is for.
-    * @return {Kiwi.Animations.Tween} This tween.
-    *
-    * @author     sole / http://soledadpenades.com
-    * @author     mrdoob / http://mrdoob.com
-    * @author     Robert Eisele / http://www.xarg.org
-    * @author     Philippe / http://philippe.elsass.me
-    * @author     Robert Penner / http://www.robertpenner.com/easing_terms_of_use.html
-    * @author     Paul Lewis / http://www.aerotwist.com/
-    * @author     lechecacharro
-    * @author     Josh Faul / http://jocafa.com/
-    * @author     egraether / http://egraether.com/
-    *
-    */
-    export class Tween {
- 
-        constructor(object, game:Kiwi.Game = null) {
-
-            this._object = object;
-
-            if (game !== null)
-            {
-                this._game = game;
-                this._manager = this._game.tweens;
-            }
-
-            this.isRunning = false;
-
-        }
-
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} "Tween"
-        * @public
-        */
-        public objType() {
-            return "Tween";
-        }
-
-        /** 
-        * The game that this tween belongs to.
-        * @property _game
-        * @type Kiwi.Game
-        * @private
-        */
-        private _game: Kiwi.Game = null;
-
-        /** 
-        * The manager that this tween belongs to. 
-        * @property _manager
-        * @type Kiwi.Animations.Tweens.TweenManager
-        * @private
-        */
-        private _manager: Kiwi.Animations.Tweens.TweenManager = null;
-
-        /**
-        * The manager that this tween belongs to.
-        * @property manager
-        * @type Kiwi.Animations.Tweens.TweenManager
-        * @private
-        * @since 1.2.0
-        */
-        public get manager(): Kiwi.Animations.Tweens.TweenManager {
-            return this._manager;
-        }
-
-        public set manager( value: Kiwi.Animations.Tweens.TweenManager ) {
-            this._manager = value;
-        }
-
-        /** 
-        * The object that this tween is affecting.
-        * @property _object
-        * @type Any
-        * @private
-        */
-	    private _object = null;
-
-        /**
-        * The object that this tween is affecting.
-        * If you change this, it will continue to tween,
-        * but any properties that are not on the new object
-        * will be discarded from the tween.
-        * @property object
-        * @type any
-        * @public
-        */
-        public get object(): any {
-            return this._object;
-        }
-
-        public set object( value: any ) {
-            var i,
-                newValues = {};
-
-            this._object = value;
-
-            for ( i in this._valuesEnd ) {
-                if ( value[ i ] ) {
-                    newValues[ i ] = this._valuesEnd[ i ];
-                }
-            }
-
-            this._valuesEnd = newValues;
-        }
-
-        /** 
-        * The starting values of the properties that the tween is animating.
-        * @property _valuesStart
-        * @type Object
-        * @private
-        */
-	    private _valuesStart = {};
-
-        /** 
-        * The end values of the properties that the tween is animating.
-        * @property _valuesEnd
-        * @type Object
-        * @private
-        */
-	    private _valuesEnd = {};
-
-        /** 
-        * The duration of the tween, in milliseconds.
-        * @property _duration
-        * @type Number
-        * @private
-        */
-	    private _duration = 1000;
-
-        /** 
-        * The amount of time to delay the tween by. In Milliseconds.
-        * @property _delayTime
-        * @type Number
-        * @private
-        */
-	    private _delayTime:number = 0;
-
-        /** 
-        * The time at which the tween started.
-        * @property _startTime
-        * @type Number
-        * @private
-        */
-	    private _startTime:number = null;
-
-        /** 
-        * The easing function that is to be used while tweening.
-        * @property _easingFunction
-        * @type Function
-        * @default Kiwi.Tweens.Easing.Linear.None
-        * @private
-        */
-        private _easingFunction = Kiwi.Animations.Tweens.Easing.Linear.None;
-
-        /** 
-        * [NEEDS DESCRIPTION]
-        * @property _interpolationFunction
-        * @type Function
-        * @default Kiwi.Utils.Interpolation.Linear
-        * @private
-        */
-	    private _interpolationFunction = Kiwi.Utils.GameMath.linearInterpolation;
-
-        /** 
-        * An array containing all of the tweens that are to be played when this one finishes.
-        * @property _chainedTweens
-        * @type Tween[]
-        * @private
-        */
-	    private _chainedTweens = [];
-
-        /** 
-        * The method that is to be called when the tween starts playing.
-        * @property _onStartCallback
-        * @type Function
-        * @default null
-        * @private
-        */
-	    private _onStartCallback = null;
-        
-        /**
-        * The context that the _onStartCallback method is to be called in. 
-        * @property _onStartContext
-        * @type Any
-        * @default null
-        * @private
-        */
-        private _onStartContext:any = null;
-
-        /** 
-        * A boolean indicating if the starting callback has been called or not.
-        * @property _onStartCallbackFired
-        * @type boolean
-        * @default false
-        * @private
-        */
-	    private _onStartCallbackFired:boolean = false;
-
-        /** 
-        * A callback method that will be called each time the tween updates.
-        * @property _onUpdateCallback
-        * @type Function
-        * @default null
-        * @private
-        */
-	    private _onUpdateCallback = null;
-        
-        /**
-        * The context that the update callback has when called.
-        * @property _onUpdateContext
-        * @type any
-        * @default null
-        * @private
-        */
-        private _onUpdateContext:any = null;
-
-        /** 
-        * A method to be called when the tween finish's tweening.
-        * @property _onCompleteCallback
-        * @type function
-        * @default null
-        * @private
-        */
-	    private _onCompleteCallback = null;
-
-        /*
-        * A boolean indicating whether or not the _onCompleteCallback has been called.
-        * Is reset each time you tell the tween to start.
-        * @property _onCompleteCalled
-        * @type boolean
-        * @default false
-        * @private
-        */
-	    private _onCompleteCalled: boolean = false;
-
-        /** 
-        * The context that the onCompleteCallback should have when called.
-        * @property _onCompleteContext
-        * @type any
-        * @default null
-        * @private
-        */
-	    private _onCompleteContext: any = null;
-
-        /**
-        * An indication of whether or not this tween is currently running.
-        * @property isRunning.
-        * @type boolean
-        * @default false
-        * @public
-        */
-        public isRunning: boolean = false;
-
-        /** 
-        * Sets up the various properties that define this tween.
-        * The ending position/properties for this tween, how long the tween should go for, easing method to use and if should start right way.
-        *
-        * @method to
-        * @param properties {Object} The ending location of the properties that you want to tween. 
-        * @param [duration=1000] {Number} The duration of the tween.
-        * @param [ease=null] {Any} The easing method to be used. If not specifed then this will default to LINEAR.
-        * @param [autoStart=false] {boolean} If the tween should start right away.
-        * @return {Kiwi.Animations.Tween}
-        * @public
-        */
-        public to(properties, duration: number = 1000, ease: any = null, autoStart: boolean = false):Tween {
-
-	        this._duration = duration;
-
-	        //  If properties isn't an object this will fail, sanity check it here somehow?
-	        this._valuesEnd = properties;
-
-	        if (ease !== null) {
-	            this._easingFunction = ease;
-	        }
-
-	        if (autoStart === true) {
-                return this.start();
-
-	        } else {
-	            return this;
-	        }
-
-	    }
-
-        /** 
-        * Gets the initial values for the properties that it is to animate and starts the tween process.
-        * @method start
-        * @public
-        */
-	    public start() {
-            var property;
-
-            if (this._game === null || this._object === null)
-	        {
-	            return;
-	        }
-
-	        this.isRunning = true;
-
-	        this._manager.add(this);
-
-            this._onStartCallbackFired = false;
-
-            this._onCompleteCalled = false;
-
-	        this._startTime = this._manager.clock.elapsed() * 1000 + this._delayTime;
-
-	        for ( var property in this._valuesEnd ) {
-	            // This prevents the interpolation of null values or of non-existing properties
-	            if ( this._object[ property ] === null || !( property in this._object ) ) {
-	                continue;
-	            }
-
-	            // check if an Array was provided as property value
-	            if ( this._valuesEnd[ property ] instanceof Array ) {
-	                if ( this._valuesEnd[ property ].length === 0 ) {
-	                    continue;
-	                }
-
-	                // create a local copy of the Array with the start value at the front
-	                this._valuesEnd[ property ] = [ this._object[ property ] ].concat(this._valuesEnd[ property ]);
-	            }
-
-                //  Check if property is a function
-	            if ( typeof this._object[ property ] === "function" ) {
-	                this._valuesStart[ property ] = this._object[ property ]();
-	            } else {
-	                this._valuesStart[ property ] = this._object[ property ];
-	            }
-
-	        }
-
-	        return this;
-
-	    }
-
-        /** 
-        * Stops the Tween from running and removes it from the manager.
-        * @method stop
-        * @public
-        */
-	    public stop() {
-
-	        if (this._manager !== null)
-	        {
-	            this._manager.remove(this);
-	        }
-
-	        this.isRunning = false;
-
-	        return this;
-
-	    }
-
-        /** 
-        * Sets the game and the manager of this tween.
-        * @method setParent
-        * @param {Kiwi.Game} value
-        * @public
-        */
-	    public setParent(value:Kiwi.Game) {
-
-	        this._game = value;
-            this._manager = this._game.tweens;
-
-	    }
-
-        /** 
-        * Sets the amount of delay that the tween is to have before it starts playing.
-        * @method delay
-        * @param amount {Number} The amount of time to delay the tween by.
-        * @return {Kiwi.Animations.Tween}
-        * @public
-        */
-	    public delay(amount:number):Tween {
-
-	        this._delayTime = amount;
-	        return this;
-
-	    }
-
-        /** 
-        * Sets the easing method that is to be used when animating this tween.
-        * @method easing
-        * @param easing {Function} The easing function to use.
-        * @return {Kiwi.Animations.Tween} 
-        * @public
-        */
-	    public easing(easing):Tween {
-
-	        this._easingFunction = easing;
-	        return this;
-
-	    }
-
-        /** 
-        * [REQUIRES DESCRIPTION]
-        * @method interpolation
-        * @param {Any} interpolation
-        * @return {Kiwi.Animations.Tween}
-        * @public
-        */
-	    public interpolation(interpolation):Tween {
-
-	        this._interpolationFunction = interpolation;
-
-	        return this;
-
-	    }
-
-        /** 
-        * Adds another tween that should start playing once tween has completed.
-        * @method chain
-        * @param tween {Kiwi.Animations.Tween}
-        * @return {Kiwi.Animations.Tween}
-        * @public
-        */
-	    public chain(tween:Kiwi.Animations.Tween):Tween {
-
-	        this._chainedTweens.push(tween);
-	        return this;
-
-	    }
-
-        /** 
-        * Adds a function that is to be executed when the tween start playing.
-        * @method onStart
-        * @param callback {Function} The function that is to be executed on tween start.
-        * @param context {any} The context that function is to have when called.
-        * @return {Kiwi.Animations.Tween}
-        * @public
-        */
-	    public onStart(callback, context):Tween {
-
-	        this._onStartCallback = callback;
-            this._onStartContext = context;
-            return this;
-
-	    }
-
-        /** 
-        * Adds a function that is to be executed when this tween updates while it is playing.
-        * @method onUpdate
-        * @param callback {Function} The method that is to be executed.
-        * @param context {Any} The context the method is to have when called.
-        * @public
-        */
-	    public onUpdate(callback, context) {
-
-            this._onUpdateCallback = callback;
-            this._onUpdateContext = context;
-	        return this;
-
-	    }
-
-        /** 
-        * Defines a method that is to be called when this tween is finished.
-        * @method onComplete
-        * @param callback {Function} The method that is to be executed.
-        * @param context {Any} The context the method is to have when called.
-        * @public
-        */
-	    public onComplete(callback, context) {
-
-	        this._onCompleteCallback = callback;
-	        this._onCompleteContext = context;
-
-	        return this;
-
-	    }
-
-        /** 
-        * The update loop is executed every frame whilst the tween is running.
-        * @method update
-        * @param time {Number}
-        * @return {boolean} Whether the Tween is still running
-        * @public
-        */
-	    public update( time: number ) {
-
-            if ( time < this._startTime - this._delayTime ) {
-                return false;
-            }
-
-            if ( this._onStartCallbackFired === false ) {
-                if ( this._onStartCallback !== null ) {
-                    this._onStartCallback.call( this._onStartContext,
-                        this._object );
-                }
-
-                this._onStartCallbackFired = true;
-            }
-
-            var elapsed = ( time - this._startTime ) / this._duration;
-            elapsed = elapsed > 1 ? 1 :
-                elapsed < 0 ? 0 :
-                elapsed;
-
-            var value = this._easingFunction( elapsed );
-
-            for ( var property in this._valuesStart ) {
-                var start = this._valuesStart[ property ];
-                var end = this._valuesEnd[ property ];
-
-                //  Add checks for object, array, numeric up front
-                if ( end instanceof Array ) {
-                    this._object[ property ] =
-                        this._interpolationFunction( end, value );
-                } else {
-                    if ( typeof this._object[ property ] === "function" ) {
-                        this._object[ property ]( start + ( end - start ) * value );
-                    } else {
-                        this._object[ property ] = start + ( end - start ) * value;
-                    }
-                }
-            }
-
-            if ( this._onUpdateCallback !== null ) {
-                this._onUpdateCallback.call( this._onUpdateContext,
-                    this._object, value );
-            }
-
-            if ( elapsed === 1 ) {
-                this.isRunning = false;
-
-                if ( this._onCompleteCallback !== null &&
-                        this._onCompleteCalled === false ) {
-                    this._onCompleteCalled = true;
-                    this._onCompleteCallback.call(
-                        this._onCompleteContext, this._object );
-                }
-
-                for ( var i = 0; i < this._chainedTweens.length; i++ ) {
-                    this._chainedTweens[ i ].start();
-                }
-
-                return false;
-            }
-
-            return true;
-
-	    }
-
-    }
+	/**
+	* Manages the tweening of properties/values on a single object. A Tween is the animation of a number between an initially value to and final value (that you specify). 
+	* Note: When using a Tween you need to make sure that the Tween has been added to a TweenManager. You can either do this by creating the Tween via the Manager or alternatively using the 'add' method on the TweenManager. Otherwise the tween will not work.
+	*
+	* Based on tween.js by sole. Converted to TypeScript and integrated into Kiwi.
+	* https://github.com/sole/tween.js
+	*
+	* @class Tween
+	* @constructor
+	* @namespace Kiwi.Animations
+	* @param object {Any} The object that this tween is taking affect on.
+	* @param game {Kiwi.Game} The game that this tween is for.
+	* @return {Kiwi.Animations.Tween} This tween.
+	*
+	* @author     sole / http://soledadpenades.com
+	* @author     mrdoob / http://mrdoob.com
+	* @author     Robert Eisele / http://www.xarg.org
+	* @author     Philippe / http://philippe.elsass.me
+	* @author     Robert Penner / http://www.robertpenner.com/easing_terms_of_use.html
+	* @author     Paul Lewis / http://www.aerotwist.com/
+	* @author     lechecacharro
+	* @author     Josh Faul / http://jocafa.com/
+	* @author     egraether / http://egraether.com/
+	*
+	*/
+	export class Tween {
+
+		constructor(object, game:Kiwi.Game = null) {
+
+			this._object = object;
+
+			if (game !== null)
+			{
+				this._game = game;
+				this._manager = this._game.tweens;
+			}
+
+			this.isRunning = false;
+
+		}
+
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} "Tween"
+		* @public
+		*/
+		public objType() {
+			return "Tween";
+		}
+
+		/** 
+		* The game that this tween belongs to.
+		* @property _game
+		* @type Kiwi.Game
+		* @private
+		*/
+		private _game: Kiwi.Game = null;
+
+		/** 
+		* The manager that this tween belongs to. 
+		* @property _manager
+		* @type Kiwi.Animations.Tweens.TweenManager
+		* @private
+		*/
+		private _manager: Kiwi.Animations.Tweens.TweenManager = null;
+
+		/**
+		* The manager that this tween belongs to.
+		* @property manager
+		* @type Kiwi.Animations.Tweens.TweenManager
+		* @private
+		* @since 1.2.0
+		*/
+		public get manager(): Kiwi.Animations.Tweens.TweenManager {
+			return this._manager;
+		}
+
+		public set manager( value: Kiwi.Animations.Tweens.TweenManager ) {
+			this._manager = value;
+		}
+
+		/** 
+		* The object that this tween is affecting.
+		* @property _object
+		* @type Any
+		* @private
+		*/
+		private _object = null;
+
+		/**
+		* The object that this tween is affecting.
+		* If you change this, it will continue to tween,
+		* but any properties that are not on the new object
+		* will be discarded from the tween.
+		* @property object
+		* @type any
+		* @public
+		*/
+		public get object(): any {
+			return this._object;
+		}
+
+		public set object( value: any ) {
+			var i,
+				newValues = {};
+
+			this._object = value;
+
+			for ( i in this._valuesEnd ) {
+				if ( value[ i ] ) {
+					newValues[ i ] = this._valuesEnd[ i ];
+				}
+			}
+
+			this._valuesEnd = newValues;
+		}
+
+		/** 
+		* The starting values of the properties that the tween is animating.
+		* @property _valuesStart
+		* @type Object
+		* @private
+		*/
+		private _valuesStart = {};
+
+		/** 
+		* The end values of the properties that the tween is animating.
+		* @property _valuesEnd
+		* @type Object
+		* @private
+		*/
+		private _valuesEnd = {};
+
+		/** 
+		* The duration of the tween, in milliseconds.
+		* @property _duration
+		* @type Number
+		* @private
+		*/
+		private _duration = 1000;
+
+		/** 
+		* The amount of time to delay the tween by. In Milliseconds.
+		* @property _delayTime
+		* @type Number
+		* @private
+		*/
+		private _delayTime:number = 0;
+
+		/** 
+		* The time at which the tween started.
+		* @property _startTime
+		* @type Number
+		* @private
+		*/
+		private _startTime:number = null;
+
+		/** 
+		* The easing function that is to be used while tweening.
+		* @property _easingFunction
+		* @type Function
+		* @default Kiwi.Tweens.Easing.Linear.None
+		* @private
+		*/
+		private _easingFunction = Kiwi.Animations.Tweens.Easing.Linear.None;
+
+		/** 
+		* [NEEDS DESCRIPTION]
+		* @property _interpolationFunction
+		* @type Function
+		* @default Kiwi.Utils.Interpolation.Linear
+		* @private
+		*/
+		private _interpolationFunction = Kiwi.Utils.GameMath.linearInterpolation;
+
+		/** 
+		* An array containing all of the tweens that are to be played when this one finishes.
+		* @property _chainedTweens
+		* @type Tween[]
+		* @private
+		*/
+		private _chainedTweens = [];
+
+		/** 
+		* The method that is to be called when the tween starts playing.
+		* @property _onStartCallback
+		* @type Function
+		* @default null
+		* @private
+		*/
+		private _onStartCallback = null;
+
+		/**
+		* The context that the _onStartCallback method is to be called in. 
+		* @property _onStartContext
+		* @type Any
+		* @default null
+		* @private
+		*/
+		private _onStartContext:any = null;
+
+		/** 
+		* A boolean indicating if the starting callback has been called or not.
+		* @property _onStartCallbackFired
+		* @type boolean
+		* @default false
+		* @private
+		*/
+		private _onStartCallbackFired:boolean = false;
+
+		/** 
+		* A callback method that will be called each time the tween updates.
+		* @property _onUpdateCallback
+		* @type Function
+		* @default null
+		* @private
+		*/
+		private _onUpdateCallback = null;
+
+		/**
+		* The context that the update callback has when called.
+		* @property _onUpdateContext
+		* @type any
+		* @default null
+		* @private
+		*/
+		private _onUpdateContext:any = null;
+
+		/** 
+		* A method to be called when the tween finish's tweening.
+		* @property _onCompleteCallback
+		* @type function
+		* @default null
+		* @private
+		*/
+		private _onCompleteCallback = null;
+
+		/*
+		* A boolean indicating whether or not the _onCompleteCallback has been called.
+		* Is reset each time you tell the tween to start.
+		* @property _onCompleteCalled
+		* @type boolean
+		* @default false
+		* @private
+		*/
+		private _onCompleteCalled: boolean = false;
+
+		/** 
+		* The context that the onCompleteCallback should have when called.
+		* @property _onCompleteContext
+		* @type any
+		* @default null
+		* @private
+		*/
+		private _onCompleteContext: any = null;
+
+		/**
+		* An indication of whether or not this tween is currently running.
+		* @property isRunning.
+		* @type boolean
+		* @default false
+		* @public
+		*/
+		public isRunning: boolean = false;
+
+		/** 
+		* Sets up the various properties that define this tween.
+		* The ending position/properties for this tween, how long the tween should go for, easing method to use and if should start right way.
+		*
+		* @method to
+		* @param properties {Object} The ending location of the properties that you want to tween. 
+		* @param [duration=1000] {Number} The duration of the tween.
+		* @param [ease=null] {Any} The easing method to be used. If not specifed then this will default to LINEAR.
+		* @param [autoStart=false] {boolean} If the tween should start right away.
+		* @return {Kiwi.Animations.Tween}
+		* @public
+		*/
+		public to(properties, duration: number = 1000, ease: any = null, autoStart: boolean = false):Tween {
+
+			this._duration = duration;
+
+			//  If properties isn't an object this will fail, sanity check it here somehow?
+			this._valuesEnd = properties;
+
+			if (ease !== null) {
+				this._easingFunction = ease;
+			}
+
+			if (autoStart === true) {
+				return this.start();
+
+			} else {
+				return this;
+			}
+
+		}
+
+		/** 
+		* Gets the initial values for the properties that it is to animate and starts the tween process.
+		* @method start
+		* @public
+		*/
+		public start() {
+			var property;
+
+			if (this._game === null || this._object === null)
+			{
+				return;
+			}
+
+			this.isRunning = true;
+
+			this._manager.add(this);
+
+			this._onStartCallbackFired = false;
+
+			this._onCompleteCalled = false;
+
+			this._startTime = this._manager.clock.elapsed() * 1000 + this._delayTime;
+
+			for ( var property in this._valuesEnd ) {
+				// This prevents the interpolation of null values or of non-existing properties
+				if ( this._object[ property ] === null || !( property in this._object ) ) {
+					continue;
+				}
+
+				// check if an Array was provided as property value
+				if ( this._valuesEnd[ property ] instanceof Array ) {
+					if ( this._valuesEnd[ property ].length === 0 ) {
+						continue;
+					}
+
+					// create a local copy of the Array with the start value at the front
+					this._valuesEnd[ property ] = [ this._object[ property ] ].concat(this._valuesEnd[ property ]);
+				}
+
+				//  Check if property is a function
+				if ( typeof this._object[ property ] === "function" ) {
+					this._valuesStart[ property ] = this._object[ property ]();
+				} else {
+					this._valuesStart[ property ] = this._object[ property ];
+				}
+
+			}
+
+			return this;
+
+		}
+
+		/** 
+		* Stops the Tween from running and removes it from the manager.
+		* @method stop
+		* @public
+		*/
+		public stop() {
+
+			if (this._manager !== null)
+			{
+				this._manager.remove(this);
+			}
+
+			this.isRunning = false;
+
+			return this;
+
+		}
+
+		/** 
+		* Sets the game and the manager of this tween.
+		* @method setParent
+		* @param {Kiwi.Game} value
+		* @public
+		*/
+		public setParent(value:Kiwi.Game) {
+
+			this._game = value;
+			this._manager = this._game.tweens;
+
+		}
+
+		/** 
+		* Sets the amount of delay that the tween is to have before it starts playing.
+		* @method delay
+		* @param amount {Number} The amount of time to delay the tween by.
+		* @return {Kiwi.Animations.Tween}
+		* @public
+		*/
+		public delay(amount:number):Tween {
+
+			this._delayTime = amount;
+			return this;
+
+		}
+
+		/** 
+		* Sets the easing method that is to be used when animating this tween.
+		* @method easing
+		* @param easing {Function} The easing function to use.
+		* @return {Kiwi.Animations.Tween} 
+		* @public
+		*/
+		public easing(easing):Tween {
+
+			this._easingFunction = easing;
+			return this;
+
+		}
+
+		/** 
+		* [REQUIRES DESCRIPTION]
+		* @method interpolation
+		* @param {Any} interpolation
+		* @return {Kiwi.Animations.Tween}
+		* @public
+		*/
+		public interpolation(interpolation):Tween {
+
+			this._interpolationFunction = interpolation;
+
+			return this;
+
+		}
+
+		/** 
+		* Adds another tween that should start playing once tween has completed.
+		* @method chain
+		* @param tween {Kiwi.Animations.Tween}
+		* @return {Kiwi.Animations.Tween}
+		* @public
+		*/
+		public chain(tween:Kiwi.Animations.Tween):Tween {
+
+			this._chainedTweens.push(tween);
+			return this;
+
+		}
+
+		/** 
+		* Adds a function that is to be executed when the tween start playing.
+		* @method onStart
+		* @param callback {Function} The function that is to be executed on tween start.
+		* @param context {any} The context that function is to have when called.
+		* @return {Kiwi.Animations.Tween}
+		* @public
+		*/
+		public onStart(callback, context):Tween {
+
+			this._onStartCallback = callback;
+			this._onStartContext = context;
+			return this;
+
+		}
+
+		/** 
+		* Adds a function that is to be executed when this tween updates while it is playing.
+		* @method onUpdate
+		* @param callback {Function} The method that is to be executed.
+		* @param context {Any} The context the method is to have when called.
+		* @public
+		*/
+		public onUpdate(callback, context) {
+
+			this._onUpdateCallback = callback;
+			this._onUpdateContext = context;
+			return this;
+
+		}
+
+		/** 
+		* Defines a method that is to be called when this tween is finished.
+		* @method onComplete
+		* @param callback {Function} The method that is to be executed.
+		* @param context {Any} The context the method is to have when called.
+		* @public
+		*/
+		public onComplete(callback, context) {
+
+			this._onCompleteCallback = callback;
+			this._onCompleteContext = context;
+
+			return this;
+
+		}
+
+		/** 
+		* The update loop is executed every frame whilst the tween is running.
+		* @method update
+		* @param time {Number}
+		* @return {boolean} Whether the Tween is still running
+		* @public
+		*/
+		public update( time: number ) {
+
+			if ( time < this._startTime - this._delayTime ) {
+				return false;
+			}
+
+			if ( this._onStartCallbackFired === false ) {
+				if ( this._onStartCallback !== null ) {
+					this._onStartCallback.call( this._onStartContext,
+						this._object );
+				}
+
+				this._onStartCallbackFired = true;
+			}
+
+			var elapsed = ( time - this._startTime ) / this._duration;
+			elapsed = elapsed > 1 ? 1 :
+				elapsed < 0 ? 0 :
+				elapsed;
+
+			var value = this._easingFunction( elapsed );
+
+			for ( var property in this._valuesStart ) {
+				var start = this._valuesStart[ property ];
+				var end = this._valuesEnd[ property ];
+
+				//  Add checks for object, array, numeric up front
+				if ( end instanceof Array ) {
+					this._object[ property ] =
+						this._interpolationFunction( end, value );
+				} else {
+					if ( typeof this._object[ property ] === "function" ) {
+						this._object[ property ]( start + ( end - start ) * value );
+					} else {
+						this._object[ property ] = start + ( end - start ) * value;
+					}
+				}
+			}
+
+			if ( this._onUpdateCallback !== null ) {
+				this._onUpdateCallback.call( this._onUpdateContext,
+					this._object, value );
+			}
+
+			if ( elapsed === 1 ) {
+				this.isRunning = false;
+
+				if ( this._onCompleteCallback !== null &&
+						this._onCompleteCalled === false ) {
+					this._onCompleteCalled = true;
+					this._onCompleteCallback.call(
+						this._onCompleteContext, this._object );
+				}
+
+				for ( var i = 0; i < this._chainedTweens.length; i++ ) {
+					this._chainedTweens[ i ].start();
+				}
+
+				return false;
+			}
+
+			return true;
+
+		}
+
+	}
 }
diff --git a/src/animations/tweens/TweenManager.ts b/src/animations/tweens/TweenManager.ts
index aee0e41..92c1153 100644
--- a/src/animations/tweens/TweenManager.ts
+++ b/src/animations/tweens/TweenManager.ts
@@ -8,188 +8,188 @@
 
 module Kiwi.Animations.Tweens {
 
-    /** 
-    * The TweenManager is automatically created on every game. This class is responsible for the creation and management of tweens for the game.
-    *  
-    * Based on tween.js by sole. Converted to TypeScript and integrated into Kiwi.
-    * https://github.com/sole/tween.js
-    *
-    * @class TweenManager
-    * @namespace Kiwi.Animations.Tweens
-    * @constructor
-    * @param game {Kiwi.Game} Current game
-    * @param [clock] {Kiwi.Time.Clock} Clock to use for tweens.
-    *   Defaults to game.time.clock.
-    * @return {Kiwi.Animations.TweenManager}
-    * 
-    * @author     sole / http://soledadpenades.com
-    * @author     mrdoob / http://mrdoob.com
-    * @author     Robert Eisele / http://www.xarg.org
-    * @author     Philippe / http://philippe.elsass.me
-    * @author     Robert Penner / http://www.robertpenner.com/easing_terms_of_use.html
-    * @author     Paul Lewis / http://www.aerotwist.com/
-    * @author     lechecacharro
-    * @author     Josh Faul / http://jocafa.com/
-    * @author     egraether / http://egraether.com/
-    * 
-    */
-    export class TweenManager {
-         
-        constructor( game: Kiwi.Game, clock?: Kiwi.Time.Clock ) {
-             
-            this._game = game;
-            this._tweens = [];
-            this.clock = clock || this._game.time.clock;
-
-        }
-
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} "TweenManager"
-        * @public
-        */
-        public objType() {
-            return "TweenManager";
-        }
-
-        /** 
-        * The game that this manager belongs to.
-        * @property _game
-        * @type Kiwi.Game
-        * @private
-        */
-        private _game: Kiwi.Game;
-
-        /** 
-        * An array of all of the tweens on the manager.
-        * @property _tweens
-        * @type Kiwi.Animations.Tween[]
-        * @private
-        */
-        private _tweens: Kiwi.Animations.Tween[];
-
-        /**
-        * Clock used by tweens
-        * @property clock
-        * @type Kiwi.Time.Clock
-        * @public
-        * @since 1.2.0
-        */
-        public clock: Kiwi.Time.Clock;
-
-        /** 
-        * Returns all of tweens that are on the manager.
-        * @method getAll
-        * @return Kiwi.Animations.Tween[]
-        * @public
-        */
-        public getAll() {
-
-            return this._tweens;
-
-        }
-
-        /** 
-        * Removes all of the tweens on the manager.
-        * @method removeAll
-        * @public
-        */
-        public removeAll() {
-
-            this._tweens.length = 0;
-
-        }
-
-        /** 
-        * Creates a new Tween. 
-        * @method create
-        * @param object {Any} The object that this tween is to apply.
-        * @return {Kiwi.Animations.Tween} The tween that was created.
-        * @public
-        */
-        public create(object:any): Kiwi.Animations.Tween {
-            var tween = new Kiwi.Animations.Tween(object, this._game);
-            this.validateClock();
-            tween.manager = this;
-            return tween;
-        }
-
-        /** 
-        * Adds a tween to the manager. 
-        * @method add 
-        * @param tween {Kiwi.Animations.Tween} The tween that you want to add to the manager.
-        * @return {Kiwi.Animations.Tween} 
-        * @public
-        */
-        public add(tween: Kiwi.Animations.Tween): Kiwi.Animations.Tween {
-            tween.setParent(this._game);
-            tween.manager = this;
-            this.validateClock();
-            this._tweens.push(tween);
-            return tween;
-
-        }
-
-        /** 
-        * Removes a tween from this manager.
-        * @method remove
-        * @param tween {Kiwi.Animations.Tween} The tween that you would like to remove.
-        * @return {Kiwi.Animations.Tween} The tween passed in.
-        * @public
-        */
-        public remove(tween: Kiwi.Animations.Tween) {
-
-            var i = this._tweens.indexOf(tween);
-
-            if (i !== -1)
-            {
-                this._tweens.splice(i, 1);
-            }
-
-            return tween;
-        }
-
-        /** 
-        * The update loop.
-        * @method update
-        * @return {boolean} Whether anything was updated
-        * @public
-        */
-        public update() {
-            var i = 0,
-                numTweens = this._tweens.length;
-
-            if ( this._tweens.length === 0 ) {
-                return false;
-            }
-
-            while ( i < numTweens ) {
-                if ( this._tweens[ i ].update( this.clock.elapsed() * 1000 ) ) {
-                    i++;
-                } else {
-                    this._tweens.splice( i, 1 );
-                    numTweens--;
-                }
-            }
-
-            return true;
-        }
-
-        /**
-        * Validate clock; if no valid clock is found, set one from game
-        * @method validateClock
-        * @public
-        * @since 1.2.0
-        */
-        public validateClock() {
-            if ( !this.clock ) {
-                this.clock = this._game.time.clock;
-                if ( !this.clock ) {
-                    Kiwi.Log.error( "Tween manager could not find valid clock!" );
-                }
-            }
-        }
-
-    }
+	/** 
+	* The TweenManager is automatically created on every game. This class is responsible for the creation and management of tweens for the game.
+	*  
+	* Based on tween.js by sole. Converted to TypeScript and integrated into Kiwi.
+	* https://github.com/sole/tween.js
+	*
+	* @class TweenManager
+	* @namespace Kiwi.Animations.Tweens
+	* @constructor
+	* @param game {Kiwi.Game} Current game
+	* @param [clock] {Kiwi.Time.Clock} Clock to use for tweens.
+	*   Defaults to game.time.clock.
+	* @return {Kiwi.Animations.TweenManager}
+	* 
+	* @author     sole / http://soledadpenades.com
+	* @author     mrdoob / http://mrdoob.com
+	* @author     Robert Eisele / http://www.xarg.org
+	* @author     Philippe / http://philippe.elsass.me
+	* @author     Robert Penner / http://www.robertpenner.com/easing_terms_of_use.html
+	* @author     Paul Lewis / http://www.aerotwist.com/
+	* @author     lechecacharro
+	* @author     Josh Faul / http://jocafa.com/
+	* @author     egraether / http://egraether.com/
+	* 
+	*/
+	export class TweenManager {
+
+		constructor( game: Kiwi.Game, clock?: Kiwi.Time.Clock ) {
+			 
+			this._game = game;
+			this._tweens = [];
+			this.clock = clock || this._game.time.clock;
+
+		}
+
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} "TweenManager"
+		* @public
+		*/
+		public objType() {
+			return "TweenManager";
+		}
+
+		/** 
+		* The game that this manager belongs to.
+		* @property _game
+		* @type Kiwi.Game
+		* @private
+		*/
+		private _game: Kiwi.Game;
+
+		/** 
+		* An array of all of the tweens on the manager.
+		* @property _tweens
+		* @type Kiwi.Animations.Tween[]
+		* @private
+		*/
+		private _tweens: Kiwi.Animations.Tween[];
+
+		/**
+		* Clock used by tweens
+		* @property clock
+		* @type Kiwi.Time.Clock
+		* @public
+		* @since 1.2.0
+		*/
+		public clock: Kiwi.Time.Clock;
+
+		/** 
+		* Returns all of tweens that are on the manager.
+		* @method getAll
+		* @return Kiwi.Animations.Tween[]
+		* @public
+		*/
+		public getAll() {
+
+			return this._tweens;
+
+		}
+
+		/** 
+		* Removes all of the tweens on the manager.
+		* @method removeAll
+		* @public
+		*/
+		public removeAll() {
+
+			this._tweens.length = 0;
+
+		}
+
+		/** 
+		* Creates a new Tween. 
+		* @method create
+		* @param object {Any} The object that this tween is to apply.
+		* @return {Kiwi.Animations.Tween} The tween that was created.
+		* @public
+		*/
+		public create(object:any): Kiwi.Animations.Tween {
+			var tween = new Kiwi.Animations.Tween(object, this._game);
+			this.validateClock();
+			tween.manager = this;
+			return tween;
+		}
+
+		/** 
+		* Adds a tween to the manager. 
+		* @method add 
+		* @param tween {Kiwi.Animations.Tween} The tween that you want to add to the manager.
+		* @return {Kiwi.Animations.Tween} 
+		* @public
+		*/
+		public add(tween: Kiwi.Animations.Tween): Kiwi.Animations.Tween {
+			tween.setParent(this._game);
+			tween.manager = this;
+			this.validateClock();
+			this._tweens.push(tween);
+			return tween;
+
+		}
+
+		/** 
+		* Removes a tween from this manager.
+		* @method remove
+		* @param tween {Kiwi.Animations.Tween} The tween that you would like to remove.
+		* @return {Kiwi.Animations.Tween} The tween passed in.
+		* @public
+		*/
+		public remove(tween: Kiwi.Animations.Tween) {
+
+			var i = this._tweens.indexOf(tween);
+
+			if (i !== -1)
+			{
+				this._tweens.splice(i, 1);
+			}
+
+			return tween;
+		}
+
+		/** 
+		* The update loop.
+		* @method update
+		* @return {boolean} Whether anything was updated
+		* @public
+		*/
+		public update() {
+			var i = 0,
+				numTweens = this._tweens.length;
+
+			if ( this._tweens.length === 0 ) {
+				return false;
+			}
+
+			while ( i < numTweens ) {
+				if ( this._tweens[ i ].update( this.clock.elapsed() * 1000 ) ) {
+					i++;
+				} else {
+					this._tweens.splice( i, 1 );
+					numTweens--;
+				}
+			}
+
+			return true;
+		}
+
+		/**
+		* Validate clock; if no valid clock is found, set one from game
+		* @method validateClock
+		* @public
+		* @since 1.2.0
+		*/
+		public validateClock() {
+			if ( !this.clock ) {
+				this.clock = this._game.time.clock;
+				if ( !this.clock ) {
+					Kiwi.Log.error( "Tween manager could not find valid clock!" );
+				}
+			}
+		}
+
+	}
 }
diff --git a/src/animations/tweens/easing/Back.ts b/src/animations/tweens/easing/Back.ts
index 64e1594..764d944 100644
--- a/src/animations/tweens/easing/Back.ts
+++ b/src/animations/tweens/easing/Back.ts
@@ -8,70 +8,70 @@
 
 module Kiwi.Animations.Tweens.Easing {
 
-    /**
-    * 
-    * @class Back
-    * @namespace Kiwi.Animations.Tweens.Easing
-    * 
-    */
-    export class Back {
+	/**
+	* 
+	* @class Back
+	* @namespace Kiwi.Animations.Tweens.Easing
+	* 
+	*/
+	export class Back {
 
-        /**
-        * The type of object this is.
-        * @method objType
-        * @return {String} "Back"
-        * @public
-        */
-        public objType() {
-            return "Back";
-        }
+		/**
+		* The type of object this is.
+		* @method objType
+		* @return {String} "Back"
+		* @public
+		*/
+		public objType() {
+			return "Back";
+		}
 
-        /** 
-        * 
-        * @method In
-        * @param k {Any}
-        * @return {Number}
-        * @static
-        * @public
-        */
-        public static In(k) {
+		/** 
+		* 
+		* @method In
+		* @param k {Any}
+		* @return {Number}
+		* @static
+		* @public
+		*/
+		public static In(k) {
 
-            var s = 1.70158;
-            return k * k * ((s + 1) * k - s);
+			var s = 1.70158;
+			return k * k * ((s + 1) * k - s);
 
-        }
+		}
 
-        /** 
-        * 
-        * @method Out
-        * @param {Any} k
-        * @return {Number}
-        * @static
-        * @public
-        */
-        public static Out(k) {
+		/** 
+		* 
+		* @method Out
+		* @param {Any} k
+		* @return {Number}
+		* @static
+		* @public
+		*/
+		public static Out(k) {
 
-            var s = 1.70158;
-            return --k * k * ((s + 1) * k + s) + 1;
+			var s = 1.70158;
+			return --k * k * ((s + 1) * k + s) + 1;
 
-        }
+		}
 
-        /** 
-        * 
-        * @method InOut
-        * @param k {Any}
-        * @return {Number}
-        * @static
-        * @public
-        */
-        public static InOut(k) {
+		/** 
+		* 
+		* @method InOut
+		* @param k {Any}
+		* @return {Number}
+		* @static
+		* @public
+		*/
+		public static InOut(k) {
 
-            var s = 1.70158 * 1.525;
-            if ((k *= 2) < 1) return 0.5 * (k * k * ((s + 1) * k - s));
-            return 0.5 * ((k -= 2) * k * ((s + 1) * k + s) + 2);
+			var s = 1.70158 * 1.525;
+			if ((k *= 2) < 1) return 0.5 * (k * k * ((s + 1) * k - s));
+			return 0.5 * ((k -= 2) * k * ((s + 1) * k + s) + 2);
 
-        }
+		}
 
-    }
+	}
 
 }
diff --git a/src/animations/tweens/easing/Bounce.ts b/src/animations/tweens/easing/Bounce.ts
index 4ed2948..72e1359 100644
--- a/src/animations/tweens/easing/Bounce.ts
+++ b/src/animations/tweens/easing/Bounce.ts
@@ -7,82 +7,82 @@
 
 module Kiwi.Animations.Tweens.Easing {
 
-    /**
-    *
-    * @class Bounce
-    * @namespace Kiwi.Animations.Tweens.Easing
-    *
-    */
-    export class Bounce {
+	/**
+	*
+	* @class Bounce
+	* @namespace Kiwi.Animations.Tweens.Easing
+	*
+	*/
+	export class Bounce {
 
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} "Bounce"
-        * @public
-        */
-        public objType() {
-            return "Bounce";
-        }
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} "Bounce"
+		* @public
+		*/
+		public objType() {
+			return "Bounce";
+		}
 
-        /** 
-        * 
-        * @method In
-        * @param k {Any}
-        * @return {Number} 
-        * @static
-        * @public
-        */
-        public static In(k) {
+		/** 
+		* 
+		* @method In
+		* @param k {Any}
+		* @return {Number} 
+		* @static
+		* @public
+		*/
+		public static In(k) {
 
-            return 1 - Kiwi.Animations.Tweens.Easing.Bounce.Out(1 - k);
+			return 1 - Kiwi.Animations.Tweens.Easing.Bounce.Out(1 - k);
 
-        }
+		}
 
-        /** 
-        * 
-        * @method Out
-        * @param k {Any}
-        * @return {Number}
-        * @static
-        * @public
-        */
-        public static Out(k) {
+		/** 
+		* 
+		* @method Out
+		* @param k {Any}
+		* @return {Number}
+		* @static
+		* @public
+		*/
+		public static Out(k) {
 
-            if (k < (1 / 2.75))
-            {
-                return 7.5625 * k * k;
-            }
-            else if (k < (2 / 2.75))
-            {
-                return 7.5625 * (k -= (1.5 / 2.75)) * k + 0.75;
-            }
-            else if (k < (2.5 / 2.75))
-            {
-                return 7.5625 * (k -= (2.25 / 2.75)) * k + 0.9375;
-            }
-            else
-            {
-                return 7.5625 * (k -= (2.625 / 2.75)) * k + 0.984375;
-            }
+			if (k < (1 / 2.75))
+			{
+				return 7.5625 * k * k;
+			}
+			else if (k < (2 / 2.75))
+			{
+				return 7.5625 * (k -= (1.5 / 2.75)) * k + 0.75;
+			}
+			else if (k < (2.5 / 2.75))
+			{
+				return 7.5625 * (k -= (2.25 / 2.75)) * k + 0.9375;
+			}
+			else
+			{
+				return 7.5625 * (k -= (2.625 / 2.75)) * k + 0.984375;
+			}
 
-        }
+		}
 
-        /** 
-        * 
-        * @method InOut
-        * @param {Any} k
-        * @return {Number}
-        * @static
-        * @public
-        */
-        public static InOut(k) {
+		/** 
+		* 
+		* @method InOut
+		* @param {Any} k
+		* @return {Number}
+		* @static
+		* @public
+		*/
+		public static InOut(k) {
 
-            if (k < 0.5) return Kiwi.Animations.Tweens.Easing.Bounce.In(k * 2) * 0.5;
-            return Kiwi.Animations.Tweens.Easing.Bounce.Out(k * 2 - 1) * 0.5 + 0.5;
+			if (k < 0.5) return Kiwi.Animations.Tweens.Easing.Bounce.In(k * 2) * 0.5;
+			return Kiwi.Animations.Tweens.Easing.Bounce.Out(k * 2 - 1) * 0.5 + 0.5;
 
-        }
+		}
 
-    }
+	}
 
 }
diff --git a/src/animations/tweens/easing/Circular.ts b/src/animations/tweens/easing/Circular.ts
index 2301569..ecca1c8 100644
--- a/src/animations/tweens/easing/Circular.ts
+++ b/src/animations/tweens/easing/Circular.ts
@@ -6,65 +6,65 @@
 */
 module Kiwi.Animations.Tweens.Easing {
 
-    /**
-    *
-    *
-    * @class Circular
-    * @namespace Kiwi.Animations.Tweens.Easing
-    *
-    */
-    export class Circular {
+	/**
+	*
+	*
+	* @class Circular
+	* @namespace Kiwi.Animations.Tweens.Easing
+	*
+	*/
+	export class Circular {
 
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} "Circular"
-        * @public
-        */
-        public objType() {
-            return "Circular";
-        }
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} "Circular"
+		* @public
+		*/
+		public objType() {
+			return "Circular";
+		}
 
-        /** 
-        * 
-        * @method In
-        * @param k {Any}
-        * @return {Number}
-        * @static
-        */
-        public static In(k) {
+		/** 
+		* 
+		* @method In
+		* @param k {Any}
+		* @return {Number}
+		* @static
+		*/
+		public static In(k) {
 
-            return 1 - Math.sqrt(1 - k * k);
+			return 1 - Math.sqrt(1 - k * k);
 
-        }
+		}
 
-        /** 
-        * 
-        * @method Out
-        * @param k {Any}
-        * @return {Number}
-        * @static
-        */
-        public static Out(k) {
+		/** 
+		* 
+		* @method Out
+		* @param k {Any}
+		* @return {Number}
+		* @static
+		*/
+		public static Out(k) {
 
-            return Math.sqrt(1 - (--k * k));
+			return Math.sqrt(1 - (--k * k));
 
-        }
+		}
 
-        /** 
-        * 
-        * @method InOut
-        * @param k {Any}
-        * @return {Number}
-        * @static
-        */
-        public static InOut(k) {
+		/** 
+		* 
+		* @method InOut
+		* @param k {Any}
+		* @return {Number}
+		* @static
+		*/
+		public static InOut(k) {
 
-            if ((k *= 2) < 1) return -0.5 * (Math.sqrt(1 - k * k) - 1);
-            return 0.5 * (Math.sqrt(1 - (k -= 2) * k) + 1);
+			if ((k *= 2) < 1) return -0.5 * (Math.sqrt(1 - k * k) - 1);
+			return 0.5 * (Math.sqrt(1 - (k -= 2) * k) + 1);
 
-        }
+		}
 
-    }
+	}
 
 }
diff --git a/src/animations/tweens/easing/Cubic.ts b/src/animations/tweens/easing/Cubic.ts
index 077723a..6db89ca 100644
--- a/src/animations/tweens/easing/Cubic.ts
+++ b/src/animations/tweens/easing/Cubic.ts
@@ -6,67 +6,67 @@
 */
 
 module Kiwi.Animations.Tweens.Easing {
-    
-    /**
-    * 
-    * @class Cubic
-    * @namespace Kiwi.Animations.Tweens.Easing
-    *
-    */
-    export class Cubic {
 
-        /**
-        * The type of object that this is.
-        * @method objType 
-        * @return {String} "Cubic"
-        * @public
-        */
-        public objType() {
-            return "Cubic";
-        }
+	/**
+	* 
+	* @class Cubic
+	* @namespace Kiwi.Animations.Tweens.Easing
+	*
+	*/
+	export class Cubic {
 
-        /** 
-        * 
-        * @method In
-        * @param k {Any}
-        * @return {Number}
-        * @static
-        * @public
-        */
-        public static In(k) {
+		/**
+		* The type of object that this is.
+		* @method objType 
+		* @return {String} "Cubic"
+		* @public
+		*/
+		public objType() {
+			return "Cubic";
+		}
 
-            return k * k * k;
+		/** 
+		* 
+		* @method In
+		* @param k {Any}
+		* @return {Number}
+		* @static
+		* @public
+		*/
+		public static In(k) {
 
-        }
+			return k * k * k;
 
-        /** 
-        * 
-        * @method Out
-        * @param k {Any}
-        * @return {Number}
-        * @static
-        * @public
-        */
-        public static Out(k) {
+		}
 
-            return --k * k * k + 1;
+		/** 
+		* 
+		* @method Out
+		* @param k {Any}
+		* @return {Number}
+		* @static
+		* @public
+		*/
+		public static Out(k) {
 
-        }
+			return --k * k * k + 1;
 
-        /** 
-        * 
-        * @method InOut
-        * @param k {Any}
-        * @static
-        * @public
-        */
-        public static InOut(k) {
+		}
 
-            if ((k *= 2) < 1) return 0.5 * k * k * k;
-            return 0.5 * ((k -= 2) * k * k + 2);
+		/** 
+		* 
+		* @method InOut
+		* @param k {Any}
+		* @static
+		* @public
+		*/
+		public static InOut(k) {
 
-        }
+			if ((k *= 2) < 1) return 0.5 * k * k * k;
+			return 0.5 * ((k -= 2) * k * k + 2);
 
-    }
+		}
+
+	}
 
 }
diff --git a/src/animations/tweens/easing/Elastic.ts b/src/animations/tweens/easing/Elastic.ts
index 2b7cb62..4206ed5 100644
--- a/src/animations/tweens/easing/Elastic.ts
+++ b/src/animations/tweens/easing/Elastic.ts
@@ -6,82 +6,82 @@
 */
 
 module Kiwi.Animations.Tweens.Easing {
-    
-    /**
-    *
-    *
-    * @class Elastic
-    * @namespace Kiwi.Animations.Tweens.Easing
-    *
-    */
-    export class Elastic {
 
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} "Elastic"
-        * @public
-        */
-        public objType() {
-            return "Elastic";
-        }
+	/**
+	*
+	*
+	* @class Elastic
+	* @namespace Kiwi.Animations.Tweens.Easing
+	*
+	*/
+	export class Elastic {
 
-        /** 
-        * 
-        * @method In
-        * @param k {Any}
-        * @return {Number}
-        * @static
-        * @public
-        */
-        public static In(k) {
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} "Elastic"
+		* @public
+		*/
+		public objType() {
+			return "Elastic";
+		}
 
-            var s, a = 0.1, p = 0.4;
-            if (k === 0) return 0;
-            if (k === 1) return 1;
-            if (!a || a < 1) { a = 1; s = p / 4; }
-            else s = p * Math.asin(1 / a) / (2 * Math.PI);
-            return -(a * Math.pow(2, 10 * (k -= 1)) * Math.sin((k - s) * (2 * Math.PI) / p));
+		/** 
+		* 
+		* @method In
+		* @param k {Any}
+		* @return {Number}
+		* @static
+		* @public
+		*/
+		public static In(k) {
 
-        }
+			var s, a = 0.1, p = 0.4;
+			if (k === 0) return 0;
+			if (k === 1) return 1;
+			if (!a || a < 1) { a = 1; s = p / 4; }
+			else s = p * Math.asin(1 / a) / (2 * Math.PI);
+			return -(a * Math.pow(2, 10 * (k -= 1)) * Math.sin((k - s) * (2 * Math.PI) / p));
 
-        /** 
-        * 
-        * @method Out
-        * @param {Any} k
-        * @static
-        * @public
-        */
-        public static Out(k) {
+		}
 
-            var s, a = 0.1, p = 0.4;
-            if (k === 0) return 0;
-            if (k === 1) return 1;
-            if (!a || a < 1) { a = 1; s = p / 4; }
-            else s = p * Math.asin(1 / a) / (2 * Math.PI);
-            return (a * Math.pow(2, -10 * k) * Math.sin((k - s) * (2 * Math.PI) / p) + 1);
+		/** 
+		* 
+		* @method Out
+		* @param {Any} k
+		* @static
+		* @public
+		*/
+		public static Out(k) {
 
-        }
+			var s, a = 0.1, p = 0.4;
+			if (k === 0) return 0;
+			if (k === 1) return 1;
+			if (!a || a < 1) { a = 1; s = p / 4; }
+			else s = p * Math.asin(1 / a) / (2 * Math.PI);
+			return (a * Math.pow(2, -10 * k) * Math.sin((k - s) * (2 * Math.PI) / p) + 1);
 
-        /** 
-        * 
-        * @method InOut
-        * @param k {Any}
-        * @static
-        * @public
-        */
-        public static InOut(k) {
+		}
 
-            var s, a = 0.1, p = 0.4;
-            if (k === 0) return 0;
-            if (k === 1) return 1;
-            if (!a || a < 1) { a = 1; s = p / 4; }
-            else s = p * Math.asin(1 / a) / (2 * Math.PI);
-            if ((k *= 2) < 1) return -0.5 * (a * Math.pow(2, 10 * (k -= 1)) * Math.sin((k - s) * (2 * Math.PI) / p));
-            return a * Math.pow(2, -10 * (k -= 1)) * Math.sin((k - s) * (2 * Math.PI) / p) * 0.5 + 1;
+		/** 
+		* 
+		* @method InOut
+		* @param k {Any}
+		* @static
+		* @public
+		*/
+		public static InOut(k) {
 
-        }
+			var s, a = 0.1, p = 0.4;
+			if (k === 0) return 0;
+			if (k === 1) return 1;
+			if (!a || a < 1) { a = 1; s = p / 4; }
+			else s = p * Math.asin(1 / a) / (2 * Math.PI);
+			if ((k *= 2) < 1) return -0.5 * (a * Math.pow(2, 10 * (k -= 1)) * Math.sin((k - s) * (2 * Math.PI) / p));
+			return a * Math.pow(2, -10 * (k -= 1)) * Math.sin((k - s) * (2 * Math.PI) / p) * 0.5 + 1;
 
-    }
+		}
+
+	}
 
 }
diff --git a/src/animations/tweens/easing/Exponential.ts b/src/animations/tweens/easing/Exponential.ts
index 4e882a7..f1e722f 100644
--- a/src/animations/tweens/easing/Exponential.ts
+++ b/src/animations/tweens/easing/Exponential.ts
@@ -7,70 +7,70 @@
 
 module Kiwi.Animations.Tweens.Easing {
 
-    /**
-    *
-    *
-    * @class Exponential
-    * @namespace Kiwi.Animations.Tweens.Easing
-    *
-    */
-    export class Exponential {
+	/**
+	*
+	*
+	* @class Exponential
+	* @namespace Kiwi.Animations.Tweens.Easing
+	*
+	*/
+	export class Exponential {
 
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} "Exponential"
-        * @public
-        */
-        public objType() {
-            return "Exponential";
-        }
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} "Exponential"
+		* @public
+		*/
+		public objType() {
+			return "Exponential";
+		}
 
-        /** 
-        * 
-        * @method In
-        * @param k {Any}
-        * @return {String}
-        * @static
-        * @public
-        */
-        public static In(k) {
+		/** 
+		* 
+		* @method In
+		* @param k {Any}
+		* @return {String}
+		* @static
+		* @public
+		*/
+		public static In(k) {
 
-            return k === 0 ? 0 : Math.pow(1024, k - 1);
+			return k === 0 ? 0 : Math.pow(1024, k - 1);
 
-        }
+		}
 
-        /** 
-        * 
-        * @method Out
-        * @param k {Any}
-        * @return {String}
-        * @static
-        * @public
-        */
-        public static Out(k) {
+		/** 
+		* 
+		* @method Out
+		* @param k {Any}
+		* @return {String}
+		* @static
+		* @public
+		*/
+		public static Out(k) {
 
-            return k === 1 ? 1 : 1 - Math.pow(2, -10 * k);
+			return k === 1 ? 1 : 1 - Math.pow(2, -10 * k);
 
-        }
+		}
 
-        /** 
-        * 
-        * @method InOut
-        * @param k {Any}
-        * @return {String}
-        * @static
-        * @public
-        */
-        public static InOut(k) {
+		/** 
+		* 
+		* @method InOut
+		* @param k {Any}
+		* @return {String}
+		* @static
+		* @public
+		*/
+		public static InOut(k) {
 
-            if (k === 0) return 0;
-            if (k === 1) return 1;
-            if ((k *= 2) < 1) return 0.5 * Math.pow(1024, k - 1);
-            return 0.5 * (-Math.pow(2, -10 * (k - 1)) + 2);
+			if (k === 0) return 0;
+			if (k === 1) return 1;
+			if ((k *= 2) < 1) return 0.5 * Math.pow(1024, k - 1);
+			return 0.5 * (-Math.pow(2, -10 * (k - 1)) + 2);
 
-        }
+		}
 
-    }
+	}
 
 }
diff --git a/src/animations/tweens/easing/Linear.ts b/src/animations/tweens/easing/Linear.ts
index e5e4c9c..609a256 100644
--- a/src/animations/tweens/easing/Linear.ts
+++ b/src/animations/tweens/easing/Linear.ts
@@ -7,37 +7,37 @@
 
 module Kiwi.Animations.Tweens.Easing {
 
-    /**
-    *
-    * @class Linear
-    * @namespace Kiwi.Animations.Tweens.Easing
-    *
-    */
-    export class Linear {
-
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} "Linear"
-        * @public
-        */
-        public objType() {
-            return "Linear";
-        }
-
-        /** 
-        * 
-        * @method None
-        * @param {Any} k
-        * @return {Number}
-        * @static
-        */
-        public static None(k) {
-
-            return k;
-
-        }
-
-    }
+	/**
+	*
+	* @class Linear
+	* @namespace Kiwi.Animations.Tweens.Easing
+	*
+	*/
+	export class Linear {
+
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} "Linear"
+		* @public
+		*/
+		public objType() {
+			return "Linear";
+		}
+
+		/** 
+		* 
+		* @method None
+		* @param {Any} k
+		* @return {Number}
+		* @static
+		*/
+		public static None(k) {
+
+			return k;
+
+		}
+
+	}
 
 }
diff --git a/src/animations/tweens/easing/Quadratic.ts b/src/animations/tweens/easing/Quadratic.ts
index d517beb..4ea7f95 100644
--- a/src/animations/tweens/easing/Quadratic.ts
+++ b/src/animations/tweens/easing/Quadratic.ts
@@ -8,68 +8,68 @@
 
 module Kiwi.Animations.Tweens.Easing {
 
-    /**
-    *
-    *
-    * @class Quadratic
-    * @namespace Kiwi.Animations.Tweens.Easing
-    *
-    */
-    export class Quadratic {
+	/**
+	*
+	*
+	* @class Quadratic
+	* @namespace Kiwi.Animations.Tweens.Easing
+	*
+	*/
+	export class Quadratic {
 
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} "Quadratic"
-        * @public
-        */
-        public objType() {
-            return "Quadratic";
-        }
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} "Quadratic"
+		* @public
+		*/
+		public objType() {
+			return "Quadratic";
+		}
 
-        /** 
-        * 
-        * @method In
-        * @param k {Any}
-        * @return {Number}
-        * @static
-        * @public
-        */
-        public static In(k) {
+		/** 
+		* 
+		* @method In
+		* @param k {Any}
+		* @return {Number}
+		* @static
+		* @public
+		*/
+		public static In(k) {
 
-            return k * k;
+			return k * k;
 
-        }
+		}
 
-        /** 
-        * 
-        * @method Out
-        * @param k {Any}
-        * @return {Number}
-        * @static
-        * @public
-        */
-        public static Out(k) {
+		/** 
+		* 
+		* @method Out
+		* @param k {Any}
+		* @return {Number}
+		* @static
+		* @public
+		*/
+		public static Out(k) {
 
-            return k * (2 - k);
+			return k * (2 - k);
 
-        }
+		}
 
-        /** 
-        * 
-        * @method InOut
-        * @param k {Any}
-        * @return {Number}
-        * @static
-        * @public
-        */
-        public static InOut(k) {
+		/** 
+		* 
+		* @method InOut
+		* @param k {Any}
+		* @return {Number}
+		* @static
+		* @public
+		*/
+		public static InOut(k) {
 
-            if ((k *= 2) < 1) return 0.5 * k * k;
-            return -0.5 * (--k * (k - 2) - 1);
+			if ((k *= 2) < 1) return 0.5 * k * k;
+			return -0.5 * (--k * (k - 2) - 1);
 
-        }
+		}
 
-    }
+	}
 
 }
diff --git a/src/animations/tweens/easing/Quartic.ts b/src/animations/tweens/easing/Quartic.ts
index d527cab..4b08498 100644
--- a/src/animations/tweens/easing/Quartic.ts
+++ b/src/animations/tweens/easing/Quartic.ts
@@ -8,67 +8,67 @@
 
 module Kiwi.Animations.Tweens.Easing {
 
-    /**
-    *
-    * @class Quartic
-    * @namespace Kiwi.Animations.Tweens.Easing
-    *
-    */
-    export class Quartic {
+	/**
+	*
+	* @class Quartic
+	* @namespace Kiwi.Animations.Tweens.Easing
+	*
+	*/
+	export class Quartic {
 
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} "Quartic"
-        * @public
-        */
-        public objType() {
-            return "Quartic";
-        }
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} "Quartic"
+		* @public
+		*/
+		public objType() {
+			return "Quartic";
+		}
 
-        /** 
-        * 
-        * @method In
-        * @param k {Any}
-        * @return {String}
-        * @static
-        * @public
-        */
-        public static In(k) {
+		/** 
+		* 
+		* @method In
+		* @param k {Any}
+		* @return {String}
+		* @static
+		* @public
+		*/
+		public static In(k) {
 
-            return k * k * k * k;
+			return k * k * k * k;
 
-        }
+		}
 
-        /** 
-        * 
-        * @method Out
-        * @param k {Any}
-        * @return {String}
-        * @static
-        * @public
-        */
-        public static Out(k) {
+		/** 
+		* 
+		* @method Out
+		* @param k {Any}
+		* @return {String}
+		* @static
+		* @public
+		*/
+		public static Out(k) {
 
-            return 1 - (--k * k * k * k);
+			return 1 - (--k * k * k * k);
 
-        }
+		}
 
-        /** 
-        * 
-        * @method InOut
-        * @param k {Any}
-        * @return {String}
-        * @static
-        * @public
-        */
-        public static InOut(k) {
+		/** 
+		* 
+		* @method InOut
+		* @param k {Any}
+		* @return {String}
+		* @static
+		* @public
+		*/
+		public static InOut(k) {
 
-            if ((k *= 2) < 1) return 0.5 * k * k * k * k;
-            return -0.5 * ((k -= 2) * k * k * k - 2);
+			if ((k *= 2) < 1) return 0.5 * k * k * k * k;
+			return -0.5 * ((k -= 2) * k * k * k - 2);
 
-        }
+		}
 
-    }
+	}
 
 }
diff --git a/src/animations/tweens/easing/Quintic.ts b/src/animations/tweens/easing/Quintic.ts
index 9a9a2f4..afbdae4 100644
--- a/src/animations/tweens/easing/Quintic.ts
+++ b/src/animations/tweens/easing/Quintic.ts
@@ -7,67 +7,67 @@
 
 module Kiwi.Animations.Tweens.Easing {
 
-    /**
-    * 
-    * @class Quintic
-    * @namespace Kiwi.Animations.Tweens.Easing
-    * 
-    */
-    export class Quintic {
+	/**
+	* 
+	* @class Quintic
+	* @namespace Kiwi.Animations.Tweens.Easing
+	* 
+	*/
+	export class Quintic {
 
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} "Quintic"
-        * @public
-        */
-        public objType() {
-            return "Quintic";
-        }
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} "Quintic"
+		* @public
+		*/
+		public objType() {
+			return "Quintic";
+		}
 
-        /** 
-        * 
-        * @method In
-        * @param k {Any}
-        * @return {Number}
-        * @static
-        * @public
-        */
-        public static In(k) {
+		/** 
+		* 
+		* @method In
+		* @param k {Any}
+		* @return {Number}
+		* @static
+		* @public
+		*/
+		public static In(k) {
 
-            return k * k * k * k * k;
+			return k * k * k * k * k;
 
-        }
+		}
 
-        /** 
-        * 
-        * @method Out
-        * @param k {Any}
-        * @return {Number}
-        * @static
-        * @public
-        */
-        public static Out(k) {
+		/** 
+		* 
+		* @method Out
+		* @param k {Any}
+		* @return {Number}
+		* @static
+		* @public
+		*/
+		public static Out(k) {
 
-            return --k * k * k * k * k + 1;
+			return --k * k * k * k * k + 1;
 
-        }
+		}
 
-        /** 
-        * 
-        * @method InOut
-        * @param k {Any}
-        * @return {Number}
-        * @static
-        * @public
-        */
-        public static InOut(k) {
+		/** 
+		* 
+		* @method InOut
+		* @param k {Any}
+		* @return {Number}
+		* @static
+		* @public
+		*/
+		public static InOut(k) {
 
-            if ((k *= 2) < 1) return 0.5 * k * k * k * k * k;
-            return 0.5 * ((k -= 2) * k * k * k * k + 2);
+			if ((k *= 2) < 1) return 0.5 * k * k * k * k * k;
+			return 0.5 * ((k -= 2) * k * k * k * k + 2);
 
-        }
+		}
 
-    }
+	}
 
 }
diff --git a/src/animations/tweens/easing/Sinusoidal.ts b/src/animations/tweens/easing/Sinusoidal.ts
index 4fb0149..4edc68a 100644
--- a/src/animations/tweens/easing/Sinusoidal.ts
+++ b/src/animations/tweens/easing/Sinusoidal.ts
@@ -7,66 +7,66 @@
 
 module Kiwi.Animations.Tweens.Easing {
 
-    /**
-    *
-    * @class Sinusoidal
-    * @namespace Kiwi.Animations.Tweens.Easing
-    *
-    */
-    export class Sinusoidal {
+	/**
+	*
+	* @class Sinusoidal
+	* @namespace Kiwi.Animations.Tweens.Easing
+	*
+	*/
+	export class Sinusoidal {
 
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} "Sinusoidal"
-        * @public
-        */
-        public objType() {
-            return "Sinusoidal";
-        }
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} "Sinusoidal"
+		* @public
+		*/
+		public objType() {
+			return "Sinusoidal";
+		}
 
-        /** 
-        * 
-        * @method In
-        * @param k {Any}
-        * @return {Number}
-        * @static
-        * @public
-        */
-        public static In(k) {
+		/** 
+		* 
+		* @method In
+		* @param k {Any}
+		* @return {Number}
+		* @static
+		* @public
+		*/
+		public static In(k) {
 
-            return 1 - Math.cos(k * Math.PI / 2);
+			return 1 - Math.cos(k * Math.PI / 2);
 
-        }
+		}
 
-        /** 
-        * 
-        * @method Out
-        * @param k {Any}
-        * @return {Number}
-        * @static
-        * @public
-        */
-        public static Out(k) {
+		/** 
+		* 
+		* @method Out
+		* @param k {Any}
+		* @return {Number}
+		* @static
+		* @public
+		*/
+		public static Out(k) {
 
-            return Math.sin(k * Math.PI / 2);
+			return Math.sin(k * Math.PI / 2);
 
-        }
+		}
 
-        /** 
-        * 
-        * @method InOut
-        * @param {Any} k
-        * @return {Number}
-        * @static
-        * @public
-        */
-        public static InOut(k) {
+		/** 
+		* 
+		* @method InOut
+		* @param {Any} k
+		* @return {Number}
+		* @static
+		* @public
+		*/
+		public static InOut(k) {
 
-            return 0.5 * (1 - Math.cos(Math.PI * k));
+			return 0.5 * (1 - Math.cos(Math.PI * k));
 
-        }
+		}
 
-    }
+	}
 
 }
diff --git a/src/components/AnimationManager.ts b/src/components/AnimationManager.ts
index d3e9627..892fd73 100644
--- a/src/components/AnimationManager.ts
+++ b/src/components/AnimationManager.ts
@@ -4,452 +4,450 @@
 * @module Kiwi
 * @submodule Components 
 * @main Components
-*/ 
- 
+*/
+
 module Kiwi.Components {
 
-    /**
-    * The AnimationManager is used to handle the creation and use of spritesheet Animations on a GameObject based on the TextureAtlas it has. 
-    * If the When the AnimationManager is instantiated it will loop through all of the Sequences on the TextureAtlas of the GameObject being used and will create a new Animation for each one.
-    * Now when you create a new Animation that animation will automatically be added as a new Sequence to the corresponding Texture. 
-    * This way you don't need to create new Animations for a each Sprite that use's the same Texture.
-    *
-    * @class AnimationManager
-    * @extends Kiwi.Component
-    * @namespace Kiwi.Components
-    * @constructor
-    * @param entity {Kiwi.Entity} The entity that this animation component belongs to.
-    * @param [inheritSequences=true] {Boolean} If a new Animation should be created for each Sequence on the Entities TextureAtlas it is a part of or not. 
-    * @return {Kiwi.Components.AnimationManager}
-    */
-    export class AnimationManager extends Component {
-         
-        constructor(entity: Kiwi.Entity, inheritSequences: boolean = true) {
-            super(entity, 'Animation');
-
-            //Get the entity and the animation.
-            this.entity = entity;
-            this._atlas = this.entity.atlas; 
-            this._animations = {};
-
-            //Create all of the default animations.
-            if (inheritSequences == true) {
-
-                for (var i = 0; i < this._atlas.sequences.length; i++) {
-                    this.createFromSequence(this._atlas.sequences[i], false);
-                }
-
-            }
-
-            //If a default animation already exists
-            if (this._animations['default']) {
-                this.currentAnimation = this._animations['default'];
-
-            //Otherwise create one.
-            } else {
-                var defaultCells = [];
-                for (var i = 0; i < this._atlas.cells.length; i++) {
-                    defaultCells.push(i);
-                }
-                this.currentAnimation = this.add('default', defaultCells, 0.1, true, false);
-            }
-
-            //Signals
-            this.onChange = new Kiwi.Signal;
-            this.onPlay = new Kiwi.Signal;
-            this.onStop = new Kiwi.Signal;
-            this.onUpdate = new Kiwi.Signal;
-        }
-
-        /**
-        * Dispatches callbacks each time an animation is told to play through this AnimationManager.
-        * Functions dispatched from this signal have ONE Parameter.
-        * One - The Animation object of that is now playing.
-        * @property onPlay
-        * @type Kiwi.Signal
-        * @public
-        */
-        public onPlay: Kiwi.Signal;
-        
-        /**
-        * Dispatches callbacks each time an animation stops. 
-        * Functions dispatched from this signal have ONE parameter.
-        * One - The current animation.
-        * @property onStop
-        * @type Kiwi.Signal
-        * @public
-        */
-        public onStop: Kiwi.Signal;
-
-        /**
-        * Dispatches callbacks each time the cell of the Sprite this AnimationManager belongs to updates/changes.
-        * Note: This method will be dispatching events EVERY time the cell changes, so this will include when changing/switching animations.
-        * @property onUpdate
-        * @type Kiwi.Signal
-        * @public
-        */
-        public onUpdate: Kiwi.Signal
-
-        /**
-        * Dispatches callbacks each time the current animation is switched NOT when the cells of a animation change.
-        * Function's dispatched from this event have TWO parameters, 
-        * One - Name of the animation switched to.
-        * Two - The Animation object that is now the current.
-        * @property onChange
-        * @type Kiwi.Signal
-        * @public
-        */
-        public onChange: Kiwi.Signal;
-
-        /**
-        * The entity that this animation belongs to and thus is effecting.
-        * @property entity
-        * @type Kiwi.Entity
-        * @public
-        */
-        public entity: Kiwi.Entity;
-
-        /**
-        * The texture atlas that this animation is taking effect on.
-        * The value of this should be the same as the Entity.
-        * @property _atlas
-        * @type Kiwi.Textures.TextureAtlas
-        * @private
-        */
-        private _atlas: Kiwi.Textures.TextureAtlas;
-        
-        /**
-        * A Object containing all of the animations that are avaiable to be used.
-        * @property _animations
-        * @type Object
-        * @private
-        */
-        private _animations: {};
-
-        /**
-        * A reference to the animation that is currently being played.
-        * @property currentAnimation
-        * @type Kiwi.Animations.Animation
-        * @public
-        */
-        public currentAnimation: Kiwi.Animations.Animation = null;
-        
-        /**
-        * Returns a boolean indicating whether or not the current animation is playing. This is READ ONLY.
-        * @property isPlaying
-        * @type boolean
-        * @public
-        */
-        public get isPlaying(): boolean {
-            return this.currentAnimation.isPlaying;
-        }
-        
-        /**
-        * Returns a string indicating the type of object that this is.
-        * @method objType
-        * @return {String} "AnimationManager"
-        * @public
-        */
-        public objType() {
-            return "AnimationManager";
-        }
-
-        /**
-        * Creates a new Animation (by creating a Sequence) that can then be played on this AnimationManager. 
-        * If you pass to this the name of a Animation that already exists, then the previous Animation will be overridden by this new one. 
-        * Note: If the Animation you have overridden was the currentAnimation, then the previous Animation will keep playing until a different Animation is switched to.
-        * By default new Animation Sequences are also added to the TextureAtlas, which can then be inherited.
-        * Returns the Animation that was created.
-        *
-        * @method add
-        * @param name {string} The name of the animation that is to be created. 
-        * @param cells {Array} An array of numbers, which are reference to each cell that is to be played in the Animation in order. 
-        * @param speed {number} The amount of time that each cell in the Animation should stay on screen for. In seconds.
-        * @param [loop=false] {boolean} If when the Animation reaches the last frame, it should go back to the start again.
-        * @param [play=false] {boolean} If once created the animation should played right away.
-        * @param [addToAtlas=true] {boolean} If the new Sequence created should be added to the TextureAtlas or not.
-        * @return {Kiwi.Animations.Animation} The Animation that was created.
-        * @public
-        */
-        public add(name: string, cells: number[], speed: number, loop: boolean= false, play: boolean= false, addToAtlas:boolean=true): Kiwi.Animations.Animation {
-            var newSequence = new Kiwi.Animations.Sequence(name, cells, speed, loop);
-            if(addToAtlas == true) this._atlas.sequences.push(newSequence);
-            
-            return this.createFromSequence(newSequence, play);
-        }
-
-        /**
-        * Creates a new Animation based on a Sequence that is passed. 
-        * If you pass to this the name of a Animation that already exists, then the previous Animation will be overridden by this new one. 
-        * Note: If the Animation you have overridden was the currentAnimation, then the previous Animation will keep playing until a different Animation is switched to.
-        * Returns the Animation that was created.
-        *
-        * @method createFromSequence
-        * @param sequence {Kiwi.Sequence} The sequence that the Animation is based on.
-        * @param [play=false] {boolean} If the Animation should played once it has been created
-        * @return {Kiwi.Animations.Animation} The Animation that was created.
-        * @public
-        */
-        public createFromSequence(sequence: Kiwi.Animations.Sequence, play: boolean= false): Kiwi.Animations.Animation {
-            this._animations[sequence.name] = new Kiwi.Animations.Animation(sequence.name, sequence, null, this);
-
-            if (play) this.play(sequence.name);
-            
-            return this._animations[sequence.name];
-        }
-
-        /**
-        * Plays either the current animation or the name of the animation that you pass.
-        * 
-        * @method play
-        * @param [name] {String} The name of the animation that you want to play. If not passed it plays the current animation.
-        * @param [resetTime=true] {Boolean} When set to false, this will prevent a new Animation from playing if it is already the currentAnimation that is already playing.
-        * @return {Kiwi.Animations.Animation} Returns the current Animation that is now playing.
-        * @public
-        */
-        public play(name: string = this.currentAnimation.name, resetTime: boolean = true): Kiwi.Animations.Animation {
-
-            //If the current animation playing 
-            if (resetTime == false && this.currentAnimation.name === name && this.currentAnimation.isPlaying == true) {
-                return this.currentAnimation;
-
-            } else {
-                return this._play(name);
-            }
-
-        }
-        
-        /**
-        * Plays an Animation at a particular frameIndex.
-        * Note: The frameIndex is a particular index of a cell in the Sequence of the Animation you would like to play. 
-        * Example: If you had a Animation with a Sequence [0, 1, 2, 3] and you told it to play at index '2', then the cell that it would be at is '3'.
-        * 
-        * @method playAt
-        * @param index {Number} The index of the frame in the Sequence that you would like to play.
-        * @param [name] {String} The name of the animation that you want to play. If not passed, it attempts to play it on the current animation.
-        * @return {Kiwi.Animations.Animation} Returns the current Animation that is now playing.
-        * @public
-        */
-        public playAt(index: number, name: string = this.currentAnimation.name): Kiwi.Animations.Animation {
-            
-            return this._play(name, index);
-        } 
-
-        /**
-        * An internal method used to actually play a Animation at a Index.
-        * 
-        * @method _play
-        * @param name {string} The name of the animation that is to be switched to.
-        * @param [index=null] {number} The index of the frame in the Sequence that is to play. If null, then it restarts the animation at the cell it currently is at.
-        * @return {Kiwi.Animations.Animation} Returns the current Animation that is now playing.
-        * @private
-        */
-        private _play(name: string, index: number=null): Kiwi.Animations.Animation {
-            
-            this._setCurrentAnimation(name); 
-            
-            if (index !== null)
-                this.currentAnimation.playAt(index);
-            else
-                this.currentAnimation.play();
-            
-            this.onPlay.dispatch(this.currentAnimation);
-            this.updateCellIndex();
-            return this.currentAnimation;
-        }
-
-        /**
-        * Stops the current animation from playing.
-        *
-        * @method stop
-        * @public
-        */
-        public stop() {
-            if (this.isPlaying === true) {
-                this.currentAnimation.stop();
-                this.onStop.dispatch(this.currentAnimation);
-            }
-        }
-
-        /**
-        * Pauses the current animation.
-        * @method pause
-        * @public
-        */ 
-        public pause() {
-            this.currentAnimation.pause();
-        }
-
-        /**
-        * Resumes the current animation.
-        * The animation should have already been paused.
-        *
-        * @method resume
-        * @public
-        */
-        public resume() {
-            this.currentAnimation.resume();
-        }
-
-        /**
-        * Either switches to a particular animation OR a particular frame in the current animation depending on if you pass the name of an animation that exists on this Manager (as a string) or a number refering to a frame index on the Animation. 
-        * When you switch to a particular animation then 
-        * You can also force the animation to play or to stop by passing a boolean in. But if left as null, the state of the Animation will based off what is currently happening.
-        * So if the animation is currently 'playing' then once switched to the animation will play. If not currently playing it will switch to and stop.
-        * If the previous animation played is non-looping and has reached its final frame, it is no longer considered playing, and as such, switching to another animation will not play unless the argument to the play parameter is true.
-        *
-        * @method switchTo
-        * @param val {string|number}
-        * @param [play=null] {boolean} Force the animation to play or stop. If null the animation base's it off what is currently happening.
-        * @public
-        */
-        public switchTo(val: any, play:boolean=null) { 
-            var switched = false;
-            switch (typeof val) {
-                case "string":
-                    if (this.currentAnimation.name !== val) {
-                        this._setCurrentAnimation(val);
-                        switched = true;
-                    }
-                    break;
-                case "number":
-                    this.currentAnimation.frameIndex = val;
-                    switched = true;
-                    break;
-            }
-            
-            //Play if the dev forced it to OR if the animation was already playing
-            if (play || play === null && this.isPlaying && switched) this.play();
-            if (play == false && this.isPlaying) this.stop();
-
-            this.updateCellIndex();
-        }
-
-        /**
-        * Makes the current animation go to the next frame. If the animation is at the end of the sequence it then goes back to the start.
-        * @method nextFrame
-        * @public
-        */
-        public nextFrame() {
-            this.currentAnimation.nextFrame();
-            this.updateCellIndex();
-        }
-        
-        /**
-        * Makes the current animation go to the prev frame. If the animation is at the start, the animation will go the end of the sequence.
-        * @method prevFrame
-        * @public
-        */
-        public prevFrame() {
-            this.currentAnimation.prevFrame();
-            this.updateCellIndex();
-        }
-
-        /**
-        * Internal method that sets the current animation to a Animation passed.
-        *
-        * @method _setCurrentAnimation
-        * @param name {string} Name of the Animation that is to be switched to.
-        * @private
-        */
-        private _setCurrentAnimation(name: string) {
-            if (this.currentAnimation.name !== name) {
-                if (this.currentAnimation !== null) this.currentAnimation.stop();
-
-                if (this._animations[name]) {
-                    this.currentAnimation = this._animations[name];
-                    this.onChange.dispatch(name, this.currentAnimation);
-                }
-            }
-        }
-
-        /**
-        * The update loop for this component. 
-        * Only updates the currentAnimation and only if it is playing.
-        *
-        * @method update 
-        * @public
-        */
-        public update() { 
-            if (this.currentAnimation) {
-                this.currentAnimation.update();
-            }
-        }
-        
-        /**
-        * Gets the cell that the current Animation is current at. This is READ ONLY.
-        * @property currentCell
-        * @type number
-        * @public
-        */
-        public get currentCell():number {
-            return this.currentAnimation.currentCell;
-        }
-
-        /**
-        * Gets the current frame index of the cell in the Sequence that is currently playing. This is READ ONLY.
-        * @property frameIndex 
-        * @type number
-        * @public
-        */
-        public get frameIndex():number {
-            return this.currentAnimation.frameIndex;
-        }
-
-        /**
-        * Returns the length (Number of cells) of the current Animation that is playing. This is READ ONLY.
-        * @property length
-        * @type number
-        * @public
-        */
-        public get length(): number {
-            return this.currentAnimation.length;
-        }
-
-        /**
-        * Returns a Animation that is on this AnimationComponent
-        * Does not check to see if that Animation exists or not.
-        * 
-        * @method getAnimation
-        * @param name {string} The name of the Animation you would like to get.
-        * @return {Kiwi.Animations.Animation} The Animation that is found. Will be 'undefined' if a Animation with that name did not exist.
-        * @public
-        */
-        public getAnimation(name: string): Kiwi.Animations.Animation {
-            return this._animations[name];
-        }
-        
-        /**
-        * An internal method that is used to update the cell index of an entity when an animation says it needs to update.
-        * @method updateCellIndex
-        * @protected
-        */
-        public updateCellIndex() {
-            if (typeof this.currentAnimation !== "undefined") {
-                this.entity.cellIndex = this.currentAnimation.currentCell;
-                this.onUpdate.dispatch(this.currentAnimation);
-            }
-        }
-        
-        /**
-        * Destroys the animation component and runs the destroy method on all of the anims that it has.
-        * @method destroy
-        * @public
-        */
-        public destroy() {
-            super.destroy();
-
-            for (var key in this._animations) {
-                this._animations[key].destroy();
-                delete this._animations[key];
-            }
-            delete this._animations;
-            delete this.currentAnimation;
-            delete this._atlas;
-        }
-
-    }
+	/**
+	* The AnimationManager is used to handle the creation and use of spritesheet Animations on a GameObject based on the TextureAtlas it has. 
+	* If the When the AnimationManager is instantiated it will loop through all of the Sequences on the TextureAtlas of the GameObject being used and will create a new Animation for each one.
+	* Now when you create a new Animation that animation will automatically be added as a new Sequence to the corresponding Texture. 
+	* This way you don't need to create new Animations for a each Sprite that use's the same Texture.
+	*
+	* @class AnimationManager
+	* @extends Kiwi.Component
+	* @namespace Kiwi.Components
+	* @constructor
+	* @param entity {Kiwi.Entity} The entity that this animation component belongs to.
+	* @param [inheritSequences=true] {Boolean} If a new Animation should be created for each Sequence on the Entities TextureAtlas it is a part of or not. 
+	* @return {Kiwi.Components.AnimationManager}
+	*/
+	export class AnimationManager extends Component {
+
+		constructor(entity: Kiwi.Entity, inheritSequences: boolean = true) {
+			super(entity, 'Animation');
+
+			//Get the entity and the animation.
+			this.entity = entity;
+			this._atlas = this.entity.atlas; 
+			this._animations = {};
+
+			//Create all of the default animations.
+			if (inheritSequences == true) {
+
+				for (var i = 0; i < this._atlas.sequences.length; i++) {
+					this.createFromSequence(this._atlas.sequences[i], false);
+				}
+
+			}
+
+			//If a default animation already exists
+			if (this._animations['default']) {
+				this.currentAnimation = this._animations['default'];
+
+			//Otherwise create one.
+			} else {
+				var defaultCells = [];
+				for (var i = 0; i < this._atlas.cells.length; i++) {
+					defaultCells.push(i);
+				}
+				this.currentAnimation = this.add('default', defaultCells, 0.1, true, false);
+			}
+
+			//Signals
+			this.onChange = new Kiwi.Signal;
+			this.onPlay = new Kiwi.Signal;
+			this.onStop = new Kiwi.Signal;
+			this.onUpdate = new Kiwi.Signal;
+		}
+
+		/**
+		* Dispatches callbacks each time an animation is told to play through this AnimationManager.
+		* Functions dispatched from this signal have ONE Parameter.
+		* One - The Animation object of that is now playing.
+		* @property onPlay
+		* @type Kiwi.Signal
+		* @public
+		*/
+		public onPlay: Kiwi.Signal;
+
+		/**
+		* Dispatches callbacks each time an animation stops. 
+		* Functions dispatched from this signal have ONE parameter.
+		* One - The current animation.
+		* @property onStop
+		* @type Kiwi.Signal
+		* @public
+		*/
+		public onStop: Kiwi.Signal;
+
+		/**
+		* Dispatches callbacks each time the cell of the Sprite this AnimationManager belongs to updates/changes.
+		* Note: This method will be dispatching events EVERY time the cell changes, so this will include when changing/switching animations.
+		* @property onUpdate
+		* @type Kiwi.Signal
+		* @public
+		*/
+		public onUpdate: Kiwi.Signal
+
+		/**
+		* Dispatches callbacks each time the current animation is switched NOT when the cells of a animation change.
+		* Function's dispatched from this event have TWO parameters, 
+		* One - Name of the animation switched to.
+		* Two - The Animation object that is now the current.
+		* @property onChange
+		* @type Kiwi.Signal
+		* @public
+		*/
+		public onChange: Kiwi.Signal;
+
+		/**
+		* The entity that this animation belongs to and thus is effecting.
+		* @property entity
+		* @type Kiwi.Entity
+		* @public
+		*/
+		public entity: Kiwi.Entity;
+
+		/**
+		* The texture atlas that this animation is taking effect on.
+		* The value of this should be the same as the Entity.
+		* @property _atlas
+		* @type Kiwi.Textures.TextureAtlas
+		* @private
+		*/
+		private _atlas: Kiwi.Textures.TextureAtlas;
+
+		/**
+		* A Object containing all of the animations that are avaiable to be used.
+		* @property _animations
+		* @type Object
+		* @private
+		*/
+		private _animations: {};
+
+		/**
+		* A reference to the animation that is currently being played.
+		* @property currentAnimation
+		* @type Kiwi.Animations.Animation
+		* @public
+		*/
+		public currentAnimation: Kiwi.Animations.Animation = null;
+
+		/**
+		* Returns a boolean indicating whether or not the current animation is playing. This is READ ONLY.
+		* @property isPlaying
+		* @type boolean
+		* @public
+		*/
+		public get isPlaying(): boolean {
+			return this.currentAnimation.isPlaying;
+		}
+
+		/**
+		* Returns a string indicating the type of object that this is.
+		* @method objType
+		* @return {String} "AnimationManager"
+		* @public
+		*/
+		public objType() {
+			return "AnimationManager";
+		}
+
+		/**
+		* Creates a new Animation (by creating a Sequence) that can then be played on this AnimationManager. 
+		* If you pass to this the name of a Animation that already exists, then the previous Animation will be overridden by this new one. 
+		* Note: If the Animation you have overridden was the currentAnimation, then the previous Animation will keep playing until a different Animation is switched to.
+		* By default new Animation Sequences are also added to the TextureAtlas, which can then be inherited.
+		* Returns the Animation that was created.
+		*
+		* @method add
+		* @param name {string} The name of the animation that is to be created. 
+		* @param cells {Array} An array of numbers, which are reference to each cell that is to be played in the Animation in order. 
+		* @param speed {number} The amount of time that each cell in the Animation should stay on screen for. In seconds.
+		* @param [loop=false] {boolean} If when the Animation reaches the last frame, it should go back to the start again.
+		* @param [play=false] {boolean} If once created the animation should played right away.
+		* @param [addToAtlas=true] {boolean} If the new Sequence created should be added to the TextureAtlas or not.
+		* @return {Kiwi.Animations.Animation} The Animation that was created.
+		* @public
+		*/
+		public add(name: string, cells: number[], speed: number, loop: boolean= false, play: boolean= false, addToAtlas:boolean=true): Kiwi.Animations.Animation {
+			var newSequence = new Kiwi.Animations.Sequence(name, cells, speed, loop);
+			if(addToAtlas == true) this._atlas.sequences.push(newSequence);
+			
+			return this.createFromSequence(newSequence, play);
+		}
+
+		/**
+		* Creates a new Animation based on a Sequence that is passed. 
+		* If you pass to this the name of a Animation that already exists, then the previous Animation will be overridden by this new one. 
+		* Note: If the Animation you have overridden was the currentAnimation, then the previous Animation will keep playing until a different Animation is switched to.
+		* Returns the Animation that was created.
+		*
+		* @method createFromSequence
+		* @param sequence {Kiwi.Sequence} The sequence that the Animation is based on.
+		* @param [play=false] {boolean} If the Animation should played once it has been created
+		* @return {Kiwi.Animations.Animation} The Animation that was created.
+		* @public
+		*/
+		public createFromSequence(sequence: Kiwi.Animations.Sequence, play: boolean= false): Kiwi.Animations.Animation {
+			this._animations[sequence.name] = new Kiwi.Animations.Animation(sequence.name, sequence, null, this);
+
+			if (play) this.play(sequence.name);
+			
+			return this._animations[sequence.name];
+		}
+
+		/**
+		* Plays either the current animation or the name of the animation that you pass.
+		* 
+		* @method play
+		* @param [name] {String} The name of the animation that you want to play. If not passed it plays the current animation.
+		* @param [resetTime=true] {Boolean} When set to false, this will prevent a new Animation from playing if it is already the currentAnimation that is already playing.
+		* @return {Kiwi.Animations.Animation} Returns the current Animation that is now playing.
+		* @public
+		*/
+		public play(name: string = this.currentAnimation.name, resetTime: boolean = true): Kiwi.Animations.Animation {
+
+			//If the current animation playing 
+			if (resetTime == false && this.currentAnimation.name === name && this.currentAnimation.isPlaying == true) {
+				return this.currentAnimation;
+
+			} else {
+				return this._play(name);
+			}
+
+		}
+
+		/**
+		* Plays an Animation at a particular frameIndex.
+		* Note: The frameIndex is a particular index of a cell in the Sequence of the Animation you would like to play. 
+		* Example: If you had a Animation with a Sequence [0, 1, 2, 3] and you told it to play at index '2', then the cell that it would be at is '3'.
+		* 
+		* @method playAt
+		* @param index {Number} The index of the frame in the Sequence that you would like to play.
+		* @param [name] {String} The name of the animation that you want to play. If not passed, it attempts to play it on the current animation.
+		* @return {Kiwi.Animations.Animation} Returns the current Animation that is now playing.
+		* @public
+		*/
+		public playAt(index: number, name: string = this.currentAnimation.name): Kiwi.Animations.Animation {
+			
+			return this._play(name, index);
+		}
+
+		/**
+		* An internal method used to actually play a Animation at a Index.
+		* 
+		* @method _play
+		* @param name {string} The name of the animation that is to be switched to.
+		* @param [index=null] {number} The index of the frame in the Sequence that is to play. If null, then it restarts the animation at the cell it currently is at.
+		* @return {Kiwi.Animations.Animation} Returns the current Animation that is now playing.
+		* @private
+		*/
+		private _play(name: string, index: number=null): Kiwi.Animations.Animation {
+
+			this._setCurrentAnimation(name); 
+
+			if (index !== null)
+				this.currentAnimation.playAt(index);
+			else
+				this.currentAnimation.play();
+
+			this.onPlay.dispatch(this.currentAnimation);
+			this.updateCellIndex();
+			return this.currentAnimation;
+		}
+
+		/**
+		* Stops the current animation from playing.
+		*
+		* @method stop
+		* @public
+		*/
+		public stop() {
+			if (this.isPlaying === true) {
+				this.currentAnimation.stop();
+				this.onStop.dispatch(this.currentAnimation);
+			}
+		}
+
+		/**
+		* Pauses the current animation.
+		* @method pause
+		* @public
+		*/
+		public pause() {
+			this.currentAnimation.pause();
+		}
+
+		/**
+		* Resumes the current animation.
+		* The animation should have already been paused.
+		*
+		* @method resume
+		* @public
+		*/
+		public resume() {
+			this.currentAnimation.resume();
+		}
+
+		/**
+		* Either switches to a particular animation OR a particular frame in the current animation depending on if you pass the name of an animation that exists on this Manager (as a string) or a number refering to a frame index on the Animation. 
+		* When you switch to a particular animation then 
+		* You can also force the animation to play or to stop by passing a boolean in. But if left as null, the state of the Animation will based off what is currently happening.
+		* So if the animation is currently 'playing' then once switched to the animation will play. If not currently playing it will switch to and stop.
+		* If the previous animation played is non-looping and has reached its final frame, it is no longer considered playing, and as such, switching to another animation will not play unless the argument to the play parameter is true.
+		*
+		* @method switchTo
+		* @param val {string|number}
+		* @param [play=null] {boolean} Force the animation to play or stop. If null the animation base's it off what is currently happening.
+		* @public
+		*/
+		public switchTo(val: any, play:boolean=null) { 
+			var switched = false;
+			switch (typeof val) {
+				case "string":
+					if (this.currentAnimation.name !== val) {
+						this._setCurrentAnimation(val);
+						switched = true;
+					}
+					break;
+				case "number":
+					this.currentAnimation.frameIndex = val;
+					switched = true;
+					break;
+			}
+			
+			//Play if the dev forced it to OR if the animation was already playing
+			if (play || play === null && this.isPlaying && switched) this.play();
+			if (play == false && this.isPlaying) this.stop();
+
+			this.updateCellIndex();
+		}
+
+		/**
+		* Makes the current animation go to the next frame. If the animation is at the end of the sequence it then goes back to the start.
+		* @method nextFrame
+		* @public
+		*/
+		public nextFrame() {
+			this.currentAnimation.nextFrame();
+			this.updateCellIndex();
+		}
+
+		/**
+		* Makes the current animation go to the prev frame. If the animation is at the start, the animation will go the end of the sequence.
+		* @method prevFrame
+		* @public
+		*/
+		public prevFrame() {
+			this.currentAnimation.prevFrame();
+			this.updateCellIndex();
+		}
+
+		/**
+		* Internal method that sets the current animation to a Animation passed.
+		*
+		* @method _setCurrentAnimation
+		* @param name {string} Name of the Animation that is to be switched to.
+		* @private
+		*/
+		private _setCurrentAnimation(name: string) {
+			if (this.currentAnimation.name !== name) {
+				if (this.currentAnimation !== null) this.currentAnimation.stop();
+
+				if (this._animations[name]) {
+					this.currentAnimation = this._animations[name];
+					this.onChange.dispatch(name, this.currentAnimation);
+				}
+			}
+		}
+
+		/**
+		* The update loop for this component. 
+		* Only updates the currentAnimation and only if it is playing.
+		*
+		* @method update 
+		* @public
+		*/
+		public update() { 
+			if (this.currentAnimation) {
+				this.currentAnimation.update();
+			}
+		}
+
+		/**
+		* Gets the cell that the current Animation is current at. This is READ ONLY.
+		* @property currentCell
+		* @type number
+		* @public
+		*/
+		public get currentCell():number {
+			return this.currentAnimation.currentCell;
+		}
+
+		/**
+		* Gets the current frame index of the cell in the Sequence that is currently playing. This is READ ONLY.
+		* @property frameIndex 
+		* @type number
+		* @public
+		*/
+		public get frameIndex():number {
+			return this.currentAnimation.frameIndex;
+		}
+
+		/**
+		* Returns the length (Number of cells) of the current Animation that is playing. This is READ ONLY.
+		* @property length
+		* @type number
+		* @public
+		*/
+		public get length(): number {
+			return this.currentAnimation.length;
+		}
+
+		/**
+		* Returns a Animation that is on this AnimationComponent
+		* Does not check to see if that Animation exists or not.
+		* 
+		* @method getAnimation
+		* @param name {string} The name of the Animation you would like to get.
+		* @return {Kiwi.Animations.Animation} The Animation that is found. Will be 'undefined' if a Animation with that name did not exist.
+		* @public
+		*/
+		public getAnimation(name: string): Kiwi.Animations.Animation {
+			return this._animations[name];
+		}
+
+		/**
+		* An internal method that is used to update the cell index of an entity when an animation says it needs to update.
+		* @method updateCellIndex
+		* @protected
+		*/
+		public updateCellIndex() {
+			if (typeof this.currentAnimation !== "undefined") {
+				this.entity.cellIndex = this.currentAnimation.currentCell;
+				this.onUpdate.dispatch(this.currentAnimation);
+			}
+		}
+
+		/**
+		* Destroys the animation component and runs the destroy method on all of the anims that it has.
+		* @method destroy
+		* @public
+		*/
+		public destroy() {
+			super.destroy();
+
+			for (var key in this._animations) {
+				this._animations[key].destroy();
+				delete this._animations[key];
+			}
+			delete this._animations;
+			delete this.currentAnimation;
+			delete this._atlas;
+		}
+
+	}
 
 }
-
-
diff --git a/src/components/ArcadePhysics.ts b/src/components/ArcadePhysics.ts
index c903037..574fc73 100644
--- a/src/components/ArcadePhysics.ts
+++ b/src/components/ArcadePhysics.ts
@@ -3,1402 +3,1399 @@
 * @module Kiwi
 * @submodule Components 
 * 
-*/ 
+*/
 
 module Kiwi.Components {
-     
-    /**
-    * Arcade Physics is an Optional Component that can be used when you are wanting to do basic physics collisions. 
-    * These have been ported from Flixel, so most function operate identically to the original flixel functions, though some
-    * have been split into multiple functions. Generally where functions originally accepted
-    * either groups or gameobjects within the same argument, the ported functions one or the other.
-    * http://www.flixel.org/
-    * http://www.adamatomic.com/
-    *
-    * @class ArcadePhysics
-    * @constructor
-    * @namespace Kiwi.Components
-    * @param entity {Kiwi.Entity} The Entity that this ArcadePhysics should be used on.
-    * @param box {Kiwi.Components.Box} The box component that holds the hitbox that should be used when resolving and calculating collisions.
-    * @return {Kiwi.Components.ArcadePhysics}
-    * @extends Kiwi.Component
-    *
-    * @author Adam 'Atomic' Saltsman, Flixel
-    *
-    */
-    export class ArcadePhysics extends Kiwi.Component {
-
-        constructor(entity:Kiwi.Entity, box?: Kiwi.Components.Box) {
-            super(entity,'ArcadePhysics');
-
-            this.parent = entity;
-            this.box = box;
-            this.transform = this.parent.transform;
-
-            this.last = new Kiwi.Geom.Point(this.transform.worldX, this.transform.worldY);
-            this.mass = 1.0;
-            this.elasticity = 0.0;
-
-            this.immovable = false;
-            this.moves = true;
-
-            this.touching = ArcadePhysics.NONE;
-            this.wasTouching = ArcadePhysics.NONE;
-            this.allowCollisions = ArcadePhysics.ANY;
-
-            this.velocity = new Kiwi.Geom.Point();
-            this.acceleration = new Kiwi.Geom.Point();
-            this.drag = new Kiwi.Geom.Point();
-            this.maxVelocity = new Kiwi.Geom.Point(10000, 10000);
-
-            this.angularVelocity = 0;
-            this.angularAcceleration = 0;
-            this.angularDrag = 0;
-            this.maxAngular = 10000;
-        }
-
-
-        /**
-        * The transform component of the entity that the ArcadePhysics is a part of.
-        * @property transform
-        * @type Kiwi.Geom.Transform
-        * @public
-        */
-        public transform: Kiwi.Geom.Transform;
-
-
-        /**
-        * The bounding box component that the collisions are going to be based off.
-        * You can modify the 'hitbox' of that component to modify the collision area.
-        *
-        * @property box
-        * @type Kiwi.Components.Box
-        * @public
-        */
-        public box: Kiwi.Components.Box;
-
-
-        /**
+
+	/**
+	* Arcade Physics is an Optional Component that can be used when you are wanting to do basic physics collisions. 
+	* These have been ported from Flixel, so most function operate identically to the original flixel functions, though some
+	* have been split into multiple functions. Generally where functions originally accepted
+	* either groups or gameobjects within the same argument, the ported functions one or the other.
+	* http://www.flixel.org/
+	* http://www.adamatomic.com/
+	*
+	* @class ArcadePhysics
+	* @constructor
+	* @namespace Kiwi.Components
+	* @param entity {Kiwi.Entity} The Entity that this ArcadePhysics should be used on.
+	* @param box {Kiwi.Components.Box} The box component that holds the hitbox that should be used when resolving and calculating collisions.
+	* @return {Kiwi.Components.ArcadePhysics}
+	* @extends Kiwi.Component
+	*
+	* @author Adam 'Atomic' Saltsman, Flixel
+	*
+	*/
+	export class ArcadePhysics extends Kiwi.Component {
+
+		constructor(entity:Kiwi.Entity, box?: Kiwi.Components.Box) {
+			super(entity,'ArcadePhysics');
+
+			this.parent = entity;
+			this.box = box;
+			this.transform = this.parent.transform;
+
+			this.last = new Kiwi.Geom.Point(this.transform.worldX, this.transform.worldY);
+			this.mass = 1.0;
+			this.elasticity = 0.0;
+
+			this.immovable = false;
+			this.moves = true;
+
+			this.touching = ArcadePhysics.NONE;
+			this.wasTouching = ArcadePhysics.NONE;
+			this.allowCollisions = ArcadePhysics.ANY;
+
+			this.velocity = new Kiwi.Geom.Point();
+			this.acceleration = new Kiwi.Geom.Point();
+			this.drag = new Kiwi.Geom.Point();
+			this.maxVelocity = new Kiwi.Geom.Point(10000, 10000);
+
+			this.angularVelocity = 0;
+			this.angularAcceleration = 0;
+			this.angularDrag = 0;
+			this.maxAngular = 10000;
+		}
+
+
+		/**
+		* The transform component of the entity that the ArcadePhysics is a part of.
+		* @property transform
+		* @type Kiwi.Geom.Transform
+		* @public
+		*/
+		public transform: Kiwi.Geom.Transform;
+
+
+		/**
+		* The bounding box component that the collisions are going to be based off.
+		* You can modify the 'hitbox' of that component to modify the collision area.
+		*
+		* @property box
+		* @type Kiwi.Components.Box
+		* @public
+		*/
+		public box: Kiwi.Components.Box;
+
+
+		/**
 		* Whether an object will move/alter position after a collision.
-        * @property immovable
-        * @type boolean
-        * @public
+		* @property immovable
+		* @type boolean
+		* @public
 		*/
-        public immovable: boolean;
+		public immovable: boolean;
 
 
-        /**
-        * The basic speed of this object.
-        * You can modify the values contained inside this Object to change the speed.
-        *
-        * @property velocity
-        * @type Kiwi.Geom.Point
-        * @public
-        */
-        public velocity: Kiwi.Geom.Point;
+		/**
+		* The basic speed of this object.
+		* You can modify the values contained inside this Object to change the speed.
+		*
+		* @property velocity
+		* @type Kiwi.Geom.Point
+		* @public
+		*/
+		public velocity: Kiwi.Geom.Point;
 
 
-        /**
+		/**
 		* The virtual mass of the object. Default value is 1.
 		* Currently only used with <code>elasticity</code> during collision resolution.
 		* Change at your own risk; effects seem crazy unpredictable so far!
-        * @property mass
-        * @type number
-        * @public
-		*/
-        public mass: number;
-        
-
-        /**
-        * The bounciness of this object.  Only affects collisions.  Default value is 0, or "not bouncy at all."
-        * @property elasticity
-        * @type number
-        * @public
-        */
-        public elasticity: number;
-
-
-        /**
-        * How fast the speed of this object is changing.
-        * Useful for smooth movement and gravity.
-        *
-        * @property acceleration
-        * @type Kiwi.Geom.Point
-        * @public
-        */
-        public acceleration: Kiwi.Geom.Point;
-
-
-        /**
-        * This isn't drag exactly, more like deceleration that is only applied
-        * when acceleration is not affecting the sprite.
-        * @property drag
-        * @type Kiwi.Geom.Point
-        * @public
-        */
-        public drag: Kiwi.Geom.Point;
-
-
-        /**
-        * If you are using <code>acceleration</code>, you can use <code>maxVelocity</code> with it
-        * to cap the speed automatically (very useful!).
-        * @property maxVelocity
-        * @type Kiwi.Geom.Point
-        * @public
-        */
-        public maxVelocity: Kiwi.Geom.Point;
-
-
-        /**
+		* @property mass
+		* @type number
+		* @public
+		*/
+		public mass: number;
+
+
+		/**
+		* The bounciness of this object.  Only affects collisions.  Default value is 0, or "not bouncy at all."
+		* @property elasticity
+		* @type number
+		* @public
+		*/
+		public elasticity: number;
+
+
+		/**
+		* How fast the speed of this object is changing.
+		* Useful for smooth movement and gravity.
+		*
+		* @property acceleration
+		* @type Kiwi.Geom.Point
+		* @public
+		*/
+		public acceleration: Kiwi.Geom.Point;
+
+
+		/**
+		* This isn't drag exactly, more like deceleration that is only applied
+		* when acceleration is not affecting the sprite.
+		* @property drag
+		* @type Kiwi.Geom.Point
+		* @public
+		*/
+		public drag: Kiwi.Geom.Point;
+
+
+		/**
+		* If you are using <code>acceleration</code>, you can use <code>maxVelocity</code> with it
+		* to cap the speed automatically (very useful!).
+		* @property maxVelocity
+		* @type Kiwi.Geom.Point
+		* @public
+		*/
+		public maxVelocity: Kiwi.Geom.Point;
+
+
+		/**
 		* This is how fast you want this sprite to spin.
 		* @property angularVelocity
-        * @type number
-        * @public
-        */
-        public angularVelocity: number;
-        
+		* @type number
+		* @public
+		*/
+		public angularVelocity: number;
 
-        /**
+
+		/**
 		* How fast the spin speed should change.
-        * @property angularAcceleration
-        * @type number
-        * @public
+		* @property angularAcceleration
+		* @type number
+		* @public
 		*/
-        public angularAcceleration: number;
-        
+		public angularAcceleration: number;
+
 
-        /**
+		/**
 		* Like <code>drag</code> but for spinning.
-        * @property angularDrag
-        * @type number
-        * @public
-		*/
-        public angularDrag: number;
-        
-
-        /**
-        * Use in conjunction with <code>angularAcceleration</code> for fluid spin speed control.
-        * @property maxAngular
-        * @type number
-        * @public
-        */
-        public maxAngular: number;
-
-
-        /**
-        * If the Entity that this component is a part of 'moves' or not, and thus if the physics should update the motion should update each frame.
-        * @property moves
-        * @type boolean
-        * @default true
-        * @public
-        */
-        public moves: boolean;
-
-
-        /**
-        * Bit field of flags (use with UP, DOWN, LEFT, RIGHT, etc) indicating surface contacts.
-        * Use bitwise operators to check the values stored here, or use touching(), justStartedTouching(), etc.
-        * You can even use them broadly as boolean values if you're feeling saucy!
-        * @property touching
-        * @type number
-        * @public
-        */
-        public touching: number;
-
-
-        /**
-        * Bit field of flags (use with UP, DOWN, LEFT, RIGHT, etc) indicating surface contacts from the previous game loop step.
-        * Use bitwise operators to check the values stored here, or use isTouching().
-        * You can even use them broadly as boolean values if you're feeling saucy!
-        * @property wasTouching
-        * @type number
-        * @public
-        */
-        public wasTouching: number;
-
-
-        /**
+		* @property angularDrag
+		* @type number
+		* @public
+		*/
+		public angularDrag: number;
+
+
+		/**
+		* Use in conjunction with <code>angularAcceleration</code> for fluid spin speed control.
+		* @property maxAngular
+		* @type number
+		* @public
+		*/
+		public maxAngular: number;
+
+
+		/**
+		* If the Entity that this component is a part of 'moves' or not, and thus if the physics should update the motion should update each frame.
+		* @property moves
+		* @type boolean
+		* @default true
+		* @public
+		*/
+		public moves: boolean;
+
+
+		/**
+		* Bit field of flags (use with UP, DOWN, LEFT, RIGHT, etc) indicating surface contacts.
+		* Use bitwise operators to check the values stored here, or use touching(), justStartedTouching(), etc.
+		* You can even use them broadly as boolean values if you're feeling saucy!
+		* @property touching
+		* @type number
+		* @public
+		*/
+		public touching: number;
+
+
+		/**
+		* Bit field of flags (use with UP, DOWN, LEFT, RIGHT, etc) indicating surface contacts from the previous game loop step.
+		* Use bitwise operators to check the values stored here, or use isTouching().
+		* You can even use them broadly as boolean values if you're feeling saucy!
+		* @property wasTouching
+		* @type number
+		* @public
+		*/
+		public wasTouching: number;
+
+
+		/**
 		* Bit field of flags (use with UP, DOWN, LEFT, RIGHT, etc) indicating collision directions.
 		* Use bitwise operators to check the values stored here.
 		* Useful for things like one-way platforms (e.g. allowCollisions = UP)
 		* The accessor "solid" just flips this variable between NONE and ANY.
 		* @property allowCollisions
-        * @type number
-        * @public
-        */
-        public allowCollisions: number;
+		* @type number
+		* @public
+		*/
+		public allowCollisions: number;
 
 
-        /**
+		/**
 		* Important variable for collision processing.
 		* Tracks the last location of the Entity. This is set during the time this method 'updates'.
 		* @property last
-        * @type Kiwi.Geom.Point
-        * @public
-        */
-        public last: Kiwi.Geom.Point;
-
-
-        /**
-        * A boolean to indicate if this object is solid or not.
-        * @property _solid
-        * @type boolean
-        * @private
-        */
-        private _solid: boolean;
-
-
-        /**
-        * A function that is to execute when this object overlaps with another.
-        * @property _callbackFunction
-        * @type Function
-        * @default null
-        * @private
-        */
-        private _callbackFunction: any = null;
-
-
-        /**
-        * The context that the callback method should have when it executes.
-        * @property _callbackContext
-        * @type Any
-        * @private
-        */
-        private _callbackContext: any = null;
-
-
-        /**
-        * Returns a boolean indicating whether the or not the object is currently colliding on a particular side that is passed.
-        * Use the collision constants (like LEFT, FLOOR, e.t.c) when passing sides.
-        * @method touching
-        * @param value [number] The collision constant of the side you want to check against.
-        * @return {boolean} If the Object is currently colliding on that side or not.
-        * @public
-        */
-        public isTouching(value: number): boolean {
-            return (this.touching & value) == value;
-        }
-
-
-        /**
+		* @type Kiwi.Geom.Point
+		* @public
+		*/
+		public last: Kiwi.Geom.Point;
+
+
+		/**
+		* A boolean to indicate if this object is solid or not.
+		* @property _solid
+		* @type boolean
+		* @private
+		*/
+		private _solid: boolean;
+
+
+		/**
+		* A function that is to execute when this object overlaps with another.
+		* @property _callbackFunction
+		* @type Function
+		* @default null
+		* @private
+		*/
+		private _callbackFunction: any = null;
+
+
+		/**
+		* The context that the callback method should have when it executes.
+		* @property _callbackContext
+		* @type Any
+		* @private
+		*/
+		private _callbackContext: any = null;
+
+
+		/**
+		* Returns a boolean indicating whether the or not the object is currently colliding on a particular side that is passed.
+		* Use the collision constants (like LEFT, FLOOR, e.t.c) when passing sides.
+		* @method touching
+		* @param value [number] The collision constant of the side you want to check against.
+		* @return {boolean} If the Object is currently colliding on that side or not.
+		* @public
+		*/
+		public isTouching(value: number): boolean {
+			return (this.touching & value) == value;
+		}
+
+
+		/**
 		* Whether the object should collide with other objects or not.  
-        * For more control over what directions the object will collide from, use collision constants (like LEFT, FLOOR, etc)
+		* For more control over what directions the object will collide from, use collision constants (like LEFT, FLOOR, etc)
 		* and set the value of allowCollisions directly.
-        * @method solid
-        * @param [value] {boolean} If left empty, this will then just toggle between ANY and NONE.
-        * @return {boolean} If Object is currently solid or not.
-        * @public
-		*/
-        public solid(value?: boolean): boolean {
-            if (value !== undefined) {
-                if (value)
-                    this.allowCollisions = ArcadePhysics.ANY;
-                else
-                    this.allowCollisions = ArcadePhysics.NONE;
-            }
-
-             return (this.allowCollisions & ArcadePhysics.ANY) > ArcadePhysics.NONE;
-        }
-
-
-        /**
-        * Sets up a callback function that will run when this object overlaps with another.
-        * When the method is dispatched it will have TWO arguments.
-        * One - The parent / entity of this ArcadePhysics.
-        * Two - The GameObject that the collision occured with.
-        * 
-        * @method setCallback
-        * @param callbackFunction {Function} The method that is to be executed whe a overlap occurs.
-        * @param callbackContext {Any} The context that the method is to be called in.
-        * @public
-        */
-        public setCallback(callbackFunction, callbackContext) {
-            this._callbackFunction = callbackFunction;
-            this._callbackContext = callbackContext;
-        }
-
-
-        /**
-        * Returns the parent of this entity. Mainly used for executing callbacks.
-        * @property parent
-        * @type Kiwi.Entity
-        * @public
-        */
-        public parent: Kiwi.Entity;
-
-
-        /*
-        *---------------
-        * Seperation Code
-        *---------------
-        */
-
-
-        /**
-        * A static method for seperating two normal GameObjects on both the X and Y Axis's. 
-        * Both objects need to have both an ArcadePhysics Component and a Box component in order for the separate process to succeed.
-        * This method is not recommended to be directly used but instead use a 'collide/overlaps' method instead.
-        * 
-        * @method seperate
-        * @static
-        * @param object1 {Kiwi.Entity} The first GameObject you would like to seperate.
-        * @param object2 {Kiwi.Entity} The second GameObject you would like to seperate from the first. 
-        * @return {boolean}
-        * @public
-        */
-        public static separate(object1: Kiwi.Entity, object2: Kiwi.Entity): boolean {
-            
-            var separatedX: boolean = this.separateX(object1, object2);
-            var separatedY: boolean = this.separateY(object1, object2);
-            return separatedX || separatedY;
-        }
-
-
-        /**
+		* @method solid
+		* @param [value] {boolean} If left empty, this will then just toggle between ANY and NONE.
+		* @return {boolean} If Object is currently solid or not.
+		* @public
+		*/
+		public solid(value?: boolean): boolean {
+			if (value !== undefined) {
+				if (value)
+					this.allowCollisions = ArcadePhysics.ANY;
+				else
+					this.allowCollisions = ArcadePhysics.NONE;
+			}
+
+			 return (this.allowCollisions & ArcadePhysics.ANY) > ArcadePhysics.NONE;
+		}
+
+
+		/**
+		* Sets up a callback function that will run when this object overlaps with another.
+		* When the method is dispatched it will have TWO arguments.
+		* One - The parent / entity of this ArcadePhysics.
+		* Two - The GameObject that the collision occured with.
+		* 
+		* @method setCallback
+		* @param callbackFunction {Function} The method that is to be executed whe a overlap occurs.
+		* @param callbackContext {Any} The context that the method is to be called in.
+		* @public
+		*/
+		public setCallback(callbackFunction, callbackContext) {
+			this._callbackFunction = callbackFunction;
+			this._callbackContext = callbackContext;
+		}
+
+
+		/**
+		* Returns the parent of this entity. Mainly used for executing callbacks.
+		* @property parent
+		* @type Kiwi.Entity
+		* @public
+		*/
+		public parent: Kiwi.Entity;
+
+
+		/*
+		*---------------
+		* Seperation Code
+		*---------------
+		*/
+
+
+		/**
+		* A static method for seperating two normal GameObjects on both the X and Y Axis's. 
+		* Both objects need to have both an ArcadePhysics Component and a Box component in order for the separate process to succeed.
+		* This method is not recommended to be directly used but instead use a 'collide/overlaps' method instead.
+		* 
+		* @method seperate
+		* @static
+		* @param object1 {Kiwi.Entity} The first GameObject you would like to seperate.
+		* @param object2 {Kiwi.Entity} The second GameObject you would like to seperate from the first. 
+		* @return {boolean}
+		* @public
+		*/
+		public static separate(object1: Kiwi.Entity, object2: Kiwi.Entity): boolean {
+			
+			var separatedX: boolean = this.separateX(object1, object2);
+			var separatedY: boolean = this.separateY(object1, object2);
+			return separatedX || separatedY;
+		}
+
+
+		/**
 		* Separates two passed GameObjects on the x-axis.
-        * Both objects need to have both an ArcadePhysics Component and a Box component in order for the separate process to succeed.
-        * This method is not recommended to be directly used but instead use a 'collide/overlaps' method instead.
-        *
-        * @method seperateX
+		* Both objects need to have both an ArcadePhysics Component and a Box component in order for the separate process to succeed.
+		* This method is not recommended to be directly used but instead use a 'collide/overlaps' method instead.
+		*
+		* @method seperateX
 		* @param object1 {Kiwi.Entity} The first GameObject.
 		* @param object2 {Kiwi.Entity} The second GameObject.
 		* @return {boolean} Whether the objects in fact touched and were separated along the X axis.
-        * @static
-        * @public
+		* @static
+		* @public
 		*/
-        public static separateX(object1: Kiwi.Entity, object2: Kiwi.Entity): boolean {
+		public static separateX(object1: Kiwi.Entity, object2: Kiwi.Entity): boolean {
 
-            //Get the Physics Components.
-            var phys1: ArcadePhysics = <ArcadePhysics>object1.components.getComponent("ArcadePhysics");
-            var phys2: ArcadePhysics = <ArcadePhysics>object2.components.getComponent("ArcadePhysics");
+			//Get the Physics Components.
+			var phys1: ArcadePhysics = <ArcadePhysics>object1.components.getComponent("ArcadePhysics");
+			var phys2: ArcadePhysics = <ArcadePhysics>object2.components.getComponent("ArcadePhysics");
 
 
-            //Can they even be sseparatated? two immovable objects
-            if (phys1.immovable && phys2.immovable)
-                return false;
+			//Can they even be sseparatated? two immovable objects
+			if (phys1.immovable && phys2.immovable)
+				return false;
 
 
-            //First, get the two object deltas
-            var overlap: number = 0;
-            var obj1delta: number = phys1.transform.worldX - phys1.last.x;
-            var obj2delta: number = phys2.transform.worldX - phys2.last.x;
+			//First, get the two object deltas
+			var overlap: number = 0;
+			var obj1delta: number = phys1.transform.worldX - phys1.last.x;
+			var obj2delta: number = phys2.transform.worldX - phys2.last.x;
 
 
-            //Are they the same?
-            if (obj1delta == obj2delta) return false;
+			//Are they the same?
+			if (obj1delta == obj2delta) return false;
 
 
-            //Check if the X hulls actually overlap
-            var obj1deltaAbs: number = (obj1delta > 0) ? obj1delta : -obj1delta;
-            var obj2deltaAbs: number = (obj2delta > 0) ? obj2delta : -obj2delta;
-                
+			//Check if the X hulls actually overlap
+			var obj1deltaAbs: number = (obj1delta > 0) ? obj1delta : -obj1delta;
+			var obj2deltaAbs: number = (obj2delta > 0) ? obj2delta : -obj2delta;
+				
 
-            //Get the world hitboxes.
-            var box1 = phys1.box.worldHitbox;
-            var box2 = phys2.box.worldHitbox;
+			//Get the world hitboxes.
+			var box1 = phys1.box.worldHitbox;
+			var box2 = phys2.box.worldHitbox;
 
 
-            //Where they are now using previous y axis's.
-            var obj1rect: Kiwi.Geom.Rectangle = new Kiwi.Geom.Rectangle(box1.x - ((obj1delta > 0) ? obj1delta : 0), phys1.last.y + phys1.box.hitboxOffset.y, box1.width + ((obj1delta > 0) ? obj1delta : -obj1delta), box1.height);
-            var obj2rect: Kiwi.Geom.Rectangle = new Kiwi.Geom.Rectangle(box2.x - ((obj2delta > 0) ? obj2delta : 0), phys2.last.y + phys2.box.hitboxOffset.y, box2.width + ((obj2delta > 0) ? obj2delta : -obj2delta), box2.height);
+			//Where they are now using previous y axis's.
+			var obj1rect: Kiwi.Geom.Rectangle = new Kiwi.Geom.Rectangle(box1.x - ((obj1delta > 0) ? obj1delta : 0), phys1.last.y + phys1.box.hitboxOffset.y, box1.width + ((obj1delta > 0) ? obj1delta : -obj1delta), box1.height);
+			var obj2rect: Kiwi.Geom.Rectangle = new Kiwi.Geom.Rectangle(box2.x - ((obj2delta > 0) ? obj2delta : 0), phys2.last.y + phys2.box.hitboxOffset.y, box2.width + ((obj2delta > 0) ? obj2delta : -obj2delta), box2.height);
 
 
-            //Could also use Kiwi.Geom.Intersect.rectangleToRectangle here...
-            if ((obj1rect.x + obj1rect.width > obj2rect.x) && (obj1rect.x < obj2rect.x + obj2rect.width) && (obj1rect.y + obj1rect.height > obj2rect.y) && (obj1rect.y < obj2rect.y + obj2rect.height)) {
+			//Could also use Kiwi.Geom.Intersect.rectangleToRectangle here...
+			if ((obj1rect.x + obj1rect.width > obj2rect.x) && (obj1rect.x < obj2rect.x + obj2rect.width) && (obj1rect.y + obj1rect.height > obj2rect.y) && (obj1rect.y < obj2rect.y + obj2rect.height)) {
 
 
-                var maxOverlap: number = obj1deltaAbs + obj2deltaAbs + ArcadePhysics.OVERLAP_BIAS;
+				var maxOverlap: number = obj1deltaAbs + obj2deltaAbs + ArcadePhysics.OVERLAP_BIAS;
 
 
-                if (obj1delta > obj2delta) {
+				if (obj1delta > obj2delta) {
 
-                    overlap = box1.x + box1.width - box2.x;
-                    if ((overlap > maxOverlap) || !(phys1.allowCollisions & ArcadePhysics.RIGHT) || !(phys2.allowCollisions & ArcadePhysics.LEFT)) {
-                        overlap = 0;
-                    } else {
-                        phys1.touching |= ArcadePhysics.RIGHT;
-                        phys2.touching |= ArcadePhysics.LEFT;
-                    }
+					overlap = box1.x + box1.width - box2.x;
+					if ((overlap > maxOverlap) || !(phys1.allowCollisions & ArcadePhysics.RIGHT) || !(phys2.allowCollisions & ArcadePhysics.LEFT)) {
+						overlap = 0;
+					} else {
+						phys1.touching |= ArcadePhysics.RIGHT;
+						phys2.touching |= ArcadePhysics.LEFT;
+					}
 
-                } else {
+				} else {
 
-                    overlap = box1.x - box2.width - box2.x;
-                    if ((-overlap > maxOverlap) || !(phys1.allowCollisions & ArcadePhysics.LEFT) || !(phys2.allowCollisions & ArcadePhysics.RIGHT)) {
-                        overlap = 0;
-                    } else {
-                        phys1.touching |= ArcadePhysics.LEFT;
-                        phys2.touching |= ArcadePhysics.RIGHT;
-                    }
+					overlap = box1.x - box2.width - box2.x;
+					if ((-overlap > maxOverlap) || !(phys1.allowCollisions & ArcadePhysics.LEFT) || !(phys2.allowCollisions & ArcadePhysics.RIGHT)) {
+						overlap = 0;
+					} else {
+						phys1.touching |= ArcadePhysics.LEFT;
+						phys2.touching |= ArcadePhysics.RIGHT;
+					}
 
-                }
+				}
 
 
-            }
+			}
 
 
-            if (overlap != 0) {
+			if (overlap != 0) {
 
 
-                //Get the average velocity
-                var obj1v: number = phys1.velocity.x;
-                var obj2v: number = phys2.velocity.x;
+				//Get the average velocity
+				var obj1v: number = phys1.velocity.x;
+				var obj2v: number = phys2.velocity.x;
 
 
-                if (!phys1.immovable && !phys2.immovable) { 
-                    overlap *= 0.5;
-                    phys1.transform.x = phys1.transform.x - overlap;
-                    phys2.transform.x = phys2.transform.x + overlap;
+				if (!phys1.immovable && !phys2.immovable) { 
+					overlap *= 0.5;
+					phys1.transform.x = phys1.transform.x - overlap;
+					phys2.transform.x = phys2.transform.x + overlap;
 
-                    var obj1velocity: number = Math.sqrt((obj2v * obj2v * phys2.mass) / phys1.mass) * ((obj2v > 0) ? 1 : -1);
-                    var obj2velocity: number = Math.sqrt((obj1v * obj1v * phys1.mass) / phys2.mass) * ((obj1v > 0) ? 1 : -1);
-                    var average: number = (obj1velocity + obj2velocity) * 0.5;
-                    obj1velocity -= average;
-                    obj2velocity -= average;
-                    phys1.velocity.x = average + obj1velocity * phys1.elasticity;
-                    phys2.velocity.x = average + obj2velocity * phys2.elasticity;
+					var obj1velocity: number = Math.sqrt((obj2v * obj2v * phys2.mass) / phys1.mass) * ((obj2v > 0) ? 1 : -1);
+					var obj2velocity: number = Math.sqrt((obj1v * obj1v * phys1.mass) / phys2.mass) * ((obj1v > 0) ? 1 : -1);
+					var average: number = (obj1velocity + obj2velocity) * 0.5;
+					obj1velocity -= average;
+					obj2velocity -= average;
+					phys1.velocity.x = average + obj1velocity * phys1.elasticity;
+					phys2.velocity.x = average + obj2velocity * phys2.elasticity;
 
 
-                } else if (!phys1.immovable) {
-                    phys1.transform.x = phys1.transform.x - overlap;
-                    phys1.velocity.x = obj2v - obj1v * phys1.elasticity;
+				} else if (!phys1.immovable) {
+					phys1.transform.x = phys1.transform.x - overlap;
+					phys1.velocity.x = obj2v - obj1v * phys1.elasticity;
 
 
-                } else if (!phys2.immovable) {
-                    phys2.transform.x = phys2.transform.x + overlap;
-                    phys2.velocity.x = obj1v - obj2v * phys2.elasticity;
+				} else if (!phys2.immovable) {
+					phys2.transform.x = phys2.transform.x + overlap;
+					phys2.velocity.x = obj1v - obj2v * phys2.elasticity;
 
-                }
-                return true;
+				}
+				return true;
 
-            }
+			}
 
-            return false;
-        }
+			return false;
+		}
 
 
-        /**
+		/**
 		* Separates two GameObject on the y-axis. This method is executed from the 'separate' method.
-        * Both objects need to have both an ArcadePhysics Component and a Box component in order for the separate process to succeed.
-        * This method is not recommended to be directly used but instead use a 'collide/overlaps' method instead.
+		* Both objects need to have both an ArcadePhysics Component and a Box component in order for the separate process to succeed.
+		* This method is not recommended to be directly used but instead use a 'collide/overlaps' method instead.
 		*
-        * @method seperateY 
+		* @method seperateY 
 		* @param object1 {Kiwi.Entity} The first GameObject.
 		* @param object2 {Kiwi.Entity} The second GameObject.
 		* @return {boolean} Whether the objects in fact touched and were separated along the Y axis.
 		* @static
-        * @public
-        */
-        public static separateY(object1: Kiwi.Entity, object2: Kiwi.Entity): boolean {
+		* @public
+		*/
+		public static separateY(object1: Kiwi.Entity, object2: Kiwi.Entity): boolean {
+
+
+			//Get the Arcade Physics Components
+			var phys1: ArcadePhysics = <ArcadePhysics>object1.components.getComponent("ArcadePhysics");
+			var phys2: ArcadePhysics = <ArcadePhysics>object2.components.getComponent("ArcadePhysics"); 
+
+
+			//Can't separate two immovable objects
+			if (phys1.immovable && phys2.immovable) return false;
+
+
+			var overlap: number = 0;
+			var obj1delta: number = phys1.transform.worldY - phys1.last.y;
+			var obj2delta: number = phys2.transform.worldY - phys2.last.y;
+
+
+			//Do the deltas match?
+			if (obj1delta == obj2delta) return false;
+
+
+			//Absolute Deltas
+			var obj1deltaAbs: number = (obj1delta > 0) ? obj1delta : -obj1delta;
+			var obj2deltaAbs: number = (obj2delta > 0) ? obj2delta : -obj2delta;
+
 
+			//Hitboxes
+			var box1 = phys1.box.worldHitbox;
+			var box2 = phys2.box.worldHitbox;
 
-            //Get the Arcade Physics Components
-            var phys1: ArcadePhysics = <ArcadePhysics>object1.components.getComponent("ArcadePhysics");
-            var phys2: ArcadePhysics = <ArcadePhysics>object2.components.getComponent("ArcadePhysics"); 
 
+			//Rectangles
+			var obj1rect: Kiwi.Geom.Rectangle = new Kiwi.Geom.Rectangle(box1.x, box1.y - ((obj1delta > 0) ? obj1delta : 0), box1.width, box1.height + obj1deltaAbs);
+			var obj2rect: Kiwi.Geom.Rectangle = new Kiwi.Geom.Rectangle(box2.x, box2.y - ((obj2delta > 0) ? obj2delta : 0), box2.width, box2.height + obj2deltaAbs);
 
-            //Can't separate two immovable objects
-            if (phys1.immovable && phys2.immovable) return false;
 
+			//Check for overlap
+			if ((obj1rect.x + obj1rect.width > obj2rect.x) && (obj1rect.x < obj2rect.x + obj2rect.width) && (obj1rect.y + obj1rect.height > obj2rect.y) && (obj1rect.y < obj2rect.y + obj2rect.height)) {
 
-            var overlap: number = 0;
-            var obj1delta: number = phys1.transform.worldY - phys1.last.y;
-            var obj2delta: number = phys2.transform.worldY - phys2.last.y;
+				var maxOverlap: number = obj1deltaAbs + obj2deltaAbs + ArcadePhysics.OVERLAP_BIAS;
 
+				if (obj1delta > obj2delta) {
 
-            //Do the deltas match?
-            if (obj1delta == obj2delta) return false;
+					overlap = box1.y + box1.height - box2.y;
+					if ((overlap > maxOverlap) || !(phys1.allowCollisions & ArcadePhysics.DOWN) || !(phys2.allowCollisions & ArcadePhysics.UP)) {
+						overlap = 0;
+					} else {
+						phys1.touching |= ArcadePhysics.DOWN;
+						phys2.touching |= ArcadePhysics.UP;
+					}
 
+				} else {
 
-            //Absolute Deltas
-            var obj1deltaAbs: number = (obj1delta > 0) ? obj1delta : -obj1delta;
-            var obj2deltaAbs: number = (obj2delta > 0) ? obj2delta : -obj2delta;
+					overlap = box1.y - box2.height - box2.y;
+					if ((-overlap > maxOverlap) || !(phys1.allowCollisions & ArcadePhysics.UP) || !(phys2.allowCollisions & ArcadePhysics.DOWN)) {
+						overlap = 0;
+					} else {
+						phys1.touching |= ArcadePhysics.UP;
+						phys2.touching |= ArcadePhysics.DOWN;
+					}
 
+				}
 
-            //Hitboxes
-            var box1 = phys1.box.worldHitbox;
-            var box2 = phys2.box.worldHitbox;
 
+				//Then adjust their positions and velocities accordingly (if there was any overlap)
+				if (overlap != 0) {
 
-            //Rectangles
-            var obj1rect: Kiwi.Geom.Rectangle = new Kiwi.Geom.Rectangle(box1.x, box1.y - ((obj1delta > 0) ? obj1delta : 0), box1.width, box1.height + obj1deltaAbs);
-            var obj2rect: Kiwi.Geom.Rectangle = new Kiwi.Geom.Rectangle(box2.x, box2.y - ((obj2delta > 0) ? obj2delta : 0), box2.width, box2.height + obj2deltaAbs);
+					var obj1v: number = phys1.velocity.y;
+					var obj2v: number = phys2.velocity.y;
 
+					if (!phys1.immovable && !phys2.immovable) {
 
-            //Check for overlap
-            if ((obj1rect.x + obj1rect.width > obj2rect.x) && (obj1rect.x < obj2rect.x + obj2rect.width) && (obj1rect.y + obj1rect.height > obj2rect.y) && (obj1rect.y < obj2rect.y + obj2rect.height)) {
+						overlap *= 0.5;
 
-                var maxOverlap: number = obj1deltaAbs + obj2deltaAbs + ArcadePhysics.OVERLAP_BIAS;
+						phys1.transform.y = phys1.transform.y - overlap;
+						phys2.transform.y = phys2.transform.y + overlap;
 
-                if (obj1delta > obj2delta) {
+						var obj1velocity: number = Math.sqrt((obj2v * obj2v * phys2.mass) / phys1.mass) * ((obj2v > 0) ? 1 : -1);
+						var obj2velocity: number = Math.sqrt((obj1v * obj1v * phys1.mass) / phys2.mass) * ((obj1v > 0) ? 1 : -1);
+						var average: number = (obj1velocity + obj2velocity) * 0.5;
 
-                    overlap = box1.y + box1.height - box2.y;
-                    if ((overlap > maxOverlap) || !(phys1.allowCollisions & ArcadePhysics.DOWN) || !(phys2.allowCollisions & ArcadePhysics.UP)) {
-                        overlap = 0;
-                    } else {
-                        phys1.touching |= ArcadePhysics.DOWN;
-                        phys2.touching |= ArcadePhysics.UP;
-                    }
+						obj1velocity -= average;
+						obj2velocity -= average;
 
-                } else {
+						phys1.velocity.y = average + obj1velocity * phys1.elasticity;
+						phys2.velocity.y = average + obj2velocity * phys2.elasticity;
 
-                    overlap = box1.y - box2.height - box2.y;
-                    if ((-overlap > maxOverlap) || !(phys1.allowCollisions & ArcadePhysics.UP) || !(phys2.allowCollisions & ArcadePhysics.DOWN)) {
-                        overlap = 0;
-                    } else {
-                        phys1.touching |= ArcadePhysics.UP;
-                        phys2.touching |= ArcadePhysics.DOWN;
-                    }
+					}
+					else if (!phys1.immovable) {
+						phys1.transform.y = phys1.transform.y - overlap;
+						phys1.velocity.y = obj2v - obj1v * phys1.elasticity;
 
-                }
+						//This is special case code that handles cases like horizontal moving platforms you can ride
+						if (object2.active && phys2.moves && (obj1delta > obj2delta))
+							phys1.transform.x = phys1.transform.worldX + object2.transform.worldX - phys2.last.x;
 
+					} else if (!phys2.immovable) {
+						phys2.transform.y = phys2.transform.y + overlap;
+						phys2.velocity.y = obj1v - obj2v * phys2.elasticity;
 
-                //Then adjust their positions and velocities accordingly (if there was any overlap)
-                if (overlap != 0) {
+						//This is special case code that handles cases like horizontal moving platforms you can ride
+						if (object1.active && phys1.moves && (obj1delta < obj2delta))
+							phys2.transform.x = phys2.transform.worldX + object1.transform.worldX - phys1.last.x;
 
-                    var obj1v: number = phys1.velocity.y;
-                    var obj2v: number = phys2.velocity.y;
+					}
 
-                    if (!phys1.immovable && !phys2.immovable) {
+					return true;
+				}
 
-                        overlap *= 0.5;
 
-                        phys1.transform.y = phys1.transform.y - overlap;
-                        phys2.transform.y = phys2.transform.y + overlap;
+			}
 
-                        var obj1velocity: number = Math.sqrt((obj2v * obj2v * phys2.mass) / phys1.mass) * ((obj2v > 0) ? 1 : -1);
-                        var obj2velocity: number = Math.sqrt((obj1v * obj1v * phys1.mass) / phys2.mass) * ((obj1v > 0) ? 1 : -1);
-                        var average: number = (obj1velocity + obj2velocity) * 0.5;
 
-                        obj1velocity -= average;
-                        obj2velocity -= average;
+			return false;
+		}
 
-                        phys1.velocity.y = average + obj1velocity * phys1.elasticity;
-                        phys2.velocity.y = average + obj2velocity * phys2.elasticity;
 
-                    }
-                    else if (!phys1.immovable) {
-                        phys1.transform.y = phys1.transform.y - overlap;
-                        phys1.velocity.y = obj2v - obj1v * phys1.elasticity;
+		/*
+		*---------------
+		* Seperation of Tiles Methods
+		*---------------
+		*/
 
-                        //This is special case code that handles cases like horizontal moving platforms you can ride
-                        if (object2.active && phys2.moves && (obj1delta > obj2delta))
-                            phys1.transform.x = phys1.transform.worldX + object2.transform.worldX - phys2.last.x;
 
-                    } else if (!phys2.immovable) {
-                        phys2.transform.y = phys2.transform.y + overlap;
-                        phys2.velocity.y = obj1v - obj2v * phys2.elasticity;
+		/**
+		* Separates a GameObject from a series of passed Tiles that lie on a TileMapLayer. 
+		* The gameobject needs to have a Box Component and an ArcadePhysics Component. 
+		* This method is not recommended to be directly used but instead use the 'overlapsTiles' method instead.
+		*
+		* @method separateTiles
+		* @param object {Kiwi.Entity} The GameObject you are wanting to separate from a tile.
+		* @param layer {Kiwi.GameObjects.Tilemap.TileMapLayer} The TileMapLayer that the tiles belong on.
+		* @param tiles {Array} 
+		* @return {Boolean} If any separation occured.
+		* @public
+		* @static
+		*/
+		public static separateTiles(object:Entity, layer:Kiwi.GameObjects.Tilemap.TileMapLayer, tiles:any):boolean {
 
-                        //This is special case code that handles cases like horizontal moving platforms you can ride
-                        if (object1.active && phys1.moves && (obj1delta < obj2delta))
-                            phys2.transform.x = phys2.transform.worldX + object1.transform.worldX - phys1.last.x;
+			//Physics Component Found?
+			if (object.components.hasComponent("ArcadePhysics") == false) return false;
 
-                    }
+			//Immovable?
+			if (object.components.getComponent("ArcadePhysics").immovable) return false;
 
-                    return true;
-                }
+			var sepX = false;
+			var sepY = false;
 
+			for (var i = 0; i < tiles.length; i++) {
 
-            }
+				var tile = tiles[i];
 
+				if(!sepX) sepX = this.separateTilesX(object, layer, tile);
+				if(!sepY) sepY = this.separateTilesY(object, layer, tile);
+			}
 
-            return false;
-        }
+			return  sepX || sepY;
 
+		}
 
-        /*
-        *---------------
-        * Seperation of Tiles Methods
-        *---------------
-        */
 
+		/**
+		* Separates a GameObjects from an Array of Tiles on the x-axis. 
+		* @method separateTilesX
+		* @param object {Kiwi.Entity} The GameObject you are wanting to separate from a tile.
+		* @param layer {Kiwi.GameObjects.Tilemap.TileMapLayer} The TileMapLayer that the tiles belong on.
+		* @param tile {Object} An Object containing the information (x/y/tiletypr) about the tile that is being overlapped.
+		* @return {Boolean} If any separation occured.
+		* @public
+		* @static
+		*/
+		public static separateTilesX(object:Entity, layer:Kiwi.GameObjects.Tilemap.TileMapLayer, tile):boolean {
 
-        /**
-        * Separates a GameObject from a series of passed Tiles that lie on a TileMapLayer. 
-        * The gameobject needs to have a Box Component and an ArcadePhysics Component. 
-        * This method is not recommended to be directly used but instead use the 'overlapsTiles' method instead.
-        *
-        * @method separateTiles
-        * @param object {Kiwi.Entity} The GameObject you are wanting to separate from a tile.
-        * @param layer {Kiwi.GameObjects.Tilemap.TileMapLayer} The TileMapLayer that the tiles belong on.
-        * @param tiles {Array} 
-        * @return {Boolean} If any separation occured.
-        * @public
-        * @static
-        */
-        public static separateTiles(object:Entity, layer:Kiwi.GameObjects.Tilemap.TileMapLayer, tiles:any):boolean {
 
-            //Physics Component Found?
-            if (object.components.hasComponent("ArcadePhysics") == false) return false;
+			//Get Physics
+			var phys1: ArcadePhysics = <ArcadePhysics>object.components.getComponent("ArcadePhysics");
+			var phys2: ArcadePhysics = <ArcadePhysics>layer.components.getComponent("ArcadePhysics");
 
 
-            //Immovable?
-            if (object.components.getComponent("ArcadePhysics").immovable) return false;
+			//First, get the two object deltas
+			var obj1delta: number = phys1.transform.worldX - phys1.last.x;
+			var obj2delta: number = phys2.transform.worldX - phys2.last.x;
 
-            
-            var sepX = false;
-            var sepY = false;
 
-            for (var i = 0; i < tiles.length; i++) {
+			//If they moved the same amount.
+			if (obj1delta == obj2delta) return false;
+			
 
-                var tile = tiles[i];
+			//Absolute Delta and Overlap
+			var obj1deltaAbs: number = (obj1delta > 0) ? obj1delta : -obj1delta;
+			var obj2deltaAbs: number = (obj2delta > 0) ? obj2delta : -obj2delta;
+			var overlap = 0;
+			var maxOverlap: number = obj1deltaAbs + obj2deltaAbs + ArcadePhysics.OVERLAP_BIAS;
 
-                if(!sepX) sepX = this.separateTilesX(object, layer, tile);
-                if(!sepY) sepY = this.separateTilesY(object, layer, tile);
-            }
-            
-            return  sepX || sepY;
-            
-        }
 
+			//Quick References
+			var box1 = phys1.box.worldHitbox;
+			var tileTypes = layer.tilemap.tileTypes;
+			var tData = layer.tileData;
 
-        /**
-        * Separates a GameObjects from an Array of Tiles on the x-axis. 
-        * @method separateTilesX
-        * @param object {Kiwi.Entity} The GameObject you are wanting to separate from a tile.
-        * @param layer {Kiwi.GameObjects.Tilemap.TileMapLayer} The TileMapLayer that the tiles belong on.
-        * @param tile {Object} An Object containing the information (x/y/tiletypr) about the tile that is being overlapped.
-        * @return {Boolean} If any separation occured.
-        * @public
-        * @static
-        */
-        public static separateTilesX(object:Entity, layer:Kiwi.GameObjects.Tilemap.TileMapLayer, tile):boolean {
 
+			//Box of the GameObject
+			var x = phys2.transform.worldX + tile.x;
+			var obj1rect: Kiwi.Geom.Rectangle = new Kiwi.Geom.Rectangle(box1.x - ((obj1delta > 0) ? obj1delta : 0), phys1.last.y + phys1.box.hitboxOffset.y, box1.width + ((obj1delta > 0) ? obj1delta : -obj1delta), box1.height);
+			var obj2rect: Kiwi.Geom.Rectangle = new Kiwi.Geom.Rectangle(x - ((obj2delta > 0) ? obj2delta : 0), phys2.last.y + tile.y, layer.tileWidth + ((obj2delta > 0) ? obj2delta : -obj2delta), layer.tileHeight);
 
-            //Get Physics
-            var phys1: ArcadePhysics = <ArcadePhysics>object.components.getComponent("ArcadePhysics");
-            var phys2: ArcadePhysics = <ArcadePhysics>layer.components.getComponent("ArcadePhysics");
 
+			//Check to see if they overlap
+			if ((obj1rect.x + obj1rect.width > obj2rect.x) && (obj1rect.x < obj2rect.x + obj2rect.width) && (obj1rect.y + obj1rect.height > obj2rect.y) && (obj1rect.y < obj2rect.y + obj2rect.height)) {
 
-            //First, get the two object deltas
-            var obj1delta: number = phys1.transform.worldX - phys1.last.x;
-            var obj2delta: number = phys2.transform.worldX - phys2.last.x;
+				//Which way the delta is going
+				if (obj1delta > obj2delta) {
 
+					overlap = box1.x + box1.width - x;
+					if ((overlap > maxOverlap) || !(phys1.allowCollisions & ArcadePhysics.RIGHT) || !(tileTypes[tData[tile.index]].allowCollisions & ArcadePhysics.LEFT)) {
+						overlap = 0;
+					} else {
+						phys1.touching |= ArcadePhysics.RIGHT;
+					}
 
-            //If they moved the same amount.
-            if (obj1delta == obj2delta) return false;
-            
+				} else {
 
-            //Absolute Delta and Overlap
-            var obj1deltaAbs: number = (obj1delta > 0) ? obj1delta : -obj1delta;
-            var obj2deltaAbs: number = (obj2delta > 0) ? obj2delta : -obj2delta;
-            var overlap = 0;
-            var maxOverlap: number = obj1deltaAbs + obj2deltaAbs + ArcadePhysics.OVERLAP_BIAS;
+					overlap = box1.x - layer.tileWidth - x;
+					if ((-overlap > maxOverlap) || !(phys1.allowCollisions & ArcadePhysics.LEFT) || !(tileTypes[tData[tile.index]].allowCollisions & ArcadePhysics.RIGHT)) {
+						overlap = 0;
+					} else {
+						phys1.touching |= ArcadePhysics.LEFT;
+					}
 
+				}
 
-            //Quick References
-            var box1 = phys1.box.worldHitbox;
-            var tileTypes = layer.tilemap.tileTypes;
-            var tData = layer.tileData;
+				//Resolve the Collision
+				if (overlap != 0) {
 
+					var obj1v: number = phys1.velocity.x;
+					var obj2v: number = phys2.velocity.x;
 
-            //Box of the GameObject
-            var x = phys2.transform.worldX + tile.x;
-            var obj1rect: Kiwi.Geom.Rectangle = new Kiwi.Geom.Rectangle(box1.x - ((obj1delta > 0) ? obj1delta : 0), phys1.last.y + phys1.box.hitboxOffset.y, box1.width + ((obj1delta > 0) ? obj1delta : -obj1delta), box1.height);
-            var obj2rect: Kiwi.Geom.Rectangle = new Kiwi.Geom.Rectangle(x - ((obj2delta > 0) ? obj2delta : 0), phys2.last.y + tile.y, layer.tileWidth + ((obj2delta > 0) ? obj2delta : -obj2delta), layer.tileHeight);
+					phys1.transform.x = phys1.transform.x - overlap;
+					phys1.velocity.x = obj2v - obj1v * phys1.elasticity;
 
+					return true;
+				}
 
-            //Check to see if they overlap
-            if ((obj1rect.x + obj1rect.width > obj2rect.x) && (obj1rect.x < obj2rect.x + obj2rect.width) && (obj1rect.y + obj1rect.height > obj2rect.y) && (obj1rect.y < obj2rect.y + obj2rect.height)) {
+			}
 
-                //Which way the delta is going
-                if (obj1delta > obj2delta) {
+			return false;
+		}
 
-                    overlap = box1.x + box1.width - x;
-                    if ((overlap > maxOverlap) || !(phys1.allowCollisions & ArcadePhysics.RIGHT) || !(tileTypes[tData[tile.index]].allowCollisions & ArcadePhysics.LEFT)) {
-                        overlap = 0;
-                    } else {
-                        phys1.touching |= ArcadePhysics.RIGHT;
-                    }
 
-                } else {
+		/**
+		* Separates a GameObject from a tiles on the y-axis. 
+		* @method separateTilesY
+		* @param object {Kiwi.Entity} The GameObject you are wanting to separate from a tile.
+		* @param layer {Kiwi.GameObjects.Tilemap.TileMapLayer} The TileMapLayer that the tiles belong on.
+		* @param tiles {Object} An Object representing the Tile which we are checking to see any overlaps occurs.
+		* @return {Boolean} If any separation occured.
+		* @public
+		* @static
+		*/
+		public static separateTilesY(object:Entity, layer, tile):boolean {
 
-                    overlap = box1.x - layer.tileWidth - x;
-                    if ((-overlap > maxOverlap) || !(phys1.allowCollisions & ArcadePhysics.LEFT) || !(tileTypes[tData[tile.index]].allowCollisions & ArcadePhysics.RIGHT)) {
-                        overlap = 0;
-                    } else {
-                        phys1.touching |= ArcadePhysics.LEFT;
-                    }
+			//Get the physics.
+			var phys1: ArcadePhysics = <ArcadePhysics>object.components.getComponent("ArcadePhysics");
+			var phys2: ArcadePhysics = <ArcadePhysics>layer.components.getComponent("ArcadePhysics");
 
-                }
 
-                //Resolve the Collision
-                if (overlap != 0) {
+			//First, get the two object deltas
+			var obj1delta: number = phys1.transform.worldY - phys1.last.y;
+			var obj2delta: number = phys2.transform.worldY - phys2.last.y;
 
-                    var obj1v: number = phys1.velocity.x;
-                    var obj2v: number = phys2.velocity.x;
 
-                    phys1.transform.x = phys1.transform.x - overlap;
-                    phys1.velocity.x = obj2v - obj1v * phys1.elasticity;
+			//Have they moved the same amount?
+			if (obj1delta == obj2delta) return false;
 
-                    return true;
-                }
 
-            }
+			//Absolute Delta and Max Overlap
+			var obj1deltaAbs: number = (obj1delta > 0) ? obj1delta : -obj1delta;
+			var obj2deltaAbs: number = (obj2delta > 0) ? obj2delta : -obj2delta;
+			var overlap: number = 0;
+			var maxOverlap: number = obj1deltaAbs + obj2deltaAbs + ArcadePhysics.OVERLAP_BIAS;
 
-            return false;
-        }
+			
+			var box1 = phys1.box.worldHitbox;
+			var tileTypes = layer.tilemap.tileTypes;
+			var tData = layer.tileData;
+			var y = layer.transform.worldY + tile.y;
 
 
-        /**
-        * Separates a GameObject from a tiles on the y-axis. 
-        * @method separateTilesY
-        * @param object {Kiwi.Entity} The GameObject you are wanting to separate from a tile.
-        * @param layer {Kiwi.GameObjects.Tilemap.TileMapLayer} The TileMapLayer that the tiles belong on.
-        * @param tiles {Object} An Object representing the Tile which we are checking to see any overlaps occurs.
-        * @return {Boolean} If any separation occured.
-        * @public
-        * @static
-        */
-        public static separateTilesY(object:Entity, layer, tile):boolean {
+			//Rectangles 
+			var obj1rect: Kiwi.Geom.Rectangle = new Kiwi.Geom.Rectangle(box1.x, box1.y - ((obj1delta > 0) ? obj1delta : 0), box1.width, box1.height + obj1deltaAbs);
+			var obj2rect: Kiwi.Geom.Rectangle = new Kiwi.Geom.Rectangle(phys2.transform.worldX + tile.x, y - ((obj2delta > 0) ? obj2delta : 0), layer.tileWidth, layer.tileHeight + obj2deltaAbs);
 
-            //Get the physics.
-            var phys1: ArcadePhysics = <ArcadePhysics>object.components.getComponent("ArcadePhysics");
-            var phys2: ArcadePhysics = <ArcadePhysics>layer.components.getComponent("ArcadePhysics");
 
+			//Check if they overlap
+			if ((obj1rect.x + obj1rect.width > obj2rect.x) && (obj1rect.x < obj2rect.x + obj2rect.width) && (obj1rect.y + obj1rect.height > obj2rect.y) && (obj1rect.y < obj2rect.y + obj2rect.height)) {
+				
+				if (obj1delta > obj2delta) {
 
-            //First, get the two object deltas
-            var obj1delta: number = phys1.transform.worldY - phys1.last.y;
-            var obj2delta: number = phys2.transform.worldY - phys2.last.y;
+					overlap = box1.y + box1.height - y;
+					if ((overlap > maxOverlap) || !(phys1.allowCollisions & ArcadePhysics.DOWN) || !(tileTypes[tData[tile.index]].allowCollisions & ArcadePhysics.UP)) {
+						overlap = 0;
+					} else {
+						phys1.touching |= ArcadePhysics.DOWN;
+					}
 
+				} else {
 
-            //Have they moved the same amount?
-            if (obj1delta == obj2delta) return false;
+					overlap = box1.y - layer.tileHeight - y;
+					if ((-overlap > maxOverlap) || !(phys1.allowCollisions & ArcadePhysics.UP) || !(tileTypes[tData[tile.index]].allowCollisions & ArcadePhysics.DOWN)) {
+						overlap = 0;
+					} else {
+						phys1.touching |= ArcadePhysics.UP;
+					}
 
+				}
 
-            //Absolute Delta and Max Overlap
-            var obj1deltaAbs: number = (obj1delta > 0) ? obj1delta : -obj1delta;
-            var obj2deltaAbs: number = (obj2delta > 0) ? obj2delta : -obj2delta;
-            var overlap: number = 0;
-            var maxOverlap: number = obj1deltaAbs + obj2deltaAbs + ArcadePhysics.OVERLAP_BIAS;
 
-            
-            var box1 = phys1.box.worldHitbox;
-            var tileTypes = layer.tilemap.tileTypes;
-            var tData = layer.tileData;
-            var y = layer.transform.worldY + tile.y;
+				//Resolve the Collision
+				if (overlap != 0) {
 
+					var obj1v: number = phys1.velocity.y;
+					var obj2v: number = phys2.velocity.y;
 
-            //Rectangles 
-            var obj1rect: Kiwi.Geom.Rectangle = new Kiwi.Geom.Rectangle(box1.x, box1.y - ((obj1delta > 0) ? obj1delta : 0), box1.width, box1.height + obj1deltaAbs);
-            var obj2rect: Kiwi.Geom.Rectangle = new Kiwi.Geom.Rectangle(phys2.transform.worldX + tile.x, y - ((obj2delta > 0) ? obj2delta : 0), layer.tileWidth, layer.tileHeight + obj2deltaAbs);
+					phys1.transform.y = phys1.transform.y - overlap;
+					phys1.velocity.y = obj2v - obj1v * phys1.elasticity;
 
+					return true;
+				}
 
-            //Check if they overlap
-            if ((obj1rect.x + obj1rect.width > obj2rect.x) && (obj1rect.x < obj2rect.x + obj2rect.width) && (obj1rect.y + obj1rect.height > obj2rect.y) && (obj1rect.y < obj2rect.y + obj2rect.height)) {
-                
-                if (obj1delta > obj2delta) {
+			}
 
-                    overlap = box1.y + box1.height - y;
-                    if ((overlap > maxOverlap) || !(phys1.allowCollisions & ArcadePhysics.DOWN) || !(tileTypes[tData[tile.index]].allowCollisions & ArcadePhysics.UP)) {
-                        overlap = 0;
-                    } else {
-                        phys1.touching |= ArcadePhysics.DOWN;
-                    }
+			return false;
+		}
 
-                } else {
 
-                    overlap = box1.y - layer.tileHeight - y;
-                    if ((-overlap > maxOverlap) || !(phys1.allowCollisions & ArcadePhysics.UP) || !(tileTypes[tData[tile.index]].allowCollisions & ArcadePhysics.DOWN)) {
-                        overlap = 0;
-                    } else {
-                        phys1.touching |= ArcadePhysics.UP;
-                    }
+		/* 
+		*---------------
+		* Instance Functions
+		*---------------
+		*/
 
-                }
 
+		/**
+		* A method to check to see if any Tiles with in this parent TileMapLayer overlaps with a GameObject passed.
+		* If seperateObjects is true it will seperate the two entities based on their bounding box.
+		* ONLY works if the parent of the ArcadePhysics component which is calling this method is a TileMapLayer.
+		* Note: The GameObject passed must contain a box component and only if you want to separate the two objects must is ALSO contain an ArcadePhysics component.
+		*
+		* @method overlapsTiles
+		* @param gameObject {Kiwi.Entity} The GameObject you would like to separate with this one.
+		* @param [separateObjects=false] {Boolean} If you want the GameObject to be separated from any tile it collides with.
+		* @param [collisionType=ANY] {Number} If you want the GameObject to only check for collisions from a particular side of tiles. ANY by default.
+		* @return {Boolean} If any gameobject overlapped.
+		* @public
+		*/
+		public overlapsTiles(gameObject:Entity, separateObjects:boolean = false, collisionType:number = Kiwi.Components.ArcadePhysics.ANY):boolean {
+
+			//Are we a tilemaplayer?
+			if (this.parent.childType() !== Kiwi.TILE_LAYER) return false; 
+
+			var tiles = (<Kiwi.GameObjects.Tilemap.TileMapLayer>this.parent).getOverlappingTiles(gameObject, collisionType);
+
+			if (tiles.length > 0) {
+				if (separateObjects) ArcadePhysics.separateTiles(gameObject, <Kiwi.GameObjects.Tilemap.TileMapLayer>this.parent, tiles);
+
+				return true;
+			} else {
+				return false;
+			}
+		}
+
+
+		/**
+		* A method to check to see if the parent of this physics component overlaps with another Kiwi.Entity.
+		* If seperateObjects is true it will seperate the two entities based on their bounding box.
+		* Note: The GameObject passed must contain a box component and only if you want to separate the two objects must is ALSO contain an ArcadePhysics component. 
+		* Also: Not to be used for separation from tiles.
+		* 
+		* @method overlaps
+		* @param gameObject {Kiwi.Entity}
+		* @param [seperateObjects=false] {boolean}
+		* @return {boolean}
+		* @public
+		*/
+		public overlaps(gameObject: Entity, separateObjects: boolean = false): boolean {
 
-                //Resolve the Collision
-                if (overlap != 0) {
+			if (gameObject.components.hasComponent('Box') == false) return;
 
-                    var obj1v: number = phys1.velocity.y;
-                    var obj2v: number = phys2.velocity.y;
+			var box: Kiwi.Components.Box = gameObject.components.getComponent('Box');
 
-                    phys1.transform.y = phys1.transform.y - overlap;
-                    phys1.velocity.y = obj2v - obj1v * phys1.elasticity;
+			var result: boolean = (box.worldHitbox.x + box.worldHitbox.width > this.box.worldHitbox.x) && (box.worldHitbox.x < this.box.worldHitbox.x + this.box.worldHitbox.width) &&
+				(box.worldHitbox.y + box.worldHitbox.height > this.box.worldHitbox.y) && (box.worldHitbox.y < this.box.worldHitbox.y + this.box.worldHitbox.height);
 
-                    return true;
-                }
+			if (result) {
+				if (separateObjects)
+					ArcadePhysics.separate(<Kiwi.Entity>this.owner, gameObject);
 
-            }
+				if (this._callbackFunction !== null && this._callbackContext !== null) {
+					this._callbackFunction.call(this._callbackContext, this.owner, gameObject);
+				}
+			}
 
-            return false;
-        }
+			return result;
 
+		}
 
-        /* 
-        *---------------
-        * Instance Functions
-        *---------------
-        */
 
+		/**
+		* A method to check to see if the parent of this physics component overlaps with another individual in a Kiwi Group.
+		* 
+		* @method overlapsGroup
+		* @param group {Kiwi.Group}
+		* @param [seperateObjects=false] {boolean} 
+		* @return { boolean } If any object in the group overlapped with the GameObject or not.
+		* @public
+		*/
+		public overlapsGroup(group: Kiwi.Group, separateObjects: boolean = false): boolean {
 
-        /**
-        * A method to check to see if any Tiles with in this parent TileMapLayer overlaps with a GameObject passed.
-        * If seperateObjects is true it will seperate the two entities based on their bounding box.
-        * ONLY works if the parent of the ArcadePhysics component which is calling this method is a TileMapLayer.
-        * Note: The GameObject passed must contain a box component and only if you want to separate the two objects must is ALSO contain an ArcadePhysics component.
-        *
-        * @method overlapsTiles
-        * @param gameObject {Kiwi.Entity} The GameObject you would like to separate with this one.
-        * @param [separateObjects=false] {Boolean} If you want the GameObject to be separated from any tile it collides with.
-        * @param [collisionType=ANY] {Number} If you want the GameObject to only check for collisions from a particular side of tiles. ANY by default.
-        * @return {Boolean} If any gameobject overlapped.
-        * @public
-        */
-        public overlapsTiles(gameObject:Entity, separateObjects:boolean = false, collisionType:number = Kiwi.Components.ArcadePhysics.ANY):boolean {
+			var results: boolean = false;
 
-            //Are we a tilemaplayer?
-            if (this.parent.childType() !== Kiwi.TILE_LAYER) return false; 
+			for (var i = 0; i < group.members.length; i++) {
 
-            var tiles = (<Kiwi.GameObjects.Tilemap.TileMapLayer>this.parent).getOverlappingTiles(gameObject, collisionType);
+				if (group.members[i].childType() === Kiwi.GROUP) {
+					//recursively check overlap
+					this.overlapsGroup(<Kiwi.Group>group.members[i], separateObjects);
 
-            if (tiles.length > 0) {
-                if (separateObjects) ArcadePhysics.separateTiles(gameObject, <Kiwi.GameObjects.Tilemap.TileMapLayer>this.parent, tiles);
+				} else {
+					//otherwise its an entity
 
-                return true;
-            } else {
-                return false;
-            }
-        }
+					if (this.overlaps(<Kiwi.Entity>group.members[i], separateObjects)) {
+						if (this._callbackContext !== null && this._callbackFunction !== null)
+							this._callbackFunction.call(this._callbackContext, this.owner, group.members[i]);
+						results = true;
+					}
 
+				}
+			}
 
-        /**
-        * A method to check to see if the parent of this physics component overlaps with another Kiwi.Entity.
-        * If seperateObjects is true it will seperate the two entities based on their bounding box.
-        * Note: The GameObject passed must contain a box component and only if you want to separate the two objects must is ALSO contain an ArcadePhysics component. 
-        * Also: Not to be used for separation from tiles.
-        * 
-        * @method overlaps
-        * @param gameObject {Kiwi.Entity}
-        * @param [seperateObjects=false] {boolean}
-        * @return {boolean}
-        * @public
-        */
-        public overlaps(gameObject: Entity, separateObjects: boolean = false): boolean {
+			return results;
+		}
 
-            if (gameObject.components.hasComponent('Box') == false) return;
 
-            var box: Kiwi.Components.Box = gameObject.components.getComponent('Box');
+		/**
+		* A method to check to see if the parent of this physics component overlaps with any Entities that are held in an Array which is passed.
+		*
+		* @method overlapsArray
+		* @param array {Array} The array of GameObjects you want to check.
+		* @param [separateObjects=false] {boolean} If when the objects collide you want them to seperate outwards.
+		* @return {boolean} If any overlapping occured or not.
+		* @public
+		*/ 
+		public overlapsArray(array: Array<any>, separateObjects: boolean = false): boolean {
+			
+			var results: boolean = false;
 
-            var result: boolean = (box.worldHitbox.x + box.worldHitbox.width > this.box.worldHitbox.x) && (box.worldHitbox.x < this.box.worldHitbox.x + this.box.worldHitbox.width) &&
-                (box.worldHitbox.y + box.worldHitbox.height > this.box.worldHitbox.y) && (box.worldHitbox.y < this.box.worldHitbox.y + this.box.worldHitbox.height);
+			for (var i = 0; i < array.length; i++) {
 
-            if (result) {
-                if (separateObjects)
-                    ArcadePhysics.separate(<Kiwi.Entity>this.owner, gameObject);
+				if (typeof array[i].childType !== "undefined") {
 
-                if (this._callbackFunction !== null && this._callbackContext !== null) {
-                    this._callbackFunction.call(this._callbackContext, this.owner, gameObject);
-                }
-            }
+					if (array[i].childType() == Kiwi.GROUP) {
 
-            return result;
+						this.overlapsGroup(<Kiwi.Group>array[i], separateObjects);
+						
+					} else {
 
-        }
+						if (this.overlaps(<Kiwi.Entity>array[i], separateObjects)) {
+							if (this._callbackFunction !== null && this._callbackContext !== null) {
+								this._callbackFunction.call(this._callbackContext, this.owner, array[i]);
+							}
+							results = true;
+						}
 
+					}
 
-        /**
-        * A method to check to see if the parent of this physics component overlaps with another individual in a Kiwi Group.
-        * 
-        * @method overlapsGroup
-        * @param group {Kiwi.Group}
-        * @param [seperateObjects=false] {boolean} 
-        * @return { boolean } If any object in the group overlapped with the GameObject or not.
-        * @public
-        */
-        public overlapsGroup(group: Kiwi.Group, separateObjects: boolean = false): boolean {
-
-            var results: boolean = false;
-
-            for (var i = 0; i < group.members.length; i++) {
-
-                if (group.members[i].childType() === Kiwi.GROUP) {
-                    //recursively check overlap
-                    this.overlapsGroup(<Kiwi.Group>group.members[i], separateObjects);
-
-                } else {
-                    //otherwise its an entity
-
-                    if (this.overlaps(<Kiwi.Entity>group.members[i], separateObjects)) {
-                        if (this._callbackContext !== null && this._callbackFunction !== null)
-                            this._callbackFunction.call(this._callbackContext, this.owner, group.members[i]);
-                        results = true;
-                    }
-
-                }
-            }
-
-            return results;
-        }
-
-
-        /**
-        * A method to check to see if the parent of this physics component overlaps with any Entities that are held in an Array which is passed.
-        *
-        * @method overlapsArray
-        * @param array {Array} The array of GameObjects you want to check.
-        * @param [separateObjects=false] {boolean} If when the objects collide you want them to seperate outwards.
-        * @return {boolean} If any overlapping occured or not.
-        * @public
-        */ 
-        public overlapsArray(array: Array<any>, separateObjects: boolean = false): boolean {
-            
-            var results: boolean = false;
-
-            for (var i = 0; i < array.length; i++) {
-
-                if (typeof array[i].childType !== "undefined") {
-
-                    if (array[i].childType() == Kiwi.GROUP) {
-
-                        this.overlapsGroup(<Kiwi.Group>array[i], separateObjects);
-                        
-                    } else {
-
-                        if (this.overlaps(<Kiwi.Entity>array[i], separateObjects)) {
-                            if (this._callbackFunction !== null && this._callbackContext !== null) {
-                                this._callbackFunction.call(this._callbackContext, this.owner, array[i]);
-                            }
-                            results = true;
-                        }
-
-                    }
-
-                }
-
-            }
-            
-            return results;
-        }
-
-
-        /*
-        *-------------
-        * Motion Methods
-        *-------------
-        */
-
-
-        /**
-        * Computes the velocity based on the parameters passed.  
-        * @method computeVelocity
-        * @static
-        * @param velocity {number} The currently velocity.
-        * @param [acceleration=0] {number} The acceleration of the item.
-        * @param [drag=0] {number} The amount of drag effecting the item.
-        * @param [max=10000] {number} The maximum velocity.
-        * @return {Number} The new velocity
-        * @public
-        */
-        public static computeVelocity(velocity: number, acceleration: number = 0, drag: number = 0, max: number = 10000): number {
-
-            if (acceleration != 0)
-                velocity += acceleration * ArcadePhysics.updateInterval;
-            else if (drag != 0) {
-                drag = drag * ArcadePhysics.updateInterval;
-                if (velocity - drag > 0)
-                    velocity = velocity - drag;
-                else if (velocity + drag < 0)
-                    velocity += drag;
-                else
-                    velocity = 0;
-            }
-            if ((velocity != 0) && (max != 10000)) {
-                if (velocity > max)
-                    velocity = max;
-                else if (velocity < -max)
-                    velocity = -max;
-            }
-            return velocity;
-        }
-
-
-        /**
-        * Updates the position of this object. Automatically called if the 'moves' parameter is true.  
-        * This called each frame during the update method.
-        * 
-        * @method updateMotion
-        * @private
-        */
-        public updateMotion() {
-            
-            var delta: number;
-            var velocityDelta: number;
-            
-            //Update the motion calculated from rotation.
-            velocityDelta = (ArcadePhysics.computeVelocity(this.angularVelocity, this.angularAcceleration, this.angularDrag, this.maxAngular) - this.angularVelocity) / 2;
-            this.angularVelocity += velocityDelta;
-            this.transform.rotation += this.angularVelocity * ArcadePhysics.updateInterval;
-            this.angularVelocity += velocityDelta;
-           
-            //Update the motion on the x-axis.
-            velocityDelta = (ArcadePhysics.computeVelocity(this.velocity.x, this.acceleration.x, this.drag.x, this.maxVelocity.x) - this.velocity.x) / 2;
-            this.velocity.x += velocityDelta;
-            delta = this.velocity.x * ArcadePhysics.updateInterval;
-            this.velocity.x += velocityDelta;
-            this.transform.x = this.transform.x + delta;
-
-            //Update the motion on the y-axis.
-            velocityDelta = (ArcadePhysics.computeVelocity(this.velocity.y, this.acceleration.y, this.drag.y, this.maxVelocity.y) - this.velocity.y) / 2;
-            this.velocity.y += velocityDelta;
-            delta = this.velocity.y * ArcadePhysics.updateInterval;
-            this.velocity.y += velocityDelta;
-            this.transform.y = this.transform.y + delta;
-        
-        }
-    
-
-        /**
-        * The Update loop of the physics component
-        * @method update
-        * @public
-        */
-        public update() {
-
-            //Flixel preupdate
-            this.last.x = this.transform.worldX;
-            this.last.y = this.transform.worldY;
-
-            //Flixel postupdate
-            if (this.moves)
-                this.updateMotion();
-
-            this.wasTouching = this.touching;
-            this.touching = ArcadePhysics.NONE;
-
-
-        }
-
-
-        /**
-        * Removes all properties that refer to other objects or outside of this class in order to flag this object for garbage collection.
-        * @method destroy
-        * @public
-        */
-        public destroy() {
-            super.destroy();
-
-            delete this.transform;
-            delete this.owner;
-            delete this._callbackContext;
-            delete this._callbackFunction;
-        }
-
-
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {string} "ArcadePhysics"
-        * @public
-        */
-        public objType() {
-            return "ArcadePhysics";
-        }
-
-
-        /*
-        *----------------
-        * Static Functions
-        *----------------
-        */
-
-
-        /*
-        *----------------
-        * Collide Functions - Maps to Overlaps
-        *----------------
-        */
-
-
-        /**
-        * A Static method to check to see if two objects collide or not. Returns a boolean indicating whether they overlaped or not.
-        *
-        * @method collide
-        * @static
-        * @public
-        * @param gameObject1 {Kiwi.Entity} The first game object.
-        * @param gameObject2 {Kiwi.Entity} The second game object.
-        * @param [seperate=true] {boolean} If the two gameobjects should seperated when they collide.
-        * @return {boolean}
-        */
-        public static collide(gameObject1: Entity, gameObject2: Entity, seperate: boolean = true): boolean {
-            return ArcadePhysics.overlaps(gameObject1, gameObject2, seperate);
-        }
-
-
-        /**
-        * A Static method to check to see if a single entity collides with a group of entities. Returns a boolean indicating whether they overlaped or not.
-        *
-        * @method collideGroup
-        * @static
-        * @public
-        * @param gameObject {Kiwi.Entity} The entity you would like to check against.
-        * @param group {Kiwi.Group} The Kiwi Group that you want to check the entity against. 
-        * @param [seperate=true] {boolean} 
-        * @return {boolean}
-        * @public
-        */
-        public static collideGroup(gameObject: Entity, group: Kiwi.Group, seperate: boolean = true): boolean {
-
-            return ArcadePhysics.overlapsObjectGroup(gameObject, group, seperate);
-        }
-
-
-        /**
-        * A Static method to check to see if a group of entities overlap with another group of entities. Returns a boolean indicating whether they overlaped or not.
-        *
-        * @method collideGroupGroup
-        * @static
-        * @public
-        * @param group1 {Kiwi.Group} The first Kiwi Group that you want to check the entity against. 
-        * @param group2 {Kiwi.Group} The second Kiwi Group that you want to check the entity against. 
-        * @param [seperate=true] {boolean}
-        * @return {boolean}
-        */
-        public static collideGroupGroup(group1: Kiwi.Group, group2: Kiwi.Group, seperate: boolean = true): boolean {
-
-            return ArcadePhysics.overlapsGroupGroup(group1, group2, seperate);
-        }
-
-
-        /*
-        *-------------
-        * Overlap Static Method - Use's the Arcade Physics of one of the gameobjects passed.
-        *-------------
-        */
-
-
-        /**
-        * A Static method to that checks to see if two objects overlap. Returns a boolean indicating whether they did or not.
-        *
-        * @method overlaps
-        * @static
-        * @public
-        * @param gameObject1 {Kiwi.Entity} The first game object.
-        * @param gameObject2 {Kiwi.Entity} The second gameobject you are testing the first against.
-        * @param [separateObjects=true] {boolean} 
-        * @return {boolean}
-        */
-        public static overlaps(gameObject1: Entity, gameObject2: Entity, separateObjects: boolean = true): boolean {
-
-            var obj1Physics: ArcadePhysics = gameObject1.components.getComponent("ArcadePhysics");
-            return obj1Physics.overlaps(gameObject2, separateObjects);
-        }
-
-
-        /**
-        * A Static method to that checks to see if a single object overlaps with a group of entities. Returns a boolean indicating whether they did or not.
-        *
-        * @method overlapsObjectGroup
-        * @static
-        * @param gameObject {Kiwi.Entity}
-        * @param group {Kiwi.Group} 
-        * @param [seperateObjects=true] {boolean} If they overlap should the seperate or not
-        * @return {boolean}
-        * @public
-        */
-        public static overlapsObjectGroup(gameObject: Entity, group: Kiwi.Group, separateObjects: boolean = true): boolean {
-
-            var objPhysics: ArcadePhysics = gameObject.components.getComponent("ArcadePhysics");
-            return objPhysics.overlapsGroup(group, separateObjects);
-        }
-
-
-        /**
-        * A Static method that checks to see if any objects in one group overlap with objects in another group.
-        *
-        * @method overlaps
-        * @static
-        * @param group1 {Kiwi.Group} The first group you would like to check against.
-        * @param group2 {Kiwi.Group} The second group you would like to check against.
-        * @param [seperate=true] {boolean} If they overlap should the seperate or not
-        * @return {boolean}
-        * @public
-        */
-        public static overlapsGroupGroup(group1: Kiwi.Group, group2: Kiwi.Group, separateObjects: boolean = true): boolean {
-
-            var result: boolean = false;
-
-            var members: IChild[] = group1.members;
-            var i: number = 0;
-
-            while (i < group1.members.length) {
-                if (members[i].childType() == Kiwi.GROUP) {
-                    if (ArcadePhysics.overlapsGroupGroup(<Kiwi.Group>members[i++], group2, separateObjects)) result = true;
-
-                } else {
-                    if (ArcadePhysics.overlapsObjectGroup(<Kiwi.Entity>members[i++], group2, separateObjects)) result = true;
-
-                }
-            }
-
-            return result;
-        }
-
-
-        /**
-        * A Static method that checks to see if any objects from an Array collide with a Kiwi Group members.
-        * 
-        * @method overlapsArrayGroup
-        * @param array {Array} An array you want to check collide.
-        * @param group {Kiwi.Group} A group of objects you want to check overlaps.
-        * @param [seperateObjects=true] {Boolean} If when a collision is found the objects should seperate out.
-        * @return {Boolean} 
-        * @static
-        */
-        public static overlapsArrayGroup(array: Array<any>, group: Kiwi.Group, separateObjects: boolean = true) {
-
-            var result: boolean = false;
-
-            //loop through the array 
-            for (var i = 0; i < array.length; i++) {
-                if (typeof array[i].childType !== "undefined") {
-
-                    if (array[i].childType() === Kiwi.GROUP) {
-                        if (ArcadePhysics.overlapsGroupGroup(<Kiwi.Group>array[i], group, separateObjects))
-                            result = true;
-
-                    } else {
-                        if (ArcadePhysics.overlapsObjectGroup(<Kiwi.Entity>array[i], group, separateObjects))
-                            result = true;
-                    }
-
-                }
-            }
-
-            return result;
-        }
-
-
-        /*
-        *---------------
-        * Static Constants 
-        *---------------
-        */
-
-
-        /**
-        * How often the motion should be updated.
-        * @property updateInterval
-        * @static
-        * @default 1 / 10
-        * @type number
-        * @public
-        */
-        public static updateInterval: number = 1 / 10;
-
-
-        /**
-        * Generic value for "left" Used by <code>facing</code>, <code>allowCollisions</code>, and <code>touching</code>.
-        * @property LEFT
-        * @type number
-        * @default 0x0001
-        * @public
-        * @static
-        */
-        public static LEFT: number = 0x0001;
-
-
-        /**
-        * Generic value for "right" Used by <code>facing</code>, <code>allowCollisions</code>, and <code>touching</code>.
-        * @property RIGHT
-        * @type number
-        * @default 0x0010
-        * @public
-        * @static
-        */
-        public static RIGHT: number = 0x0010;
-
-
-        /**
-        * Generic value for "up" Used by <code>facing</code>, <code>allowCollisions</code>, and <code>touching</code>.
-        * @property UP
-        * @type number
-        * @default 0x0100
-        * @public
-        * @static
-        */
-        public static UP: number = 0x0100;
-
-
-        /**
-        * Generic value for "down" Used by <code>facing</code>, <code>allowCollisions</code>, and <code>touching</code>.
-        * @property DOWN
-        * @type number
-        * @default 0x1000
-        * @public
-        * @static
-        */
-        public static DOWN: number = 0x1000;
-
-
-        /**
-        * Special-case constant meaning no collisions, used mainly by <code>allowCollisions</code> and <code>touching</code>.
-        * @property NONE
-        * @type number
-        * @default 0
-        * @public
-        * @static
-        */
-        public static NONE: number = 0;
-
-
-        /**
-        * Special-case constant meaning up, used mainly by <code>allowCollisions</code> and <code>touching</code>.
-        * @property CEILING
-        * @type number
-        * @default 0x0100
-        * @public
-        * @static
-        */
-        public static CEILING: number = ArcadePhysics.UP;
-
-
-        /**
-        * Special-case constant meaning down, used mainly by <code>allowCollisions</code> and <code>touching</code>.
-        * @property FLOOR
-        * @type number
-        * @default 0x1000
-        * @public
-        * @static
-        */
-        public static FLOOR: number = ArcadePhysics.DOWN;
-
-
-        /**
-        * Special-case constant meaning only the left and right sides, used mainly by <code>allowCollisions</code> and <code>touching</code>.
-        * @property WALL
-        * @type number
-        * @default 0x0011
-        * @public
-        * @static
-        */
-        public static WALL: number = ArcadePhysics.LEFT | ArcadePhysics.RIGHT;
-
-
-        /**
-        * Special-case constant meaning any direction, used mainly by <code>allowCollisions</code> and <code>touching</code>.
-        * @property ANY
-        * @type number
-        * @default 0x1111
-        * @public
-        * @static
-        */
-        public static ANY: number = ArcadePhysics.LEFT | ArcadePhysics.RIGHT | ArcadePhysics.UP | ArcadePhysics.DOWN;
-
-
-        /**
-        * Handy constant used during collision resolution (see <code>separateX()</code> and <code>separateY()</code>).
-        * @property OVERLAP_BIAS
-        * @type number
-        * @default 4
-        * @public
-        * @static
-        */
-        public static OVERLAP_BIAS: number = 4;
-
-
-    }
+				}
 
-}
+			}
+			
+			return results;
+		}
+
+
+		/*
+		*-------------
+		* Motion Methods
+		*-------------
+		*/
+
+
+		/**
+		* Computes the velocity based on the parameters passed.  
+		* @method computeVelocity
+		* @static
+		* @param velocity {number} The currently velocity.
+		* @param [acceleration=0] {number} The acceleration of the item.
+		* @param [drag=0] {number} The amount of drag effecting the item.
+		* @param [max=10000] {number} The maximum velocity.
+		* @return {Number} The new velocity
+		* @public
+		*/
+		public static computeVelocity(velocity: number, acceleration: number = 0, drag: number = 0, max: number = 10000): number {
+
+			if (acceleration != 0)
+				velocity += acceleration * ArcadePhysics.updateInterval;
+			else if (drag != 0) {
+				drag = drag * ArcadePhysics.updateInterval;
+				if (velocity - drag > 0)
+					velocity = velocity - drag;
+				else if (velocity + drag < 0)
+					velocity += drag;
+				else
+					velocity = 0;
+			}
+			if ((velocity != 0) && (max != 10000)) {
+				if (velocity > max)
+					velocity = max;
+				else if (velocity < -max)
+					velocity = -max;
+			}
+			return velocity;
+		}
+
+
+		/**
+		* Updates the position of this object. Automatically called if the 'moves' parameter is true.  
+		* This called each frame during the update method.
+		* 
+		* @method updateMotion
+		* @private
+		*/
+		public updateMotion() {
+			
+			var delta: number;
+			var velocityDelta: number;
+			
+			//Update the motion calculated from rotation.
+			velocityDelta = (ArcadePhysics.computeVelocity(this.angularVelocity, this.angularAcceleration, this.angularDrag, this.maxAngular) - this.angularVelocity) / 2;
+			this.angularVelocity += velocityDelta;
+			this.transform.rotation += this.angularVelocity * ArcadePhysics.updateInterval;
+			this.angularVelocity += velocityDelta;
+		   
+			//Update the motion on the x-axis.
+			velocityDelta = (ArcadePhysics.computeVelocity(this.velocity.x, this.acceleration.x, this.drag.x, this.maxVelocity.x) - this.velocity.x) / 2;
+			this.velocity.x += velocityDelta;
+			delta = this.velocity.x * ArcadePhysics.updateInterval;
+			this.velocity.x += velocityDelta;
+			this.transform.x = this.transform.x + delta;
+
+			//Update the motion on the y-axis.
+			velocityDelta = (ArcadePhysics.computeVelocity(this.velocity.y, this.acceleration.y, this.drag.y, this.maxVelocity.y) - this.velocity.y) / 2;
+			this.velocity.y += velocityDelta;
+			delta = this.velocity.y * ArcadePhysics.updateInterval;
+			this.velocity.y += velocityDelta;
+			this.transform.y = this.transform.y + delta;
+		
+		}
+
+
+		/**
+		* The Update loop of the physics component
+		* @method update
+		* @public
+		*/
+		public update() {
+
+			//Flixel preupdate
+			this.last.x = this.transform.worldX;
+			this.last.y = this.transform.worldY;
+
+			//Flixel postupdate
+			if (this.moves)
+				this.updateMotion();
+
+			this.wasTouching = this.touching;
+			this.touching = ArcadePhysics.NONE;
+
+
+		}
 
+
+		/**
+		* Removes all properties that refer to other objects or outside of this class in order to flag this object for garbage collection.
+		* @method destroy
+		* @public
+		*/
+		public destroy() {
+			super.destroy();
+
+			delete this.transform;
+			delete this.owner;
+			delete this._callbackContext;
+			delete this._callbackFunction;
+		}
+
+
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {string} "ArcadePhysics"
+		* @public
+		*/
+		public objType() {
+			return "ArcadePhysics";
+		}
+
+
+		/*
+		*----------------
+		* Static Functions
+		*----------------
+		*/
+
+
+		/*
+		*----------------
+		* Collide Functions - Maps to Overlaps
+		*----------------
+		*/
+
+
+		/**
+		* A Static method to check to see if two objects collide or not. Returns a boolean indicating whether they overlaped or not.
+		*
+		* @method collide
+		* @static
+		* @public
+		* @param gameObject1 {Kiwi.Entity} The first game object.
+		* @param gameObject2 {Kiwi.Entity} The second game object.
+		* @param [seperate=true] {boolean} If the two gameobjects should seperated when they collide.
+		* @return {boolean}
+		*/
+		public static collide(gameObject1: Entity, gameObject2: Entity, seperate: boolean = true): boolean {
+			return ArcadePhysics.overlaps(gameObject1, gameObject2, seperate);
+		}
+
+
+		/**
+		* A Static method to check to see if a single entity collides with a group of entities. Returns a boolean indicating whether they overlaped or not.
+		*
+		* @method collideGroup
+		* @static
+		* @public
+		* @param gameObject {Kiwi.Entity} The entity you would like to check against.
+		* @param group {Kiwi.Group} The Kiwi Group that you want to check the entity against. 
+		* @param [seperate=true] {boolean} 
+		* @return {boolean}
+		* @public
+		*/
+		public static collideGroup(gameObject: Entity, group: Kiwi.Group, seperate: boolean = true): boolean {
+
+			return ArcadePhysics.overlapsObjectGroup(gameObject, group, seperate);
+		}
+
+
+		/**
+		* A Static method to check to see if a group of entities overlap with another group of entities. Returns a boolean indicating whether they overlaped or not.
+		*
+		* @method collideGroupGroup
+		* @static
+		* @public
+		* @param group1 {Kiwi.Group} The first Kiwi Group that you want to check the entity against. 
+		* @param group2 {Kiwi.Group} The second Kiwi Group that you want to check the entity against. 
+		* @param [seperate=true] {boolean}
+		* @return {boolean}
+		*/
+		public static collideGroupGroup(group1: Kiwi.Group, group2: Kiwi.Group, seperate: boolean = true): boolean {
+
+			return ArcadePhysics.overlapsGroupGroup(group1, group2, seperate);
+		}
+
+
+		/*
+		*-------------
+		* Overlap Static Method - Use's the Arcade Physics of one of the gameobjects passed.
+		*-------------
+		*/
+
+
+		/**
+		* A Static method to that checks to see if two objects overlap. Returns a boolean indicating whether they did or not.
+		*
+		* @method overlaps
+		* @static
+		* @public
+		* @param gameObject1 {Kiwi.Entity} The first game object.
+		* @param gameObject2 {Kiwi.Entity} The second gameobject you are testing the first against.
+		* @param [separateObjects=true] {boolean} 
+		* @return {boolean}
+		*/
+		public static overlaps(gameObject1: Entity, gameObject2: Entity, separateObjects: boolean = true): boolean {
+
+			var obj1Physics: ArcadePhysics = gameObject1.components.getComponent("ArcadePhysics");
+			return obj1Physics.overlaps(gameObject2, separateObjects);
+		}
+
+
+		/**
+		* A Static method to that checks to see if a single object overlaps with a group of entities. Returns a boolean indicating whether they did or not.
+		*
+		* @method overlapsObjectGroup
+		* @static
+		* @param gameObject {Kiwi.Entity}
+		* @param group {Kiwi.Group} 
+		* @param [seperateObjects=true] {boolean} If they overlap should the seperate or not
+		* @return {boolean}
+		* @public
+		*/
+		public static overlapsObjectGroup(gameObject: Entity, group: Kiwi.Group, separateObjects: boolean = true): boolean {
+
+			var objPhysics: ArcadePhysics = gameObject.components.getComponent("ArcadePhysics");
+			return objPhysics.overlapsGroup(group, separateObjects);
+		}
+
+
+		/**
+		* A Static method that checks to see if any objects in one group overlap with objects in another group.
+		*
+		* @method overlaps
+		* @static
+		* @param group1 {Kiwi.Group} The first group you would like to check against.
+		* @param group2 {Kiwi.Group} The second group you would like to check against.
+		* @param [seperate=true] {boolean} If they overlap should the seperate or not
+		* @return {boolean}
+		* @public
+		*/
+		public static overlapsGroupGroup(group1: Kiwi.Group, group2: Kiwi.Group, separateObjects: boolean = true): boolean {
+
+			var result: boolean = false;
+
+			var members: IChild[] = group1.members;
+			var i: number = 0;
+
+			while (i < group1.members.length) {
+				if (members[i].childType() == Kiwi.GROUP) {
+					if (ArcadePhysics.overlapsGroupGroup(<Kiwi.Group>members[i++], group2, separateObjects)) result = true;
+
+				} else {
+					if (ArcadePhysics.overlapsObjectGroup(<Kiwi.Entity>members[i++], group2, separateObjects)) result = true;
+
+				}
+			}
+
+			return result;
+		}
+
+
+		/**
+		* A Static method that checks to see if any objects from an Array collide with a Kiwi Group members.
+		* 
+		* @method overlapsArrayGroup
+		* @param array {Array} An array you want to check collide.
+		* @param group {Kiwi.Group} A group of objects you want to check overlaps.
+		* @param [seperateObjects=true] {Boolean} If when a collision is found the objects should seperate out.
+		* @return {Boolean} 
+		* @static
+		*/
+		public static overlapsArrayGroup(array: Array<any>, group: Kiwi.Group, separateObjects: boolean = true) {
+
+			var result: boolean = false;
+
+			//loop through the array 
+			for (var i = 0; i < array.length; i++) {
+				if (typeof array[i].childType !== "undefined") {
+
+					if (array[i].childType() === Kiwi.GROUP) {
+						if (ArcadePhysics.overlapsGroupGroup(<Kiwi.Group>array[i], group, separateObjects))
+							result = true;
+
+					} else {
+						if (ArcadePhysics.overlapsObjectGroup(<Kiwi.Entity>array[i], group, separateObjects))
+							result = true;
+					}
+
+				}
+			}
+
+			return result;
+		}
+
+
+		/*
+		*---------------
+		* Static Constants 
+		*---------------
+		*/
+
+
+		/**
+		* How often the motion should be updated.
+		* @property updateInterval
+		* @static
+		* @default 1 / 10
+		* @type number
+		* @public
+		*/
+		public static updateInterval: number = 1 / 10;
+
+
+		/**
+		* Generic value for "left" Used by <code>facing</code>, <code>allowCollisions</code>, and <code>touching</code>.
+		* @property LEFT
+		* @type number
+		* @default 0x0001
+		* @public
+		* @static
+		*/
+		public static LEFT: number = 0x0001;
+
+
+		/**
+		* Generic value for "right" Used by <code>facing</code>, <code>allowCollisions</code>, and <code>touching</code>.
+		* @property RIGHT
+		* @type number
+		* @default 0x0010
+		* @public
+		* @static
+		*/
+		public static RIGHT: number = 0x0010;
+
+
+		/**
+		* Generic value for "up" Used by <code>facing</code>, <code>allowCollisions</code>, and <code>touching</code>.
+		* @property UP
+		* @type number
+		* @default 0x0100
+		* @public
+		* @static
+		*/
+		public static UP: number = 0x0100;
+
+
+		/**
+		* Generic value for "down" Used by <code>facing</code>, <code>allowCollisions</code>, and <code>touching</code>.
+		* @property DOWN
+		* @type number
+		* @default 0x1000
+		* @public
+		* @static
+		*/
+		public static DOWN: number = 0x1000;
+
+
+		/**
+		* Special-case constant meaning no collisions, used mainly by <code>allowCollisions</code> and <code>touching</code>.
+		* @property NONE
+		* @type number
+		* @default 0
+		* @public
+		* @static
+		*/
+		public static NONE: number = 0;
+
+
+		/**
+		* Special-case constant meaning up, used mainly by <code>allowCollisions</code> and <code>touching</code>.
+		* @property CEILING
+		* @type number
+		* @default 0x0100
+		* @public
+		* @static
+		*/
+		public static CEILING: number = ArcadePhysics.UP;
+
+
+		/**
+		* Special-case constant meaning down, used mainly by <code>allowCollisions</code> and <code>touching</code>.
+		* @property FLOOR
+		* @type number
+		* @default 0x1000
+		* @public
+		* @static
+		*/
+		public static FLOOR: number = ArcadePhysics.DOWN;
+
+
+		/**
+		* Special-case constant meaning only the left and right sides, used mainly by <code>allowCollisions</code> and <code>touching</code>.
+		* @property WALL
+		* @type number
+		* @default 0x0011
+		* @public
+		* @static
+		*/
+		public static WALL: number = ArcadePhysics.LEFT | ArcadePhysics.RIGHT;
+
+
+		/**
+		* Special-case constant meaning any direction, used mainly by <code>allowCollisions</code> and <code>touching</code>.
+		* @property ANY
+		* @type number
+		* @default 0x1111
+		* @public
+		* @static
+		*/
+		public static ANY: number = ArcadePhysics.LEFT | ArcadePhysics.RIGHT | ArcadePhysics.UP | ArcadePhysics.DOWN;
+
+
+		/**
+		* Handy constant used during collision resolution (see <code>separateX()</code> and <code>separateY()</code>).
+		* @property OVERLAP_BIAS
+		* @type number
+		* @default 4
+		* @public
+		* @static
+		*/
+		public static OVERLAP_BIAS: number = 4;
+
+
+	}
+
+}
diff --git a/src/components/Box.ts b/src/components/Box.ts
index 3636305..158a57d 100644
--- a/src/components/Box.ts
+++ b/src/components/Box.ts
@@ -3,501 +3,497 @@
 * @module Kiwi
 * @submodule Components 
 * 
-*/ 
+*/
 
 module Kiwi.Components {
 
-    /**
-    * The Box Component is used to handle the various 'bounds' that each GameObject has. 
-    * There are two main different types of bounds (Bounds and Hitbox) with each one having three variants (each one is a rectangle) depending on what you are wanting:
-    *
-    * RawBounds: The bounding box of the GameObject before rotation/scale.
-    * 
-    * RawHitbox: The hitbox of the GameObject before rotation/scale. This can be modified to be different than the normal bounds but if not specified it will be the same as the raw bounds.
-    *
-    * Bounds: The bounding box of the GameObject after rotation/scale.
-    *
-    * Hitbox: The hitbox of the GameObject after rotation/scale. If you modified the raw hitbox then this one will be modified as well, otherwise it will be the same as the normal bounds.
-    *
-    * WorldBounds: The bounding box of the Entity using its world coordinates and after rotation/scale.
-    *
-    * WorldHitbox: The hitbox of the Entity using its world coordinates and after rotation/scale.
-    *
-    * @class Box
-    * @extends Kiwi.Component
-    * @namespace Kiwi.Components
-    * @constructor
-    * @param parent {Kiwi.Entity} The entity that this box belongs to.
-    * @param [x=0] {Number} Its position on the x axis
-    * @param [y=0] {Number} Its position on the y axis
-    * @param [width=0] {Number} The width of the box.
-    * @param [height=0] {Number} The height of the box.
-    * @return {Kiwi.Components.Box}
-    */
-    export class Box extends Component {
- 
-        constructor(parent: Entity, x: number = 0, y: number = 0, width: number = 0, height: number = 0) {
-            
-            super(parent, 'Box');
-            
-            this.entity = parent;
-
-            this._rawBounds = new Kiwi.Geom.Rectangle(x,y,width,height);
-            this._rawCenter = new Kiwi.Geom.Point(x + width / 2, y + height / 2);
-            this._rawHitbox = new Kiwi.Geom.Rectangle();
-
-            this._hitboxOffset = new Kiwi.Geom.Point();
-
-            this.hitbox = new Kiwi.Geom.Rectangle(0, 0, width, height); 
-            this.autoUpdate = true;
-        }
-
-
-        /**
-        * The entity that this box belongs to.
-        * @property entity
-        * @type Kiwi.Entity
-        * @public
-        */
-        public entity: Kiwi.Entity;
-
-
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {string} "Box"
-        * @public
-        */
-        public objType() {
-            return "Box";
-        }
-
-
-        /**
-        * Controls whether the hitbox should update automatically to match the hitbox of the current cell on the entity this Box component is attached to (default behaviour).
-        * Or if the hitbox shouldn't auto update. Which will mean it will stay the same as the last value it had. 
-        * This property is automatically set to 'false' when you override the hitboxes width/height, but you can set this to true afterwards. 
-        * 
-        * @property autoUpdate
-        * @type boolean
-        * @default true
-        * @private
-        */
-        public autoUpdate: boolean = true;
-
-
-        /**
-        * Indicates whether or not this component needs re-rendering/updating or not.
-        * @property dirty
-        * @type boolean
-        * @public
-        * @deprecated in version 1.1.0 because the box always needed updating
-        */
-        public dirty: boolean;
-
-
-
-        /**
-        * Contains offset point for the hitbox 
-        * @property _hitboxOffset
-        * @type Kiwi.Geom.Point
-        * @private
-        */
-        private _hitboxOffset: Kiwi.Geom.Point;
-        
-
-
-        /**
-        * Returns the offset value of the hitbox as a point for the X/Y axis for the developer to use.
-        * This is without rotation or scaling.
-        * This is a READ ONLY property.
-        * @property hitboxOffset
-        * @type Kiwi.Geom.Point
-        * @public
-        */
-        public get hitboxOffset(): Kiwi.Geom.Point {
-
-            if ( this.autoUpdate == true && this.entity.atlas !== null && this.entity.atlas.cells && this.entity.atlas.cells[ 0 ].hitboxes ) {
-                this._hitboxOffset.x =
-                    this.entity.atlas.cells[this.entity.cellIndex].hitboxes[0].x || 0;
-                this._hitboxOffset.y =
-                    this.entity.atlas.cells[this.entity.cellIndex].hitboxes[0].y || 0;
-
-            }
-
-            return this._hitboxOffset;
-        }
-
-
-
-        /**
-        * Contains the offset rectangle for the raw hitbox. 
-        * @property _rawHitbox
-        * @type Kiwi.Geom.Rectangle
-        * @private
-        */
-        private _rawHitbox: Kiwi.Geom.Rectangle;
-        
-
-        /**
-        * Returns the raw hitbox rectangle for the developer to use. 
-        * 'Raw' means where it would be without rotation or scaling.
-        * This is READ ONLY.
-        * @property rawHitbox
-        * @type Kiwi.Geom.Rectangle
-        * @public
-        */
-        public get rawHitbox(): Kiwi.Geom.Rectangle {
-
-            this._rawHitbox.x = this.rawBounds.x + this.hitboxOffset.x;
-            this._rawHitbox.y = this.rawBounds.y + this.hitboxOffset.y;
-
-            //If the hitbox has not already been set, then update the width/height based upon the current cell that the entity has.
-            if (this.autoUpdate == true) {
-                var atlas = this.entity.atlas;
-
-                if ( atlas !== null && atlas.cells && atlas.cells[ 0 ].hitboxes ) {
-                    this._rawHitbox.width = atlas.cells[ this.entity.cellIndex ].hitboxes[ 0 ].w;
-                    this._rawHitbox.height = atlas.cells[ this.entity.cellIndex ].hitboxes[ 0 ].h;
-                } else {
-                    this._rawHitbox.width = this.entity.width;
-                    this._rawHitbox.height = this.entity.height;
-                }
-            }
-            
-            return this._rawHitbox;
-        }
-        
-
-
-        /**
-        * The transformed or 'normal' hitbox for the entity. This is its box after rotation/scale.
-        * @property _transformedHitbox
-        * @type Kiwi.Geom.Rectangle
-        * @private
-        */
-        private _transformedHitbox: Kiwi.Geom.Rectangle;
-        
-
-        /** 
-        * The transformed 'world' hitbox for the entity. This is its box after rotation/scale.
-        * @property _worldHitbox
-        * @type Kiwi.Geom.Rectangle
-        * @private
-        */
-        private _worldHitbox: Kiwi.Geom.Rectangle;
-
-
-        /**
-        * The 'normal' or transformed hitbox for the entity. This is its box after rotation/Kiwi.Geom.Rectangle. 
-        * @property hitbox
-        * @type Kiwi.Geom.Rectangle
-        * @public
-        */
-        public get hitbox(): Kiwi.Geom.Rectangle {
-            this._transformedHitbox = this._rotateHitbox(this.rawHitbox.clone());
-
-            return this._transformedHitbox;
-        }
-        public set hitbox(value: Kiwi.Geom.Rectangle) {
-            
-            //Use custom hitbox defined by user.
-
-            this._hitboxOffset.x = value.x;
-            this._hitboxOffset.y = value.y;
-
-            this._rawHitbox = value;
-            
-            this._rawHitbox.x += this._rawBounds.x;
-            this._rawHitbox.y += this._rawBounds.y;
-
-            this.autoUpdate = false;
-
-        }
-
-
-
-        /**
-        * Returns the transformed hitbox for the entity using its 'world' coordinates.
-        * This is READ ONLY.
-        * @property worldHitbox
-        * @type Kiwi.Geom.Rectangle
-        * @public
-        */
-        public get worldHitbox(): Kiwi.Geom.Rectangle {
-            this._worldHitbox = this._rotateHitbox(this.rawHitbox.clone(), true);
-
-            return this._worldHitbox;
-        }
-
-
-
-        /**
-        * The 'raw' bounds of entity. This is its bounds before rotation/scale.
-        * This for property is only for storage of the values and should be accessed via the getter 'rawBounds' so that it can update.
-        * 
-        * @property _rawBounds
-        * @type Kiwi.Geom.Rectangle
-        * @private
-        */
-        private _rawBounds: Kiwi.Geom.Rectangle;
-
-
-
-        /**
-        * Returns the 'raw' bounds for this entity.
-        * This is READ ONLY.
-        * @property rawBounds
-        * @type Kiwi.Geom.Rectangle
-        * @public
-        */
-        public get rawBounds(): Kiwi.Geom.Rectangle {
-            this._rawBounds.x = this.entity.x;
-            this._rawBounds.y = this.entity.y;
-            this._rawBounds.width = this.entity.width;
-            this._rawBounds.height = this.entity.height;
-
-            return this._rawBounds;
-        }
-    
-
-
-        /**
-        * Contains the 'raw' center point for the bounds.
-        * @property Kiwi.Geom.Point
-        * @type Kiwi.Geom.Point
-        * @private
-        */
-        private _rawCenter: Kiwi.Geom.Point;
-        
-
-
-        /**
-        * Returns the raw center point of the box.
-        * This is READ ONLY.
-        * @property rawCenter
-        * @type Kiwi.Geom.Point
-        * @public
-        */
-        public get rawCenter(): Kiwi.Geom.Point {
-            this._rawCenter.x = this.rawBounds.x + this.rawBounds.width / 2;
-            this._rawCenter.y = this.rawBounds.y + this.rawBounds.height / 2;
-
-            return this._rawCenter;
-        }
-
-
-        /**
-        * Contains the center point after the box has been transformed.
-        * @property _transformedCenter
-        * @type Kiwi.Geom.Point
-        * @private
-        */
-        private _transformedCenter: Kiwi.Geom.Point;
-
-
-        /**
-        * Returns the center point for the box after it has been transformed.
-        * World coordinates.
-        * This is READ ONLY.
-        * @property center
-        * @type Kiwi.Geom.Point
-        * @public
-        */
-        public get center(): Kiwi.Geom.Point {
-            var m: Kiwi.Geom.Matrix = this.entity.transform.getConcatenatedMatrix();
-
-            this._transformedCenter = m.transformPoint(
-                new Kiwi.Geom.Point(
-                    this.entity.width / 2 - this.entity.anchorPointX,
-                    this.entity.height / 2 - this.entity.anchorPointY ) );
-
-            return this._transformedCenter;
-        }
-
-
-
-        /**
-        * Contains the transformed or 'normal' bounds for this entity.
-        * @property _transformedBounds
-        * @type Kiwi.Geom.Rectangle
-        * @private
-        */
-        private _transformedBounds: Kiwi.Geom.Rectangle;
-
-
-        /**
-        * The 'world' transformed bounds for this entity. 
-        * @property _worldBounds
-        * @type Kiwi.Geom.Rectangle
-        * @private
-        */
-        private _worldBounds: Kiwi.Geom.Rectangle;
-
-
-        /**
-        * Returns the 'transformed' or 'normal' bounds for this box. 
-        * This is READ ONLY.
-        * @property bounds
-        * @type Kiwi.Geom.Rectangle
-        * @public
-        */
-        public get bounds(): Kiwi.Geom.Rectangle {
-            this._transformedBounds = this._rotateRect(this.rawBounds.clone()); 
-            
-            return this._transformedBounds;
-        }
-
-        /**
-        * Returns the 'transformed' bounds for this entity using the world coodinates.
-        * This is READ ONLY.
-        * @property worldBounds
-        * @type Kiwi.Geom.Rectangle
-        * @public
-        */
-        public get worldBounds(): Kiwi.Geom.Rectangle {
-            this._worldBounds = this._rotateRect(this.rawBounds.clone(), true);
-
-            return this._worldBounds;
-        }
-
-        /**
-        * Private internal method only. Used to calculate the transformed bounds after rotation/scale.
-        * @method _rotateRect
-        * @param rect {Kiwi.Geom.Rectangle}
-        * @param [useWorldCoords=false] {Boolean}
-        * @return {Kiwi.Geom.Rectangle}
-        * @private
-        */
-        private _rotateRect(rect: Kiwi.Geom.Rectangle, useWorldCoords: boolean=false): Kiwi.Geom.Rectangle {
-            var out: Kiwi.Geom.Rectangle = new Kiwi.Geom.Rectangle();
-            var t: Kiwi.Geom.Transform = this.entity.transform;
-            var m: Kiwi.Geom.Matrix = t.getConcatenatedMatrix();
-            
-            //Use world coordinates?
-            if( !useWorldCoords )
-            {
-            	m.setTo(m.a, m.b, m.c, m.d, t.x + t.rotPointX, t.y + t.rotPointY);
-            }
-
-            out = this.extents(
-                m.transformPoint({ x: - t.rotPointX, y: - t.rotPointY }),
-                m.transformPoint({ x: - t.rotPointX + rect.width, y: - t.rotPointY }),
-                m.transformPoint({ x: - t.rotPointX + rect.width, y: - t.rotPointY + rect.height }),
-                m.transformPoint({ x: - t.rotPointX, y: - t.rotPointY + rect.height })
-                );
-            return out;
-        }
-
-
-
-        /**
-        * A private method that is used to calculate the transformed hitbox's coordinates after rotation. 
-        * @method _rotateHitbox
-        * @param rect {Kiwi.Geom.Rectangle} 
-        * @param [useWorldCoords=false] {Boolean}
-        * @return {Kiwi.Geom.Rectangle}
-        * @private
-        */
-        private _rotateHitbox(rect: Kiwi.Geom.Rectangle, useWorldCoords: boolean=false): Kiwi.Geom.Rectangle {
-            var out: Kiwi.Geom.Rectangle = new Kiwi.Geom.Rectangle();
-            var t: Kiwi.Geom.Transform = this.entity.transform;
-            var m: Kiwi.Geom.Matrix = t.getConcatenatedMatrix();
-
-            //Use world coordinates?
-            if( !useWorldCoords )
-            {
-            	m.setTo(m.a, m.b, m.c, m.d, t.x + t.rotPointX, t.y + t.rotPointY);
-            }
-
-            out = this.extents(
-                m.transformPoint({ x: - t.rotPointX + this._hitboxOffset.x,              y: - t.rotPointY + this._hitboxOffset.y }),
-                m.transformPoint({ x: - t.rotPointX + rect.width + this._hitboxOffset.x, y: - t.rotPointY +  this._hitboxOffset.y }),
-                m.transformPoint({ x: - t.rotPointX + rect.width + this._hitboxOffset.x, y: - t.rotPointY + rect.height + this._hitboxOffset.y}),
-                m.transformPoint({ x: - t.rotPointX + this._hitboxOffset.x,              y: - t.rotPointY + rect.height + this._hitboxOffset.y })
-                );
-           
-            return out;
-        }
-
-
-
-        /**
-        * Draws the various bounds on a context that is passed. Useful for debugging and using in combination with the debug canvas.
-        * @method draw
-        * @param ctx {CanvasRenderingContext2D} Context of the canvas that this box component is to be rendered on top of.
-        * @param [camera] {Kiwi.Camera} A camera that should be taken into account before rendered. This is the default camera by default.
-        * @public
-        */
-        public draw(ctx: CanvasRenderingContext2D, camera: Kiwi.Camera = this.game.cameras.defaultCamera) {
-            var t: Kiwi.Geom.Transform = this.entity.transform;
-            var ct: Kiwi.Geom.Transform = camera.transform;
-            
-            // Draw raw bounds and raw center
-            ctx.strokeStyle = "red";
-            ctx.fillRect(this.rawCenter.x + ct.x - 1, this.rawCenter.y + ct.y - 1, 3, 3);
-            ctx.strokeRect(t.x + ct.x + t.rotPointX - 3, t.y + ct.y + t.rotPointY - 3, 7, 7);
-            
-            // Draw bounds
-            ctx.strokeStyle = "blue";
-            ctx.strokeRect(this.bounds.x + ct.x, this.bounds.y + ct.y, this.bounds.width, this.bounds.height);
-            
-            // Draw hitbox
-            ctx.strokeStyle = "green";
-            ctx.strokeRect(this.hitbox.x + ct.x, this.hitbox.y + ct.y, this.hitbox.width, this.hitbox.height);
-            
-            // Draw raw hitbox
-            ctx.strokeStyle = "white";
-            ctx.strokeRect(this.rawHitbox.x + ct.x, this.rawHitbox.y + ct.y, this.rawHitbox.width, this.rawHitbox.height);
-            
-            // Draw world bounds
+	/**
+	* The Box Component is used to handle the various 'bounds' that each GameObject has. 
+	* There are two main different types of bounds (Bounds and Hitbox) with each one having three variants (each one is a rectangle) depending on what you are wanting:
+	*
+	* RawBounds: The bounding box of the GameObject before rotation/scale.
+	* 
+	* RawHitbox: The hitbox of the GameObject before rotation/scale. This can be modified to be different than the normal bounds but if not specified it will be the same as the raw bounds.
+	*
+	* Bounds: The bounding box of the GameObject after rotation/scale.
+	*
+	* Hitbox: The hitbox of the GameObject after rotation/scale. If you modified the raw hitbox then this one will be modified as well, otherwise it will be the same as the normal bounds.
+	*
+	* WorldBounds: The bounding box of the Entity using its world coordinates and after rotation/scale.
+	*
+	* WorldHitbox: The hitbox of the Entity using its world coordinates and after rotation/scale.
+	*
+	* @class Box
+	* @extends Kiwi.Component
+	* @namespace Kiwi.Components
+	* @constructor
+	* @param parent {Kiwi.Entity} The entity that this box belongs to.
+	* @param [x=0] {Number} Its position on the x axis
+	* @param [y=0] {Number} Its position on the y axis
+	* @param [width=0] {Number} The width of the box.
+	* @param [height=0] {Number} The height of the box.
+	* @return {Kiwi.Components.Box}
+	*/
+	export class Box extends Component {
+
+		constructor(parent: Entity, x: number = 0, y: number = 0, width: number = 0, height: number = 0) {
+			
+			super(parent, 'Box');
+			
+			this.entity = parent;
+
+			this._rawBounds = new Kiwi.Geom.Rectangle(x,y,width,height);
+			this._rawCenter = new Kiwi.Geom.Point(x + width / 2, y + height / 2);
+			this._rawHitbox = new Kiwi.Geom.Rectangle();
+
+			this._hitboxOffset = new Kiwi.Geom.Point();
+
+			this.hitbox = new Kiwi.Geom.Rectangle(0, 0, width, height); 
+			this.autoUpdate = true;
+		}
+
+
+		/**
+		* The entity that this box belongs to.
+		* @property entity
+		* @type Kiwi.Entity
+		* @public
+		*/
+		public entity: Kiwi.Entity;
+
+
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {string} "Box"
+		* @public
+		*/
+		public objType() {
+			return "Box";
+		}
+
+
+		/**
+		* Controls whether the hitbox should update automatically to match the hitbox of the current cell on the entity this Box component is attached to (default behaviour).
+		* Or if the hitbox shouldn't auto update. Which will mean it will stay the same as the last value it had. 
+		* This property is automatically set to 'false' when you override the hitboxes width/height, but you can set this to true afterwards. 
+		* 
+		* @property autoUpdate
+		* @type boolean
+		* @default true
+		* @private
+		*/
+		public autoUpdate: boolean = true;
+
+
+		/**
+		* Indicates whether or not this component needs re-rendering/updating or not.
+		* @property dirty
+		* @type boolean
+		* @public
+		* @deprecated in version 1.1.0 because the box always needed updating
+		*/
+		public dirty: boolean;
+
+
+
+		/**
+		* Contains offset point for the hitbox 
+		* @property _hitboxOffset
+		* @type Kiwi.Geom.Point
+		* @private
+		*/
+		private _hitboxOffset: Kiwi.Geom.Point;
+
+
+
+		/**
+		* Returns the offset value of the hitbox as a point for the X/Y axis for the developer to use.
+		* This is without rotation or scaling.
+		* This is a READ ONLY property.
+		* @property hitboxOffset
+		* @type Kiwi.Geom.Point
+		* @public
+		*/
+		public get hitboxOffset(): Kiwi.Geom.Point {
+
+			if ( this.autoUpdate == true && this.entity.atlas !== null && this.entity.atlas.cells && this.entity.atlas.cells[ 0 ].hitboxes ) {
+				this._hitboxOffset.x =
+					this.entity.atlas.cells[this.entity.cellIndex].hitboxes[0].x || 0;
+				this._hitboxOffset.y =
+					this.entity.atlas.cells[this.entity.cellIndex].hitboxes[0].y || 0;
+
+			}
+
+			return this._hitboxOffset;
+		}
+
+
+
+		/**
+		* Contains the offset rectangle for the raw hitbox. 
+		* @property _rawHitbox
+		* @type Kiwi.Geom.Rectangle
+		* @private
+		*/
+		private _rawHitbox: Kiwi.Geom.Rectangle;
+
+
+		/**
+		* Returns the raw hitbox rectangle for the developer to use. 
+		* 'Raw' means where it would be without rotation or scaling.
+		* This is READ ONLY.
+		* @property rawHitbox
+		* @type Kiwi.Geom.Rectangle
+		* @public
+		*/
+		public get rawHitbox(): Kiwi.Geom.Rectangle {
+
+			this._rawHitbox.x = this.rawBounds.x + this.hitboxOffset.x;
+			this._rawHitbox.y = this.rawBounds.y + this.hitboxOffset.y;
+
+			//If the hitbox has not already been set, then update the width/height based upon the current cell that the entity has.
+			if (this.autoUpdate == true) {
+				var atlas = this.entity.atlas;
+
+				if ( atlas !== null && atlas.cells && atlas.cells[ 0 ].hitboxes ) {
+					this._rawHitbox.width = atlas.cells[ this.entity.cellIndex ].hitboxes[ 0 ].w;
+					this._rawHitbox.height = atlas.cells[ this.entity.cellIndex ].hitboxes[ 0 ].h;
+				} else {
+					this._rawHitbox.width = this.entity.width;
+					this._rawHitbox.height = this.entity.height;
+				}
+			}
+
+			return this._rawHitbox;
+		}
+
+
+
+		/**
+		* The transformed or 'normal' hitbox for the entity. This is its box after rotation/scale.
+		* @property _transformedHitbox
+		* @type Kiwi.Geom.Rectangle
+		* @private
+		*/
+		private _transformedHitbox: Kiwi.Geom.Rectangle;
+
+
+		/** 
+		* The transformed 'world' hitbox for the entity. This is its box after rotation/scale.
+		* @property _worldHitbox
+		* @type Kiwi.Geom.Rectangle
+		* @private
+		*/
+		private _worldHitbox: Kiwi.Geom.Rectangle;
+
+
+		/**
+		* The 'normal' or transformed hitbox for the entity. This is its box after rotation/Kiwi.Geom.Rectangle. 
+		* @property hitbox
+		* @type Kiwi.Geom.Rectangle
+		* @public
+		*/
+		public get hitbox(): Kiwi.Geom.Rectangle {
+			this._transformedHitbox = this._rotateHitbox(this.rawHitbox.clone());
+
+			return this._transformedHitbox;
+		}
+		public set hitbox(value: Kiwi.Geom.Rectangle) {
+
+			//Use custom hitbox defined by user.
+
+			this._hitboxOffset.x = value.x;
+			this._hitboxOffset.y = value.y;
+
+			this._rawHitbox = value;
+
+			this._rawHitbox.x += this._rawBounds.x;
+			this._rawHitbox.y += this._rawBounds.y;
+
+			this.autoUpdate = false;
+
+		}
+
+
+
+		/**
+		* Returns the transformed hitbox for the entity using its 'world' coordinates.
+		* This is READ ONLY.
+		* @property worldHitbox
+		* @type Kiwi.Geom.Rectangle
+		* @public
+		*/
+		public get worldHitbox(): Kiwi.Geom.Rectangle {
+			this._worldHitbox = this._rotateHitbox(this.rawHitbox.clone(), true);
+
+			return this._worldHitbox;
+		}
+
+
+
+		/**
+		* The 'raw' bounds of entity. This is its bounds before rotation/scale.
+		* This for property is only for storage of the values and should be accessed via the getter 'rawBounds' so that it can update.
+		* 
+		* @property _rawBounds
+		* @type Kiwi.Geom.Rectangle
+		* @private
+		*/
+		private _rawBounds: Kiwi.Geom.Rectangle;
+
+
+
+		/**
+		* Returns the 'raw' bounds for this entity.
+		* This is READ ONLY.
+		* @property rawBounds
+		* @type Kiwi.Geom.Rectangle
+		* @public
+		*/
+		public get rawBounds(): Kiwi.Geom.Rectangle {
+			this._rawBounds.x = this.entity.x;
+			this._rawBounds.y = this.entity.y;
+			this._rawBounds.width = this.entity.width;
+			this._rawBounds.height = this.entity.height;
+
+			return this._rawBounds;
+		}
+
+
+
+		/**
+		* Contains the 'raw' center point for the bounds.
+		* @property Kiwi.Geom.Point
+		* @type Kiwi.Geom.Point
+		* @private
+		*/
+		private _rawCenter: Kiwi.Geom.Point;
+
+
+		/**
+		* Returns the raw center point of the box.
+		* This is READ ONLY.
+		* @property rawCenter
+		* @type Kiwi.Geom.Point
+		* @public
+		*/
+		public get rawCenter(): Kiwi.Geom.Point {
+			this._rawCenter.x = this.rawBounds.x + this.rawBounds.width / 2;
+			this._rawCenter.y = this.rawBounds.y + this.rawBounds.height / 2;
+
+			return this._rawCenter;
+		}
+
+
+		/**
+		* Contains the center point after the box has been transformed.
+		* @property _transformedCenter
+		* @type Kiwi.Geom.Point
+		* @private
+		*/
+		private _transformedCenter: Kiwi.Geom.Point;
+
+
+		/**
+		* Returns the center point for the box after it has been transformed.
+		* World coordinates.
+		* This is READ ONLY.
+		* @property center
+		* @type Kiwi.Geom.Point
+		* @public
+		*/
+		public get center(): Kiwi.Geom.Point {
+			var m: Kiwi.Geom.Matrix = this.entity.transform.getConcatenatedMatrix();
+
+			this._transformedCenter = m.transformPoint(
+				new Kiwi.Geom.Point(
+					this.entity.width / 2 - this.entity.anchorPointX,
+					this.entity.height / 2 - this.entity.anchorPointY ) );
+
+			return this._transformedCenter;
+		}
+
+
+
+		/**
+		* Contains the transformed or 'normal' bounds for this entity.
+		* @property _transformedBounds
+		* @type Kiwi.Geom.Rectangle
+		* @private
+		*/
+		private _transformedBounds: Kiwi.Geom.Rectangle;
+
+
+		/**
+		* The 'world' transformed bounds for this entity. 
+		* @property _worldBounds
+		* @type Kiwi.Geom.Rectangle
+		* @private
+		*/
+		private _worldBounds: Kiwi.Geom.Rectangle;
+
+
+		/**
+		* Returns the 'transformed' or 'normal' bounds for this box. 
+		* This is READ ONLY.
+		* @property bounds
+		* @type Kiwi.Geom.Rectangle
+		* @public
+		*/
+		public get bounds(): Kiwi.Geom.Rectangle {
+			this._transformedBounds = this._rotateRect(this.rawBounds.clone()); 
+
+			return this._transformedBounds;
+		}
+
+		/**
+		* Returns the 'transformed' bounds for this entity using the world coodinates.
+		* This is READ ONLY.
+		* @property worldBounds
+		* @type Kiwi.Geom.Rectangle
+		* @public
+		*/
+		public get worldBounds(): Kiwi.Geom.Rectangle {
+			this._worldBounds = this._rotateRect(this.rawBounds.clone(), true);
+
+			return this._worldBounds;
+		}
+
+		/**
+		* Private internal method only. Used to calculate the transformed bounds after rotation/scale.
+		* @method _rotateRect
+		* @param rect {Kiwi.Geom.Rectangle}
+		* @param [useWorldCoords=false] {Boolean}
+		* @return {Kiwi.Geom.Rectangle}
+		* @private
+		*/
+		private _rotateRect(rect: Kiwi.Geom.Rectangle, useWorldCoords: boolean=false): Kiwi.Geom.Rectangle {
+			var out: Kiwi.Geom.Rectangle = new Kiwi.Geom.Rectangle();
+			var t: Kiwi.Geom.Transform = this.entity.transform;
+			var m: Kiwi.Geom.Matrix = t.getConcatenatedMatrix();
+			
+			//Use world coordinates?
+			if( !useWorldCoords )
+			{
+				m.setTo(m.a, m.b, m.c, m.d, t.x + t.rotPointX, t.y + t.rotPointY);
+			}
+
+			out = this.extents(
+				m.transformPoint({ x: - t.rotPointX, y: - t.rotPointY }),
+				m.transformPoint({ x: - t.rotPointX + rect.width, y: - t.rotPointY }),
+				m.transformPoint({ x: - t.rotPointX + rect.width, y: - t.rotPointY + rect.height }),
+				m.transformPoint({ x: - t.rotPointX, y: - t.rotPointY + rect.height })
+				);
+			return out;
+		}
+
+
+
+		/**
+		* A private method that is used to calculate the transformed hitbox's coordinates after rotation. 
+		* @method _rotateHitbox
+		* @param rect {Kiwi.Geom.Rectangle} 
+		* @param [useWorldCoords=false] {Boolean}
+		* @return {Kiwi.Geom.Rectangle}
+		* @private
+		*/
+		private _rotateHitbox(rect: Kiwi.Geom.Rectangle, useWorldCoords: boolean=false): Kiwi.Geom.Rectangle {
+			var out: Kiwi.Geom.Rectangle = new Kiwi.Geom.Rectangle();
+			var t: Kiwi.Geom.Transform = this.entity.transform;
+			var m: Kiwi.Geom.Matrix = t.getConcatenatedMatrix();
+
+			//Use world coordinates?
+			if( !useWorldCoords )
+			{
+				m.setTo(m.a, m.b, m.c, m.d, t.x + t.rotPointX, t.y + t.rotPointY);
+			}
+
+			out = this.extents(
+				m.transformPoint({ x: - t.rotPointX + this._hitboxOffset.x,              y: - t.rotPointY + this._hitboxOffset.y }),
+				m.transformPoint({ x: - t.rotPointX + rect.width + this._hitboxOffset.x, y: - t.rotPointY +  this._hitboxOffset.y }),
+				m.transformPoint({ x: - t.rotPointX + rect.width + this._hitboxOffset.x, y: - t.rotPointY + rect.height + this._hitboxOffset.y}),
+				m.transformPoint({ x: - t.rotPointX + this._hitboxOffset.x,              y: - t.rotPointY + rect.height + this._hitboxOffset.y })
+				);
+
+			return out;
+		}
+
+
+
+		/**
+		* Draws the various bounds on a context that is passed. Useful for debugging and using in combination with the debug canvas.
+		* @method draw
+		* @param ctx {CanvasRenderingContext2D} Context of the canvas that this box component is to be rendered on top of.
+		* @param [camera] {Kiwi.Camera} A camera that should be taken into account before rendered. This is the default camera by default.
+		* @public
+		*/
+		public draw(ctx: CanvasRenderingContext2D, camera: Kiwi.Camera = this.game.cameras.defaultCamera) {
+			var t: Kiwi.Geom.Transform = this.entity.transform;
+			var ct: Kiwi.Geom.Transform = camera.transform;
+
+			// Draw raw bounds and raw center
+			ctx.strokeStyle = "red";
+			ctx.fillRect(this.rawCenter.x + ct.x - 1, this.rawCenter.y + ct.y - 1, 3, 3);
+			ctx.strokeRect(t.x + ct.x + t.rotPointX - 3, t.y + ct.y + t.rotPointY - 3, 7, 7);
+
+			// Draw bounds
+			ctx.strokeStyle = "blue";
+			ctx.strokeRect(this.bounds.x + ct.x, this.bounds.y + ct.y, this.bounds.width, this.bounds.height);
+
+			// Draw hitbox
+			ctx.strokeStyle = "green";
+			ctx.strokeRect(this.hitbox.x + ct.x, this.hitbox.y + ct.y, this.hitbox.width, this.hitbox.height);
+
+			// Draw raw hitbox
+			ctx.strokeStyle = "white";
+			ctx.strokeRect(this.rawHitbox.x + ct.x, this.rawHitbox.y + ct.y, this.rawHitbox.width, this.rawHitbox.height);
+
+			// Draw world bounds
 			ctx.strokeStyle = "purple";
 			ctx.strokeRect(this.worldBounds.x, this.worldBounds.y, this.worldBounds.width, this.worldBounds.height);
-			
+
 			// Draw world hitbox
 			ctx.strokeStyle = "cyan";
 			ctx.strokeRect(this.worldHitbox.x, this.worldHitbox.y, this.worldHitbox.width, this.worldHitbox.height);
-        }
+		}
 
 
 
-        /** 
-        * Method which takes four Points and then converts it into a Rectangle, which represents the area those points covered.
-        * The points passed can be maybe in any order, as the are checked for validity first. 
-        *
-        * @method extents
-        * @param topLeftPoint {Kiwi.Geom.Point} The top left Point that the Rectangle should have.
-        * @param topRightPoint {Kiwi.Geom.Point} The top right Point that the Rectangle should have.
-        * @param bottomRightPoint {Kiwi.Geom.Point} The bottom right Point that the Rectangle should have.
-        * @param bottomLeftPoint {Kiwi.Geom.Point} The bottom left Point that the Rectangle should have.
-        * @return {Kiwi.Geom.Rectangle} The new Rectangle that represents the area the points covered.
-        * @return Rectangle
-        */
-        public extents(topLeftPoint:Kiwi.Geom.Point, topRightPoint:Kiwi.Geom.Point, bottomRightPoint:Kiwi.Geom.Point, bottomLeftPoint:Kiwi.Geom.Point):Kiwi.Geom.Rectangle {
-            var left: number = Math.min(topLeftPoint.x, topRightPoint.x, bottomRightPoint.x, bottomLeftPoint.x);
-            var right: number = Math.max(topLeftPoint.x, topRightPoint.x, bottomRightPoint.x, bottomLeftPoint.x);
-            var top: number = Math.min(topLeftPoint.y, topRightPoint.y, bottomRightPoint.y, bottomLeftPoint.y);
-            var bottom: number = Math.max(topLeftPoint.y, topRightPoint.y, bottomRightPoint.y, bottomLeftPoint.y);
+		/** 
+		* Method which takes four Points and then converts it into a Rectangle, which represents the area those points covered.
+		* The points passed can be maybe in any order, as the are checked for validity first. 
+		*
+		* @method extents
+		* @param topLeftPoint {Kiwi.Geom.Point} The top left Point that the Rectangle should have.
+		* @param topRightPoint {Kiwi.Geom.Point} The top right Point that the Rectangle should have.
+		* @param bottomRightPoint {Kiwi.Geom.Point} The bottom right Point that the Rectangle should have.
+		* @param bottomLeftPoint {Kiwi.Geom.Point} The bottom left Point that the Rectangle should have.
+		* @return {Kiwi.Geom.Rectangle} The new Rectangle that represents the area the points covered.
+		* @return Rectangle
+		*/
+		public extents(topLeftPoint:Kiwi.Geom.Point, topRightPoint:Kiwi.Geom.Point, bottomRightPoint:Kiwi.Geom.Point, bottomLeftPoint:Kiwi.Geom.Point):Kiwi.Geom.Rectangle {
+			var left: number = Math.min(topLeftPoint.x, topRightPoint.x, bottomRightPoint.x, bottomLeftPoint.x);
+			var right: number = Math.max(topLeftPoint.x, topRightPoint.x, bottomRightPoint.x, bottomLeftPoint.x);
+			var top: number = Math.min(topLeftPoint.y, topRightPoint.y, bottomRightPoint.y, bottomLeftPoint.y);
+			var bottom: number = Math.max(topLeftPoint.y, topRightPoint.y, bottomRightPoint.y, bottomLeftPoint.y);
 
-            return new Kiwi.Geom.Rectangle(left, top, right - left, bottom - top);
+			return new Kiwi.Geom.Rectangle(left, top, right - left, bottom - top);
 
-        }
+		}
 
 
 
-        /**
-        * Destroys this component and all of the links it may have to other objects.
-        * @method destroy
-        * @public
-        */
-        public destroy() {
-            super.destroy();
-            delete this.entity;
-        }
-	
+		/**
+		* Destroys this component and all of the links it may have to other objects.
+		* @method destroy
+		* @public
+		*/
+		public destroy() {
+			super.destroy();
+			delete this.entity;
+		}
 
-    }
+	}
 
 }
-
-
diff --git a/src/components/Input.ts b/src/components/Input.ts
index 11aaeed..9583dfe 100644
--- a/src/components/Input.ts
+++ b/src/components/Input.ts
@@ -3,789 +3,786 @@
 * @module Kiwi
 * @submodule Components 
 * 
-*/ 
- 
+*/
+
 module Kiwi.Components {
 
-    /**
-    * The Input Component is used on GameObjects in which the user may interactive with via a Mouse or Touch 
-    * and as such this class contains useful methods and callbacks you can subscribe to. 
-    * By default the Input component is disabled (this is because when enabled the input component can be process intensive) 
-    * but you can enabled it yourself (which is recommened) BUT in case you forget the input component will automagically 
-    * be enabled once you access a Signal on this class.
-    *
-    * @class Input
-    * @extends Kiwi.Component
-    * @namespace Kiwi.Components
-    * @constructor
-    * @param owner {Object} The Object that this Component is on. Generally this will be a Entity. 
-    * @param box {Kiwi.Components.Box} The box which contains the worldHitbox that is to be used for the event firing.
-    * @param [enabled=false] {boolean} If this input component should be enabled or not. 
-    * @return {Kiwi.Components.Input}
-    */
-    export class Input extends Component {
- 
-        constructor(owner: Kiwi.IChild, box:Kiwi.Components.Box, enabled:boolean=false) {
-
-            super(owner,'Input');
-            
-            //  Signals
-            this._onEntered = new Kiwi.Signal();
-            this._onLeft = new Kiwi.Signal();
-            this._onDown = new Kiwi.Signal();
-            this._onUp = new Kiwi.Signal();
-            this._onDragStarted = new Kiwi.Signal();
-            this._onDragStopped = new Kiwi.Signal();
-
-            //  Properties
-            this._box = box;
-
-            this._distance = new Kiwi.Geom.Point();
-             
-            this._withinBounds = null;
-            this._outsideBounds = true;
-
-            this._isUp = true;
-            this._isDown = null;
-            this._isDragging = null;
-            this._justEntered = false;
-            this._tempDragDisabled = false;
-
-            this._tempPoint = new Kiwi.Geom.Point();
-            this._tempCircle = new Kiwi.Geom.Circle(0, 0, 0);
-
-            this.enabled = enabled;
-        }
-
-        /**
-        * The type of object this input is.
-        * @method objType
-        * @return {string} "Input"
-        * @public
-        */
-        public objType() {
-            return "Input";
-        }
-        
-        /**
-        * The bounding box that is being used for the 'hitarea'.
-        * @property _box
-        * @type Kiwi.Components.Box
-        * @private
-        */
-        private _box: Kiwi.Components.Box;
-
-        /**
-        * Kiwi Signal for firing callbacks when a pointer is active and has entered the entities hitbox.
-        * @property _onEntered
-        * @type Kiwi.Signal
-        * @private
-        */
-        private _onEntered: Kiwi.Signal;
-        
-        /**
-        * Kiwi Signal for firing callbacks when a pointer is active and has left the entities hit box.
-        * @property _onLeft
-        * @type Kiwi.Signal
-        * @private
-        */
-        private _onLeft: Kiwi.Signal;
-        
-        /**
-        * Kiwi Signal for firing callbacks when a pointer is active and has pressed down on the entity.
-        * @property _onDown
-        * @type Kiwi.Signal
-        * @private
-        */
-        private _onDown: Kiwi.Signal;
-        
-        /**
-        * Kiwi Signal for firing callbacks when a pointer just released from either being above the entity or the pointer was initally pressed on it.
-        * @property _onUp
-        * @type Kiwi.Signal
-        * @private
-        */
-        private _onUp: Kiwi.Signal;
-        
-        /**
-        * Kiwi Signal for firing callbacks a entity starts being dragged.
-        * @property _onDragStarted
-        * @type Kiwi.Signal
-        * @private
-        */
-        private _onDragStarted: Kiwi.Signal;
-        
-        /**
-        * Kiwi Signal for firing callbacks a entity stops being dragged. Like on release.
-        * @property _onDragStopped
-        * @type Kiwi.Signal
-        * @private
-        */
-        private _onDragStopped: Kiwi.Signal;
-
-        /**
-        * A Temporary Point object which is used whilst checking to see if there is any overlap.
-        * @property _tempPoint
-        * @type Kiwi.Geom.Point
-        * @private
-        */
-        private _tempPoint: Kiwi.Geom.Point;
-        
-        /**
-        * A Temporary Circle object which is used whilst checking to see if there is any overlap.
-        * @property _tempCircle
-        * @type Kiwi.Geom.Circle
-        * @private
-        */
-        private _tempCircle: Kiwi.Geom.Circle;
-
-
-        /**
-        * Returns the onEntered Signal, that fires events when a pointer enters the hitbox of a entity.
-        * Note: Accessing this signal enables the input.
-        * This is READ ONLY.
-        * @property onEntered
-        * @type Kiwi.Signal
-        * @public
-        */
-        public get onEntered(): Kiwi.Signal {
-            if (this.enabled == false) this.enabled = true;
-            return this._onEntered;
-        }
-        
-        /**
-        * Returns the onLeft Signal, that fires events when a pointer leaves the hitbox of a entity.
-        * Note: Accessing this signal enables the input.
-        * This is READ ONLY.
-        * @property onLeft
-        * @type Kiwi.Signal
-        * @public
-        */
-        public get onLeft(): Kiwi.Signal {
-            if (this.enabled == false) this.enabled = true;
-            return this._onLeft;
-        }
-        
-        /**
-        * Returns the onDown Signal, that fires events when a pointer is pressed within the bounds of the signal.
-        * Note: Accessing this signal enables the input.
-        * This is READ ONLY.
-        * @property onDown
-        * @type Kiwi.Signal
-        * @public
-        */
-        public get onDown(): Kiwi.Signal {
-            if (this.enabled == false) this.enabled = true;
-            return this._onDown;
-        }
-        
-        /**
-        * Returns the onUp Signal, that fires events when a pointer is released either within the bounds or was pressed initially within the bounds..
-        * Note: Accessing this signal enables the input.
-        * This is READ ONLY.
-        * @property onUp
-        * @type Kiwi.Signal
-        * @public
-        */
-        public get onUp(): Kiwi.Signal {
-            if (this.enabled == false) this.enabled = true;
-            return this._onUp;
-        }
-    
-        /**
-        * Returns the onDragStarted Signal.
-        * This is READ ONLY.
-        * @property onDragStarted
-        * @type Kiwi.Signal
-        * @public
-        */
-        public get onDragStarted(): Kiwi.Signal { return this._onDragStarted; }
-
-        /**
-        * Returns the onDragStopped Signal.
-        * This is READ ONLY.
-        * @property onDragStopped
-        * @type Kiwi.Signal
-        * @public
-        */
-        public get onDragStopped(): Kiwi.Signal { return this._onDragStopped; }
-
-        /**
-        * A alias for the on release signal.
-        * This is READ ONLY.
-        * @property onRelease
-        * @type Kiwi.Signal
-        * @public
-        */
-        public get onRelease():Kiwi.Signal {
-            return this.onUp;
-        }
-        
-        /**
-        * A alias for the on press signal.
-        * This is READ ONLY.
-        * @property onPress
-        * @type Kiwi.Signal
-        * @public
-        */
-        public get onPress(): Kiwi.Signal {
-            return this.onDown;
-        }
-
-        /**
-        * If this input is enabled or not. 
-        * @property _enabled
-        * @type boolean
-        * @default false
-        * @private
-        */
-        private _enabled: boolean;
-
-        /**
-        * Get if the input is enabled or not. Note: Inputs should only be enabled when needed, otherwise unnecessary processing does occur which can result in a slower game.
-        * @property enabled
-        * @type boolean
-        * @public
-        */
-        public get enabled(): boolean {
-            return this._enabled;
-        }
-        public set enabled(val: boolean) {//perhaps later the signals should only be set if the input is enabled.
-            this._enabled = val; 
-        }
-        
-        /**
-        * If a pointer is current pressing down on the input, this will be a reference to that pointer. Otherwise it will be null.
-        * @property _isDown
-        * @type Kiwi.Input.Pointer
-        * @private
-        */
-        private _isDown: Kiwi.Input.Pointer;    
-
-        /**
-        * A boolean that indicates if no pointer is currently on the pointer
-        * @property _isUp
-        * @type boolean
-        * @default true
-        * @private
-        */
-        private _isUp: boolean;
-
-        /**
-        * Indicates if a pointer is within the bounds or not. If one is then it referers to the pointer that is. Other it will be null.
-        * @property _withinBounds
-        * @type Kiwi.Input.Pointer
-        * @private
-        */
-        private _withinBounds: Kiwi.Input.Pointer;
-
-        /**
-        * boolean indicating if every pointer is currently outside of the bounds.
-        * @property _outsideBounds
-        * @type boolean
-        * @default true
-        * @private
-        */
-        private _outsideBounds: boolean;
-        
-        /**
-        * If a pointer just entered the input. Used for mouse's to indicate when to appropriately fire the down event.
-        * Note: Could be removed once mouse version of update gets updated.
-        * @property _justEntered
-        * @type boolean
-        * @default false
-        * @private
-        */
-        private _justEntered: boolean;
-        
-        /**
-        * Used to see if a pointer is currently on this input. Returns a boolean indicating either true or false.
-        * This is READ ONLY.
-        * @property isDown
-        * @type boolean
-        * @public
-        */
-        public get isDown(): boolean {
-            return (this._isDown !== null);
-        }
-        
-        /**
-        * Used to see if no pointer is on this input (so it is up).
-        * This is READ ONLY.
-        * @property isUp
-        * @type boolean
-        * @public
-        */
-        public get isUp(): boolean {
-            return this._isUp;
-        }
-        
-        /**
-        * Check to see if any pointer is within the bounds of this input.
-        * This is READ ONLY.
-        * @property withinBounds
-        * @type boolean
-        * @public
-        */
-        public get withinBounds(): boolean {
-            return (this._withinBounds !== null);
-        }
-        
-        /**
-        * See if no pointers are within the bounds of this entity.
-        * This is READ ONLY.
-        * @property outsideBounds
-        * @type boolean
-        * @public
-        */
-        public get outsideBounds(): boolean {
-            return this._outsideBounds;
-        }
-        
-        /**
-        * A reference to the pointer that is currently 'dragging' this Object. 
-        * If not dragging then this is null.
-        * @property _isDragging
-        * @type Kiwi.Input.Pointer
-        * @default null
-        * @private
-        */
-        private _isDragging: Kiwi.Input.Pointer = null;
-        
-        /**
-        * The distance between the top left corner of this Objects parent and the coordinates of a Pointer.
-        * @property _distance
-        * @type Kiwi.Geom.Point
-        * @private
-        */
-        private _distance: Kiwi.Geom.Point;
-
-        /**
-        * A boolean indicating if dragging is temporarly disabled. Internal use only to stop events from misfiring.
-        * @property _tempDragDisabled
-        * @type boolean
-        * @private
-        */
-        private _tempDragDisabled: boolean;
-
-        /**
-        * Indicates if dragging is currently enabled.
-        * @property _dragEnabled
-        * @type boolean
-        * @default false
-        * @private
-        */
-        private _dragEnabled: boolean = false;
-        
-        /**
-        * This is used while dragging so that you can make the IChild 'snap' to specific numbers to give a 'grid like' effect. 
-        * E.g. If you had a 32 by 32 grid down and you wanted to make an element draggable but snap to the grid you can set this to 32. 
-        * Default value is one.
-        * @property _dragDistance
-        * @type number
-        * @default 1
-        * @private
-        */
-        private _dragDistance: number;
-
-        /**
-        * If when dragging, the IChild should snap to the center of the pointer it is being dragged by.
-        * @property _dragSnapToCenter
-        * @type boolean
-        * @default false
-        * @private 
-        */
-        private _dragSnapToCenter: boolean = false;
-
-        /**
-        * Returns a boolean indicating if this is currently dragging something.
-        * This is READ ONLY.
-        * @property isDragging
-        * @type boolean
-        * @public
-        */
-        public get isDragging(): boolean { return (this._isDragging !== null); }
-
-        /**
-        * The drag distance that is used when dragging this object. See _dragDistance for more information.
-        * @property dragDistance
-        * @type number
-        * @public
-        */
-        public get dragDistance(): number {
-            return this._dragDistance; 
-        }
-        public set dragDistance(val: number) { 
-            this._dragDistance = val;
-        }
-
-        /**
-        * Temporary property that gets updated everyframe with the pointer that is currently 'down' on this entity.
-        * @property _nowDown
-        * @type Kiwi.Input.Pointer
-        * @default null
-        * @private
-        */
-        private _nowDown: Kiwi.Input.Pointer = null;
-        
-        /**
-        * Temporary property that gets updated everyframe with the pointer that was just 'released' from being down on this entity
-        * @property _nowUp
-        * @type Kiwi.Input.Pointer
-        * @default null
-        * @private
-        */
-        private _nowUp: Kiwi.Input.Pointer = null;
-        
-        /**
-        * Temporary property of the pointer that is now within the bounds of the entity
-        * @property _nowEntered
-        * @type Kiwi.Input.Pointer
-        * @default null
-        * @private
-        */
-        private _nowEntered: Kiwi.Input.Pointer = null;
-        
-        /**
-        * Temporary property of the pointer that just left the bounds of the entity.
-        * @property _nowLeft
-        * @type Kiwi.Input.Pointer
-        * @default null
-        * @private
-        */
-        private _nowLeft: Kiwi.Input.Pointer = null;
-        
-        /**
-        * Temporary property of the pointer that just started draggging the entity.
-        * @property _nowDragging
-        * @type Kiwi.Input.Pointer
-        * @default null
-        * @private
-        */
-        private _nowDragging: Kiwi.Input.Pointer = null;
-
-        /**
-        * Enables the dragging of this entity. 
-        * @method enableDrag
-        * @param [snapToCenter=false] {boolean} If when dragging the Entity should snap to the center of the pointer.
-        * @param [distance=1] {number} If when dragging the Entity should snap to numbers divisible by this amount.
-        * @public
-        */
-        public enableDrag(snapToCenter:boolean = false, distance:number = 1) {
-            
-            if (this.enabled == false) this.enabled = true;
-            this._dragEnabled = true;
-            this._dragSnapToCenter = snapToCenter;
-            this._dragDistance = distance;
-            this._isDragging = null;
-
-        }
-        
-        /**
-        * Disables the dragging of this entity. 
-        * @method disableDrag
-        * @public
-        */
-        public disableDrag() {
-            this._dragEnabled = false;
-            this._isDragging = null;
-        }
-        
-        /**
-        * The update loop for the input. 
-        * @method update
-        * @protected
-        */
-        public update() {
-
-            if (this.enabled === false  ||  !this.game || this.owner.active === false) {
-                return;
-            }
-            
-            // Reset the temporary properties
-            this._nowDown = null;
-            this._nowUp = null;
-            this._nowEntered = null;
-            this._nowLeft = null;
-            this._nowDragging = null;
-
-            //Use the appropriate method of checking.
-            if (Kiwi.DEVICE.touch) {
-                this._updateTouch();
-            } else {
-                this._updateMouse();
-            }
-            
-            //If the entity is dragging.
-            if (this.isDragging) { 
-
-                this._tempPoint = this.game.cameras.defaultCamera.transformPoint(this._isDragging.point);
-
-                if (this._dragSnapToCenter === false) {
-                    this.owner.transform.x = Kiwi.Utils.GameMath.snapTo((this._tempPoint.x - this._box.hitboxOffset.x - this._distance.x), this._dragDistance);
-                    this.owner.transform.y = Kiwi.Utils.GameMath.snapTo((this._tempPoint.y - this._box.hitboxOffset.y - this._distance.y), this._dragDistance);
-                } else {
-                    this.owner.transform.x = Kiwi.Utils.GameMath.snapTo((this._tempPoint.x - this._box.hitboxOffset.x - this._box.worldHitbox.width / 2), this._dragDistance);
-                    this.owner.transform.y = Kiwi.Utils.GameMath.snapTo((this._tempPoint.y - this._box.hitboxOffset.y - this._box.worldHitbox.height / 2), this._dragDistance);
-                }
-            }
-        }
-
-        /**
-        * The update loop that gets executed when the game is using the touch manager.
-        * @method _updateTouch
-        * @private
-        */
-        private _updateTouch() {
-        
-            for (var i = 0; i < this.game.input.touch.maximumPointers; i++) {
-
-                //if that pointer is active then see where it is
-                if (this.game.input.touch.fingers[i].active === true) {
-                    this._evaluateTouchPointer(this.game.input.touch.fingers[i]);
-                }
-                //if the pointer is inactive check to see if it was just down
-                else if (this.isDown === true && this._isDown.id === this.game.input.touch.fingers[i].id) {
-                    this._nowUp = this.game.input.touch.fingers[i];
-                }
-                //if the pointer is not active but was within the bounds check to see if it is now outside
-                else if (this.isDown === false && this._nowUp === null && this.withinBounds === true && this._withinBounds.id === this.game.input.touch.fingers[i].id) {
-                    this._nowUp = this.game.input.touch.fingers[i];
-                }
-                 
-            }
-    
-            //Fire the events. LOTS OF CONDITIONS
-            if (this._nowEntered !== null && this.withinBounds === false) { 
-                this._withinBounds = this._nowEntered;
-                this._outsideBounds = false;
-                this._onEntered.dispatch(this.owner, this._nowEntered);
-            }
-
-            if (this._nowLeft !== null && this.withinBounds === true) { 
-                this._withinBounds = null;
-                this._outsideBounds = true;
-                this._onLeft.dispatch(this.owner, this._nowLeft);
-            }
-
-            if (this._nowDown !== null && this.isDown === false) { 
-                this._onDown.dispatch(this.owner, this._nowDown);
-                this._isDown = this._nowDown;
-                this._isUp = false;
-                this._withinBounds = this._nowDown;
-                this._outsideBounds = false;
-            }
-            
-            if (this._dragEnabled == true && this.isDragging === false && this._nowDragging !== null) {
-                this._onDragStarted.dispatch(this.owner, this._nowDragging);
-                this._isDragging = this._nowDragging;
-            }
-
-            if (this._nowUp !== null) { 
-                this._onUp.dispatch(this.owner, this._nowUp);
-                this._isDown = null;
-                this._isUp = true;
-                this._withinBounds = null;
-                this._outsideBounds = true;
-
-                //dispatch drag event
-                if (this.isDragging === true && this._isDragging.id == this._nowUp.id) {
-                    this._isDragging = null;
-                    this._onDragStopped.dispatch(this.owner, this._nowUp);
-                }
-            }
-
-        }
-        
-        /**
-        * A private method for checking to see if a touch pointer should activate any events.
-        * @method _evaluateTouchPointer
-        * @param pointer {Kiwi.Input.Finger} The pointer you are checking against.
-        * @private
-        */
-        private _evaluateTouchPointer(pointer:Kiwi.Input.Finger) {
-            
-            //if nothing isdown or what is down is the current pointer
-            if (this.isDown === false || this._isDown.id === pointer.id) {
-
-                this._tempPoint = this.game.cameras.defaultCamera.transformPoint( pointer.point );
-                this._tempCircle.setTo(this._tempPoint.x, this._tempPoint.y, pointer.circle.diameter);
-
-                if (Kiwi.Geom.Intersect.circleToRectangle(this._tempCircle, this._box.worldHitbox).result) {
-                    if (this.isDown === true && this._isDown.id === pointer.id || this.isDown === false && pointer.duration > 1) {
-                        this._nowEntered = pointer;
-                    }
-
-                    if (this.isDown === false && pointer.frameDuration < 2) {
-                        this._nowDown = pointer;
-                    }
-
-                    if (this._dragEnabled && this.isDragging == false && this.isDown == true) {
-                        this._distance.x = this._tempPoint.x - this._box.worldHitbox.left;
-                        this._distance.y = this._tempPoint.y - this._box.worldHitbox.top;
-                        this._nowDragging = pointer; 
-                    }
-                } else {
-                    if (this.isDown === true) {
-                        this._nowLeft = pointer;
-                    } else if(this.withinBounds === true && this._withinBounds.id == pointer.id) {
-                        this._nowLeft = pointer;
-                    }
-                }
-
-            }
-
-        }
-
-        /**
-        * The update loop that runs when the mouse manager is the method for interacting with the screen.
-        * @method _updateMouse
-        * @private
-        */
-        private _updateMouse() {
-
-            this._evaluateMousePointer(this.game.input.mouse.cursor);
-
-            //dispatch the events
-            if (this._nowLeft !== null) {
-                this._onLeft.dispatch(this.owner, this._nowLeft);
-            }
-
-            if (this._nowEntered !== null) {
-                this._onEntered.dispatch(this.owner, this._nowEntered);
-            }
-            
-            if (this._nowDown !== null && this.isDown === false) {
-                this._onDown.dispatch(this.owner, this._nowDown);
-                this._isDown = this._nowDown;
-                this._isUp = false;
-            }
-
-            if (this._dragEnabled == true && this.isDragging === false && this._nowDragging !== null) {
-                this._onDragStarted.dispatch(this.owner, this._nowDragging);
-                this._isDragging = this._nowDragging;
-            }
-
-            if (this.isDown === true && this._nowUp !== null && this._isDown.id === this._nowUp.id) {
-                this._onUp.dispatch(this.owner, this._nowUp);
-                
-                // Dispatch drag event
-                if (this.isDragging === true && this._isDragging.id == this._nowUp.id) {
-                    this._isDragging = null;
-                    this._onDragStopped.dispatch(this.owner, this._nowUp);
-                }
-
-                this._isDown = null;
-                this._isUp = true;
-            }
-
-        }
-
-        /**
-        * Evaluates where and what the mouse cursor is doing in relation to this box. Needs a little bit more love.
-        * @method _evaluateMousePointer
-        * @param pointer {Kiwi.Input.MouseCursor}
-        * @private
-        */
-        private _evaluateMousePointer(pointer:Kiwi.Input.MouseCursor) {
-
-            this._tempPoint = this.game.cameras.defaultCamera.transformPoint(pointer.point);
-
-            if (Kiwi.Geom.Intersect.pointToRectangle(this._tempPoint, this._box.worldHitbox).result) {
-                
-                if (this._dragEnabled && this.isDragging === false) {
-                    this._distance.x = this._tempPoint.x - this._box.worldHitbox.left;
-                    this._distance.y = this._tempPoint.y - this._box.worldHitbox.top;
-                }
-
-                //  Has it just moved inside?
-                if (this.withinBounds === false) {
-                    this._nowEntered = pointer;
-                    this._withinBounds = pointer;
-                    this._outsideBounds = false;
-                    this._justEntered = true;
-                }
-
-            } else {
-                
-                //  It's outside the bounds now, was it previously in?
-                if (this.withinBounds === true && this.isDragging === false) {
-                    this._nowLeft = pointer;
-                    this._withinBounds = null;
-                    this._outsideBounds = true;
-                }
-
-            }
-
-            //  Input is down (click/touch)
-            if (pointer.isDown === true) {
-
-                //if is was a mouse, did it just enter?
-                if (this._justEntered) {
-                    this._isDown = pointer;
-                    this._isUp = false;
-                    this._tempDragDisabled = true;
-                }
-
-                //  Within bounds? 
-                if (this.withinBounds === true && this.isDown === false && this._nowDown === null) {
-                    this._nowDown = pointer;
-                } 
-
-                if (this._dragEnabled === true && this.isDragging == false && this._tempDragDisabled === false) {
-
-                    if(this.isDown == true) {
-                        this._nowDragging = pointer;
-
-                    }
-                }
-
-            } else { 
-                
-                if (this._tempDragDisabled === true) this._tempDragDisabled = false;
-
-                if (this.isDown === true) {
-                    this._nowUp = pointer;
-
-                }    
-            }
-
-            if (this._justEntered) this._justEntered = false;
-        }
-
-        /**
-        * Destroys the input.
-        * @method destory
-        * @public
-        */
-        public destroy() {
-            
-            super.destroy();
-            
-            this.enabled = false;
-            delete this._box;
-            delete this._isDown;
-            delete this._isUp;
-            delete this._isDragging;
-            delete this._dragEnabled;
-            if(this._onDown) this._onDown.dispose();
-            delete this._onDown;
-            if(this._onDragStarted) this._onDragStarted.dispose();
-            delete this._onDragStarted;
-            if (this._onUp) this._onUp.dispose();
-            delete this._onUp;
-            if (this._onLeft) this._onLeft.dispose();
-            delete this._onLeft;
-            if (this._onEntered) this._onEntered.dispose();
-            delete this._onEntered;
-            if (this._onDragStopped) this._onDragStopped.dispose();
-            delete this._onDragStopped;
-            delete this._dragDistance;
-
-        }
-
-    }
+	/**
+	* The Input Component is used on GameObjects in which the user may interactive with via a Mouse or Touch 
+	* and as such this class contains useful methods and callbacks you can subscribe to. 
+	* By default the Input component is disabled (this is because when enabled the input component can be process intensive) 
+	* but you can enabled it yourself (which is recommened) BUT in case you forget the input component will automagically 
+	* be enabled once you access a Signal on this class.
+	*
+	* @class Input
+	* @extends Kiwi.Component
+	* @namespace Kiwi.Components
+	* @constructor
+	* @param owner {Object} The Object that this Component is on. Generally this will be a Entity. 
+	* @param box {Kiwi.Components.Box} The box which contains the worldHitbox that is to be used for the event firing.
+	* @param [enabled=false] {boolean} If this input component should be enabled or not. 
+	* @return {Kiwi.Components.Input}
+	*/
+	export class Input extends Component {
+
+		constructor(owner: Kiwi.IChild, box:Kiwi.Components.Box, enabled:boolean=false) {
+
+			super(owner,'Input');
+
+			//  Signals
+			this._onEntered = new Kiwi.Signal();
+			this._onLeft = new Kiwi.Signal();
+			this._onDown = new Kiwi.Signal();
+			this._onUp = new Kiwi.Signal();
+			this._onDragStarted = new Kiwi.Signal();
+			this._onDragStopped = new Kiwi.Signal();
+
+			//  Properties
+			this._box = box;
+
+			this._distance = new Kiwi.Geom.Point();
+
+			this._withinBounds = null;
+			this._outsideBounds = true;
+
+			this._isUp = true;
+			this._isDown = null;
+			this._isDragging = null;
+			this._justEntered = false;
+			this._tempDragDisabled = false;
+
+			this._tempPoint = new Kiwi.Geom.Point();
+			this._tempCircle = new Kiwi.Geom.Circle(0, 0, 0);
+
+			this.enabled = enabled;
+		}
+
+		/**
+		* The type of object this input is.
+		* @method objType
+		* @return {string} "Input"
+		* @public
+		*/
+		public objType() {
+			return "Input";
+		}
+
+		/**
+		* The bounding box that is being used for the 'hitarea'.
+		* @property _box
+		* @type Kiwi.Components.Box
+		* @private
+		*/
+		private _box: Kiwi.Components.Box;
+
+		/**
+		* Kiwi Signal for firing callbacks when a pointer is active and has entered the entities hitbox.
+		* @property _onEntered
+		* @type Kiwi.Signal
+		* @private
+		*/
+		private _onEntered: Kiwi.Signal;
+
+		/**
+		* Kiwi Signal for firing callbacks when a pointer is active and has left the entities hit box.
+		* @property _onLeft
+		* @type Kiwi.Signal
+		* @private
+		*/
+		private _onLeft: Kiwi.Signal;
+
+		/**
+		* Kiwi Signal for firing callbacks when a pointer is active and has pressed down on the entity.
+		* @property _onDown
+		* @type Kiwi.Signal
+		* @private
+		*/
+		private _onDown: Kiwi.Signal;
+
+		/**
+		* Kiwi Signal for firing callbacks when a pointer just released from either being above the entity or the pointer was initally pressed on it.
+		* @property _onUp
+		* @type Kiwi.Signal
+		* @private
+		*/
+		private _onUp: Kiwi.Signal;
+
+		/**
+		* Kiwi Signal for firing callbacks a entity starts being dragged.
+		* @property _onDragStarted
+		* @type Kiwi.Signal
+		* @private
+		*/
+		private _onDragStarted: Kiwi.Signal;
+
+		/**
+		* Kiwi Signal for firing callbacks a entity stops being dragged. Like on release.
+		* @property _onDragStopped
+		* @type Kiwi.Signal
+		* @private
+		*/
+		private _onDragStopped: Kiwi.Signal;
+
+		/**
+		* A Temporary Point object which is used whilst checking to see if there is any overlap.
+		* @property _tempPoint
+		* @type Kiwi.Geom.Point
+		* @private
+		*/
+		private _tempPoint: Kiwi.Geom.Point;
+
+		/**
+		* A Temporary Circle object which is used whilst checking to see if there is any overlap.
+		* @property _tempCircle
+		* @type Kiwi.Geom.Circle
+		* @private
+		*/
+		private _tempCircle: Kiwi.Geom.Circle;
+
+
+		/**
+		* Returns the onEntered Signal, that fires events when a pointer enters the hitbox of a entity.
+		* Note: Accessing this signal enables the input.
+		* This is READ ONLY.
+		* @property onEntered
+		* @type Kiwi.Signal
+		* @public
+		*/
+		public get onEntered(): Kiwi.Signal {
+			if (this.enabled == false) this.enabled = true;
+			return this._onEntered;
+		}
+
+		/**
+		* Returns the onLeft Signal, that fires events when a pointer leaves the hitbox of a entity.
+		* Note: Accessing this signal enables the input.
+		* This is READ ONLY.
+		* @property onLeft
+		* @type Kiwi.Signal
+		* @public
+		*/
+		public get onLeft(): Kiwi.Signal {
+			if (this.enabled == false) this.enabled = true;
+			return this._onLeft;
+		}
+
+		/**
+		* Returns the onDown Signal, that fires events when a pointer is pressed within the bounds of the signal.
+		* Note: Accessing this signal enables the input.
+		* This is READ ONLY.
+		* @property onDown
+		* @type Kiwi.Signal
+		* @public
+		*/
+		public get onDown(): Kiwi.Signal {
+			if (this.enabled == false) this.enabled = true;
+			return this._onDown;
+		}
+
+		/**
+		* Returns the onUp Signal, that fires events when a pointer is released either within the bounds or was pressed initially within the bounds..
+		* Note: Accessing this signal enables the input.
+		* This is READ ONLY.
+		* @property onUp
+		* @type Kiwi.Signal
+		* @public
+		*/
+		public get onUp(): Kiwi.Signal {
+			if (this.enabled == false) this.enabled = true;
+			return this._onUp;
+		}
+
+		/**
+		* Returns the onDragStarted Signal.
+		* This is READ ONLY.
+		* @property onDragStarted
+		* @type Kiwi.Signal
+		* @public
+		*/
+		public get onDragStarted(): Kiwi.Signal { return this._onDragStarted; }
+
+		/**
+		* Returns the onDragStopped Signal.
+		* This is READ ONLY.
+		* @property onDragStopped
+		* @type Kiwi.Signal
+		* @public
+		*/
+		public get onDragStopped(): Kiwi.Signal { return this._onDragStopped; }
+
+		/**
+		* A alias for the on release signal.
+		* This is READ ONLY.
+		* @property onRelease
+		* @type Kiwi.Signal
+		* @public
+		*/
+		public get onRelease():Kiwi.Signal {
+			return this.onUp;
+		}
+
+		/**
+		* A alias for the on press signal.
+		* This is READ ONLY.
+		* @property onPress
+		* @type Kiwi.Signal
+		* @public
+		*/
+		public get onPress(): Kiwi.Signal {
+			return this.onDown;
+		}
+
+		/**
+		* If this input is enabled or not. 
+		* @property _enabled
+		* @type boolean
+		* @default false
+		* @private
+		*/
+		private _enabled: boolean;
+
+		/**
+		* Get if the input is enabled or not. Note: Inputs should only be enabled when needed, otherwise unnecessary processing does occur which can result in a slower game.
+		* @property enabled
+		* @type boolean
+		* @public
+		*/
+		public get enabled(): boolean {
+			return this._enabled;
+		}
+		public set enabled(val: boolean) {//perhaps later the signals should only be set if the input is enabled.
+			this._enabled = val; 
+		}
+
+		/**
+		* If a pointer is current pressing down on the input, this will be a reference to that pointer. Otherwise it will be null.
+		* @property _isDown
+		* @type Kiwi.Input.Pointer
+		* @private
+		*/
+		private _isDown: Kiwi.Input.Pointer;    
+
+		/**
+		* A boolean that indicates if no pointer is currently on the pointer
+		* @property _isUp
+		* @type boolean
+		* @default true
+		* @private
+		*/
+		private _isUp: boolean;
+
+		/**
+		* Indicates if a pointer is within the bounds or not. If one is then it referers to the pointer that is. Other it will be null.
+		* @property _withinBounds
+		* @type Kiwi.Input.Pointer
+		* @private
+		*/
+		private _withinBounds: Kiwi.Input.Pointer;
+
+		/**
+		* boolean indicating if every pointer is currently outside of the bounds.
+		* @property _outsideBounds
+		* @type boolean
+		* @default true
+		* @private
+		*/
+		private _outsideBounds: boolean;
+
+		/**
+		* If a pointer just entered the input. Used for mouse's to indicate when to appropriately fire the down event.
+		* Note: Could be removed once mouse version of update gets updated.
+		* @property _justEntered
+		* @type boolean
+		* @default false
+		* @private
+		*/
+		private _justEntered: boolean;
+
+		/**
+		* Used to see if a pointer is currently on this input. Returns a boolean indicating either true or false.
+		* This is READ ONLY.
+		* @property isDown
+		* @type boolean
+		* @public
+		*/
+		public get isDown(): boolean {
+			return (this._isDown !== null);
+		}
+
+		/**
+		* Used to see if no pointer is on this input (so it is up).
+		* This is READ ONLY.
+		* @property isUp
+		* @type boolean
+		* @public
+		*/
+		public get isUp(): boolean {
+			return this._isUp;
+		}
+
+		/**
+		* Check to see if any pointer is within the bounds of this input.
+		* This is READ ONLY.
+		* @property withinBounds
+		* @type boolean
+		* @public
+		*/
+		public get withinBounds(): boolean {
+			return (this._withinBounds !== null);
+		}
+
+		/**
+		* See if no pointers are within the bounds of this entity.
+		* This is READ ONLY.
+		* @property outsideBounds
+		* @type boolean
+		* @public
+		*/
+		public get outsideBounds(): boolean {
+			return this._outsideBounds;
+		}
+
+		/**
+		* A reference to the pointer that is currently 'dragging' this Object. 
+		* If not dragging then this is null.
+		* @property _isDragging
+		* @type Kiwi.Input.Pointer
+		* @default null
+		* @private
+		*/
+		private _isDragging: Kiwi.Input.Pointer = null;
+
+		/**
+		* The distance between the top left corner of this Objects parent and the coordinates of a Pointer.
+		* @property _distance
+		* @type Kiwi.Geom.Point
+		* @private
+		*/
+		private _distance: Kiwi.Geom.Point;
+
+		/**
+		* A boolean indicating if dragging is temporarly disabled. Internal use only to stop events from misfiring.
+		* @property _tempDragDisabled
+		* @type boolean
+		* @private
+		*/
+		private _tempDragDisabled: boolean;
+
+		/**
+		* Indicates if dragging is currently enabled.
+		* @property _dragEnabled
+		* @type boolean
+		* @default false
+		* @private
+		*/
+		private _dragEnabled: boolean = false;
+
+		/**
+		* This is used while dragging so that you can make the IChild 'snap' to specific numbers to give a 'grid like' effect. 
+		* E.g. If you had a 32 by 32 grid down and you wanted to make an element draggable but snap to the grid you can set this to 32. 
+		* Default value is one.
+		* @property _dragDistance
+		* @type number
+		* @default 1
+		* @private
+		*/
+		private _dragDistance: number;
+
+		/**
+		* If when dragging, the IChild should snap to the center of the pointer it is being dragged by.
+		* @property _dragSnapToCenter
+		* @type boolean
+		* @default false
+		* @private 
+		*/
+		private _dragSnapToCenter: boolean = false;
+
+		/**
+		* Returns a boolean indicating if this is currently dragging something.
+		* This is READ ONLY.
+		* @property isDragging
+		* @type boolean
+		* @public
+		*/
+		public get isDragging(): boolean { return (this._isDragging !== null); }
+
+		/**
+		* The drag distance that is used when dragging this object. See _dragDistance for more information.
+		* @property dragDistance
+		* @type number
+		* @public
+		*/
+		public get dragDistance(): number {
+			return this._dragDistance; 
+		}
+		public set dragDistance(val: number) { 
+			this._dragDistance = val;
+		}
+
+		/**
+		* Temporary property that gets updated everyframe with the pointer that is currently 'down' on this entity.
+		* @property _nowDown
+		* @type Kiwi.Input.Pointer
+		* @default null
+		* @private
+		*/
+		private _nowDown: Kiwi.Input.Pointer = null;
+
+		/**
+		* Temporary property that gets updated everyframe with the pointer that was just 'released' from being down on this entity
+		* @property _nowUp
+		* @type Kiwi.Input.Pointer
+		* @default null
+		* @private
+		*/
+		private _nowUp: Kiwi.Input.Pointer = null;
+
+		/**
+		* Temporary property of the pointer that is now within the bounds of the entity
+		* @property _nowEntered
+		* @type Kiwi.Input.Pointer
+		* @default null
+		* @private
+		*/
+		private _nowEntered: Kiwi.Input.Pointer = null;
+
+		/**
+		* Temporary property of the pointer that just left the bounds of the entity.
+		* @property _nowLeft
+		* @type Kiwi.Input.Pointer
+		* @default null
+		* @private
+		*/
+		private _nowLeft: Kiwi.Input.Pointer = null;
+
+		/**
+		* Temporary property of the pointer that just started draggging the entity.
+		* @property _nowDragging
+		* @type Kiwi.Input.Pointer
+		* @default null
+		* @private
+		*/
+		private _nowDragging: Kiwi.Input.Pointer = null;
+
+		/**
+		* Enables the dragging of this entity. 
+		* @method enableDrag
+		* @param [snapToCenter=false] {boolean} If when dragging the Entity should snap to the center of the pointer.
+		* @param [distance=1] {number} If when dragging the Entity should snap to numbers divisible by this amount.
+		* @public
+		*/
+		public enableDrag(snapToCenter:boolean = false, distance:number = 1) {
+
+			if (this.enabled == false) this.enabled = true;
+			this._dragEnabled = true;
+			this._dragSnapToCenter = snapToCenter;
+			this._dragDistance = distance;
+			this._isDragging = null;
+
+		}
+
+		/**
+		* Disables the dragging of this entity. 
+		* @method disableDrag
+		* @public
+		*/
+		public disableDrag() {
+			this._dragEnabled = false;
+			this._isDragging = null;
+		}
+
+		/**
+		* The update loop for the input. 
+		* @method update
+		* @protected
+		*/
+		public update() {
+
+			if (this.enabled === false  ||  !this.game || this.owner.active === false) {
+				return;
+			}
+
+			// Reset the temporary properties
+			this._nowDown = null;
+			this._nowUp = null;
+			this._nowEntered = null;
+			this._nowLeft = null;
+			this._nowDragging = null;
+
+			//Use the appropriate method of checking.
+			if (Kiwi.DEVICE.touch) {
+				this._updateTouch();
+			} else {
+				this._updateMouse();
+			}
+			
+			//If the entity is dragging.
+			if (this.isDragging) { 
+
+				this._tempPoint = this.game.cameras.defaultCamera.transformPoint(this._isDragging.point);
+
+				if (this._dragSnapToCenter === false) {
+					this.owner.transform.x = Kiwi.Utils.GameMath.snapTo((this._tempPoint.x - this._box.hitboxOffset.x - this._distance.x), this._dragDistance);
+					this.owner.transform.y = Kiwi.Utils.GameMath.snapTo((this._tempPoint.y - this._box.hitboxOffset.y - this._distance.y), this._dragDistance);
+				} else {
+					this.owner.transform.x = Kiwi.Utils.GameMath.snapTo((this._tempPoint.x - this._box.hitboxOffset.x - this._box.worldHitbox.width / 2), this._dragDistance);
+					this.owner.transform.y = Kiwi.Utils.GameMath.snapTo((this._tempPoint.y - this._box.hitboxOffset.y - this._box.worldHitbox.height / 2), this._dragDistance);
+				}
+			}
+		}
+
+		/**
+		* The update loop that gets executed when the game is using the touch manager.
+		* @method _updateTouch
+		* @private
+		*/
+		private _updateTouch() {
+
+			for (var i = 0; i < this.game.input.touch.maximumPointers; i++) {
+
+				//if that pointer is active then see where it is
+				if (this.game.input.touch.fingers[i].active === true) {
+					this._evaluateTouchPointer(this.game.input.touch.fingers[i]);
+				}
+				//if the pointer is inactive check to see if it was just down
+				else if (this.isDown === true && this._isDown.id === this.game.input.touch.fingers[i].id) {
+					this._nowUp = this.game.input.touch.fingers[i];
+				}
+				//if the pointer is not active but was within the bounds check to see if it is now outside
+				else if (this.isDown === false && this._nowUp === null && this.withinBounds === true && this._withinBounds.id === this.game.input.touch.fingers[i].id) {
+					this._nowUp = this.game.input.touch.fingers[i];
+				}
+
+			}
+
+			//Fire the events. LOTS OF CONDITIONS
+			if (this._nowEntered !== null && this.withinBounds === false) { 
+				this._withinBounds = this._nowEntered;
+				this._outsideBounds = false;
+				this._onEntered.dispatch(this.owner, this._nowEntered);
+			}
+
+			if (this._nowLeft !== null && this.withinBounds === true) { 
+				this._withinBounds = null;
+				this._outsideBounds = true;
+				this._onLeft.dispatch(this.owner, this._nowLeft);
+			}
+
+			if (this._nowDown !== null && this.isDown === false) { 
+				this._onDown.dispatch(this.owner, this._nowDown);
+				this._isDown = this._nowDown;
+				this._isUp = false;
+				this._withinBounds = this._nowDown;
+				this._outsideBounds = false;
+			}
+
+			if (this._dragEnabled == true && this.isDragging === false && this._nowDragging !== null) {
+				this._onDragStarted.dispatch(this.owner, this._nowDragging);
+				this._isDragging = this._nowDragging;
+			}
+
+			if (this._nowUp !== null) { 
+				this._onUp.dispatch(this.owner, this._nowUp);
+				this._isDown = null;
+				this._isUp = true;
+				this._withinBounds = null;
+				this._outsideBounds = true;
+
+				//dispatch drag event
+				if (this.isDragging === true && this._isDragging.id == this._nowUp.id) {
+					this._isDragging = null;
+					this._onDragStopped.dispatch(this.owner, this._nowUp);
+				}
+			}
+
+		}
+
+		/**
+		* A private method for checking to see if a touch pointer should activate any events.
+		* @method _evaluateTouchPointer
+		* @param pointer {Kiwi.Input.Finger} The pointer you are checking against.
+		* @private
+		*/
+		private _evaluateTouchPointer(pointer:Kiwi.Input.Finger) {
+
+			//if nothing isdown or what is down is the current pointer
+			if (this.isDown === false || this._isDown.id === pointer.id) {
+
+				this._tempPoint = this.game.cameras.defaultCamera.transformPoint( pointer.point );
+				this._tempCircle.setTo(this._tempPoint.x, this._tempPoint.y, pointer.circle.diameter);
+
+				if (Kiwi.Geom.Intersect.circleToRectangle(this._tempCircle, this._box.worldHitbox).result) {
+					if (this.isDown === true && this._isDown.id === pointer.id || this.isDown === false && pointer.duration > 1) {
+						this._nowEntered = pointer;
+					}
+
+					if (this.isDown === false && pointer.frameDuration < 2) {
+						this._nowDown = pointer;
+					}
+
+					if (this._dragEnabled && this.isDragging == false && this.isDown == true) {
+						this._distance.x = this._tempPoint.x - this._box.worldHitbox.left;
+						this._distance.y = this._tempPoint.y - this._box.worldHitbox.top;
+						this._nowDragging = pointer; 
+					}
+				} else {
+					if (this.isDown === true) {
+						this._nowLeft = pointer;
+					} else if(this.withinBounds === true && this._withinBounds.id == pointer.id) {
+						this._nowLeft = pointer;
+					}
+				}
+
+			}
+
+		}
+
+		/**
+		* The update loop that runs when the mouse manager is the method for interacting with the screen.
+		* @method _updateMouse
+		* @private
+		*/
+		private _updateMouse() {
+
+			this._evaluateMousePointer(this.game.input.mouse.cursor);
+
+			//dispatch the events
+			if (this._nowLeft !== null) {
+				this._onLeft.dispatch(this.owner, this._nowLeft);
+			}
+
+			if (this._nowEntered !== null) {
+				this._onEntered.dispatch(this.owner, this._nowEntered);
+			}
+			
+			if (this._nowDown !== null && this.isDown === false) {
+				this._onDown.dispatch(this.owner, this._nowDown);
+				this._isDown = this._nowDown;
+				this._isUp = false;
+			}
+
+			if (this._dragEnabled == true && this.isDragging === false && this._nowDragging !== null) {
+				this._onDragStarted.dispatch(this.owner, this._nowDragging);
+				this._isDragging = this._nowDragging;
+			}
+
+			if (this.isDown === true && this._nowUp !== null && this._isDown.id === this._nowUp.id) {
+				this._onUp.dispatch(this.owner, this._nowUp);
+				
+				// Dispatch drag event
+				if (this.isDragging === true && this._isDragging.id == this._nowUp.id) {
+					this._isDragging = null;
+					this._onDragStopped.dispatch(this.owner, this._nowUp);
+				}
+
+				this._isDown = null;
+				this._isUp = true;
+			}
+
+		}
+
+		/**
+		* Evaluates where and what the mouse cursor is doing in relation to this box. Needs a little bit more love.
+		* @method _evaluateMousePointer
+		* @param pointer {Kiwi.Input.MouseCursor}
+		* @private
+		*/
+		private _evaluateMousePointer(pointer:Kiwi.Input.MouseCursor) {
+
+			this._tempPoint = this.game.cameras.defaultCamera.transformPoint(pointer.point);
+
+			if (Kiwi.Geom.Intersect.pointToRectangle(this._tempPoint, this._box.worldHitbox).result) {
+				
+				if (this._dragEnabled && this.isDragging === false) {
+					this._distance.x = this._tempPoint.x - this._box.worldHitbox.left;
+					this._distance.y = this._tempPoint.y - this._box.worldHitbox.top;
+				}
+
+				//  Has it just moved inside?
+				if (this.withinBounds === false) {
+					this._nowEntered = pointer;
+					this._withinBounds = pointer;
+					this._outsideBounds = false;
+					this._justEntered = true;
+				}
+
+			} else {
+				
+				//  It's outside the bounds now, was it previously in?
+				if (this.withinBounds === true && this.isDragging === false) {
+					this._nowLeft = pointer;
+					this._withinBounds = null;
+					this._outsideBounds = true;
+				}
+
+			}
+
+			//  Input is down (click/touch)
+			if (pointer.isDown === true) {
+
+				//if is was a mouse, did it just enter?
+				if (this._justEntered) {
+					this._isDown = pointer;
+					this._isUp = false;
+					this._tempDragDisabled = true;
+				}
+
+				//  Within bounds? 
+				if (this.withinBounds === true && this.isDown === false && this._nowDown === null) {
+					this._nowDown = pointer;
+				} 
+
+				if (this._dragEnabled === true && this.isDragging == false && this._tempDragDisabled === false) {
+
+					if(this.isDown == true) {
+						this._nowDragging = pointer;
+
+					}
+				}
+
+			} else { 
+				
+				if (this._tempDragDisabled === true) this._tempDragDisabled = false;
+
+				if (this.isDown === true) {
+					this._nowUp = pointer;
+				}
+			}
+
+			if (this._justEntered) this._justEntered = false;
+		}
+
+		/**
+		* Destroys the input.
+		* @method destory
+		* @public
+		*/
+		public destroy() {
+
+			super.destroy();
+
+			this.enabled = false;
+			delete this._box;
+			delete this._isDown;
+			delete this._isUp;
+			delete this._isDragging;
+			delete this._dragEnabled;
+			if(this._onDown) this._onDown.dispose();
+			delete this._onDown;
+			if(this._onDragStarted) this._onDragStarted.dispose();
+			delete this._onDragStarted;
+			if (this._onUp) this._onUp.dispose();
+			delete this._onUp;
+			if (this._onLeft) this._onLeft.dispose();
+			delete this._onLeft;
+			if (this._onEntered) this._onEntered.dispose();
+			delete this._onEntered;
+			if (this._onDragStopped) this._onDragStopped.dispose();
+			delete this._onDragStopped;
+			delete this._dragDistance;
+
+		}
+
+	}
 
 }
-
-
diff --git a/src/components/Sound.ts b/src/components/Sound.ts
index 677c75d..ec75d57 100644
--- a/src/components/Sound.ts
+++ b/src/components/Sound.ts
@@ -3,189 +3,189 @@
 * @module Kiwi
 * @submodule Components 
 * 
-*/ 
+*/
 
 module Kiwi.Components {
-    
-    /**
-    * The Sound Component is a class to assist with the creation and management of multiple pieces of audio that may exist on a single Entity. 
-    * This class is NOT needed when dealing with audio but is instead can be used to assist in dealing with audio.
-    * 
-    * @class Sound
-    * @extends Kiwi.Component
-    * @namespace Kiwi.Components
-    * @constructor
-    * @param parent {Any} Who the owner of the sound component is.
-    * @return {Kiwi.Components.Sound}
-    */
-    export class Sound extends Component {
- 
-        constructor(parent) {
-
-            super(parent, 'Sound');
-
-            this._audio = [];
-        }
-
-        /**
-        * Returns the type of object that this is.
-        * @method objType 
-        * @return {String} "Sound"
-        * @public
-        */
-        public objType():string {
-            return 'Sound';
-        }
-
-        /**
-        * Contains a list of all of the Audio objects that are on this component.
-        * @private
-        * @type Array 
-        * @private
-        */
-        private _audio: Kiwi.Sound.Audio[];
-
-        /**
-        * Creates a new audio segment on this component.
-        *
-        * @method addSound
-        * @param name {string} The name for this audio file. This is how you will access the audio from this component and so it should be unique.
-        * @param key {string} The piece of audio that you want to use. 
-        * @param [volume=1] {number} The volume that the audio should be set to.
-        * @param [loop=false] {boolean} If the audio should keep play again when it finishes playing.
-        * @return {Kiwi.Sound.Audio}
-        * @public 
-        */
-        public addSound(name: string, key: string, volume: number=1, loop: boolean=false): Kiwi.Sound.Audio {
-
-            if (this._validate(name) == true) return;
-
-            var audio = this.game.audio.add(key, volume, loop);
-            this._audio[name] = audio;
-
-            return audio;
-        }
-
-        /**
-        * Removes the audio sementment with the name you have given.
-        *
-        * @method removeSound
-        * @param name {string} The piece of audio you would like to remove.
-        * @public
-        */
-        public removeSound(name: string) {
-
-            if (this._validate(name) == false) return;
-
-            this._audio[name].stop();
-            this._audio[name].destroy();
-            delete this._audio[name];
-
-        }
-
-        /**
-        * Returns the Audio object for the sound that you pass. 
-        *
-        * @method getSound
-        * @param name {string} The piece of audio you would like to grab.
-        * @return {Kiwi.Sound.Audio}
-        * @public
-        */
-        public getSound(name: string): Kiwi.Sound.Audio {
-            if (this._validate(name) == false) return;
-
-            return this._audio[name];
-        }
-
-        /**
-        * This method is used to check to see if an audio segment with the name that is specified is on this component.
-        * 
-        * @method _validate
-        * @param name {string} The name of the audio segment you want to check exists.
-        * @return {boolean}
-        * @private
-        */
-        
-        private _validate(name:string) {
-            if (this._audio[name] === undefined) {
-                return false;
-            } else {
-                return true;
-            }
-        }
-
-        /**
-        * Plays the audio that you specify.
-        * 
-        * @method play
-        * @param name {string} The name of the audio file you would like to play.
-        * @public
-        */
-        public play(name:string) {
-
-            if (this._validate(name) == false) return;
-            
-            this._audio[name].play();
-
-        }
-
-        /**
-        * Stops the audio that you specify from playing.
-        * 
-        * @method play
-        * @param name {string} Name of the audio file you would like to stop.
-        * @public
-        */
-        public stop(name:string) {
-            
-            if (this._validate(name) == false) return;
-
-            this._audio[name].stop();
-
-        }
-        
-        /**
-        * Pauses the audio that you specify. 
-        * 
-        * @method play
-        * @param name {string} The name of the audio you would like to pause.
-        * @public
-        */
-        public pause(name: string) {
-            if (this._validate(name) == false) return;
-
-            this._audio[name].pause();
-        }
-
-        /**
-        * Resumes the audio that you specify. Note: Audio can only resume if it was paused initially.
-        * 
-        * @method play
-        * @param name {string} The name of the audio you would like to resume.
-        * @public
-        */
-        public resume(name: string) {
-            
-            if (this._validate(name) == false) return;
-
-            this._audio[name].resume();
-        }
-
-        /**
-        * Destroys this AudioComponent and all of the Audio objects it has.
-        * @method destroy
-        * @public
-        */
-        public destroy() {
-            super.destroy();
-            for (var key in this._audio) {
-                this._audio[key].stop();
-                this._audio[key].destroy();
-                delete this._audio[key];
-            }
-            delete this._audio;
-        }
-
-    }
-
-}
\ No newline at end of file
+
+	/**
+	* The Sound Component is a class to assist with the creation and management of multiple pieces of audio that may exist on a single Entity. 
+	* This class is NOT needed when dealing with audio but is instead can be used to assist in dealing with audio.
+	* 
+	* @class Sound
+	* @extends Kiwi.Component
+	* @namespace Kiwi.Components
+	* @constructor
+	* @param parent {Any} Who the owner of the sound component is.
+	* @return {Kiwi.Components.Sound}
+	*/
+	export class Sound extends Component {
+
+		constructor(parent) {
+
+			super(parent, 'Sound');
+
+			this._audio = [];
+		}
+
+		/**
+		* Returns the type of object that this is.
+		* @method objType 
+		* @return {String} "Sound"
+		* @public
+		*/
+		public objType():string {
+			return 'Sound';
+		}
+
+		/**
+		* Contains a list of all of the Audio objects that are on this component.
+		* @private
+		* @type Array 
+		* @private
+		*/
+		private _audio: Kiwi.Sound.Audio[];
+
+		/**
+		* Creates a new audio segment on this component.
+		*
+		* @method addSound
+		* @param name {string} The name for this audio file. This is how you will access the audio from this component and so it should be unique.
+		* @param key {string} The piece of audio that you want to use. 
+		* @param [volume=1] {number} The volume that the audio should be set to.
+		* @param [loop=false] {boolean} If the audio should keep play again when it finishes playing.
+		* @return {Kiwi.Sound.Audio}
+		* @public 
+		*/
+		public addSound(name: string, key: string, volume: number=1, loop: boolean=false): Kiwi.Sound.Audio {
+
+			if (this._validate(name) == true) return;
+
+			var audio = this.game.audio.add(key, volume, loop);
+			this._audio[name] = audio;
+
+			return audio;
+		}
+
+		/**
+		* Removes the audio sementment with the name you have given.
+		*
+		* @method removeSound
+		* @param name {string} The piece of audio you would like to remove.
+		* @public
+		*/
+		public removeSound(name: string) {
+
+			if (this._validate(name) == false) return;
+
+			this._audio[name].stop();
+			this._audio[name].destroy();
+			delete this._audio[name];
+
+		}
+
+		/**
+		* Returns the Audio object for the sound that you pass. 
+		*
+		* @method getSound
+		* @param name {string} The piece of audio you would like to grab.
+		* @return {Kiwi.Sound.Audio}
+		* @public
+		*/
+		public getSound(name: string): Kiwi.Sound.Audio {
+			if (this._validate(name) == false) return;
+
+			return this._audio[name];
+		}
+
+		/**
+		* This method is used to check to see if an audio segment with the name that is specified is on this component.
+		* 
+		* @method _validate
+		* @param name {string} The name of the audio segment you want to check exists.
+		* @return {boolean}
+		* @private
+		*/
+		
+		private _validate(name:string) {
+			if (this._audio[name] === undefined) {
+				return false;
+			} else {
+				return true;
+			}
+		}
+
+		/**
+		* Plays the audio that you specify.
+		* 
+		* @method play
+		* @param name {string} The name of the audio file you would like to play.
+		* @public
+		*/
+		public play(name:string) {
+
+			if (this._validate(name) == false) return;
+			
+			this._audio[name].play();
+
+		}
+
+		/**
+		* Stops the audio that you specify from playing.
+		* 
+		* @method play
+		* @param name {string} Name of the audio file you would like to stop.
+		* @public
+		*/
+		public stop(name:string) {
+			
+			if (this._validate(name) == false) return;
+
+			this._audio[name].stop();
+
+		}
+		
+		/**
+		* Pauses the audio that you specify. 
+		* 
+		* @method play
+		* @param name {string} The name of the audio you would like to pause.
+		* @public
+		*/
+		public pause(name: string) {
+			if (this._validate(name) == false) return;
+
+			this._audio[name].pause();
+		}
+
+		/**
+		* Resumes the audio that you specify. Note: Audio can only resume if it was paused initially.
+		* 
+		* @method play
+		* @param name {string} The name of the audio you would like to resume.
+		* @public
+		*/
+		public resume(name: string) {
+			
+			if (this._validate(name) == false) return;
+
+			this._audio[name].resume();
+		}
+
+		/**
+		* Destroys this AudioComponent and all of the Audio objects it has.
+		* @method destroy
+		* @public
+		*/
+		public destroy() {
+			super.destroy();
+			for (var key in this._audio) {
+				this._audio[key].stop();
+				this._audio[key].destroy();
+				delete this._audio[key];
+			}
+			delete this._audio;
+		}
+
+	}
+
+}
diff --git a/src/core/Camera.ts b/src/core/Camera.ts
index c6b16fe..b1d7efe 100644
--- a/src/core/Camera.ts
+++ b/src/core/Camera.ts
@@ -6,226 +6,225 @@
 
 module Kiwi {
 
-    /**
-    * A Camera is used to render a particular section of the game world on the stage. Each Camera has a coordinates which are held in the transform property, and a width/height. Note: This class should never be directly instantiated but instead should be made through a CameraManager's 'create' method.
-    *
-    * @class Camera
-    * @namespace Kiwi
-    * @constructor
-    * @param game {Kiwi.Game} The game that this camera belongs to.
-    * @param id {Number} A unique ID for this camera 
-    * @param name {String} The name this camera goes by
-    * @param x {Number} The x coordinate of the camera
-    * @param y {Number} The y coordinate of the camera
-    * @param width {Number} The width of the camera
-    * @param height {Number} The cameras height
-    * @return {Kiwi.Camera}
-    * 
-    */
-    export class Camera {
-         
-        constructor(game: Kiwi.Game, id: number, name: string,x:number,y:number,width:number,height:number) {
-
-            this._game = game;
-            this.id = id;
-            this.name = name;
-            
-            //size could autoresize to fit stage
-            this.width = width;
-            this.height = height;
-            this.transform = new Kiwi.Geom.Transform(x, y);
-            this.transform.rotPointX = x + width / 2;
-            this.transform.rotPointY = y + height / 2;
-
-            this._game.stage.onResize.add(this._updatedStageSize, this);
-        }
-
-        /**
-        * The width of this camara.
-        * @property width
-        * @type Number
-        * @public
-        */
-        public width: number;
-        
-        /**
-        * The height of this camera.
-        * @property height
-        * @type Number
-        * @public
-        */
-        public height: number;
-
-        /**
-        * The type of object this is.
-        * @method objType
-        * @return {String} "Camera"
-        * @public
-        */
-        public objType() {
-            return "Camera";
-        }
-
-        /**
-        * If true then the camera will be resized to fit the stage when the stage is resized
-        * @property fitToStage
-        * @type boolean
-        * @default true
-        * @public
-        */
-        public fitToStage: boolean = true;
-
-        /** 
-	    * The Transform controls the location of the camera within the game world. Also controls the cameras scale and rotation.
-	    * @property transform
-	    * @type Kiwi.Geom.Transform
-        * @public
-	    */
-        public transform: Kiwi.Geom.Transform;
-
-        /**
+	/**
+	* A Camera is used to render a particular section of the game world on the stage. Each Camera has a coordinates which are held in the transform property, and a width/height. Note: This class should never be directly instantiated but instead should be made through a CameraManager's 'create' method.
+	*
+	* @class Camera
+	* @namespace Kiwi
+	* @constructor
+	* @param game {Kiwi.Game} The game that this camera belongs to.
+	* @param id {Number} A unique ID for this camera 
+	* @param name {String} The name this camera goes by
+	* @param x {Number} The x coordinate of the camera
+	* @param y {Number} The y coordinate of the camera
+	* @param width {Number} The width of the camera
+	* @param height {Number} The cameras height
+	* @return {Kiwi.Camera}
+	* 
+	*/
+	export class Camera {
+
+		constructor(game: Kiwi.Game, id: number, name: string,x:number,y:number,width:number,height:number) {
+
+			this._game = game;
+			this.id = id;
+			this.name = name;
+			
+			//size could autoresize to fit stage
+			this.width = width;
+			this.height = height;
+			this.transform = new Kiwi.Geom.Transform(x, y);
+			this.transform.rotPointX = x + width / 2;
+			this.transform.rotPointY = y + height / 2;
+
+			this._game.stage.onResize.add(this._updatedStageSize, this);
+		}
+
+		/**
+		* The width of this camara.
+		* @property width
+		* @type Number
+		* @public
+		*/
+		public width: number;
+
+		/**
+		* The height of this camera.
+		* @property height
+		* @type Number
+		* @public
+		*/
+		public height: number;
+
+		/**
+		* The type of object this is.
+		* @method objType
+		* @return {String} "Camera"
+		* @public
+		*/
+		public objType() {
+			return "Camera";
+		}
+
+		/**
+		* If true then the camera will be resized to fit the stage when the stage is resized
+		* @property fitToStage
+		* @type boolean
+		* @default true
+		* @public
+		*/
+		public fitToStage: boolean = true;
+
+		/** 
+		* The Transform controls the location of the camera within the game world. Also controls the cameras scale and rotation.
+		* @property transform
+		* @type Kiwi.Geom.Transform
+		* @public
+		*/
+		public transform: Kiwi.Geom.Transform;
+
+		/**
 		* Updates the width/height of this camera. Is used when the stage resizes.
-        * @method _updatedStageSize
-        * @param width {Number} The new width of the camera.
-        * @param height {Number} The new height of the camera.
-        * @private
-		*/
-        private _updatedStageSize(width: number, height: number) {
- 
-            this.width = width;
-            this.height = height;
-          
-        }
-
-        /**
-        * The game this Group belongs to
-        * @property game
-        * @type Kiwi.Game
-        * @private
-	    */
-        private _game: Kiwi.Game;
-
-        /**
-        * A unique identifier for this Layer within the game used internally by the framework. See the name property for a friendly version.
-        * @property id
-        * @type number
-    	* @public
-        */
-        public id: number;
-
-        /**
-        * A name for this Camera. This is not checked for uniqueness within the Game, but is very useful for debugging.
-        * @property name
-        * @type string
-    	* @public
-        */
-        public name: string;
-
-        /**
+		* @method _updatedStageSize
+		* @param width {Number} The new width of the camera.
+		* @param height {Number} The new height of the camera.
+		* @private
+		*/
+		private _updatedStageSize(width: number, height: number) {
+
+			this.width = width;
+			this.height = height;
+
+		}
+
+		/**
+		* The game this Group belongs to
+		* @property game
+		* @type Kiwi.Game
+		* @private
+		*/
+		private _game: Kiwi.Game;
+
+		/**
+		* A unique identifier for this Layer within the game used internally by the framework. See the name property for a friendly version.
+		* @property id
+		* @type number
+		* @public
+		*/
+		public id: number;
+
+		/**
+		* A name for this Camera. This is not checked for uniqueness within the Game, but is very useful for debugging.
+		* @property name
+		* @type string
+		* @public
+		*/
+		public name: string;
+
+		/**
 		* Controls whether this Camera is rendered
-        * @property _visible
-        * @type boolean
-        * @private
-		*/
-        private _visible: boolean;
-
-        /**
-        * Controls whether this Camera is rendered.
-        * @property visible
-        * @type boolean
-        * @public
-        */
-        public get visible(): boolean {
-            return this._visible;
-        }
-        public set visible(val: boolean) {
-            this._visible = val;
-        }
-
-        /**
+		* @property _visible
+		* @type boolean
+		* @private
+		*/
+		private _visible: boolean;
+
+		/**
+		* Controls whether this Camera is rendered.
+		* @property visible
+		* @type boolean
+		* @public
+		*/
+		public get visible(): boolean {
+			return this._visible;
+		}
+		public set visible(val: boolean) {
+			this._visible = val;
+		}
+
+		/**
 		* A flag that indicates whether this camera needs to be rendered again at the next update loop, or if nothing has changed so it doesn't.
-        * @property _dirty
-        * @type boolean
-        * @private
-        * @deprecated As of 1.1.0, no use has been found for this property.
-		*/
-        private _dirty: boolean;
-
-        /**
-        * A value used by components to control if the camera needs re-rendering.
-        * @property dirty
-        * @type boolean
-        * @public
-        * @deprecated As of 1.1.0, no use has been found for this property.
-        */
-        public get dirty(): boolean {
-            return this._dirty;
-        }
-        public set dirty(val: boolean) {
-            this._dirty = val;
-        }
-
-        /**
-        * Convert from screen coordinates to world coordinates.
-	    * Apply this camera's inverted matrix to an object with x and y
-        * properties representing a point and return the transformed point.
-        * Useful for calculating coordinates with the mouse.
-        * @method transformPoint
-        * @param point {Kiwi.Geom.Point} 
-        * @return {Kiwi.Geom.Point} Transformed clone of the original Point.
-        * @public
-        */
-        public transformPoint(point: Kiwi.Geom.Point): Kiwi.Geom.Point {
-
-            var np = point.clone();
-
-            var m = this.transform.getConcatenatedMatrix();
-            m.append( 1,0,0,1, -this.transform.rotPointX, -this.transform.rotPointY );
-            m.invert();
-
-            return m.transformPoint(np);
-        }
-
-        /**
-        * Convert from world coordinates to screen coordinates.
-        * Useful for assessing visibility.
-        * Similar to "transformPoint", but in reverse.
-        * @method transformPointToScreen
-        * @param point {Kiwi.Geom.Point}
-        * @return {Kiwi.Geom.Point} Transformed clone of the original Point.
-        * @public
-        * @since 1.2.0
-        */
-        public transformPointToScreen( point: Kiwi.Geom.Point ): Kiwi.Geom.Point {
-            var np = point.clone();
-
-            var m = this.transform.getConcatenatedMatrix();
-            m.append( 1,0,0,1, -this.transform.rotPointX, -this.transform.rotPointY );
-
-            return m.transformPoint(np);
-        }
-
-        /**
-        * The update loop that is executed every frame.
-        * @method update
-        * @public
-        */
-        public update() {
-            
-        }
-
-        /**
-        * The render loop that is executed whilst the game is playing.
-        * @method render
-        * @public
-        */
-        public render() {
-            
-            this._game.renderer.render(this);
-
-        }
-
-    }
+		* @property _dirty
+		* @type boolean
+		* @private
+		* @deprecated As of 1.1.0, no use has been found for this property.
+		*/
+		private _dirty: boolean;
+
+		/**
+		* A value used by components to control if the camera needs re-rendering.
+		* @property dirty
+		* @type boolean
+		* @public
+		* @deprecated As of 1.1.0, no use has been found for this property.
+		*/
+		public get dirty(): boolean {
+			return this._dirty;
+		}
+		public set dirty(val: boolean) {
+			this._dirty = val;
+		}
+
+		/**
+		* Convert from screen coordinates to world coordinates.
+		* Apply this camera's inverted matrix to an object with x and y
+		* properties representing a point and return the transformed point.
+		* Useful for calculating coordinates with the mouse.
+		* @method transformPoint
+		* @param point {Kiwi.Geom.Point} 
+		* @return {Kiwi.Geom.Point} Transformed clone of the original Point.
+		* @public
+		*/
+		public transformPoint(point: Kiwi.Geom.Point): Kiwi.Geom.Point {
+
+			var np = point.clone();
+
+			var m = this.transform.getConcatenatedMatrix();
+			m.append( 1,0,0,1, -this.transform.rotPointX, -this.transform.rotPointY );
+			m.invert();
+
+			return m.transformPoint(np);
+		}
+
+		/**
+		* Convert from world coordinates to screen coordinates.
+		* Useful for assessing visibility.
+		* Similar to "transformPoint", but in reverse.
+		* @method transformPointToScreen
+		* @param point {Kiwi.Geom.Point}
+		* @return {Kiwi.Geom.Point} Transformed clone of the original Point.
+		* @public
+		* @since 1.2.0
+		*/
+		public transformPointToScreen( point: Kiwi.Geom.Point ): Kiwi.Geom.Point {
+			var np = point.clone();
 
-}
+			var m = this.transform.getConcatenatedMatrix();
+			m.append( 1,0,0,1, -this.transform.rotPointX, -this.transform.rotPointY );
+
+			return m.transformPoint(np);
+		}
 
+		/**
+		* The update loop that is executed every frame.
+		* @method update
+		* @public
+		*/
+		public update() {
+
+		}
+
+		/**
+		* The render loop that is executed whilst the game is playing.
+		* @method render
+		* @public
+		*/
+		public render() {
+
+			this._game.renderer.render(this);
+
+		}
+
+	}
+
+}
diff --git a/src/core/CameraManager.ts b/src/core/CameraManager.ts
index 5173003..776da4d 100644
--- a/src/core/CameraManager.ts
+++ b/src/core/CameraManager.ts
@@ -6,197 +6,194 @@
 
 module Kiwi {
 
-    /**
-    * Used to handle the creation and management of Cameras on a Game. Each Game will always have created for it a CameraManager and a default Camera on the manager. 
-    * Games currently only usupport the use of a single camera, the default camera. Much of this class has been written with future multiple camera support in mind. 
-    * 
-    * @class CameraManager
-    * @namespace Kiwi
-    * @constructor
-    * @param {Kiwi.Game} game
-    * @return {Kiwi.CameraManager} 
-    */
-    export class CameraManager {
-         
-        constructor(game: Kiwi.Game) {
-             
-            this._game = game;
-            this._cameras = [];
-            this._nextCameraID = 0;
-
-        }
-
-        /**
-        * Returns the type of this object
-        * @method objType
-        * @return {String} "CameraManager"
-        * @public
-        */
-        public objType():string {
-            return "CameraManager";
-        }
-
-        /**
+	/**
+	* Used to handle the creation and management of Cameras on a Game. Each Game will always have created for it a CameraManager and a default Camera on the manager. 
+	* Games currently only usupport the use of a single camera, the default camera. Much of this class has been written with future multiple camera support in mind. 
+	* 
+	* @class CameraManager
+	* @namespace Kiwi
+	* @constructor
+	* @param {Kiwi.Game} game
+	* @return {Kiwi.CameraManager} 
+	*/
+	export class CameraManager {
+
+		constructor(game: Kiwi.Game) {
+
+			this._game = game;
+			this._cameras = [];
+			this._nextCameraID = 0;
+
+		}
+
+		/**
+		* Returns the type of this object
+		* @method objType
+		* @return {String} "CameraManager"
+		* @public
+		*/
+		public objType():string {
+			return "CameraManager";
+		}
+
+		/**
 		* The game this object belongs to
-        * @property _game
-        * @type Kiwi.Game
-        * @private
-    	*/
-        private _game: Kiwi.Game;
-         
-        /**
+		* @property _game
+		* @type Kiwi.Game
+		* @private
+		*/
+		private _game: Kiwi.Game;
+
+		/**
 		* A collection of cameras
-        * @property _cameras
-        * @type Array
-        * @private
-    	*/
-        private _cameras: Kiwi.Camera[];
+		* @property _cameras
+		* @type Array
+		* @private
+		*/
+		private _cameras: Kiwi.Camera[];
 
-        /**
+		/**
 		* The id which will be used when next creating a camera
-        * @property _nextCameraID
-        * @type Number
-        * @private
-    	*/
-        private _nextCameraID: number;
+		* @property _nextCameraID
+		* @type Number
+		* @private
+		*/
+		private _nextCameraID: number;
 
-        /**
+		/**
 		* The default camera that is on this manager.
-        * @property defaultCamera
-        * @type Kiwi.Camara
-        * @public
-    	*/
-        public defaultCamera: Kiwi.Camera;
+		* @property defaultCamera
+		* @type Kiwi.Camara
+		* @public
+		*/
+		public defaultCamera: Kiwi.Camera;
 
-        /**
+		/**
 		* Initializes the CameraManager, creates a new camera and assigns it to the defaultCamera
-        * @method boot
-        * @public
-    	*/
-        public boot() {
-
-            this.create("defaultCamera", 0, 0, this._game.stage.width, this._game.stage.height);
-            this.defaultCamera = this._cameras[0];
-        
-        }
-
-        /**
-        * Creates a new Camera and adds it to the collection of cameras.
-        * @param {String} name. The name of the new camera.
-        * @param {Number} x. The x position of the new camera.
-        * @param {Number} y. The y position of the new camera.
-        * @param {Number} width. The width of the new camera.
-        * @param {Number} height. The height of the new camera.
-        * @return {Kiwi.Camera} The new camera object.
-        * @public
-        */
-        public create(name: string, x: number, y: number, width: number, height: number): Kiwi.Camera {
-            
-            var newCamera: Kiwi.Camera = new Kiwi.Camera(this._game, this._nextCameraID++,name,x,y,width,height);
-            
-            //newCamera.parent = state;
-
-            this._cameras.push(newCamera);
-
-            return newCamera;
-
-        }
-
-        /**
+		* @method boot
+		* @public
+		*/
+		public boot() {
+
+			this.create("defaultCamera", 0, 0, this._game.stage.width, this._game.stage.height);
+			this.defaultCamera = this._cameras[0];
+		}
+
+		/**
+		* Creates a new Camera and adds it to the collection of cameras.
+		* @param {String} name. The name of the new camera.
+		* @param {Number} x. The x position of the new camera.
+		* @param {Number} y. The y position of the new camera.
+		* @param {Number} width. The width of the new camera.
+		* @param {Number} height. The height of the new camera.
+		* @return {Kiwi.Camera} The new camera object.
+		* @public
+		*/
+		public create(name: string, x: number, y: number, width: number, height: number): Kiwi.Camera {
+			var newCamera: Kiwi.Camera = new Kiwi.Camera(this._game, this._nextCameraID++,name,x,y,width,height);
+
+			//newCamera.parent = state;
+
+			this._cameras.push(newCamera);
+
+			return newCamera;
+
+		}
+
+		/**
 		* Removes the given camera, if it is present in the camera managers camera collection.
-        * @method remove
-        * @param camera {Kiwi.Camera}
-        * @return {boolean} True if the camera was removed, false otherwise.
-        * @public
-    	*/
-        public remove(camera: Kiwi.Camera):boolean {
-             
-            var i = this._cameras.indexOf(camera); //what if it was the default one! :(
-
-            if (i !== -1) {
-                //  Send Layer a killed call
-                this._cameras.splice(i, 1);
-                return true;
-            }
-
-            return false;
-        }
-
-        /**
+		* @method remove
+		* @param camera {Kiwi.Camera}
+		* @return {boolean} True if the camera was removed, false otherwise.
+		* @public
+		*/
+		public remove(camera: Kiwi.Camera):boolean {
+			var i = this._cameras.indexOf(camera); //what if it was the default one! :(
+
+			if (i !== -1) {
+				//  Send Layer a killed call
+				this._cameras.splice(i, 1);
+				return true;
+			}
+
+			return false;
+		}
+
+		/**
 		* Calls update on all the cameras.
-        * @method update
-        * @public
-    	*/
-        public update() {
-
-            if (this._cameras.length === 0) {
-                return false;
-            }
-
-            for (var i = 0; i < this._cameras.length; i++) {
-                this._cameras[i].update();
-            }
-        
-        }
-
-        /**
+		* @method update
+		* @public
+		*/
+		public update() {
+
+			if (this._cameras.length === 0) {
+				return false;
+			}
+
+			for (var i = 0; i < this._cameras.length; i++) {
+				this._cameras[i].update();
+			}
+
+		}
+
+		/**
 		* Calls the render method on all the cameras
-        * @method render
-        * @public
-    	*/
-        public render() {
+		* @method render
+		* @public
+		*/
+		public render() {
 
-            if (this._cameras.length === 0) {
-                return false;
-            }
+			if (this._cameras.length === 0) {
+				return false;
+			}
 
-            //render each camera
-            for (var i = 0; i < this._cameras.length; i++) {
-                this._cameras[i].render();
-            }
+			//render each camera
+			for (var i = 0; i < this._cameras.length; i++) {
+				this._cameras[i].render();
+			}
 
-        }
+		}
 
-        /**
+		/**
 		* Removes all cameras in the camera Manager except the default camera. Does nothing if in multi camera mode.
-        * @method removeAll
-        * @public
-    	*/
-        public removeAll() {
-            this._cameras = []; 
-        }
-
-        /**
-        * Returns all cameras to origin. Called when starting a new state.
-        * @method zeroAllCameras
-        * @public
-        * @since 1.1.0
-        */
-        public zeroAllCameras() {
-            for( var i = 0;  i < this._cameras.length;  i++ )
-            {
-                this.zeroCamera( this._cameras[i] );
-            }
-            this.zeroCamera( this.defaultCamera );
-        }
-
-        /**
-        * Returns camera to origin.
-        * @method zeroCamera
-        * @param camera {Kiwi.Camera}
-        * @public
-        * @since 1.1.0
-        */
-        public zeroCamera(camera:Kiwi.Camera)
-        {
-            camera.transform.x = 0;
-            camera.transform.y = 0;
-            camera.transform.rotation = 0;
-            camera.transform.scaleX = 1;
-            camera.transform.scaleY = 1;
-            camera.transform.rotPointX = camera.width / 2;
-            camera.transform.rotPointY = camera.height / 2;
-        }
-
-    }
+		* @method removeAll
+		* @public
+		*/
+		public removeAll() {
+			this._cameras = []; 
+		}
+
+		/**
+		* Returns all cameras to origin. Called when starting a new state.
+		* @method zeroAllCameras
+		* @public
+		* @since 1.1.0
+		*/
+		public zeroAllCameras() {
+			for( var i = 0;  i < this._cameras.length;  i++ )
+			{
+				this.zeroCamera( this._cameras[i] );
+			}
+			this.zeroCamera( this.defaultCamera );
+		}
+
+		/**
+		* Returns camera to origin.
+		* @method zeroCamera
+		* @param camera {Kiwi.Camera}
+		* @public
+		* @since 1.1.0
+		*/
+		public zeroCamera(camera:Kiwi.Camera)
+		{
+			camera.transform.x = 0;
+			camera.transform.y = 0;
+			camera.transform.rotation = 0;
+			camera.transform.scaleX = 1;
+			camera.transform.scaleY = 1;
+			camera.transform.rotPointX = camera.width / 2;
+			camera.transform.rotPointY = camera.height / 2;
+		}
+
+	}
 }
diff --git a/src/core/Component.ts b/src/core/Component.ts
index 375cf89..50bb150 100644
--- a/src/core/Component.ts
+++ b/src/core/Component.ts
@@ -6,117 +6,115 @@
 
 module Kiwi {
 
-    /**
-    * The base class that all components extend from. It contains all of the common functionality that is required of every Component.
-    * Any object  
-    *
-    * @class Component
-    * @namespace Kiwi
-    * @constructor
-    * @param owner {Object} The object that this component belongs to. 
-    * @param componentName {String} The name of this component.
-    * @return {Kiwi.Component}
-    */ 
-    export class Component {
-         
-        constructor (owner:Kiwi.IChild, name:string) {
-
-            this.owner = owner; 
-            this.game = this.owner.game;
-            this.name = name;
-            this.active = true;
-
-        }
-
-        /**
-        * Returns the type of this object
-        * @method objType
-        * @return {String} "Component"
-        * @public
-        */
-        public objType():string {
-            return "Component";
-        }
-        
-        /**
-        * The object that owns this entity
-        * @property owner
-        * @type Object
-        * @public
-        */
-        public owner: Kiwi.IChild;
-
-        /**
-        * The game this Component belongs to
-        * @property game
-        * @type Game
-        * @public
-	    */
-        public game: Kiwi.Game;
-
-        /**
-        * The name of this component.
-        * @property name
-        * @type string
-        * @public 
-        */
-        public name: string;
-         
-        /**
+	/**
+	* The base class that all components extend from. It contains all of the common functionality that is required of every Component.
+	* Any object  
+	*
+	* @class Component
+	* @namespace Kiwi
+	* @constructor
+	* @param owner {Object} The object that this component belongs to. 
+	* @param componentName {String} The name of this component.
+	* @return {Kiwi.Component}
+	*/
+	export class Component {
+
+		constructor (owner:Kiwi.IChild, name:string) {
+
+			this.owner = owner; 
+			this.game = this.owner.game;
+			this.name = name;
+			this.active = true;
+
+		}
+
+		/**
+		* Returns the type of this object
+		* @method objType
+		* @return {String} "Component"
+		* @public
+		*/
+		public objType():string {
+			return "Component";
+		}
+
+		/**
+		* The object that owns this entity
+		* @property owner
+		* @type Object
+		* @public
+		*/
+		public owner: Kiwi.IChild;
+
+		/**
+		* The game this Component belongs to
+		* @property game
+		* @type Game
+		* @public
+		*/
+		public game: Kiwi.Game;
+
+		/**
+		* The name of this component.
+		* @property name
+		* @type string
+		* @public 
+		*/
+		public name: string;
+
+		/**
 		* An active Component is one that has its update method called by its parent.
-        * @property active
-        * @type boolean
-        * @default true
+		* @property active
+		* @type boolean
+		* @default true
 		* @public
-        */
-        public active: boolean = true;
-
-        /**
-        * The state of this component. 
-        * @property dirty
-        * @type boolean
-        * @default false
-        * @deprecated
-        * @public
-        */
-        public dirty: boolean = false;
-
-        /**
-        * Components can preUpdate, that is update before the parent updates. This is to be overriden by subclasses.
-        * @method preUpdate
-        * @public
-        */
-        public preUpdate() { }
-
-        /**
-        * If the component is being added to a State rather than a Game Object then over-ride its update method to perform required tasks.
-        * @method update
-        * @public
-        */
-        public update() { }
-
-        /**
-        * Components can postUpdate, that is run an update after the parent has updated. This is to be overriden by subclasses.
-        * @method postUpdate
-        * @public
-        */
-        public postUpdate() { }
-
-        /**
-        * Destroys this component and all of the properties that exist on it.
-        * @method destroy
-        * @public
-        */
-        public destroy() {
-
-            this.active = false;
-            delete this.game;
-            delete this.owner;
-
-            this.name = '';
-
-        }
-        
-    }
+		*/
+		public active: boolean = true;
+
+		/**
+		* The state of this component. 
+		* @property dirty
+		* @type boolean
+		* @default false
+		* @deprecated
+		* @public
+		*/
+		public dirty: boolean = false;
+
+		/**
+		* Components can preUpdate, that is update before the parent updates. This is to be overriden by subclasses.
+		* @method preUpdate
+		* @public
+		*/
+		public preUpdate() { }
+
+		/**
+		* If the component is being added to a State rather than a Game Object then over-ride its update method to perform required tasks.
+		* @method update
+		* @public
+		*/
+		public update() { }
+
+		/**
+		* Components can postUpdate, that is run an update after the parent has updated. This is to be overriden by subclasses.
+		* @method postUpdate
+		* @public
+		*/
+		public postUpdate() { }
+
+		/**
+		* Destroys this component and all of the properties that exist on it.
+		* @method destroy
+		* @public
+		*/
+		public destroy() {
+
+			this.active = false;
+			delete this.game;
+			delete this.owner;
+
+			this.name = '';
 
+		}
+	}
 }
diff --git a/src/core/ComponentManager.ts b/src/core/ComponentManager.ts
index 368b05e..994f384 100644
--- a/src/core/ComponentManager.ts
+++ b/src/core/ComponentManager.ts
@@ -6,297 +6,292 @@
 
 module Kiwi {
 
-    /**
-    * The component manager is a class that is used to handle components that
-    * are active on a particular object. Any object that has a component
-    * manager attached to it can use components. If you want to check to see if
-    * a particular component is on an object you can ask the component manager.
-    *
-    * The component manager is updated once per frame (as part of its owner's
-    * update), and updates all active components. This is very useful for
-    * creating modular, customised behaviors on entities.
-    *
-    * @class ComponentManager
-    * @namespace Kiwi
-    * @constructor
-    * @param type {number} - The type of object that this component manager's owner is.
-    * @param owner {Object} - The owner of this component manager.
-    * @return {ComponentManager} 
-    * 
-    */
-    export class ComponentManager {
-         
-        constructor(type: number, owner:any) {
-
-            this._components = {};
-
-            this._type = type;
-            this._owner = owner;
-
-        }
-
-        /**
-        * Returns the type of this object
-        * @method objType
-        * @return {string} "ComponentManager"
-        * @public
-        */
-        public objType():string {
-            return "ComponentManager";
-        }
-
-        /**
-        * The owner of this Component Manager
-        * @property _owner
-        * @type {object}
-        * @private
-        */
-        private _owner: any;
-
-        /**
-        * The type of this object.
-        * @property _type
-        * @type number
-        * @private
-        */
-        private _type: number;
-
-        /**
-        * A list of all components that are currently on the ComponentManager
-        * @property _components
-        * @type Kiwi.Component 
-        * @private
-        */
-        public _components;
-
-        /**
-        * Returns true if this contains the component given, false otherwise.
-        * @method hasComponent
-        * @param value {String} the name of the component
-        * @return {boolean} True if this component manager contains the given component, false otherwise.
-        * @public
-        */
-        public hasComponent(value: string): boolean {
-
-            if (this._components[value]) {
-                return true;
-            }
-
-            return false; 
-        }
-
-        /**
-        * Returns true if this contains the component given and the component is active, false otherwise.
-        * @method hasActiveComponent
-        * @param value {String} The name of the component.
-        * @return {boolean} true if this manager contains the component and it is active, false otherwise.
-        * @public
-        */
-        public hasActiveComponent(value: string): boolean {
-
-            if (this._components[value] && this._components[value].active === true)
-            {
-                return true;
-            }
-
-            return false;
-
-        }
-
-        /**
-        * Get an existing component that has been added to the layer by its name
-        * @method getComponent
-        * @param value {String} The component name
-        * @return {Kiwi.Component} The component, if found, otherwise null
-        * @public
-        */
-        public getComponent(value: string): any {
-
-            if (this._components[value]) {
-                return this._components[value];
-            }
-
-            return null; 
-        }
-
-        /**
-        * Adds a Component to the manager.
-        * @method add
-        * @param component {Kiwi.Component} The component to add
-        * @return {Kiwi.Component} The component that was added
-        * @public
-        */
-        public add(component: Kiwi.Component): any {
-
-            this._components[component.name] = component;
-
-            return component; 
-        }
-
-        /** 
-        * Adds a batch of components to the manager at a single time. 
-        * @method addBatch
-        * @param value* {Kiwi.Component} The component/s that you would like to add.
-        * @public
-        */
-        public addBatch(...paramsArr: any[]) {
-
-            for (var i = 0; i < paramsArr.length; i++) {
-                this.add(paramsArr[i]);
-            }
-
-        }
-
-        /**
-        * Removes a component from the component manager
-        * @method removeComponent
-        * @param component {Kiwi.Component} The component to be removed.
-        * @param [destroy=true] {boolean} If the destroy method is to be called on the component when it is removed.
-        * @return {boolean} true if the component was removed successfully
-        * @public
-        */
-        public removeComponent(component: Kiwi.Component, destroy: boolean = true): boolean {
-
-            var name = component.name;
-
-            if (this._components[name]) {
-                if (destroy) {
-                    this._components[name].destroy();
-                }
-                
-                delete this._components[name];
-
-                return true; 
-            }
-
-            return false; 
-        }
-
-        /**
-        * Removes a component based on its name
-        * @method removeComponentByName
-        * @param name {String} The name of the component to be removed
-        * @param [destroy=true] {boolean} If the destroy method is to be called on the component when it is removed.
-        * @return {boolean} true if the component was removed successfully
-        * @public
-        */
-        public removeComponentByName(name: string, destroy: boolean = true): boolean {
-
-            if (this._components[name]) {
-                if (destroy) {
-                    this._components[name].destroy();
-                }
-                
-                delete this._components[name];
-
-                return true; 
-            }
-
-            return false; 
-        }
-
-        /**
-        * Removes all of the components from the component manager. 
-        * @method removeAll
-        * @param [destroy=true] {boolean} If true will destroy all components
-        * @public
-        */
-        public removeAll(destroy: boolean = true) {
-            for (var key in this._components) { 
-                this.removeComponent(this._components[key], destroy);
-            }
-        }
-
-        /**
+	/**
+	* The component manager is a class that is used to handle components that
+	* are active on a particular object. Any object that has a component
+	* manager attached to it can use components. If you want to check to see if
+	* a particular component is on an object you can ask the component manager.
+	*
+	* The component manager is updated once per frame (as part of its owner's
+	* update), and updates all active components. This is very useful for
+	* creating modular, customised behaviors on entities.
+	*
+	* @class ComponentManager
+	* @namespace Kiwi
+	* @constructor
+	* @param type {number} - The type of object that this component manager's owner is.
+	* @param owner {Object} - The owner of this component manager.
+	* @return {ComponentManager} 
+	* 
+	*/
+	export class ComponentManager {
+
+		constructor(type: number, owner:any) {
+
+			this._components = {};
+
+			this._type = type;
+			this._owner = owner;
+
+		}
+
+		/**
+		* Returns the type of this object
+		* @method objType
+		* @return {string} "ComponentManager"
+		* @public
+		*/
+		public objType():string {
+			return "ComponentManager";
+		}
+
+		/**
+		* The owner of this Component Manager
+		* @property _owner
+		* @type {object}
+		* @private
+		*/
+		private _owner: any;
+
+		/**
+		* The type of this object.
+		* @property _type
+		* @type number
+		* @private
+		*/
+		private _type: number;
+
+		/**
+		* A list of all components that are currently on the ComponentManager
+		* @property _components
+		* @type Kiwi.Component 
+		* @private
+		*/
+		public _components;
+
+		/**
+		* Returns true if this contains the component given, false otherwise.
+		* @method hasComponent
+		* @param value {String} the name of the component
+		* @return {boolean} True if this component manager contains the given component, false otherwise.
+		* @public
+		*/
+		public hasComponent(value: string): boolean {
+
+			if (this._components[value]) {
+				return true;
+			}
+
+			return false; 
+		}
+
+		/**
+		* Returns true if this contains the component given and the component is active, false otherwise.
+		* @method hasActiveComponent
+		* @param value {String} The name of the component.
+		* @return {boolean} true if this manager contains the component and it is active, false otherwise.
+		* @public
+		*/
+		public hasActiveComponent(value: string): boolean {
+
+			if (this._components[value] && this._components[value].active === true)
+			{
+				return true;
+			}
+
+			return false;
+
+		}
+
+		/**
+		* Get an existing component that has been added to the layer by its name
+		* @method getComponent
+		* @param value {String} The component name
+		* @return {Kiwi.Component} The component, if found, otherwise null
+		* @public
+		*/
+		public getComponent(value: string): any {
+
+			if (this._components[value]) {
+				return this._components[value];
+			}
+
+			return null; 
+		}
+
+		/**
+		* Adds a Component to the manager.
+		* @method add
+		* @param component {Kiwi.Component} The component to add
+		* @return {Kiwi.Component} The component that was added
+		* @public
+		*/
+		public add(component: Kiwi.Component): any {
+
+			this._components[component.name] = component;
+
+			return component; 
+		}
+
+		/** 
+		* Adds a batch of components to the manager at a single time. 
+		* @method addBatch
+		* @param value* {Kiwi.Component} The component/s that you would like to add.
+		* @public
+		*/
+		public addBatch(...paramsArr: any[]) {
+
+			for (var i = 0; i < paramsArr.length; i++) {
+				this.add(paramsArr[i]);
+			}
+
+		}
+
+		/**
+		* Removes a component from the component manager
+		* @method removeComponent
+		* @param component {Kiwi.Component} The component to be removed.
+		* @param [destroy=true] {boolean} If the destroy method is to be called on the component when it is removed.
+		* @return {boolean} true if the component was removed successfully
+		* @public
+		*/
+		public removeComponent(component: Kiwi.Component, destroy: boolean = true): boolean {
+
+			var name = component.name;
+
+			if (this._components[name]) {
+				if (destroy) {
+					this._components[name].destroy();
+				}
+				
+				delete this._components[name];
+
+				return true; 
+			}
+
+			return false; 
+		}
+
+		/**
+		* Removes a component based on its name
+		* @method removeComponentByName
+		* @param name {String} The name of the component to be removed
+		* @param [destroy=true] {boolean} If the destroy method is to be called on the component when it is removed.
+		* @return {boolean} true if the component was removed successfully
+		* @public
+		*/
+		public removeComponentByName(name: string, destroy: boolean = true): boolean {
+
+			if (this._components[name]) {
+				if (destroy) {
+					this._components[name].destroy();
+				}
+				
+				delete this._components[name];
+
+				return true; 
+			}
+
+			return false; 
+		}
+
+		/**
+		* Removes all of the components from the component manager. 
+		* @method removeAll
+		* @param [destroy=true] {boolean} If true will destroy all components
+		* @public
+		*/
+		public removeAll(destroy: boolean = true) {
+			for (var key in this._components) { 
+				this.removeComponent(this._components[key], destroy);
+			}
+		}
+
+		/**
 		* Calls preUpdate on all active Components
-        * @method preUpdate
-        * @public
-    	*/
-        public preUpdate() {
-
-            for (var name in this._components) {
-                if (this._components[name].active) {
-                    this._components[name].preUpdate();
-                }
-            }
-        
-        }
-
-        /**
+		* @method preUpdate
+		* @public
+		*/
+		public preUpdate() {
+
+			for (var name in this._components) {
+				if (this._components[name].active) {
+					this._components[name].preUpdate();
+				}
+			}
+		
+		}
+
+		/**
 		* Calls update on all active Components
-        * @method update
-        * @public
-    	*/
-        public update() {
-        
-            for (var name in this._components) {
-                if (this._components[name].active) {
-                    this._components[name].update();
-                }
-            }
-        
-        }
-
-        /**
+		* @method update
+		* @public
+		*/
+		public update() {
+		
+			for (var name in this._components) {
+				if (this._components[name].active) {
+					this._components[name].update();
+				}
+			}
+		
+		}
+
+		/**
 		* Calls postUpdate on all active Components
-        * @method postUpdate
-        * @public
-    	*/
-        public postUpdate() {
-        
-            for (var name in this._components) {
-                if (this._components[name].active) {
-                    this._components[name].postUpdate();
-                }
-            }
-        
-        }
-
-        /**
+		* @method postUpdate
+		* @public
+		*/
+		public postUpdate() {
+		
+			for (var name in this._components) {
+				if (this._components[name].active) {
+					this._components[name].postUpdate();
+				}
+			}
+		
+		}
+
+		/**
 		* Calls preRender on all active Components
-        * @method preRender
-        * @public
-    	*/
-        public preRender() {
-        
-            for (var name in this._components) {
-                if (this._components[name].active) {
-                    this._components[name].preRender();
-                }
-            }
-        
-        }
-
-        /**
+		* @method preRender
+		* @public
+		*/
+		public preRender() {
+		
+			for (var name in this._components) {
+				if (this._components[name].active) {
+					this._components[name].preRender();
+				}
+			}
+		}
+
+		/**
 		* Renders all active Components
-        * @method render
-        * @public
-    	*/
-        public render() {
-        
-            for (var name in this._components) {
-                if (this._components[name].active) {
-                    this._components[name].render();
-                }
-            }
-        
-        }
-
-        /**
+		* @method render
+		* @public
+		*/
+		public render() {
+		
+			for (var name in this._components) {
+				if (this._components[name].active) {
+					this._components[name].render();
+				}
+			}
+		}
+
+		/**
 		* Calls postRender on all active Components
-        * @method postRender
-        * @public
-    	*/
-        public postRender() {
-        
-            for (var name in this._components) {
-                if (this._components[name].active) {
-                    this._components[name].postRender();
-                }
-            }
-        
-        }
-         
-    }
-
+		* @method postRender
+		* @public
+		*/
+		public postRender() {
+		
+			for (var name in this._components) {
+				if (this._components[name].active) {
+					this._components[name].postRender();
+				}
+			}
+		}
+	}
 }
diff --git a/src/core/Entity.ts b/src/core/Entity.ts
index 4f73f5b..0ea4024 100644
--- a/src/core/Entity.ts
+++ b/src/core/Entity.ts
@@ -6,713 +6,713 @@
 
 module Kiwi {
 
-    /**
-    * An Entity is a base class for game objects to extend from and thus you should never directly instantiate this class.
-    * Every entity requires that you pass to it the state to which it belongs, so that when you switch states the appropriate entities can be deleted.
-    * 
-    * @class Entity
-    * @namespace Kiwi
-    * @constructor
-    * @param state {State} The state that this entity belongs to. Used to generate the Unique ID and for garbage collection.
-    * @param x {Number} The entities position on the x axis.
-    * @param y {Number} The entities position on the y axis.
-    * @return {Kiwi.Entity} This entity.
-    *
-    */
-    export class Entity implements Kiwi.IChild {
-         
-        constructor(state: Kiwi.State, x:number, y: number) {
-            
-            //  Properties
-            this.state = state;
-            this.game = state.game;
-            this.id = this.game.rnd.uuid();
-            this.state.addToTrackingList(this);
-            this._clock = this.game.time.clock;
-             
-            this._exists = true;
-            this._active = true;
-            this._visible = true;
-            this.components = new Kiwi.ComponentManager(Kiwi.ENTITY, this); 
-            this.transform = new Kiwi.Geom.Transform();
-            this.transform.x = x;
-            this.transform.y = y; 
-
-        }
-
-        public glRenderer: Kiwi.Renderers.Renderer;
-
-
-        /**
-        * Represents the position, scale, rotation and registration of this Entity.
-        * @property transform
-        * @type Kiwi.Geom.Transform
-        * @public
-        */
-        public transform: Kiwi.Geom.Transform;
-
-        /**
-        * The group that this entity belongs to. If added onto the state then this is the state.
-        * @property _parent
-        * @type Kiwi.Group
-        * @private
-        */
-        private _parent: Kiwi.Group = null;
-
-        /**
-        * The group that this entity belongs to/is a child of once added to one. If added onto the state then this is the state.
-        * @property parent
-        * @type Group
-        * @param val {Kiwi.Group}
-        * @public
-        */
-        public set parent(val: Kiwi.Group) {
-            this.transform.parent = (val !== null) ? val.transform : null ;
-            this._parent = val;
-        }
-        public get parent(): Kiwi.Group {
-            return this._parent;
-        }
-
-        /**
-        * X coordinate of this Entity. This is just aliased to the transform property.
-        * @property x
-        * @type Number
-        * @public
-        */
-        public get x(): number {
-            return this.transform.x;
-        }
-        public set x(value: number) {
-            this.transform.x = value;
-        }
-        
-        /**
-        * Y coordinate of this Entity. This is just aliased to the transform property.
-        * @property y
-        * @type Number
-        * @public
-        */
-        public get y(): number {
-            return this.transform.y;
-        }
-        
-        public set y(value: number) {
-            this.transform.y = value;
-        }
-
-        /**
-        * X coordinate of this Entity in world space; that is, after inheriting parent transforms. This is just aliased to the transform property. Property is READ-ONLY.
-        * @property worldX
-        * @type number
-        * @public
-        * @since 1.1.0
-        */
-        public get worldX(): number {
-            return( this.transform.worldX );
-        }
-
-        /**
-        * Y coordinate of this Entity in world space; that is, after inheriting parent transforms. This is just aliased to the transform property. Property is READ-ONLY.
-        * @property worldY
-        * @type number
-        * @public
-        * @since 1.1.0
-        */
-        public get worldY(): number {
-            return( this.transform.worldY );
-        }
-        
-        /**
-        * Scale X of this Entity. This is just aliased to the transform property.
-        * @property scaleX
-        * @type Number
-        * @public
-        */
-        public get scaleX():number {
-            return this.transform.scaleX;
-        }
-        public set scaleX(value:number) {
-            this.transform.scaleX = value;
-        }
-
-        /**
-        * Scale Y coordinate of this Entity. This is just aliased to the transform property.
-        * @property scaleY
-        * @type Number
-        * @public
-        */
-        public get scaleY(): number {
-            return this.transform.scaleY;
-        }
-        
-        public set scaleY(value: number) {
-            this.transform.scaleY = value;
-        }
-
-        /**
-        * Scale both axes of this Entity. This is just aliased to the transform property. This is WRITE-ONLY.
-        * @property scale
-        * @type number
-        * @public
-        * @since 1.1.0
-        */
-        public set scale(value: number) {
-            this.transform.scale = value;
-        }
-        
-        /**
-        * Rotation of this Entity. This is just aliased to the transform property.
-        * @property rotation
-        * @type Number
-        * @public
-        */
-        public get rotation(): number {
-            return this.transform.rotation;
-        }
-        public set rotation(value: number) {
-            this.transform.rotation = value;
-        }
-        
-        /**
-        * The rotation point on the x-axis. This is just aliased to the rotPointX on the transform object.
-        * @property rotPointX
-        * @type number
-        * @public
-        */
-        public get rotPointX(): number {
-            return this.transform.rotPointX;
-        }
-        public set rotPointX(value: number) {
-            this.transform.rotPointX = value;
-        }
-        
-        /**
-        * The rotation point on the y-axis. This is just aliased to the rotPointY on the transform object.
-        * @property rotPointY
-        * @type number
-        * @public
-        */
-        public get rotPointY(): number {
-            return this.transform.rotPointY;
-        }
-        public set rotPointY(value: number) {
-            this.transform.rotPointY = value;
-        }
-
-        /**
-        * The anchor point on the x-axis. This is just aliased to the rotPointX on the transform object.
-        * @property anchorPointX
-        * @type number
-        * @public
-        * @since 1.1.0
-        */
-        public get anchorPointX(): number {
-            return this.transform.anchorPointX;
-        }
-        public set anchorPointX(value: number) {
-            this.transform.anchorPointX = value;
-        }
-
-        /**
-        * The anchor point on the y-axis. This is just aliased to the rotPointY on the transform object.
-        * @property anchorPointY
-        * @type number
-        * @public
-        * @since 1.1.0
-        */
-        public get anchorPointY(): number {
-            return this.transform.anchorPointY;
-        }
-        public set anchorPointY(value: number) {
-            this.transform.anchorPointY = value;
-        }
-
-        /**
-        * Returns the type of child that this is. 
-        * @type Number
-        * @return {Number} returns the type of child that the entity is
-        * @public
-        */
-        public childType():number {
-            return Kiwi.ENTITY;
-        }
-
-        /**
-        * The alpha of this entity.
-        * @property _alpha
-        * @type Number
-        * @private
-        */
-        private _alpha: number = 1;
-
-        /**
-        * Alpha of this entity. A number between 0 (invisible) and 1 (completely visible).
-        * @property alpha
-        * @type Number
-        * @public
-        */
-        public set alpha(value: number) {
-            if (value <= 0) value = 0;
-            if (value > 1) value = 1;
-            this._alpha = value;
-        }
-        
-        public get alpha(): number {
-            return this._alpha;
-        }
-
-        /**
-        * A boolean that indicates whether or not this entity is visible or not. Note that is does not get set to false if the alpha is 0.
-        * @property _visible
-        * @type boolean
-        * @default true
-        * @private
-        */
-        private _visible: boolean;
-        
-        /**
-        * Set the visibility of this entity. True or False.
-        * @property visible
-        * @type boolean
-        * @default true
-        * @public
-        */
-        public set visible(value: boolean) {
-            this._visible = value;
-        }
-        public get visible(): boolean {
-            return this._visible;
-        }
-        
-        /**
-        * The width of the entity in pixels, pre-transform.
-        *
-        * To obtain the actual width, multiply width by scaleX.
-        * @property width
-        * @type number
-        * @default 0 
-        * @public
-        */
-        public width: number = 0;   //If bounds are implemented then getters and setters here would be nice.
-        
-        /**
-        * The height of the entity in pixels, pre-transform.
-        *
-        * To obtain the actual height, multiply height by scaleY.
-        * @property height
-        * @type number
-        * @default 0
-        * @public
-        */
-        public height: number = 0;
-
-        /**
-        * Scale to desired width, preserving aspect ratio. This function changes the scale, not the width. If the width changes, for example, as part of an animation sequence, the Entity will retain the new scale.
-        * @method scaleToWidth
-        * @param value {Number} The desired width in pixels.
-        * @public
-        * @since 1.1.0
-        */
-        public scaleToWidth(value: number) {
-            this.scale = value / this.width;
-        }
-
-        /**
-        * Scale to desired height, preserving aspect ratio. This function changes the scale, not the height. If the height changes, for example, as part of an animation sequence, the Entity will retain the new scale.
-        * @method scaleToHeight
-        * @param value {Number} The desired height in pixels.
-        * @public
-        * @since 1.1.0
-        */
-        public scaleToHeight(value: number) {
-            this.scale = value / this.height;
-        }
-
-        /**
-        * Center the anchor point. Moves the anchor point (rotPointX and Y) to precisely halfway along the width and height properties of this Entity.
-        * @method centerAnchorPoint
-        * @public
-        * @since 1.1.0
-        */
-        public centerAnchorPoint() {
-            this.anchorPointX = this.width * 0.5;
-            this.anchorPointY = this.height * 0.5;
-        }
-        
-        /**
-        * The texture atlas that is to be used on this entity.
-        * @property atlas
-        * @type Kiwi.Textures.TextureAtlas
-        * @public
-        */
-        public atlas: Kiwi.Textures.TextureAtlas = null;
-        
-        /**
-        * Holds the current cell that is being used by the entity.
-        * @property _cellIndex
-        * @type number
-        * @default 0
-        * @private
-        */
-        private _cellIndex: number = 0; 
-        
-        /**
-        * Used as a reference to a single Cell in the atlas that is to be rendered. 
-        * 
-        * E.g. If you had a spritesheet with 3 frames/cells and you wanted the second frame to be displayed you would change this value to 1
-        * @property cellIndex
-        * @type number
-        * @default 0
-        * @public
-        */
-        public get cellIndex():number {
-            return this._cellIndex;
-        }
-
-        public set cellIndex(val: number) {
-            //If the entity has a texture atlas
-            if (this.atlas !== null) {
-                var cell = this.atlas.cells[val];
-
-                if (cell !== undefined) {
-                    //Update the width/height of the GameObject to be the same as the width/height
-                    this._cellIndex = val;
-                    this.width = cell.w;
-                    this.height = cell.h;
-
-                } else {
-
-                    Kiwi.Log.error('Could not the set the cellIndex of a Entity, to cell that does not exist on its TextureAtlas.', '#entity', "#cellIndex");
-
-                }
-            }
-        }
-
-        /**
-        * The Component Manager
-        * @property components
-        * @type Kiwi.ComponentManager
-        * @public
-	    */
-        public components: Kiwi.ComponentManager;
-
-        /**
-        * The game this Entity belongs to
-        * @property game
-        * @type Game
-        * @public
-	    */
-        public game: Kiwi.Game;
-
-        /**
-        * The state this Entity belongs to (either the current game state or a persistent world state)
-        * @property state
-        * @type State
-        * @public
-    	*/
-        public state: Kiwi.State;
-
-        /**
-        * A unique identifier for this Entity within the game used internally by the framework. See the name property for a friendly version.
-        * @property id
-        * @type string
-        * @public
-    	*/
-        public id: string;
-
-        /**
-        * A name for this Entity. This is not checked for uniqueness within the Game, but is very useful for debugging
-        * @property name
-        * @type string
-        * @default ''
-        * @public
-    	*/
-        public name: string = '';
-
-        /**
+	/**
+	* An Entity is a base class for game objects to extend from and thus you should never directly instantiate this class.
+	* Every entity requires that you pass to it the state to which it belongs, so that when you switch states the appropriate entities can be deleted.
+	* 
+	* @class Entity
+	* @namespace Kiwi
+	* @constructor
+	* @param state {State} The state that this entity belongs to. Used to generate the Unique ID and for garbage collection.
+	* @param x {Number} The entities position on the x axis.
+	* @param y {Number} The entities position on the y axis.
+	* @return {Kiwi.Entity} This entity.
+	*
+	*/
+	export class Entity implements Kiwi.IChild {
+
+		constructor(state: Kiwi.State, x:number, y: number) {
+			
+			//  Properties
+			this.state = state;
+			this.game = state.game;
+			this.id = this.game.rnd.uuid();
+			this.state.addToTrackingList(this);
+			this._clock = this.game.time.clock;
+			 
+			this._exists = true;
+			this._active = true;
+			this._visible = true;
+			this.components = new Kiwi.ComponentManager(Kiwi.ENTITY, this); 
+			this.transform = new Kiwi.Geom.Transform();
+			this.transform.x = x;
+			this.transform.y = y; 
+
+		}
+
+		public glRenderer: Kiwi.Renderers.Renderer;
+
+
+		/**
+		* Represents the position, scale, rotation and registration of this Entity.
+		* @property transform
+		* @type Kiwi.Geom.Transform
+		* @public
+		*/
+		public transform: Kiwi.Geom.Transform;
+
+		/**
+		* The group that this entity belongs to. If added onto the state then this is the state.
+		* @property _parent
+		* @type Kiwi.Group
+		* @private
+		*/
+		private _parent: Kiwi.Group = null;
+
+		/**
+		* The group that this entity belongs to/is a child of once added to one. If added onto the state then this is the state.
+		* @property parent
+		* @type Group
+		* @param val {Kiwi.Group}
+		* @public
+		*/
+		public set parent(val: Kiwi.Group) {
+			this.transform.parent = (val !== null) ? val.transform : null ;
+			this._parent = val;
+		}
+		public get parent(): Kiwi.Group {
+			return this._parent;
+		}
+
+		/**
+		* X coordinate of this Entity. This is just aliased to the transform property.
+		* @property x
+		* @type Number
+		* @public
+		*/
+		public get x(): number {
+			return this.transform.x;
+		}
+		public set x(value: number) {
+			this.transform.x = value;
+		}
+
+		/**
+		* Y coordinate of this Entity. This is just aliased to the transform property.
+		* @property y
+		* @type Number
+		* @public
+		*/
+		public get y(): number {
+			return this.transform.y;
+		}
+
+		public set y(value: number) {
+			this.transform.y = value;
+		}
+
+		/**
+		* X coordinate of this Entity in world space; that is, after inheriting parent transforms. This is just aliased to the transform property. Property is READ-ONLY.
+		* @property worldX
+		* @type number
+		* @public
+		* @since 1.1.0
+		*/
+		public get worldX(): number {
+			return( this.transform.worldX );
+		}
+
+		/**
+		* Y coordinate of this Entity in world space; that is, after inheriting parent transforms. This is just aliased to the transform property. Property is READ-ONLY.
+		* @property worldY
+		* @type number
+		* @public
+		* @since 1.1.0
+		*/
+		public get worldY(): number {
+			return( this.transform.worldY );
+		}
+
+		/**
+		* Scale X of this Entity. This is just aliased to the transform property.
+		* @property scaleX
+		* @type Number
+		* @public
+		*/
+		public get scaleX():number {
+			return this.transform.scaleX;
+		}
+		public set scaleX(value:number) {
+			this.transform.scaleX = value;
+		}
+
+		/**
+		* Scale Y coordinate of this Entity. This is just aliased to the transform property.
+		* @property scaleY
+		* @type Number
+		* @public
+		*/
+		public get scaleY(): number {
+			return this.transform.scaleY;
+		}
+		
+		public set scaleY(value: number) {
+			this.transform.scaleY = value;
+		}
+
+		/**
+		* Scale both axes of this Entity. This is just aliased to the transform property. This is WRITE-ONLY.
+		* @property scale
+		* @type number
+		* @public
+		* @since 1.1.0
+		*/
+		public set scale(value: number) {
+			this.transform.scale = value;
+		}
+
+		/**
+		* Rotation of this Entity. This is just aliased to the transform property.
+		* @property rotation
+		* @type Number
+		* @public
+		*/
+		public get rotation(): number {
+			return this.transform.rotation;
+		}
+		public set rotation(value: number) {
+			this.transform.rotation = value;
+		}
+
+		/**
+		* The rotation point on the x-axis. This is just aliased to the rotPointX on the transform object.
+		* @property rotPointX
+		* @type number
+		* @public
+		*/
+		public get rotPointX(): number {
+			return this.transform.rotPointX;
+		}
+		public set rotPointX(value: number) {
+			this.transform.rotPointX = value;
+		}
+
+		/**
+		* The rotation point on the y-axis. This is just aliased to the rotPointY on the transform object.
+		* @property rotPointY
+		* @type number
+		* @public
+		*/
+		public get rotPointY(): number {
+			return this.transform.rotPointY;
+		}
+		public set rotPointY(value: number) {
+			this.transform.rotPointY = value;
+		}
+
+		/**
+		* The anchor point on the x-axis. This is just aliased to the rotPointX on the transform object.
+		* @property anchorPointX
+		* @type number
+		* @public
+		* @since 1.1.0
+		*/
+		public get anchorPointX(): number {
+			return this.transform.anchorPointX;
+		}
+		public set anchorPointX(value: number) {
+			this.transform.anchorPointX = value;
+		}
+
+		/**
+		* The anchor point on the y-axis. This is just aliased to the rotPointY on the transform object.
+		* @property anchorPointY
+		* @type number
+		* @public
+		* @since 1.1.0
+		*/
+		public get anchorPointY(): number {
+			return this.transform.anchorPointY;
+		}
+		public set anchorPointY(value: number) {
+			this.transform.anchorPointY = value;
+		}
+
+		/**
+		* Returns the type of child that this is. 
+		* @type Number
+		* @return {Number} returns the type of child that the entity is
+		* @public
+		*/
+		public childType():number {
+			return Kiwi.ENTITY;
+		}
+
+		/**
+		* The alpha of this entity.
+		* @property _alpha
+		* @type Number
+		* @private
+		*/
+		private _alpha: number = 1;
+
+		/**
+		* Alpha of this entity. A number between 0 (invisible) and 1 (completely visible).
+		* @property alpha
+		* @type Number
+		* @public
+		*/
+		public set alpha(value: number) {
+			if (value <= 0) value = 0;
+			if (value > 1) value = 1;
+			this._alpha = value;
+		}
+		
+		public get alpha(): number {
+			return this._alpha;
+		}
+
+		/**
+		* A boolean that indicates whether or not this entity is visible or not. Note that is does not get set to false if the alpha is 0.
+		* @property _visible
+		* @type boolean
+		* @default true
+		* @private
+		*/
+		private _visible: boolean;
+
+		/**
+		* Set the visibility of this entity. True or False.
+		* @property visible
+		* @type boolean
+		* @default true
+		* @public
+		*/
+		public set visible(value: boolean) {
+			this._visible = value;
+		}
+		public get visible(): boolean {
+			return this._visible;
+		}
+
+		/**
+		* The width of the entity in pixels, pre-transform.
+		*
+		* To obtain the actual width, multiply width by scaleX.
+		* @property width
+		* @type number
+		* @default 0 
+		* @public
+		*/
+		public width: number = 0;   //If bounds are implemented then getters and setters here would be nice.
+
+		/**
+		* The height of the entity in pixels, pre-transform.
+		*
+		* To obtain the actual height, multiply height by scaleY.
+		* @property height
+		* @type number
+		* @default 0
+		* @public
+		*/
+		public height: number = 0;
+
+		/**
+		* Scale to desired width, preserving aspect ratio. This function changes the scale, not the width. If the width changes, for example, as part of an animation sequence, the Entity will retain the new scale.
+		* @method scaleToWidth
+		* @param value {Number} The desired width in pixels.
+		* @public
+		* @since 1.1.0
+		*/
+		public scaleToWidth(value: number) {
+			this.scale = value / this.width;
+		}
+
+		/**
+		* Scale to desired height, preserving aspect ratio. This function changes the scale, not the height. If the height changes, for example, as part of an animation sequence, the Entity will retain the new scale.
+		* @method scaleToHeight
+		* @param value {Number} The desired height in pixels.
+		* @public
+		* @since 1.1.0
+		*/
+		public scaleToHeight(value: number) {
+			this.scale = value / this.height;
+		}
+
+		/**
+		* Center the anchor point. Moves the anchor point (rotPointX and Y) to precisely halfway along the width and height properties of this Entity.
+		* @method centerAnchorPoint
+		* @public
+		* @since 1.1.0
+		*/
+		public centerAnchorPoint() {
+			this.anchorPointX = this.width * 0.5;
+			this.anchorPointY = this.height * 0.5;
+		}
+
+		/**
+		* The texture atlas that is to be used on this entity.
+		* @property atlas
+		* @type Kiwi.Textures.TextureAtlas
+		* @public
+		*/
+		public atlas: Kiwi.Textures.TextureAtlas = null;
+		
+		/**
+		* Holds the current cell that is being used by the entity.
+		* @property _cellIndex
+		* @type number
+		* @default 0
+		* @private
+		*/
+		private _cellIndex: number = 0; 
+
+		/**
+		* Used as a reference to a single Cell in the atlas that is to be rendered. 
+		* 
+		* E.g. If you had a spritesheet with 3 frames/cells and you wanted the second frame to be displayed you would change this value to 1
+		* @property cellIndex
+		* @type number
+		* @default 0
+		* @public
+		*/
+		public get cellIndex():number {
+			return this._cellIndex;
+		}
+
+		public set cellIndex(val: number) {
+			//If the entity has a texture atlas
+			if (this.atlas !== null) {
+				var cell = this.atlas.cells[val];
+
+				if (cell !== undefined) {
+					//Update the width/height of the GameObject to be the same as the width/height
+					this._cellIndex = val;
+					this.width = cell.w;
+					this.height = cell.h;
+
+				} else {
+
+					Kiwi.Log.error('Could not the set the cellIndex of a Entity, to cell that does not exist on its TextureAtlas.', '#entity', "#cellIndex");
+
+				}
+			}
+		}
+
+		/**
+		* The Component Manager
+		* @property components
+		* @type Kiwi.ComponentManager
+		* @public
+		*/
+		public components: Kiwi.ComponentManager;
+
+		/**
+		* The game this Entity belongs to
+		* @property game
+		* @type Game
+		* @public
+		*/
+		public game: Kiwi.Game;
+
+		/**
+		* The state this Entity belongs to (either the current game state or a persistent world state)
+		* @property state
+		* @type State
+		* @public
+		*/
+		public state: Kiwi.State;
+
+		/**
+		* A unique identifier for this Entity within the game used internally by the framework. See the name property for a friendly version.
+		* @property id
+		* @type string
+		* @public
+		*/
+		public id: string;
+
+		/**
+		* A name for this Entity. This is not checked for uniqueness within the Game, but is very useful for debugging
+		* @property name
+		* @type string
+		* @default ''
+		* @public
+		*/
+		public name: string = '';
+
+		/**
 		* If an Entity no longer exists it is cleared for garbage collection or pool re-allocation
-        * @property _exists 
-        * @type boolean
-        * @private
+		* @property _exists 
+		* @type boolean
+		* @private
 		*/
-        private _exists: boolean;
+		private _exists: boolean;
 
-        /**
+		/**
 		* Toggles the existence of this Entity. An Entity that no longer exists can be garbage collected or re-allocated in a pool.
-        * @property exists
-        * @type boolean
-        * @public
-		*/
-        public set exists(value: boolean) {
-            this._exists = value;
-        }
-        public get exists():boolean {
-            return this._exists;
-        }
-
-        /**
-        * Any tags that are on this Entity. This can be used to grab GameObjects or Groups on the whole game which have these particular tags.
-        * By default Entitys contain no tags.
-        * @property _tags
-        * @type Array
-        * @since 1.1.0
-        * @private
-        */
-        private _tags: string[] = [];
-
-        /**
-        * Adds a new Tag to this Entity. Useful for identifying large amounts of the same type of GameObjects.
-        * You can pass multiple strings to add multiple tags.
-        * @method addTag
-        * @param tag {string} The tag that you would like to add to this Entity.
-        * @since 1.1.0
-        * @public
-        */
-        public addTag(...args: any[]) {
-
-            //Loop through the arguments
-            for (var i = 0; i < args.length; i++) {
-                if (this._tags.indexOf(args[i]) == -1) {
-                    this._tags.push(args[i]);
-                }
-            }
-            
-        }
-
-        /**
-        * Removes a Tag from this Entity.
-        * @method removeTag
-        * @param tag {string} The tag that you would like to remove from this Entity.
-        * @since 1.1.0
-        * @public
-        */
-        public removeTag(...args: any[]) {
-
-            for (var i = 0; i < args.length; i++) {
-                var index = this._tags.indexOf(args[i]);
-                if (index !== -1) this._tags.splice(index, 1);
-            }
-
-        }
-
-        /**
-        * Checks to see if this Entity has a Tag based upon a string which you pass.
-        * @method hasTag
-        * @param tag {string} 
-        * @since 1.1.0
-        * @return {boolean}
-        * @public 
-        */
-        public hasTag(tag: string): boolean {
-
-            var len = this._tags.length;
-            while (len--) {
-                if (this._tags[len] === tag) {
-                    return true;
-                }
-            }
-
-            return false;
-        }
-
-
-        /**
+		* @property exists
+		* @type boolean
+		* @public
+		*/
+		public set exists(value: boolean) {
+			this._exists = value;
+		}
+		public get exists():boolean {
+			return this._exists;
+		}
+
+		/**
+		* Any tags that are on this Entity. This can be used to grab GameObjects or Groups on the whole game which have these particular tags.
+		* By default Entitys contain no tags.
+		* @property _tags
+		* @type Array
+		* @since 1.1.0
+		* @private
+		*/
+		private _tags: string[] = [];
+
+		/**
+		* Adds a new Tag to this Entity. Useful for identifying large amounts of the same type of GameObjects.
+		* You can pass multiple strings to add multiple tags.
+		* @method addTag
+		* @param tag {string} The tag that you would like to add to this Entity.
+		* @since 1.1.0
+		* @public
+		*/
+		public addTag(...args: any[]) {
+
+			//Loop through the arguments
+			for (var i = 0; i < args.length; i++) {
+				if (this._tags.indexOf(args[i]) == -1) {
+					this._tags.push(args[i]);
+				}
+			}
+			
+		}
+
+		/**
+		* Removes a Tag from this Entity.
+		* @method removeTag
+		* @param tag {string} The tag that you would like to remove from this Entity.
+		* @since 1.1.0
+		* @public
+		*/
+		public removeTag(...args: any[]) {
+
+			for (var i = 0; i < args.length; i++) {
+				var index = this._tags.indexOf(args[i]);
+				if (index !== -1) this._tags.splice(index, 1);
+			}
+
+		}
+
+		/**
+		* Checks to see if this Entity has a Tag based upon a string which you pass.
+		* @method hasTag
+		* @param tag {string} 
+		* @since 1.1.0
+		* @return {boolean}
+		* @public 
+		*/
+		public hasTag(tag: string): boolean {
+
+			var len = this._tags.length;
+			while (len--) {
+				if (this._tags[len] === tag) {
+					return true;
+				}
+			}
+
+			return false;
+		}
+
+
+		/**
 		* An active Entity is one that has its update method called by its parent. 
-        * @property _active
-        * @type boolean
-        * @default true
-        * @private
+		* @property _active
+		* @type boolean
+		* @default true
+		* @private
 		*/
-        private _active: boolean;
+		private _active: boolean;
 
-        /**
+		/**
 		* Toggles the active state of this Entity. An Entity that is active has its update method called by its parent.
-        * This method should be over-ridden to handle specific dom/canvas/webgl implementations.
-        * @property active
-        * @type boolean
-        * @public
-		*/
-        public set active(value: boolean) {
-            this._active = value;
-        }
-        public get active():boolean {
-            return this._active;
-        }
-
-        /**
+		* This method should be over-ridden to handle specific dom/canvas/webgl implementations.
+		* @property active
+		* @type boolean
+		* @public
+		*/
+		public set active(value: boolean) {
+			this._active = value;
+		}
+		public get active():boolean {
+			return this._active;
+		}
+
+		/**
 		* Controls whether render is automatically called by the parent. 
-        * @property _willRender
-        * @type boolean
-        * @default true
-        * @private
-        * @deprecated Use _visible instead
+		* @property _willRender
+		* @type boolean
+		* @default true
+		* @private
+		* @deprecated Use _visible instead
 		*/
 		private _willRender: boolean;
 
-        /**
+		/**
 		* Toggles if this Entity will be rendered.
-        * @property willRender
-        * @type boolean
-        * @default true
-        * @public
-        * @deprecated Use visible instead
-		*/
-        public set willRender(value: boolean) {
-            this._willRender = value;
-        }
-        public get willRender():boolean {
-            return this._willRender;
-        }
-
-        /**
+		* @property willRender
+		* @type boolean
+		* @default true
+		* @public
+		* @deprecated Use visible instead
+		*/
+		public set willRender(value: boolean) {
+			this._willRender = value;
+		}
+		public get willRender():boolean {
+			return this._willRender;
+		}
+
+		/**
 		* Controls if this Entity is input enabled or not (i.e. responds to touch/mouse events)
-        * @property _inputEnabled
-        * @type boolean
-        * @private
+		* @property _inputEnabled
+		* @type boolean
+		* @private
 		*/
-        private _inputEnabled: boolean;
+		private _inputEnabled: boolean;
 
-        /**
+		/**
 		* Controls if this Entity is input enabled or not (i.e. responds to touch/mouse events)
-        * This method should be over-ridden to handle specific game object implementations.
-        * @property inputEnabled
-        * @type boolean
-        * @public
-		*/
-        public set inputEnabled(value: boolean) {
-            this._inputEnabled = value;
-        }
-        public get inputEnabled():boolean {
-            return this._inputEnabled;
-        }
-        
-        /**
+		* This method should be over-ridden to handle specific game object implementations.
+		* @property inputEnabled
+		* @type boolean
+		* @public
+		*/
+		public set inputEnabled(value: boolean) {
+			this._inputEnabled = value;
+		}
+		public get inputEnabled():boolean {
+			return this._inputEnabled;
+		}
+		
+		/**
 		* The clock that this entity use's for time based calculations. This generated by the state on instatiation.
-        * @property _clock
-        * @type Kiwi.Clock
-        * @private
+		* @property _clock
+		* @type Kiwi.Clock
+		* @private
 		*/
-        private _clock: Kiwi.Time.Clock = null;
+		private _clock: Kiwi.Time.Clock = null;
 
-        /**
+		/**
 		* The Clock used to update this all of this Entities components (defaults to the Game MasterClock)
-        * @property clock 
-        * @type Kiwi.Time.Clock
-        * @public
-		*/
-        public set clock(value: Kiwi.Time.Clock) {
-            this._clock = value;
-        }
-        public get clock(): Kiwi.Time.Clock {
-            return this._clock;
-        }
-
-        /**
+		* @property clock 
+		* @type Kiwi.Time.Clock
+		* @public
+		*/
+		public set clock(value: Kiwi.Time.Clock) {
+			this._clock = value;
+		}
+		public get clock(): Kiwi.Time.Clock {
+			return this._clock;
+		}
+
+		/**
 		* A value used by components to control if the Entity needs re-rendering
-        * @property _dirty
-        * @type boolean
-        * @private
-    	*/
-        private _dirty: boolean;
-        
-        /**
+		* @property _dirty
+		* @type boolean
+		* @private
+		*/
+		private _dirty: boolean;
+
+		/**
 		* A value used by components to control if the Entity needs re-rendering
-        * @property dirty
-        * @type boolean
-        * @public
-    	*/
-        public set dirty(value: boolean) {
-            this._dirty = value;
-        }
-        public get dirty():boolean {
-            return this._dirty;
-        }
-
-        //  Both of these methods can and often should be over-ridden by classes extending Entity to handle specific implementations
-
-        /**
-        * The type of this object.
-        * @method objType
-        * @return {String} "Entity"
-        * @public
-        */
-        public objType() {
-            return "Entity";
-        }
-
-        /**
-        * This isn't called until the Entity has been added to a Group or a State.
-        * Note: If added to a Group, who is not 'active' (so the Groups update loop doesn't run) then each member will not execute either.
-        * @method update
-        * @public
-        */
-        public update() {
-
-            this.components.preUpdate();
-            this.components.update();
-            this.components.postUpdate();
-
-        }
-
-        /**
-        * Renders the entity using the canvas renderer. 
-        * This isn't called until the Entity has been added to a Group/State which is active.
-        * This functionality is handled by the sub classes. 
-        * @method render
-        * @param {Camera} camera
-        * @public
-        */
-        public render(camera:Kiwi.Camera) {
-        
-        }
-
-        /**
-        * Renders the entity using the canvas renderer. 
-        * This isn't called until the Entity has been added to a Group/State which is active.
-        * This functionality is handled by the sub classes. 
-        * @method renderGL
-        * @param {Kiwi.Camera} camera
-        * @param {WebGLRenderingContext} gl
-        * @param [params=null] {object} params
-        * @public
-        */
-        public renderGL(gl: WebGLRenderingContext, camera: Kiwi.Camera, params: any = null) {
-        
-        }
-
-        /**
-        * Used to completely destroy this entity and of its components.
-        * Used for garbage collection and developers can also use it as needed.
-        * It is more reliable to use "exists = false", as this will ensure
-        * that "destroy" is called at a convenient time.
-        * @method destroy
-        * @param [immediate=false] {boolean} If the object should be immediately removed or if it should be removed at the end of the next update loop.
-        * @public
-        */
-        public destroy(immediate: boolean = false) {
-            
-            this._exists = false;
-            this._active = false;
-            this._visible = false;
-
-            if (immediate === true) {
-                
-                if (this.parent !== null && typeof this.parent !== "undefined") this.parent.removeChild(this);
-                if (this.state) this.state.removeFromTrackingList(this);
-                delete this._parent;
-                delete this.transform;
-                delete this._clock;
-                delete this.state;
-                delete this.game;
-                delete this.atlas;
-
-                if (this.components) this.components.removeAll(true);
-                delete this.components;
-
-            }
-        }
-
-    }
+		* @property dirty
+		* @type boolean
+		* @public
+		*/
+		public set dirty(value: boolean) {
+			this._dirty = value;
+		}
+		public get dirty():boolean {
+			return this._dirty;
+		}
+
+		//  Both of these methods can and often should be over-ridden by classes extending Entity to handle specific implementations
+
+		/**
+		* The type of this object.
+		* @method objType
+		* @return {String} "Entity"
+		* @public
+		*/
+		public objType() {
+			return "Entity";
+		}
+
+		/**
+		* This isn't called until the Entity has been added to a Group or a State.
+		* Note: If added to a Group, who is not 'active' (so the Groups update loop doesn't run) then each member will not execute either.
+		* @method update
+		* @public
+		*/
+		public update() {
+
+			this.components.preUpdate();
+			this.components.update();
+			this.components.postUpdate();
+
+		}
+
+		/**
+		* Renders the entity using the canvas renderer. 
+		* This isn't called until the Entity has been added to a Group/State which is active.
+		* This functionality is handled by the sub classes. 
+		* @method render
+		* @param {Camera} camera
+		* @public
+		*/
+		public render(camera:Kiwi.Camera) {
+		
+		}
+
+		/**
+		* Renders the entity using the canvas renderer. 
+		* This isn't called until the Entity has been added to a Group/State which is active.
+		* This functionality is handled by the sub classes. 
+		* @method renderGL
+		* @param {Kiwi.Camera} camera
+		* @param {WebGLRenderingContext} gl
+		* @param [params=null] {object} params
+		* @public
+		*/
+		public renderGL(gl: WebGLRenderingContext, camera: Kiwi.Camera, params: any = null) {
+
+		}
+
+		/**
+		* Used to completely destroy this entity and of its components.
+		* Used for garbage collection and developers can also use it as needed.
+		* It is more reliable to use "exists = false", as this will ensure
+		* that "destroy" is called at a convenient time.
+		* @method destroy
+		* @param [immediate=false] {boolean} If the object should be immediately removed or if it should be removed at the end of the next update loop.
+		* @public
+		*/
+		public destroy(immediate: boolean = false) {
+
+			this._exists = false;
+			this._active = false;
+			this._visible = false;
+
+			if (immediate === true) {
+
+				if (this.parent !== null && typeof this.parent !== "undefined") this.parent.removeChild(this);
+				if (this.state) this.state.removeFromTrackingList(this);
+				delete this._parent;
+				delete this.transform;
+				delete this._clock;
+				delete this.state;
+				delete this.game;
+				delete this.atlas;
+
+				if (this.components) this.components.removeAll(true);
+				delete this.components;
+
+			}
+		}
+
+	}
 
 }
diff --git a/src/core/Game.ts b/src/core/Game.ts
index bd0b254..e061ed2 100644
--- a/src/core/Game.ts
+++ b/src/core/Game.ts
@@ -6,594 +6,594 @@
 
 module Kiwi {
 
-    /**
-    * The base class that is used when you create a new Game. Handles the initialisation of all of the various individual game managers and holds the RAF (RequestAnimationFrame object) which is used for the game loop.
-    *
-    * @class Game
-    * @namespace Kiwi
-    * @constructor
-    * @param [domParent=''] {String} The ID of a DOM element that the game should use as its 'container'. If you are targeting Cocoon then you don't need to worry about this and can leave it blank.
-    * @param [name='KiwiGame'] {String} The name of the game that is being created. 
-    * @param [state=null] {Any} The state to load initially. This can either be the name of a state, but preferably this would be the state object itself.
-    * @param [options] {Object} Any special options for the game. E.g. Is DEBUG_ON or DEBUG_OFF, RENDERER_CANVAS or RENDERER_WEBGL, TARGET_BROWSER or TARGET_COCOON
-    *   @param [options.debug=Kiwi.DEBUG_ON] {Number} If debugging is enabled or not.
-    *   @param [options.bootCallback=null] {Function} A callback to be executed when the game reaches the boot stage.
-    *   @param [options.deviceTarget=Kiwi.TARGET_BROWSER] {Number} The type of device Kiwi is being used on.
-    *   @param [options.renderer=Kiwi.RENDERER_AUTO] {Number} The renderer Kiwi should use. 
-    *   @param [options.width=Kiwi.Stage.DEFAULT_WIDTH] {Number} The width of this instance of Kiwi.
-    *   @param [options.height=Kiwi.Stage.DEFAULT_HEIGHT] {Number} The height of this instance of Kiwi.
-    *   @param [options.scaleType=Kiwi.Stage.SCALE_NONE] {Number} The type of scaling that should be applied to Kiwi.
-    *   @param [options.plugins=[]] {Array} A list of the names of plugins that are to be used with this game.
-    *   @param [options.log] {Object} Default state of the Log properties
-    *       @param [options.log.recording=true] {Boolean} If the logs should be recorded.
-    *       @param [options.log.display=true] {Boolean} If the logs should be displayed or not.
-    *       @param [options.log.enabled=true] {Boolean} If the Logger is enabled at all.
-    *       @param [options.log.maxRecordings=Infinity] {Number} The maximum number of recordings to have at a single time.
-    * @return {Kiwi.Game}
-    * 
-    */
-    export class Game {
-         
-        constructor(domParent: string = '', name: string = 'KiwiGame', state: any = null, options: any= {}) {
-
-            Kiwi.Log.setDefaultsFromParams(options.log); 
-            Kiwi.Log.log('Kiwi.Game: ' + name + ' is booting using Kiwi.js ' + Kiwi.VERSION, '#version');
-      
-            if (Kiwi.DEVICE === null) { 
-                Kiwi.DEVICE = new Kiwi.System.Device();
-            }
-
-            if (options.debug !== 'undefined' && typeof options.debug === 'number') {
-                switch (options.debug) {
-                    case Kiwi.DEBUG_ON:
-                        this._debugOption = options.debug;
-                        Kiwi.Log.log('  Kiwi.Game: Debugging turned ON.', '#debugging' );
-                        break;
-                    case Kiwi.DEBUG_OFF:
-                        this._debugOption = options.debug;
-                        Kiwi.Log.log('  Kiwi.Game: Debugging turned OFF.', '#debugging' );
-                        break;
-                    default:
-                        this._debugOption = Kiwi.DEBUG_ON;
-                        Kiwi.Log.error('  Kiwi.Game: Debug option passed, but is not a valid option. Turned ON by default.', '#debugging' );
-                        break;
-                }
-            } else {
-                this._debugOption = Kiwi.DEBUG_ON;
-                Kiwi.Log.log('  Kiwi.Game: Debug option not specified. Turned ON by default.', '#debugging');
-            }
-
-            if (options.bootCallback !== 'undefined') {
-                this.bootCallbackOption = options.bootCallback;
-            }
-
-            //Which device are they targetting
-            if (options.deviceTarget !== 'undefined' && typeof options.deviceTarget === 'number') {
-                switch (options.deviceTarget) {
-                    case Kiwi.TARGET_BROWSER:
-                        this._deviceTargetOption = options.deviceTarget;
-                        Kiwi.Log.log('  Kiwi.Game: Targeting BROWSERS.', '#target');
-                        break;
-                    case Kiwi.TARGET_COCOON:
-                        this._deviceTargetOption = options.deviceTarget;
-                        Kiwi.Log.log('  Kiwi.Game: Targeting COCOONJS.', '#target');
-                        break;
-                    default:
-                        this._deviceTargetOption = Kiwi.TARGET_BROWSER;
-                        Kiwi.Log.error('  Kiwi.Game: Target device specified, but is not a valid option. Defaulting to BROWSER.', '#target');
-                        break;
-                }
-            } else {
-                this._deviceTargetOption = Kiwi.TARGET_BROWSER;
-                Kiwi.Log.log('  Kiwi.Game: Targeted device not specified. Defaulting to BROWSER.', '#target'); 
-            }
-
-            var renderDefault = Kiwi.RENDERER_WEBGL;
-            var renderFallback = Kiwi.RENDERER_CANVAS;
-            // Optimise renderer request
-            if (options.renderer !== 'undefined' && typeof options.renderer === 'number') {
-                switch (options.renderer) {
-                    case Kiwi.RENDERER_CANVAS:
-                        this._renderOption = options.renderer;
-                        Kiwi.Log.log('  Kiwi.Game: Rendering using CANVAS.', '#renderer', '#canvas');
-                        break;
-                    case Kiwi.RENDERER_WEBGL:
-                        if (Kiwi.DEVICE.webGL) {
-                            this._renderOption = options.renderer;
-                            Kiwi.Log.log('  Kiwi.Game: Rendering using WEBGL.', '#renderer', '#webgl');
-                        } else {
-                            this._renderOption = renderFallback;
-                            Kiwi.Log.log('  Kiwi.Game: WEBGL renderer requested but device does not support WEBGL. Rendering using CANVAS.', '#renderer', '#canvas');
-                        }
-                        break;
-                    case Kiwi.RENDERER_AUTO:
-                        if (Kiwi.DEVICE.webGL) {
-                            this._renderOption = renderDefault;
-                            Kiwi.Log.log('  Kiwi.Game: Renderer auto-detected WEBGL.', '#renderer', '#webgl');
-                        } else {
-                            this._renderOption = renderFallback;
-                            Kiwi.Log.log('  Kiwi.Game: Renderer auto-detected CANVAS.', '#renderer', '#canvas');
-                        }
-                        break;
-                    default:
-                        if (Kiwi.DEVICE.webGL) {
-                            this._renderOption = renderDefault;
-                            Kiwi.Log.log('  Kiwi.Game: Renderer specified, but is not a valid option. Defaulting to WEBGL.', '#renderer', '#webgl');
-                        } else {
-                            this._renderOption = renderFallback;
-                            Kiwi.Log.log('  Kiwi.Game: Renderer specified, but is not a valid option. WEBGL renderer sought by default but device does not support WEBGL. Defaulting to CANVAS.', '#renderer', '#canvas');
-                        }
-                        break;
-                }
-            } else {
-                if (Kiwi.DEVICE.webGL) {
-                    this._renderOption = renderDefault;
-                    Kiwi.Log.log('  Kiwi.Game: Renderer not specified. Defaulting to WEBGL.', '#renderer', '#webgl');
-                } else {
-                    this._renderOption = renderFallback;
-                    Kiwi.Log.log('  Kiwi.Game: Renderer not specified. WEBGL renderer sought by default but device does not support WEBGL. Defaulting to CANVAS.', '#renderer', '#canvas');
-                }
-            }
-            
-            
-            this.id = Kiwi.GameManager.register(this);
-            this._startup = new Kiwi.System.Bootstrap();
-
-            this.audio = new Kiwi.Sound.AudioManager(this);
-                
-            this.fileStore = new Kiwi.Files.FileStore(this);
-            this.input = new Kiwi.Input.InputManager(this);
-
-            // Width / Height
-            var width = Stage.DEFAULT_WIDTH;
-            var height = Stage.DEFAULT_HEIGHT;
-
-            if (options.width !== 'undefined' && typeof options.width === 'number') {
-                width = options.width;
-            }
-
-            if (options.height !== 'undefined' && typeof options.height === 'number') {
-                height = options.height;
-            }
-
-            Kiwi.Log.log('  Kiwi.Game: Stage Dimensions: ' + width + 'x' + height, '#dimensions');
-
-            
-            if ( !Kiwi.Utils.Common.isUndefined( options.scaleType ) ) {
-
-                switch (options.scaleType) {
-                    case Kiwi.Stage.SCALE_FIT:
-                        Kiwi.Log.log('  Kiwi.Game: Stage scaling set to FIT.', '#scaling');
-                        break;
-                    case Kiwi.Stage.SCALE_STRETCH:
-                        Kiwi.Log.log('  Kiwi.Game: Stage scaling set to STRETCH.', '#scaling');
-                        break;
-                    case Kiwi.Stage.SCALE_NONE:
-                        Kiwi.Log.log('  Kiwi.Game: Stage scaling set to NONE.', '#scaling');
-                        break;
-                    default:
-                        Kiwi.Log.log('  Kiwi.Game: Stage specified, but is not a valid option. Set to NONE.', '#scaling');
-                        options.scaleType = 0;
-                        break;
-                }
-
-            } else {
-                Kiwi.Log.log('  Kiwi.Game: Stage scaling not specified, defaulting to NONE.', '#scaling');
-                options.scaleType = 0;
-            }
-
-
-            this.stage = new Kiwi.Stage(this, name, width, height, options.scaleType);
-
-            this.renderer = null;
-           
-            this.cameras = new Kiwi.CameraManager(this);
-
-            if (this._deviceTargetOption !== Kiwi.TARGET_COCOON) this.huds = new Kiwi.HUD.HUDManager(this);
-            this.loader = new Kiwi.Files.Loader(this);
-            
-            this.states = new Kiwi.StateManager(this);
-            this.rnd = new Kiwi.Utils.RandomDataGenerator([Date.now.toString()]);
-            this.time = new Kiwi.Time.ClockManager(this);
-            this.tweens = new Kiwi.Animations.Tweens.TweenManager(this);
-            
-            //  If we have a state then pass it to the StateManager
-            if (state !== null) {
-                this.states.addState(state, true);
-            } else {
-                Kiwi.Log.log('  Kiwi.Game: Default State not passed.', '#state');
-            }
-
-            this.pluginManager = new Kiwi.PluginManager(this, options.plugins);
-
-            if (this.deviceTargetOption === Kiwi.TARGET_BROWSER) {
-
-                this._startup.boot( domParent, () => this._start() );
-            } else {
-                if (domParent !== '') {
-                    Kiwi.Log.log('  Kiwi.Game: Not Targetting a BROWSER. DOM Parent parameter ignored.', '#dom');
-                }
-                this._start();
-            }
-
-        }
-
-        /**
-        * The render mode of the game. This will be either set to CANVAS or WEBGL.
-        * @property _renderOption
-        * @type number
-        * @private
-        */
-        private _renderOption: number;
-
-        /**
-        * Returns the render mode of the game. This is READ ONLY and is decided once the game gets initialised.
-        * @property renderOption
-        * @type number
-        * @public
-        */
-        public get renderOption(): number {
-            return this._renderOption;
-        }
-
-        /**
-        * A callback function that can be passed in as an option in the conifugration object. Invoked after the boot process has completed.
-        * @property bootCallbackOption
-        * @type Function
-        * @private
-        */
-        public bootCallbackOption: Function;
-
-        /**
-        * The type of device that you are targeting. This is either set to COCOON or BROWSER
-        * @property _deviceTargetOption
-        * @type number
-        * @private
-        */
-        private _deviceTargetOption: number;
-
-        /**
-        * Returns the device target option for the game. This is READ ONLY and is decided once the game gets initialised.
-        * @property deviceTargetOption
-        * @type number
-        * @public
-        */
-        public get deviceTargetOption(): number {
-            return this._deviceTargetOption;
-        }
-
-        /**
-        * If when rendering, the game should render a new CANVAS which is above everything. This new canvas is for debugging purposes only.
-        * This gets set to either DEBUG_ON or DEBUG_OFF
-        * @property _debugOption
-        * @type number
-        * @private
-        */
-        private _debugOption: number;
-
-        /**
-        * Returns the debug option. This is READ ONLY and is decided once the game gets initialised.
-        * @property debugOption
-        * @type number
-        * @public
-        */
-        public get debugOption(): number {
-            return this._debugOption;
-        }
-
-        /**
-        * Returns true if debug option is set to Kiwi.DEBUG_ON
-        * @property debug
-        * @type boolean
-        * @public
-        */
-
-        public get debug(): boolean {
-            return this._debugOption === Kiwi.DEBUG_ON;
-        }
-
-        /**
-        * Holds the renderer that is being used. This is determined based on the _renderMode
-        * @property renderer
-        * @type IRenderManager
-        * @public
-        */
-        public renderer: IRenderManager;
-
-        /**
-        * Holds the hud manager.
-        * @property huds
-        * @type HUDManager
-        * @public
-        */
-        public huds: Kiwi.HUD.HUDManager;
-
-        /**
-        * The type of object that the game is.
-        * @method objType
-        * @return {String} "Game"
-        * @public
-        */
-        public objType() {
-            return "Game";
-        }
-
-        /**
-        * The object that peforms DOM and device startup operations for browsers (ie not cocoon)
-        * @property _startup
-        * @type Kiwi.System.Bootstrap
-        * @private
-        */
-        private _startup: Kiwi.System.Bootstrap = null;
-
-        /*
-        * The unique id for the game. 
-        * @property id
-        * @type Number
-        * @public
-        */
-        public id: number;
-         
-        /**
-        * The audio manager that handles all of the audio in game. Inside you can globally mute the audio, create new sounds, e.t.c.
-        * @property audio
-        * @type Kiwi.Sound.AudioManager
-        * @public
-        */
-        public audio: Kiwi.Sound.AudioManager = null;
-
-        /**
-        * The global file store for this game. This handles the storage and access of information loaded, as well as tags that maybe set for them individual files.
-        * @property fileStore
-        * @type Kiwi.Files.FileStore
-        * @public
-        */
-        public fileStore: Kiwi.Files.FileStore = null;
-
-        /**
-        * Handles any user input with the game. These could via the users keyboard, mouse or touch events.
-        * @property input
-        * @type Kiwi.Input.InputManager
-        * @public
-        */
-        public input: Kiwi.Input.InputManager = null;
-         
-        /**
-        * Manages the cameras the are on the stage. Single default Camera only in this version.
-        * @property cameras
-        * @type Kiwi.CameraManager
-        * @public
-        */
-        public cameras: Kiwi.CameraManager = null;
-
-        /**
-        * Manages plugins registration and initialisation for the game instance.
-        * @property pluginManager
-        * @type Kiwi.PluginManager
-        * @public
-        */
-        public pluginManager: Kiwi.PluginManager = null;
-
-        /**
-        * Loads files from outside sources and checks to see that they have loaded correctly or not.
-        * @property loader
-        * @type Kiwi.Files.Loader
-        * @public
-        */
-        public loader: Kiwi.Files.Loader = null;
-
-        /**
-        * The Request Animation Frame that is being used for the update and render loops.
-        * @property raf
-        * @type Kiwi.Utils.RequestAnimationFrame
-        * @public
-        */
-        public raf: Kiwi.Utils.RequestAnimationFrame = null;
-
-        /**
-        * The ONLY stage that is being used for this game.
-        * @property stage
-        * @type Stage
-        * @public
-        */
-        public stage: Kiwi.Stage = null;
-
-        /**
-        * Manages all of the states that exist for this game. Via the manager you can create new states, switch states and do various other tasks.
-        * @property states
-        * @type Kiwi.StateManager
-        * @public
-        */
-        public states: Kiwi.StateManager = null;
-
-        /**
-        * Holds a reference to the clocks that are being used and has a MASTER clock that is being used for the game.
-        * @property time
-        * @type Kiwi.Time.ClockManager
-        * @public
-        */
-        public time: Kiwi.Time.ClockManager = null;
-
-        /**
-        * The tween manager holds a reference to all of the tweens that are created and currently being used. 
-        * @property tweens
-        * @type Kiwi.Animations.Tweens.TweenManager
-        * @public
-        */
-        public tweens: Kiwi.Animations.Tweens.TweenManager = null;
-
-        /**
-        * A Random Data Generator. This is useful for create unique ids and random information.
-        * @property rnd
-        * @type Kiwi.Utils.RandomDataGenerato
-        * @public
-        */
-        public rnd: Kiwi.Utils.RandomDataGenerator = null;
-        
-        /**
-        * The framerate at which the game will update at.
-        * @property _framerate
-        * @type Number
-        * @default 60
-        * @public
-        */
-        private _frameRate: number = 60;
-
-        /**
-        * The interval between frames.
-        * @property _interval
-        * @type Number
-        * @default 1000/60
-        * @private
-        */
-        private _interval: number = 1000 / 60;
-
-        /**
-        * The current interval between frames.
-        * @property _delta
-        * @type number
-        * @private
-        */
-        private _delta: number = 0;
-
-        /**
-        * The last time the game was updated
-        * @property _lastTime
-        * @type number
-        * @private
-        */
-        private _lastTime: number;
-
-        /**
-        * The number of frames since the game was launched.
-        * @property _frame
-        * @type number
-        * @private
-        * @since 1.1.0
-        */
-        private _frame: number = 0;
-
-        /**
-        * The number of frames since the game was launched.
-        * 
-        * Use this to drive cyclic animations. You may manually reset it in a Kiwi.State.create() function to restart the count from 0.
-        *
-        * The largest exact integer value of a JavaScript number is 2^53, or 9007199254740992. At 60 frames per second, this will take 4,760,273 years to become inaccurate.
-        * @property frame
-        * @type number
-        * @public
-        * @since 1.1.0
-        */
-        public get frame(): number {
-            return( this._frame );
-        }
-        public set frame( value: number ) {
-            this._frame = Kiwi.Utils.GameMath.truncate( value );
-        }
-
-        /**
-        * The number of ideal frames since the game was launched.
-        *
-        * Use this to drive cyclic animations. This will be smoother than using the frame parameter. It is derived from the total time elapsed since the game launched.
-        * @property idealFrame
-        * @type number
-        * @public
-        * @since 1.1.0
-        */
-        public get idealFrame(): number {
-            return (this.time.elapsed() / (1000 / this._frameRate) );
-        }
-
-
-        /**
-        * The current frameRate that the update/render loops are running at. Note that this may not be an  accurate representation.
-        * @property frameRate
-        * @return string
-        * @public
-        */
-        public get frameRate(): number {
-
-            return this._frameRate;
-        }
-        public set frameRate(value: number) {
-            if (value > 0) {
-                this._frameRate = value;
-                this._interval = 1000 / this._frameRate;
-                this.time.setMasterInterval( this._interval );
-            }
-        }
-
-        /**
-        * The start method gets executed when the game is ready to be booted, and handles the start-up of the managers.
-        * Once the managers have started up the start loop will then begin to create the game loop.
-        * @method start
-        * @private
-        */
-        private _start() {
-
-     
-            this.stage.boot(this._startup);
-
-            if (!this.stage.renderer) Kiwi.Log.error( "  Kiwi.Game: Could not create rendering context", '#renderer' );
-            if(this._renderOption === Kiwi.RENDERER_WEBGL  &&  this.stage.ctx)
-                this._renderOption = Kiwi.RENDERER_CANVAS;  // Adapt to fallback if WebGL failed
-            this.renderer = this.stage.renderer;
-            this.renderer.boot();
-            
-            this.cameras.boot();
-            if (this._deviceTargetOption !== Kiwi.TARGET_COCOON) this.huds.boot();
-            
-            this.time.boot();
-            this.input.boot();
-            this.audio.boot();
-          
-            this.fileStore.boot();
-            this.loader.boot();
-            this.states.boot();
-
-            this.pluginManager.boot();
-
-            this._lastTime = Date.now();
-            
-            this.raf = new Kiwi.Utils.RequestAnimationFrame( () => this._loop() );
-            this.raf.start();
-
-            if (this.bootCallbackOption) {
-                Kiwi.Log.log("  Kiwi.Game: invoked boot callback", '#boot');
-                this.bootCallbackOption( this );
-            }
-        }
-        
-        /**
-        * The game loop. 
-        * @method _loop
-        * @private
-        */
-        private _loop() {
-            
-            this._delta = this.raf.currentTime - this._lastTime;
-            if (this._delta > this._interval) {
-
-                //Only update if there is a current state
-                this.time.update();
-                this.audio.update();
-                this.input.update();
-                this.tweens.update();
-                this.cameras.update();
-                if (this._deviceTargetOption !== Kiwi.TARGET_COCOON) this.huds.update();
-                this.states.update();
-                this.pluginManager.update();
-                this._frame++;
-
-                if (this.states.current !== null) {
-                    this.cameras.render();
-                    this.states.postRender();
-                }
-
-                this._lastTime = this.raf.currentTime - (this._delta % this._interval);
-            }
-        }
-
-    }
-
-}
\ No newline at end of file
+	/**
+	* The base class that is used when you create a new Game. Handles the initialisation of all of the various individual game managers and holds the RAF (RequestAnimationFrame object) which is used for the game loop.
+	*
+	* @class Game
+	* @namespace Kiwi
+	* @constructor
+	* @param [domParent=''] {String} The ID of a DOM element that the game should use as its 'container'. If you are targeting Cocoon then you don't need to worry about this and can leave it blank.
+	* @param [name='KiwiGame'] {String} The name of the game that is being created. 
+	* @param [state=null] {Any} The state to load initially. This can either be the name of a state, but preferably this would be the state object itself.
+	* @param [options] {Object} Any special options for the game. E.g. Is DEBUG_ON or DEBUG_OFF, RENDERER_CANVAS or RENDERER_WEBGL, TARGET_BROWSER or TARGET_COCOON
+	*   @param [options.debug=Kiwi.DEBUG_ON] {Number} If debugging is enabled or not.
+	*   @param [options.bootCallback=null] {Function} A callback to be executed when the game reaches the boot stage.
+	*   @param [options.deviceTarget=Kiwi.TARGET_BROWSER] {Number} The type of device Kiwi is being used on.
+	*   @param [options.renderer=Kiwi.RENDERER_AUTO] {Number} The renderer Kiwi should use. 
+	*   @param [options.width=Kiwi.Stage.DEFAULT_WIDTH] {Number} The width of this instance of Kiwi.
+	*   @param [options.height=Kiwi.Stage.DEFAULT_HEIGHT] {Number} The height of this instance of Kiwi.
+	*   @param [options.scaleType=Kiwi.Stage.SCALE_NONE] {Number} The type of scaling that should be applied to Kiwi.
+	*   @param [options.plugins=[]] {Array} A list of the names of plugins that are to be used with this game.
+	*   @param [options.log] {Object} Default state of the Log properties
+	*       @param [options.log.recording=true] {Boolean} If the logs should be recorded.
+	*       @param [options.log.display=true] {Boolean} If the logs should be displayed or not.
+	*       @param [options.log.enabled=true] {Boolean} If the Logger is enabled at all.
+	*       @param [options.log.maxRecordings=Infinity] {Number} The maximum number of recordings to have at a single time.
+	* @return {Kiwi.Game}
+	* 
+	*/
+	export class Game {
+
+		constructor(domParent: string = '', name: string = 'KiwiGame', state: any = null, options: any= {}) {
+
+			Kiwi.Log.setDefaultsFromParams(options.log); 
+			Kiwi.Log.log('Kiwi.Game: ' + name + ' is booting using Kiwi.js ' + Kiwi.VERSION, '#version');
+
+			if (Kiwi.DEVICE === null) { 
+				Kiwi.DEVICE = new Kiwi.System.Device();
+			}
+
+			if (options.debug !== 'undefined' && typeof options.debug === 'number') {
+				switch (options.debug) {
+					case Kiwi.DEBUG_ON:
+						this._debugOption = options.debug;
+						Kiwi.Log.log('  Kiwi.Game: Debugging turned ON.', '#debugging' );
+						break;
+					case Kiwi.DEBUG_OFF:
+						this._debugOption = options.debug;
+						Kiwi.Log.log('  Kiwi.Game: Debugging turned OFF.', '#debugging' );
+						break;
+					default:
+						this._debugOption = Kiwi.DEBUG_ON;
+						Kiwi.Log.error('  Kiwi.Game: Debug option passed, but is not a valid option. Turned ON by default.', '#debugging' );
+						break;
+				}
+			} else {
+				this._debugOption = Kiwi.DEBUG_ON;
+				Kiwi.Log.log('  Kiwi.Game: Debug option not specified. Turned ON by default.', '#debugging');
+			}
+
+			if (options.bootCallback !== 'undefined') {
+				this.bootCallbackOption = options.bootCallback;
+			}
+
+			//Which device are they targetting
+			if (options.deviceTarget !== 'undefined' && typeof options.deviceTarget === 'number') {
+				switch (options.deviceTarget) {
+					case Kiwi.TARGET_BROWSER:
+						this._deviceTargetOption = options.deviceTarget;
+						Kiwi.Log.log('  Kiwi.Game: Targeting BROWSERS.', '#target');
+						break;
+					case Kiwi.TARGET_COCOON:
+						this._deviceTargetOption = options.deviceTarget;
+						Kiwi.Log.log('  Kiwi.Game: Targeting COCOONJS.', '#target');
+						break;
+					default:
+						this._deviceTargetOption = Kiwi.TARGET_BROWSER;
+						Kiwi.Log.error('  Kiwi.Game: Target device specified, but is not a valid option. Defaulting to BROWSER.', '#target');
+						break;
+				}
+			} else {
+				this._deviceTargetOption = Kiwi.TARGET_BROWSER;
+				Kiwi.Log.log('  Kiwi.Game: Targeted device not specified. Defaulting to BROWSER.', '#target'); 
+			}
+
+			var renderDefault = Kiwi.RENDERER_WEBGL;
+			var renderFallback = Kiwi.RENDERER_CANVAS;
+			// Optimise renderer request
+			if (options.renderer !== 'undefined' && typeof options.renderer === 'number') {
+				switch (options.renderer) {
+					case Kiwi.RENDERER_CANVAS:
+						this._renderOption = options.renderer;
+						Kiwi.Log.log('  Kiwi.Game: Rendering using CANVAS.', '#renderer', '#canvas');
+						break;
+					case Kiwi.RENDERER_WEBGL:
+						if (Kiwi.DEVICE.webGL) {
+							this._renderOption = options.renderer;
+							Kiwi.Log.log('  Kiwi.Game: Rendering using WEBGL.', '#renderer', '#webgl');
+						} else {
+							this._renderOption = renderFallback;
+							Kiwi.Log.log('  Kiwi.Game: WEBGL renderer requested but device does not support WEBGL. Rendering using CANVAS.', '#renderer', '#canvas');
+						}
+						break;
+					case Kiwi.RENDERER_AUTO:
+						if (Kiwi.DEVICE.webGL) {
+							this._renderOption = renderDefault;
+							Kiwi.Log.log('  Kiwi.Game: Renderer auto-detected WEBGL.', '#renderer', '#webgl');
+						} else {
+							this._renderOption = renderFallback;
+							Kiwi.Log.log('  Kiwi.Game: Renderer auto-detected CANVAS.', '#renderer', '#canvas');
+						}
+						break;
+					default:
+						if (Kiwi.DEVICE.webGL) {
+							this._renderOption = renderDefault;
+							Kiwi.Log.log('  Kiwi.Game: Renderer specified, but is not a valid option. Defaulting to WEBGL.', '#renderer', '#webgl');
+						} else {
+							this._renderOption = renderFallback;
+							Kiwi.Log.log('  Kiwi.Game: Renderer specified, but is not a valid option. WEBGL renderer sought by default but device does not support WEBGL. Defaulting to CANVAS.', '#renderer', '#canvas');
+						}
+						break;
+				}
+			} else {
+				if (Kiwi.DEVICE.webGL) {
+					this._renderOption = renderDefault;
+					Kiwi.Log.log('  Kiwi.Game: Renderer not specified. Defaulting to WEBGL.', '#renderer', '#webgl');
+				} else {
+					this._renderOption = renderFallback;
+					Kiwi.Log.log('  Kiwi.Game: Renderer not specified. WEBGL renderer sought by default but device does not support WEBGL. Defaulting to CANVAS.', '#renderer', '#canvas');
+				}
+			}
+
+
+			this.id = Kiwi.GameManager.register(this);
+			this._startup = new Kiwi.System.Bootstrap();
+
+			this.audio = new Kiwi.Sound.AudioManager(this);
+
+			this.fileStore = new Kiwi.Files.FileStore(this);
+			this.input = new Kiwi.Input.InputManager(this);
+
+			// Width / Height
+			var width = Stage.DEFAULT_WIDTH;
+			var height = Stage.DEFAULT_HEIGHT;
+
+			if (options.width !== 'undefined' && typeof options.width === 'number') {
+				width = options.width;
+			}
+
+			if (options.height !== 'undefined' && typeof options.height === 'number') {
+				height = options.height;
+			}
+
+			Kiwi.Log.log('  Kiwi.Game: Stage Dimensions: ' + width + 'x' + height, '#dimensions');
+
+			
+			if ( !Kiwi.Utils.Common.isUndefined( options.scaleType ) ) {
+
+				switch (options.scaleType) {
+					case Kiwi.Stage.SCALE_FIT:
+						Kiwi.Log.log('  Kiwi.Game: Stage scaling set to FIT.', '#scaling');
+						break;
+					case Kiwi.Stage.SCALE_STRETCH:
+						Kiwi.Log.log('  Kiwi.Game: Stage scaling set to STRETCH.', '#scaling');
+						break;
+					case Kiwi.Stage.SCALE_NONE:
+						Kiwi.Log.log('  Kiwi.Game: Stage scaling set to NONE.', '#scaling');
+						break;
+					default:
+						Kiwi.Log.log('  Kiwi.Game: Stage specified, but is not a valid option. Set to NONE.', '#scaling');
+						options.scaleType = 0;
+						break;
+				}
+
+			} else {
+				Kiwi.Log.log('  Kiwi.Game: Stage scaling not specified, defaulting to NONE.', '#scaling');
+				options.scaleType = 0;
+			}
+
+
+			this.stage = new Kiwi.Stage(this, name, width, height, options.scaleType);
+
+			this.renderer = null;
+
+			this.cameras = new Kiwi.CameraManager(this);
+
+			if (this._deviceTargetOption !== Kiwi.TARGET_COCOON) this.huds = new Kiwi.HUD.HUDManager(this);
+			this.loader = new Kiwi.Files.Loader(this);
+
+			this.states = new Kiwi.StateManager(this);
+			this.rnd = new Kiwi.Utils.RandomDataGenerator([Date.now.toString()]);
+			this.time = new Kiwi.Time.ClockManager(this);
+			this.tweens = new Kiwi.Animations.Tweens.TweenManager(this);
+
+			//  If we have a state then pass it to the StateManager
+			if (state !== null) {
+				this.states.addState(state, true);
+			} else {
+				Kiwi.Log.log('  Kiwi.Game: Default State not passed.', '#state');
+			}
+
+			this.pluginManager = new Kiwi.PluginManager(this, options.plugins);
+
+			if (this.deviceTargetOption === Kiwi.TARGET_BROWSER) {
+
+				this._startup.boot( domParent, () => this._start() );
+			} else {
+				if (domParent !== '') {
+					Kiwi.Log.log('  Kiwi.Game: Not Targetting a BROWSER. DOM Parent parameter ignored.', '#dom');
+				}
+				this._start();
+			}
+
+		}
+
+		/**
+		* The render mode of the game. This will be either set to CANVAS or WEBGL.
+		* @property _renderOption
+		* @type number
+		* @private
+		*/
+		private _renderOption: number;
+
+		/**
+		* Returns the render mode of the game. This is READ ONLY and is decided once the game gets initialised.
+		* @property renderOption
+		* @type number
+		* @public
+		*/
+		public get renderOption(): number {
+			return this._renderOption;
+		}
+
+		/**
+		* A callback function that can be passed in as an option in the conifugration object. Invoked after the boot process has completed.
+		* @property bootCallbackOption
+		* @type Function
+		* @private
+		*/
+		public bootCallbackOption: Function;
+
+		/**
+		* The type of device that you are targeting. This is either set to COCOON or BROWSER
+		* @property _deviceTargetOption
+		* @type number
+		* @private
+		*/
+		private _deviceTargetOption: number;
+
+		/**
+		* Returns the device target option for the game. This is READ ONLY and is decided once the game gets initialised.
+		* @property deviceTargetOption
+		* @type number
+		* @public
+		*/
+		public get deviceTargetOption(): number {
+			return this._deviceTargetOption;
+		}
+
+		/**
+		* If when rendering, the game should render a new CANVAS which is above everything. This new canvas is for debugging purposes only.
+		* This gets set to either DEBUG_ON or DEBUG_OFF
+		* @property _debugOption
+		* @type number
+		* @private
+		*/
+		private _debugOption: number;
+
+		/**
+		* Returns the debug option. This is READ ONLY and is decided once the game gets initialised.
+		* @property debugOption
+		* @type number
+		* @public
+		*/
+		public get debugOption(): number {
+			return this._debugOption;
+		}
+
+		/**
+		* Returns true if debug option is set to Kiwi.DEBUG_ON
+		* @property debug
+		* @type boolean
+		* @public
+		*/
+
+		public get debug(): boolean {
+			return this._debugOption === Kiwi.DEBUG_ON;
+		}
+
+		/**
+		* Holds the renderer that is being used. This is determined based on the _renderMode
+		* @property renderer
+		* @type IRenderManager
+		* @public
+		*/
+		public renderer: IRenderManager;
+
+		/**
+		* Holds the hud manager.
+		* @property huds
+		* @type HUDManager
+		* @public
+		*/
+		public huds: Kiwi.HUD.HUDManager;
+
+		/**
+		* The type of object that the game is.
+		* @method objType
+		* @return {String} "Game"
+		* @public
+		*/
+		public objType() {
+			return "Game";
+		}
+
+		/**
+		* The object that peforms DOM and device startup operations for browsers (ie not cocoon)
+		* @property _startup
+		* @type Kiwi.System.Bootstrap
+		* @private
+		*/
+		private _startup: Kiwi.System.Bootstrap = null;
+
+		/*
+		* The unique id for the game. 
+		* @property id
+		* @type Number
+		* @public
+		*/
+		public id: number;
+
+		/**
+		* The audio manager that handles all of the audio in game. Inside you can globally mute the audio, create new sounds, e.t.c.
+		* @property audio
+		* @type Kiwi.Sound.AudioManager
+		* @public
+		*/
+		public audio: Kiwi.Sound.AudioManager = null;
+
+		/**
+		* The global file store for this game. This handles the storage and access of information loaded, as well as tags that maybe set for them individual files.
+		* @property fileStore
+		* @type Kiwi.Files.FileStore
+		* @public
+		*/
+		public fileStore: Kiwi.Files.FileStore = null;
+
+		/**
+		* Handles any user input with the game. These could via the users keyboard, mouse or touch events.
+		* @property input
+		* @type Kiwi.Input.InputManager
+		* @public
+		*/
+		public input: Kiwi.Input.InputManager = null;
+
+		/**
+		* Manages the cameras the are on the stage. Single default Camera only in this version.
+		* @property cameras
+		* @type Kiwi.CameraManager
+		* @public
+		*/
+		public cameras: Kiwi.CameraManager = null;
+
+		/**
+		* Manages plugins registration and initialisation for the game instance.
+		* @property pluginManager
+		* @type Kiwi.PluginManager
+		* @public
+		*/
+		public pluginManager: Kiwi.PluginManager = null;
+
+		/**
+		* Loads files from outside sources and checks to see that they have loaded correctly or not.
+		* @property loader
+		* @type Kiwi.Files.Loader
+		* @public
+		*/
+		public loader: Kiwi.Files.Loader = null;
+
+		/**
+		* The Request Animation Frame that is being used for the update and render loops.
+		* @property raf
+		* @type Kiwi.Utils.RequestAnimationFrame
+		* @public
+		*/
+		public raf: Kiwi.Utils.RequestAnimationFrame = null;
+
+		/**
+		* The ONLY stage that is being used for this game.
+		* @property stage
+		* @type Stage
+		* @public
+		*/
+		public stage: Kiwi.Stage = null;
+
+		/**
+		* Manages all of the states that exist for this game. Via the manager you can create new states, switch states and do various other tasks.
+		* @property states
+		* @type Kiwi.StateManager
+		* @public
+		*/
+		public states: Kiwi.StateManager = null;
+
+		/**
+		* Holds a reference to the clocks that are being used and has a MASTER clock that is being used for the game.
+		* @property time
+		* @type Kiwi.Time.ClockManager
+		* @public
+		*/
+		public time: Kiwi.Time.ClockManager = null;
+
+		/**
+		* The tween manager holds a reference to all of the tweens that are created and currently being used. 
+		* @property tweens
+		* @type Kiwi.Animations.Tweens.TweenManager
+		* @public
+		*/
+		public tweens: Kiwi.Animations.Tweens.TweenManager = null;
+
+		/**
+		* A Random Data Generator. This is useful for create unique ids and random information.
+		* @property rnd
+		* @type Kiwi.Utils.RandomDataGenerato
+		* @public
+		*/
+		public rnd: Kiwi.Utils.RandomDataGenerator = null;
+
+		/**
+		* The framerate at which the game will update at.
+		* @property _framerate
+		* @type Number
+		* @default 60
+		* @public
+		*/
+		private _frameRate: number = 60;
+
+		/**
+		* The interval between frames.
+		* @property _interval
+		* @type Number
+		* @default 1000/60
+		* @private
+		*/
+		private _interval: number = 1000 / 60;
+
+		/**
+		* The current interval between frames.
+		* @property _delta
+		* @type number
+		* @private
+		*/
+		private _delta: number = 0;
+
+		/**
+		* The last time the game was updated
+		* @property _lastTime
+		* @type number
+		* @private
+		*/
+		private _lastTime: number;
+
+		/**
+		* The number of frames since the game was launched.
+		* @property _frame
+		* @type number
+		* @private
+		* @since 1.1.0
+		*/
+		private _frame: number = 0;
+
+		/**
+		* The number of frames since the game was launched.
+		* 
+		* Use this to drive cyclic animations. You may manually reset it in a Kiwi.State.create() function to restart the count from 0.
+		*
+		* The largest exact integer value of a JavaScript number is 2^53, or 9007199254740992. At 60 frames per second, this will take 4,760,273 years to become inaccurate.
+		* @property frame
+		* @type number
+		* @public
+		* @since 1.1.0
+		*/
+		public get frame(): number {
+			return( this._frame );
+		}
+		public set frame( value: number ) {
+			this._frame = Kiwi.Utils.GameMath.truncate( value );
+		}
+
+		/**
+		* The number of ideal frames since the game was launched.
+		*
+		* Use this to drive cyclic animations. This will be smoother than using the frame parameter. It is derived from the total time elapsed since the game launched.
+		* @property idealFrame
+		* @type number
+		* @public
+		* @since 1.1.0
+		*/
+		public get idealFrame(): number {
+			return (this.time.elapsed() / (1000 / this._frameRate) );
+		}
+
+
+		/**
+		* The current frameRate that the update/render loops are running at. Note that this may not be an  accurate representation.
+		* @property frameRate
+		* @return string
+		* @public
+		*/
+		public get frameRate(): number {
+
+			return this._frameRate;
+		}
+		public set frameRate(value: number) {
+			if (value > 0) {
+				this._frameRate = value;
+				this._interval = 1000 / this._frameRate;
+				this.time.setMasterInterval( this._interval );
+			}
+		}
+
+		/**
+		* The start method gets executed when the game is ready to be booted, and handles the start-up of the managers.
+		* Once the managers have started up the start loop will then begin to create the game loop.
+		* @method start
+		* @private
+		*/
+		private _start() {
+
+
+			this.stage.boot(this._startup);
+
+			if (!this.stage.renderer) Kiwi.Log.error( "  Kiwi.Game: Could not create rendering context", '#renderer' );
+			if(this._renderOption === Kiwi.RENDERER_WEBGL  &&  this.stage.ctx)
+				this._renderOption = Kiwi.RENDERER_CANVAS;  // Adapt to fallback if WebGL failed
+			this.renderer = this.stage.renderer;
+			this.renderer.boot();
+
+			this.cameras.boot();
+			if (this._deviceTargetOption !== Kiwi.TARGET_COCOON) this.huds.boot();
+
+			this.time.boot();
+			this.input.boot();
+			this.audio.boot();
+
+			this.fileStore.boot();
+			this.loader.boot();
+			this.states.boot();
+
+			this.pluginManager.boot();
+
+			this._lastTime = Date.now();
+
+			this.raf = new Kiwi.Utils.RequestAnimationFrame( () => this._loop() );
+			this.raf.start();
+
+			if (this.bootCallbackOption) {
+				Kiwi.Log.log("  Kiwi.Game: invoked boot callback", '#boot');
+				this.bootCallbackOption( this );
+			}
+		}
+
+		/**
+		* The game loop. 
+		* @method _loop
+		* @private
+		*/
+		private _loop() {
+			
+			this._delta = this.raf.currentTime - this._lastTime;
+			if (this._delta > this._interval) {
+
+				//Only update if there is a current state
+				this.time.update();
+				this.audio.update();
+				this.input.update();
+				this.tweens.update();
+				this.cameras.update();
+				if (this._deviceTargetOption !== Kiwi.TARGET_COCOON) this.huds.update();
+				this.states.update();
+				this.pluginManager.update();
+				this._frame++;
+
+				if (this.states.current !== null) {
+					this.cameras.render();
+					this.states.postRender();
+				}
+
+				this._lastTime = this.raf.currentTime - (this._delta % this._interval);
+			}
+		}
+
+	}
+
+}
diff --git a/src/core/Group.ts b/src/core/Group.ts
index 2ebbaad..ca58a13 100644
--- a/src/core/Group.ts
+++ b/src/core/Group.ts
@@ -6,1307 +6,1306 @@
 
 module Kiwi {
 
-    /**
-    * The group class is central to creating the scene graph that contains all objects in a state. A group can contain entities or other groups, thereby enabling a nested tree scene graph.
-    * The members of the Group's coordinates are also in relation to the Group that they were added to. So if you moved an entire Group, each member of that Group would also 'move'.
-    * 
-    * @class Group
-    * @namespace Kiwi
-    * @constructor
-    * @param state {Kiwi.State} The State that this Group is a part of.
-    * @param [name=''] {String} The name of this group. 
-    * @return {Kiwi.Group}
-    * 
-    */
-    export class Group implements Kiwi.IChild {
-         
-        constructor(state: Kiwi.State, name: string = '') {
-
-            //prevents the state going AHHH...since the state extends group.
-            if (state !== null) {
-                this.state = state;
-                this.game = this.state.game;
-                this.id = this.game.rnd.uuid();
-                this.state.addToTrackingList(this);
-            }
-
-            //  Properties
-            this.name = name;
-            this.components = new Kiwi.ComponentManager(Kiwi.GROUP, this);
-
-            this._exists = true;
-            this._active = true;
-            this._visible = true;
-
-            this.transform = new Kiwi.Geom.Transform();
-            this.members = [];
-        }
-
-        /**
-        * Returns the type of this object
-        * @method objType
-        * @return {String} "Group"
-        * @public
-        */
-        public objType(): string {
-            return "Group";
-        }
-
-        /*
-        * Represents the type of child that this is. 
-        * @method childType
-        * @return number
-        * @public
-        */
-        public childType(): number {
-            return Kiwi.GROUP;
-        }
-
-        /**
-        * A name for this Group. This is not checked for uniqueness within the Game, but is very useful for debugging.
-        * @property name
-        * @type string
-        * @default ''
-        * @public
-        */
-        public name: string = '';
-
-        /**
-        * The transform object for this group. 
-        * Transform handles the calculation of coordinates/rotation/scale e.t.c in the Game World.
-        * @property transform
-        * @type Kiwi.Geom.Transform
-        * @public
-        */
-        public transform: Kiwi.Geom.Transform;
-
-        /**
-        * The parent group of this group.
-        * @property _parent
-        * @type Kiwi.Group
-        * @private
-        */
-        private _parent: Kiwi.Group = null;
-
-        /**
-        * Set's the parent of this entity. Note that this also sets the transforms parent of this entity to be the passed groups transform.
-        * @property parent
-        * @type Kiwi.Group
-        * @public
-        */
-        public set parent(val: Kiwi.Group) {
-            //check to see if the parent is not an descendor
-            //if (this.containsDescendant(val) === false) {
-                this.transform.parent = (val !== null) ? val.transform : null;
-                this._parent = val;
-            //}
-        }
-        public get parent(): Kiwi.Group {
-            return this._parent;
-        }
-
-        /**
-        * The X coordinate of this group. This is just aliased to the transform property.
-        * @property x
-        * @type Number
-        * @public
-        */
-        public get x(): number {
-            return this.transform.x;
-        }
-        public set x(value: number) {
-            this.transform.x = value;
-        }
-
-        /**
-        * The Y coordinate of this group. This is just aliased to the transform property.
-        * @property y
-        * @type Number
-        * @public
-        */
-        public get y(): number {
-            return this.transform.y;
-        }
-        public set y(value: number) {
-            this.transform.y = value;
-        }
-
-        /**
-        * The X coordinate of this group in world space; that is, after parent transforms. This is just aliased to the transform property. This is READ-ONLY.
-        * @property worldX
-        * @type number
-        * @public
-        * @since 1.1.0
-        */
-        public get worldX(): number {
-            return this.transform.worldX;
-        }
-
-        /**
-        * The Y coordinate of this group in world space; that is, after parent transforms. This is just aliased to the transform property. This is READ-ONLY.
-        * @property worldY
-        * @type number
-        * @public
-        * @since 1.1.0
-        */
-        public get worldY(): number {
-            return this.transform.worldY;
-        }
-
-        /*
-        * The Scale X of this group. This is just aliased to the transform property.
-        * @property scaleX
-        * @type Number
-        * @public
-        */
-        public get scaleX(): number {
-            return this.transform.scaleX;
-        }
-        public set scaleX(value: number) {
-            this.transform.scaleX = value;
-        }
-
-        /*
-        * The Scale Y coordinate of this group. This is just aliased to the transform property.
-        * @property scaleY
-        * @type Number
-        * @public
-        */
-        public get scaleY(): number {
-            return this.transform.scaleY;
-        }
-        public set scaleY(value: number) {
-            this.transform.scaleY = value;
-        }
-
-        /**
-        * The scale of this group. This is just aliased to the transform property. This is WRITE-ONLY.
-        * @property scale
-        * @type number
-        * @public
-        * @since 1.1.0
-        */
-        public set scale(value: number) {
-            this.transform.scale = value;
-        }
-
-        /*
-        * The rotation of this group. This is just aliased to the transform property.
-        * @property rotation
-        * @type Number
-        * @public
-        */
-        public get rotation(): number {
-            return this.transform.rotation;
-        }
-        public set rotation(value: number) {
-            this.transform.rotation = value;
-        }
-
-        /**
-        * The rotation offset of this group in the X axis. This is just aliased to the transform property.
-        * @property rotPointX
-        * @type number
-        * @public
-        * @since 1.1.0
-        */
-        public get rotPointX(): number {
-            return this.transform.rotPointX;
-        }
-        public set rotPointX(value: number) {
-            this.transform.rotPointX = value;
-        }
-
-        /**
-        * The rotation offset of this group in the Y axis. This is just aliased to the transform property.
-        * @property rotPointY
-        * @type number
-        * @public
-        * @since 1.1.0
-        */
-        public get rotPointY(): number {
-            return this.transform.rotPointY;
-        }
-        public set rotPointY(value: number) {
-            this.transform.rotPointY = value;
-        }
-
-        /**
-        * The anchor point offset of this group in the X axis. This is just aliased to the transform property, and is in turn an alias of rotPointX.
-        * @property anchorPointX
-        * @type number
-        * @public
-        * @since 1.1.0
-        */
-        public get anchorPointX(): number {
-            return this.transform.anchorPointX;
-        }
-        public set anchorPointX(value: number) {
-            this.transform.anchorPointX = value;
-        }
-
-        /**
-        * The anchor point offset of this group in the Y axis. This is just aliased to the transform property, and is in turn an alias of rotPointY.
-        * @property anchorPointY
-        * @type number
-        * @public
-        * @since 1.1.0
-        */
-        public get anchorPointY(): number {
-            return this.transform.anchorPointY;
-        }
-        public set anchorPointY(value: number) {
-            this.transform.anchorPointY = value;
-        }
-
-        /**
-        * The Component Manager
-        * @property components
-        * @type Kiwi.ComponentManager
-        * @public
-        */
-        public components: Kiwi.ComponentManager;
-
-        /**
-        * The game this Group belongs to
-        * @property game
-        * @type Kiwi.Game
-        * @public
-        */
-        public game: Kiwi.Game = null;
-
-        /**
-        * The State that this Group belongs to
-        * @property state
-        * @type Kiwi.State
-        * @public
-        **/
-        public state: Kiwi.State = null;
-
-        /**
-        * A unique identifier for this Group within the game used internally by the framework. See the name property for a friendly version.
-        * @property id
-        * @type string
-        * @public
-        */
-        public id: string;
-        
-        /**
-        * The collection of children belonging to this group 
-        * @property members
-        * @type Array
-        * @public
-        */
-        public members: Kiwi.IChild[];
-        
-        /** 
-        * Returns the total number of children in this Group. Doesn't distinguish between alive and dead children.
-        * @method numChildren
-        * @return {Number} The number of children in this Group
-        * @public
-        */
-        public numChildren(): number {
-            return this.members.length;
-        }
-
-        /**
-        * An indication of whether or not this group is 'dirty' and thus needs to be re-rendered or not.
-        * @property _dirty
-        * @type boolean
-        * @private
-        */
-        private _dirty: boolean = true;
-
-        /**
-        * Sets all children of the Group to be dirty.
-        * @property dirty
-        * @type boolean
-        * @public
-        */
-        public set dirty(value: boolean) {
-            if (value !== undefined) {
-                this._dirty = value;
-
-                for (var i = 0; i < this.members.length; i++) {
-                    this.members[i].dirty = value;
-                }
-            }
-        }
-        public get dirty(): boolean {
-            return this._dirty;
-        }
-
-        /**
-        * Checks if the given entity is in this group
-        * @method contains
-        * @param child {IChild} The IChild that you want to checked.
-        * @return {boolean} true if entity exists in group.
-        * @public
-        */
-        public contains(child: Kiwi.IChild): boolean {                                         // MAKE RECURSIVE
-            return (this.members.indexOf(child) === -1) ? false : true;
-        }
-
-        /**
-        * Checks to see if the given object is contained in this group as a descendant
-        * @method containsDescendant
-        * @param child {object} The IChild that you want to check.
-        * @return {boolean}
-        * @public
-        */
-        public containsDescendant(child: Kiwi.IChild): boolean {
-            for (var i = 0; i < this.members.length; i++) {
-                var curMember: any = this.members[i];
-                if (curMember.id == child.id || curMember.childType() == Kiwi.Group && curMember.containsDesendant(child)) {
-                    return true;
-                }
-            }
-            return false;
-        }
-
-        /**
-        * Checks to see if one child is an ansector of another child.
-        * @method containsAncestor
-        * @param descendant {object} The object that you are checking.
-        * @param ancestor {Group} The parent (ancestor) that you are checking for.
-        * @return {boolean}
-        * @public
-        */ 
-        public containsAncestor(descendant: Kiwi.IChild, ancestor:Kiwi.Group): boolean {
-            if (descendant.parent === null || descendant.parent === undefined) {
-                return false;   
-            }
-            if (descendant.parent == ancestor) return true; //desendants parent is the same? 
-            return descendant.parent.containsAncestor(descendant.parent, ancestor); //keep going up the chain.
-        }
-
-
-        /**
-        * -------------------------
-        * Add Children methods
-        * -------------------------
-        **/
-
-
-        /**
-        * Adds an Entity to this Group. The Entity must not already be in this Group.
-        * @method addChild
-        * @param child {object} The child to be added.
-        * @return {object} The child that was added.
-        * @public
-        */
-        public addChild(child: Kiwi.IChild): Kiwi.IChild {              
-
-            //Implement feature where you can pass as many children to be added. Modify this script to work via the 'arguments' property
-
-            //make sure you aren't adding a state or itself
-            if (child.childType() === Kiwi.STATE || child == this) return;
-
-            //make sure it is not itself.
-            if (child.parent !== null) 
-                child.parent.removeChild(child);
-            
-            //check to see if the child is already part of a group.
-            this.members.push(child);
-            child.parent = this;
-            
-            return child;
-        }
-         
-        /**
-        * Adds an Entity to this Group in the specific location. The Entity must not already be in this Group and it must be supported by the Group.
-        * @method addChildAt
-        * @param child {object} The child to be added.
-        * @param index {Number} The index the child will be set at.
-        * @return {object} The child.
-        * @public
-        */
-        public addChildAt(child: Kiwi.IChild, index: number): Kiwi.IChild {
-
-            if (child.childType() === Kiwi.STATE || child == this) return;
-
-            if (child.parent !== null) child.parent.removeChild(child);
-
-            this.members.splice(index, 0, child);
-            child.parent = this;
-
-            return child;
-        }
-
-        /**
-        * Adds an Entity to this Group before another child. 
-        * @method addChildBefore
-        * @param child {object} The child to be added.
-        * @param beforeChild {Entity} The child before which the child will be added.
-        * @return {object} The child.
-        * @public
-        */
-        public addChildBefore(child: Kiwi.IChild, beforeChild: Kiwi.IChild): Kiwi.IChild {                      
-
-            if (beforeChild.transform.parent === this.transform) {
-
-                if (child.parent !== null) child.parent.removeChild(child);
-
-                var index: number = this.getChildIndex( beforeChild );
-
-                this.members.splice(index, 0, child);
-                child.parent = this;
-            }
-
-            return child;
-
-        }
-
-        /**
-        * Adds an Entity to this Group after another child. 
-        * @method addChildAfter
-        * @param child {object} The child to be added.
-        * @param beforeChild {object} The child after which the child will be added.
-        * @return {object} The child.
-        * @public
-        */
-        public addChildAfter(child: Kiwi.IChild, afterChild: Kiwi.IChild): Kiwi.IChild {
-           
-            if (afterChild.transform.parent === this.transform) {
-
-                if (child.parent !== null) child.parent.removeChild(child);
-
-                var index: number = this.getChildIndex(afterChild) + 1;
-
-                this.members.splice(index, 0, child);
-                child.parent = this;
-            }
-
-            return child;
-
-        }
-
-
-        /**
-        * --------------------
-        * Remove Children Methods
-        * --------------------
-        **/
-
-
-        /**
-        * Removes an Entity from this Group if it is a child of it.
-        * @method removeChild
-        * @param child {object} The child to be removed.
-        * @param [destroy=false] {boolean} If the entity that gets removed should be destroyed as well.
-        * @return {object} The child.
-        * @public
-        */
-        public removeChild(child: Kiwi.IChild, destroy:boolean=false): Kiwi.IChild {   
-
-            if (child.parent === this) {
-
-                var index: number = this.getChildIndex(child);
-
-                if (index > -1) {
-                    this.members.splice(index, 1);
-                    child.parent = null;
-                    
-                    if (destroy) {
-                        child.destroy();
-                    }
-                }
-
-            } 
-
-            return child;
-        }
-
-        /**
-        * Removes the Entity from this Group at the given position.
-        * @method removeChildAt
-        * @param index {Number} The index of the child to be removed.
-        * @return {object} The child, or null.
-        */
-        public removeChildAt(index: number): Kiwi.IChild {
-
-            if (this.members[index]) {
-                var child: Kiwi.IChild = this.members[index];
-
-                return this.removeChild(child);
-            } else {
-                return null;
-            }
-
-        }
-
-        /**
-        * Removes all Entities from this Group within the given range. 
-        * @method removeChildren
-        * @param begin {Number} The begining index.
-        * @param end {Number} The last index of the range.
-        * @param destroy {Number} If the children should be destroyed as well.
-        * @return {Number} The number of removed entities.
-        * @public
-		*/
-        public removeChildren(begin: number = 0, end: number = 0x7fffffff, destroy:boolean = false): number {
-
-            end -= begin;
-            
-            var removed: Kiwi.IChild[] = this.members.splice(begin, end);
-
-            for (var i = 0; i < removed.length; i++) {
-                removed[i].parent = null;
-
-                if (destroy) {
-                    removed[i].destroy();
-                }
-            }
-
-            return removed.length;
-        }
-
-        /**
-        * Removes the first Entity from this Group marked as 'alive'
-        * @method removeFirstAlive
-        * @param [destroy=false] {boolean} If the entity should run the destroy method when it is removed.
-        * @return {object} The Entity that was removed from this Group if alive, otherwise null
-        * @public
-        * @deprecated in v1.1.0
-        */
-        public removeFirstAlive(destroy: boolean = false): Kiwi.IChild {
-
-            return this.removeChild(this.getFirstAlive(), destroy);
-
-        }
-
-
-        /**
-        * -------------------
-        * Get Children Methods
-        * -------------------
-        **/
-
-        /**
-        * Get all children of this Group. By default, this will search the entire sub-graph, including children of children etc.
-        * @method getAllChildren
-        * @param getGroups {boolean} Optional: Whether to include Groups in the results. When false, will only collect GameObjects.
-        * @param destinationArray {Array} Optional: The array in which to store the results.
-        * @return {Array}
-        * @since 1.1.0
-        */
-        public getAllChildren(getGroups: boolean = true, destinationArray: IChild[] = []): IChild[] {
-            for( var i = 0;  i < this.members.length;  i++) {
-                if(this.members[i].objType() == "Group") {
-                    if(getGroups) {
-                        destinationArray.push(this.members[i]);
-                    }
-                    (<Kiwi.Group>this.members[i]).getAllChildren(getGroups, destinationArray);
-                }
-                else {
-                    destinationArray.push(this.members[i]);
-                }
-            }
-            return destinationArray;
-        }
-
-
-        /**
-        * Get the child at a specific position in this Group by its index.
-        * @method getChildAt
-        * @param index {Number} The index of the child
-        * @return {object} The child, if found or null if not.
-        * @public
-        */
-        public getChildAt(index: number): Kiwi.IChild {
-
-            if (this.members[index]) {
-                return this.members[index];
-            } else {
-                return null;
-            }
-
-        }
-
-        /**
-        * Get a child from this Group by its name. By default this will not check sub-groups, but if you supply the correct flag it will check the entire scene graph under this object.
-        * @method getChildByName
-        * @param name {String} The name of the child.
-        * @param recurse {Boolean} Whether to search child groups for the child. Default FALSE.
-        * @return {object} The child, if found or null if not.
-        * @public
-        */
-        public getChildByName(name: string, recurse: boolean = false): Kiwi.IChild {
-            for (var i = 0; i < this.members.length; i++) {
-                if (this.members[i].name === name) {
-                    return this.members[i];
-                }
-                else if(this.members[i].objType() == "Group"  &&  recurse) {
-                    var groupResponse = (<Kiwi.Group>this.members[i]).getChildByName( name, true );
-                    if(groupResponse !== null) {
-                        return groupResponse;
-                    }
-                }
-            }
-
-            return null;
-
-        }
-
-        /**
-        * Get a child from this Group by its UUID. By default this will not check sub-groups, but if you supply the correct flag it will check the entire scene graph under this object.
-        * @method getChildByID
-        * @param id {String} The ID of the child.
-        * @param recurse {Boolean} Whether to search child groups for the child. Default FALSE.
-        * @return {object} The child, if found or null if not.
-        * @public
-        */
-        public getChildByID(id: string, recurse: boolean = false): Kiwi.IChild {
-            for (var i = 0; i < this.members.length; i++) {
-                if (this.members[i].id === id) {
-                    return this.members[i];
-                }
-                else if(this.members[i].objType() == "Group"  &&  recurse) {
-                    var groupResponse = (<Kiwi.Group>this.members[i]).getChildByID( id, true );
-                    if(groupResponse !== null) {
-                        return groupResponse;
-                    }
-                }
-            }
-
-            return null;
-
-        }
-
-        /**
-        * Returns the index position of the Entity or -1 if not found.
-        * @method getChildIndex
-        * @param child {object} The child.
-        * @return {Number} The index of the child or -1 if not found.
-        * @public
-        */
-        public getChildIndex(child: Kiwi.IChild): number {
-
-            return this.members.indexOf(child);
-
-        }
-
-        /**
-        * Returns the first Entity from this Group marked as 'alive' or null if no members are alive
-        * @method getFirstAlive
-        * @return {object}
-        * @public
-        * @deprecated in v1.1.0
-        */
-        public getFirstAlive(): Kiwi.IChild {
-
-            for (var i = 0; i < this.members.length; i++) {
-                if (this.members[i].exists === true) {
-                    return this.members[i];
-                }
-            }
-
-            return null;
-        }
-
-        /**
-        * Returns the first member of the Group which is not 'alive', returns null if all members are alive.
-        * @method getFirstDead
-        * @return {object}
-        * @public
-        * @deprecated in v1.1.0
-        */
-        public getFirstDead(): Kiwi.IChild {
-
-            for (var i = 0; i < this.members.length; i++) {
-                if (this.members[i].exists === false) {
-                    return this.members[i];
-                }
-            }
-
-            return null;
-
-        }
-
-        /**
-        * Returns a member at random from the group.
-        * @param {Number}	StartIndex	Optional offset off the front of the array. Default value is 0, or the beginning of the array.
-        * @param {Number}	Length		Optional restriction on the number of values you want to randomly select from.
-        * @return {object}	A child from the members list.
-        * @public
-        */
-        public getRandom(start: number = 0, length: number = 0): Kiwi.IChild {
-
-            if (this.members.length === 0) {
-                return null;
-            }
-            /*
-            if (length === 0) {
-                length = this.members.length;
-            }
-
-            if (start < 0 || start > length) {
-                start = 0;
-            }
-
-            var rnd = start + (Math.random() * (start + length));
-
-            if (rnd > this.members.length) {
-                return this.members[this.members.length - 1];
-
-            } else {
-                return this.members[rnd];
-            }
-            */
-
-            // Comply start to viable range
-            start = Kiwi.Utils.GameMath.clamp(start, this.members.length - 1);
-
-            // Comply length to fit
-            if(length === 0) {
-                length = this.members.length;
-            }
-            if(this.members.length <= start + length) {
-                length = this.members.length - start - 1;
-            }
-
-            // Create and truncate random index
-            var rnd = start + Math.random() * length;
-            rnd = Math.floor(rnd);
-
-            // Return
-            return this.members[rnd];
-        }
-
-        /**
-        * Returns an array of children which contain the tag which is passed.
-        * @method getChildrenByTag
-        * @param tag {string}
-        * @return {Array}
-        * @public
-        * @since 1.1.0
-        */
-        public getChildrenByTag(tag: string): IChild[]{
-
-            var children = [];
-
-            for (var i = 0; i < this.members.length; i++) {
-
-                if (this.members[i].hasTag(tag)) {
-                    children.push(this.members[i]);
-                }
-
-                if (this.members[i].childType() == Kiwi.GROUP) {
-                    children = children.concat( (<Kiwi.Group>this.members[i] ).getChildrenByTag(tag) );
-                } 
-                
-            }
-
-            return children;
-        }
-
-        
-        /**
-        * --------------------
-        * Child Depth Sorting Methods
-        * --------------------
-        **/
-
-        
-        /**
-        * Sets a new position of an existing Entity within the Group.
-        * @method setChildIndex
-        * @param child {object} The child in this Group to change.
-        * @param index {Number} The index for the child to be set at.
-        * @return {boolean} true if the Entity was moved to the new position, otherwise false.
-        * @public
-        */
-        public setChildIndex(child: Kiwi.IChild, index: number): boolean {
-        
-            //  If the Entity isn't in this Group, or is already at that index then bail out
-            if (child.parent !== this || this.getChildIndex(child) === index) {
-                return false;
-            }
-
-            this.removeChild(child);
-            this.addChildAt(child, index);
-
-            return true;
-        }
-
-        /**
-        * Swaps the position of two existing Entities that are a direct child of this group.
-        * @method swapChildren
-        * @param child1 {object} The first child in this Group to swap.
-        * @param child2 {object} The second child in this Group to swap.
-        * @return {boolean} true if the Entities were swapped successfully, otherwise false.
-        * @public
-        */
-        public swapChildren(child1: Kiwi.IChild, child2: Kiwi.IChild):boolean {
-        
-            //  If either Entity isn't in this Group, or is already at that index then bail out
-            if (child1.parent !== this || child2.parent !== this) {
-                return false;
-            }
-
-            var index1 = this.getChildIndex(child1);
-            var index2 = this.getChildIndex(child2);
-
-            if (index1 !== -1 && index2 !== -1 && index1 !== index2) {
-                this.members[index1] = child2;
-                this.members[index2] = child1;
-
-                return true;
-            }
-
-            return false;
-        }
-         
-        /**
-        * Swaps the position of two existing Entities within the Group based on their index.
-        * @method swapChildrenAt
-        * @param index1 {Number} The position of the first Entity in this Group to swap.
-        * @param index2 {Number} The position of the second Entity in this Group to swap.
-        * @return {boolean} true if the Entities were swapped successfully, otherwise false.
-        * @public
-        */
-        public swapChildrenAt(index1: number, index2: number): boolean {
-             
-            var child1: Kiwi.IChild = this.getChildAt(index1);
-            var child2: Kiwi.IChild = this.getChildAt(index2);
-
-            if (child1 !== null && child2 !== null) {
-                //  If either Entity isn't in this Group, or is already at that index then bail out
-                if (child1 == child2 || child1.parent !== this || child2.parent !== this) {
-                    return false;
-                }
-
-                this.members[index1] = child2;
-                this.members[index2] = child1;
-                     
-                return true;
-            }
-
-            return false;
-        }
-
-        /**
-        * Replaces a child Entity in this Group with a new one.
-        * @method replaceChild
-        * @param oldChild {object} The Entity in this Group to be removed.
-        * @param newChild {object} The new Entity to insert into this Group at the old Entities position.
-        * @return {boolean} true if the Entities were replaced successfully, otherwise false.
-        * @public
-        */
-        public replaceChild(oldChild: Kiwi.IChild, newChild: Kiwi.IChild): boolean {
-            
-            //fall through if replacing child with the same child
-            if (oldChild === newChild) return false;
-
-            // get the index of the existing child
-            var index: number = this.getChildIndex(oldChild);
-            
-            if (index > -1) {
-                // remove the new child from the group if the group contains it, so it can be reinserted in new position
-                if (newChild.parent) {
-                    newChild.parent.removeChild(newChild);
-                }
-
-                this.removeChildAt(index);
-                
-                this.addChildAt(newChild, index); 
-                newChild.parent = null;
-                
-                return true;
-            }
-
-            return false;
-        }
-        
-        /**
-        * Loops through each member in the group and run a method on for each one.
-        * @method forEach
-        * @param context {any} The context that the callbacks are to have when called.
-        * @param callback {any} The callback method to execute on each member.
-        * @param [params]* {any} Any extra parameters.
-        * @public
-		*/
-        public forEach(context, callback, ...params: any[]) {
-
-            if (this.members.length > 0) {
-                this.members.forEach((child) => callback.apply(context, [child].concat(params)));
-            }
-
-        }
-
-        /**
-        * Loop through each member of the groups that is alive. 
-        * @method forEachAlive
-        * @param context {any} The context that the callbacks are to have when called.
-        * @param callback {any} The callback method to execute on each member.
-        * @param [params]* {any} Any extra parameters.
-        * @public
-		*/
-        public forEachAlive(context, callback, ...params: any[]) {
-
-            if (this.members.length > 0) {
-                
-                this.members.forEach((child) => {
-                    if (child.exists) callback.apply(context, [child].concat(params));
-                });
-                
-            }
-
-        }
-
-        /**
-        * Sets a property on every member. If componentName is null the property is set on the entity itself, otherwise it is set on the named component. Uses runtime string property lookups. Not optimal for large groups if speed is an issue.
-        * @method setAll
-        * @param componentName {string} The name of the component to set the property on - set to null to set a property on the entity.
-        * @param property {string} The name of the property to set.
-        * @param value {any} The value to set the property to.
-        * @public
-		*/
-        public setAll(componentName: string,property: string, value: any) {
-            if (componentName === null) {
-                for (var i: number = 0; i < this.members.length; i++) {
-                    this.members[i][property] = value;
-                }
-            } else {
-                for (var i: number = 0; i < this.members.length; i++) {
-                    this.members[i][componentName][property] = value;
-                }
-            }
-        }
-
-        /**
-        * Calls a function on every member. If componentName is null the function is called on the entity itself, otherwise it is called on the named component. Uses runtime string property lookups. Not optimal for large groups if speed is an issue.
-        * @method callAll
-        * @param componentName {string} The name of the component to call the function on - set to null to call a function on the entity.
-        * @param functionName {string} The name of the function to call.
-        * @param args {Array} An array of arguments to pas to the function.
-        * @public
-		*/
-        public callAll(componentName: string,functionName: string, args?: any[]) {
-            if (componentName === null) {
-                for (var i: number = 0; i < this.members.length; i++) {
-                    this.members[i][functionName].apply(this.members[i], args);
-                }
-            } else {
-                for (var i: number = 0; i < this.members.length; i++) {
-                    this.members[i][componentName][functionName].apply(this.members[i][componentName], args);
-                }
-            }
-        }
-
-        /**
-        * The update loop for this group.
-        * @method update
-        * @public
-		*/
-        public update() {
-
-            this.components.preUpdate();
-
-            this.components.update();
-            if (this.members.length > 0) {
-
-                for (var i = 0; i < this.members.length; i++) {
-                    if (this.members[i].active === true) {
-                        this.members[i].update();
-                    } 
-
-                    if(this.members[i].exists === false) {
-                        this.members[i].destroy( true );
-                    }
-                }
-                
-            }
-
-            this.components.postUpdate();
-
-        }
-
-        /**
-        * If an Entity no longer exists it is cleared for garbage collection or pool re-allocation
-        * @property exists 
-        * @type boolean
-        * @private
-        */
-        private _exists: boolean;
-
-        /**
-        * Toggles the exitence of this Group. An Entity that no longer exists can be garbage collected or re-allocated in a pool
-        * This method should be over-ridden to handle specific canvas/webgl implementations.
-        * @property exists
-        * @type boolean
-        * @public
-        */
-        public set exists(value: boolean) {
-            this._exists = value;
-        }
-
-        public get exists():boolean {
-            return this._exists;
-        }
-
-        /**
-        * An active Entity is one that has its update method called by its parent.
-        * @property _active
-        * @type boolean
-        * @default true
-        * @private
-        */
-        private _active: boolean;
-
-        /**
-        * Toggles the active state of this Entity. An Entity that is active has its update method called by its parent.
-        * This method should be over-ridden to handle specific dom/canvas/webgl implementations.
-        * @property active
-        * @type boolean
-        * @default true
-        * @public
-        */
-        public set active(value: boolean) {
-            this._active = value;
-        }
-
-        public get active():boolean {
-            return this._active;
-        }
-        
-        /**
-        * The render method that is required by the IChild. 
-        * This method never gets called as the render is only worried about rendering entities.
-        * @method render
-        * @param camera {Kiwi.Camera}
-        * @public
-        * @deprecated
-        */
-        public render(camera:Kiwi.Camera) {
-
-        }
-        
-        /**
-        * Returns the number of member which are marked as 'alive'
-        * @method countLiving
-        * @return {Number} 
-        * @public
-		*/
-        public countLiving():number { 
-
-            var total: number = 0;
-
-            for (var i = 0; i < this.members.length; i++) {
-                if (this.members[i].exists === true) {
-                    total++;
-                }
-            }
-
-            return total;
-        
-        }
-
-        /**
-        * Returns the number of member which are not marked as 'alive'
-        * @method countDead
-        * @return {Number} 
-        * @public
-		*/
-        public countDead(): number { 
-        
-            var total: number = 0;
-
-            for (var i = 0; i < this.members.length; i++) {
-                if (this.members[i].exists === false) {
-                    total++;
-                }
-            }
-
-            return total;
-        
-        }
-
-        /**
-	    * Clear all children from this Group
-        * @method clear
-        * @public
-		*/
-        public clear() {
-
-            this.members.length = 0;
-
-        }
+	/**
+	* The group class is central to creating the scene graph that contains all objects in a state. A group can contain entities or other groups, thereby enabling a nested tree scene graph.
+	* The members of the Group's coordinates are also in relation to the Group that they were added to. So if you moved an entire Group, each member of that Group would also 'move'.
+	* 
+	* @class Group
+	* @namespace Kiwi
+	* @constructor
+	* @param state {Kiwi.State} The State that this Group is a part of.
+	* @param [name=''] {String} The name of this group. 
+	* @return {Kiwi.Group}
+	* 
+	*/
+	export class Group implements Kiwi.IChild {
+
+		constructor(state: Kiwi.State, name: string = '') {
+
+			//prevents the state going AHHH...since the state extends group.
+			if (state !== null) {
+				this.state = state;
+				this.game = this.state.game;
+				this.id = this.game.rnd.uuid();
+				this.state.addToTrackingList(this);
+			}
+
+			//  Properties
+			this.name = name;
+			this.components = new Kiwi.ComponentManager(Kiwi.GROUP, this);
+
+			this._exists = true;
+			this._active = true;
+			this._visible = true;
+
+			this.transform = new Kiwi.Geom.Transform();
+			this.members = [];
+		}
+
+		/**
+		* Returns the type of this object
+		* @method objType
+		* @return {String} "Group"
+		* @public
+		*/
+		public objType(): string {
+			return "Group";
+		}
+
+		/*
+		* Represents the type of child that this is. 
+		* @method childType
+		* @return number
+		* @public
+		*/
+		public childType(): number {
+			return Kiwi.GROUP;
+		}
+
+		/**
+		* A name for this Group. This is not checked for uniqueness within the Game, but is very useful for debugging.
+		* @property name
+		* @type string
+		* @default ''
+		* @public
+		*/
+		public name: string = '';
+
+		/**
+		* The transform object for this group. 
+		* Transform handles the calculation of coordinates/rotation/scale e.t.c in the Game World.
+		* @property transform
+		* @type Kiwi.Geom.Transform
+		* @public
+		*/
+		public transform: Kiwi.Geom.Transform;
+
+		/**
+		* The parent group of this group.
+		* @property _parent
+		* @type Kiwi.Group
+		* @private
+		*/
+		private _parent: Kiwi.Group = null;
+
+		/**
+		* Set's the parent of this entity. Note that this also sets the transforms parent of this entity to be the passed groups transform.
+		* @property parent
+		* @type Kiwi.Group
+		* @public
+		*/
+		public set parent(val: Kiwi.Group) {
+			//check to see if the parent is not an descendor
+			//if (this.containsDescendant(val) === false) {
+				this.transform.parent = (val !== null) ? val.transform : null;
+				this._parent = val;
+			//}
+		}
+		public get parent(): Kiwi.Group {
+			return this._parent;
+		}
+
+		/**
+		* The X coordinate of this group. This is just aliased to the transform property.
+		* @property x
+		* @type Number
+		* @public
+		*/
+		public get x(): number {
+			return this.transform.x;
+		}
+		public set x(value: number) {
+			this.transform.x = value;
+		}
+
+		/**
+		* The Y coordinate of this group. This is just aliased to the transform property.
+		* @property y
+		* @type Number
+		* @public
+		*/
+		public get y(): number {
+			return this.transform.y;
+		}
+		public set y(value: number) {
+			this.transform.y = value;
+		}
+
+		/**
+		* The X coordinate of this group in world space; that is, after parent transforms. This is just aliased to the transform property. This is READ-ONLY.
+		* @property worldX
+		* @type number
+		* @public
+		* @since 1.1.0
+		*/
+		public get worldX(): number {
+			return this.transform.worldX;
+		}
+
+		/**
+		* The Y coordinate of this group in world space; that is, after parent transforms. This is just aliased to the transform property. This is READ-ONLY.
+		* @property worldY
+		* @type number
+		* @public
+		* @since 1.1.0
+		*/
+		public get worldY(): number {
+			return this.transform.worldY;
+		}
+
+		/*
+		* The Scale X of this group. This is just aliased to the transform property.
+		* @property scaleX
+		* @type Number
+		* @public
+		*/
+		public get scaleX(): number {
+			return this.transform.scaleX;
+		}
+		public set scaleX(value: number) {
+			this.transform.scaleX = value;
+		}
+
+		/*
+		* The Scale Y coordinate of this group. This is just aliased to the transform property.
+		* @property scaleY
+		* @type Number
+		* @public
+		*/
+		public get scaleY(): number {
+			return this.transform.scaleY;
+		}
+		public set scaleY(value: number) {
+			this.transform.scaleY = value;
+		}
+
+		/**
+		* The scale of this group. This is just aliased to the transform property. This is WRITE-ONLY.
+		* @property scale
+		* @type number
+		* @public
+		* @since 1.1.0
+		*/
+		public set scale(value: number) {
+			this.transform.scale = value;
+		}
+
+		/*
+		* The rotation of this group. This is just aliased to the transform property.
+		* @property rotation
+		* @type Number
+		* @public
+		*/
+		public get rotation(): number {
+			return this.transform.rotation;
+		}
+		public set rotation(value: number) {
+			this.transform.rotation = value;
+		}
+
+		/**
+		* The rotation offset of this group in the X axis. This is just aliased to the transform property.
+		* @property rotPointX
+		* @type number
+		* @public
+		* @since 1.1.0
+		*/
+		public get rotPointX(): number {
+			return this.transform.rotPointX;
+		}
+		public set rotPointX(value: number) {
+			this.transform.rotPointX = value;
+		}
+
+		/**
+		* The rotation offset of this group in the Y axis. This is just aliased to the transform property.
+		* @property rotPointY
+		* @type number
+		* @public
+		* @since 1.1.0
+		*/
+		public get rotPointY(): number {
+			return this.transform.rotPointY;
+		}
+		public set rotPointY(value: number) {
+			this.transform.rotPointY = value;
+		}
+
+		/**
+		* The anchor point offset of this group in the X axis. This is just aliased to the transform property, and is in turn an alias of rotPointX.
+		* @property anchorPointX
+		* @type number
+		* @public
+		* @since 1.1.0
+		*/
+		public get anchorPointX(): number {
+			return this.transform.anchorPointX;
+		}
+		public set anchorPointX(value: number) {
+			this.transform.anchorPointX = value;
+		}
+
+		/**
+		* The anchor point offset of this group in the Y axis. This is just aliased to the transform property, and is in turn an alias of rotPointY.
+		* @property anchorPointY
+		* @type number
+		* @public
+		* @since 1.1.0
+		*/
+		public get anchorPointY(): number {
+			return this.transform.anchorPointY;
+		}
+		public set anchorPointY(value: number) {
+			this.transform.anchorPointY = value;
+		}
+
+		/**
+		* The Component Manager
+		* @property components
+		* @type Kiwi.ComponentManager
+		* @public
+		*/
+		public components: Kiwi.ComponentManager;
+
+		/**
+		* The game this Group belongs to
+		* @property game
+		* @type Kiwi.Game
+		* @public
+		*/
+		public game: Kiwi.Game = null;
+
+		/**
+		* The State that this Group belongs to
+		* @property state
+		* @type Kiwi.State
+		* @public
+		**/
+		public state: Kiwi.State = null;
+
+		/**
+		* A unique identifier for this Group within the game used internally by the framework. See the name property for a friendly version.
+		* @property id
+		* @type string
+		* @public
+		*/
+		public id: string;
+		
+		/**
+		* The collection of children belonging to this group 
+		* @property members
+		* @type Array
+		* @public
+		*/
+		public members: Kiwi.IChild[];
+		
+		/** 
+		* Returns the total number of children in this Group. Doesn't distinguish between alive and dead children.
+		* @method numChildren
+		* @return {Number} The number of children in this Group
+		* @public
+		*/
+		public numChildren(): number {
+			return this.members.length;
+		}
+
+		/**
+		* An indication of whether or not this group is 'dirty' and thus needs to be re-rendered or not.
+		* @property _dirty
+		* @type boolean
+		* @private
+		*/
+		private _dirty: boolean = true;
+
+		/**
+		* Sets all children of the Group to be dirty.
+		* @property dirty
+		* @type boolean
+		* @public
+		*/
+		public set dirty(value: boolean) {
+			if (value !== undefined) {
+				this._dirty = value;
+
+				for (var i = 0; i < this.members.length; i++) {
+					this.members[i].dirty = value;
+				}
+			}
+		}
+		public get dirty(): boolean {
+			return this._dirty;
+		}
+
+		/**
+		* Checks if the given entity is in this group
+		* @method contains
+		* @param child {IChild} The IChild that you want to checked.
+		* @return {boolean} true if entity exists in group.
+		* @public
+		*/
+		public contains(child: Kiwi.IChild): boolean {                                         // MAKE RECURSIVE
+			return (this.members.indexOf(child) === -1) ? false : true;
+		}
+
+		/**
+		* Checks to see if the given object is contained in this group as a descendant
+		* @method containsDescendant
+		* @param child {object} The IChild that you want to check.
+		* @return {boolean}
+		* @public
+		*/
+		public containsDescendant(child: Kiwi.IChild): boolean {
+			for (var i = 0; i < this.members.length; i++) {
+				var curMember: any = this.members[i];
+				if (curMember.id == child.id || curMember.childType() == Kiwi.Group && curMember.containsDesendant(child)) {
+					return true;
+				}
+			}
+			return false;
+		}
+
+		/**
+		* Checks to see if one child is an ansector of another child.
+		* @method containsAncestor
+		* @param descendant {object} The object that you are checking.
+		* @param ancestor {Group} The parent (ancestor) that you are checking for.
+		* @return {boolean}
+		* @public
+		*/ 
+		public containsAncestor(descendant: Kiwi.IChild, ancestor:Kiwi.Group): boolean {
+			if (descendant.parent === null || descendant.parent === undefined) {
+				return false;   
+			}
+			if (descendant.parent == ancestor) return true; //desendants parent is the same? 
+			return descendant.parent.containsAncestor(descendant.parent, ancestor); //keep going up the chain.
+		}
+
+
+		/**
+		* -------------------------
+		* Add Children methods
+		* -------------------------
+		**/
+
+
+		/**
+		* Adds an Entity to this Group. The Entity must not already be in this Group.
+		* @method addChild
+		* @param child {object} The child to be added.
+		* @return {object} The child that was added.
+		* @public
+		*/
+		public addChild(child: Kiwi.IChild): Kiwi.IChild {              
+
+			//Implement feature where you can pass as many children to be added. Modify this script to work via the 'arguments' property
+
+			//make sure you aren't adding a state or itself
+			if (child.childType() === Kiwi.STATE || child == this) return;
+
+			//make sure it is not itself.
+			if (child.parent !== null) 
+				child.parent.removeChild(child);
+			
+			//check to see if the child is already part of a group.
+			this.members.push(child);
+			child.parent = this;
+			
+			return child;
+		}
+		 
+		/**
+		* Adds an Entity to this Group in the specific location. The Entity must not already be in this Group and it must be supported by the Group.
+		* @method addChildAt
+		* @param child {object} The child to be added.
+		* @param index {Number} The index the child will be set at.
+		* @return {object} The child.
+		* @public
+		*/
+		public addChildAt(child: Kiwi.IChild, index: number): Kiwi.IChild {
+
+			if (child.childType() === Kiwi.STATE || child == this) return;
+
+			if (child.parent !== null) child.parent.removeChild(child);
+
+			this.members.splice(index, 0, child);
+			child.parent = this;
+
+			return child;
+		}
+
+		/**
+		* Adds an Entity to this Group before another child. 
+		* @method addChildBefore
+		* @param child {object} The child to be added.
+		* @param beforeChild {Entity} The child before which the child will be added.
+		* @return {object} The child.
+		* @public
+		*/
+		public addChildBefore(child: Kiwi.IChild, beforeChild: Kiwi.IChild): Kiwi.IChild {                      
+
+			if (beforeChild.transform.parent === this.transform) {
+
+				if (child.parent !== null) child.parent.removeChild(child);
+
+				var index: number = this.getChildIndex( beforeChild );
+
+				this.members.splice(index, 0, child);
+				child.parent = this;
+			}
+
+			return child;
+
+		}
+
+		/**
+		* Adds an Entity to this Group after another child. 
+		* @method addChildAfter
+		* @param child {object} The child to be added.
+		* @param beforeChild {object} The child after which the child will be added.
+		* @return {object} The child.
+		* @public
+		*/
+		public addChildAfter(child: Kiwi.IChild, afterChild: Kiwi.IChild): Kiwi.IChild {
+		   
+			if (afterChild.transform.parent === this.transform) {
+
+				if (child.parent !== null) child.parent.removeChild(child);
+
+				var index: number = this.getChildIndex(afterChild) + 1;
+
+				this.members.splice(index, 0, child);
+				child.parent = this;
+			}
+
+			return child;
+
+		}
+
+
+		/**
+		* --------------------
+		* Remove Children Methods
+		* --------------------
+		**/
+
+
+		/**
+		* Removes an Entity from this Group if it is a child of it.
+		* @method removeChild
+		* @param child {object} The child to be removed.
+		* @param [destroy=false] {boolean} If the entity that gets removed should be destroyed as well.
+		* @return {object} The child.
+		* @public
+		*/
+		public removeChild(child: Kiwi.IChild, destroy:boolean=false): Kiwi.IChild {   
+
+			if (child.parent === this) {
+
+				var index: number = this.getChildIndex(child);
+
+				if (index > -1) {
+					this.members.splice(index, 1);
+					child.parent = null;
+					
+					if (destroy) {
+						child.destroy();
+					}
+				}
+
+			} 
+
+			return child;
+		}
+
+		/**
+		* Removes the Entity from this Group at the given position.
+		* @method removeChildAt
+		* @param index {Number} The index of the child to be removed.
+		* @return {object} The child, or null.
+		*/
+		public removeChildAt(index: number): Kiwi.IChild {
+
+			if (this.members[index]) {
+				var child: Kiwi.IChild = this.members[index];
+
+				return this.removeChild(child);
+			} else {
+				return null;
+			}
+
+		}
+
+		/**
+		* Removes all Entities from this Group within the given range. 
+		* @method removeChildren
+		* @param begin {Number} The begining index.
+		* @param end {Number} The last index of the range.
+		* @param destroy {Number} If the children should be destroyed as well.
+		* @return {Number} The number of removed entities.
+		* @public
+		*/
+		public removeChildren(begin: number = 0, end: number = 0x7fffffff, destroy:boolean = false): number {
+
+			end -= begin;
+			
+			var removed: Kiwi.IChild[] = this.members.splice(begin, end);
+
+			for (var i = 0; i < removed.length; i++) {
+				removed[i].parent = null;
+
+				if (destroy) {
+					removed[i].destroy();
+				}
+			}
+
+			return removed.length;
+		}
+
+		/**
+		* Removes the first Entity from this Group marked as 'alive'
+		* @method removeFirstAlive
+		* @param [destroy=false] {boolean} If the entity should run the destroy method when it is removed.
+		* @return {object} The Entity that was removed from this Group if alive, otherwise null
+		* @public
+		* @deprecated in v1.1.0
+		*/
+		public removeFirstAlive(destroy: boolean = false): Kiwi.IChild {
+
+			return this.removeChild(this.getFirstAlive(), destroy);
+
+		}
+
+
+		/**
+		* -------------------
+		* Get Children Methods
+		* -------------------
+		**/
+
+		/**
+		* Get all children of this Group. By default, this will search the entire sub-graph, including children of children etc.
+		* @method getAllChildren
+		* @param getGroups {boolean} Optional: Whether to include Groups in the results. When false, will only collect GameObjects.
+		* @param destinationArray {Array} Optional: The array in which to store the results.
+		* @return {Array}
+		* @since 1.1.0
+		*/
+		public getAllChildren(getGroups: boolean = true, destinationArray: IChild[] = []): IChild[] {
+			for( var i = 0;  i < this.members.length;  i++) {
+				if(this.members[i].objType() == "Group") {
+					if(getGroups) {
+						destinationArray.push(this.members[i]);
+					}
+					(<Kiwi.Group>this.members[i]).getAllChildren(getGroups, destinationArray);
+				}
+				else {
+					destinationArray.push(this.members[i]);
+				}
+			}
+			return destinationArray;
+		}
+
+
+		/**
+		* Get the child at a specific position in this Group by its index.
+		* @method getChildAt
+		* @param index {Number} The index of the child
+		* @return {object} The child, if found or null if not.
+		* @public
+		*/
+		public getChildAt(index: number): Kiwi.IChild {
+
+			if (this.members[index]) {
+				return this.members[index];
+			} else {
+				return null;
+			}
+
+		}
+
+		/**
+		* Get a child from this Group by its name. By default this will not check sub-groups, but if you supply the correct flag it will check the entire scene graph under this object.
+		* @method getChildByName
+		* @param name {String} The name of the child.
+		* @param recurse {Boolean} Whether to search child groups for the child. Default FALSE.
+		* @return {object} The child, if found or null if not.
+		* @public
+		*/
+		public getChildByName(name: string, recurse: boolean = false): Kiwi.IChild {
+			for (var i = 0; i < this.members.length; i++) {
+				if (this.members[i].name === name) {
+					return this.members[i];
+				}
+				else if(this.members[i].objType() == "Group"  &&  recurse) {
+					var groupResponse = (<Kiwi.Group>this.members[i]).getChildByName( name, true );
+					if(groupResponse !== null) {
+						return groupResponse;
+					}
+				}
+			}
+
+			return null;
+
+		}
+
+		/**
+		* Get a child from this Group by its UUID. By default this will not check sub-groups, but if you supply the correct flag it will check the entire scene graph under this object.
+		* @method getChildByID
+		* @param id {String} The ID of the child.
+		* @param recurse {Boolean} Whether to search child groups for the child. Default FALSE.
+		* @return {object} The child, if found or null if not.
+		* @public
+		*/
+		public getChildByID(id: string, recurse: boolean = false): Kiwi.IChild {
+			for (var i = 0; i < this.members.length; i++) {
+				if (this.members[i].id === id) {
+					return this.members[i];
+				}
+				else if(this.members[i].objType() == "Group"  &&  recurse) {
+					var groupResponse = (<Kiwi.Group>this.members[i]).getChildByID( id, true );
+					if(groupResponse !== null) {
+						return groupResponse;
+					}
+				}
+			}
+
+			return null;
+
+		}
+
+		/**
+		* Returns the index position of the Entity or -1 if not found.
+		* @method getChildIndex
+		* @param child {object} The child.
+		* @return {Number} The index of the child or -1 if not found.
+		* @public
+		*/
+		public getChildIndex(child: Kiwi.IChild): number {
+
+			return this.members.indexOf(child);
+
+		}
+
+		/**
+		* Returns the first Entity from this Group marked as 'alive' or null if no members are alive
+		* @method getFirstAlive
+		* @return {object}
+		* @public
+		* @deprecated in v1.1.0
+		*/
+		public getFirstAlive(): Kiwi.IChild {
+
+			for (var i = 0; i < this.members.length; i++) {
+				if (this.members[i].exists === true) {
+					return this.members[i];
+				}
+			}
+
+			return null;
+		}
+
+		/**
+		* Returns the first member of the Group which is not 'alive', returns null if all members are alive.
+		* @method getFirstDead
+		* @return {object}
+		* @public
+		* @deprecated in v1.1.0
+		*/
+		public getFirstDead(): Kiwi.IChild {
+
+			for (var i = 0; i < this.members.length; i++) {
+				if (this.members[i].exists === false) {
+					return this.members[i];
+				}
+			}
+
+			return null;
+
+		}
+
+		/**
+		* Returns a member at random from the group.
+		* @param {Number}	StartIndex	Optional offset off the front of the array. Default value is 0, or the beginning of the array.
+		* @param {Number}	Length		Optional restriction on the number of values you want to randomly select from.
+		* @return {object}	A child from the members list.
+		* @public
+		*/
+		public getRandom(start: number = 0, length: number = 0): Kiwi.IChild {
+
+			if (this.members.length === 0) {
+				return null;
+			}
+			/*
+			if (length === 0) {
+				length = this.members.length;
+			}
+
+			if (start < 0 || start > length) {
+				start = 0;
+			}
+
+			var rnd = start + (Math.random() * (start + length));
+
+			if (rnd > this.members.length) {
+				return this.members[this.members.length - 1];
+
+			} else {
+				return this.members[rnd];
+			}
+			*/
+
+			// Comply start to viable range
+			start = Kiwi.Utils.GameMath.clamp(start, this.members.length - 1);
+
+			// Comply length to fit
+			if(length === 0) {
+				length = this.members.length;
+			}
+			if(this.members.length <= start + length) {
+				length = this.members.length - start - 1;
+			}
+
+			// Create and truncate random index
+			var rnd = start + Math.random() * length;
+			rnd = Math.floor(rnd);
+
+			// Return
+			return this.members[rnd];
+		}
+
+		/**
+		* Returns an array of children which contain the tag which is passed.
+		* @method getChildrenByTag
+		* @param tag {string}
+		* @return {Array}
+		* @public
+		* @since 1.1.0
+		*/
+		public getChildrenByTag(tag: string): IChild[]{
+
+			var children = [];
+
+			for (var i = 0; i < this.members.length; i++) {
+
+				if (this.members[i].hasTag(tag)) {
+					children.push(this.members[i]);
+				}
+
+				if (this.members[i].childType() == Kiwi.GROUP) {
+					children = children.concat( (<Kiwi.Group>this.members[i] ).getChildrenByTag(tag) );
+				}
+
+			}
+
+			return children;
+		}
+
+
+		/**
+		* --------------------
+		* Child Depth Sorting Methods
+		* --------------------
+		**/
+
+
+		/**
+		* Sets a new position of an existing Entity within the Group.
+		* @method setChildIndex
+		* @param child {object} The child in this Group to change.
+		* @param index {Number} The index for the child to be set at.
+		* @return {boolean} true if the Entity was moved to the new position, otherwise false.
+		* @public
+		*/
+		public setChildIndex(child: Kiwi.IChild, index: number): boolean {
+		
+			//  If the Entity isn't in this Group, or is already at that index then bail out
+			if (child.parent !== this || this.getChildIndex(child) === index) {
+				return false;
+			}
+
+			this.removeChild(child);
+			this.addChildAt(child, index);
+
+			return true;
+		}
+
+		/**
+		* Swaps the position of two existing Entities that are a direct child of this group.
+		* @method swapChildren
+		* @param child1 {object} The first child in this Group to swap.
+		* @param child2 {object} The second child in this Group to swap.
+		* @return {boolean} true if the Entities were swapped successfully, otherwise false.
+		* @public
+		*/
+		public swapChildren(child1: Kiwi.IChild, child2: Kiwi.IChild):boolean {
+		
+			//  If either Entity isn't in this Group, or is already at that index then bail out
+			if (child1.parent !== this || child2.parent !== this) {
+				return false;
+			}
+
+			var index1 = this.getChildIndex(child1);
+			var index2 = this.getChildIndex(child2);
+
+			if (index1 !== -1 && index2 !== -1 && index1 !== index2) {
+				this.members[index1] = child2;
+				this.members[index2] = child1;
+
+				return true;
+			}
+
+			return false;
+		}
+
+		/**
+		* Swaps the position of two existing Entities within the Group based on their index.
+		* @method swapChildrenAt
+		* @param index1 {Number} The position of the first Entity in this Group to swap.
+		* @param index2 {Number} The position of the second Entity in this Group to swap.
+		* @return {boolean} true if the Entities were swapped successfully, otherwise false.
+		* @public
+		*/
+		public swapChildrenAt(index1: number, index2: number): boolean {
+			 
+			var child1: Kiwi.IChild = this.getChildAt(index1);
+			var child2: Kiwi.IChild = this.getChildAt(index2);
+
+			if (child1 !== null && child2 !== null) {
+				//  If either Entity isn't in this Group, or is already at that index then bail out
+				if (child1 == child2 || child1.parent !== this || child2.parent !== this) {
+					return false;
+				}
+
+				this.members[index1] = child2;
+				this.members[index2] = child1;
+
+				return true;
+			}
+
+			return false;
+		}
+
+		/**
+		* Replaces a child Entity in this Group with a new one.
+		* @method replaceChild
+		* @param oldChild {object} The Entity in this Group to be removed.
+		* @param newChild {object} The new Entity to insert into this Group at the old Entities position.
+		* @return {boolean} true if the Entities were replaced successfully, otherwise false.
+		* @public
+		*/
+		public replaceChild(oldChild: Kiwi.IChild, newChild: Kiwi.IChild): boolean {
+			
+			//fall through if replacing child with the same child
+			if (oldChild === newChild) return false;
+
+			// get the index of the existing child
+			var index: number = this.getChildIndex(oldChild);
+
+			if (index > -1) {
+				// remove the new child from the group if the group contains it, so it can be reinserted in new position
+				if (newChild.parent) {
+					newChild.parent.removeChild(newChild);
+				}
+
+				this.removeChildAt(index);
+
+				this.addChildAt(newChild, index); 
+				newChild.parent = null;
+
+				return true;
+			}
+
+			return false;
+		}
+
+		/**
+		* Loops through each member in the group and run a method on for each one.
+		* @method forEach
+		* @param context {any} The context that the callbacks are to have when called.
+		* @param callback {any} The callback method to execute on each member.
+		* @param [params]* {any} Any extra parameters.
+		* @public
+		*/
+		public forEach(context, callback, ...params: any[]) {
+
+			if (this.members.length > 0) {
+				this.members.forEach((child) => callback.apply(context, [child].concat(params)));
+			}
+
+		}
+
+		/**
+		* Loop through each member of the groups that is alive. 
+		* @method forEachAlive
+		* @param context {any} The context that the callbacks are to have when called.
+		* @param callback {any} The callback method to execute on each member.
+		* @param [params]* {any} Any extra parameters.
+		* @public
+		*/
+		public forEachAlive(context, callback, ...params: any[]) {
+
+			if (this.members.length > 0) {
+				
+				this.members.forEach((child) => {
+					if (child.exists) callback.apply(context, [child].concat(params));
+				});
+				
+			}
+
+		}
+
+		/**
+		* Sets a property on every member. If componentName is null the property is set on the entity itself, otherwise it is set on the named component. Uses runtime string property lookups. Not optimal for large groups if speed is an issue.
+		* @method setAll
+		* @param componentName {string} The name of the component to set the property on - set to null to set a property on the entity.
+		* @param property {string} The name of the property to set.
+		* @param value {any} The value to set the property to.
+		* @public
+		*/
+		public setAll(componentName: string,property: string, value: any) {
+			if (componentName === null) {
+				for (var i: number = 0; i < this.members.length; i++) {
+					this.members[i][property] = value;
+				}
+			} else {
+				for (var i: number = 0; i < this.members.length; i++) {
+					this.members[i][componentName][property] = value;
+				}
+			}
+		}
+
+		/**
+		* Calls a function on every member. If componentName is null the function is called on the entity itself, otherwise it is called on the named component. Uses runtime string property lookups. Not optimal for large groups if speed is an issue.
+		* @method callAll
+		* @param componentName {string} The name of the component to call the function on - set to null to call a function on the entity.
+		* @param functionName {string} The name of the function to call.
+		* @param args {Array} An array of arguments to pas to the function.
+		* @public
+		*/
+		public callAll(componentName: string,functionName: string, args?: any[]) {
+			if (componentName === null) {
+				for (var i: number = 0; i < this.members.length; i++) {
+					this.members[i][functionName].apply(this.members[i], args);
+				}
+			} else {
+				for (var i: number = 0; i < this.members.length; i++) {
+					this.members[i][componentName][functionName].apply(this.members[i][componentName], args);
+				}
+			}
+		}
+
+		/**
+		* The update loop for this group.
+		* @method update
+		* @public
+		*/
+		public update() {
+
+			this.components.preUpdate();
+
+			this.components.update();
+			if (this.members.length > 0) {
+
+				for (var i = 0; i < this.members.length; i++) {
+					if (this.members[i].active === true) {
+						this.members[i].update();
+					} 
+
+					if(this.members[i].exists === false) {
+						this.members[i].destroy( true );
+					}
+				}
+				
+			}
+
+			this.components.postUpdate();
+
+		}
+
+		/**
+		* If an Entity no longer exists it is cleared for garbage collection or pool re-allocation
+		* @property exists 
+		* @type boolean
+		* @private
+		*/
+		private _exists: boolean;
+
+		/**
+		* Toggles the exitence of this Group. An Entity that no longer exists can be garbage collected or re-allocated in a pool
+		* This method should be over-ridden to handle specific canvas/webgl implementations.
+		* @property exists
+		* @type boolean
+		* @public
+		*/
+		public set exists(value: boolean) {
+			this._exists = value;
+		}
+
+		public get exists():boolean {
+			return this._exists;
+		}
+
+		/**
+		* An active Entity is one that has its update method called by its parent.
+		* @property _active
+		* @type boolean
+		* @default true
+		* @private
+		*/
+		private _active: boolean;
+
+		/**
+		* Toggles the active state of this Entity. An Entity that is active has its update method called by its parent.
+		* This method should be over-ridden to handle specific dom/canvas/webgl implementations.
+		* @property active
+		* @type boolean
+		* @default true
+		* @public
+		*/
+		public set active(value: boolean) {
+			this._active = value;
+		}
+
+		public get active():boolean {
+			return this._active;
+		}
+
+		/**
+		* The render method that is required by the IChild. 
+		* This method never gets called as the render is only worried about rendering entities.
+		* @method render
+		* @param camera {Kiwi.Camera}
+		* @public
+		* @deprecated
+		*/
+		public render(camera:Kiwi.Camera) {
+
+		}
+
+		/**
+		* Returns the number of member which are marked as 'alive'
+		* @method countLiving
+		* @return {Number} 
+		* @public
+		*/
+		public countLiving():number { 
+
+			var total: number = 0;
+
+			for (var i = 0; i < this.members.length; i++) {
+				if (this.members[i].exists === true) {
+					total++;
+				}
+			}
+
+			return total;
+		
+		}
+
+		/**
+		* Returns the number of member which are not marked as 'alive'
+		* @method countDead
+		* @return {Number} 
+		* @public
+		*/
+		public countDead(): number { 
+		
+			var total: number = 0;
+
+			for (var i = 0; i < this.members.length; i++) {
+				if (this.members[i].exists === false) {
+					total++;
+				}
+			}
+
+			return total;
+		
+		}
+
+		/**
+		* Clear all children from this Group
+		* @method clear
+		* @public
+		*/
+		public clear() {
+
+			this.members.length = 0;
+
+		}
  
-        /**
+		/**
 		* Controls whether render is automatically called by the parent.
-        * @property _willRender
-        * @type Boolean
-        * @private
-        * @deprecated Use _visible instead
+		* @property _willRender
+		* @type Boolean
+		* @private
+		* @deprecated Use _visible instead
 		*/
 		private _willRender: boolean;
 
-        /**
-        * Controls whether render is automatically called by the parent.
-        * @property willRender
-        * @type boolean
-        * @return {boolean}
-        * @public
-        * @deprecated Use visible instead
-        */
-        public set willRender(value: boolean) {
-            this._willRender = value;
-        }
-        public get willRender():boolean {
-            return this._willRender;
-        }
-
-        /**
-        * A boolean that indicates whether or not this entity is visible or not. Note that is does not get set to false if the alpha is 0.
-        * @property _visible
-        * @type boolean
-        * @default true
-        * @private
-        * @since 1.0.1
-        */
-        private _visible: boolean;
-        
-        /**
-        * Set the visibility of this entity. True or False.
-        * @property visible
-        * @type boolean
-        * @default true
-        * @public
-        * @since 1.0.1
-        */
-        public set visible(value: boolean) {
-            this._visible = value;
-        }
-        public get visible(): boolean {
-            return this._visible;
-        }
-
-        
-        /**
-        * ---------------
-        * Tagging System
-        * ---------------
-        **/
-
-        
-        /**
-        * Any tags that are on this Entity. This can be used to grab GameObjects or Groups on the whole game which have these particular tags.
-        * By default Entitys contain no tags.
-        * @property _tags
-        * @type Array
-        * @since 1.1.0
-        * @private
-        */
-        private _tags: string[] = [];
-
-        /**
-        * Adds a new Tag to this Entity. Useful for identifying large amounts of the same type of GameObjects.
-        * You can pass multiple strings to add multiple tags.
-        * @method addTag
-        * @param tag {string} The tag that you would like to add to this Entity.
-        * @since 1.1.0
-        * @public
-        */
-        public addTag(...args: any[]) {
-
-            //Loop through the arguments
-            for (var i = 0; i < args.length; i++) {
-                if (this._tags.indexOf(args[i]) == -1) {
-                    this._tags.push(args[i]);
-                }
-            }
-
-        }
-
-        /**
-        * Removes a Tag from this Entity.
-        * @method removeTag
-        * @param tag {string} The tag that you would like to remove from this Entity.
-        * @since 1.1.0
-        * @public
-        */
-        public removeTag(...args: any[]) {
-
-            for (var i = 0; i < args.length; i++) {
-                var index = this._tags.indexOf(args[i]);
-                if (index !== -1) this._tags.splice(index, 1);
-            }
-
-        }
-
-        /**
-        * Checks to see if this Entity has a Tag based upon a string which you pass.
-        * @method hasTag
-        * @param tag {string} 
-        * @since 1.1.0
-        * @return {boolean}
-        * @public 
-        */
-        public hasTag(tag: string): boolean {
-
-            var len = this._tags.length;
-            while (len--) {
-                if (this._tags[len] === tag) {
-                    return true;
-                }
-            }
-
-            return false;
-        }
-
-
-        /**
+		/**
+		* Controls whether render is automatically called by the parent.
+		* @property willRender
+		* @type boolean
+		* @return {boolean}
+		* @public
+		* @deprecated Use visible instead
+		*/
+		public set willRender(value: boolean) {
+			this._willRender = value;
+		}
+		public get willRender():boolean {
+			return this._willRender;
+		}
+
+		/**
+		* A boolean that indicates whether or not this entity is visible or not. Note that is does not get set to false if the alpha is 0.
+		* @property _visible
+		* @type boolean
+		* @default true
+		* @private
+		* @since 1.0.1
+		*/
+		private _visible: boolean;
+
+		/**
+		* Set the visibility of this entity. True or False.
+		* @property visible
+		* @type boolean
+		* @default true
+		* @public
+		* @since 1.0.1
+		*/
+		public set visible(value: boolean) {
+			this._visible = value;
+		}
+		public get visible(): boolean {
+			return this._visible;
+		}
+
+
+		/**
+		* ---------------
+		* Tagging System
+		* ---------------
+		**/
+
+
+		/**
+		* Any tags that are on this Entity. This can be used to grab GameObjects or Groups on the whole game which have these particular tags.
+		* By default Entitys contain no tags.
+		* @property _tags
+		* @type Array
+		* @since 1.1.0
+		* @private
+		*/
+		private _tags: string[] = [];
+
+		/**
+		* Adds a new Tag to this Entity. Useful for identifying large amounts of the same type of GameObjects.
+		* You can pass multiple strings to add multiple tags.
+		* @method addTag
+		* @param tag {string} The tag that you would like to add to this Entity.
+		* @since 1.1.0
+		* @public
+		*/
+		public addTag(...args: any[]) {
+
+			//Loop through the arguments
+			for (var i = 0; i < args.length; i++) {
+				if (this._tags.indexOf(args[i]) == -1) {
+					this._tags.push(args[i]);
+				}
+			}
+
+		}
+
+		/**
+		* Removes a Tag from this Entity.
+		* @method removeTag
+		* @param tag {string} The tag that you would like to remove from this Entity.
+		* @since 1.1.0
+		* @public
+		*/
+		public removeTag(...args: any[]) {
+
+			for (var i = 0; i < args.length; i++) {
+				var index = this._tags.indexOf(args[i]);
+				if (index !== -1) this._tags.splice(index, 1);
+			}
+
+		}
+
+		/**
+		* Checks to see if this Entity has a Tag based upon a string which you pass.
+		* @method hasTag
+		* @param tag {string} 
+		* @since 1.1.0
+		* @return {boolean}
+		* @public 
+		*/
+		public hasTag(tag: string): boolean {
+
+			var len = this._tags.length;
+			while (len--) {
+				if (this._tags[len] === tag) {
+					return true;
+				}
+			}
+
+			return false;
+		}
+
+
+		/**
 		* Removes all children and destroys the Group. 
-        * @method destroy
-        * @param [immediate=false] {boolean} If the object should be immediately removed or if it should be removed at the end of the next update loop.
-        * @param [destroyChildren=true] {boolean} If all of the children on the group should also have their destroy methods called.
-        * @public
-		*/
-        public destroy(immediate:boolean = false, destroyChildren:boolean = true) {
-            
-            this._exists = false;
-            this._active = false
-            this._visible = false;
-
-            if (immediate === true) {
-
-                if (this._tempRemoveChildren !== null) destroyChildren = this._tempRemoveChildren;
-
-                if (destroyChildren == true) {
-
-                    //Remove all of the children.
-                    for (var i = 0; i < this.members.length; i++) {
-                        this.members[i].destroy(true);
-                    }
-
-                } else {
-                    this.removeChildren();
-                
-                }
-
-                if (this.parent !== null) this.parent.removeChild(this);
-                if (this.state) this.state.removeFromTrackingList(this);
-                delete this.transform;
-                if (this.components) this.components.removeAll();
-                delete this.components;
-                delete this.game;
-                delete this.state;
-
-            } else {
-                this._tempRemoveChildren = destroyChildren;
-            }
-
-        }
-        
-        /**
-        * A temporary property that holds a boolean indicating whether or not the group's children should be destroyed or not.
-        * @property _destroyRemoveChildren
-        * @type boolean
-        * @private
-        */
-        private _tempRemoveChildren: boolean = null;
-
-    }
+		* @method destroy
+		* @param [immediate=false] {boolean} If the object should be immediately removed or if it should be removed at the end of the next update loop.
+		* @param [destroyChildren=true] {boolean} If all of the children on the group should also have their destroy methods called.
+		* @public
+		*/
+		public destroy(immediate:boolean = false, destroyChildren:boolean = true) {
+			
+			this._exists = false;
+			this._active = false
+			this._visible = false;
+
+			if (immediate === true) {
+
+				if (this._tempRemoveChildren !== null) destroyChildren = this._tempRemoveChildren;
+
+				if (destroyChildren == true) {
+
+					//Remove all of the children.
+					for (var i = 0; i < this.members.length; i++) {
+						this.members[i].destroy(true);
+					}
+
+				} else {
+					this.removeChildren();
+				}
+
+				if (this.parent !== null) this.parent.removeChild(this);
+				if (this.state) this.state.removeFromTrackingList(this);
+				delete this.transform;
+				if (this.components) this.components.removeAll();
+				delete this.components;
+				delete this.game;
+				delete this.state;
+
+			} else {
+				this._tempRemoveChildren = destroyChildren;
+			}
+
+		}
+
+		/**
+		* A temporary property that holds a boolean indicating whether or not the group's children should be destroyed or not.
+		* @property _destroyRemoveChildren
+		* @type boolean
+		* @private
+		*/
+		private _tempRemoveChildren: boolean = null;
+
+	}
 
 }
diff --git a/src/core/IChild.ts b/src/core/IChild.ts
index 2c66993..9f27e5f 100644
--- a/src/core/IChild.ts
+++ b/src/core/IChild.ts
@@ -5,302 +5,302 @@
 */
 
 module Kiwi {
-    
-    /**
-    * A IChild is an Interface (defined as a class as the documentation does not support Interfaces just yet),
-    * which outlines the methods/properties that objects which are intended to be added as a child of a Stage or Group must have in order to work.
-    * As Javascript does not use Interfaces, the IChild does not appear directly in the library. It describes common elements of Kiwi.Group and Kiwi.Entity.
-    * 
-    * @class IChild
-    * @namespace Kiwi
-    */
-    export interface IChild {
-
-        /**
-        * Renders the entity.
-        * 
-        * @method render
-        * @param camera {Kiwi.Camera}
-        * @public
-        * @deprecated Only Kiwi.Entity and inheritors are rendered.
-        */
-        render(camera: Kiwi.Camera);
-
-        /**
-        * Update the entity. Automatically called every frame.
-        *
-        * @method update
-        * @public
-        */
-        update();
-
-        /**
-        * Represents the type of child that this is.
-        * 
-        * @method childType
-        * @return number
-        * @public
-        */
-        childType(): number;
-
-        /**
-        * Unique identifier instantiated on creation.
-        * 
-        * @property id
-        * @type string
-        * @public
-        */
-        id: string;
-
-        /**
-        * A name for this object. This is not necessary or necessarily unique, but is handy for identifying objects.
-        *
-        * @property name
-        * @type string
-        * @public
-        */
-        name: string;
-
-        /**
-        * The game this object belongs to
-        *
-        * @property game
-        * @type Kiwi.Game
-        * @public
-        */
-        game: Kiwi.Game;
-
-        /**
-        * The State that this object belongs to
-        *
-        * @property state
-        * @type Kiwi.State
-        * @public
-        */
-        state: Kiwi.State;
-
-        /**
-        * The Component Manager
-        *
-        * @property components
-        * @type Kiwi.ComponentManager
-        * @public
-        */
-        components: Kiwi.ComponentManager;
-
-        /**
-        * An indication of whether or not this object is 'dirty' and thus needs to be re-rendered in some manner.
-        *
-        * @property dirty
-        * @type boolean
-        * @public
-        */
-        dirty: boolean;
-
-        /**
-        * Toggles the active state. An active object has its update method called by its parent.
-        *
-        * @property active
-        * @type boolean
-        * @public
-        */
-        active: boolean;
-
-        /**
-        * Toggles the exitence of this object. An object that no longer exists can be garbage collected or re-allocated in a pool
-        * This method should be over-ridden to handle specific canvas/webgl implementations.
-        *
-        * @property exists
-        * @type boolean
-        * @public
-        */
-        exists: boolean;
-
-        /**
-        * Controls whether this object's render methods are called by its parent.
-        *
-        * @property willRender
-        * @type boolean
-        * @public
-        * @deprecated Use visible instead
-        */
-        willRender: boolean;
-
-        /**
-        * Controls whether this object's render methods are called by its parent.
-        *
-        * @property visible
-        * @type boolean
-        * @public
-        * @since 1.0.1
-        */
-        visible: boolean;
-
-        /**
-        * Sets the parent of this object. It is recommended to update transforms when you set this.
-        *
-        * @property parent
-        * @type Kiwi.Group
-        * @public
-        */
-        parent: Kiwi.Group;
-
-        /**
-        * The transform for this object. 
-        * Transform handles the calculation of coordinates/rotation/scale etc in the game world.
-        * @property transform
-        * @type Kiwi.Geom.Transform
-        * @public
-        */
-        transform: Kiwi.Geom.Transform;
-
-        /**
-        * The X coordinate of this object. This is just aliased to the transform property.
-        * @property x
-        * @type number
-        * @public
-        */
-        x: number;
-
-        /**
-        * The Y coordinate of this object. This is just aliased to the transform property.
-        * @property y
-        * @type number
-        * @public
-        */
-        y: number;
-
-        /**
-        * The X coordinate of this object in world space - that is, after inheriting transforms from parents. This is just aliased to the transform property.
-        * @property worldX
-        * @type number
-        * @public
-        * @since 1.1.0
-        */
-        worldX: number;
-
-        /**
-        * The Y coordinate of this object in world space - that is, after inheriting transforms from parents. This is just aliased to the transform property.
-        * @property worldY
-        * @type number
-        * @public
-        * @since 1.1.0
-        */
-        worldY: number;
-
-        /**
-        * The rotation of this object. This is just aliased to the transform property.
-        * @property rotation
-        * @type number
-        * @public
-        */
-        rotation: number;
-
-        /**
-        * The Scale X of this object. This is just aliased to the transform property.
-        * @property scaleX
-        * @type number
-        * @public
-        */
-        scaleX: number;
-
-        /**
-        * The Scale Y of this object. This is just aliased to the transform property.
-        * @property scaleY
-        * @type number
-        * @public
-        */
-        scaleY: number;
-
-        /**
-        * The scale of this object. This is just aliased to the transform property.
-        * @property scale
-        * @type number
-        * @public
-        * @since 1.1.0
-        */
-        scale: number;
-
-        /**
-        * The rotation offset of this object on the X axis. This is just aliased to the transform property.
-        * @property rotPointX
-        * @type number
-        * @public
-        * @since 1.1.0
-        */
-        rotPointX: number;
-
-        /**
-        * The rotation offset of this object on the Y axis. This is just aliased to the transform property.
-        * @property rotPointY
-        * @type number
-        * @public
-        * @since 1.1.0
-        */
-        rotPointY: number;
-
-        /**
-        * The anchor point offset of this object on the X axis. This is an alias of the rotPointX property on the transform.
-        * @property anchorPointX
-        * @type number
-        * @public
-        * @since 1.1.0
-        */
-        anchorPointX: number;
-
-        /**
-        * The anchor point offset of this object on the Y axis. This is an alias of the rotPointY property on the transform.
-        * @property anchorPointY
-        * @type number
-        * @public
-        * @since 1.1.0
-        */
-        anchorPointY: number;
-
-        /**
-        * Call this to clean up the object for deletion and garbage collection.
-        * @method destroy
-        * @param [immediate=false] {boolean} If the object should be immediately removed or if it should be removed at the end of the next update loop.
-        * @public
-        */
-        destroy(...params: any[]);
-
-        /**
-        * Adds a new Tag to this IChild. Useful for identifying large amounts of the same type of GameObjects.
-        * @method addTag
-        * @param tag {string}
-        * @since 1.1.0
-        * @public
-        */
-        addTag(...params: any[]);
-        
-        /**
-        * Removes a Tag from this IChild.
-        * @method removeTag
-        * @param tag {string}
-        * @since 1.1.0
-        * @public
-        */
-        removeTag(...params: any[]);
-        
-        /**
-        * Checks to see if this IChild has a Tag based upon a string which you pass.
-        * @method hasTag
-        * @param tag {string}
-        * @since 1.1.0
-        * @public
-        */
-        hasTag(tag: string): boolean;
-
-        /**
-        * Describes the type of this object.
-        * @method objType
-        * @returns string
-        * @public
-        * @since 1.1.0
-        */
-        objType(): string;
-
-    }
-
-}
\ No newline at end of file
+
+	/**
+	* A IChild is an Interface (defined as a class as the documentation does not support Interfaces just yet),
+	* which outlines the methods/properties that objects which are intended to be added as a child of a Stage or Group must have in order to work.
+	* As Javascript does not use Interfaces, the IChild does not appear directly in the library. It describes common elements of Kiwi.Group and Kiwi.Entity.
+	* 
+	* @class IChild
+	* @namespace Kiwi
+	*/
+	export interface IChild {
+
+		/**
+		* Renders the entity.
+		* 
+		* @method render
+		* @param camera {Kiwi.Camera}
+		* @public
+		* @deprecated Only Kiwi.Entity and inheritors are rendered.
+		*/
+		render(camera: Kiwi.Camera);
+
+		/**
+		* Update the entity. Automatically called every frame.
+		*
+		* @method update
+		* @public
+		*/
+		update();
+
+		/**
+		* Represents the type of child that this is.
+		* 
+		* @method childType
+		* @return number
+		* @public
+		*/
+		childType(): number;
+
+		/**
+		* Unique identifier instantiated on creation.
+		* 
+		* @property id
+		* @type string
+		* @public
+		*/
+		id: string;
+
+		/**
+		* A name for this object. This is not necessary or necessarily unique, but is handy for identifying objects.
+		*
+		* @property name
+		* @type string
+		* @public
+		*/
+		name: string;
+
+		/**
+		* The game this object belongs to
+		*
+		* @property game
+		* @type Kiwi.Game
+		* @public
+		*/
+		game: Kiwi.Game;
+
+		/**
+		* The State that this object belongs to
+		*
+		* @property state
+		* @type Kiwi.State
+		* @public
+		*/
+		state: Kiwi.State;
+
+		/**
+		* The Component Manager
+		*
+		* @property components
+		* @type Kiwi.ComponentManager
+		* @public
+		*/
+		components: Kiwi.ComponentManager;
+
+		/**
+		* An indication of whether or not this object is 'dirty' and thus needs to be re-rendered in some manner.
+		*
+		* @property dirty
+		* @type boolean
+		* @public
+		*/
+		dirty: boolean;
+
+		/**
+		* Toggles the active state. An active object has its update method called by its parent.
+		*
+		* @property active
+		* @type boolean
+		* @public
+		*/
+		active: boolean;
+
+		/**
+		* Toggles the exitence of this object. An object that no longer exists can be garbage collected or re-allocated in a pool
+		* This method should be over-ridden to handle specific canvas/webgl implementations.
+		*
+		* @property exists
+		* @type boolean
+		* @public
+		*/
+		exists: boolean;
+
+		/**
+		* Controls whether this object's render methods are called by its parent.
+		*
+		* @property willRender
+		* @type boolean
+		* @public
+		* @deprecated Use visible instead
+		*/
+		willRender: boolean;
+
+		/**
+		* Controls whether this object's render methods are called by its parent.
+		*
+		* @property visible
+		* @type boolean
+		* @public
+		* @since 1.0.1
+		*/
+		visible: boolean;
+
+		/**
+		* Sets the parent of this object. It is recommended to update transforms when you set this.
+		*
+		* @property parent
+		* @type Kiwi.Group
+		* @public
+		*/
+		parent: Kiwi.Group;
+
+		/**
+		* The transform for this object. 
+		* Transform handles the calculation of coordinates/rotation/scale etc in the game world.
+		* @property transform
+		* @type Kiwi.Geom.Transform
+		* @public
+		*/
+		transform: Kiwi.Geom.Transform;
+
+		/**
+		* The X coordinate of this object. This is just aliased to the transform property.
+		* @property x
+		* @type number
+		* @public
+		*/
+		x: number;
+
+		/**
+		* The Y coordinate of this object. This is just aliased to the transform property.
+		* @property y
+		* @type number
+		* @public
+		*/
+		y: number;
+
+		/**
+		* The X coordinate of this object in world space - that is, after inheriting transforms from parents. This is just aliased to the transform property.
+		* @property worldX
+		* @type number
+		* @public
+		* @since 1.1.0
+		*/
+		worldX: number;
+
+		/**
+		* The Y coordinate of this object in world space - that is, after inheriting transforms from parents. This is just aliased to the transform property.
+		* @property worldY
+		* @type number
+		* @public
+		* @since 1.1.0
+		*/
+		worldY: number;
+
+		/**
+		* The rotation of this object. This is just aliased to the transform property.
+		* @property rotation
+		* @type number
+		* @public
+		*/
+		rotation: number;
+
+		/**
+		* The Scale X of this object. This is just aliased to the transform property.
+		* @property scaleX
+		* @type number
+		* @public
+		*/
+		scaleX: number;
+
+		/**
+		* The Scale Y of this object. This is just aliased to the transform property.
+		* @property scaleY
+		* @type number
+		* @public
+		*/
+		scaleY: number;
+
+		/**
+		* The scale of this object. This is just aliased to the transform property.
+		* @property scale
+		* @type number
+		* @public
+		* @since 1.1.0
+		*/
+		scale: number;
+
+		/**
+		* The rotation offset of this object on the X axis. This is just aliased to the transform property.
+		* @property rotPointX
+		* @type number
+		* @public
+		* @since 1.1.0
+		*/
+		rotPointX: number;
+
+		/**
+		* The rotation offset of this object on the Y axis. This is just aliased to the transform property.
+		* @property rotPointY
+		* @type number
+		* @public
+		* @since 1.1.0
+		*/
+		rotPointY: number;
+
+		/**
+		* The anchor point offset of this object on the X axis. This is an alias of the rotPointX property on the transform.
+		* @property anchorPointX
+		* @type number
+		* @public
+		* @since 1.1.0
+		*/
+		anchorPointX: number;
+
+		/**
+		* The anchor point offset of this object on the Y axis. This is an alias of the rotPointY property on the transform.
+		* @property anchorPointY
+		* @type number
+		* @public
+		* @since 1.1.0
+		*/
+		anchorPointY: number;
+
+		/**
+		* Call this to clean up the object for deletion and garbage collection.
+		* @method destroy
+		* @param [immediate=false] {boolean} If the object should be immediately removed or if it should be removed at the end of the next update loop.
+		* @public
+		*/
+		destroy(...params: any[]);
+
+		/**
+		* Adds a new Tag to this IChild. Useful for identifying large amounts of the same type of GameObjects.
+		* @method addTag
+		* @param tag {string}
+		* @since 1.1.0
+		* @public
+		*/
+		addTag(...params: any[]);
+
+		/**
+		* Removes a Tag from this IChild.
+		* @method removeTag
+		* @param tag {string}
+		* @since 1.1.0
+		* @public
+		*/
+		removeTag(...params: any[]);
+
+		/**
+		* Checks to see if this IChild has a Tag based upon a string which you pass.
+		* @method hasTag
+		* @param tag {string}
+		* @since 1.1.0
+		* @public
+		*/
+		hasTag(tag: string): boolean;
+
+		/**
+		* Describes the type of this object.
+		* @method objType
+		* @returns string
+		* @public
+		* @since 1.1.0
+		*/
+		objType(): string;
+
+	}
+
+}
diff --git a/src/core/PluginManager.ts b/src/core/PluginManager.ts
index 9ddfcc4..d7a654b 100644
--- a/src/core/PluginManager.ts
+++ b/src/core/PluginManager.ts
@@ -6,288 +6,281 @@
 
 module Kiwi {
 
-    /**
-    * The plugin manager registers plugins, checks plugin dependencies, and calls designated functions on each registered plugin at boot time, and during the update loop if required.
-    * Plugins are registered on the global Kiwi instance. Once a plugin in registered it is allocated a place on the Kiwi.Plugins name space.
-    * Eg. FooPlugin will be accessible at Kiwi.Plugins.FooPlugin.
-    * When a game instance is created, it can contain a list of required plugins in the configuration object. At this point the plugin manager will validate that the plugins
-    * exist, and that dependencies are met (both Kiwi version and versions of other required plugins).
-    * If the plugin has a "create" function, the plugin manager instance will call that function as part of the boot process. The create function may do anything, but usually it would create
-    * an instance of an object. 
-    * The plugin manager update function is called every update loop. If an object was created by the "create" function and it has an "update" function, that function will be called in turn.
-    * @class PluginManager
-    * @namespace Kiwi
-    * @constructor
-    * @param game {Kiwi.Game} The state that this entity belongs to. Used to generate the Unique ID and for garbage collection.
-    * @param plugins {string[]} The entities position on the x axis.
-    * @return {Kiwi.PluginManager} This PluginManager.
-    *
-    */
-    export class PluginManager {
-
-        constructor(game: Kiwi.Game,plugins:string[]) {
-            this._game = game;
-            this._plugins = plugins || new Array();
-            this._bootObjects = new Array();
-            this.validatePlugins();
-            this._createPlugins();
-        }
-
-        /**
-        * An array of plugins which have been included in the webpage and registered successfully.
-        * @property _availablePlugins
-        * @type Array
-        * @static
-        * @private
-        */
-        private static _availablePlugins = new Array();
-        
-
-        /**
-        * An array of objects represetning all available plugins, each containing the name and version number of an available plugin
-        * @property getAvailablePlugins
-        * @type Array
-        * @static
-        * @private
-        */
-        public static get availablePlugins():any {
-            var plugins = [];
-            for (var i = 0; i < PluginManager._availablePlugins.length; i++) {
-                plugins.push({
-                    name: PluginManager._availablePlugins[i].name, version: PluginManager._availablePlugins[i].version});
-            }
-            return plugins;
-        }
-
-        
-        /**
-        * Registers a plugin object as available. Any game instance can choose to use the plugin.
-        * Plugins need only be registered once per webpage. If registered a second time it will be ignored.
-        * Two plugins with the same names cannot be reigstered simultaneously, even if different versions.
-        * @method register
-        * @param {object} plugin
-        * @public
-        * @static
-        */
-        public static register(plugin: any) {
-
-            Kiwi.Log.log("Kiwi.PluginManager: Attempting to register plugin : " + plugin.name, '#plugin');
-            if (this._availablePlugins.indexOf(plugin) == -1) {
-                //check if plugin with same name is registered
-                var uniqueName: boolean = true;
-                for (var i = 0; i < this._availablePlugins.length; i++) {
-                    if (plugin.name === this._availablePlugins[i].name) {
-                        uniqueName = false;
-                    }
-                }
-
-                if (uniqueName) {
-                    this._availablePlugins.push(plugin);
-                    Kiwi.Log.log("  Kiwi.PluginManager: Registered plugin " + plugin.name + ": version " + plugin.version, '#plugin');
-                } else {
-                    Kiwi.Log.warn("  Kiwi.PluginManager: A plugin with the same name has already been registered. Ignoring this plugin.", '#plugin');
-                
-                }
-            } else {
-                Kiwi.Log.warn("  Kiwi.PluginManager: This plugin has already been registered. Ignoring second registration.", '#plugin');
-            }
-        }
-
-        /**
-        * Identifies the object as a PluginManager. 
-        * @property objType
-        * @type {string} "PluginManager"
-        * @public
-        */
-        public get objType(): string {
-            return "PluginManager";
-        }
-
-        /**
-        * A reference to the game instance that owns the PluginManager. 
-        * @property objType
-        * @type Kiwi.Game
-        * @private
-        */
-        private _game: Kiwi.Game;
-
-        /**
-        * An array of plugin names which the game instance has been configured to use. Each name must match the constructor function for the plugin. 
-        * @property _plugins
-        * @type Array
-        * @private
-        */
-        private _plugins: string[];
-        
-        /**
-        * An array of objects that contain a boot function, each of which will be called when PluginManager.boot is invoked. 
-        * @property _bootObjects
-        * @type Array
-        * @private
-        */
-        private _bootObjects: any[];
-
-        /**
-        * Builds a list of valid plugins used by the game instance. Each plugin name that is supplied in the Kiwi.Game constructor configuration object  
-        * is checked against the Kiwi.Plugins namespace to ensure that a property of the same name exists.
-        * This will ignore plugin that are registered but not used by the game instance.
-        * @method validatePlugins
-        * @public
-        */
-        public validatePlugins() {
-            var validPlugins: string[] = new Array();
-            Kiwi.Log.log("Kiwi.PluginManager: Validating Plugins", '#plugins');
-
-            for (var i = 0; i < this._plugins.length; i++) {
-
-                var plugin: any = this._plugins[i];
-
-                if (typeof plugin == 'string' || plugin instanceof String) {
-                    if (Kiwi.Plugins.hasOwnProperty(plugin) && this.pluginIsRegistered(plugin)) {
-
-                        validPlugins.push(plugin);
-                        Kiwi.Log.log("  Kiwi.PluginManager: Plugin '" + plugin + "' appears to be valid.", '#plugin');
-                        Kiwi.Log.log("  Kiwi.PluginManager: Name:" + Kiwi.Plugins[plugin].name, '#plugin');
-                        Kiwi.Log.log("  Kiwi.PluginManager: Version:" + Kiwi.Plugins[plugin].version, '#plugin');
-
-                        //test for kiwi version compatiblity
-                        if (typeof Kiwi.Plugins[plugin].minimumKiwiVersion !== "undefined") {
-
-                            Kiwi.Log.log("  Kiwi.PluginManager: " + plugin + " requires minimum Kiwi version " + Kiwi.Plugins[plugin].minimumKiwiVersion, '#plugin');
-                            var parsedKiwiVersion = Utils.Version.parseVersion(Kiwi.VERSION);
-                            var parsedPluginMinVersion = Utils.Version.parseVersion(Kiwi.Plugins[plugin].minimumKiwiVersion);
-
-                            if (parsedKiwiVersion.majorVersion > parsedPluginMinVersion.majorVersion) {
-                                Kiwi.Log.warn("  Kiwi.PluginManager: This major version of Kiwi is greater than that required by '" + plugin + "'. It is unknown whether this plugin will work with this version of Kiwi", '#plugin'); 
-                            } else {
-                                if (Utils.Version.greaterOrEqual(Kiwi.VERSION, Kiwi.Plugins[plugin].minimumKiwiVersion)) {
-                                    Kiwi.Log.log("  Kiwi.PluginManager: Kiwi version meets minimum version requirements for '" + plugin + "'.", '#plugin');
-                                } else {
-                                    Kiwi.Log.warn("  Kiwi.PluginManager: Kiwi version (" + Kiwi.VERSION + ") does not meet minimum version requirements for the plugin (" + Kiwi.Plugins[plugin].minimumKiwiVersion + ").", '#plugin');
-                                }
-                            }
-                        } else {
-                            Kiwi.Log.warn("  Kiwi.PluginManager: '" + plugin + "' is missing the minimumKiwiVersion property. It is unknown whether '" + plugin + "' will work with this version of Kiwi", '#plugin');
-                        }
-                       
-
-                    } else {
-                        Kiwi.Log.log("  Kiwi.PluginManager: Plugin '" + plugin + "' appears to be invalid. No property with that name exists on the Kiwi.Plugins object or the Plugin is not registered. Check that the js file containing the plugin has been included. This plugin will be ignored", '#plugin');
-                    }
-                } else {
-                    Kiwi.Log.log("  Kiwi.PluginManager: The supplied plugin name at index " + i + "is not a string and will be ignored", '#plugin'); 
-                }
-            }
-            this._plugins = validPlugins;
-
-            for (var i = 0; i < this._plugins.length; i++) {
-                //test for plugin dependencies on other plugins
-                var pluginName: string = this._plugins[i];
-                var plugin = Kiwi.Plugins[pluginName];
-
-                if (typeof plugin.pluginDependencies !== "undefined") {
-                    if (plugin.pluginDependencies.length === 0) {
-                        Kiwi.Log.log("  Kiwi.PluginManager: '" + pluginName + "' does not depend on any other plugins.", '#plugin');
-                    } else {
-                        Kiwi.Log.log("  Kiwi.PluginManager: '" + pluginName + "' depends on the following plugins:", '#plugin', '#dependencies');
-                        for (var j = 0; j < plugin.pluginDependencies.length; j++) {
-                            Kiwi.Log.log(plugin.pluginDependencies[j].name, plugin.pluginDependencies[j].minimumVersion, '#plugin', '#dependencies' );
-                            if (!this.validMinimumPluginVersionExists(plugin.pluginDependencies[j].name, plugin.pluginDependencies[j].minimumVersion)) {
-                                Kiwi.Log.warn("  Kiwi.PluginManager: '" + plugin.pluginDependencies[j].name + " hasn't been added to this game via the config, doesn't exist, or does not meet minimum version requirement ( " + plugin.pluginDependencies[j].minimumVersion + ").", '#plugin', '#dependencies');   
-                            }
-                        }
-
-                    }
-                } else {
-                    Kiwi.Log.log("  Kiwi.PluginManager: '" + pluginName + "' does not depend on any other plugins.", '#plugin', '#dependencies');
-                }
-            }
-        }
-
-
-        /**
-        * Returns whether a valid minimum version of a plugin exists.
-        * @method validMinimumPluginVersionExists
-        * @param name {string} Name of plugin
-        * @param version {string} Minimum version
-        * @return boolean
-        * @public
-        */
-        public validMinimumPluginVersionExists( name: string, version: string ): boolean {
-            if ( this._plugins.indexOf( name ) !== -1 ) {
-                if ( Utils.Version.greaterOrEqual( Kiwi.Plugins[ name ].version, version ) ) {
-                    return true;
-                }
-            }
-            return false;
-        }
-
-        /**
-        * Returns true if a plugin identified by the supplied pluginName is registered.
-        * @method pluginIsRegistered
-        * @param {string} pluginName
-        * @public
-        */
-        public pluginIsRegistered(pluginName: string):boolean {
-            var isRegistered: boolean = false;
-            for (var i = 0; i < Kiwi.PluginManager._availablePlugins.length; i++) {
-                if (Kiwi.PluginManager._availablePlugins[i].name === pluginName) {
-                    isRegistered = true;
-                }
-            }
-            return isRegistered;
-        }
-
-        /**
-        * Called after all other core objects and services created by the Kiwi.Game constructor are created.
-        * Attempts to find a "create" function on each plugin and calls it if it exists.
-        * The create function may return an object on which a boot function exists - to be called during boot process.
-        * @method _createPlugins
-        * @private
-        */
-        private _createPlugins() {
-            for (var i = 0; i < this._plugins.length; i++) {
-                var plugin: string = this._plugins[i];
-                if (Kiwi.Plugins[plugin].hasOwnProperty("create")) {
-                    var bootObject = Kiwi.Plugins[plugin].create(this._game);
-                    if (bootObject) this._bootObjects.push(bootObject);
-                    
-                } 
-            }
-           
-           
-        }
-
-        /**
-        * Calls the boot functions on any objects that plugins used by the game instance have designated during creation. 
-        * @method boot
-        * @public
-        */
-        public boot() {
-            for (var i = 0; i < this._bootObjects.length; i++) {
-                if ("boot" in this._bootObjects[i]) {
-                    this._bootObjects[i].boot.call(this._bootObjects[i]);
-                } else {
-                    Kiwi.Log.warn("Kiwi.PluginManager: Warning! No boot function found on boot object.", '#plugin');
-                }
-            }
-
-        }
-
-        /**
-        * Calls the update functions on any objects that plugins used by the game instance have designated during creation. 
-        * @method update
-        * @public
-        */
-        
-        public update() {
-            for (var i = 0; i < this._bootObjects.length; i++) {
-                if ("update" in this._bootObjects[i]) {
-                    this._bootObjects[i].update.call(this._bootObjects[i]);
-                }
-            }
-
-        }
-        
-    }
-}
\ No newline at end of file
+	/**
+	* The plugin manager registers plugins, checks plugin dependencies, and calls designated functions on each registered plugin at boot time, and during the update loop if required.
+	* Plugins are registered on the global Kiwi instance. Once a plugin in registered it is allocated a place on the Kiwi.Plugins name space.
+	* Eg. FooPlugin will be accessible at Kiwi.Plugins.FooPlugin.
+	* When a game instance is created, it can contain a list of required plugins in the configuration object. At this point the plugin manager will validate that the plugins
+	* exist, and that dependencies are met (both Kiwi version and versions of other required plugins).
+	* If the plugin has a "create" function, the plugin manager instance will call that function as part of the boot process. The create function may do anything, but usually it would create
+	* an instance of an object. 
+	* The plugin manager update function is called every update loop. If an object was created by the "create" function and it has an "update" function, that function will be called in turn.
+	* @class PluginManager
+	* @namespace Kiwi
+	* @constructor
+	* @param game {Kiwi.Game} The state that this entity belongs to. Used to generate the Unique ID and for garbage collection.
+	* @param plugins {string[]} The entities position on the x axis.
+	* @return {Kiwi.PluginManager} This PluginManager.
+	*
+	*/
+	export class PluginManager {
+
+		constructor(game: Kiwi.Game,plugins:string[]) {
+			this._game = game;
+			this._plugins = plugins || new Array();
+			this._bootObjects = new Array();
+			this.validatePlugins();
+			this._createPlugins();
+		}
+
+		/**
+		* An array of plugins which have been included in the webpage and registered successfully.
+		* @property _availablePlugins
+		* @type Array
+		* @static
+		* @private
+		*/
+		private static _availablePlugins = new Array();
+
+		/**
+		* An array of objects represetning all available plugins, each containing the name and version number of an available plugin
+		* @property getAvailablePlugins
+		* @type Array
+		* @static
+		* @private
+		*/
+		public static get availablePlugins():any {
+			var plugins = [];
+			for (var i = 0; i < PluginManager._availablePlugins.length; i++) {
+				plugins.push({
+					name: PluginManager._availablePlugins[i].name, version: PluginManager._availablePlugins[i].version});
+			}
+			return plugins;
+		}
+
+		/**
+		* Registers a plugin object as available. Any game instance can choose to use the plugin.
+		* Plugins need only be registered once per webpage. If registered a second time it will be ignored.
+		* Two plugins with the same names cannot be reigstered simultaneously, even if different versions.
+		* @method register
+		* @param {object} plugin
+		* @public
+		* @static
+		*/
+		public static register(plugin: any) {
+
+			Kiwi.Log.log("Kiwi.PluginManager: Attempting to register plugin : " + plugin.name, '#plugin');
+			if (this._availablePlugins.indexOf(plugin) == -1) {
+				//check if plugin with same name is registered
+				var uniqueName: boolean = true;
+				for (var i = 0; i < this._availablePlugins.length; i++) {
+					if (plugin.name === this._availablePlugins[i].name) {
+						uniqueName = false;
+					}
+				}
+
+				if (uniqueName) {
+					this._availablePlugins.push(plugin);
+					Kiwi.Log.log("  Kiwi.PluginManager: Registered plugin " + plugin.name + ": version " + plugin.version, '#plugin');
+				} else {
+					Kiwi.Log.warn("  Kiwi.PluginManager: A plugin with the same name has already been registered. Ignoring this plugin.", '#plugin');
+				
+				}
+			} else {
+				Kiwi.Log.warn("  Kiwi.PluginManager: This plugin has already been registered. Ignoring second registration.", '#plugin');
+			}
+		}
+
+		/**
+		* Identifies the object as a PluginManager. 
+		* @property objType
+		* @type {string} "PluginManager"
+		* @public
+		*/
+		public get objType(): string {
+			return "PluginManager";
+		}
+
+		/**
+		* A reference to the game instance that owns the PluginManager. 
+		* @property objType
+		* @type Kiwi.Game
+		* @private
+		*/
+		private _game: Kiwi.Game;
+
+		/**
+		* An array of plugin names which the game instance has been configured to use. Each name must match the constructor function for the plugin. 
+		* @property _plugins
+		* @type Array
+		* @private
+		*/
+		private _plugins: string[];
+
+		/**
+		* An array of objects that contain a boot function, each of which will be called when PluginManager.boot is invoked. 
+		* @property _bootObjects
+		* @type Array
+		* @private
+		*/
+		private _bootObjects: any[];
+
+		/**
+		* Builds a list of valid plugins used by the game instance. Each plugin name that is supplied in the Kiwi.Game constructor configuration object  
+		* is checked against the Kiwi.Plugins namespace to ensure that a property of the same name exists.
+		* This will ignore plugin that are registered but not used by the game instance.
+		* @method validatePlugins
+		* @public
+		*/
+		public validatePlugins() {
+			var validPlugins: string[] = new Array();
+			Kiwi.Log.log("Kiwi.PluginManager: Validating Plugins", '#plugins');
+
+			for (var i = 0; i < this._plugins.length; i++) {
+
+				var plugin: any = this._plugins[i];
+
+				if (typeof plugin == 'string' || plugin instanceof String) {
+					if (Kiwi.Plugins.hasOwnProperty(plugin) && this.pluginIsRegistered(plugin)) {
+
+						validPlugins.push(plugin);
+						Kiwi.Log.log("  Kiwi.PluginManager: Plugin '" + plugin + "' appears to be valid.", '#plugin');
+						Kiwi.Log.log("  Kiwi.PluginManager: Name:" + Kiwi.Plugins[plugin].name, '#plugin');
+						Kiwi.Log.log("  Kiwi.PluginManager: Version:" + Kiwi.Plugins[plugin].version, '#plugin');
+
+						//test for kiwi version compatiblity
+						if (typeof Kiwi.Plugins[plugin].minimumKiwiVersion !== "undefined") {
+
+							Kiwi.Log.log("  Kiwi.PluginManager: " + plugin + " requires minimum Kiwi version " + Kiwi.Plugins[plugin].minimumKiwiVersion, '#plugin');
+							var parsedKiwiVersion = Utils.Version.parseVersion(Kiwi.VERSION);
+							var parsedPluginMinVersion = Utils.Version.parseVersion(Kiwi.Plugins[plugin].minimumKiwiVersion);
+
+							if (parsedKiwiVersion.majorVersion > parsedPluginMinVersion.majorVersion) {
+								Kiwi.Log.warn("  Kiwi.PluginManager: This major version of Kiwi is greater than that required by '" + plugin + "'. It is unknown whether this plugin will work with this version of Kiwi", '#plugin'); 
+							} else {
+								if (Utils.Version.greaterOrEqual(Kiwi.VERSION, Kiwi.Plugins[plugin].minimumKiwiVersion)) {
+									Kiwi.Log.log("  Kiwi.PluginManager: Kiwi version meets minimum version requirements for '" + plugin + "'.", '#plugin');
+								} else {
+									Kiwi.Log.warn("  Kiwi.PluginManager: Kiwi version (" + Kiwi.VERSION + ") does not meet minimum version requirements for the plugin (" + Kiwi.Plugins[plugin].minimumKiwiVersion + ").", '#plugin');
+								}
+							}
+						} else {
+							Kiwi.Log.warn("  Kiwi.PluginManager: '" + plugin + "' is missing the minimumKiwiVersion property. It is unknown whether '" + plugin + "' will work with this version of Kiwi", '#plugin');
+						}
+
+
+					} else {
+						Kiwi.Log.log("  Kiwi.PluginManager: Plugin '" + plugin + "' appears to be invalid. No property with that name exists on the Kiwi.Plugins object or the Plugin is not registered. Check that the js file containing the plugin has been included. This plugin will be ignored", '#plugin');
+					}
+				} else {
+					Kiwi.Log.log("  Kiwi.PluginManager: The supplied plugin name at index " + i + "is not a string and will be ignored", '#plugin'); 
+				}
+			}
+			this._plugins = validPlugins;
+
+			for (var i = 0; i < this._plugins.length; i++) {
+				//test for plugin dependencies on other plugins
+				var pluginName: string = this._plugins[i];
+				var plugin = Kiwi.Plugins[pluginName];
+
+				if (typeof plugin.pluginDependencies !== "undefined") {
+					if (plugin.pluginDependencies.length === 0) {
+						Kiwi.Log.log("  Kiwi.PluginManager: '" + pluginName + "' does not depend on any other plugins.", '#plugin');
+					} else {
+						Kiwi.Log.log("  Kiwi.PluginManager: '" + pluginName + "' depends on the following plugins:", '#plugin', '#dependencies');
+						for (var j = 0; j < plugin.pluginDependencies.length; j++) {
+							Kiwi.Log.log(plugin.pluginDependencies[j].name, plugin.pluginDependencies[j].minimumVersion, '#plugin', '#dependencies' );
+							if (!this.validMinimumPluginVersionExists(plugin.pluginDependencies[j].name, plugin.pluginDependencies[j].minimumVersion)) {
+								Kiwi.Log.warn("  Kiwi.PluginManager: '" + plugin.pluginDependencies[j].name + " hasn't been added to this game via the config, doesn't exist, or does not meet minimum version requirement ( " + plugin.pluginDependencies[j].minimumVersion + ").", '#plugin', '#dependencies');   
+							}
+						}
+
+					}
+				} else {
+					Kiwi.Log.log("  Kiwi.PluginManager: '" + pluginName + "' does not depend on any other plugins.", '#plugin', '#dependencies');
+				}
+			}
+		}
+
+
+		/**
+		* Returns whether a valid minimum version of a plugin exists.
+		* @method validMinimumPluginVersionExists
+		* @param name {string} Name of plugin
+		* @param version {string} Minimum version
+		* @return boolean
+		* @public
+		*/
+		public validMinimumPluginVersionExists( name: string, version: string ): boolean {
+			if ( this._plugins.indexOf( name ) !== -1 ) {
+				if ( Utils.Version.greaterOrEqual( Kiwi.Plugins[ name ].version, version ) ) {
+					return true;
+				}
+			}
+			return false;
+		}
+
+		/**
+		* Returns true if a plugin identified by the supplied pluginName is registered.
+		* @method pluginIsRegistered
+		* @param {string} pluginName
+		* @public
+		*/
+		public pluginIsRegistered(pluginName: string):boolean {
+			var isRegistered: boolean = false;
+			for (var i = 0; i < Kiwi.PluginManager._availablePlugins.length; i++) {
+				if (Kiwi.PluginManager._availablePlugins[i].name === pluginName) {
+					isRegistered = true;
+				}
+			}
+			return isRegistered;
+		}
+
+		/**
+		* Called after all other core objects and services created by the Kiwi.Game constructor are created.
+		* Attempts to find a "create" function on each plugin and calls it if it exists.
+		* The create function may return an object on which a boot function exists - to be called during boot process.
+		* @method _createPlugins
+		* @private
+		*/
+		private _createPlugins() {
+			for (var i = 0; i < this._plugins.length; i++) {
+				var plugin: string = this._plugins[i];
+				if (Kiwi.Plugins[plugin].hasOwnProperty("create")) {
+					var bootObject = Kiwi.Plugins[plugin].create(this._game);
+					if (bootObject) this._bootObjects.push(bootObject);
+				}
+			}
+		}
+
+		/**
+		* Calls the boot functions on any objects that plugins used by the game instance have designated during creation. 
+		* @method boot
+		* @public
+		*/
+		public boot() {
+			for (var i = 0; i < this._bootObjects.length; i++) {
+				if ("boot" in this._bootObjects[i]) {
+					this._bootObjects[i].boot.call(this._bootObjects[i]);
+				} else {
+					Kiwi.Log.warn("Kiwi.PluginManager: Warning! No boot function found on boot object.", '#plugin');
+				}
+			}
+
+		}
+
+		/**
+		* Calls the update functions on any objects that plugins used by the game instance have designated during creation. 
+		* @method update
+		* @public
+		*/
+		
+		public update() {
+			for (var i = 0; i < this._bootObjects.length; i++) {
+				if ("update" in this._bootObjects[i]) {
+					this._bootObjects[i].update.call(this._bootObjects[i]);
+				}
+			}
+		}
+	}
+}
diff --git a/src/core/Signal.ts b/src/core/Signal.ts
index a95e543..56fd8b7 100644
--- a/src/core/Signal.ts
+++ b/src/core/Signal.ts
@@ -3,400 +3,400 @@
 * @module Kiwi
 * 
 */
- 
+
 module Kiwi {
 
-    /**
-    * A TypeScript conversion of JS Signals by Miller Medeiros.
-    * Released under the MIT license
-    * http://millermedeiros.github.com/js-signals/
-    *
-    * @class Signal
-    * @namespace Kiwi
-    * @constructor
-    * 
-    * @author Miller Medeiros, JS Signals
-    */
-    export class Signal {
-
-        /**
+	/**
+	* A TypeScript conversion of JS Signals by Miller Medeiros.
+	* Released under the MIT license
+	* http://millermedeiros.github.com/js-signals/
+	*
+	* @class Signal
+	* @namespace Kiwi
+	* @constructor
+	* 
+	* @author Miller Medeiros, JS Signals
+	*/
+	export class Signal {
+
+		/**
 		* A list of all of the signal bindings that have been attached.
-        * @property _bindings
-        * @type Array
-        * @private
-    	*/
-        private _bindings: SignalBinding[] = [];
+		* @property _bindings
+		* @type Array
+		* @private
+		*/
+		private _bindings: SignalBinding[] = [];
 
-        /**
+		/**
 		*  
-        * @property _prevParams
-        * @type Any
-        * @private
-    	*/
-        private _prevParams = null;
-
-        /**
-        * Signals Version Number
-        * @property VERSION
-        * @type String
-        * @default '1.0.0'
-        * @final
-        * @static
-        * @public
-        */
-        public static VERSION: string = '1.0.0';
-
-        /**
-        * If Signal should keep record of previously dispatched parameters.
-        * @property memorize
-        * @type boolean
-        * @default false
-        * @public
-        */
-        public memorize: boolean = false;
-
-        /**
-        * If the callbacks should propagate or not. 
-        * @property _shouldPropagate
-        * @type boolean
-        * @default true
-        * @private
-        */
-        private _shouldPropagate: boolean = true;
-
-        /**
-        * If Signal is active and should broadcast events.
-        * Note: Setting this property during a dispatch will only affect the next dispatch, 
-        * if you want to stop the propagation of a signal use `halt()` instead.
-        * @property active
-        * @type boolean
-        * @default true
-        * @public
-        */
-        public active: boolean = true;
-
-
-        /**
-        * Returns the type of this object
-        * @method objType
-        * @return {String} "Signal"
-        * @public
-        */
-        public objType() {
-            return "Signal";
-        }
-
-        /**
+		* @property _prevParams
+		* @type Any
+		* @private
+		*/
+		private _prevParams = null;
+
+		/**
+		* Signals Version Number
+		* @property VERSION
+		* @type String
+		* @default '1.0.0'
+		* @final
+		* @static
+		* @public
+		*/
+		public static VERSION: string = '1.0.0';
+
+		/**
+		* If Signal should keep record of previously dispatched parameters.
+		* @property memorize
+		* @type boolean
+		* @default false
+		* @public
+		*/
+		public memorize: boolean = false;
+
+		/**
+		* If the callbacks should propagate or not. 
+		* @property _shouldPropagate
+		* @type boolean
+		* @default true
+		* @private
+		*/
+		private _shouldPropagate: boolean = true;
+
+		/**
+		* If Signal is active and should broadcast events.
+		* Note: Setting this property during a dispatch will only affect the next dispatch, 
+		* if you want to stop the propagation of a signal use `halt()` instead.
+		* @property active
+		* @type boolean
+		* @default true
+		* @public
+		*/
+		public active: boolean = true;
+
+
+		/**
+		* Returns the type of this object
+		* @method objType
+		* @return {String} "Signal"
+		* @public
+		*/
+		public objType() {
+			return "Signal";
+		}
+
+		/**
 		* Validates a event listener an is used to check to see if it is valid or not.
-        * An event listener is not valid if it is not a function.
-        * If a event listener is not valid, then a Error is thrown. 
-        * 
-        * @method validateListener
-        * @param listener {Any} The event listener to be validated.
-        * @param fnName {Any} The name of the function. 
-        * @public
-    	*/
-        public validateListener(listener, fnName) {
-
-            if (typeof listener !== 'function')
-            {
-                throw new Error('listener is a required param of {fn}() and should be a Function.'.replace('{fn}', fnName));
-            }
-
-        }
-
-        /**
-        * Internal Code which handles the registeration of a new callback (known as a "listener").
-        * Creates a new SignalBinding for the Signal and then adds the binding to the list by its priority level.
-        * 
-        * @method _registerListener
-        * @param listener {Function} The method that is to be dispatched.
-        * @param isOnce {boolean} If the method should only be dispatched a single time or not.
-        * @param listenerContext {Object} The context that the callback should be executed with when called.
-        * @param priority {Number} The priority of this callback when Bindings are dispatched.
-        * @return {Kiwi.SignalBinding} The new SignalBinding that was created.
-        * @private
-        */
-        private _registerListener(listener, isOnce: boolean, listenerContext, priority: number): SignalBinding {
-
-            var prevIndex: number = this._indexOfListener(listener, listenerContext);
-            var binding: SignalBinding;
-
-            if (prevIndex !== -1)
-            {
-                binding = this._bindings[prevIndex];
-
-                if (binding.isOnce() !== isOnce)
-                {
-                    throw new Error('You cannot add' + (isOnce ? '' : 'Once') + '() then add' + (!isOnce ? '' : 'Once') + '() the same listener without removing the relationship first.');
-                }
-            }
-            else
-            {
-                binding = new SignalBinding(this, listener, isOnce, listenerContext, priority);
-
-                this._addBinding(binding);
-            }
-
-            if (this.memorize && this._prevParams)
-            {
-                binding.execute(this._prevParams);
-            }
-
-            return binding;
-
-        }
-
-        /**
-        * Handles the process of adding a new SignalBinding to the bindings list by the new Bindings priority.
-        *
-        * @method _addBinding
-        * @param binding {Kiwi.SignalBinding}
-        * @private
-        */
-        private _addBinding(binding: SignalBinding) {
-
-            //simplified insertion sort
-
-            var n: number = this._bindings.length;
-
-            do { --n; } while (this._bindings[n] && binding.priority <= this._bindings[n].priority);
-
-            this._bindings.splice(n + 1, 0, binding);
-
-        }
-
-        /**
-        * Returns the index of any Binding which matches the listener and context that is passed.
-        * If none match then this method returns -1.
-        * 
-        * @method _indexOfListener
-        * @param listener {Function} The method that we are checking to see.
-        * @param context {any} The context of the method we are checking.
-        * @return {number} The index of listener/context.
-        * @private
-        */
-        private _indexOfListener(listener, context): number {
-
-            var n: number = this._bindings.length;
-            var cur: SignalBinding;
-
-            while (n--)
-            {
-                cur = this._bindings[n];
-
-                if (cur.getListener() === listener && cur.context === context)
-                {
-                    return n;
-                }
-            }
-
-            return -1;
-
-        }
-
-        /**
-        * Accepts a function and returns a boolean indicating if the function 
-        * has already been attached to this Signal.
-        *
-        * @method has
-        * @param listener {Function} The method you are checking for.
-        * @param [context=null] {Any} The context of the listener.
-        * @return {boolean} If this Signal already has the specified listener.
-        * @public
-        */
-        public has(listener, context:any = null): boolean {
-
-            return this._indexOfListener(listener, context) !== -1;
-
-        }
-
-        /**
-        * Adds a new listener/callback to this Signal. 
-        * The listener attached will be executed whenever this Signal dispatches an event. 
-        * 
-        * @method add
-        * @param listener {Function} Signal handler function.
-        * @param [listenerContext=null] {Any} Context on which listener will be executed. (object that should represent the `this` variable inside listener function).
-        * @param [priority=0] {Number} The priority level of the event listener. Listeners with higher priority will be executed before listeners with lower priority. Listeners with same priority level will be executed at the same order as they were added. (default = 0)
-        * @return {Kiwi.SignalBinding} An Object representing the binding between the Signal and listener.
-        * @public
-        */
-        public add(listener, listenerContext:any = null, priority: number = 0): SignalBinding {
-
-            this.validateListener(listener, 'add');
-
-            return this._registerListener(listener, false, listenerContext, priority);
-
-        }
-
-        /**
-        * Add listener to the signal that should be removed after first execution (will be executed only once).
-        *
-        * @method addOnce
-        * @param listener {Function} Signal handler function.
-        * @param [listenerContext=null] {Any} Context on which listener will be executed (object that should represent the `this` variable inside listener function).
-        * @param [priority=0] {Number} The priority level of the event listener. Listeners with higher priority will be executed before listeners with lower priority. Listeners with same priority level will be executed at the same order as they were added. (default = 0)
-        * @return {Kiwi.SignalBinding} An Object representing the binding between the Signal and listener.
-        * @public
-        */
-        public addOnce(listener, listenerContext:any = null, priority: number = 0): SignalBinding {
-
-            this.validateListener(listener, 'addOnce');
-
-            return this._registerListener(listener, true, listenerContext, priority);
-
-        }
-
-        /**
-        * Remove a single listener from the dispatch queue.
-        *
-        * @method remove
-        * @param listener {Function} Handler function that should be removed.
-        * @param [context=null] {Any} Execution context (since you can add the same handler multiple times if executing in a different context).
-        * @return {Function} Listener handler function.
-        * @public
-        */
-        public remove(listener, context:any = null) {
-
-            this.validateListener(listener, 'remove');
-
-            var i: number = this._indexOfListener(listener, context);
-
-            if (i !== -1)
-            {
-                this._bindings[i]._destroy(); //no reason to a SignalBinding exist if it isn't attached to a signal
-                this._bindings.splice(i, 1);
-            }
-
-            return listener;
-
-        }
-
-        /**
-        * Remove all listeners from the Signal.
-        * @method removeAll
-        * @public
-        */
-        public removeAll() {
-
-            var n: number = this._bindings.length;
-
-            while (n--)
-            {
-                this._bindings[n]._destroy();
-            }
-
-            this._bindings.length = 0;
-
-        }
-
-        /**
-        * Returns the number of listeners that have been attached to this Signal.
-        * 
-        * @method getNumListeners
-        * @return {number} Number of listeners attached to the Signal.
-        * @public
-        */
-        public getNumListeners(): number {
-
-            return this._bindings.length;
-
-        }
-
-        /**
-        * Stop propagation of the event, blocking the dispatch to next listeners on the queue.
-        * Note: should be called only during signal dispatch, calling it before/after dispatch won't affect signal broadcast.
-        *
-        * @method halt
-        * @public
-        */
-        public halt() {
-
-            this._shouldPropagate = false;
-
-        }
-
-        /**
-        * Resume propagation of the event, resuming the dispatch to next listeners on the queue.
-        * Note: should be called only during signal dispatch, calling it before/after dispatch won't affect signal broadcast.
-        *
-        * @method resume
-        * @public
-        */
-        public resume() {
+		* An event listener is not valid if it is not a function.
+		* If a event listener is not valid, then a Error is thrown. 
+		* 
+		* @method validateListener
+		* @param listener {Any} The event listener to be validated.
+		* @param fnName {Any} The name of the function. 
+		* @public
+		*/
+		public validateListener(listener, fnName) {
+
+			if (typeof listener !== 'function')
+			{
+				throw new Error('listener is a required param of {fn}() and should be a Function.'.replace('{fn}', fnName));
+			}
+
+		}
+
+		/**
+		* Internal Code which handles the registeration of a new callback (known as a "listener").
+		* Creates a new SignalBinding for the Signal and then adds the binding to the list by its priority level.
+		* 
+		* @method _registerListener
+		* @param listener {Function} The method that is to be dispatched.
+		* @param isOnce {boolean} If the method should only be dispatched a single time or not.
+		* @param listenerContext {Object} The context that the callback should be executed with when called.
+		* @param priority {Number} The priority of this callback when Bindings are dispatched.
+		* @return {Kiwi.SignalBinding} The new SignalBinding that was created.
+		* @private
+		*/
+		private _registerListener(listener, isOnce: boolean, listenerContext, priority: number): SignalBinding {
+
+			var prevIndex: number = this._indexOfListener(listener, listenerContext);
+			var binding: SignalBinding;
+
+			if (prevIndex !== -1)
+			{
+				binding = this._bindings[prevIndex];
+
+				if (binding.isOnce() !== isOnce)
+				{
+					throw new Error('You cannot add' + (isOnce ? '' : 'Once') + '() then add' + (!isOnce ? '' : 'Once') + '() the same listener without removing the relationship first.');
+				}
+			}
+			else
+			{
+				binding = new SignalBinding(this, listener, isOnce, listenerContext, priority);
+
+				this._addBinding(binding);
+			}
+
+			if (this.memorize && this._prevParams)
+			{
+				binding.execute(this._prevParams);
+			}
+
+			return binding;
+
+		}
+
+		/**
+		* Handles the process of adding a new SignalBinding to the bindings list by the new Bindings priority.
+		*
+		* @method _addBinding
+		* @param binding {Kiwi.SignalBinding}
+		* @private
+		*/
+		private _addBinding(binding: SignalBinding) {
+
+			//simplified insertion sort
+
+			var n: number = this._bindings.length;
+
+			do { --n; } while (this._bindings[n] && binding.priority <= this._bindings[n].priority);
+
+			this._bindings.splice(n + 1, 0, binding);
+
+		}
+
+		/**
+		* Returns the index of any Binding which matches the listener and context that is passed.
+		* If none match then this method returns -1.
+		* 
+		* @method _indexOfListener
+		* @param listener {Function} The method that we are checking to see.
+		* @param context {any} The context of the method we are checking.
+		* @return {number} The index of listener/context.
+		* @private
+		*/
+		private _indexOfListener(listener, context): number {
+
+			var n: number = this._bindings.length;
+			var cur: SignalBinding;
+
+			while (n--)
+			{
+				cur = this._bindings[n];
+
+				if (cur.getListener() === listener && cur.context === context)
+				{
+					return n;
+				}
+			}
+
+			return -1;
+
+		}
+
+		/**
+		* Accepts a function and returns a boolean indicating if the function 
+		* has already been attached to this Signal.
+		*
+		* @method has
+		* @param listener {Function} The method you are checking for.
+		* @param [context=null] {Any} The context of the listener.
+		* @return {boolean} If this Signal already has the specified listener.
+		* @public
+		*/
+		public has(listener, context:any = null): boolean {
+
+			return this._indexOfListener(listener, context) !== -1;
+
+		}
+
+		/**
+		* Adds a new listener/callback to this Signal. 
+		* The listener attached will be executed whenever this Signal dispatches an event. 
+		* 
+		* @method add
+		* @param listener {Function} Signal handler function.
+		* @param [listenerContext=null] {Any} Context on which listener will be executed. (object that should represent the `this` variable inside listener function).
+		* @param [priority=0] {Number} The priority level of the event listener. Listeners with higher priority will be executed before listeners with lower priority. Listeners with same priority level will be executed at the same order as they were added. (default = 0)
+		* @return {Kiwi.SignalBinding} An Object representing the binding between the Signal and listener.
+		* @public
+		*/
+		public add(listener, listenerContext:any = null, priority: number = 0): SignalBinding {
+
+			this.validateListener(listener, 'add');
+
+			return this._registerListener(listener, false, listenerContext, priority);
+
+		}
+
+		/**
+		* Add listener to the signal that should be removed after first execution (will be executed only once).
+		*
+		* @method addOnce
+		* @param listener {Function} Signal handler function.
+		* @param [listenerContext=null] {Any} Context on which listener will be executed (object that should represent the `this` variable inside listener function).
+		* @param [priority=0] {Number} The priority level of the event listener. Listeners with higher priority will be executed before listeners with lower priority. Listeners with same priority level will be executed at the same order as they were added. (default = 0)
+		* @return {Kiwi.SignalBinding} An Object representing the binding between the Signal and listener.
+		* @public
+		*/
+		public addOnce(listener, listenerContext:any = null, priority: number = 0): SignalBinding {
+
+			this.validateListener(listener, 'addOnce');
+
+			return this._registerListener(listener, true, listenerContext, priority);
+
+		}
+
+		/**
+		* Remove a single listener from the dispatch queue.
+		*
+		* @method remove
+		* @param listener {Function} Handler function that should be removed.
+		* @param [context=null] {Any} Execution context (since you can add the same handler multiple times if executing in a different context).
+		* @return {Function} Listener handler function.
+		* @public
+		*/
+		public remove(listener, context:any = null) {
+
+			this.validateListener(listener, 'remove');
+
+			var i: number = this._indexOfListener(listener, context);
+
+			if (i !== -1)
+			{
+				this._bindings[i]._destroy(); //no reason to a SignalBinding exist if it isn't attached to a signal
+				this._bindings.splice(i, 1);
+			}
+
+			return listener;
+
+		}
+
+		/**
+		* Remove all listeners from the Signal.
+		* @method removeAll
+		* @public
+		*/
+		public removeAll() {
+
+			var n: number = this._bindings.length;
+
+			while (n--)
+			{
+				this._bindings[n]._destroy();
+			}
+
+			this._bindings.length = 0;
+
+		}
+
+		/**
+		* Returns the number of listeners that have been attached to this Signal.
+		* 
+		* @method getNumListeners
+		* @return {number} Number of listeners attached to the Signal.
+		* @public
+		*/
+		public getNumListeners(): number {
+
+			return this._bindings.length;
+
+		}
+
+		/**
+		* Stop propagation of the event, blocking the dispatch to next listeners on the queue.
+		* Note: should be called only during signal dispatch, calling it before/after dispatch won't affect signal broadcast.
+		*
+		* @method halt
+		* @public
+		*/
+		public halt() {
+
+			this._shouldPropagate = false;
+
+		}
+
+		/**
+		* Resume propagation of the event, resuming the dispatch to next listeners on the queue.
+		* Note: should be called only during signal dispatch, calling it before/after dispatch won't affect signal broadcast.
+		*
+		* @method resume
+		* @public
+		*/
+		public resume() {
 
-            this._shouldPropagate = true;
+			this._shouldPropagate = true;
 
-        }
-
-        /**
-        * Dispatch/Broadcast to all listeners added to this Signal.
-        * Parameters passed to this method will also be passed to each handler.
-        * 
-        * @method dispatch
-        * @param [params]* {any} Parameters that should be passed to each handler.
-        * @public
-        */
-        public dispatch(...paramsArr: any[]) {
+		}
+
+		/**
+		* Dispatch/Broadcast to all listeners added to this Signal.
+		* Parameters passed to this method will also be passed to each handler.
+		* 
+		* @method dispatch
+		* @param [params]* {any} Parameters that should be passed to each handler.
+		* @public
+		*/
+		public dispatch(...paramsArr: any[]) {
 
-            if (!this.active)
-            {
-                return;
-            }
+			if (!this.active)
+			{
+				return;
+			}
 
-            var n: number = this._bindings.length;
-            var bindings: SignalBinding[];
+			var n: number = this._bindings.length;
+			var bindings: SignalBinding[];
 
-            if (this.memorize)
-            {
-                this._prevParams = paramsArr;
-            }
+			if (this.memorize)
+			{
+				this._prevParams = paramsArr;
+			}
 
-            if (!n)
-            {
-                //should come after memorize
-                return;
-            }
+			if (!n)
+			{
+				//should come after memorize
+				return;
+			}
 
-            bindings = this._bindings.slice(0); //clone array in case add/remove items during dispatch
+			bindings = this._bindings.slice(0); //clone array in case add/remove items during dispatch
 
-            this._shouldPropagate = true; //in case `halt` was called before dispatch or during the previous dispatch.
+			this._shouldPropagate = true; //in case `halt` was called before dispatch or during the previous dispatch.
 
-            //execute all callbacks until end of the list or until a callback returns `false` or stops propagation
-            //reverse loop since listeners with higher priority will be added at the end of the list
-            do {
-                n--;
-            } while (bindings[n] && this._shouldPropagate && bindings[n].execute(paramsArr) !== false);
+			//execute all callbacks until end of the list or until a callback returns `false` or stops propagation
+			//reverse loop since listeners with higher priority will be added at the end of the list
+			do {
+				n--;
+			} while (bindings[n] && this._shouldPropagate && bindings[n].execute(paramsArr) !== false);
 
-        }
+		}
 
-        /**
-        * Forget memorized arguments. See the 'memorize' property.
-        * @method forget
-        * @public
-        */
-        public forget() {
+		/**
+		* Forget memorized arguments. See the 'memorize' property.
+		* @method forget
+		* @public
+		*/
+		public forget() {
 
-            this._prevParams = null;
+			this._prevParams = null;
 
-        }
+		}
 
-        /**
-        * Remove all bindings from signal and destroy any reference to external objects (destroy Signal object).
-        * Note: calling any method on the signal instance after calling dispose will throw errors.
-        * @method dispose
-        * @public
-        */
-        public dispose() {
-
-            this.removeAll();
-
-            delete this._bindings;
-            delete this._prevParams;
-
-        }
+		/**
+		* Remove all bindings from signal and destroy any reference to external objects (destroy Signal object).
+		* Note: calling any method on the signal instance after calling dispose will throw errors.
+		* @method dispose
+		* @public
+		*/
+		public dispose() {
+
+			this.removeAll();
+
+			delete this._bindings;
+			delete this._prevParams;
+
+		}
 
-    }
+	}
 
 }
diff --git a/src/core/SignalBinding.ts b/src/core/SignalBinding.ts
index 705c61f..11f7b69 100644
--- a/src/core/SignalBinding.ts
+++ b/src/core/SignalBinding.ts
@@ -3,217 +3,217 @@
 * @module Kiwi
 * 
 */
-  
+
 module Kiwi {
 
-    /**
-    * An object that represents a binding between a Signal and a listener function.
-    * <br />- <strong>This is an internal constructor and shouldn't be called by regular users.</strong>
-    * <br />- inspired by Joa Ebert AS3 SignalBinding and Robert Penner's Slot classes.
-    * 
-    * Released under the MIT license
-    * http://millermedeiros.github.com/js-signals/
-    * 
-    * @class SignalBinding
-    * @namespace Kiwi
-    * 
-    * @author Miller Medeiros, JS Signals
-    * @constructor
-    * @internal
-    * @name SignalBinding
-    * @param signal {Kiwi.Signal} Reference to Signal object that listener is currently bound to.
-    * @param listener {Function} Handler function bound to the signal.
-    * @param isOnce {boolean} If binding should be executed just once.
-    * @param [listenerContext] {Object} Context on which listener will be executed (object that should represent the `this` variable inside listener function).
-    * @param [priority=0] {Number} The priority level of the event listener. (default = 0).
-    * @return {Kiwi.SignalBinding} 
-    */
-    export class SignalBinding {
-
-        constructor(signal: Signal, listener, isOnce: boolean, listenerContext, priority: number = 0) {
-
-            this._listener = listener;
-            this._isOnce = isOnce;
-            this.context = listenerContext;
-            this._signal = signal;
-            this.priority = priority || 0;
-
-        }
-
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} "SignalBinding"
-        * @public
-        */
-        public objType() {
-            return "SignalBinding";
-        }
-
-        /**
-        * Handler function bound to the signal.
-        * @property _listener
-        * @type Function
-        * @private
-        */
-        private _listener;
-
-        /**
-        * If binding should be executed just once.
-        * @property _isOnce
-        * @type boolean
-        * @private
-        */
-        private _isOnce: boolean;
-
-        /**
-        * Context on which listener will be executed (object that should represent the `this` variable inside listener function).
-        * @property context
-        * @type any
-        * @public
-        */
-        public context;
-
-        /**
-        * Reference to Signal object that listener is currently bound to.
-        * @property _signal
-        * @type Kiwi.Signal
-        * @private
-        */
-        private _signal: Signal;
-
-        /**
-        * Listener priority
-        * @property priority
-        * @type Number
-        * @public
-        */
-        public priority: number;
-
-        /**
-        * If binding is active and should be executed.
-        * @property active
-        * @type boolean
-        * @default true
-        * @public
-        */
-        public active: boolean = true;
-
-        /**
-        * Default parameters passed to listener during `Signal.dispatch` and `SignalBinding.execute`. (curried parameters)
-        * @property params
-        * @type Any
-        * @default null
-        * @public
-        */
-        public params = null;
-
-        /**
-        * Call listener passing arbitrary parameters.
-        * If this binding was added using `Signal.addOnce()` it will be automatically removed from signal dispatch queue,
-        * this method is used internally for the signal dispatch.
-        *
-        * @method execute
-        * @param [paramsArr]* {Array} Array of parameters that should be passed to the listener
-        * @return {*} Value returned by the listener.
-        * @public
-        */
-        public execute(paramsArr?: any[]) {
-
-            var handlerReturn;
-            var params;
-
-            if (this.active && !!this._listener)
-            {
-                params = this.params ? this.params.concat(paramsArr) : paramsArr;
-
-                handlerReturn = this._listener.apply(this.context, params);
-
-                if (this._isOnce)
-                {
-                    this.detach();
-                }
-            }
-
-            return handlerReturn;
-
-        }
-
-        /**
-        * Detach this binding from the Signal it is attached to. 
-        * Alias for 'Signal.remove()'
-        * 
-        * @method detach
-        * @return {Function|null} Handler function bound to the signal or `null` if binding was previously detached.
-        * @public
-        */
-        public detach() {
-
-            return this.isBound() ? this._signal.remove(this._listener, this.context) : null;
-
-        }
-
-        /**
-        * Checks to see if this Binding is still bound to a Signal and contains a listener.
-        * @method isBound
-        * @return {boolean} `true` if binding is still bound to the signal and have a listener.
-        * @public
-        */
-        public isBound(): boolean {
-
-            return (!!this._signal && !!this._listener);
-
-        }
-
-        /**
-        * Returns a boolean indicating whether this event will be exectued just once or not.
-        * @method isOnce
-        * @return {boolean} If SignalBinding will only be executed once.
-        * @public
-        */
-        public isOnce(): boolean {
-
-            return this._isOnce;
-
-        }
-
-        /**
-        * Returns the Handler function bound to the Signal.
-        * @method getListener
-        * @return {Function} Handler function bound to the signal.
-        * @public
-        */
-        public getListener() {
-
-            return this._listener;
-
-        }
-
-        /**
-        * Returns the signal which this Binding is currently attached to.
-        * @method getSignal
-        * @return {Kiwi.Signal} Signal that listener is currently bound to.
-        * @public
-        */
-        public getSignal() {
-
-            return this._signal;
-
-        }
-
-        /**
-        * Delete instance properties
-        * @method _destory
-        * @public
-        */
-        public _destroy() {
-
-            delete this._signal;
-            delete this._listener;
-            delete this.context;
-
-        }
+	/**
+	* An object that represents a binding between a Signal and a listener function.
+	* <br />- <strong>This is an internal constructor and shouldn't be called by regular users.</strong>
+	* <br />- inspired by Joa Ebert AS3 SignalBinding and Robert Penner's Slot classes.
+	* 
+	* Released under the MIT license
+	* http://millermedeiros.github.com/js-signals/
+	* 
+	* @class SignalBinding
+	* @namespace Kiwi
+	* 
+	* @author Miller Medeiros, JS Signals
+	* @constructor
+	* @internal
+	* @name SignalBinding
+	* @param signal {Kiwi.Signal} Reference to Signal object that listener is currently bound to.
+	* @param listener {Function} Handler function bound to the signal.
+	* @param isOnce {boolean} If binding should be executed just once.
+	* @param [listenerContext] {Object} Context on which listener will be executed (object that should represent the `this` variable inside listener function).
+	* @param [priority=0] {Number} The priority level of the event listener. (default = 0).
+	* @return {Kiwi.SignalBinding} 
+	*/
+	export class SignalBinding {
+
+		constructor(signal: Signal, listener, isOnce: boolean, listenerContext, priority: number = 0) {
+
+			this._listener = listener;
+			this._isOnce = isOnce;
+			this.context = listenerContext;
+			this._signal = signal;
+			this.priority = priority || 0;
+
+		}
+
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} "SignalBinding"
+		* @public
+		*/
+		public objType() {
+			return "SignalBinding";
+		}
+
+		/**
+		* Handler function bound to the signal.
+		* @property _listener
+		* @type Function
+		* @private
+		*/
+		private _listener;
+
+		/**
+		* If binding should be executed just once.
+		* @property _isOnce
+		* @type boolean
+		* @private
+		*/
+		private _isOnce: boolean;
+
+		/**
+		* Context on which listener will be executed (object that should represent the `this` variable inside listener function).
+		* @property context
+		* @type any
+		* @public
+		*/
+		public context;
+
+		/**
+		* Reference to Signal object that listener is currently bound to.
+		* @property _signal
+		* @type Kiwi.Signal
+		* @private
+		*/
+		private _signal: Signal;
+
+		/**
+		* Listener priority
+		* @property priority
+		* @type Number
+		* @public
+		*/
+		public priority: number;
+
+		/**
+		* If binding is active and should be executed.
+		* @property active
+		* @type boolean
+		* @default true
+		* @public
+		*/
+		public active: boolean = true;
+
+		/**
+		* Default parameters passed to listener during `Signal.dispatch` and `SignalBinding.execute`. (curried parameters)
+		* @property params
+		* @type Any
+		* @default null
+		* @public
+		*/
+		public params = null;
+
+		/**
+		* Call listener passing arbitrary parameters.
+		* If this binding was added using `Signal.addOnce()` it will be automatically removed from signal dispatch queue,
+		* this method is used internally for the signal dispatch.
+		*
+		* @method execute
+		* @param [paramsArr]* {Array} Array of parameters that should be passed to the listener
+		* @return {*} Value returned by the listener.
+		* @public
+		*/
+		public execute(paramsArr?: any[]) {
+
+			var handlerReturn;
+			var params;
+
+			if (this.active && !!this._listener)
+			{
+				params = this.params ? this.params.concat(paramsArr) : paramsArr;
+
+				handlerReturn = this._listener.apply(this.context, params);
+
+				if (this._isOnce)
+				{
+					this.detach();
+				}
+			}
+
+			return handlerReturn;
+
+		}
+
+		/**
+		* Detach this binding from the Signal it is attached to. 
+		* Alias for 'Signal.remove()'
+		* 
+		* @method detach
+		* @return {Function|null} Handler function bound to the signal or `null` if binding was previously detached.
+		* @public
+		*/
+		public detach() {
+
+			return this.isBound() ? this._signal.remove(this._listener, this.context) : null;
+
+		}
+
+		/**
+		* Checks to see if this Binding is still bound to a Signal and contains a listener.
+		* @method isBound
+		* @return {boolean} `true` if binding is still bound to the signal and have a listener.
+		* @public
+		*/
+		public isBound(): boolean {
+
+			return (!!this._signal && !!this._listener);
+
+		}
+
+		/**
+		* Returns a boolean indicating whether this event will be exectued just once or not.
+		* @method isOnce
+		* @return {boolean} If SignalBinding will only be executed once.
+		* @public
+		*/
+		public isOnce(): boolean {
+
+			return this._isOnce;
+
+		}
+
+		/**
+		* Returns the Handler function bound to the Signal.
+		* @method getListener
+		* @return {Function} Handler function bound to the signal.
+		* @public
+		*/
+		public getListener() {
+
+			return this._listener;
+
+		}
+
+		/**
+		* Returns the signal which this Binding is currently attached to.
+		* @method getSignal
+		* @return {Kiwi.Signal} Signal that listener is currently bound to.
+		* @public
+		*/
+		public getSignal() {
+
+			return this._signal;
+
+		}
+
+		/**
+		* Delete instance properties
+		* @method _destory
+		* @public
+		*/
+		public _destroy() {
+
+			delete this._signal;
+			delete this._listener;
+			delete this.context;
+
+		}
 
-    }
+	}
 
 }
diff --git a/src/core/Stage.ts b/src/core/Stage.ts
index 1833ebf..b3d8283 100644
--- a/src/core/Stage.ts
+++ b/src/core/Stage.ts
@@ -2,860 +2,856 @@
 * 
 * @module Kiwi
 * 
-*/ 
+*/
 
 module Kiwi {
 
-    /**
-    * Each game contains a single Stage which controls the creation and management of main domElements required for a Kiwi game to work. 
-    * Such as the Canvas and the rendering contexts, as well as the width/height of the game and the position it should be on the screen.
-    *
-    * @class Stage
-    * @namespace Kiwi
-    * @constructor
-    * @param game {Kiwi.Game} The game that this Stage belongs to. 
-    * @param name {String} The name of the kiwi game.
-    * @param width {Number} The initial width of the game. 
-    * @param height {Number} The initial heihgt of the game.
-    * @param scaleType {Number} The scale method that should be used for the game.
-    * @return {Kiwi.Stage}  
-    *
-    */
-    export class Stage {
-         
-        constructor(game: Kiwi.Game, name: string, width: number, height: number, scaleType:number) {
-
-            this._game = game;
-
-            this.name = name;
-
-            this.domReady = false;
-             
-            //  Properties
-            this._alpha = 1;
-            
-            this._x = 0;
-            this._y = 0;
-
-            this._width = width;
-            this._height = height;
-            this.color = "ffffff";
-            // CocoonJS should be black instead
-            if(game.deviceTargetOption === Kiwi.TARGET_COCOON) {
-                this.color = "000000";
-            }
-
-            this._scale = new Kiwi.Geom.Point(1, 1);
-            this._scaleType = scaleType;
-
-            this.onResize = new Kiwi.Signal();
-            this.onWindowResize = new Kiwi.Signal();
-
-            this._renderer = null;
-        }
-
-        /**
-        * Returns the type of this object.
-        * @method objType
-        * @return {string} "Stage"
-        * @public
-        */
-        public objType():string {
-            return "Stage";
-        }
-
-        /**
-        * The default width of the stage.
-        * @property DEFAULT_WIDTH
-        * @type number
-        * @default 800
-        * @public
-        * @static
-        */
-        public static DEFAULT_WIDTH: number = 800;
-
-        /**
-        * The default height of the stage.
-        * @property DEFAULT_HEIGHT
-        * @type number
-        * @default 600
-        * @public
-        * @static
-        */
-        public static DEFAULT_HEIGHT: number = 600;
-
-
-        /**
-        * The default scaling method used on Kiwi Games. 
-        * This scaling method will set the containers width/height to static values.
-        * @property SCALE_NONE
-        * @type number
-        * @default 0 
-        * @public 
-        * @static
-        */
-        public static SCALE_NONE: number = 0;
-        
-        /**
-        * Scale Fit will scale the stages width to fit its parents width.
-        * The height is then calculated to maintain the aspect ratio of the width/height of the Stage.
-        * @property SCALE_FIT
-        * @type number
-        * @default 1 
-        * @public 
-        * @static
-        */
-        public static SCALE_FIT: number = 1;
-        
-        /**
-        * Stretch will make the stage scale to fit its parents width/height (by using max/min height of 100%).
-        * If the parent doesn't have a height set then the height will be the height of the stage. 
-        * @property SCALE_STRETCH
-        * @type number
-        * @default 2 
-        * @public 
-        * @static
-        */
-        public static SCALE_STRETCH: number = 2;
-        
-        /**
-        * Private property that holds the scaling method that should be applied to the container element. 
-        * @property _scaleType
-        * @type number
-        * @default Kiwi.Stage.SCALE_NONE
-        * @private
-        */
-        private _scaleType: number = Kiwi.Stage.SCALE_NONE;
-        
-        /**
-        * Holds type of scaling that should be applied the container element. 
-        * @property scaleType
-        * @type number
-        * @default Kiwi.Stage.SCALE_NONE
-        * @public
-        */
-        public set scaleType(val: number) {
-            this._scaleType = val;
-            this._scaleContainer();
-        }
-
-        public get scaleType():number {
-            return this._scaleType;
-        }
-
-
-        /**
-        * The alpha of the stage. 
-        * @property _alpha
-        * @type number
-        * @default 1
-        * @private
-        */
-        private _alpha: number;
-
-        /**
-        * Sets the alpha of the container element. 0 = invisible, 1 = fully visible.
-        * Note: Because the alpha value is applied to the container, it will not work in CocoonJS.
-        *
-        * @property alpha
-        * @type number
-        * @default 1
-        * @public
-        */
-        public get alpha():number {
-            return this._alpha;
-        }
-        public set alpha(value: number) {
-            if (this._game.deviceTargetOption === Kiwi.TARGET_BROWSER) {
-                this.container.style.opacity = String(Kiwi.Utils.GameMath.clamp(value, 1, 0));
-            }
-            // Doesnt work in cocoon
-
-            this._alpha = value;
-        }
-
-        /**
-        * The X coordinate of the stage.
-        * @property _x
-        * @type number
-        * @private 
-        */
-        private _x: number;
-
-        /**
-        * The X coordinate of the stage. This number should be the same as the stages left property.
-        * @property x
-        * @type number
-        * @public
-        */
-        public get x(): number {
-            return this._x;
-        } 
-        public set x(value: number) {
-            if (this._game.deviceTargetOption === Kiwi.TARGET_BROWSER) {
-                this.container.style.left = String(value + "px");
-            } else if (this._game.deviceTargetOption === Kiwi.TARGET_COCOON) {
-                this.canvas.style.left = String(value + "px");
-            }
-            this._x = value;
-        }
-
-        /**
-        * The Y coordinate of the stage.
-        * @property _y
-        * @type number
-        * @private
-        */
-        private _y: number;
-
-        /**
-        * Get the Y coordinate of the stage. This number should be the same as the stages top property.
-        * @property y
-        * @type number
-        * @public
-        */
-        public get y(): number {
-            return this._y;
-        }
-        public set y(value: number) {
-            if (this._game.deviceTargetOption === Kiwi.TARGET_BROWSER) {
-                this.container.style.top = String(value + "px");
-            } else if (this._game.deviceTargetOption === Kiwi.TARGET_COCOON) {
-                this.canvas.style.top = String(value + "px");
-            }
-            this._y = value;
-        }
-
-        /**
-        * The width of the stage.
-        * @property _width
-        * @type number
-        * @private
-        */
-        private _width: number;
-        
-        /**
-        * The width of the stage. This is READ ONLY. See the "resize" method if you need to modify this value.
-        * @property width
-        * @type number
-        * @public 
-        * @readonly
-        */
-        public get width(): number {
-            return this._width;
-        }
-      
-        /**
-        * The height of the stage
-        * @property _height
-        * @type number
-        * @private
-        */
-        private _height: number;
-        
-        /**
-        * The height of the stage. This is READ ONLY. See the "resize" method if you need to modify this value.
-        * @property height
-        * @type number
-        * @public
-        * @readonly
-        */
-        public get height(): number {
-            return this._height;
-        }
-       
-        /**
-        * A Signal that dispatches an event when the stage gets resized.
-        * @property onResize
-        * @type Kiwi.Signal
-        * @public
-        */
-        public onResize: Kiwi.Signal;
-
-
-        /**
-        * A Signal which dispatches events when the window is resized. 
-        * Useful to detect if the screen is now in a "landscape" or "portrait" view on Mobile/Cocoon devices. 
-        * @property onWindowResize
-        * @type Kiwi.Signal
-        * @public
-        */
-        public onWindowResize: Kiwi.Signal;
-
-        /**
-        * Calculates and returns the amount that the container has been scale by.  
-        * Mainly used for re-calculating input coordinates. 
-        * Note: For COCOONJS this returns 1 since COCOONJS translates the scale itself.
-        * This property is READ ONLY.
-        * @property scale
-        * @type Kiwi.Geom.Point
-        * @default 1
-        * @public
-        */
-        private _scale: Kiwi.Geom.Point;
-
-        public get scale(): Kiwi.Geom.Point {
-            return this._scale;
-        }
-
-        /**
-        * Calculates and returns the amount that the container has been scale by on the X axis.  
-        * @property scaleX
-        * @type Number
-        * @default 1 
-        * @public
-        */
-        public get scaleX(): number {
-            return this._scale.x;
-        }
-
-        /**
-        * Calculates and returns the amount that the container has been scale by on the Y axis.
-        * @property scaleY
-        * @type Number
-        * @default 1
-        * @public
-        */
-        public get scaleY(): number {
-            return this._scale.y;
-        }
-
-        /**
+	/**
+	* Each game contains a single Stage which controls the creation and management of main domElements required for a Kiwi game to work. 
+	* Such as the Canvas and the rendering contexts, as well as the width/height of the game and the position it should be on the screen.
+	*
+	* @class Stage
+	* @namespace Kiwi
+	* @constructor
+	* @param game {Kiwi.Game} The game that this Stage belongs to. 
+	* @param name {String} The name of the kiwi game.
+	* @param width {Number} The initial width of the game. 
+	* @param height {Number} The initial heihgt of the game.
+	* @param scaleType {Number} The scale method that should be used for the game.
+	* @return {Kiwi.Stage}  
+	*
+	*/
+	export class Stage {
+
+		constructor(game: Kiwi.Game, name: string, width: number, height: number, scaleType:number) {
+
+			this._game = game;
+
+			this.name = name;
+
+			this.domReady = false;
+
+			//  Properties
+			this._alpha = 1;
+
+			this._x = 0;
+			this._y = 0;
+
+			this._width = width;
+			this._height = height;
+			this.color = "ffffff";
+			// CocoonJS should be black instead
+			if(game.deviceTargetOption === Kiwi.TARGET_COCOON) {
+				this.color = "000000";
+			}
+
+			this._scale = new Kiwi.Geom.Point(1, 1);
+			this._scaleType = scaleType;
+
+			this.onResize = new Kiwi.Signal();
+			this.onWindowResize = new Kiwi.Signal();
+
+			this._renderer = null;
+		}
+
+		/**
+		* Returns the type of this object.
+		* @method objType
+		* @return {string} "Stage"
+		* @public
+		*/
+		public objType():string {
+			return "Stage";
+		}
+
+		/**
+		* The default width of the stage.
+		* @property DEFAULT_WIDTH
+		* @type number
+		* @default 800
+		* @public
+		* @static
+		*/
+		public static DEFAULT_WIDTH: number = 800;
+
+		/**
+		* The default height of the stage.
+		* @property DEFAULT_HEIGHT
+		* @type number
+		* @default 600
+		* @public
+		* @static
+		*/
+		public static DEFAULT_HEIGHT: number = 600;
+
+
+		/**
+		* The default scaling method used on Kiwi Games. 
+		* This scaling method will set the containers width/height to static values.
+		* @property SCALE_NONE
+		* @type number
+		* @default 0 
+		* @public 
+		* @static
+		*/
+		public static SCALE_NONE: number = 0;
+
+		/**
+		* Scale Fit will scale the stages width to fit its parents width.
+		* The height is then calculated to maintain the aspect ratio of the width/height of the Stage.
+		* @property SCALE_FIT
+		* @type number
+		* @default 1 
+		* @public 
+		* @static
+		*/
+		public static SCALE_FIT: number = 1;
+
+		/**
+		* Stretch will make the stage scale to fit its parents width/height (by using max/min height of 100%).
+		* If the parent doesn't have a height set then the height will be the height of the stage. 
+		* @property SCALE_STRETCH
+		* @type number
+		* @default 2 
+		* @public 
+		* @static
+		*/
+		public static SCALE_STRETCH: number = 2;
+
+		/**
+		* Private property that holds the scaling method that should be applied to the container element. 
+		* @property _scaleType
+		* @type number
+		* @default Kiwi.Stage.SCALE_NONE
+		* @private
+		*/
+		private _scaleType: number = Kiwi.Stage.SCALE_NONE;
+
+		/**
+		* Holds type of scaling that should be applied the container element. 
+		* @property scaleType
+		* @type number
+		* @default Kiwi.Stage.SCALE_NONE
+		* @public
+		*/
+		public set scaleType(val: number) {
+			this._scaleType = val;
+			this._scaleContainer();
+		}
+
+		public get scaleType():number {
+			return this._scaleType;
+		}
+
+
+		/**
+		* The alpha of the stage. 
+		* @property _alpha
+		* @type number
+		* @default 1
+		* @private
+		*/
+		private _alpha: number;
+
+		/**
+		* Sets the alpha of the container element. 0 = invisible, 1 = fully visible.
+		* Note: Because the alpha value is applied to the container, it will not work in CocoonJS.
+		*
+		* @property alpha
+		* @type number
+		* @default 1
+		* @public
+		*/
+		public get alpha():number {
+			return this._alpha;
+		}
+		public set alpha(value: number) {
+			if (this._game.deviceTargetOption === Kiwi.TARGET_BROWSER) {
+				this.container.style.opacity = String(Kiwi.Utils.GameMath.clamp(value, 1, 0));
+			}
+			// Doesnt work in cocoon
+
+			this._alpha = value;
+		}
+
+		/**
+		* The X coordinate of the stage.
+		* @property _x
+		* @type number
+		* @private 
+		*/
+		private _x: number;
+
+		/**
+		* The X coordinate of the stage. This number should be the same as the stages left property.
+		* @property x
+		* @type number
+		* @public
+		*/
+		public get x(): number {
+			return this._x;
+		} 
+		public set x(value: number) {
+			if (this._game.deviceTargetOption === Kiwi.TARGET_BROWSER) {
+				this.container.style.left = String(value + "px");
+			} else if (this._game.deviceTargetOption === Kiwi.TARGET_COCOON) {
+				this.canvas.style.left = String(value + "px");
+			}
+			this._x = value;
+		}
+
+		/**
+		* The Y coordinate of the stage.
+		* @property _y
+		* @type number
+		* @private
+		*/
+		private _y: number;
+
+		/**
+		* Get the Y coordinate of the stage. This number should be the same as the stages top property.
+		* @property y
+		* @type number
+		* @public
+		*/
+		public get y(): number {
+			return this._y;
+		}
+		public set y(value: number) {
+			if (this._game.deviceTargetOption === Kiwi.TARGET_BROWSER) {
+				this.container.style.top = String(value + "px");
+			} else if (this._game.deviceTargetOption === Kiwi.TARGET_COCOON) {
+				this.canvas.style.top = String(value + "px");
+			}
+			this._y = value;
+		}
+
+		/**
+		* The width of the stage.
+		* @property _width
+		* @type number
+		* @private
+		*/
+		private _width: number;
+
+		/**
+		* The width of the stage. This is READ ONLY. See the "resize" method if you need to modify this value.
+		* @property width
+		* @type number
+		* @public 
+		* @readonly
+		*/
+		public get width(): number {
+			return this._width;
+		}
+
+		/**
+		* The height of the stage
+		* @property _height
+		* @type number
+		* @private
+		*/
+		private _height: number;
+
+		/**
+		* The height of the stage. This is READ ONLY. See the "resize" method if you need to modify this value.
+		* @property height
+		* @type number
+		* @public
+		* @readonly
+		*/
+		public get height(): number {
+			return this._height;
+		}
+
+		/**
+		* A Signal that dispatches an event when the stage gets resized.
+		* @property onResize
+		* @type Kiwi.Signal
+		* @public
+		*/
+		public onResize: Kiwi.Signal;
+
+
+		/**
+		* A Signal which dispatches events when the window is resized. 
+		* Useful to detect if the screen is now in a "landscape" or "portrait" view on Mobile/Cocoon devices. 
+		* @property onWindowResize
+		* @type Kiwi.Signal
+		* @public
+		*/
+		public onWindowResize: Kiwi.Signal;
+
+		/**
+		* Calculates and returns the amount that the container has been scale by.  
+		* Mainly used for re-calculating input coordinates. 
+		* Note: For COCOONJS this returns 1 since COCOONJS translates the scale itself.
+		* This property is READ ONLY.
+		* @property scale
+		* @type Kiwi.Geom.Point
+		* @default 1
+		* @public
+		*/
+		private _scale: Kiwi.Geom.Point;
+
+		public get scale(): Kiwi.Geom.Point {
+			return this._scale;
+		}
+
+		/**
+		* Calculates and returns the amount that the container has been scale by on the X axis.  
+		* @property scaleX
+		* @type Number
+		* @default 1 
+		* @public
+		*/
+		public get scaleX(): number {
+			return this._scale.x;
+		}
+
+		/**
+		* Calculates and returns the amount that the container has been scale by on the Y axis.
+		* @property scaleY
+		* @type Number
+		* @default 1
+		* @public
+		*/
+		public get scaleY(): number {
+			return this._scale.y;
+		}
+
+		/**
 		* A point which determines the offset of this Stage
-        * @property offset
-        * @type Kiwi.Geom.Point
-        * @public
-    	*/
-        public offset: Kiwi.Geom.Point = new Kiwi.Geom.Point();
-        
-        /**
-        * The game this Stage belongs to
-        * @property _game
-        * @type Kiwi.Game
-        * @private 
-        */
-        private _game: Kiwi.Game;
-
-        /**
-        * The title of your stage
-        * @property name
-        * @type string
-        * @public
-        */
-        public name: string;
-
-        /**
-        * Whether or not this Stage is DOM ready.
-        * @property domReady
-        * @type boolean
-        * @public
-        */
-        public domReady: boolean;
-
-        /**
-        * The background color of the stage. 
-        *
-        * @property _color
-        * @type Kiwi.Utils.Color
-        * @public
-        */
-        public _color: Kiwi.Utils.Color = new Kiwi.Utils.Color();
-        
-        /**
-        * Sets the background color of the stage.
-        *
-        * This can be any valid parameter for Kiwi.Utils.Color.
-        * If passing multiple parameters, do so in a single array.
-        *
-        * The default value is "ffffff" or pure white.
-        *
-        * Note for users of CocoonJS: When using the WebGL renderer,
-        * the stage color will fill all parts of the screen outside the canvas.
-        * Kiwi.js will automatically set the color to "000000" or pure black
-        * when using CocoonJS. If you change it, and your game does not fill
-        * the entire screen, the empty portions of the screen will also change
-        * color.
-        *
-        * @property color
-        * @type string
-        * @public
-        */
-        public get color(): any {
-            return this._color.getHex();
-        }
-
-        public set color( val: any ) {
-            if ( !Kiwi.Utils.Common.isArray( val ) ) {
-                val = [ val ];
-            }
-            this._color.set.apply( this._color, val );
-        }
-
-        /**
-        * Allows the setting of the background color of the stage through component RGB colour values.
-        *
-        * This property is an Object Literal with "r", "g", "b" colour streams of values between 0 and 255.
-        *
-        * @property rgbColor
-        * @type Object
-        * @public
-        */
-        public get rgbColor():any {
-            return { r: this._color.r * 255, g: this._color.g * 255, b: this._color.b * 255 };
-        }
-
-        public set rgbColor(val: any) {
-            this._color.set( val.r, val.g, val.b );
-        }
-
-        /**
-        * Allows the setting of the background color of the stage through component RGBA colour values.
-        *
-        * This property is an Object Literal with "r", "g", "b", "a" colour streams of values between 0 and 255.
-        * 
-        * Note that the alpha value is from 0-255, not 0-1. This is to preserve compatibility with hex-style color values, e.g. "ff0000ff".
-        *
-        * @property rgbaColor
-        * @type Object
-        * @public
-        * @since 1.1.0
-        */
-        public get rgbaColor():any {
-            return { r: this._color.r * 255, g: this._color.g * 255, b: this._color.b * 255, a: this._color.a * 255 };
-        }
-
-        public set rgbaColor(val: any) {
-            this._color.set( val.r, val.g, val.b, val.a );
-        }
-
-        /**
-        * Get the normalized background color of the stage.
-        * Returns an object with rgba values, each being between 0 and 1.
-        * This is READ ONLY.
-        * @property normalizedColor
-        * @type string
-        * @public
-        */
-        public get normalizedColor(): any {
-            return {
-                r: this._color.r,
-                g: this._color.g,
-                b: this._color.b,
-                a: this._color.a };
-            }
-
-        /**
-        * The webgl rendering context.
-        * @property gl
-        * @type WebGLRenderingContext
-        * @public
-        */
-        public gl: WebGLRenderingContext;
-
-
-        /**
-        * The canvas rendering context.
-        * @property ctx
-        * @type CanvasRenderingContext2D
-        * @public
-        */
-        public ctx: CanvasRenderingContext2D;
-
-
-        /**
-        * The canvas element that is being rendered on.
-        * @property canvas
-        * @type HTMLCanvasElement
-        * @public
-        */
-        public canvas: HTMLCanvasElement;
-        
-
-        /**
-        * The debugging canvas.
-        * @property debugCanvas
-        * @type HTMLCanvasElement
-        * @public
-        */
-        public debugCanvas: HTMLCanvasElement;
-
-
-        /**
-        * The debug canvas rendering context.
-        * @property dctx
-        * @type CanvasRenderingContext2D
-        * @public
-        */
-        public dctx: CanvasRenderingContext2D;
-
-
-        /**
-        * The parent div in which the layers and input live
-        * @property container
-        * @type HTMLDivElement
-        * @public
-        */
-        public container:HTMLDivElement = null;
-
-
-        /**
-        * Stores the renderer created after context detection.
-        * @property _renderer
-        * @type any
-        * @private
-        * @since 1.1.0
-        */
-        private _renderer: any;
-
-        /**
-        * Get the renderer associated with the canvas context. This is either a GLRenderManager or a CanvasRenderer. If the Kiwi.RENDERER_WEBGL renderer was requested but could not be created, it will fall back to CanvasRenderer.
-        * This is READ ONLY.
-        * @property renderer
-        * @type number
-        * @public
-        * @since 1.1.0
-        */
-        public get renderer(): any {
-            return this._renderer;
-        }
-         
-
-        /**
-        * Is executed when the DOM has loaded and the game is just starting. 
-        * This is a internal method used by the core of Kiwi itself. 
-        * @method boot
-        * @param dom {HTMLElement} The
-        * @public
-        */
-        public boot(dom: Kiwi.System.Bootstrap) {
-            var self = this;
-             
-            this.domReady = true;
-            this.container = dom.container;
-
-            if (this._game.deviceTargetOption === Kiwi.TARGET_BROWSER) {
-
-                this.offset = this.getOffsetPoint( this.container );
-
-                this._x = this.offset.x;
-                this._y = this.offset.y;
-
-                window.addEventListener("resize", (event: UIEvent) => this._windowResized(event), true);
-            }
-
-            
-            this._createCompositeCanvas();
-
-
-            if (this._game.deviceTargetOption === Kiwi.TARGET_COCOON) {
-                this._scaleContainer();
-                // Detect reorientation/resize
-                window.addEventListener("orientationchange", function( event:UIEvent ) {
-                    return self._orientationChanged(event);
-                }, true);
-            } else {
-                this._calculateContainerScale();
-            }
-        }
-        
-        /**
-        * Gets the x/y coordinate offset of any given valid DOM Element from the top/left position of the browser
-        * Based on jQuery offset https://github.com/jquery/jquery/blob/master/src/offset.js 
-        * @method getOffsetPoint
-        * @param {Any} element
-        * @param {Kiwi.Geom.Point} output
-        * @return {Kiwi.Geom.Point}
-        * @public
-        */
-        public getOffsetPoint(element, output: Kiwi.Geom.Point = new Kiwi.Geom.Point): Kiwi.Geom.Point {
-
-            var box = element.getBoundingClientRect();
-
-            var clientTop = element.clientTop || document.body.clientTop || 0;
-            var clientLeft = element.clientLeft || document.body.clientLeft || 0;
-            var scrollTop = window.pageYOffset || element.scrollTop || document.body.scrollTop;
-            var scrollLeft = window.pageXOffset || element.scrollLeft || document.body.scrollLeft;
-
-            return output.setTo(box.left + scrollLeft - clientLeft, box.top + scrollTop - clientTop);
-
-        }
-
-        /**
-        * Method that is fired when the window is resized. 
-        * @method _windowResized
-        * @param event {UIEvent}
-        * @private
-        */
-        private _windowResized(event:UIEvent) {
-            this._calculateContainerScale();
-
-            //Dispatch window resize event
-            this.onWindowResize.dispatch();
-        }
-
-        /**
-        * Method that is fired when the device is reoriented.
-        * @method _orientationChanged
-        * @param event {UIEvent}
-        * @private
-        * @since 1.1.1
-        */
-        private _orientationChanged(event:UIEvent) {
-            this.onResize.dispatch(window.innerWidth, window.innerHeight);
-        }
-
-        /**
-        * Used to calculate the new offset and the scale of the stage currently is at.
-        * @method _calculateContainerScale
-        * @private
-        */
-        private _calculateContainerScale() {
-
-            //Calculate the scale twice
-            //This will give the correct scale upon completion the second run
-            //Temporary fix until the Scale Manager is implemented
-            this._scaleContainer();
-            this._scaleContainer();
-
-            this.offset = this.getOffsetPoint(this.container);
-
-            this._scale.x = this._width / this.container.clientWidth;
-            this._scale.y = this._height / this.container.clientHeight;
-
-        }
-
-        /**
-        * Handles the creation of the canvas that the game will use and retrieves the context for the renderer. 
-        *
-        * @method _createComponsiteCanvas
-        * @private
-        */
-        private _createCompositeCanvas() {
-            
-            //If we are using cocoon then create a accelerated screen canvas
-            if (this._game.deviceTargetOption == Kiwi.TARGET_COCOON) {
-                this.canvas = <HTMLCanvasElement>document.createElement(navigator["isCocoonJS"] ? "screencanvas" : "canvas");
-            
-            //Otherwise default to normal canvas
-            } else {
-                this.canvas = <HTMLCanvasElement>document.createElement("canvas");
-                this.canvas.style.width = "100%";
-                this.canvas.style.height = "100%";
-
-            }
-
-            this.canvas.id = this._game.id + "compositeCanvas";
-            this.canvas.style.position = "absolute";
-            this.canvas.width = this.width;
-            this.canvas.height = this.height;
-            
-
-            //Get 2D or GL Context; do error detection and fallback to valid rendering context
-            if (this._game.renderOption === Kiwi.RENDERER_CANVAS) {
-                this.ctx = this.canvas.getContext("2d");
-                this.ctx.fillStyle = "#fff";
-                this.gl = null;
-            } else if (this._game.renderOption === Kiwi.RENDERER_WEBGL) {
-                this.gl = this.canvas.getContext("webgl");
-                if (!this.gl) {
-                    this.gl = this.canvas.getContext("experimental-webgl");
-                    if (!this.gl) {
-                        Kiwi.Log.warn("Kiwi.Stage: WebGL rendering is not available despite the device apparently supporting it. Reverting to CANVAS.", "#renderer");
-                        // Reset to canvas mode
-                        this.ctx = this.canvas.getContext("2d");
-                        this.ctx.fillStyle = "#fff";
-                        this.gl = null;
-                    } else {
-                        Kiwi.Log.warn("Kiwi.Stage: 'webgl' context is not available. Using 'experimental-webgl'", "#renderer");
-                    }
-                }
-                if ( this.gl ) {
-
-                    // That is, WebGL was properly supported and created
-                    this.gl.clearColor(1, 1, 1, 1);
-                    this.gl.clear(this.gl.COLOR_BUFFER_BIT | this.gl.DEPTH_BUFFER_BIT);
-                    this.ctx = null;
-                }
-            }
-
-            // Create render manager
-            // This is reported back to the Kiwi.Game that created the Stage.
-            if(this.ctx) {
-                this._renderer = new Kiwi.Renderers.CanvasRenderer(this._game);
-            } else if(this.gl) {
-                this._renderer = new Kiwi.Renderers.GLRenderManager(this._game);
-            }
-            
-
-            if (this._game.deviceTargetOption === Kiwi.TARGET_BROWSER) {
-                this.container.appendChild(this.canvas);
-            } else {
-                document.body.appendChild(this.canvas);
-            }
-        
-        }
-        
-
-        /**
-        * Set the stage width and height for rendering purposes.
-        * This will not effect that "scaleType" that it has been set to.
-        *
-        * @method resize
-        * @param width {number} The new Stage width.
-        * @param height {number} The new Stage height.
-        * @public
-        */
-        public resize(width: number, height: number) {
-
-            this.canvas.height = height;
-            this.canvas.width = width;
-            this._height = height;
-            this._width = width;
-
-            if (this._game.deviceTargetOption === Kiwi.TARGET_BROWSER) {
-                this._calculateContainerScale();
-            }
-
-            this.onResize.dispatch(this._width, this._height);
-        }
-
-        /**
-        * Sets the background color of the stage through component RGB colour values. 
-        * Each parameter is a number between 0 and 255.
-        * This method also returns an Object Literal with "r", "g", "b" properties.
-        *
-        * @method setRGBColor
-        * @param r {Number} The red component. A value between 0 and 255.
-        * @param g {Number} The green component. A value between 0 and 255.
-        * @param b {Number} The blue component. A value between 0 and 255.
-        * @return {Object} A Object literal containing the r,g,b properties. 
-        * @public
-        */
-        public setRGBColor(r: number, g: number, b: number):any {
-            this.rgbColor = { r: r, g: g, b: b };
-            return this.rgbColor;
-        }
-
-
-        /**
-        * Creates a debug canvas and adds it above the regular game canvas.
-        * The debug canvas is not created by default (even with debugging on) and rendering/clearing of the canvas is upto the developer. 
-        * The context for rendering can be access via the "dctx" property and you can use the "clearDebugCanvas" method to clear the canvas.
-        *
-        * @method createDebugCanvas
-        * @public
-        */
-        public createDebugCanvas() {
-
-            if( Kiwi.Utils.Common.isUndefined(this.debugCanvas) == false ) return;
-            
-            if (this._game.deviceTargetOption === Kiwi.TARGET_COCOON) {
-                //Not supported in CocoonJS only because we cannot add it to the container (as a container does not exist) and position will be hard.
-                Kiwi.Log.log("Debug canvas not supported in cocoon, creating canvas and context anyway", "#debug-canvas");                
-            } 
-
-            this.debugCanvas = <HTMLCanvasElement>document.createElement("canvas");
-            this.debugCanvas.id = this._game.id + "debugCanvas";
-            this.debugCanvas.style.position = "absolute";
-            this.debugCanvas.width = this.width;
-            this.debugCanvas.height = this.height;
-            this.debugCanvas.style.width = "100%";
-            this.debugCanvas.style.height = "100%";
-            this.dctx = this.debugCanvas.getContext("2d");
-            this.clearDebugCanvas();
-
-            if (this._game.deviceTargetOption === Kiwi.TARGET_BROWSER) {
-                this.container.appendChild(this.debugCanvas);
-            }
-          
-        }
-        
-
-        /**
-        * Clears the debug canvas and fills with either the color passed. 
-        * If not colour is passed then Red at 20% opacity is used.
-        * 
-        * @method clearDebugCanvas
-        * @param [color="rgba(255,0,0,0.2)"] {string} The debug color to rendering on the debug canvas.
-        * @public
-        */
-        public clearDebugCanvas( color?:string ) {
-            this.dctx.fillStyle = color || "rgba(255,0,0,.2)";
-            this.dctx.clearRect(0, 0, this.width, this.height);
-            this.dctx.fillRect(0, 0, this.width, this.height)
-        }
-
-        /**
-        * Toggles the visibility of the debug canvas. 
-        * @method toggleDebugCanvas
-        * @public
-        */
-        public toggleDebugCanvas() {
-            this.debugCanvas.style.display = (this.debugCanvas.style.display === "none") ? "block" : "none";
-        }
-
-        /**
-        * Handles the scaling/sizing based upon the scaleType property.
-        * @method _scaleContainer
-        * @private
-        */
-        private _scaleContainer() {
-
-            if (this._game.deviceTargetOption == Kiwi.TARGET_BROWSER) {
-
-                var clientWidth = this.container.clientWidth;
-
-                this.container.style.width = String(this._width + "px");
-                this.container.style.height = String(this._height + "px");
-
-                if (this._scaleType == Kiwi.Stage.SCALE_NONE) {
-                    this.container.style.maxWidth = "";
-                    this.container.style.minWidth = "";
-                }
-
-                //To Fit or STRETCH 
-                if (this._scaleType == Kiwi.Stage.SCALE_STRETCH || this._scaleType == Kiwi.Stage.SCALE_FIT) {
-                    this.container.style.minWidth = "100%";
-                    this.container.style.maxWidth = "100%";
-                }
-
-                //If scale stretched then scale the containers height to 100% of its parents.
-                if (this._scaleType == Kiwi.Stage.SCALE_STRETCH) {
-                    this.container.style.minHeight = "100%";
-                    this.container.style.maxHeight = "100%";
-                } else {
-                    this.container.style.minHeight = "";
-                    this.container.style.maxHeight = "";
-                }
-
-                //If it is SCALE to FIT then scale the containers height in ratio with the containers width.
-                if (this._scaleType == Kiwi.Stage.SCALE_FIT) {
-                    this.container.style.height = String((clientWidth / this._width) * this._height) + "px";
-                }
-
-            }
-
-            if (this._game.deviceTargetOption == Kiwi.TARGET_COCOON) {
-                // This has no effect in WebGL, and is thus handled separately.
-                switch (this._scaleType) {
-                    case Kiwi.Stage.SCALE_FIT:
-                        this.canvas.style.cssText = "idtkscale:ScaleAspectFit";
-                        break;
-
-                    case Kiwi.Stage.SCALE_STRETCH:
-                        this.canvas.style.cssText = "idtkscale:ScaleToFill";
-                        break;
-
-                    case Kiwi.Stage.SCALE_NONE:
-                        this.canvas.style.cssText = "";
-                        break;
-                }
-
-            }
-
-        }
-
-
-    }
+		* @property offset
+		* @type Kiwi.Geom.Point
+		* @public
+		*/
+		public offset: Kiwi.Geom.Point = new Kiwi.Geom.Point();
+
+		/**
+		* The game this Stage belongs to
+		* @property _game
+		* @type Kiwi.Game
+		* @private 
+		*/
+		private _game: Kiwi.Game;
+
+		/**
+		* The title of your stage
+		* @property name
+		* @type string
+		* @public
+		*/
+		public name: string;
+
+		/**
+		* Whether or not this Stage is DOM ready.
+		* @property domReady
+		* @type boolean
+		* @public
+		*/
+		public domReady: boolean;
+
+		/**
+		* The background color of the stage. 
+		*
+		* @property _color
+		* @type Kiwi.Utils.Color
+		* @public
+		*/
+		public _color: Kiwi.Utils.Color = new Kiwi.Utils.Color();
+
+		/**
+		* Sets the background color of the stage.
+		*
+		* This can be any valid parameter for Kiwi.Utils.Color.
+		* If passing multiple parameters, do so in a single array.
+		*
+		* The default value is "ffffff" or pure white.
+		*
+		* Note for users of CocoonJS: When using the WebGL renderer,
+		* the stage color will fill all parts of the screen outside the canvas.
+		* Kiwi.js will automatically set the color to "000000" or pure black
+		* when using CocoonJS. If you change it, and your game does not fill
+		* the entire screen, the empty portions of the screen will also change
+		* color.
+		*
+		* @property color
+		* @type string
+		* @public
+		*/
+		public get color(): any {
+			return this._color.getHex();
+		}
+
+		public set color( val: any ) {
+			if ( !Kiwi.Utils.Common.isArray( val ) ) {
+				val = [ val ];
+			}
+			this._color.set.apply( this._color, val );
+		}
+
+		/**
+		* Allows the setting of the background color of the stage through component RGB colour values.
+		*
+		* This property is an Object Literal with "r", "g", "b" colour streams of values between 0 and 255.
+		*
+		* @property rgbColor
+		* @type Object
+		* @public
+		*/
+		public get rgbColor():any {
+			return { r: this._color.r * 255, g: this._color.g * 255, b: this._color.b * 255 };
+		}
+
+		public set rgbColor(val: any) {
+			this._color.set( val.r, val.g, val.b );
+		}
+
+		/**
+		* Allows the setting of the background color of the stage through component RGBA colour values.
+		*
+		* This property is an Object Literal with "r", "g", "b", "a" colour streams of values between 0 and 255.
+		* 
+		* Note that the alpha value is from 0-255, not 0-1. This is to preserve compatibility with hex-style color values, e.g. "ff0000ff".
+		*
+		* @property rgbaColor
+		* @type Object
+		* @public
+		* @since 1.1.0
+		*/
+		public get rgbaColor():any {
+			return { r: this._color.r * 255, g: this._color.g * 255, b: this._color.b * 255, a: this._color.a * 255 };
+		}
+
+		public set rgbaColor(val: any) {
+			this._color.set( val.r, val.g, val.b, val.a );
+		}
+
+		/**
+		* Get the normalized background color of the stage.
+		* Returns an object with rgba values, each being between 0 and 1.
+		* This is READ ONLY.
+		* @property normalizedColor
+		* @type string
+		* @public
+		*/
+		public get normalizedColor(): any {
+			return {
+				r: this._color.r,
+				g: this._color.g,
+				b: this._color.b,
+				a: this._color.a };
+			}
+
+		/**
+		* The webgl rendering context.
+		* @property gl
+		* @type WebGLRenderingContext
+		* @public
+		*/
+		public gl: WebGLRenderingContext;
+
+
+		/**
+		* The canvas rendering context.
+		* @property ctx
+		* @type CanvasRenderingContext2D
+		* @public
+		*/
+		public ctx: CanvasRenderingContext2D;
+
+
+		/**
+		* The canvas element that is being rendered on.
+		* @property canvas
+		* @type HTMLCanvasElement
+		* @public
+		*/
+		public canvas: HTMLCanvasElement;
+
+
+		/**
+		* The debugging canvas.
+		* @property debugCanvas
+		* @type HTMLCanvasElement
+		* @public
+		*/
+		public debugCanvas: HTMLCanvasElement;
+
+
+		/**
+		* The debug canvas rendering context.
+		* @property dctx
+		* @type CanvasRenderingContext2D
+		* @public
+		*/
+		public dctx: CanvasRenderingContext2D;
+
+
+		/**
+		* The parent div in which the layers and input live
+		* @property container
+		* @type HTMLDivElement
+		* @public
+		*/
+		public container:HTMLDivElement = null;
+
+
+		/**
+		* Stores the renderer created after context detection.
+		* @property _renderer
+		* @type any
+		* @private
+		* @since 1.1.0
+		*/
+		private _renderer: any;
+
+		/**
+		* Get the renderer associated with the canvas context. This is either a GLRenderManager or a CanvasRenderer. If the Kiwi.RENDERER_WEBGL renderer was requested but could not be created, it will fall back to CanvasRenderer.
+		* This is READ ONLY.
+		* @property renderer
+		* @type number
+		* @public
+		* @since 1.1.0
+		*/
+		public get renderer(): any {
+			return this._renderer;
+		}
+
+
+		/**
+		* Is executed when the DOM has loaded and the game is just starting. 
+		* This is a internal method used by the core of Kiwi itself. 
+		* @method boot
+		* @param dom {HTMLElement} The
+		* @public
+		*/
+		public boot(dom: Kiwi.System.Bootstrap) {
+			var self = this;
+			 
+			this.domReady = true;
+			this.container = dom.container;
+
+			if (this._game.deviceTargetOption === Kiwi.TARGET_BROWSER) {
+
+				this.offset = this.getOffsetPoint( this.container );
+
+				this._x = this.offset.x;
+				this._y = this.offset.y;
+
+				window.addEventListener("resize", (event: UIEvent) => this._windowResized(event), true);
+			}
+
+			
+			this._createCompositeCanvas();
+
+
+			if (this._game.deviceTargetOption === Kiwi.TARGET_COCOON) {
+				this._scaleContainer();
+				// Detect reorientation/resize
+				window.addEventListener("orientationchange", function( event:UIEvent ) {
+					return self._orientationChanged(event);
+				}, true);
+			} else {
+				this._calculateContainerScale();
+			}
+		}
+
+		/**
+		* Gets the x/y coordinate offset of any given valid DOM Element from the top/left position of the browser
+		* Based on jQuery offset https://github.com/jquery/jquery/blob/master/src/offset.js 
+		* @method getOffsetPoint
+		* @param {Any} element
+		* @param {Kiwi.Geom.Point} output
+		* @return {Kiwi.Geom.Point}
+		* @public
+		*/
+		public getOffsetPoint(element, output: Kiwi.Geom.Point = new Kiwi.Geom.Point): Kiwi.Geom.Point {
+
+			var box = element.getBoundingClientRect();
+
+			var clientTop = element.clientTop || document.body.clientTop || 0;
+			var clientLeft = element.clientLeft || document.body.clientLeft || 0;
+			var scrollTop = window.pageYOffset || element.scrollTop || document.body.scrollTop;
+			var scrollLeft = window.pageXOffset || element.scrollLeft || document.body.scrollLeft;
+
+			return output.setTo(box.left + scrollLeft - clientLeft, box.top + scrollTop - clientTop);
+
+		}
+
+		/**
+		* Method that is fired when the window is resized. 
+		* @method _windowResized
+		* @param event {UIEvent}
+		* @private
+		*/
+		private _windowResized(event:UIEvent) {
+			this._calculateContainerScale();
+
+			//Dispatch window resize event
+			this.onWindowResize.dispatch();
+		}
+
+		/**
+		* Method that is fired when the device is reoriented.
+		* @method _orientationChanged
+		* @param event {UIEvent}
+		* @private
+		* @since 1.1.1
+		*/
+		private _orientationChanged(event:UIEvent) {
+			this.onResize.dispatch(window.innerWidth, window.innerHeight);
+		}
+
+		/**
+		* Used to calculate the new offset and the scale of the stage currently is at.
+		* @method _calculateContainerScale
+		* @private
+		*/
+		private _calculateContainerScale() {
+
+			//Calculate the scale twice
+			//This will give the correct scale upon completion the second run
+			//Temporary fix until the Scale Manager is implemented
+			this._scaleContainer();
+			this._scaleContainer();
+
+			this.offset = this.getOffsetPoint(this.container);
+
+			this._scale.x = this._width / this.container.clientWidth;
+			this._scale.y = this._height / this.container.clientHeight;
+
+		}
+
+		/**
+		* Handles the creation of the canvas that the game will use and retrieves the context for the renderer. 
+		*
+		* @method _createComponsiteCanvas
+		* @private
+		*/
+		private _createCompositeCanvas() {
+			
+			//If we are using cocoon then create a accelerated screen canvas
+			if (this._game.deviceTargetOption == Kiwi.TARGET_COCOON) {
+				this.canvas = <HTMLCanvasElement>document.createElement(navigator["isCocoonJS"] ? "screencanvas" : "canvas");
+			
+			//Otherwise default to normal canvas
+			} else {
+				this.canvas = <HTMLCanvasElement>document.createElement("canvas");
+				this.canvas.style.width = "100%";
+				this.canvas.style.height = "100%";
+
+			}
+
+			this.canvas.id = this._game.id + "compositeCanvas";
+			this.canvas.style.position = "absolute";
+			this.canvas.width = this.width;
+			this.canvas.height = this.height;
+			
+
+			//Get 2D or GL Context; do error detection and fallback to valid rendering context
+			if (this._game.renderOption === Kiwi.RENDERER_CANVAS) {
+				this.ctx = this.canvas.getContext("2d");
+				this.ctx.fillStyle = "#fff";
+				this.gl = null;
+			} else if (this._game.renderOption === Kiwi.RENDERER_WEBGL) {
+				this.gl = this.canvas.getContext("webgl");
+				if (!this.gl) {
+					this.gl = this.canvas.getContext("experimental-webgl");
+					if (!this.gl) {
+						Kiwi.Log.warn("Kiwi.Stage: WebGL rendering is not available despite the device apparently supporting it. Reverting to CANVAS.", "#renderer");
+						// Reset to canvas mode
+						this.ctx = this.canvas.getContext("2d");
+						this.ctx.fillStyle = "#fff";
+						this.gl = null;
+					} else {
+						Kiwi.Log.warn("Kiwi.Stage: 'webgl' context is not available. Using 'experimental-webgl'", "#renderer");
+					}
+				}
+				if ( this.gl ) {
+
+					// That is, WebGL was properly supported and created
+					this.gl.clearColor(1, 1, 1, 1);
+					this.gl.clear(this.gl.COLOR_BUFFER_BIT | this.gl.DEPTH_BUFFER_BIT);
+					this.ctx = null;
+				}
+			}
+
+			// Create render manager
+			// This is reported back to the Kiwi.Game that created the Stage.
+			if(this.ctx) {
+				this._renderer = new Kiwi.Renderers.CanvasRenderer(this._game);
+			} else if(this.gl) {
+				this._renderer = new Kiwi.Renderers.GLRenderManager(this._game);
+			}
+
+
+			if (this._game.deviceTargetOption === Kiwi.TARGET_BROWSER) {
+				this.container.appendChild(this.canvas);
+			} else {
+				document.body.appendChild(this.canvas);
+			}
+		}
+
+		/**
+		* Set the stage width and height for rendering purposes.
+		* This will not effect that "scaleType" that it has been set to.
+		*
+		* @method resize
+		* @param width {number} The new Stage width.
+		* @param height {number} The new Stage height.
+		* @public
+		*/
+		public resize(width: number, height: number) {
+
+			this.canvas.height = height;
+			this.canvas.width = width;
+			this._height = height;
+			this._width = width;
+
+			if (this._game.deviceTargetOption === Kiwi.TARGET_BROWSER) {
+				this._calculateContainerScale();
+			}
+
+			this.onResize.dispatch(this._width, this._height);
+		}
+
+		/**
+		* Sets the background color of the stage through component RGB colour values. 
+		* Each parameter is a number between 0 and 255.
+		* This method also returns an Object Literal with "r", "g", "b" properties.
+		*
+		* @method setRGBColor
+		* @param r {Number} The red component. A value between 0 and 255.
+		* @param g {Number} The green component. A value between 0 and 255.
+		* @param b {Number} The blue component. A value between 0 and 255.
+		* @return {Object} A Object literal containing the r,g,b properties. 
+		* @public
+		*/
+		public setRGBColor(r: number, g: number, b: number):any {
+			this.rgbColor = { r: r, g: g, b: b };
+			return this.rgbColor;
+		}
+
+
+		/**
+		* Creates a debug canvas and adds it above the regular game canvas.
+		* The debug canvas is not created by default (even with debugging on) and rendering/clearing of the canvas is upto the developer. 
+		* The context for rendering can be access via the "dctx" property and you can use the "clearDebugCanvas" method to clear the canvas.
+		*
+		* @method createDebugCanvas
+		* @public
+		*/
+		public createDebugCanvas() {
+
+			if( Kiwi.Utils.Common.isUndefined(this.debugCanvas) == false ) return;
+			
+			if (this._game.deviceTargetOption === Kiwi.TARGET_COCOON) {
+				//Not supported in CocoonJS only because we cannot add it to the container (as a container does not exist) and position will be hard.
+				Kiwi.Log.log("Debug canvas not supported in cocoon, creating canvas and context anyway", "#debug-canvas");                
+			}
+
+			this.debugCanvas = <HTMLCanvasElement>document.createElement("canvas");
+			this.debugCanvas.id = this._game.id + "debugCanvas";
+			this.debugCanvas.style.position = "absolute";
+			this.debugCanvas.width = this.width;
+			this.debugCanvas.height = this.height;
+			this.debugCanvas.style.width = "100%";
+			this.debugCanvas.style.height = "100%";
+			this.dctx = this.debugCanvas.getContext("2d");
+			this.clearDebugCanvas();
+
+			if (this._game.deviceTargetOption === Kiwi.TARGET_BROWSER) {
+				this.container.appendChild(this.debugCanvas);
+			}
+
+		}
+
+		/**
+		* Clears the debug canvas and fills with either the color passed. 
+		* If not colour is passed then Red at 20% opacity is used.
+		* 
+		* @method clearDebugCanvas
+		* @param [color="rgba(255,0,0,0.2)"] {string} The debug color to rendering on the debug canvas.
+		* @public
+		*/
+		public clearDebugCanvas( color?:string ) {
+			this.dctx.fillStyle = color || "rgba(255,0,0,.2)";
+			this.dctx.clearRect(0, 0, this.width, this.height);
+			this.dctx.fillRect(0, 0, this.width, this.height)
+		}
+
+		/**
+		* Toggles the visibility of the debug canvas. 
+		* @method toggleDebugCanvas
+		* @public
+		*/
+		public toggleDebugCanvas() {
+			this.debugCanvas.style.display = (this.debugCanvas.style.display === "none") ? "block" : "none";
+		}
+
+		/**
+		* Handles the scaling/sizing based upon the scaleType property.
+		* @method _scaleContainer
+		* @private
+		*/
+		private _scaleContainer() {
+
+			if (this._game.deviceTargetOption == Kiwi.TARGET_BROWSER) {
+
+				var clientWidth = this.container.clientWidth;
+
+				this.container.style.width = String(this._width + "px");
+				this.container.style.height = String(this._height + "px");
+
+				if (this._scaleType == Kiwi.Stage.SCALE_NONE) {
+					this.container.style.maxWidth = "";
+					this.container.style.minWidth = "";
+				}
+
+				//To Fit or STRETCH 
+				if (this._scaleType == Kiwi.Stage.SCALE_STRETCH || this._scaleType == Kiwi.Stage.SCALE_FIT) {
+					this.container.style.minWidth = "100%";
+					this.container.style.maxWidth = "100%";
+				}
+
+				//If scale stretched then scale the containers height to 100% of its parents.
+				if (this._scaleType == Kiwi.Stage.SCALE_STRETCH) {
+					this.container.style.minHeight = "100%";
+					this.container.style.maxHeight = "100%";
+				} else {
+					this.container.style.minHeight = "";
+					this.container.style.maxHeight = "";
+				}
+
+				//If it is SCALE to FIT then scale the containers height in ratio with the containers width.
+				if (this._scaleType == Kiwi.Stage.SCALE_FIT) {
+					this.container.style.height = String((clientWidth / this._width) * this._height) + "px";
+				}
+
+			}
+
+			if (this._game.deviceTargetOption == Kiwi.TARGET_COCOON) {
+				// This has no effect in WebGL, and is thus handled separately.
+				switch (this._scaleType) {
+					case Kiwi.Stage.SCALE_FIT:
+						this.canvas.style.cssText = "idtkscale:ScaleAspectFit";
+						break;
+
+					case Kiwi.Stage.SCALE_STRETCH:
+						this.canvas.style.cssText = "idtkscale:ScaleToFill";
+						break;
+
+					case Kiwi.Stage.SCALE_NONE:
+						this.canvas.style.cssText = "";
+						break;
+				}
+
+			}
+
+		}
+
+	}
 
 }
diff --git a/src/core/State.ts b/src/core/State.ts
index bad6bfc..34a756a 100644
--- a/src/core/State.ts
+++ b/src/core/State.ts
@@ -2,482 +2,474 @@
 * 
 * @module Kiwi
 * 
-*/  
+*/
 
 module Kiwi {
 
-    /**
-    * A State in Kiwi.JS is the main class that developers use when wanting to create a Game. 
-    * States in Kiwi are used keep different sections of a game seperated. So a single game maybe comprised of many different States. 
-    * Such as one for the menu, in-game, leaderboard, e.t.c.
-    * There can only ever be a single State active at a given time.   
-    * 
-    * @class State
-    * @namespace Kiwi
-    * @extends Kiwi.Group
-    * @constructor
-    * @param name {String} Name of this State. Should be unique to differentiate itself from other States.
-    * @return {Kiwi.State} 
-    */ 
-    export class State extends Group {
-         
-        constructor(name: string) {
-            super(null, name);
-            
-            this.config = new Kiwi.StateConfig(this, name);
-            this.components = new Kiwi.ComponentManager(Kiwi.STATE, this);
-            this.transform.parent = null;
-            this._trackingList = [];
-        }
-
-        /**
-        * Returns the type of object this state is.
-        * @method objType
-        * @return {String} "State"
-        * @public
-        */
-        public objType() {
-            return "State";
-        }
-
-        /**
-        * Returns the type of child this is. 
-        * @method childType
-        * @return {Number} Kiwi.GROUP
-        * @public
-        */
-        public childType() {
-            return Kiwi.GROUP;
-        }
-
-        /**
-        * The configuration object for this State.
-        * @property config
-        * @type Kiwi.StateConfig
-        * @public
-        */
-        public config: Kiwi.StateConfig;
-
-        /**
-        * A reference to the Kiwi.Game that this State belongs to.
-        * @property game
-        * @type Kiwi.Game
-        * @public
-        */
-        public game: Kiwi.Game = null;
-         
-        /**
-        * The library that this state use's for the loading of textures.
-        * @property textureLibrary
-        * @type Kiwi.Textures.TextureLibrary
-        * @public
-        */
-        public textureLibrary: Kiwi.Textures.TextureLibrary;
-        
-        /**
-        * The library that this state use's for the loading of audio.
-        * @property audioLibrary
-        * @type Kiwi.Sound.AudioLibrary
-        * @public
-        */
-        public audioLibrary: Kiwi.Sound.AudioLibrary;
-        
-        /**
-        * The library that this state use's for the loading of data.
-        * @property dataLibrary
-        * @type Kiwi.Files.DataLibrary
-        * @public
-        */
-        public dataLibrary: Kiwi.Files.DataLibrary;
-
-        /**
-        * Holds all of the textures that are avaiable to be accessed once this state has been loaded.
-        * E.g. If you loaded a image and named it 'flower', once everything has loaded you can then access the flower image by saying this.textures.flower
-        * @property textures
-        * @type Object
-        * @public
-        */
-        public textures;
-
-        /**
-        * Holds all of the audio that are avaiable to be accessed once this state has been loaded.
-        * E.g. If you loaded a piece of audio and named it 'lazerz', once everything has loaded you can then access the lazers (pew pew) by saying this.audio.lazerz
-        * @property audio
-        * @type Object
-        * @public
-        */
-        public audio;
-
-        /**
-        * Holds all of the data that are avaiable to be accessed once this state has been loaded.
-        * E.g. If you loaded a piece of data and named it 'cookieLocation', once everything has loaded you can then access the cookies by saying this.data.cookieLocation
-        * @property data
-        * @type Object
-        * @public
-        */
-        public data;
-
-        /**
-        * This method is executed when this State is about to be switched too. This is the first method to be executed, and happens before the Init method.
-        * Is called each time a State is switched to.
-        * @method boot
-        * @public
-        */
-        public boot() {
-
-            this.textureLibrary = new Kiwi.Textures.TextureLibrary(this.game);
-            this.textures = this.textureLibrary.textures;
-            this.audioLibrary = new Kiwi.Sound.AudioLibrary(this.game);
-            this.audio = this.audioLibrary.audio;
-            this.dataLibrary = new Kiwi.Files.DataLibrary(this.game);
-            this.data = this.dataLibrary.data;
-                
-        }
-
-        /*
-        * Currently unused.
-        */
-        public setType(value: number) {
-
-            if (this.config.isInitialised === false) {
-                this.config.type = value;
-            }
-
-        }
-        
-         
-        /*
-        *--------------
-        * Methods that are to be Over-Ridden by Devs.
-        *--------------
-        */
-
-
-        /**
-        * Gets executed when the state has been initalised and gets switched to for the first time.
-        * This method only ever gets called once and it is before the preload method.
-        * Can have parameters passed to it by the previous state that switched to it.
-        * @method init
-        * @param [values] { Any } 
-        * @public
-        */
-        public init(...paramsArr: any[]) { }
-
-        /**
-        * This method is where you would load of all the assets that are requried for this state or in the entire game.
-        *
-        * @method preload
-        * @public
-        */
-        public preload() { }
-
-        /**
-        * This method is progressively called whilst loading files and is executed each time a file has been loaded.
-        * This can be used to create a 'progress' bar during the loading stage of a game.
-        * @method loadProgress
-        * @param percent {Number} The percent of files that have been loaded so far. This is a number from 0 - 1.
-        * @param bytesLoaded {Number} The number of bytes that have been loaded so far.
-        * @param file {Kiwi.Files.File} The last file to have been loaded.
-        * @public
-        */
-        public loadProgress(percent: number, bytesLoaded: number, file: Kiwi.Files.File) { }
-
-        /**
-        * Gets executed when the game is finished loading and it is about to 'create' the state. 
-        * @method loadComplete
-        * @public
-        */
-        public loadComplete() { }
-
-        /**
-        * The game loop that gets executed while the game is loading. 
-        * @method loadUpdate
-        * @public
-        */
-        public loadUpdate() {
-        
-            for (var i = 0; i < this.members.length; i++) { 
-                if (this.members[i].active === true)
-                {
-                    this.members[i].update();
-                }
-            }
-        
-        }
-
-        /** 
-        * Is executed once all of the assets have loaded and the game is ready to be 'created'.
-        * @method create
-        * @param [values]* {Any} 
-        * @public
-        */
-        public create(...paramsArr: any[]) { }
-
-        /**
-        * Is called every frame before the update loop. When overriding make sure you include a super call.
-        * @method preUpdate
-        * @public
-        */
-        public preUpdate() {
-
-            this.components.preUpdate();
-        
-        }
-
-        /**
-        * The update loop that is executed every frame while the game is 'playing'. When overriding make sure you include a super call too.
-        * @method update
-        * @public
-        */
-        public update() {
-            
-            this.components.update();
-            
-            for (var i = 0; i < this.members.length; i++) {
-
-                //Should the update loop be executed?
-                if (this.members[i].active === true) {
-                    this.members[i].update();
-                
-                }
-                
-                //Does the child need to be destroyed?
-                if (this.members[i].exists === false) {
-                    this.members[i].destroy( true );
-                }
-            }
-            
-        }
-
-        /**
-        * The post update loop is executed every frame after the update method. 
-        * When overriding make sure you include a super call at the end of the method.
-        * @method postUpdate
-        * @public
-        */
-        public postUpdate() {
-
-            this.components.postUpdate();
-        
-        }
-
-        /**
-        * Called after all of the layers have rendered themselves, useful for debugging.
-        * @method postRender
-        * @public
-        */
-        public postRender() { }
-
-        /**
-        * Called just before this State is going to be Shut Down and another one is going to be switched too. 
-        * @method shutDown
-        * @public
-        */
-        public shutDown() { }
-
-         
-        /*
-        *--------------
-        * Loading Methods
-        *--------------
-        */
-
-
-        /**
-        * Adds a new image file that is be loaded when the state gets up to the loading all of the assets.
-        *
-        * @method addImage
-        * @param key {String} A key for this image so that you can access it when the loading has finished.
-        * @param url {String} The location of the image.
-        * @param [storeAsGlobal=true] {boolean} If the image should be deleted when switching to another state or if the other states should still be able to access this image.
-        * @param [width] {Number} The width of the image. If not passed the width will be automatically calculated.
-        * @param [height] {Number} The height of the image. If not passed the height will be automatically calculated.
-        * @param [offsetX] {Number} The offset of the image when rendering on the x axis. 
-        * @param [offsetY] {Number} The offset of the image when rendering on the y axis.
-        * @public
-        */
-        public addImage(key: string, url: string, storeAsGlobal: boolean = true, width?: number, height?: number, offsetX?: number, offsetY?: number) {
-            return this.game.loader.addImage(key, url, width, height, offsetX, offsetY, storeAsGlobal);
-        }
-        
-        /**
-        * Adds a new spritesheet image file that is be loaded when the state gets up to the loading all of the assets.
-        *
-        * @method addSpriteSheet
-        * @param key {String} A key for this image so that you can access it when the loading has finished.
-        * @param url {String} The location of the image.
-        * @param frameWidth {Number} The width of a single frame in the spritesheet
-        * @param frameHeight {Number} The height of a single frame in the spritesheet
-        * @param [storeAsGlobal=true] {boolean} If the image should be deleted when switching to another state or if the other states should still be able to access this image.
-        * @param [numCells] {Number} The number of cells/frames that are in the spritesheet. If not specified will calculate this based of the width/height of the image.
-        * @param [rows] {Number} The number of cells that are in a row. If not specified will calculate this based of the width/height of the image. 
-        * @param [cols] {Number} The number of cells that are in a column. If not specified will calculate this based of the width/height of the image.
-        * @param [sheetOffsetX=0] {Number} The offset of the whole spritesheet on the x axis.
-        * @param [sheetOffsetY=0] {Number} The offset of the whole spritesheet on the y axis.
-        * @param [cellOffsetX=0] {Number} The spacing between cells on the x axis.
-        * @param [cellOffsetY=0] {Number} The spacing between cells on the y axis.
-        * @public 
-        */
-        public addSpriteSheet(key: string, url: string, frameWidth: number, frameHeight: number, storeAsGlobal: boolean = true, numCells?: number, rows?: number, cols?: number, sheetOffsetX?: number, sheetOffsetY?: number, cellOffsetX?: number, cellOffsetY?: number) {
-
-            return this.game.loader.addSpriteSheet(key, url, frameWidth, frameHeight, numCells, rows, cols, sheetOffsetX, sheetOffsetY, cellOffsetX, cellOffsetY, storeAsGlobal);
-            
-        }
-        
-        /**
-        * Adds a new texture atlas that is to be loaded when the states gets up to the stage of loading the assets.
-        *
-        * @method addTextureAtlas
-        * @param key {String} A key for this image so that you can access it when the loading has finished.
-        * @param imageURL {String} The location of the image.
-        * @param [jsonID] {String} The id for the json file that is to be loaded. So that you can access it outside of the texture atlas.
-        * @param [jsonURL] {String} The location of the json file you have loaded.
-        * @param [storeAsGlobal=true] {boolean} If the image should be delete when switching to another state or if the other states should still be able to access this image.
-        * @public
-        */
-        public addTextureAtlas(key: string, imageURL: string, jsonID?: string, jsonURL?: string, storeAsGlobal: boolean = true) {
-             
-            return this.game.loader.addTextureAtlas(key, imageURL, jsonID, jsonURL, storeAsGlobal);
-           
-        }
-
-        /**
-        * Adds a json file that is to be loaded when the state gets up to the stage of loading the assets.
-        * 
-        * @method addJSON
-        * @param key {string} A key for this json so that you can access it when the loading has finished
-        * @param url {string} The location of the JSON file.
-        * @param [storeAsGlobal=true] {boolean} If the json should be deleted when switching to another state or if the other states should still be able to access this json.
-        * @public
-        */
-        public addJSON(key: string, url: string, storeAsGlobal: boolean = true) {
-
-            return this.game.loader.addJSON(key, url, storeAsGlobal);
-        }
-        
-        /**
-        * Adds a new audio file that is to be loaded when the state gets up to the stage of loading the assets.
-        * 
-        * @method addAudio
-        * @param key {string} A key for this audio so that you can access it when the loading has finished
-        * @param url {string} The location of the audio file. You can pass a array of urls, in which case the first supported filetype will be used.
-        * @param [storeAsGlobal=true] {boolean} If the audio should be deleted when switching to another state or if the other states should still be able to access this audio.
-        */
-        public addAudio(key: string, url: any, storeAsGlobal: boolean = true) {
-             
-            return this.game.loader.addAudio(key, url, storeAsGlobal);
-          
-        }
-
-
-        /*
-        *----------------
-        * Garbage Collection 
-        *----------------
-        */
-
-
-        /**
-        * Contains a reference to all of the Objects that have ever been created for this state. Generally Kiwi.Entities or Kiwi.Groups.
-        * Useful for keeping track of sprites that are not used any more and need to be destroyed.
-        * @property trackingList
-        * @type Array
-        * @private
-        */
-        private _trackingList: Kiwi.IChild[];
-
-        /**
-        * Adds a new Objects to the tracking list. 
-        * This is an INTERNAL Kiwi method and DEVS shouldn't need to worry about it.
-        * @method addToTrackingList
-        * @param child {Object} The Object which you are adding to the tracking list.
-        * @public
-        */
-        public addToTrackingList(child: Kiwi.IChild) {
-            //check to see that its not already in the tracking list.
-            if (this._trackingList.indexOf(child) !== -1) return;
-            //add to the list
-            this._trackingList.push(child);
-        }
-
-        /**
-        * Removes a Object from the tracking list. This should only need to happen when a child is being destroyed.
-        * This is an INTERNAL Kiwi method and DEVS shouldn't really need to worry about it.
-        * @method removeFromTrackingList
-        * @param child {Object} The object which is being removed from the tracking list. 
-        * @public
-        */
-        public removeFromTrackingList(child:Kiwi.IChild) {
-            //check to see that it is in the tracking list.
-            var n = this._trackingList.indexOf(child);
-            if (n > -1) {
-                this._trackingList.splice(n, 1);
-            } 
-        }
-
-        /**
-        * Destroys all of Objects in the tracking list that are not currently on stage. 
-        * All that currently don't have this STATE as an ancestor.
-        * Returns the number of Objects removed.  
-        * @method destroyUnused
-        * @return {Number} The amount of objects removed.
-        * @public
-        */
-        public destroyUnused():number {
-
-            var d = 0; 
-            for (var i = 0; i < this._trackingList.length; i++) {
-                if (this.containsAncestor(this._trackingList[i], this) === false) {
-                    this._trackingList[i].destroy();
-                    this._trackingList.splice(i, 1);
-                    i--;
-                    d++;
-                }
-            }
-
-            return d;
-        }
-
-        /**
-        * Used to mark all Entities that have been created for deletion, regardless of it they are on the stage or not.
-        * @method destroy
-        * @param [deleteAll=true] If all of the Objects ever created should have the destroy method executed also.
-        * @public
-        */
-        public destroy(deleteAll: boolean=true) {
-            
-            if (deleteAll == true) {
-
-                //destroy all of the tracking list
-                for (var i = 0; i < this._trackingList.length; i++) {
-
-                    //If the item is a group then we don't want it to destroy it's children, as this method will do that eventually anyway.
-                    this._trackingList[i].destroy( true , false ); 
-                }
-                this._trackingList = [];
-                
-                // While it is possible to set a member on another state and push it to this state, thus avoiding the tracking list, that member will be destroyed when this state loads, so we do not need to destroy remaining members - simply clear the list.
-                this.members = [];    
-
-            }
-
-        }
-
-        /**
-        * Recursively goes through a child given and runs the destroy method on all that are passed.
-        * @method _destroyChildren
-        * @param child {Object}
-        * @private
-        */
-        private _destroyChildren(child: any) {
-            if (child.childType() == Kiwi.GROUP) {
-                for (var i = 0; i < child.members.length; i++) {
-                    this._destroyChildren(child.members[i]);
-                }
-            } 
-            child.destroy( true );
-        }
-
-    }
-
-}
\ No newline at end of file
+	/**
+	* A State in Kiwi.JS is the main class that developers use when wanting to create a Game. 
+	* States in Kiwi are used keep different sections of a game seperated. So a single game maybe comprised of many different States. 
+	* Such as one for the menu, in-game, leaderboard, e.t.c.
+	* There can only ever be a single State active at a given time.   
+	* 
+	* @class State
+	* @namespace Kiwi
+	* @extends Kiwi.Group
+	* @constructor
+	* @param name {String} Name of this State. Should be unique to differentiate itself from other States.
+	* @return {Kiwi.State} 
+	*/
+	export class State extends Group {
+
+		constructor(name: string) {
+			super(null, name);
+			
+			this.config = new Kiwi.StateConfig(this, name);
+			this.components = new Kiwi.ComponentManager(Kiwi.STATE, this);
+			this.transform.parent = null;
+			this._trackingList = [];
+		}
+
+		/**
+		* Returns the type of object this state is.
+		* @method objType
+		* @return {String} "State"
+		* @public
+		*/
+		public objType() {
+			return "State";
+		}
+
+		/**
+		* Returns the type of child this is. 
+		* @method childType
+		* @return {Number} Kiwi.GROUP
+		* @public
+		*/
+		public childType() {
+			return Kiwi.GROUP;
+		}
+
+		/**
+		* The configuration object for this State.
+		* @property config
+		* @type Kiwi.StateConfig
+		* @public
+		*/
+		public config: Kiwi.StateConfig;
+
+		/**
+		* A reference to the Kiwi.Game that this State belongs to.
+		* @property game
+		* @type Kiwi.Game
+		* @public
+		*/
+		public game: Kiwi.Game = null;
+
+		/**
+		* The library that this state use's for the loading of textures.
+		* @property textureLibrary
+		* @type Kiwi.Textures.TextureLibrary
+		* @public
+		*/
+		public textureLibrary: Kiwi.Textures.TextureLibrary;
+
+		/**
+		* The library that this state use's for the loading of audio.
+		* @property audioLibrary
+		* @type Kiwi.Sound.AudioLibrary
+		* @public
+		*/
+		public audioLibrary: Kiwi.Sound.AudioLibrary;
+
+		/**
+		* The library that this state use's for the loading of data.
+		* @property dataLibrary
+		* @type Kiwi.Files.DataLibrary
+		* @public
+		*/
+		public dataLibrary: Kiwi.Files.DataLibrary;
+
+		/**
+		* Holds all of the textures that are avaiable to be accessed once this state has been loaded.
+		* E.g. If you loaded a image and named it 'flower', once everything has loaded you can then access the flower image by saying this.textures.flower
+		* @property textures
+		* @type Object
+		* @public
+		*/
+		public textures;
+
+		/**
+		* Holds all of the audio that are avaiable to be accessed once this state has been loaded.
+		* E.g. If you loaded a piece of audio and named it 'lazerz', once everything has loaded you can then access the lazers (pew pew) by saying this.audio.lazerz
+		* @property audio
+		* @type Object
+		* @public
+		*/
+		public audio;
+
+		/**
+		* Holds all of the data that are avaiable to be accessed once this state has been loaded.
+		* E.g. If you loaded a piece of data and named it 'cookieLocation', once everything has loaded you can then access the cookies by saying this.data.cookieLocation
+		* @property data
+		* @type Object
+		* @public
+		*/
+		public data;
+
+		/**
+		* This method is executed when this State is about to be switched too. This is the first method to be executed, and happens before the Init method.
+		* Is called each time a State is switched to.
+		* @method boot
+		* @public
+		*/
+		public boot() {
+
+			this.textureLibrary = new Kiwi.Textures.TextureLibrary(this.game);
+			this.textures = this.textureLibrary.textures;
+			this.audioLibrary = new Kiwi.Sound.AudioLibrary(this.game);
+			this.audio = this.audioLibrary.audio;
+			this.dataLibrary = new Kiwi.Files.DataLibrary(this.game);
+			this.data = this.dataLibrary.data;
+		}
+
+		/*
+		* Currently unused.
+		*/
+		public setType(value: number) {
+
+			if (this.config.isInitialised === false) {
+				this.config.type = value;
+			}
+
+		}
+
+
+		/*
+		*--------------
+		* Methods that are to be Over-Ridden by Devs.
+		*--------------
+		*/
+
+
+		/**
+		* Gets executed when the state has been initalised and gets switched to for the first time.
+		* This method only ever gets called once and it is before the preload method.
+		* Can have parameters passed to it by the previous state that switched to it.
+		* @method init
+		* @param [values] { Any } 
+		* @public
+		*/
+		public init(...paramsArr: any[]) { }
+
+		/**
+		* This method is where you would load of all the assets that are requried for this state or in the entire game.
+		*
+		* @method preload
+		* @public
+		*/
+		public preload() { }
+
+		/**
+		* This method is progressively called whilst loading files and is executed each time a file has been loaded.
+		* This can be used to create a 'progress' bar during the loading stage of a game.
+		* @method loadProgress
+		* @param percent {Number} The percent of files that have been loaded so far. This is a number from 0 - 1.
+		* @param bytesLoaded {Number} The number of bytes that have been loaded so far.
+		* @param file {Kiwi.Files.File} The last file to have been loaded.
+		* @public
+		*/
+		public loadProgress(percent: number, bytesLoaded: number, file: Kiwi.Files.File) { }
+
+		/**
+		* Gets executed when the game is finished loading and it is about to 'create' the state. 
+		* @method loadComplete
+		* @public
+		*/
+		public loadComplete() { }
+
+		/**
+		* The game loop that gets executed while the game is loading. 
+		* @method loadUpdate
+		* @public
+		*/
+		public loadUpdate() {
+
+			for (var i = 0; i < this.members.length; i++) { 
+				if (this.members[i].active === true)
+				{
+					this.members[i].update();
+				}
+			}
+		}
+
+		/** 
+		* Is executed once all of the assets have loaded and the game is ready to be 'created'.
+		* @method create
+		* @param [values]* {Any} 
+		* @public
+		*/
+		public create(...paramsArr: any[]) { }
+
+		/**
+		* Is called every frame before the update loop. When overriding make sure you include a super call.
+		* @method preUpdate
+		* @public
+		*/
+		public preUpdate() {
+			this.components.preUpdate();
+		}
+
+		/**
+		* The update loop that is executed every frame while the game is 'playing'. When overriding make sure you include a super call too.
+		* @method update
+		* @public
+		*/
+		public update() {
+			
+			this.components.update();
+			
+			for (var i = 0; i < this.members.length; i++) {
+
+				//Should the update loop be executed?
+				if (this.members[i].active === true) {
+					this.members[i].update();
+				
+				}
+				
+				//Does the child need to be destroyed?
+				if (this.members[i].exists === false) {
+					this.members[i].destroy( true );
+				}
+			}
+		}
+
+		/**
+		* The post update loop is executed every frame after the update method. 
+		* When overriding make sure you include a super call at the end of the method.
+		* @method postUpdate
+		* @public
+		*/
+		public postUpdate() {
+			this.components.postUpdate();
+		}
+
+		/**
+		* Called after all of the layers have rendered themselves, useful for debugging.
+		* @method postRender
+		* @public
+		*/
+		public postRender() { }
+
+		/**
+		* Called just before this State is going to be Shut Down and another one is going to be switched too. 
+		* @method shutDown
+		* @public
+		*/
+		public shutDown() { }
+
+
+		/*
+		*--------------
+		* Loading Methods
+		*--------------
+		*/
+
+
+		/**
+		* Adds a new image file that is be loaded when the state gets up to the loading all of the assets.
+		*
+		* @method addImage
+		* @param key {String} A key for this image so that you can access it when the loading has finished.
+		* @param url {String} The location of the image.
+		* @param [storeAsGlobal=true] {boolean} If the image should be deleted when switching to another state or if the other states should still be able to access this image.
+		* @param [width] {Number} The width of the image. If not passed the width will be automatically calculated.
+		* @param [height] {Number} The height of the image. If not passed the height will be automatically calculated.
+		* @param [offsetX] {Number} The offset of the image when rendering on the x axis. 
+		* @param [offsetY] {Number} The offset of the image when rendering on the y axis.
+		* @public
+		*/
+		public addImage(key: string, url: string, storeAsGlobal: boolean = true, width?: number, height?: number, offsetX?: number, offsetY?: number) {
+			return this.game.loader.addImage(key, url, width, height, offsetX, offsetY, storeAsGlobal);
+		}
+
+		/**
+		* Adds a new spritesheet image file that is be loaded when the state gets up to the loading all of the assets.
+		*
+		* @method addSpriteSheet
+		* @param key {String} A key for this image so that you can access it when the loading has finished.
+		* @param url {String} The location of the image.
+		* @param frameWidth {Number} The width of a single frame in the spritesheet
+		* @param frameHeight {Number} The height of a single frame in the spritesheet
+		* @param [storeAsGlobal=true] {boolean} If the image should be deleted when switching to another state or if the other states should still be able to access this image.
+		* @param [numCells] {Number} The number of cells/frames that are in the spritesheet. If not specified will calculate this based of the width/height of the image.
+		* @param [rows] {Number} The number of cells that are in a row. If not specified will calculate this based of the width/height of the image. 
+		* @param [cols] {Number} The number of cells that are in a column. If not specified will calculate this based of the width/height of the image.
+		* @param [sheetOffsetX=0] {Number} The offset of the whole spritesheet on the x axis.
+		* @param [sheetOffsetY=0] {Number} The offset of the whole spritesheet on the y axis.
+		* @param [cellOffsetX=0] {Number} The spacing between cells on the x axis.
+		* @param [cellOffsetY=0] {Number} The spacing between cells on the y axis.
+		* @public 
+		*/
+		public addSpriteSheet(key: string, url: string, frameWidth: number, frameHeight: number, storeAsGlobal: boolean = true, numCells?: number, rows?: number, cols?: number, sheetOffsetX?: number, sheetOffsetY?: number, cellOffsetX?: number, cellOffsetY?: number) {
+
+			return this.game.loader.addSpriteSheet(key, url, frameWidth, frameHeight, numCells, rows, cols, sheetOffsetX, sheetOffsetY, cellOffsetX, cellOffsetY, storeAsGlobal);
+		}
+
+		/**
+		* Adds a new texture atlas that is to be loaded when the states gets up to the stage of loading the assets.
+		*
+		* @method addTextureAtlas
+		* @param key {String} A key for this image so that you can access it when the loading has finished.
+		* @param imageURL {String} The location of the image.
+		* @param [jsonID] {String} The id for the json file that is to be loaded. So that you can access it outside of the texture atlas.
+		* @param [jsonURL] {String} The location of the json file you have loaded.
+		* @param [storeAsGlobal=true] {boolean} If the image should be delete when switching to another state or if the other states should still be able to access this image.
+		* @public
+		*/
+		public addTextureAtlas(key: string, imageURL: string, jsonID?: string, jsonURL?: string, storeAsGlobal: boolean = true) {
+
+			return this.game.loader.addTextureAtlas(key, imageURL, jsonID, jsonURL, storeAsGlobal);
+
+		}
+
+		/**
+		* Adds a json file that is to be loaded when the state gets up to the stage of loading the assets.
+		* 
+		* @method addJSON
+		* @param key {string} A key for this json so that you can access it when the loading has finished
+		* @param url {string} The location of the JSON file.
+		* @param [storeAsGlobal=true] {boolean} If the json should be deleted when switching to another state or if the other states should still be able to access this json.
+		* @public
+		*/
+		public addJSON(key: string, url: string, storeAsGlobal: boolean = true) {
+
+			return this.game.loader.addJSON(key, url, storeAsGlobal);
+		}
+
+		/**
+		* Adds a new audio file that is to be loaded when the state gets up to the stage of loading the assets.
+		* 
+		* @method addAudio
+		* @param key {string} A key for this audio so that you can access it when the loading has finished
+		* @param url {string} The location of the audio file. You can pass a array of urls, in which case the first supported filetype will be used.
+		* @param [storeAsGlobal=true] {boolean} If the audio should be deleted when switching to another state or if the other states should still be able to access this audio.
+		*/
+		public addAudio(key: string, url: any, storeAsGlobal: boolean = true) {
+
+			return this.game.loader.addAudio(key, url, storeAsGlobal);
+
+		}
+
+
+		/*
+		*----------------
+		* Garbage Collection 
+		*----------------
+		*/
+
+
+		/**
+		* Contains a reference to all of the Objects that have ever been created for this state. Generally Kiwi.Entities or Kiwi.Groups.
+		* Useful for keeping track of sprites that are not used any more and need to be destroyed.
+		* @property trackingList
+		* @type Array
+		* @private
+		*/
+		private _trackingList: Kiwi.IChild[];
+
+		/**
+		* Adds a new Objects to the tracking list. 
+		* This is an INTERNAL Kiwi method and DEVS shouldn't need to worry about it.
+		* @method addToTrackingList
+		* @param child {Object} The Object which you are adding to the tracking list.
+		* @public
+		*/
+		public addToTrackingList(child: Kiwi.IChild) {
+			//check to see that its not already in the tracking list.
+			if (this._trackingList.indexOf(child) !== -1) return;
+			//add to the list
+			this._trackingList.push(child);
+		}
+
+		/**
+		* Removes a Object from the tracking list. This should only need to happen when a child is being destroyed.
+		* This is an INTERNAL Kiwi method and DEVS shouldn't really need to worry about it.
+		* @method removeFromTrackingList
+		* @param child {Object} The object which is being removed from the tracking list. 
+		* @public
+		*/
+		public removeFromTrackingList(child:Kiwi.IChild) {
+			//check to see that it is in the tracking list.
+			var n = this._trackingList.indexOf(child);
+			if (n > -1) {
+				this._trackingList.splice(n, 1);
+			} 
+		}
+
+		/**
+		* Destroys all of Objects in the tracking list that are not currently on stage. 
+		* All that currently don't have this STATE as an ancestor.
+		* Returns the number of Objects removed.  
+		* @method destroyUnused
+		* @return {Number} The amount of objects removed.
+		* @public
+		*/
+		public destroyUnused():number {
+
+			var d = 0; 
+			for (var i = 0; i < this._trackingList.length; i++) {
+				if (this.containsAncestor(this._trackingList[i], this) === false) {
+					this._trackingList[i].destroy();
+					this._trackingList.splice(i, 1);
+					i--;
+					d++;
+				}
+			}
+
+			return d;
+		}
+
+		/**
+		* Used to mark all Entities that have been created for deletion, regardless of it they are on the stage or not.
+		* @method destroy
+		* @param [deleteAll=true] If all of the Objects ever created should have the destroy method executed also.
+		* @public
+		*/
+		public destroy(deleteAll: boolean=true) {
+
+			if (deleteAll == true) {
+
+				//destroy all of the tracking list
+				for (var i = 0; i < this._trackingList.length; i++) {
+
+					//If the item is a group then we don't want it to destroy it's children, as this method will do that eventually anyway.
+					this._trackingList[i].destroy( true , false ); 
+				}
+				this._trackingList = [];
+				
+				// While it is possible to set a member on another state and push it to this state, thus avoiding the tracking list, that member will be destroyed when this state loads, so we do not need to destroy remaining members - simply clear the list.
+				this.members = [];    
+
+			}
+
+		}
+
+		/**
+		* Recursively goes through a child given and runs the destroy method on all that are passed.
+		* @method _destroyChildren
+		* @param child {Object}
+		* @private
+		*/
+		private _destroyChildren(child: any) {
+			if (child.childType() == Kiwi.GROUP) {
+				for (var i = 0; i < child.members.length; i++) {
+					this._destroyChildren(child.members[i]);
+				}
+			}
+			child.destroy( true );
+		}
+
+	}
+
+}
diff --git a/src/core/StateConfig.ts b/src/core/StateConfig.ts
index 2fa1bc7..285a03a 100644
--- a/src/core/StateConfig.ts
+++ b/src/core/StateConfig.ts
@@ -2,149 +2,149 @@
 * 
 * @module Kiwi
 * 
-*/  
+*/
 
 module Kiwi {
 
-    /**
-    * A lightweight object that contains values relating to the configuration of a State in a Kiwi Game.
-    *
-    * @class StateConfig
-    * @namespace Kiwi
-    * @constructor
-    * @param parent {Kiwi.State} The State that this configuration object belongs to.
-    * @param name {String} The name of the state which was created.
-    * @return {Kiwi.StateConfig} 
-    * 
-    */ 
-    export class StateConfig {
- 
-        constructor(parent: Kiwi.State, name: string) {
-
-            this._state = parent;
-            this.name = name;
-
-            //If it has a preload method.
-            //*cough* of course it does.
-            if (typeof this._state['preload'] === 'function') {
-                this.hasPreloader = true;
-            }
-        }
-
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} "StateConfig"
-        * @public
-        */
-        public objType() {
-            return "StateConfig";
-        }
-
-        /**
-        * The state this StateConfig belongs to.
-        * @property _state
-        * @type Kiwi.State
-        * @private
-        */
-        private _state: Kiwi.State;
-
-        /**
-        * The name of the State, must be unique within your game.
-        * @property name
-        * @type String
-        * @public
-        */
-        public name: string = '';
-
-        /**
-        * Currently unused.
-        */
-        public isPersistent: boolean = false;
-
-        /**
-        * If this State has been created (the create method has been executed). 
-        * Essentually has the same meaning as 'isReady'.
-        * @property isCreated
-        * @type boolean
-        * @default false
-        * @public
-        */
-        public isCreated: boolean = false;
-
-        /**
-        * If the State has been initialised already (so the Boot and Init methods have been executed already). 
-        * A State only get Initialised once which is when it switched to for this first time.
-        * @property isInitialised
-        * @type boolean
-        * @default false
-        * @public
-        */
-        public isInitialised: boolean = false;
-
-        /**
-        * If the State that this config is on is 'ready' to be used (e.g. all the assets have been loaded and libraries complied)
-        * or if it isn't and so it is still at the 'loading' stage.
-        * @property isReady
-        * @type boolean
-        * @default false
-        * @public
-        */
-        public isReady: boolean = false;
-
-        /**
-        * If the State that this config is on contains a Preloader Method.
-        * @property hasPreloader
-        * @type boolean
-        * @default false
-        * @public
-        */
-        public hasPreloader: boolean = false;
-
-        /**
-        * The number of times the State that this config belongs to has been active/used.
-        * @property runCount
-        * @type Number
-        * @default 0
-        * @public
-        */
-        public runCount: number = 0;
-
-        /*
-        * The type of State this is. Currently Unused.
-        */
-        public type: number = 0;
-
-        /**
-        * Stores any parameters that are to be passed to the init method when the State that this config is on is switched to.
-        * @property initParams
-        * @type Array
-        * @public
-        */
-        public initParams;
-
-        /**
-        * Stores any parameters that are to be passed to the create method when the State that this config is on is switched to.
-        * @property createParams
-        * @type Array
-        * @public
-        */
-        public createParams;
-
-        /**
-        * Resets the properties contained on this StateConfig object. 
-        * This is executed when a State is about to be destroyed as so reset's it to be switched to again.
-        * @method reset
-        * @public
-        */
-        public reset() {
-
-            this.isReady = false;
-            this.isCreated = false;
-            this.createParams = [];
-            this.initParams = [];
-
-        }
-
-    }
+	/**
+	* A lightweight object that contains values relating to the configuration of a State in a Kiwi Game.
+	*
+	* @class StateConfig
+	* @namespace Kiwi
+	* @constructor
+	* @param parent {Kiwi.State} The State that this configuration object belongs to.
+	* @param name {String} The name of the state which was created.
+	* @return {Kiwi.StateConfig} 
+	* 
+	*/
+	export class StateConfig {
+
+		constructor(parent: Kiwi.State, name: string) {
+
+			this._state = parent;
+			this.name = name;
+
+			//If it has a preload method.
+			//*cough* of course it does.
+			if (typeof this._state['preload'] === 'function') {
+				this.hasPreloader = true;
+			}
+		}
+
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} "StateConfig"
+		* @public
+		*/
+		public objType() {
+			return "StateConfig";
+		}
+
+		/**
+		* The state this StateConfig belongs to.
+		* @property _state
+		* @type Kiwi.State
+		* @private
+		*/
+		private _state: Kiwi.State;
+
+		/**
+		* The name of the State, must be unique within your game.
+		* @property name
+		* @type String
+		* @public
+		*/
+		public name: string = '';
+
+		/**
+		* Currently unused.
+		*/
+		public isPersistent: boolean = false;
+
+		/**
+		* If this State has been created (the create method has been executed). 
+		* Essentually has the same meaning as 'isReady'.
+		* @property isCreated
+		* @type boolean
+		* @default false
+		* @public
+		*/
+		public isCreated: boolean = false;
+
+		/**
+		* If the State has been initialised already (so the Boot and Init methods have been executed already). 
+		* A State only get Initialised once which is when it switched to for this first time.
+		* @property isInitialised
+		* @type boolean
+		* @default false
+		* @public
+		*/
+		public isInitialised: boolean = false;
+
+		/**
+		* If the State that this config is on is 'ready' to be used (e.g. all the assets have been loaded and libraries complied)
+		* or if it isn't and so it is still at the 'loading' stage.
+		* @property isReady
+		* @type boolean
+		* @default false
+		* @public
+		*/
+		public isReady: boolean = false;
+
+		/**
+		* If the State that this config is on contains a Preloader Method.
+		* @property hasPreloader
+		* @type boolean
+		* @default false
+		* @public
+		*/
+		public hasPreloader: boolean = false;
+
+		/**
+		* The number of times the State that this config belongs to has been active/used.
+		* @property runCount
+		* @type Number
+		* @default 0
+		* @public
+		*/
+		public runCount: number = 0;
+
+		/*
+		* The type of State this is. Currently Unused.
+		*/
+		public type: number = 0;
+
+		/**
+		* Stores any parameters that are to be passed to the init method when the State that this config is on is switched to.
+		* @property initParams
+		* @type Array
+		* @public
+		*/
+		public initParams;
+
+		/**
+		* Stores any parameters that are to be passed to the create method when the State that this config is on is switched to.
+		* @property createParams
+		* @type Array
+		* @public
+		*/
+		public createParams;
+
+		/**
+		* Resets the properties contained on this StateConfig object. 
+		* This is executed when a State is about to be destroyed as so reset's it to be switched to again.
+		* @method reset
+		* @public
+		*/
+		public reset() {
+
+			this.isReady = false;
+			this.isCreated = false;
+			this.createParams = [];
+			this.initParams = [];
+
+		}
+
+	}
 }
diff --git a/src/core/StateManager.ts b/src/core/StateManager.ts
index 52b82d8..9625ab5 100644
--- a/src/core/StateManager.ts
+++ b/src/core/StateManager.ts
@@ -2,475 +2,474 @@
 * 
 * @module Kiwi
 * 
-*/  
+*/
 
 module Kiwi {
 
-    /**
-    * The State Manager handles the starting, parsing, looping and swapping of game States within a Kiwi Game
-    * There is only ever one State Manager per game, but a single Game can contain multiple States.
-    *
-    * @class StateManager
-    * @namespace Kiwi
-    * @constructor
-    * @param game {Kiwi.Game} The game that this statemanager belongs to.
-    * @return {Kiwi.StateMananger} 
-    *
-    */
-    export class StateManager {
-         
-        constructor(game: Kiwi.Game) {
-
-            this._game = game;
-
-            this._states = [];
-
-        }
-
-        /**
-        * The type of object this is.
-        * @method objType
-        * @return {string} "StateManager"
-        * @public
-        */
-        public objType() {
-            return "StateManager";
-        }
-
-        /**
-        * The game that this manager belongs to.
-        * @property _game
-        * @type Kiwi.Game
-        * @private
-        */
-        private _game: Kiwi.Game;
-
-        /**
-        * An array of all of the states that are contained within this manager.
-        * @property _states
-        * @type Array
-        * @private
-        */
-        private _states: Kiwi.State[];
-
-        /**
-        * The current State that the game is at.
-        * @property current
-        * @type Kiwi.State
-        * @default null
-        * @public
-        */
-        public current: Kiwi.State = null;
-
-        /**
-        * The name of the new State that is to be switched to.
-        * @property _newStateKey
-        * @type string
-        * @default null
-        * @private
-        */
-        private _newStateKey: string = null;
-
-        /**
-        * Checks to see if a key exists. Internal use only.
-        * @method checkKeyExists
-        * @param key {String}
-        * @return {boolean}
-        * @private
-        */
-        private checkKeyExists(key: string): boolean {
-
-            for (var i = 0; i < this._states.length; i++)
-            {
-                if (this._states[i].config.name === key)
-                {
-                    return true;
-                }
-            }
-
-            return false;
-
-        }
-
-        /**
-        * Checks to see if the State passed is valid or not.
-        * @method checkValidState
-        * @param state {Kiwi.State}
-        * @return {boolean}
-        * @private
-        */
-        private checkValidState(state: Kiwi.State): boolean {
-
-            if (!state['game'] || !state['config']) {
-                return false;
-            }
-
-            return true;
-
-        }
-
-        /**
-        * Adds the given State to the StateManager.
-        * The State must have a unique key set on it, or it will fail to be added to the manager.
-        * Returns true if added successfully, otherwise false (can happen if State is already in the StateManager)
-        * 
-        * @method addState
-        * @param state {Any} The Kiwi.State instance to add.
-        * @param [switchTo=false] {boolean} If set to true automatically switch to the given state after adding it
-        * @return {boolean} true if the State was added successfully, otherwise false
-        * @public
-        */
-        public addState(state: any, switchTo:boolean = false): boolean {
-            Kiwi.Log.log('Kiwi.StateManager: Adding state.', '#state');
-            var tempState;
-
-            //What type is the state that was passed.
-            if (typeof state === 'function') {
-                tempState = new state();
-
-            } else if (typeof state === 'string') {
-                tempState = window[state];  
-
-            } else {
-                tempState = state;
-            }
-
-            //Does a state with that name already exist?
-            if (tempState.config.name && this.checkKeyExists(tempState.config.name) === true) {
-
-                Kiwi.Log.error('  Kiwi.StateManager: Could not add ' + tempState.config.name + ' as a State with that name already exists.', '#state');
-                return false;
-            }
-
-            tempState.game = this._game;
-            
-            //Is it a valid state?
-            if (this.checkValidState(tempState) === false) {
-
-                Kiwi.Log.error('  Kiwi.StateManager: ' + tempState.config.name + ' isn\'t a valid state. Make sure you are using the Kiwi.State class!', '#state');
-
-                return false;
-
-            } else {
-
-                this._states.push(tempState);
-                Kiwi.Log.log('  Kiwi.StateManager: ' + tempState.config.name + ' was successfully added.', '#state');
-
-                if (switchTo === true) {
-                    this.switchState( tempState.config.name );
-                }
-
-                return true;
-
-            }
-
-        }
-
-        /**
-        * Is executed once the DOM has finished loading.
-        * This is an INTERNAL Kiwi method. 
-        * @method boot
-        * @public
-        */
-        boot() {                                         
-
-        }
-
-        /**
-        * Switches to the name (key) of the state that you pass. 
-        * Does not work if the state you are switching to is already the current state OR if that state does not exist yet.
-        * @method setCurrentState
-        * @param key {String}
-        * @return {boolean}
-        * @private
-        */
-        private setCurrentState(key: string): boolean {
-
-            //  Bail out if they are trying to switch to the already current state
-            if (this.current !== null && this.current.config.name === key || this.checkKeyExists(key) === false) {
-                return false;
-            }
-
-            Kiwi.Log.log('Kiwi.StateManager: Switching to "' + key + '" State.', '#state'); 
-
-            this._newStateKey = key;
-            return true;
-        }
-
-        /**
-        * Actually switches to a state that is stored in the 'newStateKey' property. This method is executed after the update loops have been executed to help prevent developer errors. 
-        * @method bootNewState
-        * @private
-        */
-        private bootNewState() {
-            
-            // Destroy the current if there is one.
-            if (this.current !== null) {
-
-                this.current.shutDown();
-
-                
-                this._game.input.reset();   //Reset the input component
-                this.current.destroy(true); //Destroy ALL IChildren ever created on that state.
-                this._game.fileStore.removeStateFiles(this.current); //Clear the fileStore of not global files.
-                this.current.config.reset(); //Reset the config setting
-                this._game.cameras.zeroAllCameras(); // Reset cameras
-            } 
-
-
-            //Set the current state, reset the key
-            this.current = this.getState(this._newStateKey);
-            this._newStateKey = null;
+	/**
+	* The State Manager handles the starting, parsing, looping and swapping of game States within a Kiwi Game
+	* There is only ever one State Manager per game, but a single Game can contain multiple States.
+	*
+	* @class StateManager
+	* @namespace Kiwi
+	* @constructor
+	* @param game {Kiwi.Game} The game that this statemanager belongs to.
+	* @return {Kiwi.StateMananger} 
+	*
+	*/
+	export class StateManager {
+
+		constructor(game: Kiwi.Game) {
+
+			this._game = game;
+
+			this._states = [];
+
+		}
+
+		/**
+		* The type of object this is.
+		* @method objType
+		* @return {string} "StateManager"
+		* @public
+		*/
+		public objType() {
+			return "StateManager";
+		}
+
+		/**
+		* The game that this manager belongs to.
+		* @property _game
+		* @type Kiwi.Game
+		* @private
+		*/
+		private _game: Kiwi.Game;
+
+		/**
+		* An array of all of the states that are contained within this manager.
+		* @property _states
+		* @type Array
+		* @private
+		*/
+		private _states: Kiwi.State[];
+
+		/**
+		* The current State that the game is at.
+		* @property current
+		* @type Kiwi.State
+		* @default null
+		* @public
+		*/
+		public current: Kiwi.State = null;
+
+		/**
+		* The name of the new State that is to be switched to.
+		* @property _newStateKey
+		* @type string
+		* @default null
+		* @private
+		*/
+		private _newStateKey: string = null;
+
+		/**
+		* Checks to see if a key exists. Internal use only.
+		* @method checkKeyExists
+		* @param key {String}
+		* @return {boolean}
+		* @private
+		*/
+		private checkKeyExists(key: string): boolean {
+
+			for (var i = 0; i < this._states.length; i++)
+			{
+				if (this._states[i].config.name === key)
+				{
+					return true;
+				}
+			}
+
+			return false;
+
+		}
+
+		/**
+		* Checks to see if the State passed is valid or not.
+		* @method checkValidState
+		* @param state {Kiwi.State}
+		* @return {boolean}
+		* @private
+		*/
+		private checkValidState(state: Kiwi.State): boolean {
+
+			if (!state['game'] || !state['config']) {
+				return false;
+			}
+
+			return true;
+
+		}
+
+		/**
+		* Adds the given State to the StateManager.
+		* The State must have a unique key set on it, or it will fail to be added to the manager.
+		* Returns true if added successfully, otherwise false (can happen if State is already in the StateManager)
+		* 
+		* @method addState
+		* @param state {Any} The Kiwi.State instance to add.
+		* @param [switchTo=false] {boolean} If set to true automatically switch to the given state after adding it
+		* @return {boolean} true if the State was added successfully, otherwise false
+		* @public
+		*/
+		public addState(state: any, switchTo:boolean = false): boolean {
+			Kiwi.Log.log('Kiwi.StateManager: Adding state.', '#state');
+			var tempState;
+
+			//What type is the state that was passed.
+			if (typeof state === 'function') {
+				tempState = new state();
+
+			} else if (typeof state === 'string') {
+				tempState = window[state];  
+
+			} else {
+				tempState = state;
+			}
+
+			//Does a state with that name already exist?
+			if (tempState.config.name && this.checkKeyExists(tempState.config.name) === true) {
+
+				Kiwi.Log.error('  Kiwi.StateManager: Could not add ' + tempState.config.name + ' as a State with that name already exists.', '#state');
+				return false;
+			}
+
+			tempState.game = this._game;
+			
+			//Is it a valid state?
+			if (this.checkValidState(tempState) === false) {
+
+				Kiwi.Log.error('  Kiwi.StateManager: ' + tempState.config.name + ' isn\'t a valid state. Make sure you are using the Kiwi.State class!', '#state');
+
+				return false;
+
+			} else {
+
+				this._states.push(tempState);
+				Kiwi.Log.log('  Kiwi.StateManager: ' + tempState.config.name + ' was successfully added.', '#state');
+
+				if (switchTo === true) {
+					this.switchState( tempState.config.name );
+				}
+
+				return true;
+
+			}
+
+		}
+
+		/**
+		* Is executed once the DOM has finished loading.
+		* This is an INTERNAL Kiwi method. 
+		* @method boot
+		* @public
+		*/
+		boot() {
+
+		}
+
+		/**
+		* Switches to the name (key) of the state that you pass. 
+		* Does not work if the state you are switching to is already the current state OR if that state does not exist yet.
+		* @method setCurrentState
+		* @param key {String}
+		* @return {boolean}
+		* @private
+		*/
+		private setCurrentState(key: string): boolean {
+
+			//  Bail out if they are trying to switch to the already current state
+			if (this.current !== null && this.current.config.name === key || this.checkKeyExists(key) === false) {
+				return false;
+			}
+
+			Kiwi.Log.log('Kiwi.StateManager: Switching to "' + key + '" State.', '#state'); 
+
+			this._newStateKey = key;
+			return true;
+		}
+
+		/**
+		* Actually switches to a state that is stored in the 'newStateKey' property. This method is executed after the update loops have been executed to help prevent developer errors. 
+		* @method bootNewState
+		* @private
+		*/
+		private bootNewState() {
+			
+			// Destroy the current if there is one.
+			if (this.current !== null) {
+
+				this.current.shutDown();
+
+				
+				this._game.input.reset();   //Reset the input component
+				this.current.destroy(true); //Destroy ALL IChildren ever created on that state.
+				this._game.fileStore.removeStateFiles(this.current); //Clear the fileStore of not global files.
+				this.current.config.reset(); //Reset the config setting
+				this._game.cameras.zeroAllCameras(); // Reset cameras
+			} 
+
+
+			//Set the current state, reset the key
+			this.current = this.getState(this._newStateKey);
+			this._newStateKey = null;
 
 
-            //Initalise the state and execute the preload method?
-            this.checkInit();
-            this.checkPreload();
+			//Initalise the state and execute the preload method?
+			this.checkInit();
+			this.checkPreload();
 
-        }
-
-        /**
-        * Swaps the current state.
-        * If the state has already been loaded (via addState) then you can just pass the key.
-        * Otherwise you can pass the state object as well and it will load it then swap to it.
-        *
-        * @method switchState
-        * @param key {String} The name/key of the state you would like to switch to.
-        * @param [state=null] {Any} The state that you want to switch to. This is only used to create the state if it doesn't exist already.
-        * @param [initParams=null] {Object} Any parameters that you would like to pass to the init method of that new state.
-        * @param [createParams=null] {Object} Any parameters that you would like to pass to the create method of that new state.
-        * @return {boolean} Whether the State is going to be switched to or not.
-        * @public
-        */
-        public switchState(key: string, state: any = null, initParams = null, createParams = null): boolean {
-
-            //  If we have a current state that isn't yet ready (preload hasn't finished) then abort now
-            if (this.current !== null && this.current.config.isReady === false) {
-
-                Kiwi.Log.error('Kiwi.StateManager: Cannot change to a new state till the current state has finished loading!', '#state');
-
-                return false;
-            }
-
-            // If state key doesn't exist then lets add it.
-            if (this.checkKeyExists(key) === false && state !== null) {
-
-                if (this.addState(state, false) === false) {
-                    return false;
-                }
-            }
-
-            // Store the parameters (if any)
-            if (initParams !== null || createParams !== null) {
-
-                var newState = this.getState(key);
-                newState.config.initParams = [];
-                newState.config.createParams = [];
-
-                for (var initParameter in initParams) {
-                    newState.config.initParams.push(initParams[initParameter]);
-                }
-
-                for (var createParameter in createParams) {
-                    newState.config.createParams.push(createParams[createParameter]);
-                }
-
-            }
-            
-            return this.setCurrentState(key);
-
-        }
-
-        /**
-        * Gets a state by the key that is passed.
-        * @method getState
-        * @param key {String}
-        * @return {Kiwi.State}
-        * @private
-        */
-        private getState(key: string): Kiwi.State {
-
-            for (var i = 0; i < this._states.length; i++)
-            {
-                if (this._states[i].config.name === key)
-                {
-                    return this._states[i];
-                }
-            }
-
-            return null;
-
-        }
-
-
-        /*
-        *----------------
-        * Check Methods 
-        *----------------
-        */
-
-
-        /**
-        * Checks to see if the state that is being switched to needs to load some files or not.
-        * If it does it loads the file, if it does not it runs the create method.
-        * @method checkPreload
-        * @private
-        */
-        private checkPreload() {
-
-            //Rebuild the Libraries before the preload is executed
-            this.rebuildLibraries();
-
-            this._game.loader.onQueueProgress.add(this.onLoadProgress, this);
-            this._game.loader.onQueueComplete.add(this.onLoadComplete, this);
-            this.current.preload();
-            this._game.loader.start();
-        }
-
-        /**
-        * Checks to see if the state being switched to contains a create method.
-        * If it does then it calls the create method.
-        * @method callCreate
-        * @private
-        */
-        private callCreate() {
-
-            Kiwi.Log.log("Kiwi.StateManager: Calling " + this.current.name + ":Create", '#state');
-
-            //Execute the create with params if there are some there.
-            if (this.current.config.createParams) {
-                this.current.create.apply(this.current, this.current.config.createParams);
-
-            //Otherwise just execute the method.
-            } else {
-                this.current.create.call(this.current);
-            }
-
-            this.current.config.runCount++;
-            this.current.config.isCreated = true;
-        }
-
-        /**
-        * Checks to see if the state has a init method and then executes that method if it is found.
-        * @method checkInit
-        * @private
-        */
-        private checkInit() {
-            
-            //Has the state already been initialised?
-            if (this.current.config.isInitialised === false) {
-
-                //Boot the state.
-                this.current.boot();
-
-                //Execute the Init method with params
-                if (this.current.config.initParams) {
-                    this.current.init.apply(this.current, this.current.config.initParams);
-
-                //Execute the Init method with out params
-                } else {
-                    this.current.init.call(this.current);
-                }
-
-                
-                this.current.config.isInitialised = true;
-            }
-
-        }
-
-        /**
-        * Is execute whilst files are being loaded by the state.
-        * @method onLoadProgress
-        * @param percent {Number} The current percentage of files that have been loaded. Ranging from 0 - 1.
-        * @param bytesLoaded {Number} The number of bytes that have been loaded so far.
-        * @param file {Kiwi.Files.File} The last file that has been loaded.
-        * @private
-        */
-        private onLoadProgress(percent: number, bytesLoaded: number, file: Kiwi.Files.File) {
-
-            this.current.loadProgress(percent, bytesLoaded, file);
-            
-        }
-
-        /**
-        * Executed when the preloading has completed. Then executes the loadComplete and create methods of the new State.
-        * @method onLoadComplete
-        * @private
-        */
-        private onLoadComplete() {
-
-            this.current.loadComplete();
-            this._game.loader.onQueueProgress.remove(this.onLoadProgress, this);
-            this._game.loader.onQueueComplete.remove(this.onLoadComplete, this);
-            
-            //Rebuild the Libraries again to have access the new files that were loaded.
-            this.rebuildLibraries();
-            this.current.config.isReady = true;
-            this.callCreate();
-
-        }
-
-        /**
-        * Rebuilds the texture, audio and data libraries that are on the current state. Thus updating what files the user has access to.
-        * @method rebuildLibraries
-        * @public
-        */
-        public rebuildLibraries() {
-            
-            this.current.audioLibrary.rebuild(this._game.fileStore, this.current);
-            this.current.dataLibrary.rebuild(this._game.fileStore, this.current);
-            this.current.textureLibrary.rebuild(this._game.fileStore, this.current);
-            if (this._game.renderOption == Kiwi.RENDERER_WEBGL) {
-                this._game.renderer.initState(this.current);
-            }
-        }
-
-        /**
-        * The update loop that is accessible on the StateManager.
-        * @method update
-        * @public
-        */
-        public update() {
-
-            if (this.current !== null)
-            {
-                //Is the state ready?
-                if (this.current.config.isReady === true)
-                {
-                    this.current.preUpdate();
-                    this.current.update();
-                    this.current.postUpdate();
-                }
-                else
-                {
-                    this.current.loadUpdate();
-                }
-            }
-
-            //Do we need to switch states?
-            if (this._newStateKey !== null) {
-                this.bootNewState();
-            }
-
-        }
-
-        /**
-        * PostRender - Called after all of the rendering has been executed in a frame.
-        * @method postRender
-        * @public
-        */
-        public postRender() {
-
-            if (this.current !== null)
-            {
-                if (this.current.config.isReady === true)
-                {
-                    this.current.postRender();
-                }
-            }
-
-        }
-
-    }
+		}
+
+		/**
+		* Swaps the current state.
+		* If the state has already been loaded (via addState) then you can just pass the key.
+		* Otherwise you can pass the state object as well and it will load it then swap to it.
+		*
+		* @method switchState
+		* @param key {String} The name/key of the state you would like to switch to.
+		* @param [state=null] {Any} The state that you want to switch to. This is only used to create the state if it doesn't exist already.
+		* @param [initParams=null] {Object} Any parameters that you would like to pass to the init method of that new state.
+		* @param [createParams=null] {Object} Any parameters that you would like to pass to the create method of that new state.
+		* @return {boolean} Whether the State is going to be switched to or not.
+		* @public
+		*/
+		public switchState(key: string, state: any = null, initParams = null, createParams = null): boolean {
+
+			//  If we have a current state that isn't yet ready (preload hasn't finished) then abort now
+			if (this.current !== null && this.current.config.isReady === false) {
+
+				Kiwi.Log.error('Kiwi.StateManager: Cannot change to a new state till the current state has finished loading!', '#state');
+
+				return false;
+			}
+
+			// If state key doesn't exist then lets add it.
+			if (this.checkKeyExists(key) === false && state !== null) {
+
+				if (this.addState(state, false) === false) {
+					return false;
+				}
+			}
+
+			// Store the parameters (if any)
+			if (initParams !== null || createParams !== null) {
+
+				var newState = this.getState(key);
+				newState.config.initParams = [];
+				newState.config.createParams = [];
+
+				for (var initParameter in initParams) {
+					newState.config.initParams.push(initParams[initParameter]);
+				}
+
+				for (var createParameter in createParams) {
+					newState.config.createParams.push(createParams[createParameter]);
+				}
+
+			}
+			
+			return this.setCurrentState(key);
+
+		}
+
+		/**
+		* Gets a state by the key that is passed.
+		* @method getState
+		* @param key {String}
+		* @return {Kiwi.State}
+		* @private
+		*/
+		private getState(key: string): Kiwi.State {
+
+			for (var i = 0; i < this._states.length; i++)
+			{
+				if (this._states[i].config.name === key)
+				{
+					return this._states[i];
+				}
+			}
+
+			return null;
+
+		}
+
+
+		/*
+		*----------------
+		* Check Methods 
+		*----------------
+		*/
+
+
+		/**
+		* Checks to see if the state that is being switched to needs to load some files or not.
+		* If it does it loads the file, if it does not it runs the create method.
+		* @method checkPreload
+		* @private
+		*/
+		private checkPreload() {
+
+			//Rebuild the Libraries before the preload is executed
+			this.rebuildLibraries();
+
+			this._game.loader.onQueueProgress.add(this.onLoadProgress, this);
+			this._game.loader.onQueueComplete.add(this.onLoadComplete, this);
+			this.current.preload();
+			this._game.loader.start();
+		}
+
+		/**
+		* Checks to see if the state being switched to contains a create method.
+		* If it does then it calls the create method.
+		* @method callCreate
+		* @private
+		*/
+		private callCreate() {
+
+			Kiwi.Log.log("Kiwi.StateManager: Calling " + this.current.name + ":Create", '#state');
+
+			//Execute the create with params if there are some there.
+			if (this.current.config.createParams) {
+				this.current.create.apply(this.current, this.current.config.createParams);
+
+			//Otherwise just execute the method.
+			} else {
+				this.current.create.call(this.current);
+			}
+
+			this.current.config.runCount++;
+			this.current.config.isCreated = true;
+		}
+
+		/**
+		* Checks to see if the state has a init method and then executes that method if it is found.
+		* @method checkInit
+		* @private
+		*/
+		private checkInit() {
+			
+			//Has the state already been initialised?
+			if (this.current.config.isInitialised === false) {
+
+				//Boot the state.
+				this.current.boot();
+
+				//Execute the Init method with params
+				if (this.current.config.initParams) {
+					this.current.init.apply(this.current, this.current.config.initParams);
+
+				//Execute the Init method with out params
+				} else {
+					this.current.init.call(this.current);
+				}
+
+				
+				this.current.config.isInitialised = true;
+			}
+
+		}
+
+		/**
+		* Is execute whilst files are being loaded by the state.
+		* @method onLoadProgress
+		* @param percent {Number} The current percentage of files that have been loaded. Ranging from 0 - 1.
+		* @param bytesLoaded {Number} The number of bytes that have been loaded so far.
+		* @param file {Kiwi.Files.File} The last file that has been loaded.
+		* @private
+		*/
+		private onLoadProgress(percent: number, bytesLoaded: number, file: Kiwi.Files.File) {
+
+			this.current.loadProgress(percent, bytesLoaded, file);
+		}
+
+		/**
+		* Executed when the preloading has completed. Then executes the loadComplete and create methods of the new State.
+		* @method onLoadComplete
+		* @private
+		*/
+		private onLoadComplete() {
+
+			this.current.loadComplete();
+			this._game.loader.onQueueProgress.remove(this.onLoadProgress, this);
+			this._game.loader.onQueueComplete.remove(this.onLoadComplete, this);
+			
+			//Rebuild the Libraries again to have access the new files that were loaded.
+			this.rebuildLibraries();
+			this.current.config.isReady = true;
+			this.callCreate();
+
+		}
+
+		/**
+		* Rebuilds the texture, audio and data libraries that are on the current state. Thus updating what files the user has access to.
+		* @method rebuildLibraries
+		* @public
+		*/
+		public rebuildLibraries() {
+			
+			this.current.audioLibrary.rebuild(this._game.fileStore, this.current);
+			this.current.dataLibrary.rebuild(this._game.fileStore, this.current);
+			this.current.textureLibrary.rebuild(this._game.fileStore, this.current);
+			if (this._game.renderOption == Kiwi.RENDERER_WEBGL) {
+				this._game.renderer.initState(this.current);
+			}
+		}
+
+		/**
+		* The update loop that is accessible on the StateManager.
+		* @method update
+		* @public
+		*/
+		public update() {
+
+			if (this.current !== null)
+			{
+				//Is the state ready?
+				if (this.current.config.isReady === true)
+				{
+					this.current.preUpdate();
+					this.current.update();
+					this.current.postUpdate();
+				}
+				else
+				{
+					this.current.loadUpdate();
+				}
+			}
+
+			//Do we need to switch states?
+			if (this._newStateKey !== null) {
+				this.bootNewState();
+			}
+
+		}
+
+		/**
+		* PostRender - Called after all of the rendering has been executed in a frame.
+		* @method postRender
+		* @public
+		*/
+		public postRender() {
+
+			if (this.current !== null)
+			{
+				if (this.current.config.isReady === true)
+				{
+					this.current.postRender();
+				}
+			}
+
+		}
+
+	}
 
 }
diff --git a/src/file/AudioFile.ts b/src/file/AudioFile.ts
index e4f8a2b..e9f167b 100644
--- a/src/file/AudioFile.ts
+++ b/src/file/AudioFile.ts
@@ -7,162 +7,160 @@
 
 module Kiwi.Files {
 
-    /**
-    * AudioFile which contains settings, loading, and processing details for Audio files to be used. 
-    *
-    * Uses tag loading for devices not supporting the WebAudioAPI. Otherwise XHR + arraybuffer loading methods are used.
-    * 
-    * @class AudioFile
-    * @namespace Kiwi.Files
-    * @extends Kiwi.Files.File
-    * @since 1.2.0
-    * @constructor
-    * @param game {Kiwi.Game} The game that this file is for
-    * @param params {Object} Options for this file.
-    *   @param params.key {String} User defined name for this file. This would be how the user would access it in the file store.
-    *   @param params.url {String} Location of the file to be loaded.
-    *   @param {Object} [params.metadata={}] Any metadata to be associated with the file.
-    *   @param [params.state=null] {Kiwi.State} The state that this file belongs to. Used for defining global assets vs local assets.
-    *   @param [params.fileStore=null] {Kiwi.Files.FileStore} The filestore that this file should be save in automatically when loaded.
-    *   @param [params.type=UNKNOWN] {Number} The type of file this is.
-    *   @param [params.tags] {Array} Any tags to be associated with this file.
-    * @return {Kiwi.Files.AudioFile}
-    */
-    export class AudioFile extends Kiwi.Files.File {
-
-        constructor(game: Kiwi.Game, params: any = {}) {
-
-            //Add support detection here...
-
-            super(game, params);
-
-            if ( this.game.audio.usingAudioTag ) {
-                this.useTagLoader = true;
-                this._loadInParallel = true;
-            } else {
-                this.useTagLoader = false;
-            }
-
-            if (!Kiwi.Utils.Common.isUndefined(params.crossOrigin)) {
-                this.crossOrigin = params.crossOrigin;
-            }
-
-        }
-
-        //this.dataType === File.AUDIO
-
-        /**
-        * For tag loading only. The crossOrigin value applied to loaded images. Very often this needs to be set to 'anonymous'
-        * @property crossOrigin
-        * @type String
-        * @default ''
-        * @public
-        */
-        public crossOrigin: string = '';
-
-        /**
-        * Returns the type of this object
-        * @method objType
-        * @return {String} "AudioFile"
-        * @public
-        */
-        public objType() {
-            return "AudioFile";
-        }
-
-        /**
-        * Initialises a loading method depending on detected device support.
-        * @method _load
-        * @protected
-        */
-        protected _load() {
-            this.attemptCounter++;
-
-            if (this.useTagLoader) {
-                this.tagLoader();
-            } else {
-                this.xhrLoader('GET', 'arraybuffer');
-            }
-
-        }
-
-        /**
-        * Handles loading audio in via an audio tag.
-        * @method tagLoader
-        * @public
-        */
-        public tagLoader() {
-
-            this.data = document.createElement('audio');
-            this.data.src = this.URL;
-            this.data.preload = 'auto';
-
-
-            if (this.crossOrigin) {
-                this.data.crossOrigin = this.crossOrigin;
-            }
-
-            if (this.game.audio.locked) {
-                //Nothing else to do...
-                this.loadSuccess();
-
-            } else {
-
-                var _this = this;
-                var func = function (event) {
-
-                    _this.data.removeEventListener('canplaythrough', func, false);
-                    _this.data.pause();
-                    _this.data.currentTime = 0;
-                    _this.data.volume = 1;
-                    _this.loadSuccess();
-
-                };
-
-                this.data.addEventListener('canplaythrough', func, false);
-
-                if (this.game.deviceTargetOption == Kiwi.TARGET_COCOON) {
-                    //If targetting Cocoon we can use the load method to force the audio loading.
-                    this.data.load();
+	/**
+	* AudioFile which contains settings, loading, and processing details for Audio files to be used. 
+	*
+	* Uses tag loading for devices not supporting the WebAudioAPI. Otherwise XHR + arraybuffer loading methods are used.
+	* 
+	* @class AudioFile
+	* @namespace Kiwi.Files
+	* @extends Kiwi.Files.File
+	* @since 1.2.0
+	* @constructor
+	* @param game {Kiwi.Game} The game that this file is for
+	* @param params {Object} Options for this file.
+	*   @param params.key {String} User defined name for this file. This would be how the user would access it in the file store.
+	*   @param params.url {String} Location of the file to be loaded.
+	*   @param {Object} [params.metadata={}] Any metadata to be associated with the file.
+	*   @param [params.state=null] {Kiwi.State} The state that this file belongs to. Used for defining global assets vs local assets.
+	*   @param [params.fileStore=null] {Kiwi.Files.FileStore} The filestore that this file should be save in automatically when loaded.
+	*   @param [params.type=UNKNOWN] {Number} The type of file this is.
+	*   @param [params.tags] {Array} Any tags to be associated with this file.
+	* @return {Kiwi.Files.AudioFile}
+	*/
+	export class AudioFile extends Kiwi.Files.File {
+
+		constructor(game: Kiwi.Game, params: any = {}) {
+
+			//Add support detection here...
+
+			super(game, params);
+
+			if ( this.game.audio.usingAudioTag ) {
+				this.useTagLoader = true;
+				this._loadInParallel = true;
+			} else {
+				this.useTagLoader = false;
+			}
+
+			if (!Kiwi.Utils.Common.isUndefined(params.crossOrigin)) {
+				this.crossOrigin = params.crossOrigin;
+			}
+
+		}
+
+		//this.dataType === File.AUDIO
+
+		/**
+		* For tag loading only. The crossOrigin value applied to loaded images. Very often this needs to be set to 'anonymous'
+		* @property crossOrigin
+		* @type String
+		* @default ''
+		* @public
+		*/
+		public crossOrigin: string = '';
+
+		/**
+		* Returns the type of this object
+		* @method objType
+		* @return {String} "AudioFile"
+		* @public
+		*/
+		public objType() {
+			return "AudioFile";
+		}
+
+		/**
+		* Initialises a loading method depending on detected device support.
+		* @method _load
+		* @protected
+		*/
+		protected _load() {
+			this.attemptCounter++;
+
+			if (this.useTagLoader) {
+				this.tagLoader();
+			} else {
+				this.xhrLoader('GET', 'arraybuffer');
+			}
+
+		}
+
+		/**
+		* Handles loading audio in via an audio tag.
+		* @method tagLoader
+		* @public
+		*/
+		public tagLoader() {
+
+			this.data = document.createElement('audio');
+			this.data.src = this.URL;
+			this.data.preload = 'auto';
+
+
+			if (this.crossOrigin) {
+				this.data.crossOrigin = this.crossOrigin;
+			}
+
+			if (this.game.audio.locked) {
+				//Nothing else to do...
+				this.loadSuccess();
+
+			} else {
+
+				var _this = this;
+				var func = function (event) {
+
+					_this.data.removeEventListener('canplaythrough', func, false);
+					_this.data.pause();
+					_this.data.currentTime = 0;
+					_this.data.volume = 1;
+					_this.loadSuccess();
+
+				};
+
+				this.data.addEventListener('canplaythrough', func, false);
+
+				if (this.game.deviceTargetOption == Kiwi.TARGET_COCOON) {
+					//If targetting Cocoon we can use the load method to force the audio loading.
+					this.data.load();
+
+				} else {
+					//Otherwise we tell the browser to play the audio in 'mute' to force loading. 
+					this.data.volume = 0;
+					this.data.play();
 
-                } else {
-                    //Otherwise we tell the browser to play the audio in 'mute' to force loading. 
-                    this.data.volume = 0;
-                    this.data.play();
-
-                }
-            }
-
-        }
-
-        /**
-        * Handles decoding the arraybuffer into audio data.
-        * @method processXhr
-        * @param response
-        * @protected
-        */
-        protected processXhr(response:any) {
-
-            this.data = {
-                raw: response,
-                decoded: false,
-                buffer: null
-            };
-
-            var _this: any = this;
-
-            this.game.audio.context.decodeAudioData(this.data.raw, function (buffer) {
-                if (buffer) {
-                    _this.data.buffer = buffer;
-                    _this.data.decoded = true;
-                    _this.loadSuccess();
-                }
-            });
-
-        }
-
-
-
-    }
-
-}  
\ No newline at end of file
+				}
+			}
+
+		}
+
+		/**
+		* Handles decoding the arraybuffer into audio data.
+		* @method processXhr
+		* @param response
+		* @protected
+		*/
+		protected processXhr(response:any) {
+
+			this.data = {
+				raw: response,
+				decoded: false,
+				buffer: null
+			};
+
+			var _this: any = this;
+
+			this.game.audio.context.decodeAudioData(this.data.raw, function (buffer) {
+				if (buffer) {
+					_this.data.buffer = buffer;
+					_this.data.decoded = true;
+					_this.loadSuccess();
+				}
+			});
+
+		}
+
+	}
+
+}
diff --git a/src/file/DataFile.ts b/src/file/DataFile.ts
index 1fbfef8..9f82fdf 100644
--- a/src/file/DataFile.ts
+++ b/src/file/DataFile.ts
@@ -4,195 +4,195 @@
 * @submodule Files 
 * 
 */
- 
+
 module Kiwi.Files {
-    
-    /**
-    * DataFile which contains settings, loading, and processing details for Data files to be used. 
-    * There is no tag loader support for this method of loading.
-    * 
-    * @class DataFile
-    * @namespace Kiwi.Files
-    * @extends Kiwi.Files.File
-    * @since 1.2.0
-    * @constructor
-    * @param game {Kiwi.Game} The game that this file is for
-    * @param params {Object} Options for this file.
-    *   @param params.key {String} User defined name for this file. This would be how the user would access it in the file store. 
-    *   @param params.url {String} Location of the file to be loaded.
-    *   @param {Object} [params.metadata={}] Any metadata to be associated with the file. 
-    *   @param [params.state=null] {Kiwi.State} The state that this file belongs to. Used for defining global assets vs local assets.
-    *   @param [params.fileStore=null] {Kiwi.Files.FileStore} The filestore that this file should be save in automatically when loaded.
-    *   @param [params.type=UNKNOWN] {Number} The type of file this is. 
-    *   @param [params.tags] {Array} Any tags to be associated with this file.
-    *   @param [params.parse] {Boolean} If the response should be parsed after the file is loaded. Only used with JSON and XML types of Data files.
-    * @return {Kiwi.Files.DataFile} 
-    *
-    */
-    export class DataFile extends Kiwi.Files.File {
-
-        constructor(game: Kiwi.Game, params: {} = {}) {
-            super(game, params);
-
-            this.useTagLoader = false;
-            this._loadInParallel = false;
-
-        }
-        
-        /**
-        * Sets properties for this instance based on an object literal passed. Used when the class is being created.
-        *
-        * @method parseParams
-        * @param [params] {Object}
-        *   @param [params.metadata={}] {Object} Any metadata to be associated with the file. 
-        *   @param [params.state=null] {Kiwi.State} The state that this file belongs to. Used for defining global assets vs local assets.
-        *   @param [params.fileStore=null] {Kiwi.Files.FileStore} The filestore that this file should be save in automatically when loaded.
-        *   @param [params.type=UNKNOWN] {Number} The type of file this is. 
-        *   @param [params.tags] {Array} Any tags to be associated with this file.
-        *   @param [params.parse] {Boolean} If the response should be parsed after the file is loaded. 
-        * @protected 
-        */
-        protected parseParams(params: any) {
-            super.parseParams(params);
-
-            if (!Kiwi.Utils.Common.isUndefined(params.parse)) {
-                this.parse = params.parse;
-            }
-
-        }
-
-
-        /**
-        * If the response should be parsed (using the appropriate method) after loading.
-        * Example: If set to the true and the dataType set is json, then the response will be sent through a JSON.parse call. 
-        *
-        * @property parse
-        * @type boolean
-        * @default false
-        * @public
-        */
-        public parse: boolean = false;
-
-        //this.dataType === File.XML || this.dataType === File.JSON || this.dataType === File.TEXT_DATA || this.dataType === File.BINARY_DATA
-
-        /**
-        * Returns the type of this object
-        * @method objType
-        * @return {String} "DataFile"
-        * @public
-        */
-        public objType() {
-            return "DataFile";
-        }
-
-
-        /**
-        * Increments the counter, and calls the approprate loading method.
-        * @method _load
-        * @protected
-        */
-        protected _load() {
-
-            this.attemptCounter++;
-
-            //Special check for binary data. Change the loading type
-            if ( this.dataType === Kiwi.Files.File.BINARY_DATA ) {
-                this.xhrLoader('GET', 'arraybuffer');
-            } else {
-                this.xhrLoader('GET', 'text');
-            }
-
-        }
-
-        /**
-        * Handles decoding the arraybuffer into audio data.
-        * @method processXhr
-        * @param response
-        * @protected
-        */
-        protected processXhr(response: any) {
-
-            if (!this.parse) {
-                this.data = response;
-                this.loadSuccess();
-                return;
-            }
-
-            switch (this.dataType) {
-
-                case Kiwi.Files.File.JSON:
-                    this.processJSON(response);
-                    break;
-
-                case Kiwi.Files.File.XML:
-                    this.parseXML(response);
-                    break;
-
-                case Kiwi.Files.File.TEXT_DATA:
-                case Kiwi.Files.File.BINARY_DATA:
-                default:
-                    this.data = response;
-                    break;
-            }
-
-
-        }
-
-        /**
-        * Attempts to parse a string which is assumed to be XML. Called when 'parse' is set to true. 
-        * If valid 'loadSuccess' is called, otherwise 'loadError' is executed
-        *  
-        * @method parseXML
-        * @param data {String}
-        * @private 
-        */
-        private parseXML(data: string) {
-
-            Kiwi.Log.log('Kiwi.Files.DataFile: Data loaded is being parsed as XML.', '#loading', '#parsing');
-
-            if (window['DOMParser']) {
-
-                var parser = new DOMParser();
-                this.data = parser.parseFromString(data, "text/xml");
-
-            } else {
-
-                this.data = new ActiveXObject("Microsoft.XMLDOM");
-                this.data.async = "false";
-                this.data.loadXML(data);
-
-            }
-
-            if (!this.data || !this.data.documentElement || this.data.getElementsByTagName("parsererror").length) {
-                this.loadError('XML parse error.');
-            } else {
-                this.loadSuccess();
-            }
-        }
-        
-        /**
-        * Attempts to parse a string which is assumed to be JSON. Called when 'parse' is set to true. 
-        * If valid 'loadSuccess' is called, otherwise 'loadError' is executed
-        *  
-        * @method processJSON
-        * @param data {String}
-        * @private 
-        */
-        private processJSON( data:string ) {
-
-            Kiwi.Log.log('Kiwi.Files.DataFile: Data loaded is being parsed as JSON.', '#loading', '#parsing');
 
-            try {
-                this.data = JSON.parse(data);
-                this.loadSuccess();
+	/**
+	* DataFile which contains settings, loading, and processing details for Data files to be used. 
+	* There is no tag loader support for this method of loading.
+	* 
+	* @class DataFile
+	* @namespace Kiwi.Files
+	* @extends Kiwi.Files.File
+	* @since 1.2.0
+	* @constructor
+	* @param game {Kiwi.Game} The game that this file is for
+	* @param params {Object} Options for this file.
+	*   @param params.key {String} User defined name for this file. This would be how the user would access it in the file store. 
+	*   @param params.url {String} Location of the file to be loaded.
+	*   @param {Object} [params.metadata={}] Any metadata to be associated with the file. 
+	*   @param [params.state=null] {Kiwi.State} The state that this file belongs to. Used for defining global assets vs local assets.
+	*   @param [params.fileStore=null] {Kiwi.Files.FileStore} The filestore that this file should be save in automatically when loaded.
+	*   @param [params.type=UNKNOWN] {Number} The type of file this is. 
+	*   @param [params.tags] {Array} Any tags to be associated with this file.
+	*   @param [params.parse] {Boolean} If the response should be parsed after the file is loaded. Only used with JSON and XML types of Data files.
+	* @return {Kiwi.Files.DataFile} 
+	*
+	*/
+	export class DataFile extends Kiwi.Files.File {
+
+		constructor(game: Kiwi.Game, params: {} = {}) {
+			super(game, params);
+
+			this.useTagLoader = false;
+			this._loadInParallel = false;
+
+		}
+
+		/**
+		* Sets properties for this instance based on an object literal passed. Used when the class is being created.
+		*
+		* @method parseParams
+		* @param [params] {Object}
+		*   @param [params.metadata={}] {Object} Any metadata to be associated with the file. 
+		*   @param [params.state=null] {Kiwi.State} The state that this file belongs to. Used for defining global assets vs local assets.
+		*   @param [params.fileStore=null] {Kiwi.Files.FileStore} The filestore that this file should be save in automatically when loaded.
+		*   @param [params.type=UNKNOWN] {Number} The type of file this is. 
+		*   @param [params.tags] {Array} Any tags to be associated with this file.
+		*   @param [params.parse] {Boolean} If the response should be parsed after the file is loaded. 
+		* @protected 
+		*/
+		protected parseParams(params: any) {
+			super.parseParams(params);
+
+			if (!Kiwi.Utils.Common.isUndefined(params.parse)) {
+				this.parse = params.parse;
+			}
+
+		}
+
+
+		/**
+		* If the response should be parsed (using the appropriate method) after loading.
+		* Example: If set to the true and the dataType set is json, then the response will be sent through a JSON.parse call. 
+		*
+		* @property parse
+		* @type boolean
+		* @default false
+		* @public
+		*/
+		public parse: boolean = false;
+
+		//this.dataType === File.XML || this.dataType === File.JSON || this.dataType === File.TEXT_DATA || this.dataType === File.BINARY_DATA
+
+		/**
+		* Returns the type of this object
+		* @method objType
+		* @return {String} "DataFile"
+		* @public
+		*/
+		public objType() {
+			return "DataFile";
+		}
+
+
+		/**
+		* Increments the counter, and calls the approprate loading method.
+		* @method _load
+		* @protected
+		*/
+		protected _load() {
+
+			this.attemptCounter++;
+
+			//Special check for binary data. Change the loading type
+			if ( this.dataType === Kiwi.Files.File.BINARY_DATA ) {
+				this.xhrLoader('GET', 'arraybuffer');
+			} else {
+				this.xhrLoader('GET', 'text');
+			}
+
+		}
+
+		/**
+		* Handles decoding the arraybuffer into audio data.
+		* @method processXhr
+		* @param response
+		* @protected
+		*/
+		protected processXhr(response: any) {
+
+			if (!this.parse) {
+				this.data = response;
+				this.loadSuccess();
+				return;
+			}
+
+			switch (this.dataType) {
+
+				case Kiwi.Files.File.JSON:
+					this.processJSON(response);
+					break;
+
+				case Kiwi.Files.File.XML:
+					this.parseXML(response);
+					break;
+
+				case Kiwi.Files.File.TEXT_DATA:
+				case Kiwi.Files.File.BINARY_DATA:
+				default:
+					this.data = response;
+					break;
+			}
+
+
+		}
+
+		/**
+		* Attempts to parse a string which is assumed to be XML. Called when 'parse' is set to true. 
+		* If valid 'loadSuccess' is called, otherwise 'loadError' is executed
+		*  
+		* @method parseXML
+		* @param data {String}
+		* @private 
+		*/
+		private parseXML(data: string) {
+
+			Kiwi.Log.log('Kiwi.Files.DataFile: Data loaded is being parsed as XML.', '#loading', '#parsing');
+
+			if (window['DOMParser']) {
+
+				var parser = new DOMParser();
+				this.data = parser.parseFromString(data, "text/xml");
+
+			} else {
+
+				this.data = new ActiveXObject("Microsoft.XMLDOM");
+				this.data.async = "false";
+				this.data.loadXML(data);
+
+			}
+
+			if (!this.data || !this.data.documentElement || this.data.getElementsByTagName("parsererror").length) {
+				this.loadError('XML parse error.');
+			} else {
+				this.loadSuccess();
+			}
+		}
+
+		/**
+		* Attempts to parse a string which is assumed to be JSON. Called when 'parse' is set to true. 
+		* If valid 'loadSuccess' is called, otherwise 'loadError' is executed
+		*  
+		* @method processJSON
+		* @param data {String}
+		* @private 
+		*/
+		private processJSON( data:string ) {
+
+			Kiwi.Log.log('Kiwi.Files.DataFile: Data loaded is being parsed as JSON.', '#loading', '#parsing');
+
+			try {
+				this.data = JSON.parse(data);
+				this.loadSuccess();
+
+			} catch (e) {
+				this.loadError(e);
 
-            } catch (e) {
-                this.loadError(e);
-
-            }
+			}
 
-        }
+		}
 
-    }
+	}
 
-}  
\ No newline at end of file
+}
diff --git a/src/file/DataLibrary.ts b/src/file/DataLibrary.ts
index 5f08731..8eab3c0 100644
--- a/src/file/DataLibrary.ts
+++ b/src/file/DataLibrary.ts
@@ -4,112 +4,110 @@
 * @submodule Files 
 * @main Files
 */
- 
+
 module Kiwi.Files {
 
-    /**
-    * Holds a reference to all of the data Files (json, xml, e.t.c) that are accessible on the State that this DataLibrary is on.
-    *
-    * @class DataLibrary
-    * @namespace Kiwi.Files
-    * @constructor
-    * @param game {Kiwi.Game} The game that this DataLibrary belongs to.
-    * @return {Kiwi.Files.DataLibrary}
-    *
-    */
-    export class DataLibrary {
- 
-        constructor(game: Kiwi.Game) {
+	/**
+	* Holds a reference to all of the data Files (json, xml, e.t.c) that are accessible on the State that this DataLibrary is on.
+	*
+	* @class DataLibrary
+	* @namespace Kiwi.Files
+	* @constructor
+	* @param game {Kiwi.Game} The game that this DataLibrary belongs to.
+	* @return {Kiwi.Files.DataLibrary}
+	*
+	*/
+	export class DataLibrary {
 
-            this._game = game;
-            this.data = {};
-        }
+		constructor(game: Kiwi.Game) {
 
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} "DataLibrary"
-        * @public
-        */
-        public objType(): string {
-            return "DataLibrary";
-        }
+			this._game = game;
+			this.data = {};
+		}
 
-        /**
-        * The game that this DataLibrary belongs to.
-        * @property _game
-        * @type Kiwi.Game
-        * @private
-        */
-        private _game: Kiwi.Game;
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} "DataLibrary"
+		* @public
+		*/
+		public objType(): string {
+			return "DataLibrary";
+		}
 
-        /**
-        * Contains all of the data that this available.
-        * @property data
-        * @type Object
-        * @public
-        */
-        public data;
+		/**
+		* The game that this DataLibrary belongs to.
+		* @property _game
+		* @type Kiwi.Game
+		* @private
+		*/
+		private _game: Kiwi.Game;
 
-        /**
-        * Resets the Data Library and makes it ready for the next state.
-        * @method clear
-        * @public
-        */
-        public clear() {
-            for (var prop in this.data) {
-                delete this.data[prop];
-            }
-        }
+		/**
+		* Contains all of the data that this available.
+		* @property data
+		* @type Object
+		* @public
+		*/
+		public data;
 
-        /**
-        * Adds a new data file to the DataLibrary.
-        * @method add
-        * @param dataFile {Kiwi.Files.File} The File that is to be added.
-        * @public
-        */
-        public add(dataFile: Kiwi.Files.File) {
+		/**
+		* Resets the Data Library and makes it ready for the next state.
+		* @method clear
+		* @public
+		*/
+		public clear() {
+			for (var prop in this.data) {
+				delete this.data[prop];
+			}
+		}
 
-            switch (dataFile.dataType) {
-                case Kiwi.Files.File.JSON:
-                case Kiwi.Files.File.XML :
-                case Kiwi.Files.File.BINARY_DATA:
-                case Kiwi.Files.File.TEXT_DATA:
-                    
-                    this.data[dataFile.key] = dataFile;
-                    break;
-                
-                default:
-                   //Image file is of unknown type and was not added to data library
-                    break;
-            }
+		/**
+		* Adds a new data file to the DataLibrary.
+		* @method add
+		* @param dataFile {Kiwi.Files.File} The File that is to be added.
+		* @public
+		*/
+		public add(dataFile: Kiwi.Files.File) {
 
-        }
+			switch (dataFile.dataType) {
+				case Kiwi.Files.File.JSON:
+				case Kiwi.Files.File.XML :
+				case Kiwi.Files.File.BINARY_DATA:
+				case Kiwi.Files.File.TEXT_DATA:
+					
+					this.data[dataFile.key] = dataFile;
+					break;
+				
+				default:
+				   //Image file is of unknown type and was not added to data library
+					break;
+			}
 
-        /**
-       * Rebuild the library from a fileStore. Clears the library and repopulates it.
-       * @method rebuild
-       * @param fileStore {Kiwi.Files.FileStore} The fileStore which is being used 
-       * @param state {Kiwi.State} The State so that we know which DataLibrary to add the files tot.
-       * @public
-       */
-        public rebuild(fileStore: Kiwi.Files.FileStore, state: Kiwi.State) {
-            this.clear();
-            Kiwi.Log.log("Kiwi.DataLibrary: Rebuilding Data Library", '#rebuild');
-            
+		}
 
-            var fileStoreKeys = fileStore.keys;
-            for (var i = 0; i < fileStoreKeys.length; i++) {
-                var file: Kiwi.Files.File = this._game.fileStore.getFile(fileStoreKeys[i]);
-                if (file.isData) {
-                    Kiwi.Log.log("  Kiwi.DataLibrary: Adding Data: " + file.name, '#rebuild', '#adding');
-                    state.dataLibrary.add(file);
-                }
-            }
-        }
+		/**
+	   * Rebuild the library from a fileStore. Clears the library and repopulates it.
+	   * @method rebuild
+	   * @param fileStore {Kiwi.Files.FileStore} The fileStore which is being used 
+	   * @param state {Kiwi.State} The State so that we know which DataLibrary to add the files tot.
+	   * @public
+	   */
+		public rebuild(fileStore: Kiwi.Files.FileStore, state: Kiwi.State) {
+			this.clear();
+			Kiwi.Log.log("Kiwi.DataLibrary: Rebuilding Data Library", '#rebuild');
+			
 
-    
-    }
+			var fileStoreKeys = fileStore.keys;
+			for (var i = 0; i < fileStoreKeys.length; i++) {
+				var file: Kiwi.Files.File = this._game.fileStore.getFile(fileStoreKeys[i]);
+				if (file.isData) {
+					Kiwi.Log.log("  Kiwi.DataLibrary: Adding Data: " + file.name, '#rebuild', '#adding');
+					state.dataLibrary.add(file);
+				}
+			}
+		}
 
-}
+	}
 
+}
diff --git a/src/file/File.ts b/src/file/File.ts
index 6f9d840..152c698 100644
--- a/src/file/File.ts
+++ b/src/file/File.ts
@@ -4,1405 +4,1405 @@
 * @submodule Files 
 * 
 */
- 
+
 module Kiwi.Files {
-     
-    /**
-    * Base class which handles the loading of an external data file an xhr. 
-    * TextureFile, AudioFile contain fallback loading via tags and all extended Files contain methods for processing the files.
-    *
-    * Also can contain information about the file (like file size, last modified, e.t.c.)
-    * Uses an object literal in its constructor since 1.2 (which is preferred), but also contains previous construction support.
-    * 
-    * @class File
-    * @namespace Kiwi.Files
-    * @constructor
-    * @param game {Kiwi.Game} The game that this file is for
-    * @param params {Object} Options for this file.
-    *   @param params.key {String} User defined name for this file. This would be how the user would access it in the file store. 
-    *   @param params.url {String} Location of the file to be loaded.
-    *   @param {Object} [params.metadata={}] Any metadata to be associated with the file. 
-    *   @param [params.state=null] {Kiwi.State} The state that this file belongs to. Used for defining global assets vs local assets.
-    *   @param [params.fileStore=null] {Kiwi.Files.FileStore} The filestore that this file should be save in automatically when loaded.
-    *   @param [params.type=UNKNOWN] {Number} The type of file this is. 
-    *   @param [params.tags] {Array} Any tags to be associated with this file.
-    * @return {Kiwi.Files.File} 
-    *
-    */
-    export class File {
-         
-        constructor(game: Kiwi.Game, params:any) {
-
-            this.game = game;
-
-            this.onComplete = new Kiwi.Signal;
-
-            this.onProgress = new Kiwi.Signal;
-
-            if (Kiwi.Utils.Common.isNumeric(params)) {
-                //Deprecate
-                this._parseParamsOld(params, arguments[2], arguments[3], arguments[4], arguments[5]);
-
-            } else {
-
-                this.key = params.key;
-
-                this._assignFileDetails(params.url);
-
-                this.parseParams(params);
-
-            }
-
-
-        }
-
-        /**
-        * Assigns properties and variables for the constructor as in pre 1.2 Kiwi versions. 
-        * 
-        * @method _parseParamsOld
-        * @since 1.2.0
-        * @param dataType {Number} The type of file that is being loaded. For this you can use the STATIC properties that are located on this class for quick code completion.
-        * @param path {String} The location of the file that is to be loaded.
-        * @param [name=''] {String} A name for the file. If no name is specified then the files name will be used.
-        * @param [saveToFileStore=true] {Boolean} If the file should be saved on the file store or not.
-        * @param [storeAsGlobal=true] {Boolean} If this file should be stored as a global file, or if it should be destroyed when this state gets switched out.
-        * @private
-        */
-        private _parseParamsOld(dataType: number, url: string, name: string = '', saveToFileStore: boolean = true, storeAsGlobal: boolean = true) {
-
-            this.dataType = dataType;
-
-            this._assignFileDetails(url);
-
-            if (saveToFileStore) {
-                this.fileStore = this.game.fileStore;
-            }
-
-            if (this.game.states.current && !storeAsGlobal) {
-                this.ownerState = this.game.states.current;
-            }
-
-        }
-
-
-        /**
-        * Sets properties for this instance based on an object literal passed. Used when the class is being created.
-        *
-        * @method parseParams
-        * @since 1.2.0
-        * @param [params] {Object}
-        *   @param [params.metadata={}] {Object} Any metadata to be associated with the file. 
-        *   @param [params.state=null] {Kiwi.State} The state that this file belongs to. Used for defining global assets vs local assets.
-        *   @param [params.fileStore=null] {Kiwi.Files.FileStore} The filestore that this file should be save in automatically when loaded.
-        *   @param [params.type=UNKNOWN] {Number} The type of file this is. 
-        *   @param [params.tags] {Array} Any tags to be associated with this file.
-        * @protected 
-        */
-        protected parseParams(params: any) {
-
-            this.fileStore = params.fileStore || null;
-            this.ownerState = params.state || null;
-            this.metadata = params.metadata || {};
-
-            if (Kiwi.Utils.Common.isUndefined(params.type)) {
-                this.dataType = File.UNKNOWN;
-            } else {
-                this.dataType = params.type;
-            }
-
-            if (params.tags && Kiwi.Utils.Common.isArray(params.tags)) {
-
-                for (var i = 0; i < params.tags.length; i++) {
-                    this.addTag(params.tags[i]);
-                }
-
-            }
-
-        }
-
-        /**
-        * Gets the file details from the URL passed. Name, extension, and path are extracted.
-        *
-        * @method _assignFileDetails
-        * @param url {String}
-        * @private
-        * @since 1.2.0
-        */
-        private _assignFileDetails( url:string ) {
-
-            this.URL = url;
-
-            if ( url.lastIndexOf('/') > -1) {
-                this.name = url.substr( url.lastIndexOf('/') + 1 );
-                this.path = url.substr(0, url.lastIndexOf('/') + 1);
-
-            } else {
-                this.path = '';
-                this.name = url;
-
-            }
-            
-            //  Not safe if there is a query string after the file extension
-            this.extension = url.substr( url.lastIndexOf('.') + 1).toLowerCase();
-
-        }
-
-
-        /**
-        * Returns the type of this object
-        * @method objType
-        * @return {String} "File"
-        * @public
-        */
-        public objType() {
-            return "File";
-        }
-
-        /**
-        * The game that this file belongs to.
-        * @property game
-        * @type Kiwi.Game
-        * @since 1.2.0
-        * @public
-        */
-        public game: Kiwi.Game;
-
-
-        /**
-        * ---------------
-        * Generic Properties 
-        * ---------------
-        **/
-
-        /**
-        * Indicates if this file can be loaded in parallel to other files. 
-        * This is usually only used files are using the tag loaders and not XHR.
-        * 
-        * @property _loadInParallel
-        * @type Boolean
-        * @default false
-        * @since 1.2.0
-        * @private
-        */
-        protected _loadInParallel: boolean = false;
-        
-        /**
-        * READ ONLY: Indicates if this file can be loaded in parallel to other files. 
-        * This is usually only used files are using the tag loaders and not XHR.
-        * 
-        * @property loadInParallel
-        * @type Boolean
-        * @default false
-        * @readOnly
-        * @since 1.2.0
-        * @private
-        */
-        public get loadInParallel(): boolean {
-            return this._loadInParallel;
-        }
-
-        /**
-        * The filestore this file should be added to when it has loaded. 
-        * This can be replaced with a custom one if wanted.
-        * 
-        * @property fileStore
-        * @type Kiwi.Files.FileStore
-        * @since 1.2.0
-        * @public
-        */
-        public fileStore: Kiwi.Files.FileStore;
-
-        /**
-        * If this file is using tag loading instead of the XHR method. 
-        * Only used by extended classes
-        * 
-        * @property useTagLoader
-        * @type Boolean
-        * @since 1.2.0
-        * @protected
-        */
-        protected useTagLoader: boolean = false;
-        
-        /**
-        * The 'key' is the user defined name and the users way of accessing this file once loaded.
-        * @property key
-        * @type String
-        * @public
-    	*/
-        public key: string;
-        
-        /**
-        * A dictionary, stores any information relating to this file.
-        * Used when loading images that are to be used as a spritesheet or texture atlas.
-        * @property data
-        * @type Any
-        * @public
-    	*/
-        public metadata: any;
-        
-        /**
-        * Holds the type of data that is being loaded. 
-        * This should be used with the STATIC properties that hold the various datatypes that can be loaded.
-        *
-        * @property dataType
-        * @type String
-        * @public
-    	*/
-        public dataType: number;
-        
-
-        /**
-        * ---------------
-        * File Information
-        * ---------------
-        */
-        
-        /**
-        * The name of the file being loaded.
-        *
-        * @property name
-        * @type String
-        * @since 1.2.0
-    	* @public
-        */
-        public name: string;
-        
-        /**
-        * The location of where the file is placed without the file itself (So without the files name).
-        * Example: If the file you are load is located at 'images/awesomeImage.png' then the filepath will be 'images/'
-        *
-        * @property path
-        * @type String
-        * @since 1.2.0
-    	* @public
-        */
-        public path: string;
-        
-        /**
-        * The extension of the file that is being loaded.
-        * This is based upon what the file path that the developer specifies.
-        *
-        * @property extension
-        * @type String
-        * @since 1.2.0
-        * @public
-    	*/
-        public extension: string;
-        
-        /**
-        * The full filepath including the file itself.
-        *
-        * @property URL
-        * @type String
-        * @since 1.2.0
-        * @public
-    	*/
-        public URL: string;
-        
-        /**
-        * The type of file that is being loaded.
-        * Is only ever given a value when used with the XHR method of loading OR if you use 'loadDetails' before hand.
-        * The value is based off of the 'Content-Type' of the XHR's response header returns.
-        *
-        * @property type
-        * @type String
-        * @public
-    	*/
-        public type: string;
-        
-        /**
-        * The size of the file that was/is being loaded. 
-        * Only has a value when the file was loaded by the XHR method OR you request the file information beforehand using 'loadDetails'.
-        *
-        * @property size
-        * @type Number
-        * @default 0
-        * @since 1.2.0
-        * @public
-    	*/
-        public size: number = 0;
-
-        /**
-        * ---------------
-        * Callbacks
-        * ---------------
-        */
-
-        /**
-        * Signal which dispatches events when the file has successfully loaded. 
-        * 
-        * @property onComplete
-        * @type Kiwi.Signal
-        * @since 1.2.0
-        * @public
-        */
-        public onComplete: Kiwi.Signal;
-        
-        /**
-        * Signal which dispatches events when the file is loading. 
-        * Not guarenteed to dispatch events as it depends on the method of loading being performed
-        * 
-        * @property onProgress
-        * @type Kiwi.Signal
-        * @since 1.2.0
-        * @public
-        */
-        public onProgress: Kiwi.Signal;
-
-
-        /**
-        * ---------------
-        * Loading
-        * ---------------
-        **/
-        
-        /**
-        * The particular piece of data that the developer wanted loaded. This is in a format that is based upon the datatype passed.
-        * @property data
-        * @type Any
-        * @public
-    	*/
-        public data: any;
-          
-        /**
-        * The number of milliseconds that the XHR should wait before timing out.
-        * Set this to NULL if you want it to not timeout.
-        *
-        * @property timeOutDelay
-        * @type Number
-        * @default 4000
-        * @public
-        */
-        public timeOutDelay: number = Kiwi.Files.File.TIMEOUT_DELAY;
-        
-        /**
-        * The default number of milliseconds that the XHR should wait before timing out.
-        * Set this to NULL if you want it to not timeout.
-        *
-        * @property TIMEOUT_DELAY
-        * @type Number
-        * @static
-        * @since 1.2.0
-        * @public
-        */
-        public static TIMEOUT_DELAY: number = 4000;
-        
-        /**
-        * The number of attempts at loading there have currently been at loading the file.
-        * This is only used with XHR methods of loading.
-        * @property attemptCounter
-        * @type Number
-        * @protected
-        */
-        protected attemptCounter: number = 0;
-        
-        /**
-        * The maximum attempts at loading the file that there is allowed.
-        * @property maxLoadAttempts
-        * @type Number
-        * @default 2
-        * @public
-        */
-        public maxLoadAttempts: number = Kiwi.Files.File.MAX_LOAD_ATTEMPTS;
-        
-        /**
-        * The default maximum attempts at loading the file that there is allowed.
-        * @property MAX_LOAD_ATTEMPTS
-        * @type Number
-        * @default 2
-        * @static
-        * @since 1.2.0
-        * @public
-        */
-        public static MAX_LOAD_ATTEMPTS: number = 2;
-        
-        /**
-        * Starts the loading process for this file. 
-        * Passing parameters to this method has been deprecated and only exists for backwards compatibility.
-        * 
-        * @method load
-        * @public
-        */
-        public load(onCompleteCallback?: any, onProgressCallback?: any, customFileStore?: Kiwi.Files.FileStore, maxLoadAttempts?: number, timeout?: number) {
-
-            //Not currently loading?
-            if (this.loading) {
-                Kiwi.Log.error('Kiwi.Files.File: File loading is in progress. Cannot be told to load again.', '#loading');
-                return;
-            }
-
-            Kiwi.Log.log("Kiwi.Files.File: Starting to load '" + this.name + "'", '#file', '#loading');
-
-            //Set the variables based on the parameters passed
-            //To be deprecated
-            if (onCompleteCallback) this.onComplete.add( onCompleteCallback );
-            if (onProgressCallback) this.onProgress.add( onProgressCallback );
-            if (customFileStore) this.fileStore = customFileStore;
-            if (typeof maxLoadAttempts !== "undefined") this.maxLoadAttempts = maxLoadAttempts;
-            if (typeof timeout !== "undefined") this.timeOutDelay = timeout;
-
-            //Start Loading!!!
-            this._start();
-            this._load();
-        }
-
-
-        /**
-        * Increments the counter, and calls the approprate loading method.
-        * @method _load
-        * @since 1.2.0
-        * @protected
-        */
-        protected _load() {
-            this.attemptCounter++;
-            this.xhrLoader( 'GET', 'text' );
-        }
-
-
-        /**
-        * Should be called by the loading method. Dispatches the 'onProgress' callback.
-        * @method loadProgress
-        * @since 1.2.0
-        * @protected
-        */
-        protected loadProgress() {
-            this.onProgress.dispatch(this);
-        }
-
-
-        /**
-        * Called by the loading methods when the file has been loaded and successfully processed.
-        * Dispatches the 'onComplete' callback and sets the appropriate properties.
-        * @method loadSuccess
-        * @since 1.2.0
-        * @protected 
-        */ 
-        protected loadSuccess() {
-
-            //If already completed skip
-            if (this.complete) {
-                return;
-            }
-
-            this.success = true;
-            this.hasError = false;
-            this._stop();
-
-            if (this.fileStore) {
-                this.fileStore.addFile(this.key, this);
-            }
-
-            this.onComplete.dispatch(this);
-
-        }
-        
-        /**
-        * Executed when the loading process fails. 
-        * This could be for any reason
-        * 
-        * @method loadError
-        * @param error {Any} The event / reason for the file to not be loaded.
-        * @since 1.2.0
-        * @protected 
-        */ 
-        protected loadError(error: any) {
-
-            //Try again?
-            if (this.attemptCounter >= this.maxLoadAttempts) {
-                //Failed
-                Kiwi.Log.log("Kiwi.Files.File: Failed to load file '" + this.name + "'. Trying Again", '#loading');
-                this.hasError = true;
-                this.success = false;
-                this.error = error;
-                this._stop();
-                this.onComplete.dispatch(this);
-
-            } else {
-                Kiwi.Log.log("Kiwi.Files.File: Failed to load file '" + this.name + "'", '#loading');
-                //Try Again
-                this._load();
-            }
-
-        }
-
-        /**
-        * ---------------
-        * XHR Loading 
-        * ---------------
-        **/
-
-        /**
-        * Sets up a XHR loader based on the properties of this file and parameters passed.
-        * 
-        * @method xhrLoader
-        * @param [method="GET"] {String} The method this request should be made in.
-        * @param [responseType="text"] {String} The type of response we are expecting.
-        * @param [timeoutDelay] {Number} 
-        * @protected
-        */
-        protected xhrLoader(method: string = 'GET', responseType: string = 'text', timeoutDelay: number = this.timeOutDelay) {
-
-            this._xhr = new XMLHttpRequest();
-            this._xhr.open('GET', this.URL, true);
-
-            if (timeoutDelay !== null) {
-                this._xhr.timeout = timeoutDelay;
-            }
-
-            this._xhr.responseType = responseType;
-
-            this._xhr.onload = (event) => this.xhrOnLoad(event);
-            this._xhr.onerror = (event) => this.loadError(event);
-            this._xhr.onprogress = (event) => this.xhrOnProgress(event);
-
-            //Events to deprecate
-            this._xhr.onreadystatechange = (event) => function () {
-                this.readyState = this._xhr.readyState;
-            };
-
-            this._xhr.onloadstart = (event) => function (event) {
-                this.timeStarted = event.timeStamp;
-                this.lastProgress = event.timeStamp;
-            };
-
-            this._xhr.ontimeout = (event) => function (event) {
-                this.hasTimedOut = true;
-            };
-
-            this._xhr.send();
-
-        }
-
-        /**
-        * Progress event fired whilst the file is loading via XHR.
-        * @method xhrOnProgress
-        * @param event {Any}
-        * @protected
-        */
-        protected xhrOnProgress(event) {
-
-            this.bytesLoaded = parseInt(event.loaded);
-            this.bytesTotal = parseInt(event.total);
-            this.percentLoaded = Math.round((this.bytesLoaded / this.bytesTotal) * 100);
-
-            this.onProgress.dispatch(this);
-        }
-
-        /**
-        * Fired when the file has been loaded. 
-        * Checks that the response contains information before marking it as a success.
-        * 
-        * @method xhrOnLoad
-        * @param event {Any}
-        * @protected
-        */
-        protected xhrOnLoad(event) {
-
-            //Deprecate
-            this.status = this._xhr.status;
-            this.statusText = this._xhr.statusText;
-
-            // Easiest to just see if the response isn't null, and thus has data or not.
-            if (this._xhr.response) {
-                this._getXhrHeaderInfo();
-                this.buffer = this._xhr.response; //Deprecate
-                this.processXhr(this._xhr.response);
-
-            } else {
-                this.loadError(event);
-
-            }
-        }
-
-        /**
-        * Contains the logic for processing the information retrieved via XHR.
-        * Assigns the data property. 
-        * This method is also in charge of calling 'loadSuccess' (or 'loadError') when processing is complete. 
-        * 
-        * @method processXhr
-        * @param response 
-        * @protected
-        */
-        protected processXhr( response:any ) {
-            this.data = response;
-            this.loadSuccess();
-        }
-
-        /**
-        * The XMLHttpRequest object. This only has a value if the xhr method of load is being used, otherwise this is null.
-        * @property _xhr
-        * @type XMLHttpRequest
-        * @protected
-        */
-        protected _xhr: XMLHttpRequest;
-        
-        /**
-        * -----------------
-        * Loading Status
-        * -----------------
-        **/
-
-        /**
-        * The time at which the loading started. 
-        * @property timeStarted
-        * @type Number
-        * @default 0
-        * @public
-        */
-        public timeStarted: number = 0;
-
-        /**
-        * The time at which progress in loading the file was last occurred.
-        * Only contains a value when using XHR methods of loading.
-        * @property lastProgress
-        * @type Number
-        * @public
-    	*/
-        public lastProgress: number = 0;
-
-        /**
-        * The time at which the load finished.
-        * @property timeFinished
-        * @type Number
-        * @default 0
-        * @public
-        */
-        public timeFinished: number = 0;
-
-
-        /**
-        * The duration or how long it took to load the file. In milliseconds. 
-        * @property duration
-        * @type Number
-        * @default 0
-        * @public
-        */
-        public duration: number = 0;
-
-
-        /**
-        * Is executed when this file starts loading. 
-        * Gets the time and resets properties used in file loading.
-        * @method _start
-        * @private
-        */
-        private _start() {
-
-            this.attemptCounter = 0;
-            this.loading = true;
-            this.timeStarted = Date.now();
-            this.percentLoaded = 0;
-
-        }
-
-
-        /**
-        * Is executed when this file stops loading. 
-        * @method _stop
-        * @private
-        */
-        private _stop() {
-
-            this.loading = false;
-            this.complete = true;
-            this.percentLoaded = 100;
-            this.timeFinished = Date.now();
-            this.duration = this.timeFinished - this.timeStarted;
-
-        }
-
-        /**
-        * If file loading failed or encountered an error and so was not laoded
-        * @property hasError
-        * @type boolean
-        * @default false
-        * @public
-        */
-        public hasError: boolean = false;
-
-        /**
-        * Holds the error (if there was one) when loading the file.
-        * @property error
-        * @type Any
-        * @public
-        */
-        public error: any;
-
-        /**
-        * If loading was successful or not. 
-        * @property success
-        * @type boolean
-        * @public
-        */
-        public success: boolean = false;
-
-        /**
-        * Indication if the file is currently being loaded or not.
-        * @property loading
-        * @type boolean
-        * @public 
-        */
-        public loading: boolean = false;
-
-        /**
-        * Indicates if the file has attempted to load.
-        * This is regardless of whether it was a success or not.
-        * @property complete
-        * @type boolean
-        * @default false
-        * @public
-        */
-        public complete: boolean = false;
-
-        /**
-        * The amount of percent loaded the file is. This is out of 100.
-        * @property percentLoaded
-        * @type Number
-        * @public
-        */
-        public percentLoaded: number = 0;
-
-        /**
-        * The number of bytes that have currently been loaded. 
-        * Useful when wanting to know exactly how much data has been transferred.
-        * Only has a value when using the XHR method of loading.
-        * 
-        * @property bytesLoaded
-        * @type Number
-        * @default 0
-        * @public
-        */
-        public bytesLoaded: number = 0;
-
-
-        /**
-        * The total number of bytes that the file consists off.
-        * Only has a value when using the XHR method of loading 
-        * or you are getting the file details before hand.
-        *
-        * @property bytesTotal
-        * @type Number
-        * @default 0
-        * @public
-        */
-        public bytesTotal: number = 0;
-
-        /**
-        * --------------------
-        * XHR Header Information
-        * --------------------
-        **/
-
-        /**
-        * The callback method to be executed when the file details have been retrieved.
-        * @property headCompleteCallback
-        * @type Any
-        * @since 1.2.0
-        * @private
-        */
-        private headCompleteCallback: any;
-        
-        /**
-        * The context the 'headCompleteCallback' should be executed in..
-        * The callback is the following arguments. 
-        * 1. If the details were recieved
-        * 
-        * @property headCompleteContext
-        * @type Any
-        * @since 1.2.0
-        * @private
-        */
-        private headCompleteContext: any;
-
-        /**
-        * An indication of whether this files information has been retrieved or not.
-        * @property detailsReceived
-        * @type boolean
-        * @default false
-        * @since 1.2.0
-        * @public
-        */
-        public detailsReceived:boolean = false;
-
-        /**
-        * Makes a XHR HEAD request to get information about the file that is going to be downloaded.
-        * This is particularly useful when you are wanting to check how large a file is before loading all of the content. 
-        * 
-        * @method loadDetails
-        * @param [callback] {Any}
-        * @param [context] {Any}
-        * @return {Boolean} If the request was made
-        * @since 1.2.0
-        * @public
-        */
-        public loadDetails(callback:any=null, context:any=null) {
-
-            //Can't continue if regular loading is progressing.
-            if ( this.loading ) {
-                Kiwi.Log.error('Kiwi.Files.File: Cannot get the file details whilst the file is already loading');
-                return false;
-            }
-
-            if (callback) this.headCompleteCallback = callback;
-            if (context) this.headCompleteContext = context;
-
-            this.xhrHeadRequest();
-            return true;
-        }
-
-        /**
-        * Retrieves the HEAD information from the XHR. 
-        * This method is used for both 'load' and 'loadDetails' methods.
-        * 
-        * @method _getXhrHeaderInfo
-        * @since 1.2.0
-        * @private
-        */
-        private _getXhrHeaderInfo() {
-
-            if (!this._xhr) {
-                return;
-            }
-
-            this.status = this._xhr.status;
-            this.statusText = this._xhr.statusText;
-
-            //Get the file information...
-            this.type = this._xhr.getResponseHeader('Content-Type');
-            this.size = parseInt( this._xhr.getResponseHeader('Content-Length') );
-            this.lastModified = this._xhr.getResponseHeader('Last-Modified');
-            this.ETag = this._xhr.getResponseHeader('ETag');
-            this.detailsReceived = true;
-        }
-
-        /**
-        * Sets up a XMLHttpRequest object and sends a HEAD request.
-        * @method xhrHeadRequest
-        * @since 1.2.0
-        * @private
-        */
-        private xhrHeadRequest() {
-
-            this._xhr = new XMLHttpRequest();
-            this._xhr.open('HEAD', this.fileURL, true);
-            if (this.timeOutDelay !== null) this._xhr.timeout = this.timeOutDelay;
-
-            this._xhr.onload = (event) => this.xhrHeadOnLoad(event);
-            this._xhr.onerror = (event) => this.xhrHeadOnError(event);
-
-            this._xhr.send();
-        }
-
-        /**
-        * Executed when a xhr head request fails
-        * @method xhrHeadOnError
-        * @param event {Any}
-        * @private
-        */
-        private xhrHeadOnError(event) {
-
-            if (this.headCompleteCallback) {
-                this.headCompleteCallback.call(this.headCompleteContext, false);
-            }
-
-        }
-
-        /**
-        * Executed when a XHR head request has loaded.
-        * Checks that the status of the request is 200 before classifying it as a success.
-        * @method xhrHeadOnLoad
-        * @param event {Any}
-        * @private
-        */
-        private xhrHeadOnLoad(event) {
-
-            if (this._xhr.status === 200) {
-                this._getXhrHeaderInfo();
-
-                if (this.headCompleteCallback) {
-                    this.headCompleteCallback.call(this.headCompleteContext, true);
-                }
-            } else {
-                this.xhrHeadOnError(null);
-            }
-
-        }
-
-        /**
-        * --------------------
-        * MISC
-        * --------------------
-        **/
-
-        /**
-        * The Entity Tag that is assigned to the file. O
-        * Only has a value when either using the XHR loader OR when requesting the file details.
-        * @property ETag
-        * @type String
-        * @public
-        */
-        public ETag: string = '';
-
-        /**
-        * The last date/time that this file was last modified. 
-        * Only has a value when using the XHR method of loading OR when requesting the file details.
-        * @property lastModified
-        * @type String
-        * @default ''
-        * @public
-        */
-        public lastModified: string = ''; 
-
-
-        /**
-        * --------------------
-        * Tagging + State
-        * --------------------
-        **/
-
-        /**
-        * The state that added the entity - or null if it was added as global
-        * @property ownerState
-        * @type Kiwi.State
-        * @public
-        */
-        public ownerState: Kiwi.State;
-
-
-        /**
-        * Any tags that are on this file. This can be used to grab files/objects on the whole game that have these particular tag.
-        * @property _tags
-        * @type String[]
-        * @default []
-        * @private
-        */
-        private _tags: string[];
-
-
-        /**
-        * Adds a new tag to this file. 
-        * @method addTag
-        * @param tag {String} The tag that you would like to add
-        * @public
-        */
-        public addTag(tag: string) {
-            if (this._tags.indexOf(tag) == -1) {
-                this._tags.push(tag);
-            }
-        }
-
-
-        /**
-        * Removes a tag from this file.
-        * @method removeTag
-        * @param tag {String} The tag that is to be removed.
-        * @public
-        */
-        public removeTag(tag: string) {
-            var index: number = this._tags.indexOf(tag);
-            if (index != -1) {
-                this._tags.splice(index, 1);
-            }
-        }
-
-
-        /**
-        * Checks to see if a tag that is passed exists on this file.
-        * Returns a boolean that is used as a indication of the results. 
-        * True means that the tag exists on this file.
-        *
-        * @method hasTag
-        * @param tag {String} The tag you are checking to see exists.
-        * @return {Boolean} If the tag does exist on this file or not.
-        * @public
-        */
-        public hasTag(tag: string) {
-            if (this._tags.indexOf(tag) == -1) {
-                return false;
-            }
-            return true;
-
-        }
-
-        /**
-        * -------------------
-        * File Type
-        * -------------------
-        **/
-
-        /**
-        * A STATIC property that has the number associated with the IMAGE Datatype.
-        * @property IMAGE
-        * @type number
-        * @static
-        * @final
-        * @default 0
-        * @public
-        */
-        public static IMAGE: number = 0;
-
-
-        /**
-        * A STATIC property that has the number associated with the SPRITE_SHEET Datatype.
-        * @property SPRITE_SHEET
-        * @type number
-        * @static
-        * @final
-        * @default 1
-        * @public
-        */
-        public static SPRITE_SHEET: number = 1;
-
-
-        /**
-        * A STATIC property that has the number associated with the TEXTURE_ATLAS Datatype.
-        * @property TEXTUREATLAS
-        * @type number
-        * @static
-        * @final
-        * @default 2
-        * @public
-        */
-        public static TEXTURE_ATLAS: number = 2;
-
-
-        /**
-        * A STATIC property that has the number associated with the AUDIO Datatype.
-        * @property AUDIO
-        * @type number
-        * @static
-        * @final
-        * @default 3
-        * @public
-        */
-        public static AUDIO: number = 3;
-
-
-        /**
-        * A STATIC property that has the number associated with the JSON Datatype.
-        * @property JSON
-        * @type number
-        * @static
-        * @final
-        * @default 4
-        * @public
-        */
-        public static JSON: number = 4;
-
-
-        /**
-        * A STATIC property that has the number associated with the XML Datatype.
-        * @property XML
-        * @type number
-        * @static
-        * @final
-        * @default 5
-        * @public
-        */
-        public static XML: number = 5;
-
-
-        /**
-        * A STATIC property that has the number associated with the BINARY_DATA Datatype.
-        * @property BINARY_DATA
-        * @type number
-        * @static
-        * @final
-        * @default 6
-        * @public
-        */
-        public static BINARY_DATA: number = 6;
-
-
-        /**
-        * A STATIC property that has the number associated with the TEXT_DATA Datatype.
-        * @property TEXT_DATA
-        * @type number
-        * @static
-        * @final
-        * @default 7
-        * @public
-        */
-        public static TEXT_DATA: number = 7;
-
-        /**
-        * 
-        * @property UNKNOWN
-        * @type number
-        * @static
-        * @final 
-        * @default 8
-        * @public
-        */
-        public static UNKNOWN: number = 8;
-
-        /**
-        * An indication of if this file is texture. This is READ ONLY.
-        * @property isTexture
-        * @type boolean
-        * @readOnly
-        * @public
-        */
-        public get isTexture(): boolean {
-            return (Kiwi.Files.TextureFile.prototype.objType.call(this) === this.objType());
-        }
-
-
-        /**
-        * An indication of if this file is a piece of audio. This is READ ONLY.
-        * @property isAudio
-        * @type boolean
-        * @readOnly
-        * @public
-        */
-        public get isAudio(): boolean {
-            return (Kiwi.Files.AudioFile.prototype.objType.call(this) === this.objType());
-        }
-
-
-        /**
-        * An indication of if this file is data. This is READ ONLY.
-        * @property isData
-        * @type boolean
-        * @readOnly
-        * @public
-        */
-        public get isData(): boolean {
-            return (Kiwi.Files.DataFile.prototype.objType.call(this) === this.objType());
-        }
-
-        /**
-        * ------------------
-        * Clean Up
-        * ------------------
-        **/
-
-        /**
-        * Destroys all external object references on this object.
-        * @method destroy
-        * @since 1.2.0
-        * @public
-        */
-        public destroy() {
-            
-            if (this.fileStore) {
-                this.fileStore.removeFile(this.key);
-            }
-
-            this.onComplete.dispose();
-            this.onProgress.dispose();
-
-            delete this.fileStore;
-            delete this._xhr;
-            delete this.data;
-            delete this.buffer;
-            delete this.game;
-            delete this.error;
-            delete this.headCompleteCallback;
-            delete this.headCompleteContext;
-            delete this.onComplete;
-            delete this.onProgress;
-            delete this.ownerState;
-
-        }
-
-        /**
-        * ------------------
-        * Deprecated
-        * ------------------
-        **/
-
-        /**
-        * The name of the file being loaded.
-        * @property fileName
-        * @type String
-        * @deprecated Use `name`. Deprecated as of 1.2.0
-    	* @public
-        */
-        public get fileName(): string {
-            return this.name;
-        }
-        public set fileName(val:string) {
-            this.name = val;
-        }
-
-        /**
-        * The location of where the file is placed without the file itself (So without the files name).
-        * Example: If the file you are load is located at 'images/awesomeImage.png' then the filepath will be 'images/'
-        * @property filePath
-        * @type String
-        * @deprecated Use `path`. Deprecated as of 1.2.0
-        * @public
-        */
-        public get filePath(): string {
-            return this.path;
-        }
-        public set filePath(val: string) {
-            this.path = val;
-        }
-
-        /**
-        * The location of where the file is placed without the file itself (So without the files name).
-        * Example: If the file you are load is located at 'images/awesomeImage.png' then the filepath will be 'images/'
-        * @property filePath
-        * @type String
-        * @deprecated Use `extension`. Deprecated as of 1.2.0
-        * @public
-        */
-        public get fileExtension(): string {
-            return this.extension;
-        }
-        public set fileExtension(val: string) {
-            this.extension = val;
-        }
-
-        /**
-        * The full filepath including the file itself.
-        * @property fileURL
-        * @type String
-        * @deprecated Use `URL`. Deprecated as of 1.2.0
-        * @public
-    	*/
-        public get fileURL(): string {
-            return this.URL;
-        }
-        public set fileURL(val: string) {
-            this.URL = val;
-        }
-
-        /**
-        * The type of file that is being loaded.
-        * Is only ever given a value when used with the XHR method of loading OR if you use 'getFileDetails' before hand.
-        * The value is based off of the 'Content-Type' of the XHR's response header returns.
-        * @property fileType
-        * @type String
-        * @deprecated Use `type`. Deprecated as of 1.2.0
-        * @public
-        */
-        public get fileType():string {
-            return this.type;
-        }
-        public set fileType(val: string) {
-            this.type = val;
-        }
-
-        /**
-        * The size of the file that was/is being loaded. 
-        * Only has a value when the file was loaded by the XHR method OR you request the file information before hand using 'getFileDetails'.
-        * @property fileSize
-        * @type Number
-        * @deprecated Use `size`. Deprecated as of 1.2.0
-        * @public
-        */
-        public get fileSize(): number {
-            return this.size;
-        }
-        public set fileSize(val: number) {
-            this.size = val;
-        }
-        
-
-        /**
-        * A method that is to be executed when this file has finished loading. 
-        * @property onCompleteCallback
-        * @type Any
-        * @default null
-        * @deprecated Use `onComplete`. Deprecated as of 1.2.0
-        * @public
-        */
-        //public onCompleteCallback: any = null;
-
-
-        /**
-        * A method that is to be executed while this file is loading.
-        * @property onProgressCallback
-        * @type Any
-        * @default null
-        * @deprecated Use `onProgress`. Deprecated as of 1.2.0
-        * @public
-        */
-        //public onProgressCallback: any = null;
-
-
-        /**
-        * The status of this file that is being loaded. 
-        * Only used/has a value when the file was/is being loaded by the XHR method.
-        * @property status
-        * @type Number
-        * @default 0
-        * @deprecated Deprecated as of 1.2.0
-        * @public
-        */
-        public status: number = 0;
-
-
-        /**
-        * The status piece of text that the XHR returns.
-        * @property statusText
-        * @type String
-        * @default ''
-        * @deprecated Deprecated as of 1.2.0
-        * @public
-        */
-        public statusText: string = '';
-
-        /**
-        * The ready state of the XHR loader whilst loading.
-        * @property readyState
-        * @type Number
-        * @default 0
-        * @deprecated Deprecated as of 1.2.0
-        * @public
-        */
-        public readyState: number = 0;
-
-        /**
-        * If this file has timeout when it was loading. 
-        * @property hasTimedOut
-        * @type boolean
-        * @default false
-        * @deprecated Deprecated as of 1.2.0
-        * @public
-        */
-        public hasTimedOut: boolean = false;
-
-        /**
-        * If the file timed out or not.
-        * @property timedOut
-        * @type Number
-        * @default 0
-        * @deprecated Deprecated as of 1.2.0
-        * @public
-        */
-        public timedOut: number = 0;
-
-        /**
-        * The response that is given by the XHR loader when loading is complete.
-        * @property buffer
-        * @type Any
-        * @deprecated Use 'data' instead. Deprecated as of 1.2.0
-        * @public
-        */
-        public buffer: any;
-
-
-        /**
-        * Attempts to make the file send a XHR HEAD request to get information about the file that is going to be downloaded.
-        * This is particularly useful when you are wanting to check how large a file is before loading all of the content. 
-        * @method getFileDetails
-        * @param [callback=null] {Any} The callback to send this FileInfo object to.
-        * @param [maxLoadAttempts=1] {number} The maximum amount of load attempts. Only set this if it is different from the default.
-        * @param [timeout=this.timeOutDelay] {number} The timeout delay. By default this is the same as the timeout delay property set on this file.
-        * @deprecated Use 'loadDetails' instead. Deprecated as of 1.2.0
-        * @private
-        */
-        public getFileDetails(callback: any = null, maxLoadAttempts?: number, timeout: number = null) {
-            
-            if (timeout) this.timeOutDelay = timeout;
-
-            this.loadDetails(callback, null);
-        }
-
-    }
+
+	/**
+	* Base class which handles the loading of an external data file an xhr. 
+	* TextureFile, AudioFile contain fallback loading via tags and all extended Files contain methods for processing the files.
+	*
+	* Also can contain information about the file (like file size, last modified, e.t.c.)
+	* Uses an object literal in its constructor since 1.2 (which is preferred), but also contains previous construction support.
+	* 
+	* @class File
+	* @namespace Kiwi.Files
+	* @constructor
+	* @param game {Kiwi.Game} The game that this file is for
+	* @param params {Object} Options for this file.
+	*   @param params.key {String} User defined name for this file. This would be how the user would access it in the file store. 
+	*   @param params.url {String} Location of the file to be loaded.
+	*   @param {Object} [params.metadata={}] Any metadata to be associated with the file. 
+	*   @param [params.state=null] {Kiwi.State} The state that this file belongs to. Used for defining global assets vs local assets.
+	*   @param [params.fileStore=null] {Kiwi.Files.FileStore} The filestore that this file should be save in automatically when loaded.
+	*   @param [params.type=UNKNOWN] {Number} The type of file this is. 
+	*   @param [params.tags] {Array} Any tags to be associated with this file.
+	* @return {Kiwi.Files.File} 
+	*
+	*/
+	export class File {
+
+		constructor(game: Kiwi.Game, params:any) {
+
+			this.game = game;
+
+			this.onComplete = new Kiwi.Signal;
+
+			this.onProgress = new Kiwi.Signal;
+
+			if (Kiwi.Utils.Common.isNumeric(params)) {
+				//Deprecate
+				this._parseParamsOld(params, arguments[2], arguments[3], arguments[4], arguments[5]);
+
+			} else {
+
+				this.key = params.key;
+
+				this._assignFileDetails(params.url);
+
+				this.parseParams(params);
+
+			}
+
+
+		}
+
+		/**
+		* Assigns properties and variables for the constructor as in pre 1.2 Kiwi versions. 
+		* 
+		* @method _parseParamsOld
+		* @since 1.2.0
+		* @param dataType {Number} The type of file that is being loaded. For this you can use the STATIC properties that are located on this class for quick code completion.
+		* @param path {String} The location of the file that is to be loaded.
+		* @param [name=''] {String} A name for the file. If no name is specified then the files name will be used.
+		* @param [saveToFileStore=true] {Boolean} If the file should be saved on the file store or not.
+		* @param [storeAsGlobal=true] {Boolean} If this file should be stored as a global file, or if it should be destroyed when this state gets switched out.
+		* @private
+		*/
+		private _parseParamsOld(dataType: number, url: string, name: string = '', saveToFileStore: boolean = true, storeAsGlobal: boolean = true) {
+
+			this.dataType = dataType;
+
+			this._assignFileDetails(url);
+
+			if (saveToFileStore) {
+				this.fileStore = this.game.fileStore;
+			}
+
+			if (this.game.states.current && !storeAsGlobal) {
+				this.ownerState = this.game.states.current;
+			}
+
+		}
+
+
+		/**
+		* Sets properties for this instance based on an object literal passed. Used when the class is being created.
+		*
+		* @method parseParams
+		* @since 1.2.0
+		* @param [params] {Object}
+		*   @param [params.metadata={}] {Object} Any metadata to be associated with the file. 
+		*   @param [params.state=null] {Kiwi.State} The state that this file belongs to. Used for defining global assets vs local assets.
+		*   @param [params.fileStore=null] {Kiwi.Files.FileStore} The filestore that this file should be save in automatically when loaded.
+		*   @param [params.type=UNKNOWN] {Number} The type of file this is. 
+		*   @param [params.tags] {Array} Any tags to be associated with this file.
+		* @protected 
+		*/
+		protected parseParams(params: any) {
+
+			this.fileStore = params.fileStore || null;
+			this.ownerState = params.state || null;
+			this.metadata = params.metadata || {};
+
+			if (Kiwi.Utils.Common.isUndefined(params.type)) {
+				this.dataType = File.UNKNOWN;
+			} else {
+				this.dataType = params.type;
+			}
+
+			if (params.tags && Kiwi.Utils.Common.isArray(params.tags)) {
+
+				for (var i = 0; i < params.tags.length; i++) {
+					this.addTag(params.tags[i]);
+				}
+
+			}
+
+		}
+
+		/**
+		* Gets the file details from the URL passed. Name, extension, and path are extracted.
+		*
+		* @method _assignFileDetails
+		* @param url {String}
+		* @private
+		* @since 1.2.0
+		*/
+		private _assignFileDetails( url:string ) {
+
+			this.URL = url;
+
+			if ( url.lastIndexOf('/') > -1) {
+				this.name = url.substr( url.lastIndexOf('/') + 1 );
+				this.path = url.substr(0, url.lastIndexOf('/') + 1);
+
+			} else {
+				this.path = '';
+				this.name = url;
+
+			}
+			
+			//  Not safe if there is a query string after the file extension
+			this.extension = url.substr( url.lastIndexOf('.') + 1).toLowerCase();
+
+		}
+
+
+		/**
+		* Returns the type of this object
+		* @method objType
+		* @return {String} "File"
+		* @public
+		*/
+		public objType() {
+			return "File";
+		}
+
+		/**
+		* The game that this file belongs to.
+		* @property game
+		* @type Kiwi.Game
+		* @since 1.2.0
+		* @public
+		*/
+		public game: Kiwi.Game;
+
+
+		/**
+		* ---------------
+		* Generic Properties 
+		* ---------------
+		**/
+
+		/**
+		* Indicates if this file can be loaded in parallel to other files. 
+		* This is usually only used files are using the tag loaders and not XHR.
+		* 
+		* @property _loadInParallel
+		* @type Boolean
+		* @default false
+		* @since 1.2.0
+		* @private
+		*/
+		protected _loadInParallel: boolean = false;
+
+		/**
+		* READ ONLY: Indicates if this file can be loaded in parallel to other files. 
+		* This is usually only used files are using the tag loaders and not XHR.
+		* 
+		* @property loadInParallel
+		* @type Boolean
+		* @default false
+		* @readOnly
+		* @since 1.2.0
+		* @private
+		*/
+		public get loadInParallel(): boolean {
+			return this._loadInParallel;
+		}
+
+		/**
+		* The filestore this file should be added to when it has loaded. 
+		* This can be replaced with a custom one if wanted.
+		* 
+		* @property fileStore
+		* @type Kiwi.Files.FileStore
+		* @since 1.2.0
+		* @public
+		*/
+		public fileStore: Kiwi.Files.FileStore;
+
+		/**
+		* If this file is using tag loading instead of the XHR method. 
+		* Only used by extended classes
+		* 
+		* @property useTagLoader
+		* @type Boolean
+		* @since 1.2.0
+		* @protected
+		*/
+		protected useTagLoader: boolean = false;
+
+		/**
+		* The 'key' is the user defined name and the users way of accessing this file once loaded.
+		* @property key
+		* @type String
+		* @public
+		*/
+		public key: string;
+
+		/**
+		* A dictionary, stores any information relating to this file.
+		* Used when loading images that are to be used as a spritesheet or texture atlas.
+		* @property data
+		* @type Any
+		* @public
+		*/
+		public metadata: any;
+
+		/**
+		* Holds the type of data that is being loaded. 
+		* This should be used with the STATIC properties that hold the various datatypes that can be loaded.
+		*
+		* @property dataType
+		* @type String
+		* @public
+		*/
+		public dataType: number;
+
+
+		/**
+		* ---------------
+		* File Information
+		* ---------------
+		*/
+
+		/**
+		* The name of the file being loaded.
+		*
+		* @property name
+		* @type String
+		* @since 1.2.0
+		* @public
+		*/
+		public name: string;
+
+		/**
+		* The location of where the file is placed without the file itself (So without the files name).
+		* Example: If the file you are load is located at 'images/awesomeImage.png' then the filepath will be 'images/'
+		*
+		* @property path
+		* @type String
+		* @since 1.2.0
+		* @public
+		*/
+		public path: string;
+
+		/**
+		* The extension of the file that is being loaded.
+		* This is based upon what the file path that the developer specifies.
+		*
+		* @property extension
+		* @type String
+		* @since 1.2.0
+		* @public
+		*/
+		public extension: string;
+
+		/**
+		* The full filepath including the file itself.
+		*
+		* @property URL
+		* @type String
+		* @since 1.2.0
+		* @public
+		*/
+		public URL: string;
+
+		/**
+		* The type of file that is being loaded.
+		* Is only ever given a value when used with the XHR method of loading OR if you use 'loadDetails' before hand.
+		* The value is based off of the 'Content-Type' of the XHR's response header returns.
+		*
+		* @property type
+		* @type String
+		* @public
+		*/
+		public type: string;
+
+		/**
+		* The size of the file that was/is being loaded. 
+		* Only has a value when the file was loaded by the XHR method OR you request the file information beforehand using 'loadDetails'.
+		*
+		* @property size
+		* @type Number
+		* @default 0
+		* @since 1.2.0
+		* @public
+		*/
+		public size: number = 0;
+
+		/**
+		* ---------------
+		* Callbacks
+		* ---------------
+		*/
+
+		/**
+		* Signal which dispatches events when the file has successfully loaded. 
+		* 
+		* @property onComplete
+		* @type Kiwi.Signal
+		* @since 1.2.0
+		* @public
+		*/
+		public onComplete: Kiwi.Signal;
+
+		/**
+		* Signal which dispatches events when the file is loading. 
+		* Not guarenteed to dispatch events as it depends on the method of loading being performed
+		* 
+		* @property onProgress
+		* @type Kiwi.Signal
+		* @since 1.2.0
+		* @public
+		*/
+		public onProgress: Kiwi.Signal;
+
+
+		/**
+		* ---------------
+		* Loading
+		* ---------------
+		**/
+
+		/**
+		* The particular piece of data that the developer wanted loaded. This is in a format that is based upon the datatype passed.
+		* @property data
+		* @type Any
+		* @public
+		*/
+		public data: any;
+
+		/**
+		* The number of milliseconds that the XHR should wait before timing out.
+		* Set this to NULL if you want it to not timeout.
+		*
+		* @property timeOutDelay
+		* @type Number
+		* @default 4000
+		* @public
+		*/
+		public timeOutDelay: number = Kiwi.Files.File.TIMEOUT_DELAY;
+
+		/**
+		* The default number of milliseconds that the XHR should wait before timing out.
+		* Set this to NULL if you want it to not timeout.
+		*
+		* @property TIMEOUT_DELAY
+		* @type Number
+		* @static
+		* @since 1.2.0
+		* @public
+		*/
+		public static TIMEOUT_DELAY: number = 4000;
+
+		/**
+		* The number of attempts at loading there have currently been at loading the file.
+		* This is only used with XHR methods of loading.
+		* @property attemptCounter
+		* @type Number
+		* @protected
+		*/
+		protected attemptCounter: number = 0;
+
+		/**
+		* The maximum attempts at loading the file that there is allowed.
+		* @property maxLoadAttempts
+		* @type Number
+		* @default 2
+		* @public
+		*/
+		public maxLoadAttempts: number = Kiwi.Files.File.MAX_LOAD_ATTEMPTS;
+
+		/**
+		* The default maximum attempts at loading the file that there is allowed.
+		* @property MAX_LOAD_ATTEMPTS
+		* @type Number
+		* @default 2
+		* @static
+		* @since 1.2.0
+		* @public
+		*/
+		public static MAX_LOAD_ATTEMPTS: number = 2;
+
+		/**
+		* Starts the loading process for this file. 
+		* Passing parameters to this method has been deprecated and only exists for backwards compatibility.
+		* 
+		* @method load
+		* @public
+		*/
+		public load(onCompleteCallback?: any, onProgressCallback?: any, customFileStore?: Kiwi.Files.FileStore, maxLoadAttempts?: number, timeout?: number) {
+
+			//Not currently loading?
+			if (this.loading) {
+				Kiwi.Log.error('Kiwi.Files.File: File loading is in progress. Cannot be told to load again.', '#loading');
+				return;
+			}
+
+			Kiwi.Log.log("Kiwi.Files.File: Starting to load '" + this.name + "'", '#file', '#loading');
+
+			//Set the variables based on the parameters passed
+			//To be deprecated
+			if (onCompleteCallback) this.onComplete.add( onCompleteCallback );
+			if (onProgressCallback) this.onProgress.add( onProgressCallback );
+			if (customFileStore) this.fileStore = customFileStore;
+			if (typeof maxLoadAttempts !== "undefined") this.maxLoadAttempts = maxLoadAttempts;
+			if (typeof timeout !== "undefined") this.timeOutDelay = timeout;
+
+			//Start Loading!!!
+			this._start();
+			this._load();
+		}
+
+
+		/**
+		* Increments the counter, and calls the approprate loading method.
+		* @method _load
+		* @since 1.2.0
+		* @protected
+		*/
+		protected _load() {
+			this.attemptCounter++;
+			this.xhrLoader( 'GET', 'text' );
+		}
+
+
+		/**
+		* Should be called by the loading method. Dispatches the 'onProgress' callback.
+		* @method loadProgress
+		* @since 1.2.0
+		* @protected
+		*/
+		protected loadProgress() {
+			this.onProgress.dispatch(this);
+		}
+
+
+		/**
+		* Called by the loading methods when the file has been loaded and successfully processed.
+		* Dispatches the 'onComplete' callback and sets the appropriate properties.
+		* @method loadSuccess
+		* @since 1.2.0
+		* @protected 
+		*/ 
+		protected loadSuccess() {
+
+			//If already completed skip
+			if (this.complete) {
+				return;
+			}
+
+			this.success = true;
+			this.hasError = false;
+			this._stop();
+
+			if (this.fileStore) {
+				this.fileStore.addFile(this.key, this);
+			}
+
+			this.onComplete.dispatch(this);
+
+		}
+		
+		/**
+		* Executed when the loading process fails. 
+		* This could be for any reason
+		* 
+		* @method loadError
+		* @param error {Any} The event / reason for the file to not be loaded.
+		* @since 1.2.0
+		* @protected 
+		*/ 
+		protected loadError(error: any) {
+
+			//Try again?
+			if (this.attemptCounter >= this.maxLoadAttempts) {
+				//Failed
+				Kiwi.Log.log("Kiwi.Files.File: Failed to load file '" + this.name + "'. Trying Again", '#loading');
+				this.hasError = true;
+				this.success = false;
+				this.error = error;
+				this._stop();
+				this.onComplete.dispatch(this);
+
+			} else {
+				Kiwi.Log.log("Kiwi.Files.File: Failed to load file '" + this.name + "'", '#loading');
+				//Try Again
+				this._load();
+			}
+
+		}
+
+		/**
+		* ---------------
+		* XHR Loading 
+		* ---------------
+		**/
+
+		/**
+		* Sets up a XHR loader based on the properties of this file and parameters passed.
+		* 
+		* @method xhrLoader
+		* @param [method="GET"] {String} The method this request should be made in.
+		* @param [responseType="text"] {String} The type of response we are expecting.
+		* @param [timeoutDelay] {Number} 
+		* @protected
+		*/
+		protected xhrLoader(method: string = 'GET', responseType: string = 'text', timeoutDelay: number = this.timeOutDelay) {
+
+			this._xhr = new XMLHttpRequest();
+			this._xhr.open('GET', this.URL, true);
+
+			if (timeoutDelay !== null) {
+				this._xhr.timeout = timeoutDelay;
+			}
+
+			this._xhr.responseType = responseType;
+
+			this._xhr.onload = (event) => this.xhrOnLoad(event);
+			this._xhr.onerror = (event) => this.loadError(event);
+			this._xhr.onprogress = (event) => this.xhrOnProgress(event);
+
+			//Events to deprecate
+			this._xhr.onreadystatechange = (event) => function () {
+				this.readyState = this._xhr.readyState;
+			};
+
+			this._xhr.onloadstart = (event) => function (event) {
+				this.timeStarted = event.timeStamp;
+				this.lastProgress = event.timeStamp;
+			};
+
+			this._xhr.ontimeout = (event) => function (event) {
+				this.hasTimedOut = true;
+			};
+
+			this._xhr.send();
+
+		}
+
+		/**
+		* Progress event fired whilst the file is loading via XHR.
+		* @method xhrOnProgress
+		* @param event {Any}
+		* @protected
+		*/
+		protected xhrOnProgress(event) {
+
+			this.bytesLoaded = parseInt(event.loaded);
+			this.bytesTotal = parseInt(event.total);
+			this.percentLoaded = Math.round((this.bytesLoaded / this.bytesTotal) * 100);
+
+			this.onProgress.dispatch(this);
+		}
+
+		/**
+		* Fired when the file has been loaded. 
+		* Checks that the response contains information before marking it as a success.
+		* 
+		* @method xhrOnLoad
+		* @param event {Any}
+		* @protected
+		*/
+		protected xhrOnLoad(event) {
+
+			//Deprecate
+			this.status = this._xhr.status;
+			this.statusText = this._xhr.statusText;
+
+			// Easiest to just see if the response isn't null, and thus has data or not.
+			if (this._xhr.response) {
+				this._getXhrHeaderInfo();
+				this.buffer = this._xhr.response; //Deprecate
+				this.processXhr(this._xhr.response);
+
+			} else {
+				this.loadError(event);
+
+			}
+		}
+
+		/**
+		* Contains the logic for processing the information retrieved via XHR.
+		* Assigns the data property. 
+		* This method is also in charge of calling 'loadSuccess' (or 'loadError') when processing is complete. 
+		* 
+		* @method processXhr
+		* @param response 
+		* @protected
+		*/
+		protected processXhr( response:any ) {
+			this.data = response;
+			this.loadSuccess();
+		}
+
+		/**
+		* The XMLHttpRequest object. This only has a value if the xhr method of load is being used, otherwise this is null.
+		* @property _xhr
+		* @type XMLHttpRequest
+		* @protected
+		*/
+		protected _xhr: XMLHttpRequest;
+		
+		/**
+		* -----------------
+		* Loading Status
+		* -----------------
+		**/
+
+		/**
+		* The time at which the loading started. 
+		* @property timeStarted
+		* @type Number
+		* @default 0
+		* @public
+		*/
+		public timeStarted: number = 0;
+
+		/**
+		* The time at which progress in loading the file was last occurred.
+		* Only contains a value when using XHR methods of loading.
+		* @property lastProgress
+		* @type Number
+		* @public
+		*/
+		public lastProgress: number = 0;
+
+		/**
+		* The time at which the load finished.
+		* @property timeFinished
+		* @type Number
+		* @default 0
+		* @public
+		*/
+		public timeFinished: number = 0;
+
+
+		/**
+		* The duration or how long it took to load the file. In milliseconds. 
+		* @property duration
+		* @type Number
+		* @default 0
+		* @public
+		*/
+		public duration: number = 0;
+
+
+		/**
+		* Is executed when this file starts loading. 
+		* Gets the time and resets properties used in file loading.
+		* @method _start
+		* @private
+		*/
+		private _start() {
+
+			this.attemptCounter = 0;
+			this.loading = true;
+			this.timeStarted = Date.now();
+			this.percentLoaded = 0;
+
+		}
+
+
+		/**
+		* Is executed when this file stops loading. 
+		* @method _stop
+		* @private
+		*/
+		private _stop() {
+
+			this.loading = false;
+			this.complete = true;
+			this.percentLoaded = 100;
+			this.timeFinished = Date.now();
+			this.duration = this.timeFinished - this.timeStarted;
+
+		}
+
+		/**
+		* If file loading failed or encountered an error and so was not laoded
+		* @property hasError
+		* @type boolean
+		* @default false
+		* @public
+		*/
+		public hasError: boolean = false;
+
+		/**
+		* Holds the error (if there was one) when loading the file.
+		* @property error
+		* @type Any
+		* @public
+		*/
+		public error: any;
+
+		/**
+		* If loading was successful or not. 
+		* @property success
+		* @type boolean
+		* @public
+		*/
+		public success: boolean = false;
+
+		/**
+		* Indication if the file is currently being loaded or not.
+		* @property loading
+		* @type boolean
+		* @public 
+		*/
+		public loading: boolean = false;
+
+		/**
+		* Indicates if the file has attempted to load.
+		* This is regardless of whether it was a success or not.
+		* @property complete
+		* @type boolean
+		* @default false
+		* @public
+		*/
+		public complete: boolean = false;
+
+		/**
+		* The amount of percent loaded the file is. This is out of 100.
+		* @property percentLoaded
+		* @type Number
+		* @public
+		*/
+		public percentLoaded: number = 0;
+
+		/**
+		* The number of bytes that have currently been loaded. 
+		* Useful when wanting to know exactly how much data has been transferred.
+		* Only has a value when using the XHR method of loading.
+		* 
+		* @property bytesLoaded
+		* @type Number
+		* @default 0
+		* @public
+		*/
+		public bytesLoaded: number = 0;
+
+
+		/**
+		* The total number of bytes that the file consists off.
+		* Only has a value when using the XHR method of loading 
+		* or you are getting the file details before hand.
+		*
+		* @property bytesTotal
+		* @type Number
+		* @default 0
+		* @public
+		*/
+		public bytesTotal: number = 0;
+
+		/**
+		* --------------------
+		* XHR Header Information
+		* --------------------
+		**/
+
+		/**
+		* The callback method to be executed when the file details have been retrieved.
+		* @property headCompleteCallback
+		* @type Any
+		* @since 1.2.0
+		* @private
+		*/
+		private headCompleteCallback: any;
+
+		/**
+		* The context the 'headCompleteCallback' should be executed in..
+		* The callback is the following arguments. 
+		* 1. If the details were recieved
+		* 
+		* @property headCompleteContext
+		* @type Any
+		* @since 1.2.0
+		* @private
+		*/
+		private headCompleteContext: any;
+
+		/**
+		* An indication of whether this files information has been retrieved or not.
+		* @property detailsReceived
+		* @type boolean
+		* @default false
+		* @since 1.2.0
+		* @public
+		*/
+		public detailsReceived:boolean = false;
+
+		/**
+		* Makes a XHR HEAD request to get information about the file that is going to be downloaded.
+		* This is particularly useful when you are wanting to check how large a file is before loading all of the content. 
+		* 
+		* @method loadDetails
+		* @param [callback] {Any}
+		* @param [context] {Any}
+		* @return {Boolean} If the request was made
+		* @since 1.2.0
+		* @public
+		*/
+		public loadDetails(callback:any=null, context:any=null) {
+
+			//Can't continue if regular loading is progressing.
+			if ( this.loading ) {
+				Kiwi.Log.error('Kiwi.Files.File: Cannot get the file details whilst the file is already loading');
+				return false;
+			}
+
+			if (callback) this.headCompleteCallback = callback;
+			if (context) this.headCompleteContext = context;
+
+			this.xhrHeadRequest();
+			return true;
+		}
+
+		/**
+		* Retrieves the HEAD information from the XHR. 
+		* This method is used for both 'load' and 'loadDetails' methods.
+		* 
+		* @method _getXhrHeaderInfo
+		* @since 1.2.0
+		* @private
+		*/
+		private _getXhrHeaderInfo() {
+
+			if (!this._xhr) {
+				return;
+			}
+
+			this.status = this._xhr.status;
+			this.statusText = this._xhr.statusText;
+
+			//Get the file information...
+			this.type = this._xhr.getResponseHeader('Content-Type');
+			this.size = parseInt( this._xhr.getResponseHeader('Content-Length') );
+			this.lastModified = this._xhr.getResponseHeader('Last-Modified');
+			this.ETag = this._xhr.getResponseHeader('ETag');
+			this.detailsReceived = true;
+		}
+
+		/**
+		* Sets up a XMLHttpRequest object and sends a HEAD request.
+		* @method xhrHeadRequest
+		* @since 1.2.0
+		* @private
+		*/
+		private xhrHeadRequest() {
+
+			this._xhr = new XMLHttpRequest();
+			this._xhr.open('HEAD', this.fileURL, true);
+			if (this.timeOutDelay !== null) this._xhr.timeout = this.timeOutDelay;
+
+			this._xhr.onload = (event) => this.xhrHeadOnLoad(event);
+			this._xhr.onerror = (event) => this.xhrHeadOnError(event);
+
+			this._xhr.send();
+		}
+
+		/**
+		* Executed when a xhr head request fails
+		* @method xhrHeadOnError
+		* @param event {Any}
+		* @private
+		*/
+		private xhrHeadOnError(event) {
+
+			if (this.headCompleteCallback) {
+				this.headCompleteCallback.call(this.headCompleteContext, false);
+			}
+
+		}
+
+		/**
+		* Executed when a XHR head request has loaded.
+		* Checks that the status of the request is 200 before classifying it as a success.
+		* @method xhrHeadOnLoad
+		* @param event {Any}
+		* @private
+		*/
+		private xhrHeadOnLoad(event) {
+
+			if (this._xhr.status === 200) {
+				this._getXhrHeaderInfo();
+
+				if (this.headCompleteCallback) {
+					this.headCompleteCallback.call(this.headCompleteContext, true);
+				}
+			} else {
+				this.xhrHeadOnError(null);
+			}
+
+		}
+
+		/**
+		* --------------------
+		* MISC
+		* --------------------
+		**/
+
+		/**
+		* The Entity Tag that is assigned to the file. O
+		* Only has a value when either using the XHR loader OR when requesting the file details.
+		* @property ETag
+		* @type String
+		* @public
+		*/
+		public ETag: string = '';
+
+		/**
+		* The last date/time that this file was last modified. 
+		* Only has a value when using the XHR method of loading OR when requesting the file details.
+		* @property lastModified
+		* @type String
+		* @default ''
+		* @public
+		*/
+		public lastModified: string = ''; 
+
+
+		/**
+		* --------------------
+		* Tagging + State
+		* --------------------
+		**/
+
+		/**
+		* The state that added the entity - or null if it was added as global
+		* @property ownerState
+		* @type Kiwi.State
+		* @public
+		*/
+		public ownerState: Kiwi.State;
+
+
+		/**
+		* Any tags that are on this file. This can be used to grab files/objects on the whole game that have these particular tag.
+		* @property _tags
+		* @type String[]
+		* @default []
+		* @private
+		*/
+		private _tags: string[];
+
+
+		/**
+		* Adds a new tag to this file. 
+		* @method addTag
+		* @param tag {String} The tag that you would like to add
+		* @public
+		*/
+		public addTag(tag: string) {
+			if (this._tags.indexOf(tag) == -1) {
+				this._tags.push(tag);
+			}
+		}
+
+
+		/**
+		* Removes a tag from this file.
+		* @method removeTag
+		* @param tag {String} The tag that is to be removed.
+		* @public
+		*/
+		public removeTag(tag: string) {
+			var index: number = this._tags.indexOf(tag);
+			if (index != -1) {
+				this._tags.splice(index, 1);
+			}
+		}
+
+
+		/**
+		* Checks to see if a tag that is passed exists on this file.
+		* Returns a boolean that is used as a indication of the results. 
+		* True means that the tag exists on this file.
+		*
+		* @method hasTag
+		* @param tag {String} The tag you are checking to see exists.
+		* @return {Boolean} If the tag does exist on this file or not.
+		* @public
+		*/
+		public hasTag(tag: string) {
+			if (this._tags.indexOf(tag) == -1) {
+				return false;
+			}
+			return true;
+
+		}
+
+		/**
+		* -------------------
+		* File Type
+		* -------------------
+		**/
+
+		/**
+		* A STATIC property that has the number associated with the IMAGE Datatype.
+		* @property IMAGE
+		* @type number
+		* @static
+		* @final
+		* @default 0
+		* @public
+		*/
+		public static IMAGE: number = 0;
+
+
+		/**
+		* A STATIC property that has the number associated with the SPRITE_SHEET Datatype.
+		* @property SPRITE_SHEET
+		* @type number
+		* @static
+		* @final
+		* @default 1
+		* @public
+		*/
+		public static SPRITE_SHEET: number = 1;
+
+
+		/**
+		* A STATIC property that has the number associated with the TEXTURE_ATLAS Datatype.
+		* @property TEXTUREATLAS
+		* @type number
+		* @static
+		* @final
+		* @default 2
+		* @public
+		*/
+		public static TEXTURE_ATLAS: number = 2;
+
+
+		/**
+		* A STATIC property that has the number associated with the AUDIO Datatype.
+		* @property AUDIO
+		* @type number
+		* @static
+		* @final
+		* @default 3
+		* @public
+		*/
+		public static AUDIO: number = 3;
+
+
+		/**
+		* A STATIC property that has the number associated with the JSON Datatype.
+		* @property JSON
+		* @type number
+		* @static
+		* @final
+		* @default 4
+		* @public
+		*/
+		public static JSON: number = 4;
+
+
+		/**
+		* A STATIC property that has the number associated with the XML Datatype.
+		* @property XML
+		* @type number
+		* @static
+		* @final
+		* @default 5
+		* @public
+		*/
+		public static XML: number = 5;
+
+
+		/**
+		* A STATIC property that has the number associated with the BINARY_DATA Datatype.
+		* @property BINARY_DATA
+		* @type number
+		* @static
+		* @final
+		* @default 6
+		* @public
+		*/
+		public static BINARY_DATA: number = 6;
+
+
+		/**
+		* A STATIC property that has the number associated with the TEXT_DATA Datatype.
+		* @property TEXT_DATA
+		* @type number
+		* @static
+		* @final
+		* @default 7
+		* @public
+		*/
+		public static TEXT_DATA: number = 7;
+
+		/**
+		* 
+		* @property UNKNOWN
+		* @type number
+		* @static
+		* @final 
+		* @default 8
+		* @public
+		*/
+		public static UNKNOWN: number = 8;
+
+		/**
+		* An indication of if this file is texture. This is READ ONLY.
+		* @property isTexture
+		* @type boolean
+		* @readOnly
+		* @public
+		*/
+		public get isTexture(): boolean {
+			return (Kiwi.Files.TextureFile.prototype.objType.call(this) === this.objType());
+		}
+
+
+		/**
+		* An indication of if this file is a piece of audio. This is READ ONLY.
+		* @property isAudio
+		* @type boolean
+		* @readOnly
+		* @public
+		*/
+		public get isAudio(): boolean {
+			return (Kiwi.Files.AudioFile.prototype.objType.call(this) === this.objType());
+		}
+
+
+		/**
+		* An indication of if this file is data. This is READ ONLY.
+		* @property isData
+		* @type boolean
+		* @readOnly
+		* @public
+		*/
+		public get isData(): boolean {
+			return (Kiwi.Files.DataFile.prototype.objType.call(this) === this.objType());
+		}
+
+		/**
+		* ------------------
+		* Clean Up
+		* ------------------
+		**/
+
+		/**
+		* Destroys all external object references on this object.
+		* @method destroy
+		* @since 1.2.0
+		* @public
+		*/
+		public destroy() {
+			
+			if (this.fileStore) {
+				this.fileStore.removeFile(this.key);
+			}
+
+			this.onComplete.dispose();
+			this.onProgress.dispose();
+
+			delete this.fileStore;
+			delete this._xhr;
+			delete this.data;
+			delete this.buffer;
+			delete this.game;
+			delete this.error;
+			delete this.headCompleteCallback;
+			delete this.headCompleteContext;
+			delete this.onComplete;
+			delete this.onProgress;
+			delete this.ownerState;
+
+		}
+
+		/**
+		* ------------------
+		* Deprecated
+		* ------------------
+		**/
+
+		/**
+		* The name of the file being loaded.
+		* @property fileName
+		* @type String
+		* @deprecated Use `name`. Deprecated as of 1.2.0
+		* @public
+		*/
+		public get fileName(): string {
+			return this.name;
+		}
+		public set fileName(val:string) {
+			this.name = val;
+		}
+
+		/**
+		* The location of where the file is placed without the file itself (So without the files name).
+		* Example: If the file you are load is located at 'images/awesomeImage.png' then the filepath will be 'images/'
+		* @property filePath
+		* @type String
+		* @deprecated Use `path`. Deprecated as of 1.2.0
+		* @public
+		*/
+		public get filePath(): string {
+			return this.path;
+		}
+		public set filePath(val: string) {
+			this.path = val;
+		}
+
+		/**
+		* The location of where the file is placed without the file itself (So without the files name).
+		* Example: If the file you are load is located at 'images/awesomeImage.png' then the filepath will be 'images/'
+		* @property filePath
+		* @type String
+		* @deprecated Use `extension`. Deprecated as of 1.2.0
+		* @public
+		*/
+		public get fileExtension(): string {
+			return this.extension;
+		}
+		public set fileExtension(val: string) {
+			this.extension = val;
+		}
+
+		/**
+		* The full filepath including the file itself.
+		* @property fileURL
+		* @type String
+		* @deprecated Use `URL`. Deprecated as of 1.2.0
+		* @public
+		*/
+		public get fileURL(): string {
+			return this.URL;
+		}
+		public set fileURL(val: string) {
+			this.URL = val;
+		}
+
+		/**
+		* The type of file that is being loaded.
+		* Is only ever given a value when used with the XHR method of loading OR if you use 'getFileDetails' before hand.
+		* The value is based off of the 'Content-Type' of the XHR's response header returns.
+		* @property fileType
+		* @type String
+		* @deprecated Use `type`. Deprecated as of 1.2.0
+		* @public
+		*/
+		public get fileType():string {
+			return this.type;
+		}
+		public set fileType(val: string) {
+			this.type = val;
+		}
+
+		/**
+		* The size of the file that was/is being loaded. 
+		* Only has a value when the file was loaded by the XHR method OR you request the file information before hand using 'getFileDetails'.
+		* @property fileSize
+		* @type Number
+		* @deprecated Use `size`. Deprecated as of 1.2.0
+		* @public
+		*/
+		public get fileSize(): number {
+			return this.size;
+		}
+		public set fileSize(val: number) {
+			this.size = val;
+		}
+		
+
+		/**
+		* A method that is to be executed when this file has finished loading. 
+		* @property onCompleteCallback
+		* @type Any
+		* @default null
+		* @deprecated Use `onComplete`. Deprecated as of 1.2.0
+		* @public
+		*/
+		//public onCompleteCallback: any = null;
+
+
+		/**
+		* A method that is to be executed while this file is loading.
+		* @property onProgressCallback
+		* @type Any
+		* @default null
+		* @deprecated Use `onProgress`. Deprecated as of 1.2.0
+		* @public
+		*/
+		//public onProgressCallback: any = null;
+
+
+		/**
+		* The status of this file that is being loaded. 
+		* Only used/has a value when the file was/is being loaded by the XHR method.
+		* @property status
+		* @type Number
+		* @default 0
+		* @deprecated Deprecated as of 1.2.0
+		* @public
+		*/
+		public status: number = 0;
+
+
+		/**
+		* The status piece of text that the XHR returns.
+		* @property statusText
+		* @type String
+		* @default ''
+		* @deprecated Deprecated as of 1.2.0
+		* @public
+		*/
+		public statusText: string = '';
+
+		/**
+		* The ready state of the XHR loader whilst loading.
+		* @property readyState
+		* @type Number
+		* @default 0
+		* @deprecated Deprecated as of 1.2.0
+		* @public
+		*/
+		public readyState: number = 0;
+
+		/**
+		* If this file has timeout when it was loading. 
+		* @property hasTimedOut
+		* @type boolean
+		* @default false
+		* @deprecated Deprecated as of 1.2.0
+		* @public
+		*/
+		public hasTimedOut: boolean = false;
+
+		/**
+		* If the file timed out or not.
+		* @property timedOut
+		* @type Number
+		* @default 0
+		* @deprecated Deprecated as of 1.2.0
+		* @public
+		*/
+		public timedOut: number = 0;
+
+		/**
+		* The response that is given by the XHR loader when loading is complete.
+		* @property buffer
+		* @type Any
+		* @deprecated Use 'data' instead. Deprecated as of 1.2.0
+		* @public
+		*/
+		public buffer: any;
+
+
+		/**
+		* Attempts to make the file send a XHR HEAD request to get information about the file that is going to be downloaded.
+		* This is particularly useful when you are wanting to check how large a file is before loading all of the content. 
+		* @method getFileDetails
+		* @param [callback=null] {Any} The callback to send this FileInfo object to.
+		* @param [maxLoadAttempts=1] {number} The maximum amount of load attempts. Only set this if it is different from the default.
+		* @param [timeout=this.timeOutDelay] {number} The timeout delay. By default this is the same as the timeout delay property set on this file.
+		* @deprecated Use 'loadDetails' instead. Deprecated as of 1.2.0
+		* @private
+		*/
+		public getFileDetails(callback: any = null, maxLoadAttempts?: number, timeout: number = null) {
+			
+			if (timeout) this.timeOutDelay = timeout;
+
+			this.loadDetails(callback, null);
+		}
+
+	}
 
 }
diff --git a/src/file/FileStore.ts b/src/file/FileStore.ts
index d1e782b..39d7d98 100644
--- a/src/file/FileStore.ts
+++ b/src/file/FileStore.ts
@@ -7,228 +7,226 @@
 
 module Kiwi.Files {
 
-    /**
-    * Holds all of the Files (regardless of the file type) that have been loaded throughout a game/are accessable at a particular point in time. Contains methods for dealing with files. Note: Each time the state is switched the file store will remove all references to files that have not been flagged as global. 
-    * 
-    * @class FileStore
-    * @namespace Kiwi.Files
-    * @constructor
-    * @param game {Kiwi.Game} The game that this FileStore belongs to.
-    * @return {Kiwi.Files.FilesStore}
-    *
-    */
-    export class FileStore {
- 
-        constructor(game: Kiwi.Game) {
-            this._game = game;
-            this._files = {};
-        }
-
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} "FileStore"
-        * @public
-        */
-        public objType() {
-            return "FileStore";
-        }
-
-        /**
-        * The game that this FileStore belongs to.
-        * @property _game
-        * @type Kiwi.Game
-        * @private
-        */
-        private _game: Kiwi.Game;
-
-        /**
-        * The files that are on this FileStore.
-        * @property _files
-        * @type Object
-        * @private
-        */
-        private _files;
-
-        /**
-        * The number of files that are on the file store.
-        * @property _size
-        * @type Number
-        * @default 0
-        * @private
-        */
-        private _size:number = 0;
-
-        /**
-        * The boot method is executed when the DOM elements needed for this game are ready and thus the game can 'boot'.
-        * @method boot
-        * @public
-        */
-        public boot() {
-            
-        }
-
-        /** 
-        * Returns a particular file by the key that you specify.
-        * @method getFile
-        * @param key {String} The key of the file that you to get.
-        * @return {Kiwi.Files.File} 
-        * @public
-        */
-        public getFile(key: string): Kiwi.Files.File {
-
-            return this._files[key];
-
-        }
-
-        /**
-        * Returns an object full of files that have a Tag that is associated with it.
-        * @method getFilesByTag
-        * @param tag {String} 
-        * @return {Object} All of the files with that tag.
-        * @public
-        */
-        public getFilesByTag(tag: string): Object {
-
-            var obj = {};
-            for (var file in this._files) {
-                if (this._files[file].hasTag(tag)) {
-                    obj[file] = this._files[file];
-                }
-            }
-            return obj;
-        }
-
-        /**
-        * Removes all of the files by a tag that is specified.
-        * @method removeFilesByTag
-        * @param tag {String}
-        * @return {Number} The number of files that were removed.
-        * @public
-        */
-        public removeFilesByTag(tag: string):number {
-
-            var numberFiles: number = 0;
-            for (var file in this._files) {
-                if (this._files[file].hasTag(tag)) {
-                    this.removeFile(file);
-                    numberFiles++;
-                }
-            }
-            return numberFiles;
-        }
-
-        /**
-        * Returns all of the keys for every file that exist on this FileStore as an array.
-        * @property keys
-        * @type String[]
-        * @public
-        */
-        public get keys(): string[] {
-            var keys: string[] = new Array();
-            for (var key in this._files) {
-                keys.push(key);
-            }
-
-            return keys;
-        }
-
-        /** 
-        * Returns the number of files that are on this FileStore.
-        * @method size
-        * @return {Number} 
-        * @public
-        */
-        public size(): number {
-
-            return this._size;
-
-        }
-
-        /**
-        * Adds a File with a key to the FileStore. If the key that you specify already exists then this method will return false otherwise it should return true if it was added.
-        * @method addFile
-        * @param key {String} A unique key that this file should be accessed by.
-        * @param value {Kiwi.Files.File} The file that you would like to save on the FileStore.
-        * @return {Boolean} If the file was added or not
-        * @public
+	/**
+	* Holds all of the Files (regardless of the file type) that have been loaded throughout a game/are accessable at a particular point in time. Contains methods for dealing with files. Note: Each time the state is switched the file store will remove all references to files that have not been flagged as global. 
+	* 
+	* @class FileStore
+	* @namespace Kiwi.Files
+	* @constructor
+	* @param game {Kiwi.Game} The game that this FileStore belongs to.
+	* @return {Kiwi.Files.FilesStore}
+	*
+	*/
+	export class FileStore {
+
+		constructor(game: Kiwi.Game) {
+			this._game = game;
+			this._files = {};
+		}
+
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} "FileStore"
+		* @public
 		*/
-        public addFile(key: string, value: Kiwi.Files.File): boolean {
+		public objType() {
+			return "FileStore";
+		}
+
+		/**
+		* The game that this FileStore belongs to.
+		* @property _game
+		* @type Kiwi.Game
+		* @private
+		*/
+		private _game: Kiwi.Game;
+
+		/**
+		* The files that are on this FileStore.
+		* @property _files
+		* @type Object
+		* @private
+		*/
+		private _files;
+
+		/**
+		* The number of files that are on the file store.
+		* @property _size
+		* @type Number
+		* @default 0
+		* @private
+		*/
+		private _size:number = 0;
+
+		/**
+		* The boot method is executed when the DOM elements needed for this game are ready and thus the game can 'boot'.
+		* @method boot
+		* @public
+		*/
+		public boot() {
+
+		}
 
-            if (!this._files[key])
-            {
-                this._files[key] = value;
-                this._size++;
-                return true;
-            }
+		/** 
+		* Returns a particular file by the key that you specify.
+		* @method getFile
+		* @param key {String} The key of the file that you to get.
+		* @return {Kiwi.Files.File} 
+		* @public
+		*/
+		public getFile(key: string): Kiwi.Files.File {
 
-            return false;
+			return this._files[key];
 
-        }
+		}
 
-        /**
-        * Checks to see if a key that you pass is already being used for another file. Returns true if that key is already in used, false if it isn't.
-        * @method exists
-        * @param key {String} The key that you are checking.
-        * @return {Boolean} 
-        * @public
+		/**
+		* Returns an object full of files that have a Tag that is associated with it.
+		* @method getFilesByTag
+		* @param tag {String} 
+		* @return {Object} All of the files with that tag.
+		* @public
+		*/
+		public getFilesByTag(tag: string): Object {
+
+			var obj = {};
+			for (var file in this._files) {
+				if (this._files[file].hasTag(tag)) {
+					obj[file] = this._files[file];
+				}
+			}
+			return obj;
+		}
+
+		/**
+		* Removes all of the files by a tag that is specified.
+		* @method removeFilesByTag
+		* @param tag {String}
+		* @return {Number} The number of files that were removed.
+		* @public
+		*/
+		public removeFilesByTag(tag: string):number {
+
+			var numberFiles: number = 0;
+			for (var file in this._files) {
+				if (this._files[file].hasTag(tag)) {
+					this.removeFile(file);
+					numberFiles++;
+				}
+			}
+			return numberFiles;
+		}
+
+		/**
+		* Returns all of the keys for every file that exist on this FileStore as an array.
+		* @property keys
+		* @type String[]
+		* @public
 		*/
-        public exists(key: string): boolean {
-
-            if (this._files[key])
-            {
-                return true;
-            }
-            else
-            {
-                return false;
-            }
-
-        }
-
-        /**
-        * Removes files on the FileStore that are associated with a particular state.
-        * @method removeStateFiles
-        * @param state {Kiwi.State} 
-        * @public
-        */
-        public removeStateFiles(state: Kiwi.State) {
-            for (var file in this._files) {
-                if (this._files[file].ownerState === state) {
-                    this.removeFile(file);
-                }
-            }
-        }
-
-        /**
-        * Removes a file by the key that is passed. Returns a boolean indicating if a file was removed or not.
-        * Note: Only returns false if that file did not exist in the first place.
-        * @method removeFile
-        * @param key {String} The key of the file you want to remove.
-        * @return {Boolean}
-        * @public
+		public get keys(): string[] {
+			var keys: string[] = new Array();
+			for (var key in this._files) {
+				keys.push(key);
+			}
+
+			return keys;
+		}
+
+		/** 
+		* Returns the number of files that are on this FileStore.
+		* @method size
+		* @return {Number} 
+		* @public
 		*/
-        public removeFile(key: string, destroy:boolean=false): boolean {
+		public size(): number {
 
-            var file = this._files[key];
+			return this._size;
 
-            if (file) {
-                this._files[key] = null;
-                delete this._files[key];
+		}
+
+		/**
+		* Adds a File with a key to the FileStore. If the key that you specify already exists then this method will return false otherwise it should return true if it was added.
+		* @method addFile
+		* @param key {String} A unique key that this file should be accessed by.
+		* @param value {Kiwi.Files.File} The file that you would like to save on the FileStore.
+		* @return {Boolean} If the file was added or not
+		* @public
+		*/
+		public addFile(key: string, value: Kiwi.Files.File): boolean {
+
+			if (!this._files[key])
+			{
+				this._files[key] = value;
+				this._size++;
+				return true;
+			}
+
+			return false;
+
+		}
+
+		/**
+		* Checks to see if a key that you pass is already being used for another file. Returns true if that key is already in used, false if it isn't.
+		* @method exists
+		* @param key {String} The key that you are checking.
+		* @return {Boolean} 
+		* @public
+		*/
+		public exists(key: string): boolean {
+
+			if (this._files[key])
+			{
+				return true;
+			}
+			else
+			{
+				return false;
+			}
+
+		}
+
+		/**
+		* Removes files on the FileStore that are associated with a particular state.
+		* @method removeStateFiles
+		* @param state {Kiwi.State} 
+		* @public
+		*/
+		public removeStateFiles(state: Kiwi.State) {
+			for (var file in this._files) {
+				if (this._files[file].ownerState === state) {
+					this.removeFile(file);
+				}
+			}
+		}
+
+		/**
+		* Removes a file by the key that is passed. Returns a boolean indicating if a file was removed or not.
+		* Note: Only returns false if that file did not exist in the first place.
+		* @method removeFile
+		* @param key {String} The key of the file you want to remove.
+		* @return {Boolean}
+		* @public
+		*/
+		public removeFile(key: string, destroy:boolean=false): boolean {
 
-                if (destroy) {
-                    this._files[key].destroy();
-                }
+			var file = this._files[key];
 
-                return true;
-            }
+			if (file) {
+				this._files[key] = null;
+				delete this._files[key];
 
-            return false;
+				if (destroy) {
+					this._files[key].destroy();
+				}
 
-        }
+				return true;
+			}
 
+			return false;
 
+		}
 
-    }
+	}
 
-}
\ No newline at end of file
+}
diff --git a/src/file/Loader.ts b/src/file/Loader.ts
index 328c58b..5cae2f5 100644
--- a/src/file/Loader.ts
+++ b/src/file/Loader.ts
@@ -7,1392 +7,1392 @@
 
 module Kiwi.Files {
 
-    /**
-    * Used for the loading of files and game assets. This usually happens when a State is at the 'loading' stage (executing the 'preload' method).
-    * 
-    * @class Loader
-    * @namespace Kiwi.Files
-    * @constructor
-    * @param game {Kiwi.Game} The game that this loader belongs to.
-    * @return {Kiwi.Files.Loader} This Object
-    *
-    */
-    export class Loader {
+	/**
+	* Used for the loading of files and game assets. This usually happens when a State is at the 'loading' stage (executing the 'preload' method).
+	* 
+	* @class Loader
+	* @namespace Kiwi.Files
+	* @constructor
+	* @param game {Kiwi.Game} The game that this loader belongs to.
+	* @return {Kiwi.Files.Loader} This Object
+	*
+	*/
+	export class Loader {
  
-        constructor(game: Kiwi.Game) {
-
-            this.game = game;
-
-        }
-
-        /**
-        * The type of object this is.
-        * @method objType
-        * @return {String} "Loader"
-        * @public
-        */
-        public objType() {
-            return "Loader";
-        }
-
-        /**
-        * The game this loader is attached to.
-        * @property game 
-        * @type Kiwi.Game
-        * @public
-        */
-        public game: Kiwi.Game;
-
-        /**
-        * A list of files that can be loaded in parallel to one another.
-        * This list of files are currently being loaded. 
-        * 
-        * @property _loadingParallel
-        * @type Array
-        * @since 1.2.0
-        * @private 
-        */
-        private _loadingParallel: Kiwi.Files.File[];
-        
-        /**
-        * List of files that cannot load in parallel to one another
-        * and so need to wait for previous files to load first. 
-        * Generally files loaded via XHR.
-        * 
-        * @property _loadingQueue
-        * @type Array
-        * @since 1.2.0
-        * @private 
-        */
-        private _loadingQueue: Kiwi.Files.File[];
-
-        /**
-        * List of files that are to be loaded. 
-        * These files will be placed in the '_loadingQueue' or '_loadingParallel' 
-        * lists when the queue is told to 'start' loading.
-        * 
-        * @property _loadingList
-        * @type Array
-        * @since 1.2.0
-        * @private 
-        */ 
-        private _loadingList: Kiwi.Files.File[];
-
-        /**
-        * A Signal which dispatches callbacks when all files in the 'loadingList' have been loaded.
-        * When adding callbacks make sure to 'remove' them (or to use the 'addOnce' method) 
-        * otherwise will fire when other sections use the loader.
-        * 
-        * @method onQueueComplete
-        * @type Kiwi.Signal
-        * @since 1.2.0
-        * @public
-        */
-        public onQueueComplete: Kiwi.Signal;
-        
-        /**
-        * A Signal which dispatches callbacks each time a file in the 'loadingList' have been loaded.
-        * Callbacks dispatched are passed the following arguments in order.
-        * 1. percent - The percentage of files loaded. A number from 0 - 100
-        * 2. bytesLoaded - The number of bytes loaded 
-        * 3. file - The latest file that was loaded. First call will be null.
-        * 
-        * When adding callbacks make sure to 'remove' them (or to use the 'addOnce' method) 
-        * otherwise will fire when other sections use the loader.
-        * 
-        * @method onQueueProgress
-        * @type Kiwi.Signal
-        * @since 1.2.0
-        * @public
-        */
-        public onQueueProgress: Kiwi.Signal;
-
-
-        /**
-        * A flag indicating if the files inside the file queue are loading or not.
-        * 
-        * @property _fileQueueLoading
-        * @type Boolean
-        * @default false
-        * @since 1.2.0
-        * @private
-        */
-        private _queueLoading: boolean = false;
-        
-        /**
-        * READ ONLY: A flag indicating if the files inside the file queue are loading or not.
-        * 
-        * @property fileQueueLoading
-        * @type Boolean
-        * @default false
-        * @readOnly
-        * @since 1.2.0
-        * @public
-        */
-        public get queueLoading(): boolean {
-            return this._queueLoading;
-        }
-
-
-        /**
-        * When 'calculateBytes' is true the percentLoaded will be the `bytesLoaded / bytesTotal`. 
-        * Otherwise it is based on the `filesLoaded / numberOfFilesToLoad`. 
-        *
-        * @property percentLoaded
-        * @type Number
-        * @since 1.2.0
-        * @readOnly
-        * @public
-        */
-        public percentLoaded: number = 0;
-
-
-        /**
-        * When enabled, files which can be loaded in parallel (those which are loaded via tags) 
-        * will be loaded at the same time. 
-        * 
-        * The default behaviour is to have the files loading in a queued fashion instead of one after another.
-        * 
-        * @property enableParallelLoading
-        * @type Boolean
-        * @default false
-        * @since 1.2.0
-        * @public
-        */
-        public enableParallelLoading: boolean = false; 
-
-
-        /**
-        * The boot method is executed when the DOM has successfully loaded and we can now start the game.
-        * @method boot
-        * @public
-        */
-        public boot() {
-
-            this._loadingList = [];
-
-            this._loadingParallel = [];
-
-            this._loadingQueue = [];
-
-            this.onQueueComplete = new Kiwi.Signal();
-
-            this.onQueueProgress = new Kiwi.Signal();
-
-        }
-
-        /**
-        * Starts loading all the files which are in the file queue. 
-        *
-        * To accurately use the bytesLoaded or bytesTotal properties you will need to set the 'calculateBytes' boolean to true.
-        * This may increase load times, as each file in the queue will firstly make XHR HEAD requests for information.
-        *
-        * When 'calculateBytes' is true the percentLoaded will be the `bytesLoaded / bytesTotal`. 
-        * Otherwise it is based on the `filesLoaded / numberOfFilesToLoad`. 
-        *
-        * @method start
-        * @param [calculateBytes] {Boolean} Setter for the 'calculateBytes' property.
-        * @since 1.2.0
-        * @public
-        */ 
-        public start(calculateBytes: boolean = null) {
-
-            if (calculateBytes !== null) {
-                this._calculateBytes = calculateBytes;
-            }
-
-            if (this._queueLoading) {
-                Kiwi.Log.warn('Kiwi.Files.Loader: Files in the queue are already being loaded');
-                return;
-            }
-
-            //Reset the number of bytes laoded
-            this._bytesLoaded = 0;
-            this._bytesTotal = 0;
-            this.percentLoaded = 0;
-
-            if (this._calculateBytes) {
-                this.calculateQueuedSize(this._startLoading, this);
-            } else {
-                this._startLoading();
-            }
-
-        }
-
-        /**
-        * Loops through the file queue and starts the loading process. 
-        * 
-        * @method _startLoading
-        * @private 
-        */
-        private _startLoading() {
-
-            //Any files to load?
-            if (this._loadingList.length <= 0) {
-                Kiwi.Log.log('Kiwi.Files.Loader: No files are to load have been found.', '#loading');
-                this.onQueueProgress.dispatch(100, 0, null);
-                this.onQueueComplete.dispatch();
-                return;
-            }
-
-            //There are files to load
-            var i = 0,
-                file: Kiwi.Files.File;
-
-            while (i < this._loadingList.length) {
-
-                if (this._calculateBytes) {
-                    this._loadingList[i].onProgress.add(this._updateFileListInformation, this);
-                }
-
-                this._loadingList[i].onComplete.addOnce(this._fileQueueUpdate, this);
-
-                this._sortFile(this._loadingList[i]);
-
-                i++;
-            }
-
-            this._queueLoading = true;
-            this._bytesLoaded = 0;
-
-            this._startLoadingQueue();
-            this._startLoadingAllParallel();
-
-            this._fileQueueUpdate(null, true);
-
-        }
-
-        /**
-        * Adds a file to the queue of files to be loaded.
-        * Files cannot be added whilst the queue is currently loading, 
-        * the file to add is currently loading, or has been loaded before.
-        * 
-        * @method addFileToQueue
-        * @param file {Kiwi.Files.File} The file to add.
-        * @return {Boolean} If the file was added to the queue or not. 
-        * @since 1.2.0
-        * @public
-        */
-        public addFileToQueue(file: Kiwi.Files.File) {
-
-            if (this._queueLoading) {
-                Kiwi.Log.warn('Kiwi.Files.Loader: File cannot be added to the queue whilst the queue is currently loading.', '#loading', '#filequeue');
-                return false;
-            }
-
-            if (file.loading || file.complete) {
-                Kiwi.Log.warn('Kiwi.Files.Loader: File could not be added as it is currently loading or has already loaded.', '#loading', '#filequeue');
-                return false;
-            }
-
-            this._loadingList.push(file);
-            return true;
-        }
-
-        /**
-        * Removes a file from the file queue. 
-        * Files cannot be removed whilst the queue is loading.
-        *
-        * @method removeFileFromQueue
-        * @param file {Kiwi.Files.File} The file to remove.
-        * @return {Boolean} If the file was added to the queue or not.
-        * @since 1.2.0
-        * @public
-        */
-        public removeFileFromQueue(file: Kiwi.Files.File): boolean {
-
-            if (this._queueLoading) {
-                Kiwi.Log.warn('Kiwi.Files.Loader: File cannot be remove from the queue whilst the queue is currently loading.', '#loading', '#filequeue');
-                return false;
-            }
-
-            var index = this._loadingList.indexOf(file);
-
-            if (index === -1) {
-                return false;
-            } 
-
-            if (file.loading) {
-                Kiwi.Log.warn('Kiwi.Files.Loader: Cannot remove the file from the list as it is currently loading.', '#loading', '#filequeue');
-                return false;
-            }
-
-            this._loadingList.splice(index, 1);
-            return true;
-        }
-
-        /**
-        * Clears the file queue of all files. 
-        * 
-        * @method clearQueue
-        * @since 1.2.0
-        * @public
-        */
-        public clearQueue() {
-
-            if (!this._queueLoading) {
-                this._loadingList.length = 0;
-            } else {
-                Kiwi.Log.error('Kiwi.Files.Loader: Cannot clear the file queue whilst the files are being loaded.', '#loading', '#filequeue');
-            }
-        }
-
-        /**
-        * Starts the process of loading a file outside of the regular queue loading process.
-        * Callbacks for load completion need to be added onto the file via 'onComplete' Signal.
-        *
-        * @method loadFile
-        * @public
-        */
-        public loadFile(file: Kiwi.Files.File) {
-
-            if ( file.loading || file.complete ) {
-                Kiwi.Log.error('Kiwi.Files.Loader: Could not add file. File is already loading or has completed loading.');
-                return;
-            }
-
-            this._sortFile(file, true);
-
-        }
-
-        /**
-        * Sorts a file and places it into either the 'loadingParallel' or 'loadingQueue' 
-        * depending on the method of loading it is using.
-        * 
-        * @method _sortFile
-        * @param file {Kiwi.Files.File}
-        * @since 1.2.0
-        * @private
-        */
-        private _sortFile(file: Kiwi.Files.File, startLoading: boolean = false) {
-
-            if (this.enableParallelLoading && file.loadInParallel) {
-                //Push into the tag loader queue
-                this._loadingParallel.push(file);
-
-                if (startLoading) {
-                    this._startLoadingParallel(file);
-                }
-
-            } else {
-                //Push into the xhr queue
-                this._loadingQueue.push(file);
-
-                if (startLoading) {
-                    this._startLoadingQueue();
-                }
-            }
-
-        }
-
-        /**
-        * The number of files in the file queue that have been updated.
-        * 
-        * @property _completeFiles
-        * @type number
-        * @default 0
-        * @private
-        */
-        private _completedFiles: number = 0;
-
-        /**
-        * Called each time a file has processed whilst loading, or has just completed loading.
-        * 
-        * Calculates the new number of bytes loaded and 
-        * the percentage of loading done by looping through all of the files.
-        * 
-        * @method _updateFileListInformation
-        * @private
-        */
-        private _updateFileListInformation() {
-
-            var i = 0;
-
-            this._completedFiles = 0;
-            this._bytesLoaded = 0;
-
-            while (i < this._loadingList.length) {
-
-                //Was the file loaded, but we have no bytes (must have used the tag loader) and we have their details?
-                if (this._loadingList[i].bytesLoaded === 0 && this._loadingList[i].success && this._loadingList[i].detailsReceived) {
-                    this._bytesLoaded += this._loadingList[i].size;
-
-                } else {
-                    //Add the bytes loaded to the list 
-                    this._bytesLoaded += this._loadingList[i].bytesLoaded;
-                }
-
-                //Calculate percentage
-                if (this._loadingList[i].complete) {
-                    this._completedFiles++;
-                }
-
-                i++;
-            }
-
-            //Calculate the percentage depending on how accurate we can be.
-            if (this._calculateBytes) {
-                this.percentLoaded = (this._bytesLoaded / this._bytesTotal) * 100;
-            } else {
-                this.percentLoaded = (this._completedFiles / this._loadingList.length) * 100;
-            }
-
-        }
-
-        /**
-        * Executed by files when they have successfully been loaded.
-        * This method checks to see if the files are in the file queue, and dispatches the appropriate events.
-        * 
-        * @method _fileQueueUpdate
-        * @param file {Kiwi.Files.File} The file which has been recently loaded.
-        * @param [forceProgressCheck=false] {Boolean} If the progress of file loading should be checked, regardless of the file being in the queue or not.
-        * @since 1.2.0
-        * @private
-        */
-        private _fileQueueUpdate(file: Kiwi.Files.File, forceProgressCheck: boolean = false) {
-
-            //If the file loaded is in the loadingList
-            if (!forceProgressCheck && this._loadingList.indexOf(file) === -1) {
-                return;
-            }
-
-            //Update the file information.
-            this._updateFileListInformation();
-
-            //Dispatch progress event.
-            this.onQueueProgress.dispatch(this.percentLoaded, this.bytesLoaded, file);
-
-            if (this._completedFiles >= this._loadingList.length) {
-                //Clear the file queue and dispatch the loaded event
-                this._queueLoading = false;
-                this.clearQueue();
-                this.onQueueComplete.dispatch();
-            }
-
-        }
-
-        /**
-        * Starts the loading process in the loadingQueue. 
-        * @method _startLoadingQueue
-        * @return {Boolean}
-        * @private
-        * @since 1.2.0
-        * @return {boolean} Whether the first file is loading
-        */
-        private _startLoadingQueue(): boolean {
-
-            //Any files to load?
-            if (this._loadingQueue.length <= 0) {
-                Kiwi.Log.log('Kiwi.Files.Loader: No queued files to load.', '#loading');
-                return false;
-            }
-
-            //Is the first file currently loading?
-            if (this._loadingQueue[0].loading) {
-                return false;
-            }
-
-            //Attempt to load the file!
-            this._loadingQueue[0].onComplete.addOnce(this._queueFileComplete, this);
-            this._loadingQueue[0].load();
-            return true;
-        }
-
-        /**
-        * Executed when a file in the 'loadingQueue' has been successfully loaded.
-        * Removes the file from the loadingQueue and executes the '_startLoadingQueue' to start loading the next file. 
-        * 
-        * @method _queueFileComplete
-        * @param file {Kiwi.Files.File}
-        * @since 1.2.0
-        * @private
-        */
-        private _queueFileComplete(file: Kiwi.Files.File) {
-
-            //Remove from the loadingQueue
-            var index = this._loadingQueue.indexOf(file);
-            if (index === -1) {
-                Kiwi.Log.warn("Something has gone wrong? The file which executed this method doesn't exist in the loadingQueue.", '#loading', '#error');
-                return;
-            }
-
-            this._loadingQueue.splice(index, 1);
-
-            //Start loading the next file
-            this._startLoadingQueue();
-        }
-
-        /**
-        * Starts loading a file which can be loaded in parallel.
-        * @method _startLoadingParallel
-        * @param params file {Kiwi.Files.File}
-        * @since 1.2.0
-        * @private 
-        */
-        private _startLoadingParallel( file: Kiwi.Files.File) {
-
-            if (!file.loading) {
-                file.onComplete.add(this._parallelFileComplete, this);
-                file.load();
-            }
-
-        }
-        
-        /**
-        * Starts loading all files which can be loaded in parallel.
-        * @method _startLoadingAllParallel
-        * @since 1.2.0
-        * @private 
-        */
-        private _startLoadingAllParallel() {
-
-            var i = 0,
-                file: Kiwi.Files.File;
-
-            while (i < this._loadingParallel.length) {
-                this._startLoadingParallel(this._loadingParallel[i]);
-                i++;
-            }
-
-        }
-        
-        /**
-        * Executed when a file in the 'loadingParallel' lsit has been successfully loaded.
-        * Removes the file from the list and get the fileQueue to check its progress.
-        * 
-        * @method _parallelFileComplete
-        * @param file {Kiwi.Files.File}
-        * @since 1.2.0
-        * @private 
-        */
-        private _parallelFileComplete(file: Kiwi.Files.File) {
-
-            var index = this._loadingParallel.indexOf(file);
-            if (index === -1) {
-                Kiwi.Log.warn("Something has gone wrong? The file which executed this method doesn't exist in the loadingParallel.", '#loading', '#error');
-                return;
-            }
-
-            this._loadingParallel.splice(index, 1);
-        }
-
-
-        /**
-        * -----------------------------
-        * Bytes Loaded Methods 
-        * -----------------------------
-        **/
-        
-        /**
-        * If the number of bytes for each file should be calculated before the queue starts loading.
-        * If true each file in the queue makes a XHR HEAD request first to get the total values.
-        *
-        * @property _calculateBytes
-        * @type Boolean
-        * @private 
-        */
-        private _calculateBytes: boolean = false;
-
-        /**
-        * Callback for when the total number of bytes of the files in the file list has been calculated.
-        * 
-        * @property onQueueSizeCalculate
-        * @type any
-        * @private
-        */
-        private onSizeCallback: any;
-        
-        /**
-        * Context that the onSizeCallback should be executed in.
-        * 
-        * @property onSizeContext
-        * @type any
-        * @private
-        */
-        private onSizeContext: any;
-
-        /**
-        * The index of the current file in the filelist thats size is being retrieved.
-        * @property _currentFileIndex
-        * @type number
-        * @private
-        */
-        private _currentFileIndex: number = 0;
-
-        /**
-        * Total file size (in bytes) of all files in the queue to be loaded. 
-        * 
-        * @property _bytesTotal
-        * @type Number
-        * @private
-        */
-        private _bytesTotal: number = 0;
-
-        /**
-        * READ ONLY: Returns the total number of bytes for the files in the file queue.
-        * Only contains a value if you use the 'calculateBytes' and are loading files
-        * OR if you use the 'calculateQueuedSize' method.
-        * 
-        * @property bytesTotal
-        * @readOnly
-        * @default 0
-        * @since 1.2.0
-        * @type Number
-        * @public
-        */
-        public get bytesTotal(): number {
-            return this._bytesTotal;
-        }
-
-        /**
-        * The number of bytes loaded of files in the file queue. 
-        * 
-        * @property _bytesLoaded
-        * @type Number
-        * @private 
-        */
-        private _bytesLoaded: number = 0;
-
-        /**
-        * READ ONLY: Returns the total number of bytes for the files in the file queue.
-        *
-        * If you are using this make sure you set the 'calculateBytes' property to true OR execute the 'calculateQueuedSize' method. 
-        * Otherwise files that are loaded via tags will not be accurate!
-        * 
-        * @property bytesLoaded
-        * @readOnly
-        * @default 0
-        * @since 1.2.0
-        * @type Number
-        * @public
-        */
-        public get bytesLoaded(): number {
-            return this._bytesLoaded;
-        }
-
-        /**
-        * Loops through the file queue and gets file information (filesize, ETag, filetype) for each.
-        * 
-        * To get accurate information about the bytesLoaded, bytesTotal, and the percentLoaded 
-        * set the 'calculateBytes' property to true, as the loader will automatically execute this method before hand.
-        * 
-        * Can only be executed when the file queue is not currently loading.
-        * 
-        * @method calculateQueuedSize
-        * @param callback {any}
-        * @param [context=null] {any}
-        * @public
-        */
-        public calculateQueuedSize(callback: any, context: any = null) {
-
-            //Is the queue currently loading files?
-            if (this._queueLoading) {
-                Kiwi.Log.warn('Kiwi.Files.Loader: Cannot calculate the size of the files in the filequeue whilst they are loading. ');
-                return;
-            }
-
-            //Set the callbacks
-            this.onSizeCallback = callback;
-            this.onSizeContext = context;
-
-            // Start the process
-            this._currentFileIndex = 0;
-            this._bytesTotal = 0;
-            this._queueLoading = true;
-
-            this._calculateNextFileSize();
-        }
-
-        /**
-        * Checks to see if all the file sizes have been retrieved. 
-        * If so completes the "calculateQueuedSize" call.
-        * Otherwise requests the next file's details.
-        *
-        * @method _calculateNextFileSize
-        * @private
-        */
-        private _calculateNextFileSize() {
-
-            if (this._currentFileIndex >= this._loadingList.length) {
-                this._queueLoading = false;
-                this.onSizeCallback.call(this.onSizeContext, this._bytesTotal);;
-                return;
-            }
-            
-            var file = this._loadingList[this._currentFileIndex];
-
-            //Have we already got the details for this file?
-            if (file.detailsReceived) {
-                this._detailsReceived();
-            } else {
-                var details = file.loadDetails(this._detailsReceived, this);
-
-                //Skip to the next file if the request could not be made.
-                //Shouldn't happen.
-                if (!details) {
-                    this._detailsReceived();
-                }
-            } 
-
-        }
-
-        /**
-        * Executed when by '_calculateNextFileSize' when the files information has been retrieved.
-        * Adds its calculated size to the _bytesTotal and executes the 'nextFileSize' method.
-        * 
-        * @method _detailsReceived
-        * @private 
-        */
-        private _detailsReceived() {
-
-            var file = this._loadingList[this._currentFileIndex];
-
-            if (file.detailsReceived) {
-                this._bytesTotal += file.size;
-            }
-
-            this._currentFileIndex++;
-            this._calculateNextFileSize();
-
-        }
-
-
-        /**
-        * -----------------------------
-        * File Addition Methods
-        * -----------------------------
-        */
-
-
-        /**
-        * Creates a new file for an image and adds a the file to loading queue. 
-        * @method addImage
-        * @param key {String} The key for the file.
-        * @param url {String} The url of the image to load.
-        * @param [width] {number} The width of the cell on the image to use once the image is loaded.
-        * @param [height] {number} The height of the cell on the image to use once the image is loaded.
-        * @param [offsetX] {number} An offset on the x axis of the cell.
-        * @param [offsetY] {number} An offset of the y axis of the cell.
-        * @param [storeAsGlobal=true] {boolean} If the image should be stored globally or not.
-        * @return {Kiwi.Files.File} The file which was created.
-        * @public
-        */
-        public addImage(key: string, url: string, width?: number, height?: number, offsetX?: number, offsetY?: number, storeAsGlobal: boolean = true): Kiwi.Files.File {
-
-            var params:any = {
-                type: Kiwi.Files.File.IMAGE,
-                key: null,
-                url: null,
-                fileStore: this.game.fileStore,
-                metadata: {}
-            };
-
-            if ( Kiwi.Utils.Common.isObject(key) ) {
-                var p: any = key;
-
-                params.key = p.key;
-                params.url = p.url;
-                params.metadata = {
-                    width: p.width,
-                    height: p.height,
-                    offsetX: p.offsetX,
-                    offsetY: p.offsetY
-                };
-
-                if (p.xhrLoading) params.xhrLoading = p.xhrLoading;//forces blob loading
-                if (p.state) params.state = p.state;
-                if (p.tags) params.tags = p.tags;
-
-            } else {
-
-                if (!storeAsGlobal && this.game.states.current) {
-                    params.state = this.game.states.current;
-                }
-
-                params.key = key;
-                params.url = url;
-                params.metadata = {
-                    width: width,
-                    height: height,
-                    offsetX: offsetX,
-                    offsetY: offsetY
-                };
-
-            }
-
-            var file: Kiwi.Files.File = new Kiwi.Files.TextureFile(this.game, params);
-            this.addFileToQueue(file);
-
-            return file;
-        }
-
-        /**
-        * Creates a new file for a spritesheet and adds the file to the loading queue.
-        * @method addSpriteSheet
-        * @param key {String} The key for the file.
-        * @param url {String} The url of the image to load.
-        * @param frameWidth {number} The width of a single cell in the spritesheet.
-        * @param frameHeight {number} The height of a single cell in the spritesheet.
-        * @param [numCells] {number} The number of cells that are in this spritesheet.
-        * @param [rows] {number} The number of cells that are in a row.
-        * @param [cols] {number} The number of cells that are in a column.
-        * @param [sheetOffsetX] {number} The offset of the whole spritesheet on the x axis.
-        * @param [sheetOffsetY] {number} The offset of the whole spritesheet on the y axis.
-        * @param [cellOffsetX] {number} The spacing between each cell on the x axis.
-        * @param [cellOffsetY] {number} The spacing between each cell on the y axis.
-        * @param [storeAsGlobal=true] {boolean} 
-        * @return {Kiwi.Files.File} The file which was created.
-        * @public
-        */
-        public addSpriteSheet(key: string, url: string, frameWidth: number, frameHeight: number, numCells?: number, rows?: number, cols?: number, sheetOffsetX?: number, sheetOffsetY?: number, cellOffsetX?: number, cellOffsetY?: number, storeAsGlobal: boolean = true) {
-
-            var params: any = {
-                type: Kiwi.Files.File.SPRITE_SHEET,
-                key: null,
-                url: null,
-                fileStore: this.game.fileStore,
-                metadata: {}
-            };
-
-
-            if (Kiwi.Utils.Common.isObject(key)) {
-                var p: any = key;
-
-                params.key = p.key;
-                params.url = p.url;
-                params.metadata = {
-                    frameWidth: p.frameWidth,
-                    frameHeight: p.frameHeight,
-                    numCells: p.numCells,
-                    rows: p.rows,
-                    cols: p.cols,
-                    sheetOffsetX: p.sheetOffsetX,
-                    sheetOffsetY: p.sheetOffsetY,
-                    cellOffsetX: p.cellOffsetX,
-                    cellOffsetY: p.cellOffsetY
-                };
-
-                if (p.xhrLoading) params.xhrLoading = p.xhrLoading;//forces blob loading
-                if (p.state) params.state = p.state;
-                if (p.tags) params.tags = p.tags;
-
-            } else {
-
-                if (!storeAsGlobal && this.game.states.current) {
-                    params.state = this.game.states.current;
-                }
-
-                params.key = key;
-                params.url = url;
-                params.metadata = {
-                    frameWidth: frameWidth,
-                    frameHeight: frameHeight,
-                    numCells: numCells,
-                    rows: rows,
-                    cols: cols,
-                    sheetOffsetX: sheetOffsetX,
-                    sheetOffsetY: sheetOffsetY,
-                    cellOffsetX: cellOffsetX,
-                    cellOffsetY: cellOffsetY
-                };
-
-            }
-
-
-            var file = new Kiwi.Files.TextureFile(this.game, params);
-            this.addFileToQueue(file);
-
-            return file;
-        }
-
-        /**
-        * Creates new file's for loading a texture atlas and adds those files to the loading queue.
-        * @method addTextureAtlas
-        * @param key {String} The key for the image file.
-        * @param imageUrl {String} The url of the image to load.
-        * @param jsonID {String} A key for the JSON file.
-        * @param jsonURL {String} The url of the json file to load.
-        * @param [storeAsGlobal=true] {Boolean} If hte files should be stored globally or not.
-        * @return {Kiwi.Files.File} The file which was created.
-        * @public
-        */
-        public addTextureAtlas(key: string, imageURL: string, jsonID: string, jsonURL: string, storeAsGlobal: boolean = true) {
-
-            var textureParams: any = {
-                type: Kiwi.Files.File.TEXTURE_ATLAS,
-                key: key,
-                url: imageURL,
-                fileStore: this.game.fileStore,
-                metadata: {
-                    jsonID: jsonID
-                }
-            };
-            var jsonParams: any = {
-                type: Kiwi.Files.File.JSON,
-                key: jsonID,
-                url: jsonURL,
-                fileStore: this.game.fileStore,
-                metadata: {
-                    imageID: key
-                }
-            };
-
-            if (!storeAsGlobal && this.game.states.current) {
-                textureParams.state = this.game.states.current;
-                jsonParams.state = this.game.states.current;
-            }
-
-            if (Kiwi.Utils.Common.isObject(key)) {
-                var p: any = key;
-
-                textureParams.key = p.textureAtlasKey;
-                textureParams.url = p.textureAtlasURL;
-                jsonParams.key = p.jsonKey;
-                jsonParams.url = p.jsonURL;
-
-                textureParams.metadata.jsonID = jsonParams.key;
-                jsonParams.metadata.imageID = textureParams.key;
-
-                if (p.state) {
-                    textureParams.state = p.state;
-                    jsonParams.state = p.state;
-                }
-
-                if (p.xhrLoading) textureParams.xhrLoading = p.xhrLoading; //forces blob loading
-                if (p.tags) {
-                    jsonParams.tags = p.tags;
-                    textureParams.tags = p.tags;
-                }
-
-            } 
-
-            var imageFile = new Kiwi.Files.TextureFile(this.game, textureParams);
-            var jsonFile = new Kiwi.Files.DataFile(this.game, jsonParams);
-
-            this.addFileToQueue(imageFile);
-            this.addFileToQueue(jsonFile);
-
-            return imageFile;
-        }
-
-        /**
-        * Creates a new File to store a audio piece. 
-        * This method firstly checks to see if the AUDIO file being loaded is supported or not by the browser/device before adding it to the loading queue.
-        * You can override this behaviour and tell the audio data to load even if not supported by setting the 'onlyIfSupported' boolean to false.
-        * Also you can now pass an array of filepaths, and the first audio filetype that is supported will be loaded.
-        *
-        * @method addAudio
-        * @param key {String} The key for the audio file.
-        * @param url {String} The url of the audio to load. You can pass an array of URLs, in which case the first supported audio filetype in the array will be loaded.
-        * @param [storeAsGlobal=true] {Boolean} If the file should be stored globally.
-        * @param [onlyIfSupported=true] {Boolean} If the audio file should only be loaded if Kiwi detects that the audio file could be played. 
-        * @return {Kiwi.Files.File} The file which was created.
-        * @public
-        */
-        public addAudio(key: string, url: any, storeAsGlobal: boolean = true, onlyIfSupported: boolean = true) {
-
-            var params = {
-                type: Kiwi.Files.File.AUDIO,
-                key: null,
-                url: null,
-                state: null,
-                fileStore: this.game.fileStore
-            };
-
-            if (Kiwi.Utils.Common.isObject(key)) {
-                params = (<any>key);
-                params.fileStore = this.game.fileStore;
-
-            } else {
-                params.key = key;
-                params.url = url;
-
-                if (!storeAsGlobal && this.game.states.current) {
-                    params.state = this.game.states.current;
-                }
-
-            }
-
-            var i = 0,
-                urls, file;
-
-            //If it is a string then try to load that file
-            if (Kiwi.Utils.Common.isString(params.url)) {
-                urls = [params.url];
-            } else {
-                urls = params.url;
-            }
-
-            while (i < urls.length) {
-
-                params.url = urls[i]
-                file = this._attemptToAddAudio(params, onlyIfSupported);
-                if (file) {
-                    return file;
-                }
-
-                i++;
-            }
-
-            return null;
-        }
-
-        /**
-        * This method firstly checks to see if the AUDIO file being loaded is supported or not by the browser/device before adding it to the loading queue.
-        * Returns a boolean if the audio file was successfully added or not to the file directory.
-        * @method _attemptToAddAudio
-        * @param params {Object} 
-        *   @param params.key {String} The key for the audio file.
-        *   @param params.url {String} The url of the audio to load. 
-        *   @param [params.state=true] {Kiwi.State} The state this file should be for.
-        *   @param [params.fileStore] {Kiwi.Files.FileStore} 
-        * @param [onlyIfSupported=true] {Boolean} If the audio file should only be loaded if Kiwi detects that the audio file could be played. 
-        * @return {Kiwi.Files.File} The file which was created.
-        * @private
-        */
-        private _attemptToAddAudio(params:any, onlyIfSupported: boolean): Kiwi.Files.File {
-
-            var file = new Kiwi.Files.AudioFile(this.game, params);
-            var support = false;
-
-            switch (file.extension) {
-                case 'mp3':
-                    support = Kiwi.DEVICE.mp3;
-                    break;
-
-                case 'ogg':
-                case 'oga':
-                    support = Kiwi.DEVICE.ogg;
-                    break;
-
-                case 'm4a':
-                    support = Kiwi.DEVICE.m4a;
-                    break;
-
-                case 'wav':
-                case 'wave':
-                    support = Kiwi.DEVICE.wav;
-                    break;
-            }
-
-            if (support == true || onlyIfSupported == false) {
-                this.addFileToQueue(file);
-                return file;
-            } else {
-                Kiwi.Log.error('Kiwi.Loader: Audio Format not supported on this Device/Browser.', '#audio', '#unsupported');
-                return null;
-            }
-
-        }
-
-        /**
-        * Creates a new File to store JSON and adds it to the loading queue.
-        * @method addJSON
-        * @param key {String} The key for the file.
-        * @param url {String} The url to the json file.
-        * @param [storeAsGlobal=true] {Boolean} If the file should be stored globally.
-        * @return {Kiwi.Files.File} The file which was created.
-        * @public
-        */
-        public addJSON(key: string, url: string, storeAsGlobal: boolean = true) {
-
-            var params: any = {
-                type: Kiwi.Files.File.JSON,
-                key: key, 
-                url: url,
-                fileStore: this.game.fileStore
-            };
-
-            if (Kiwi.Utils.Common.isObject(key)) {
-                var p: any = key;
-
-                params.key = p.key;
-                params.url = p.url;
-
-                if (p.parse) params.parse = p.parse;
-                if (p.state) params.state = p.state;
-                if (p.tags) params.tags = p.tags;
-
-            } else {
-
-                if (!storeAsGlobal && this.game.states.current) {
-                    params.state = this.game.states.current;
-                }
-
-            }
-
-            var file = new Kiwi.Files.DataFile(this.game, params);
-            this.addFileToQueue(file);
-            return file;
-
-        }
-
-        /**
-        * Creates a new File to store XML and adds it to the loading queue.
-        * @method addXML
-        * @param key {String} The key for the file.
-        * @param url {String} The url to the xml file.
-        * @param [storeAsGlobal=true] {Boolean} If the file should be stored globally.
-        * @return {Kiwi.Files.File} The file which was created.
-        * @public
-        */
-        public addXML(key: string, url: string, storeAsGlobal: boolean = true) {
-            
-            var params:any = {
-                type: Kiwi.Files.File.XML,
-                key: key,
-                url: url,
-                fileStore: this.game.fileStore
-            };
-
-            if (Kiwi.Utils.Common.isObject(key)) {
-                var p: any = key;
-
-                params.key = p.key;
-                params.url = p.url;
-
-                if (p.parse) params.parse = p.parse;
-                if (p.state) params.state = p.state;
-                if (p.tags) params.tags = p.tags;
-
-            } else {
-
-                if (!storeAsGlobal && this.game.states.current) {
-                    params.state = this.game.states.current;
-                }
-
-            }
-
-            var file = new Kiwi.Files.DataFile(this.game, params);
-            this.addFileToQueue(file);
-            return file;
-
-        }
-
-        /**
-        * Creates a new File for a Binary file and adds it to the loading queue.
-        * @method addBinaryFile
-        * @param key {String} The key for the file.
-        * @param url {String} The url to the Binary file.
-        * @param [storeAsGlobal=true] {Boolean} If the file should be stored globally.
-        * @return {Kiwi.Files.File} The file which was created.
-        * @public
-        */
-        public addBinaryFile(key: string, url: string, storeAsGlobal: boolean = true) {
-
-            var params: any = {
-                type: Kiwi.Files.File.BINARY_DATA,
-                key: key,
-                url: url,
-                fileStore: this.game.fileStore
-            };
-
-            if (Kiwi.Utils.Common.isObject(key)) {
-                var p: any = key;
-
-                params.key = p.key;
-                params.url = p.url;
-
-                if (p.parse) params.parse = p.parse;
-                if (p.state) params.state = p.state;
-                if (p.tags) params.tags = p.tags;
-
-            } else {
-
-                if (!storeAsGlobal && this.game.states.current) {
-                    params.state = this.game.states.current;
-                }
-
-            }
-
-            var file = new Kiwi.Files.DataFile(this.game, params);
-            this.addFileToQueue(file);
-            return file;
-
-        }
-
-        /**
-        * Creates a new File to store a text file and adds it to the loading queue.
-        * @method addTextFile
-        * @param key {String} The key for the file.
-        * @param url {String} The url to the text file.
-        * @param [storeAsGlobal=true] {Boolean} If the file should be stored globally.
-        * @return {Kiwi.Files.File} The file which was created.
-        * @public
-        */
-        public addTextFile(key: string, url: string, storeAsGlobal: boolean = true) {
-
-            var params: any = {
-                type: Kiwi.Files.File.TEXT_DATA,
-                key: key,
-                url: url,
-                fileStore: this.game.fileStore
-            };
-
-            if (Kiwi.Utils.Common.isObject(key)) {
-                var p: any = key;
-
-                params.key = p.key;
-                params.url = p.url;
-
-                if (p.parse) params.parse = p.parse;
-                if (p.state) params.state = p.state;
-                if (p.tags) params.tags = p.tags;
-
-            } else {
-
-                if (!storeAsGlobal && this.game.states.current) {
-                    params.state = this.game.states.current;
-                }
-
-            }
-
-            var file = new Kiwi.Files.DataFile(this.game, params);
-            this.addFileToQueue(file);
-            return file;
-
-        }
-
-        /**
-        * Flags this loader for garbage collection. Only use this method if you are SURE you will no longer need it. 
-        * Otherwise it is best to leave it alone.
-        * 
-        * @method destroy
-        * @public
-        */
-        public destroy() {
-
-            this.onQueueComplete.dispose();
-            this.onQueueProgress.dispose();
-
-            delete this.game;
-
-            delete this.onQueueComplete;
-            delete this.onQueueProgress;
-
-            var i = 0;
-            while (i < this._loadingList.length) {
-                this._loadingList[i].destroy();
-                i++;
-            }
-            this._loadingList = [];
-
-            var i = 0;
-            while (i < this._loadingQueue.length) {
-                this._loadingQueue[i].destroy();
-                i++;
-            }
-            this._loadingQueue = [];
-
-            var i = 0;
-            while (i < this._loadingParallel.length) {
-                this._loadingParallel[i].destroy();
-                i++;
-            }
-            this._loadingParallel = [];
-
-
-        }
-
-        
-        /**
-        * -----------------------
-        * Deprecated - Functionality exists. Maps to its equalvent
-        * -----------------------
-        **/        
-        
-
-        /**
-        * Initialise the properities that are needed on this loader.
-        * Recommended you use the 'onQueueProgress' / 'onQueueComplete' signals instead.
-        * 
-        * @method init
-        * @param [progress=null] {Any} Progress callback method.
-        * @param [complete=null] {Any} Complete callback method.
-        * @param [calculateBytes=false] {boolean} 
-        * @deprecated Deprecated as of 1.2.0
-        * @public
-        */
-        public init(progress: any = null, complete: any = null, calculateBytes: boolean=null) {
-
-            if (calculateBytes !== null) {
-                this._calculateBytes = calculateBytes;
-            } 
-
-            if (progress !== null) {
-                this.onQueueProgress.addOnce( progress );
-            }
-
-            if (complete !== null) {
-                this.onQueueComplete.addOnce( complete );
-            }
-
-        } 
-
-        /**
-        * Loops through all of the files that need to be loaded and start the load event on them. 
-        * @method startLoad
-        * @deprecated Use 'start' instead. Deprecated as of 1.2.0
-        * @public
-        */
-        public startLoad() {
-            this.start();
-        }
-             
-        /**
-        * Returns a percentage of the amount that has been loaded so far.
-        * @method getPercentLoaded
-        * @return {Number}
-        * @deprecated Use 'percentLoaded' instead. Deprecated as of 1.2.0
-        * @public
-        */
-        public getPercentLoaded(): number {
-            return this.percentLoaded;
-        }
-
-
-        /**
-        * Returns a boolean indicating if everything in the loading que has been loaded or not.
-        * @method complete
-        * @return {boolean}
-        * @deprecated Use 'percentLoaded' instead. Deprecated as of 1.2.0
-        * @public
-        */
-        public complete(): boolean {
-            return ( this.percentLoaded === 100 );
-        }
-
-        /**
-        * Quick way of getting / setting the private variable 'calculateBytes'
-        * To be made into a public variable once removed.
-        * @method calculateBytes
-        * @param [value] {boolean}
-        * @return {boolean}
-        * @public
-        */
-        public calculateBytes(value?: boolean): boolean {
-
-            if (typeof value !== "undefined") {
-                this._calculateBytes = value;
-            }
-
-            return this._calculateBytes;
-        }
-
-        /**
-        * Returns the total number of bytes that have been loaded so far from files in the file queue.
-        * 
-        * @method getBytesLoaded
-        * @return {Number}
-        * @readOnly
-        * @deprecated Use 'bytesLoaded' instead. Deprecated as of 1.2.0
-        * @public
-        */
-        public getBytesLoaded(): number {
-
-            return this.bytesLoaded;
-        }
-
-    }
+		constructor(game: Kiwi.Game) {
+
+			this.game = game;
+
+		}
+
+		/**
+		* The type of object this is.
+		* @method objType
+		* @return {String} "Loader"
+		* @public
+		*/
+		public objType() {
+			return "Loader";
+		}
+
+		/**
+		* The game this loader is attached to.
+		* @property game 
+		* @type Kiwi.Game
+		* @public
+		*/
+		public game: Kiwi.Game;
+
+		/**
+		* A list of files that can be loaded in parallel to one another.
+		* This list of files are currently being loaded. 
+		* 
+		* @property _loadingParallel
+		* @type Array
+		* @since 1.2.0
+		* @private 
+		*/
+		private _loadingParallel: Kiwi.Files.File[];
+
+		/**
+		* List of files that cannot load in parallel to one another
+		* and so need to wait for previous files to load first. 
+		* Generally files loaded via XHR.
+		* 
+		* @property _loadingQueue
+		* @type Array
+		* @since 1.2.0
+		* @private 
+		*/
+		private _loadingQueue: Kiwi.Files.File[];
+
+		/**
+		* List of files that are to be loaded. 
+		* These files will be placed in the '_loadingQueue' or '_loadingParallel' 
+		* lists when the queue is told to 'start' loading.
+		* 
+		* @property _loadingList
+		* @type Array
+		* @since 1.2.0
+		* @private 
+		*/
+		private _loadingList: Kiwi.Files.File[];
+
+		/**
+		* A Signal which dispatches callbacks when all files in the 'loadingList' have been loaded.
+		* When adding callbacks make sure to 'remove' them (or to use the 'addOnce' method) 
+		* otherwise will fire when other sections use the loader.
+		* 
+		* @method onQueueComplete
+		* @type Kiwi.Signal
+		* @since 1.2.0
+		* @public
+		*/
+		public onQueueComplete: Kiwi.Signal;
+
+		/**
+		* A Signal which dispatches callbacks each time a file in the 'loadingList' have been loaded.
+		* Callbacks dispatched are passed the following arguments in order.
+		* 1. percent - The percentage of files loaded. A number from 0 - 100
+		* 2. bytesLoaded - The number of bytes loaded 
+		* 3. file - The latest file that was loaded. First call will be null.
+		* 
+		* When adding callbacks make sure to 'remove' them (or to use the 'addOnce' method) 
+		* otherwise will fire when other sections use the loader.
+		* 
+		* @method onQueueProgress
+		* @type Kiwi.Signal
+		* @since 1.2.0
+		* @public
+		*/
+		public onQueueProgress: Kiwi.Signal;
+
+
+		/**
+		* A flag indicating if the files inside the file queue are loading or not.
+		* 
+		* @property _fileQueueLoading
+		* @type Boolean
+		* @default false
+		* @since 1.2.0
+		* @private
+		*/
+		private _queueLoading: boolean = false;
+
+		/**
+		* READ ONLY: A flag indicating if the files inside the file queue are loading or not.
+		* 
+		* @property fileQueueLoading
+		* @type Boolean
+		* @default false
+		* @readOnly
+		* @since 1.2.0
+		* @public
+		*/
+		public get queueLoading(): boolean {
+			return this._queueLoading;
+		}
+
+
+		/**
+		* When 'calculateBytes' is true the percentLoaded will be the `bytesLoaded / bytesTotal`. 
+		* Otherwise it is based on the `filesLoaded / numberOfFilesToLoad`. 
+		*
+		* @property percentLoaded
+		* @type Number
+		* @since 1.2.0
+		* @readOnly
+		* @public
+		*/
+		public percentLoaded: number = 0;
+
+
+		/**
+		* When enabled, files which can be loaded in parallel (those which are loaded via tags) 
+		* will be loaded at the same time. 
+		* 
+		* The default behaviour is to have the files loading in a queued fashion instead of one after another.
+		* 
+		* @property enableParallelLoading
+		* @type Boolean
+		* @default false
+		* @since 1.2.0
+		* @public
+		*/
+		public enableParallelLoading: boolean = false; 
+
+
+		/**
+		* The boot method is executed when the DOM has successfully loaded and we can now start the game.
+		* @method boot
+		* @public
+		*/
+		public boot() {
+
+			this._loadingList = [];
+
+			this._loadingParallel = [];
+
+			this._loadingQueue = [];
+
+			this.onQueueComplete = new Kiwi.Signal();
+
+			this.onQueueProgress = new Kiwi.Signal();
+
+		}
+
+		/**
+		* Starts loading all the files which are in the file queue. 
+		*
+		* To accurately use the bytesLoaded or bytesTotal properties you will need to set the 'calculateBytes' boolean to true.
+		* This may increase load times, as each file in the queue will firstly make XHR HEAD requests for information.
+		*
+		* When 'calculateBytes' is true the percentLoaded will be the `bytesLoaded / bytesTotal`. 
+		* Otherwise it is based on the `filesLoaded / numberOfFilesToLoad`. 
+		*
+		* @method start
+		* @param [calculateBytes] {Boolean} Setter for the 'calculateBytes' property.
+		* @since 1.2.0
+		* @public
+		*/ 
+		public start(calculateBytes: boolean = null) {
+
+			if (calculateBytes !== null) {
+				this._calculateBytes = calculateBytes;
+			}
+
+			if (this._queueLoading) {
+				Kiwi.Log.warn('Kiwi.Files.Loader: Files in the queue are already being loaded');
+				return;
+			}
+
+			//Reset the number of bytes laoded
+			this._bytesLoaded = 0;
+			this._bytesTotal = 0;
+			this.percentLoaded = 0;
+
+			if (this._calculateBytes) {
+				this.calculateQueuedSize(this._startLoading, this);
+			} else {
+				this._startLoading();
+			}
+
+		}
+
+		/**
+		* Loops through the file queue and starts the loading process. 
+		* 
+		* @method _startLoading
+		* @private 
+		*/
+		private _startLoading() {
+
+			//Any files to load?
+			if (this._loadingList.length <= 0) {
+				Kiwi.Log.log('Kiwi.Files.Loader: No files are to load have been found.', '#loading');
+				this.onQueueProgress.dispatch(100, 0, null);
+				this.onQueueComplete.dispatch();
+				return;
+			}
+
+			//There are files to load
+			var i = 0,
+				file: Kiwi.Files.File;
+
+			while (i < this._loadingList.length) {
+
+				if (this._calculateBytes) {
+					this._loadingList[i].onProgress.add(this._updateFileListInformation, this);
+				}
+
+				this._loadingList[i].onComplete.addOnce(this._fileQueueUpdate, this);
+
+				this._sortFile(this._loadingList[i]);
+
+				i++;
+			}
+
+			this._queueLoading = true;
+			this._bytesLoaded = 0;
+
+			this._startLoadingQueue();
+			this._startLoadingAllParallel();
+
+			this._fileQueueUpdate(null, true);
+
+		}
+
+		/**
+		* Adds a file to the queue of files to be loaded.
+		* Files cannot be added whilst the queue is currently loading, 
+		* the file to add is currently loading, or has been loaded before.
+		* 
+		* @method addFileToQueue
+		* @param file {Kiwi.Files.File} The file to add.
+		* @return {Boolean} If the file was added to the queue or not. 
+		* @since 1.2.0
+		* @public
+		*/
+		public addFileToQueue(file: Kiwi.Files.File) {
+
+			if (this._queueLoading) {
+				Kiwi.Log.warn('Kiwi.Files.Loader: File cannot be added to the queue whilst the queue is currently loading.', '#loading', '#filequeue');
+				return false;
+			}
+
+			if (file.loading || file.complete) {
+				Kiwi.Log.warn('Kiwi.Files.Loader: File could not be added as it is currently loading or has already loaded.', '#loading', '#filequeue');
+				return false;
+			}
+
+			this._loadingList.push(file);
+			return true;
+		}
+
+		/**
+		* Removes a file from the file queue. 
+		* Files cannot be removed whilst the queue is loading.
+		*
+		* @method removeFileFromQueue
+		* @param file {Kiwi.Files.File} The file to remove.
+		* @return {Boolean} If the file was added to the queue or not.
+		* @since 1.2.0
+		* @public
+		*/
+		public removeFileFromQueue(file: Kiwi.Files.File): boolean {
+
+			if (this._queueLoading) {
+				Kiwi.Log.warn('Kiwi.Files.Loader: File cannot be remove from the queue whilst the queue is currently loading.', '#loading', '#filequeue');
+				return false;
+			}
+
+			var index = this._loadingList.indexOf(file);
+
+			if (index === -1) {
+				return false;
+			} 
+
+			if (file.loading) {
+				Kiwi.Log.warn('Kiwi.Files.Loader: Cannot remove the file from the list as it is currently loading.', '#loading', '#filequeue');
+				return false;
+			}
+
+			this._loadingList.splice(index, 1);
+			return true;
+		}
+
+		/**
+		* Clears the file queue of all files. 
+		* 
+		* @method clearQueue
+		* @since 1.2.0
+		* @public
+		*/
+		public clearQueue() {
+
+			if (!this._queueLoading) {
+				this._loadingList.length = 0;
+			} else {
+				Kiwi.Log.error('Kiwi.Files.Loader: Cannot clear the file queue whilst the files are being loaded.', '#loading', '#filequeue');
+			}
+		}
+
+		/**
+		* Starts the process of loading a file outside of the regular queue loading process.
+		* Callbacks for load completion need to be added onto the file via 'onComplete' Signal.
+		*
+		* @method loadFile
+		* @public
+		*/
+		public loadFile(file: Kiwi.Files.File) {
+
+			if ( file.loading || file.complete ) {
+				Kiwi.Log.error('Kiwi.Files.Loader: Could not add file. File is already loading or has completed loading.');
+				return;
+			}
+
+			this._sortFile(file, true);
+
+		}
+
+		/**
+		* Sorts a file and places it into either the 'loadingParallel' or 'loadingQueue' 
+		* depending on the method of loading it is using.
+		* 
+		* @method _sortFile
+		* @param file {Kiwi.Files.File}
+		* @since 1.2.0
+		* @private
+		*/
+		private _sortFile(file: Kiwi.Files.File, startLoading: boolean = false) {
+
+			if (this.enableParallelLoading && file.loadInParallel) {
+				//Push into the tag loader queue
+				this._loadingParallel.push(file);
+
+				if (startLoading) {
+					this._startLoadingParallel(file);
+				}
+
+			} else {
+				//Push into the xhr queue
+				this._loadingQueue.push(file);
+
+				if (startLoading) {
+					this._startLoadingQueue();
+				}
+			}
+
+		}
+
+		/**
+		* The number of files in the file queue that have been updated.
+		* 
+		* @property _completeFiles
+		* @type number
+		* @default 0
+		* @private
+		*/
+		private _completedFiles: number = 0;
+
+		/**
+		* Called each time a file has processed whilst loading, or has just completed loading.
+		* 
+		* Calculates the new number of bytes loaded and 
+		* the percentage of loading done by looping through all of the files.
+		* 
+		* @method _updateFileListInformation
+		* @private
+		*/
+		private _updateFileListInformation() {
+
+			var i = 0;
+
+			this._completedFiles = 0;
+			this._bytesLoaded = 0;
+
+			while (i < this._loadingList.length) {
+
+				//Was the file loaded, but we have no bytes (must have used the tag loader) and we have their details?
+				if (this._loadingList[i].bytesLoaded === 0 && this._loadingList[i].success && this._loadingList[i].detailsReceived) {
+					this._bytesLoaded += this._loadingList[i].size;
+
+				} else {
+					//Add the bytes loaded to the list 
+					this._bytesLoaded += this._loadingList[i].bytesLoaded;
+				}
+
+				//Calculate percentage
+				if (this._loadingList[i].complete) {
+					this._completedFiles++;
+				}
+
+				i++;
+			}
+
+			//Calculate the percentage depending on how accurate we can be.
+			if (this._calculateBytes) {
+				this.percentLoaded = (this._bytesLoaded / this._bytesTotal) * 100;
+			} else {
+				this.percentLoaded = (this._completedFiles / this._loadingList.length) * 100;
+			}
+
+		}
+
+		/**
+		* Executed by files when they have successfully been loaded.
+		* This method checks to see if the files are in the file queue, and dispatches the appropriate events.
+		* 
+		* @method _fileQueueUpdate
+		* @param file {Kiwi.Files.File} The file which has been recently loaded.
+		* @param [forceProgressCheck=false] {Boolean} If the progress of file loading should be checked, regardless of the file being in the queue or not.
+		* @since 1.2.0
+		* @private
+		*/
+		private _fileQueueUpdate(file: Kiwi.Files.File, forceProgressCheck: boolean = false) {
+
+			//If the file loaded is in the loadingList
+			if (!forceProgressCheck && this._loadingList.indexOf(file) === -1) {
+				return;
+			}
+
+			//Update the file information.
+			this._updateFileListInformation();
+
+			//Dispatch progress event.
+			this.onQueueProgress.dispatch(this.percentLoaded, this.bytesLoaded, file);
+
+			if (this._completedFiles >= this._loadingList.length) {
+				//Clear the file queue and dispatch the loaded event
+				this._queueLoading = false;
+				this.clearQueue();
+				this.onQueueComplete.dispatch();
+			}
+
+		}
+
+		/**
+		* Starts the loading process in the loadingQueue. 
+		* @method _startLoadingQueue
+		* @return {Boolean}
+		* @private
+		* @since 1.2.0
+		* @return {boolean} Whether the first file is loading
+		*/
+		private _startLoadingQueue(): boolean {
+
+			//Any files to load?
+			if (this._loadingQueue.length <= 0) {
+				Kiwi.Log.log('Kiwi.Files.Loader: No queued files to load.', '#loading');
+				return false;
+			}
+
+			//Is the first file currently loading?
+			if (this._loadingQueue[0].loading) {
+				return false;
+			}
+
+			//Attempt to load the file!
+			this._loadingQueue[0].onComplete.addOnce(this._queueFileComplete, this);
+			this._loadingQueue[0].load();
+			return true;
+		}
+
+		/**
+		* Executed when a file in the 'loadingQueue' has been successfully loaded.
+		* Removes the file from the loadingQueue and executes the '_startLoadingQueue' to start loading the next file. 
+		* 
+		* @method _queueFileComplete
+		* @param file {Kiwi.Files.File}
+		* @since 1.2.0
+		* @private
+		*/
+		private _queueFileComplete(file: Kiwi.Files.File) {
+
+			//Remove from the loadingQueue
+			var index = this._loadingQueue.indexOf(file);
+			if (index === -1) {
+				Kiwi.Log.warn("Something has gone wrong? The file which executed this method doesn't exist in the loadingQueue.", '#loading', '#error');
+				return;
+			}
+
+			this._loadingQueue.splice(index, 1);
+
+			//Start loading the next file
+			this._startLoadingQueue();
+		}
+
+		/**
+		* Starts loading a file which can be loaded in parallel.
+		* @method _startLoadingParallel
+		* @param params file {Kiwi.Files.File}
+		* @since 1.2.0
+		* @private 
+		*/
+		private _startLoadingParallel( file: Kiwi.Files.File) {
+
+			if (!file.loading) {
+				file.onComplete.add(this._parallelFileComplete, this);
+				file.load();
+			}
+
+		}
+		
+		/**
+		* Starts loading all files which can be loaded in parallel.
+		* @method _startLoadingAllParallel
+		* @since 1.2.0
+		* @private 
+		*/
+		private _startLoadingAllParallel() {
+
+			var i = 0,
+				file: Kiwi.Files.File;
+
+			while (i < this._loadingParallel.length) {
+				this._startLoadingParallel(this._loadingParallel[i]);
+				i++;
+			}
+
+		}
+		
+		/**
+		* Executed when a file in the 'loadingParallel' lsit has been successfully loaded.
+		* Removes the file from the list and get the fileQueue to check its progress.
+		* 
+		* @method _parallelFileComplete
+		* @param file {Kiwi.Files.File}
+		* @since 1.2.0
+		* @private 
+		*/
+		private _parallelFileComplete(file: Kiwi.Files.File) {
+
+			var index = this._loadingParallel.indexOf(file);
+			if (index === -1) {
+				Kiwi.Log.warn("Something has gone wrong? The file which executed this method doesn't exist in the loadingParallel.", '#loading', '#error');
+				return;
+			}
+
+			this._loadingParallel.splice(index, 1);
+		}
+
+
+		/**
+		* -----------------------------
+		* Bytes Loaded Methods 
+		* -----------------------------
+		**/
+		
+		/**
+		* If the number of bytes for each file should be calculated before the queue starts loading.
+		* If true each file in the queue makes a XHR HEAD request first to get the total values.
+		*
+		* @property _calculateBytes
+		* @type Boolean
+		* @private 
+		*/
+		private _calculateBytes: boolean = false;
+
+		/**
+		* Callback for when the total number of bytes of the files in the file list has been calculated.
+		* 
+		* @property onQueueSizeCalculate
+		* @type any
+		* @private
+		*/
+		private onSizeCallback: any;
+		
+		/**
+		* Context that the onSizeCallback should be executed in.
+		* 
+		* @property onSizeContext
+		* @type any
+		* @private
+		*/
+		private onSizeContext: any;
+
+		/**
+		* The index of the current file in the filelist thats size is being retrieved.
+		* @property _currentFileIndex
+		* @type number
+		* @private
+		*/
+		private _currentFileIndex: number = 0;
+
+		/**
+		* Total file size (in bytes) of all files in the queue to be loaded. 
+		* 
+		* @property _bytesTotal
+		* @type Number
+		* @private
+		*/
+		private _bytesTotal: number = 0;
+
+		/**
+		* READ ONLY: Returns the total number of bytes for the files in the file queue.
+		* Only contains a value if you use the 'calculateBytes' and are loading files
+		* OR if you use the 'calculateQueuedSize' method.
+		* 
+		* @property bytesTotal
+		* @readOnly
+		* @default 0
+		* @since 1.2.0
+		* @type Number
+		* @public
+		*/
+		public get bytesTotal(): number {
+			return this._bytesTotal;
+		}
+
+		/**
+		* The number of bytes loaded of files in the file queue. 
+		* 
+		* @property _bytesLoaded
+		* @type Number
+		* @private 
+		*/
+		private _bytesLoaded: number = 0;
+
+		/**
+		* READ ONLY: Returns the total number of bytes for the files in the file queue.
+		*
+		* If you are using this make sure you set the 'calculateBytes' property to true OR execute the 'calculateQueuedSize' method. 
+		* Otherwise files that are loaded via tags will not be accurate!
+		* 
+		* @property bytesLoaded
+		* @readOnly
+		* @default 0
+		* @since 1.2.0
+		* @type Number
+		* @public
+		*/
+		public get bytesLoaded(): number {
+			return this._bytesLoaded;
+		}
+
+		/**
+		* Loops through the file queue and gets file information (filesize, ETag, filetype) for each.
+		* 
+		* To get accurate information about the bytesLoaded, bytesTotal, and the percentLoaded 
+		* set the 'calculateBytes' property to true, as the loader will automatically execute this method before hand.
+		* 
+		* Can only be executed when the file queue is not currently loading.
+		* 
+		* @method calculateQueuedSize
+		* @param callback {any}
+		* @param [context=null] {any}
+		* @public
+		*/
+		public calculateQueuedSize(callback: any, context: any = null) {
+
+			//Is the queue currently loading files?
+			if (this._queueLoading) {
+				Kiwi.Log.warn('Kiwi.Files.Loader: Cannot calculate the size of the files in the filequeue whilst they are loading. ');
+				return;
+			}
+
+			//Set the callbacks
+			this.onSizeCallback = callback;
+			this.onSizeContext = context;
+
+			// Start the process
+			this._currentFileIndex = 0;
+			this._bytesTotal = 0;
+			this._queueLoading = true;
+
+			this._calculateNextFileSize();
+		}
+
+		/**
+		* Checks to see if all the file sizes have been retrieved. 
+		* If so completes the "calculateQueuedSize" call.
+		* Otherwise requests the next file's details.
+		*
+		* @method _calculateNextFileSize
+		* @private
+		*/
+		private _calculateNextFileSize() {
+
+			if (this._currentFileIndex >= this._loadingList.length) {
+				this._queueLoading = false;
+				this.onSizeCallback.call(this.onSizeContext, this._bytesTotal);;
+				return;
+			}
+			
+			var file = this._loadingList[this._currentFileIndex];
+
+			//Have we already got the details for this file?
+			if (file.detailsReceived) {
+				this._detailsReceived();
+			} else {
+				var details = file.loadDetails(this._detailsReceived, this);
+
+				//Skip to the next file if the request could not be made.
+				//Shouldn't happen.
+				if (!details) {
+					this._detailsReceived();
+				}
+			}
+
+		}
+
+		/**
+		* Executed when by '_calculateNextFileSize' when the files information has been retrieved.
+		* Adds its calculated size to the _bytesTotal and executes the 'nextFileSize' method.
+		* 
+		* @method _detailsReceived
+		* @private 
+		*/
+		private _detailsReceived() {
+
+			var file = this._loadingList[this._currentFileIndex];
+
+			if (file.detailsReceived) {
+				this._bytesTotal += file.size;
+			}
+
+			this._currentFileIndex++;
+			this._calculateNextFileSize();
+
+		}
+
+
+		/**
+		* -----------------------------
+		* File Addition Methods
+		* -----------------------------
+		*/
+
+
+		/**
+		* Creates a new file for an image and adds a the file to loading queue. 
+		* @method addImage
+		* @param key {String} The key for the file.
+		* @param url {String} The url of the image to load.
+		* @param [width] {number} The width of the cell on the image to use once the image is loaded.
+		* @param [height] {number} The height of the cell on the image to use once the image is loaded.
+		* @param [offsetX] {number} An offset on the x axis of the cell.
+		* @param [offsetY] {number} An offset of the y axis of the cell.
+		* @param [storeAsGlobal=true] {boolean} If the image should be stored globally or not.
+		* @return {Kiwi.Files.File} The file which was created.
+		* @public
+		*/
+		public addImage(key: string, url: string, width?: number, height?: number, offsetX?: number, offsetY?: number, storeAsGlobal: boolean = true): Kiwi.Files.File {
+
+			var params:any = {
+				type: Kiwi.Files.File.IMAGE,
+				key: null,
+				url: null,
+				fileStore: this.game.fileStore,
+				metadata: {}
+			};
+
+			if ( Kiwi.Utils.Common.isObject(key) ) {
+				var p: any = key;
+
+				params.key = p.key;
+				params.url = p.url;
+				params.metadata = {
+					width: p.width,
+					height: p.height,
+					offsetX: p.offsetX,
+					offsetY: p.offsetY
+				};
+
+				if (p.xhrLoading) params.xhrLoading = p.xhrLoading;//forces blob loading
+				if (p.state) params.state = p.state;
+				if (p.tags) params.tags = p.tags;
+
+			} else {
+
+				if (!storeAsGlobal && this.game.states.current) {
+					params.state = this.game.states.current;
+				}
+
+				params.key = key;
+				params.url = url;
+				params.metadata = {
+					width: width,
+					height: height,
+					offsetX: offsetX,
+					offsetY: offsetY
+				};
+
+			}
+
+			var file: Kiwi.Files.File = new Kiwi.Files.TextureFile(this.game, params);
+			this.addFileToQueue(file);
+
+			return file;
+		}
+
+		/**
+		* Creates a new file for a spritesheet and adds the file to the loading queue.
+		* @method addSpriteSheet
+		* @param key {String} The key for the file.
+		* @param url {String} The url of the image to load.
+		* @param frameWidth {number} The width of a single cell in the spritesheet.
+		* @param frameHeight {number} The height of a single cell in the spritesheet.
+		* @param [numCells] {number} The number of cells that are in this spritesheet.
+		* @param [rows] {number} The number of cells that are in a row.
+		* @param [cols] {number} The number of cells that are in a column.
+		* @param [sheetOffsetX] {number} The offset of the whole spritesheet on the x axis.
+		* @param [sheetOffsetY] {number} The offset of the whole spritesheet on the y axis.
+		* @param [cellOffsetX] {number} The spacing between each cell on the x axis.
+		* @param [cellOffsetY] {number} The spacing between each cell on the y axis.
+		* @param [storeAsGlobal=true] {boolean} 
+		* @return {Kiwi.Files.File} The file which was created.
+		* @public
+		*/
+		public addSpriteSheet(key: string, url: string, frameWidth: number, frameHeight: number, numCells?: number, rows?: number, cols?: number, sheetOffsetX?: number, sheetOffsetY?: number, cellOffsetX?: number, cellOffsetY?: number, storeAsGlobal: boolean = true) {
+
+			var params: any = {
+				type: Kiwi.Files.File.SPRITE_SHEET,
+				key: null,
+				url: null,
+				fileStore: this.game.fileStore,
+				metadata: {}
+			};
+
+
+			if (Kiwi.Utils.Common.isObject(key)) {
+				var p: any = key;
+
+				params.key = p.key;
+				params.url = p.url;
+				params.metadata = {
+					frameWidth: p.frameWidth,
+					frameHeight: p.frameHeight,
+					numCells: p.numCells,
+					rows: p.rows,
+					cols: p.cols,
+					sheetOffsetX: p.sheetOffsetX,
+					sheetOffsetY: p.sheetOffsetY,
+					cellOffsetX: p.cellOffsetX,
+					cellOffsetY: p.cellOffsetY
+				};
+
+				if (p.xhrLoading) params.xhrLoading = p.xhrLoading;//forces blob loading
+				if (p.state) params.state = p.state;
+				if (p.tags) params.tags = p.tags;
+
+			} else {
+
+				if (!storeAsGlobal && this.game.states.current) {
+					params.state = this.game.states.current;
+				}
+
+				params.key = key;
+				params.url = url;
+				params.metadata = {
+					frameWidth: frameWidth,
+					frameHeight: frameHeight,
+					numCells: numCells,
+					rows: rows,
+					cols: cols,
+					sheetOffsetX: sheetOffsetX,
+					sheetOffsetY: sheetOffsetY,
+					cellOffsetX: cellOffsetX,
+					cellOffsetY: cellOffsetY
+				};
+
+			}
+
+
+			var file = new Kiwi.Files.TextureFile(this.game, params);
+			this.addFileToQueue(file);
+
+			return file;
+		}
+
+		/**
+		* Creates new file's for loading a texture atlas and adds those files to the loading queue.
+		* @method addTextureAtlas
+		* @param key {String} The key for the image file.
+		* @param imageUrl {String} The url of the image to load.
+		* @param jsonID {String} A key for the JSON file.
+		* @param jsonURL {String} The url of the json file to load.
+		* @param [storeAsGlobal=true] {Boolean} If hte files should be stored globally or not.
+		* @return {Kiwi.Files.File} The file which was created.
+		* @public
+		*/
+		public addTextureAtlas(key: string, imageURL: string, jsonID: string, jsonURL: string, storeAsGlobal: boolean = true) {
+
+			var textureParams: any = {
+				type: Kiwi.Files.File.TEXTURE_ATLAS,
+				key: key,
+				url: imageURL,
+				fileStore: this.game.fileStore,
+				metadata: {
+					jsonID: jsonID
+				}
+			};
+			var jsonParams: any = {
+				type: Kiwi.Files.File.JSON,
+				key: jsonID,
+				url: jsonURL,
+				fileStore: this.game.fileStore,
+				metadata: {
+					imageID: key
+				}
+			};
+
+			if (!storeAsGlobal && this.game.states.current) {
+				textureParams.state = this.game.states.current;
+				jsonParams.state = this.game.states.current;
+			}
+
+			if (Kiwi.Utils.Common.isObject(key)) {
+				var p: any = key;
+
+				textureParams.key = p.textureAtlasKey;
+				textureParams.url = p.textureAtlasURL;
+				jsonParams.key = p.jsonKey;
+				jsonParams.url = p.jsonURL;
+
+				textureParams.metadata.jsonID = jsonParams.key;
+				jsonParams.metadata.imageID = textureParams.key;
+
+				if (p.state) {
+					textureParams.state = p.state;
+					jsonParams.state = p.state;
+				}
+
+				if (p.xhrLoading) textureParams.xhrLoading = p.xhrLoading; //forces blob loading
+				if (p.tags) {
+					jsonParams.tags = p.tags;
+					textureParams.tags = p.tags;
+				}
+
+			}
+
+			var imageFile = new Kiwi.Files.TextureFile(this.game, textureParams);
+			var jsonFile = new Kiwi.Files.DataFile(this.game, jsonParams);
+
+			this.addFileToQueue(imageFile);
+			this.addFileToQueue(jsonFile);
+
+			return imageFile;
+		}
+
+		/**
+		* Creates a new File to store a audio piece. 
+		* This method firstly checks to see if the AUDIO file being loaded is supported or not by the browser/device before adding it to the loading queue.
+		* You can override this behaviour and tell the audio data to load even if not supported by setting the 'onlyIfSupported' boolean to false.
+		* Also you can now pass an array of filepaths, and the first audio filetype that is supported will be loaded.
+		*
+		* @method addAudio
+		* @param key {String} The key for the audio file.
+		* @param url {String} The url of the audio to load. You can pass an array of URLs, in which case the first supported audio filetype in the array will be loaded.
+		* @param [storeAsGlobal=true] {Boolean} If the file should be stored globally.
+		* @param [onlyIfSupported=true] {Boolean} If the audio file should only be loaded if Kiwi detects that the audio file could be played. 
+		* @return {Kiwi.Files.File} The file which was created.
+		* @public
+		*/
+		public addAudio(key: string, url: any, storeAsGlobal: boolean = true, onlyIfSupported: boolean = true) {
+
+			var params = {
+				type: Kiwi.Files.File.AUDIO,
+				key: null,
+				url: null,
+				state: null,
+				fileStore: this.game.fileStore
+			};
+
+			if (Kiwi.Utils.Common.isObject(key)) {
+				params = (<any>key);
+				params.fileStore = this.game.fileStore;
+
+			} else {
+				params.key = key;
+				params.url = url;
+
+				if (!storeAsGlobal && this.game.states.current) {
+					params.state = this.game.states.current;
+				}
+
+			}
+
+			var i = 0,
+				urls, file;
+
+			//If it is a string then try to load that file
+			if (Kiwi.Utils.Common.isString(params.url)) {
+				urls = [params.url];
+			} else {
+				urls = params.url;
+			}
+
+			while (i < urls.length) {
+
+				params.url = urls[i]
+				file = this._attemptToAddAudio(params, onlyIfSupported);
+				if (file) {
+					return file;
+				}
+
+				i++;
+			}
+
+			return null;
+		}
+
+		/**
+		* This method firstly checks to see if the AUDIO file being loaded is supported or not by the browser/device before adding it to the loading queue.
+		* Returns a boolean if the audio file was successfully added or not to the file directory.
+		* @method _attemptToAddAudio
+		* @param params {Object} 
+		*   @param params.key {String} The key for the audio file.
+		*   @param params.url {String} The url of the audio to load. 
+		*   @param [params.state=true] {Kiwi.State} The state this file should be for.
+		*   @param [params.fileStore] {Kiwi.Files.FileStore} 
+		* @param [onlyIfSupported=true] {Boolean} If the audio file should only be loaded if Kiwi detects that the audio file could be played. 
+		* @return {Kiwi.Files.File} The file which was created.
+		* @private
+		*/
+		private _attemptToAddAudio(params:any, onlyIfSupported: boolean): Kiwi.Files.File {
+
+			var file = new Kiwi.Files.AudioFile(this.game, params);
+			var support = false;
+
+			switch (file.extension) {
+				case 'mp3':
+					support = Kiwi.DEVICE.mp3;
+					break;
+
+				case 'ogg':
+				case 'oga':
+					support = Kiwi.DEVICE.ogg;
+					break;
+
+				case 'm4a':
+					support = Kiwi.DEVICE.m4a;
+					break;
+
+				case 'wav':
+				case 'wave':
+					support = Kiwi.DEVICE.wav;
+					break;
+			}
+
+			if (support == true || onlyIfSupported == false) {
+				this.addFileToQueue(file);
+				return file;
+			} else {
+				Kiwi.Log.error('Kiwi.Loader: Audio Format not supported on this Device/Browser.', '#audio', '#unsupported');
+				return null;
+			}
+
+		}
+
+		/**
+		* Creates a new File to store JSON and adds it to the loading queue.
+		* @method addJSON
+		* @param key {String} The key for the file.
+		* @param url {String} The url to the json file.
+		* @param [storeAsGlobal=true] {Boolean} If the file should be stored globally.
+		* @return {Kiwi.Files.File} The file which was created.
+		* @public
+		*/
+		public addJSON(key: string, url: string, storeAsGlobal: boolean = true) {
+
+			var params: any = {
+				type: Kiwi.Files.File.JSON,
+				key: key, 
+				url: url,
+				fileStore: this.game.fileStore
+			};
+
+			if (Kiwi.Utils.Common.isObject(key)) {
+				var p: any = key;
+
+				params.key = p.key;
+				params.url = p.url;
+
+				if (p.parse) params.parse = p.parse;
+				if (p.state) params.state = p.state;
+				if (p.tags) params.tags = p.tags;
+
+			} else {
+
+				if (!storeAsGlobal && this.game.states.current) {
+					params.state = this.game.states.current;
+				}
+
+			}
+
+			var file = new Kiwi.Files.DataFile(this.game, params);
+			this.addFileToQueue(file);
+			return file;
+
+		}
+
+		/**
+		* Creates a new File to store XML and adds it to the loading queue.
+		* @method addXML
+		* @param key {String} The key for the file.
+		* @param url {String} The url to the xml file.
+		* @param [storeAsGlobal=true] {Boolean} If the file should be stored globally.
+		* @return {Kiwi.Files.File} The file which was created.
+		* @public
+		*/
+		public addXML(key: string, url: string, storeAsGlobal: boolean = true) {
+			
+			var params:any = {
+				type: Kiwi.Files.File.XML,
+				key: key,
+				url: url,
+				fileStore: this.game.fileStore
+			};
+
+			if (Kiwi.Utils.Common.isObject(key)) {
+				var p: any = key;
+
+				params.key = p.key;
+				params.url = p.url;
+
+				if (p.parse) params.parse = p.parse;
+				if (p.state) params.state = p.state;
+				if (p.tags) params.tags = p.tags;
+
+			} else {
+
+				if (!storeAsGlobal && this.game.states.current) {
+					params.state = this.game.states.current;
+				}
+
+			}
+
+			var file = new Kiwi.Files.DataFile(this.game, params);
+			this.addFileToQueue(file);
+			return file;
+
+		}
+
+		/**
+		* Creates a new File for a Binary file and adds it to the loading queue.
+		* @method addBinaryFile
+		* @param key {String} The key for the file.
+		* @param url {String} The url to the Binary file.
+		* @param [storeAsGlobal=true] {Boolean} If the file should be stored globally.
+		* @return {Kiwi.Files.File} The file which was created.
+		* @public
+		*/
+		public addBinaryFile(key: string, url: string, storeAsGlobal: boolean = true) {
+
+			var params: any = {
+				type: Kiwi.Files.File.BINARY_DATA,
+				key: key,
+				url: url,
+				fileStore: this.game.fileStore
+			};
+
+			if (Kiwi.Utils.Common.isObject(key)) {
+				var p: any = key;
+
+				params.key = p.key;
+				params.url = p.url;
+
+				if (p.parse) params.parse = p.parse;
+				if (p.state) params.state = p.state;
+				if (p.tags) params.tags = p.tags;
+
+			} else {
+
+				if (!storeAsGlobal && this.game.states.current) {
+					params.state = this.game.states.current;
+				}
+
+			}
+
+			var file = new Kiwi.Files.DataFile(this.game, params);
+			this.addFileToQueue(file);
+			return file;
+
+		}
+
+		/**
+		* Creates a new File to store a text file and adds it to the loading queue.
+		* @method addTextFile
+		* @param key {String} The key for the file.
+		* @param url {String} The url to the text file.
+		* @param [storeAsGlobal=true] {Boolean} If the file should be stored globally.
+		* @return {Kiwi.Files.File} The file which was created.
+		* @public
+		*/
+		public addTextFile(key: string, url: string, storeAsGlobal: boolean = true) {
+
+			var params: any = {
+				type: Kiwi.Files.File.TEXT_DATA,
+				key: key,
+				url: url,
+				fileStore: this.game.fileStore
+			};
+
+			if (Kiwi.Utils.Common.isObject(key)) {
+				var p: any = key;
+
+				params.key = p.key;
+				params.url = p.url;
+
+				if (p.parse) params.parse = p.parse;
+				if (p.state) params.state = p.state;
+				if (p.tags) params.tags = p.tags;
+
+			} else {
+
+				if (!storeAsGlobal && this.game.states.current) {
+					params.state = this.game.states.current;
+				}
+
+			}
+
+			var file = new Kiwi.Files.DataFile(this.game, params);
+			this.addFileToQueue(file);
+			return file;
+
+		}
+
+		/**
+		* Flags this loader for garbage collection. Only use this method if you are SURE you will no longer need it. 
+		* Otherwise it is best to leave it alone.
+		* 
+		* @method destroy
+		* @public
+		*/
+		public destroy() {
+
+			this.onQueueComplete.dispose();
+			this.onQueueProgress.dispose();
+
+			delete this.game;
+
+			delete this.onQueueComplete;
+			delete this.onQueueProgress;
+
+			var i = 0;
+			while (i < this._loadingList.length) {
+				this._loadingList[i].destroy();
+				i++;
+			}
+			this._loadingList = [];
+
+			var i = 0;
+			while (i < this._loadingQueue.length) {
+				this._loadingQueue[i].destroy();
+				i++;
+			}
+			this._loadingQueue = [];
+
+			var i = 0;
+			while (i < this._loadingParallel.length) {
+				this._loadingParallel[i].destroy();
+				i++;
+			}
+			this._loadingParallel = [];
+
+
+		}
+
+		
+		/**
+		* -----------------------
+		* Deprecated - Functionality exists. Maps to its equalvent
+		* -----------------------
+		**/
+
+
+		/**
+		* Initialise the properities that are needed on this loader.
+		* Recommended you use the 'onQueueProgress' / 'onQueueComplete' signals instead.
+		* 
+		* @method init
+		* @param [progress=null] {Any} Progress callback method.
+		* @param [complete=null] {Any} Complete callback method.
+		* @param [calculateBytes=false] {boolean} 
+		* @deprecated Deprecated as of 1.2.0
+		* @public
+		*/
+		public init(progress: any = null, complete: any = null, calculateBytes: boolean=null) {
+
+			if (calculateBytes !== null) {
+				this._calculateBytes = calculateBytes;
+			} 
+
+			if (progress !== null) {
+				this.onQueueProgress.addOnce( progress );
+			}
+
+			if (complete !== null) {
+				this.onQueueComplete.addOnce( complete );
+			}
+
+		}
+
+		/**
+		* Loops through all of the files that need to be loaded and start the load event on them. 
+		* @method startLoad
+		* @deprecated Use 'start' instead. Deprecated as of 1.2.0
+		* @public
+		*/
+		public startLoad() {
+			this.start();
+		}
+
+		/**
+		* Returns a percentage of the amount that has been loaded so far.
+		* @method getPercentLoaded
+		* @return {Number}
+		* @deprecated Use 'percentLoaded' instead. Deprecated as of 1.2.0
+		* @public
+		*/
+		public getPercentLoaded(): number {
+			return this.percentLoaded;
+		}
+
+
+		/**
+		* Returns a boolean indicating if everything in the loading que has been loaded or not.
+		* @method complete
+		* @return {boolean}
+		* @deprecated Use 'percentLoaded' instead. Deprecated as of 1.2.0
+		* @public
+		*/
+		public complete(): boolean {
+			return ( this.percentLoaded === 100 );
+		}
+
+		/**
+		* Quick way of getting / setting the private variable 'calculateBytes'
+		* To be made into a public variable once removed.
+		* @method calculateBytes
+		* @param [value] {boolean}
+		* @return {boolean}
+		* @public
+		*/
+		public calculateBytes(value?: boolean): boolean {
+
+			if (typeof value !== "undefined") {
+				this._calculateBytes = value;
+			}
+
+			return this._calculateBytes;
+		}
+
+		/**
+		* Returns the total number of bytes that have been loaded so far from files in the file queue.
+		* 
+		* @method getBytesLoaded
+		* @return {Number}
+		* @readOnly
+		* @deprecated Use 'bytesLoaded' instead. Deprecated as of 1.2.0
+		* @public
+		*/
+		public getBytesLoaded(): number {
+
+			return this.bytesLoaded;
+		}
+
+	}
 
 }
diff --git a/src/file/TextureFile.ts b/src/file/TextureFile.ts
index 12769d8..9ae7262 100644
--- a/src/file/TextureFile.ts
+++ b/src/file/TextureFile.ts
@@ -4,165 +4,165 @@
 * @submodule Files 
 * 
 */
- 
+
 module Kiwi.Files {
-    
-    /**
-    * TextureFile which contains settings, loading, and processing information for textures/images in Kiwi.
-    *
-    * Contains two methods of loading. XHR + arraybuffer and also tag loading.
-    *
-    * @class TextureFile
-    * @namespace Kiwi.Files
-    * @extends Kiwi.Files.File
-    * @since 1.2.0
-    * @constructor
-    * @param game {Kiwi.Game} The game that this file is for
-    * @param params {Object} Options for this file.
-    *   @param params.key {String} User defined name for this file. This would be how the user would access it in the file store. 
-    *   @param params.url {String} Location of the file to be loaded.
-    *   @param {Object} [params.metadata={}] Any metadata to be associated with the file. 
-    *   @param [params.state=null] {Kiwi.State} The state that this file belongs to. Used for defining global assets vs local assets.
-    *   @param [params.fileStore=null] {Kiwi.Files.FileStore} The filestore that this file should be save in automatically when loaded.
-    *   @param [params.type=UNKNOWN] {Number} The type of file this is. 
-    *   @param [params.tags] {Array} Any tags to be associated with this file.
-    *   @param [params.xhrLoading=false] {Boolean} If xhr + arraybuffer loading should be used instead of tag loading. 
-    * @return {Kiwi.Files.TextureFile} 
-    *
-    */
-    export class TextureFile extends Kiwi.Files.File {
-
-        constructor(game: Kiwi.Game, params: any = {}) {
-            super(game, params);
-
-            if (params.xhrLoading) { 
-                this.useTagLoader = false;
-                this._loadInParallel = false;
-            } else {
-                this.useTagLoader = true;
-                this._loadInParallel = true;
-            }
-
-            if (!Kiwi.Utils.Common.isUndefined(params.crossOrigin) ) {
-                this.crossOrigin = params.crossOrigin;
-            }
-
-        }
-
-        /**
-        * Returns the type of this object
-        * @method objType
-        * @return {String} "TextureFile"
-        * @public
-        */
-        public objType() {
-            return "TextureFile";
-        }
-
-        /**
-        * For tag loading only. The crossOrigin value applied to loaded images. Very often this needs to be set to 'anonymous'
-        * @property crossOrigin
-        * @type String
-        * @default ''
-        * @public
-        */
-        public crossOrigin: string = '';
-
-        //this.dataType === File.IMAGE || this.dataType === File.SPRITE_SHEET || this.dataType === File.TEXTURE_ATLAS
-
-        /**
-        * Initialises the loading method.
-        * Tagloading is the default but also supports XHR + arraybuffer.
-        * @method _load
-        * @protected
-        */
-        protected _load() {
-
-            this.attemptCounter++;
-
-            if (this.useTagLoader) {
-                this.tagLoader();
-            } else {
-                this.xhrLoader( 'GET', 'arraybuffer' );
-            }
-
-        }
-
-        /**
-        * Contains the functionality for tag loading
-        * @method tagLoader
-        * @private
-        */
-        private tagLoader() {
-
-            this.data = new Image();
-            this.data.src = this.URL;
-
-            if (this.crossOrigin) {
-                this.data.crossOrigin = this.crossOrigin;
-            }
-
-            this.data.onload = () => this.loadSuccess();
-            this.data.onerror = (event) => this.loadError(event);
-
-        }
-
-        /**
-        * Gets the response data (which is an arraybuffer), creates a Blob from it 
-        * and creates an objectURL from it.
-        *
-        * @method processXhr
-        * @param response {Any} The data stored in the 'xhr.response' tag
-        * @protected
-        */
-        protected processXhr( response:any ) {
-            
-            this.data = document.createElement('img');
-            var blob = new Blob([response], { type: this.type });
-            
-            if (window['URL']) {
-                this.data.src = window['URL'].createObjectURL(blob);
-            } else if (window['webkitURL']) {
-                this.data.src = window['webkitURL'].createObjectURL(blob);
-            }
-
-            this.loadSuccess();
-
-        }
-
-        /**
-        * Revokes the object url that was added to the window when creating the image. 
-        * Also tells the File that the loading is now complete. 
-        * 
-        * @method revoke
-        * @private
-        */
-        private revoke() {
-
-            if (window['URL']) {
-                window['URL'].revokeObjectURL(this.data.src);
-            } else if (window['webkitURL']) {
-                window['webkitURL'].revokeObjectURL(this.data.src);
-            }
-
-        }
-        
-        /**
-        * Destroys all external object references on this object.
-        * @method destroy
-        * @since 1.2.0
-        * @public
-        */
-        public destroy() {
-
-            if (!this.useTagLoader) {
-                this.revoke();
-            }
-
-            super.destroy();
-
-        }
-
-    }
-
-}  
\ No newline at end of file
+
+	/**
+	* TextureFile which contains settings, loading, and processing information for textures/images in Kiwi.
+	*
+	* Contains two methods of loading. XHR + arraybuffer and also tag loading.
+	*
+	* @class TextureFile
+	* @namespace Kiwi.Files
+	* @extends Kiwi.Files.File
+	* @since 1.2.0
+	* @constructor
+	* @param game {Kiwi.Game} The game that this file is for
+	* @param params {Object} Options for this file.
+	*   @param params.key {String} User defined name for this file. This would be how the user would access it in the file store. 
+	*   @param params.url {String} Location of the file to be loaded.
+	*   @param {Object} [params.metadata={}] Any metadata to be associated with the file. 
+	*   @param [params.state=null] {Kiwi.State} The state that this file belongs to. Used for defining global assets vs local assets.
+	*   @param [params.fileStore=null] {Kiwi.Files.FileStore} The filestore that this file should be save in automatically when loaded.
+	*   @param [params.type=UNKNOWN] {Number} The type of file this is. 
+	*   @param [params.tags] {Array} Any tags to be associated with this file.
+	*   @param [params.xhrLoading=false] {Boolean} If xhr + arraybuffer loading should be used instead of tag loading. 
+	* @return {Kiwi.Files.TextureFile} 
+	*
+	*/
+	export class TextureFile extends Kiwi.Files.File {
+
+		constructor(game: Kiwi.Game, params: any = {}) {
+			super(game, params);
+
+			if (params.xhrLoading) { 
+				this.useTagLoader = false;
+				this._loadInParallel = false;
+			} else {
+				this.useTagLoader = true;
+				this._loadInParallel = true;
+			}
+
+			if (!Kiwi.Utils.Common.isUndefined(params.crossOrigin) ) {
+				this.crossOrigin = params.crossOrigin;
+			}
+
+		}
+
+		/**
+		* Returns the type of this object
+		* @method objType
+		* @return {String} "TextureFile"
+		* @public
+		*/
+		public objType() {
+			return "TextureFile";
+		}
+
+		/**
+		* For tag loading only. The crossOrigin value applied to loaded images. Very often this needs to be set to 'anonymous'
+		* @property crossOrigin
+		* @type String
+		* @default ''
+		* @public
+		*/
+		public crossOrigin: string = '';
+
+		//this.dataType === File.IMAGE || this.dataType === File.SPRITE_SHEET || this.dataType === File.TEXTURE_ATLAS
+
+		/**
+		* Initialises the loading method.
+		* Tagloading is the default but also supports XHR + arraybuffer.
+		* @method _load
+		* @protected
+		*/
+		protected _load() {
+
+			this.attemptCounter++;
+
+			if (this.useTagLoader) {
+				this.tagLoader();
+			} else {
+				this.xhrLoader( 'GET', 'arraybuffer' );
+			}
+
+		}
+
+		/**
+		* Contains the functionality for tag loading
+		* @method tagLoader
+		* @private
+		*/
+		private tagLoader() {
+
+			this.data = new Image();
+			this.data.src = this.URL;
+
+			if (this.crossOrigin) {
+				this.data.crossOrigin = this.crossOrigin;
+			}
+
+			this.data.onload = () => this.loadSuccess();
+			this.data.onerror = (event) => this.loadError(event);
+
+		}
+
+		/**
+		* Gets the response data (which is an arraybuffer), creates a Blob from it 
+		* and creates an objectURL from it.
+		*
+		* @method processXhr
+		* @param response {Any} The data stored in the 'xhr.response' tag
+		* @protected
+		*/
+		protected processXhr( response:any ) {
+			
+			this.data = document.createElement('img');
+			var blob = new Blob([response], { type: this.type });
+			
+			if (window['URL']) {
+				this.data.src = window['URL'].createObjectURL(blob);
+			} else if (window['webkitURL']) {
+				this.data.src = window['webkitURL'].createObjectURL(blob);
+			}
+
+			this.loadSuccess();
+
+		}
+
+		/**
+		* Revokes the object url that was added to the window when creating the image. 
+		* Also tells the File that the loading is now complete. 
+		* 
+		* @method revoke
+		* @private
+		*/
+		private revoke() {
+
+			if (window['URL']) {
+				window['URL'].revokeObjectURL(this.data.src);
+			} else if (window['webkitURL']) {
+				window['webkitURL'].revokeObjectURL(this.data.src);
+			}
+
+		}
+
+		/**
+		* Destroys all external object references on this object.
+		* @method destroy
+		* @since 1.2.0
+		* @public
+		*/
+		public destroy() {
+
+			if (!this.useTagLoader) {
+				this.revoke();
+			}
+
+			super.destroy();
+
+		}
+
+	}
+
+}
diff --git a/src/gameobjects/Sprite.ts b/src/gameobjects/Sprite.ts
index 527d5a1..2609e57 100644
--- a/src/gameobjects/Sprite.ts
+++ b/src/gameobjects/Sprite.ts
@@ -4,176 +4,174 @@
 * @module Kiwi
 * @submodule GameObjects 
 * @main GameObjects
-*/ 
+*/
 module Kiwi.GameObjects {
 
-    /**
-    * A Sprite is a general purpose GameObject that contains majority of the functionality that is needed/would be wanted and as such should be used only when you are wanting a GameObject with a lot of interaction. When creating a Sprite you pass to it as TextureAtlas (for the image you want to render), now if that Texture Atlas isn't a SINGLE_IMAGE then the Sprite will have an AnimationManager Component to handle any SpriteSheet animations you need.
-    *
-    * @class Sprite
-    * @namespace Kiwi.GameObjects
-    * @extends Kiwi.Entity
-    * @constructor
-    * @param state {Kiwi.State} The state that this sprite belongs to
-    * @param atlas {Kiwi.Textures.TextureAtlas} The texture you want to apply to this entity 
-    * @param [x=0] {Number} The sprites initial coordinates on the x axis.
-    * @param [y=0] {Number} The sprites initial coordinates on the y axis.
-    * @param [enableInput=false] {boolean} If the input component should be enabled or not.
-    * @return {Sprite}
-    */
-    export class Sprite extends Kiwi.Entity {
-         
-        constructor(state: Kiwi.State, atlas: Kiwi.Textures.TextureAtlas, x: number = 0, y: number = 0, enableInput: boolean = false) {
-
-            super(state, x, y);
-
-            //Texture atlas error check
-            if (typeof atlas == "undefined") {
-                Kiwi.Log.error('A Texture Atlas was not passed when instantiating a new Sprite.', '#sprite', '#texture');
-                this.visible = false;
-                this.active = false;
-                return;
-            } 
-
-            if (this.game.renderOption === Kiwi.RENDERER_WEBGL) {
-                this.glRenderer = this.game.renderer.requestSharedRenderer("TextureAtlasRenderer");
-            }
-
-            this.atlas = atlas;
-            this.name = this.atlas.name;
-            this.cellIndex = this.atlas.cellIndex;
-
-            //may need to add an optional other cell frame index here
-            this.width = atlas.cells[this.cellIndex].w;
-            this.height = atlas.cells[this.cellIndex].h;
-            this.transform.rotPointX = this.width / 2;
-            this.transform.rotPointY = this.height / 2;
-                
-
-            //Create the components needed
-            this.box = this.components.add(new Kiwi.Components.Box(this, x, y, this.width, this.height));
-            this.input = this.components.add(new Kiwi.Components.Input(this, this.box, enableInput));
-
-                
-            //Check to see if this sprite could be animated or not
-            if (this.atlas.type === Kiwi.Textures.TextureAtlas.SINGLE_IMAGE) {
-                this.animation = null;
-                this._isAnimated = false;
-            } else {
-                this.animation = this.components.add(new Kiwi.Components.AnimationManager(this));
-                this._isAnimated = true;
-            }
-            
-        }
-
-        /**
-        * Returns the type of object that this is.
-        * @method objType
-        * @return {string} "Sprite"
-        * @public
-        */
-        public objType():string {
-            return "Sprite";
-        }
-        
-        /**
-        * Indicates whether or not this sprite is animated or not. 
-        * This sprite will not be animated if the texture used is a SINGLE_IMAGE.
-        * @property _isAnimated
-        * @type boolean
-        * @private
-        */
-        private _isAnimated: boolean;
-
-        /** 
-	    * The animation component that allows you to create a animation with spritesheets/texture atlas's. 
-        * Note: If the atlas that was added is of type Kiwi.Textures.TextureAtlas.SINGLE_IMAGE then no animation component will be created.
-	    * @property animation
-	    * @type Kiwi.Components.AnimationManager
-        * @public
-	    */
-        public animation: Kiwi.Components.AnimationManager;
-        
-        /** 
-        * The box component that controls the bounding box around this Game Object
-        * @property box
-        * @type Kiwi.Components.Box
-        * @public
-        */
-        public box: Kiwi.Components.Box;
-
-        /** 
-	    * The Input component controls the user interaction with this Game Object
-	    * @property input
-	    * @type Kiwi.Components.Input
-        * @public
-	    */
-        public input: Kiwi.Components.Input;
-        
-        /**
-	    * Called by parent when its update loop gets executed.
-	    * @method update
-        * @public
-	    */
-        public update() {
-            
-            super.update();
-
-            if (this._isAnimated) {
-                this.width = this.atlas.cells[this.cellIndex].w;
-                this.height = this.atlas.cells[this.cellIndex].h;
-
-            }    
-
-        }
-
-        /**
-	    * Renders the GameObject using Canvas. 
-	    * @method render
-        * @param {Kiwi.Camera} camera
-        * @public
-	    */
-        public render(camera:Kiwi.Camera) {
-           
-            super.render(camera);
-            
-            //if it is would even be visible.
-            if (this.alpha > 0) {
-                
-                var ctx: CanvasRenderingContext2D = this.game.stage.ctx;
-                ctx.save();
-
-                if (this.alpha > 0 && this.alpha <= 1) {
-                    ctx.globalAlpha = this.alpha;
-                }
-
-                //get entity/view matrix
-                var t: Kiwi.Geom.Transform = this.transform;
-                var m: Kiwi.Geom.Matrix = t.getConcatenatedMatrix();
-
-                ctx.transform(m.a, m.b, m.c, m.d, m.tx, m.ty);
-                             
-                var cell = this.atlas.cells[this.cellIndex];
-                ctx.drawImage(this.atlas.image, cell.x, cell.y, cell.w, cell.h, -t.rotPointX, -t.rotPointY, cell.w, cell.h);
-                ctx.restore();
-                    
-            }
-        
-        }
-
-        /**
-	    * Renders the GameObject using WebGL. 
-	    * @method renderGL
-        * @param {WebGLRenderingContext} gl
-        * @param {Kiwi.Camera} camera
-        * @param {Object} params
-        * @public
-	    */
-
-        public renderGL(gl: WebGLRenderingContext, camera: Kiwi.Camera, params: any = null) {
-            (<Kiwi.Renderers.TextureAtlasRenderer>this.glRenderer).addToBatch(gl, this, camera);
-        }
-
-    }
-
-}
\ No newline at end of file
+	/**
+	* A Sprite is a general purpose GameObject that contains majority of the functionality that is needed/would be wanted and as such should be used only when you are wanting a GameObject with a lot of interaction. When creating a Sprite you pass to it as TextureAtlas (for the image you want to render), now if that Texture Atlas isn't a SINGLE_IMAGE then the Sprite will have an AnimationManager Component to handle any SpriteSheet animations you need.
+	*
+	* @class Sprite
+	* @namespace Kiwi.GameObjects
+	* @extends Kiwi.Entity
+	* @constructor
+	* @param state {Kiwi.State} The state that this sprite belongs to
+	* @param atlas {Kiwi.Textures.TextureAtlas} The texture you want to apply to this entity 
+	* @param [x=0] {Number} The sprites initial coordinates on the x axis.
+	* @param [y=0] {Number} The sprites initial coordinates on the y axis.
+	* @param [enableInput=false] {boolean} If the input component should be enabled or not.
+	* @return {Sprite}
+	*/
+	export class Sprite extends Kiwi.Entity {
+
+		constructor(state: Kiwi.State, atlas: Kiwi.Textures.TextureAtlas, x: number = 0, y: number = 0, enableInput: boolean = false) {
+
+			super(state, x, y);
+
+			//Texture atlas error check
+			if (typeof atlas == "undefined") {
+				Kiwi.Log.error('A Texture Atlas was not passed when instantiating a new Sprite.', '#sprite', '#texture');
+				this.visible = false;
+				this.active = false;
+				return;
+			}
+
+			if (this.game.renderOption === Kiwi.RENDERER_WEBGL) {
+				this.glRenderer = this.game.renderer.requestSharedRenderer("TextureAtlasRenderer");
+			}
+
+			this.atlas = atlas;
+			this.name = this.atlas.name;
+			this.cellIndex = this.atlas.cellIndex;
+
+			//may need to add an optional other cell frame index here
+			this.width = atlas.cells[this.cellIndex].w;
+			this.height = atlas.cells[this.cellIndex].h;
+			this.transform.rotPointX = this.width / 2;
+			this.transform.rotPointY = this.height / 2;
+				
+
+			//Create the components needed
+			this.box = this.components.add(new Kiwi.Components.Box(this, x, y, this.width, this.height));
+			this.input = this.components.add(new Kiwi.Components.Input(this, this.box, enableInput));
+
+
+			//Check to see if this sprite could be animated or not
+			if (this.atlas.type === Kiwi.Textures.TextureAtlas.SINGLE_IMAGE) {
+				this.animation = null;
+				this._isAnimated = false;
+			} else {
+				this.animation = this.components.add(new Kiwi.Components.AnimationManager(this));
+				this._isAnimated = true;
+			}
+
+		}
+
+		/**
+		* Returns the type of object that this is.
+		* @method objType
+		* @return {string} "Sprite"
+		* @public
+		*/
+		public objType():string {
+			return "Sprite";
+		}
+
+		/**
+		* Indicates whether or not this sprite is animated or not. 
+		* This sprite will not be animated if the texture used is a SINGLE_IMAGE.
+		* @property _isAnimated
+		* @type boolean
+		* @private
+		*/
+		private _isAnimated: boolean;
+
+		/** 
+		* The animation component that allows you to create a animation with spritesheets/texture atlas's. 
+		* Note: If the atlas that was added is of type Kiwi.Textures.TextureAtlas.SINGLE_IMAGE then no animation component will be created.
+		* @property animation
+		* @type Kiwi.Components.AnimationManager
+		* @public
+		*/
+		public animation: Kiwi.Components.AnimationManager;
+		
+		/** 
+		* The box component that controls the bounding box around this Game Object
+		* @property box
+		* @type Kiwi.Components.Box
+		* @public
+		*/
+		public box: Kiwi.Components.Box;
+
+		/** 
+		* The Input component controls the user interaction with this Game Object
+		* @property input
+		* @type Kiwi.Components.Input
+		* @public
+		*/
+		public input: Kiwi.Components.Input;
+
+		/**
+		* Called by parent when its update loop gets executed.
+		* @method update
+		* @public
+		*/
+		public update() {
+
+			super.update();
+
+			if (this._isAnimated) {
+				this.width = this.atlas.cells[this.cellIndex].w;
+				this.height = this.atlas.cells[this.cellIndex].h;
+
+			}
+
+		}
+
+		/**
+		* Renders the GameObject using Canvas. 
+		* @method render
+		* @param {Kiwi.Camera} camera
+		* @public
+		*/
+		public render(camera:Kiwi.Camera) {
+
+			super.render(camera);
+			
+			//if it is would even be visible.
+			if (this.alpha > 0) {
+
+				var ctx: CanvasRenderingContext2D = this.game.stage.ctx;
+				ctx.save();
+
+				if (this.alpha > 0 && this.alpha <= 1) {
+					ctx.globalAlpha = this.alpha;
+				}
+
+				//get entity/view matrix
+				var t: Kiwi.Geom.Transform = this.transform;
+				var m: Kiwi.Geom.Matrix = t.getConcatenatedMatrix();
+
+				ctx.transform(m.a, m.b, m.c, m.d, m.tx, m.ty);
+							 
+				var cell = this.atlas.cells[this.cellIndex];
+				ctx.drawImage(this.atlas.image, cell.x, cell.y, cell.w, cell.h, -t.rotPointX, -t.rotPointY, cell.w, cell.h);
+				ctx.restore();
+			}
+		}
+
+		/**
+		* Renders the GameObject using WebGL. 
+		* @method renderGL
+		* @param {WebGLRenderingContext} gl
+		* @param {Kiwi.Camera} camera
+		* @param {Object} params
+		* @public
+		*/
+
+		public renderGL(gl: WebGLRenderingContext, camera: Kiwi.Camera, params: any = null) {
+			(<Kiwi.Renderers.TextureAtlasRenderer>this.glRenderer).addToBatch(gl, this, camera);
+		}
+
+	}
+
+}
diff --git a/src/gameobjects/StaticImage.ts b/src/gameobjects/StaticImage.ts
index ed5469e..211699f 100644
--- a/src/gameobjects/StaticImage.ts
+++ b/src/gameobjects/StaticImage.ts
@@ -3,118 +3,118 @@
 * @module Kiwi
 * @submodule GameObjects 
 * 
-*/ 
+*/
 
 module Kiwi.GameObjects {
 
-    /**
-    * A light weight game object for displaying static images that would have little or no interaction with other GameObjects. An Example of this would be a background image. Note: Since a StaticImage is lightweight it doesn't have any AnimationManager to handle the switching of cells (If you were using a SpriteSheet/TextureAtlas). In order to switch cells you can change the value of the cellIndex property.
-    *
-    * @class StaticImage
-    * @namespace Kiwi.GameObjects
-    * @extends Kiwi.Entity
-    * @constructor
-    * @param state {Kiwi.State} The state that this static image belongs to 
-    * @param atlas {Kiwi.Textures.TextureAtlas} The texture atlas to use as the image.
-    * @param [x=0] {Number} Its coordinates on the x axis
-    * @param [y=0] {Number} The coordinates on the y axis
-    * @return {StaticImage}
-    */
-    export class StaticImage extends Kiwi.Entity {
-
-        constructor(state: Kiwi.State, atlas: Kiwi.Textures.TextureAtlas, x: number = 0, y: number = 0) {
-
-            super(state, x, y);
-
-            if (this.game.renderOption === Kiwi.RENDERER_WEBGL) {
-                this.glRenderer = this.game.renderer.requestSharedRenderer("TextureAtlasRenderer");
-            }
-
-            //Texture atlas error check.
-            if (typeof atlas == "undefined") {
-                Kiwi.Log.error('A Texture Atlas was not passed when instantiating a new Static Image.', '#static-image', '#texture');
-                this.visible = false;
-                this.active = false;
-                return;
-            } 
-
-            //Set coordinates and texture
-            this.atlas = atlas;
-            this.cellIndex = this.atlas.cellIndex;
-            this.width = atlas.cells[this.cellIndex].w;
-            this.height = atlas.cells[this.cellIndex].h;
-            this.transform.rotPointX = this.width / 2;
-            this.transform.rotPointY = this.height / 2;
-            
-            this.box = this.components.add(new Kiwi.Components.Box(this, x, y, this.width, this.height));
-           
-        }
-
-        /**
-        * Returns the type of object that this is.
-        * @method objType
-        * @return {string} "StaticImage"
-        * @public
-        */
-        public objType(): string {
-            return "StaticImage";
-        }
-
-        /** 
-        * The Bounds component that controls the bounding box around this Game Object
-        * @property box
-        * @type Kiwi.Components.Box
-        * @public
-        */
-        public box: Kiwi.Components.Box;
-
-        /**
-	    * Called by the Layer to which this Game Object is attached
-	    * @method render
-        * @param {Kiwi.Camara} camera
-        * @public
-	    */
-        public render(camera: Kiwi.Camera) {
-            
-            super.render(camera);
-
-            //if it is would even be visible.
-            if (this.alpha > 0) {
-
-                var ctx: CanvasRenderingContext2D = this.game.stage.ctx;
-                ctx.save();
-
-                if (this.alpha > 0 && this.alpha <= 1) {
-                    ctx.globalAlpha = this.alpha;
-                }
-
-                //get entity/view matrix
-                var t: Kiwi.Geom.Transform = this.transform;
-                var m: Kiwi.Geom.Matrix = t.getConcatenatedMatrix();
-                
-                ctx.transform(m.a, m.b, m.c, m.d, m.tx, m.ty);
-                
-                var cell = this.atlas.cells[this.cellIndex];
-                ctx.drawImage(this.atlas.image, cell.x, cell.y, cell.w, cell.h, -t.rotPointX, -t.rotPointY, cell.w, cell.h);
-                ctx.restore();
-            
-            }
-            
-        }
-
-        /**
-	    * Renders the GameObject using WebGL. 
-	    * @method renderGL
-        * @param {WebGLRenderingContext} gl
-        * @param {Kiwi.Camera} camera
-        * @param {Object} params
-        * @public
-	    */
-
-        public renderGL(gl: WebGLRenderingContext, camera: Kiwi.Camera, params: any = null) {
-            (<Kiwi.Renderers.TextureAtlasRenderer>this.glRenderer).addToBatch(gl, this, camera);
-        }
-
-    }
-
-}
\ No newline at end of file
+	/**
+	* A light weight game object for displaying static images that would have little or no interaction with other GameObjects. An Example of this would be a background image. Note: Since a StaticImage is lightweight it doesn't have any AnimationManager to handle the switching of cells (If you were using a SpriteSheet/TextureAtlas). In order to switch cells you can change the value of the cellIndex property.
+	*
+	* @class StaticImage
+	* @namespace Kiwi.GameObjects
+	* @extends Kiwi.Entity
+	* @constructor
+	* @param state {Kiwi.State} The state that this static image belongs to 
+	* @param atlas {Kiwi.Textures.TextureAtlas} The texture atlas to use as the image.
+	* @param [x=0] {Number} Its coordinates on the x axis
+	* @param [y=0] {Number} The coordinates on the y axis
+	* @return {StaticImage}
+	*/
+	export class StaticImage extends Kiwi.Entity {
+
+		constructor(state: Kiwi.State, atlas: Kiwi.Textures.TextureAtlas, x: number = 0, y: number = 0) {
+
+			super(state, x, y);
+
+			if (this.game.renderOption === Kiwi.RENDERER_WEBGL) {
+				this.glRenderer = this.game.renderer.requestSharedRenderer("TextureAtlasRenderer");
+			}
+
+			//Texture atlas error check.
+			if (typeof atlas == "undefined") {
+				Kiwi.Log.error('A Texture Atlas was not passed when instantiating a new Static Image.', '#static-image', '#texture');
+				this.visible = false;
+				this.active = false;
+				return;
+			} 
+
+			//Set coordinates and texture
+			this.atlas = atlas;
+			this.cellIndex = this.atlas.cellIndex;
+			this.width = atlas.cells[this.cellIndex].w;
+			this.height = atlas.cells[this.cellIndex].h;
+			this.transform.rotPointX = this.width / 2;
+			this.transform.rotPointY = this.height / 2;
+			
+			this.box = this.components.add(new Kiwi.Components.Box(this, x, y, this.width, this.height));
+
+		}
+
+		/**
+		* Returns the type of object that this is.
+		* @method objType
+		* @return {string} "StaticImage"
+		* @public
+		*/
+		public objType(): string {
+			return "StaticImage";
+		}
+
+		/** 
+		* The Bounds component that controls the bounding box around this Game Object
+		* @property box
+		* @type Kiwi.Components.Box
+		* @public
+		*/
+		public box: Kiwi.Components.Box;
+
+		/**
+		* Called by the Layer to which this Game Object is attached
+		* @method render
+		* @param {Kiwi.Camara} camera
+		* @public
+		*/
+		public render(camera: Kiwi.Camera) {
+
+			super.render(camera);
+
+			//if it is would even be visible.
+			if (this.alpha > 0) {
+
+				var ctx: CanvasRenderingContext2D = this.game.stage.ctx;
+				ctx.save();
+
+				if (this.alpha > 0 && this.alpha <= 1) {
+					ctx.globalAlpha = this.alpha;
+				}
+
+				//get entity/view matrix
+				var t: Kiwi.Geom.Transform = this.transform;
+				var m: Kiwi.Geom.Matrix = t.getConcatenatedMatrix();
+				
+				ctx.transform(m.a, m.b, m.c, m.d, m.tx, m.ty);
+				
+				var cell = this.atlas.cells[this.cellIndex];
+				ctx.drawImage(this.atlas.image, cell.x, cell.y, cell.w, cell.h, -t.rotPointX, -t.rotPointY, cell.w, cell.h);
+				ctx.restore();
+
+			}
+
+		}
+
+		/**
+		* Renders the GameObject using WebGL. 
+		* @method renderGL
+		* @param {WebGLRenderingContext} gl
+		* @param {Kiwi.Camera} camera
+		* @param {Object} params
+		* @public
+		*/
+
+		public renderGL(gl: WebGLRenderingContext, camera: Kiwi.Camera, params: any = null) {
+			(<Kiwi.Renderers.TextureAtlasRenderer>this.glRenderer).addToBatch(gl, this, camera);
+		}
+
+	}
+
+}
diff --git a/src/gameobjects/Textfield.ts b/src/gameobjects/Textfield.ts
index ddebf6d..0fdd792 100644
--- a/src/gameobjects/Textfield.ts
+++ b/src/gameobjects/Textfield.ts
@@ -3,501 +3,494 @@
 * @module Kiwi
 * @submodule GameObjects 
 * 
-*/ 
- 
+*/
+
 module Kiwi.GameObjects {
-    
-    /**
-    * Textfield is a GameObject that is used when you are wanting to render text onto the current State. The Textfield is not designed to have any interaction with other GameObjects and as such it does not have many (if any) components or even a width/height.
-    *
-    * @class Textfield
-    * @namespace Kiwi.GameObjects
-    * @extends Kiwi.Entity
-    * @constructor
-    * @param state {Kiwi.State} The state that this Textfield belongs to
-    * @param text {String} The text that is contained within this textfield.
-    * @param [x=0] {Number} The new x coordinate from the Position component
-    * @param [y=0] {Number} The new y coordinate from the Position component
-    * @param [color="#000000"] {String} The color of the text. 
-    * @param [size=32] {Number} The size of the text in pixels.
-    * @param [weight="normal"] {String} The weight of the text.
-    * @param [fontFamily="sans-serif"] {String} The font family that is to be used when rendering.
-    * @return {Textfield} This Game Object.
-    */
-    export class Textfield extends Kiwi.Entity {
-
-        constructor(state: Kiwi.State, text: string, x: number = 0, y: number = 0, color: string = "#000000", size: number = 32, weight: string = "normal", fontFamily: string = "sans-serif") {
-
-            super(state, x,y);
-
-            if (this.game.renderOption === Kiwi.RENDERER_WEBGL) {
-                this.glRenderer = this.game.renderer.requestSharedRenderer("TextureAtlasRenderer");
-            }
-
-            this._text = text;
-            this._fontWeight = weight;
-            this._fontSize = size;
-            this._fontColor = new Kiwi.Utils.Color( color );
-            this._fontFamily = fontFamily;
-            this._textAlign = "left";
-            this._baseline = "top";
-            
-            this._tempDirty = true;
-
-            // Create the canvas
-            this._canvas = document.createElement("canvas");
-            this._canvas.width = 2;
-            this._canvas.height = 2;
-            this._ctx = this._canvas.getContext("2d");
-
-            // Add it to the TextureLibrary
-            this.atlas = new Kiwi.Textures.SingleImage(this.game.rnd.uuid(), this._canvas);
-            this.state.textureLibrary.add(this.atlas);
-            this.atlas.dirty = true;
-
-            // Track actual text width - not canvas width (which rounds up to powers of 2), necessary for proper alignment
-            this._alignWidth = 0;
-
-            // Setup components
-            this.box = this.components.add(
-                new Kiwi.Components.Box(
-                    this, x, y, this.width, this.height ) );
-        }
-
-        /**
-        * Returns the type of object that this is
-        * @method objType
-        * @return {string} "Textfield"
-        * @public
-        */
-        public objType() {
-            return "Textfield";
-        }
-
-        /**
-        * The text that is to be rendered.
-        * @property _text
-        * @type string
-        * @private
-        */
-        private _text: string;
-        
-        /**
-        * The weight of the font.
-        * @property _fontWeight
-        * @type string
-        * @default "normal"
-        * @private
-        */
-        private _fontWeight: string;
-
-        /**
-        * The size of the font.
-        * @property _fontSize
-        * @type number
-        * @default 32
-        * @private
-        */
-        private _fontSize: number;
-
-        /**
-        * The color of the text.
-        * @property _fontColor
-        * @type Kiwi.Utils.Color
-        * @private
-        */
-        private _fontColor: Kiwi.Utils.Color;
-
-        /**
-        * The font family that is to be rendered.
-        * @property _fontFamily
-        * @type string
-        * @default "sans-serif"
-        * @private
-        */
-        private _fontFamily: string;
-
-        /**
-        * The alignment of the text. This can either be "left", "right" or "center"
-        * @property _textAlign
-        * @type string
-        * @default "center"
-        * @private
-        */
-        private _textAlign: string;
-
-        /**
-        * The pixel width of the text. Used internally for alignment purposes.
-        * @property _alignWidth
-        * @type number
-        * @default 0
-        * @private
-        * @since 1.1.0
-        */
-        private _alignWidth: number;
-
-        /**
-        * The baseline of the text to be rendered.
-        * @property _baseline
-        * @type string
-        * @private
-        */
-        private _baseline: string; 
-
-        /**
-        * The text that you would like to appear in this textfield.
-        * @property text
-        * @type string
-        * @public
-        */
-        public set text(value: string) {
-            this._text = value;
-            this._tempDirty = true;
-      
-        } 
-        public get text(): string {
-            return this._text;
-        }
-
-        /**
-        * The color of the font that is contained in this textfield.
-        * May be set with a string, or an array of any valid
-        * Kiwi.Utils.Color arguments.
-        * Returns a hex string prepended with "#".
-        * @property color
-        * @type string
-        * @public
-        */
-        public set color( val: any ) {
-            if ( !Kiwi.Utils.Common.isArray( val ) ) {
-                val = [ val ];
-            }
-            this._fontColor.set.apply( this._fontColor, val );
-            this._tempDirty = true;
-   
-        } 
-        public get color(): any {
-            return "#" + this._fontColor.getHex();
-        }
-
-        /**
-        * The weight of the font.
-        * @property fontWeight
-        * @type string
-        * @public
-        */
-        public set fontWeight(val: string) {
-            this._fontWeight = val;
-            this._tempDirty = true;
-        }
-        public get fontWeight(): string {
-            return this._fontWeight;
-        }
-
-        /**
-        * The size on font when being displayed onscreen.
-        * @property fontSize
-        * @type number
-        * @public
-        */
-        public set fontSize(val: number) {
-            this._fontSize = val;
-            this._tempDirty = true;
-          
-        } 
-        public get fontSize(): number {
-            return this._fontSize;
-        }
-
-        /**
-        * The font family that is being used to render the text.
-        * @property fontFamily 
-        * @type string
-        * @public
-        */
-        public set fontFamily(val: string) {
-            this._fontFamily = val;
-            this._tempDirty = true;
-      
-        } 
-        public get fontFamily(): string {
-            return this._fontFamily;
-        }
-        
-        /**
-        * A static property that contains the string to center align the text.
-        * @property TEXT_ALIGN_CENTER
-        * @type string
-        * @static
-        * @final
-        * @public
-        */
-        public static TEXT_ALIGN_CENTER: string = "center";
-        
-        /**
-        * A static property that contains the string to right align the text.
-        * @property TEXT_ALIGN_RIGHT
-        * @type string
-        * @static
-        * @final
-        * @public
-        */
-        public static TEXT_ALIGN_RIGHT: string = "right";
-        
-        /**
-        * A static property that contains the string to left align the text.
-        * @property TEXT_ALIGN_LEFT
-        * @type string
-        * @static
-        * @final
-        * @public
-        */
-        public static TEXT_ALIGN_LEFT: string = "left";
-
-        /**
-        * Alignment of the text. You can either use the static TEXT_ALIGN constants or pass a string.
-        * @property textAlign
-        * @type string
-        * @public
-        */
-        public set textAlign(val: string) {
-            this._textAlign = val;
-            this._tempDirty = true;
-        }
-
-        public get textAlign(): string {
-            return this._textAlign;
-        }
-
-        /**
-        * The canvas element which the text is rendered onto. 
-        * @property _canvas
-        * @type HTMLCanvasElement.
-        * @private
-        */
-        private _canvas: HTMLCanvasElement;
-
-        /**
-        * The context for the canvas element. Used whilst rendering text.
-        * @property _ctx
-        * @type CanvasRenderingContext2D
-        * @private
-        */
-        private _ctx: CanvasRenderingContext2D;
-
-        /**
-        * If the temporary canvas is dirty and needs to be re-rendered. Only used when the text field rendering is being optimised.
-        * @property _tempDirty
-        * @type boolean
-        * @private
-        */
-        private _tempDirty: boolean = true;
-
-        /**
-        * Hitbox component
-        * @property box
-        * @type Kiwi.Components.Box
-        * @public
-        * @since 1.2.0
-        */
-        public box: Kiwi.Components.Box;
-
-
-        /**
-        * This method is used to render the text to an offscreen-canvas which is held in a TextureAtlas (which is generated upon the instanitation of this class). 
-        * This is so that the canvas doesn't render it every frame as it can be costly and so that it can be used in WebGL with the TextureAtlasRenderer.
-        *
-        * @method _renderText
-        * @private
-        */
-        private _renderText() {
-
-            //Get/Set the width
-            this._ctx.font = this._fontWeight + " " + this._fontSize + "px " + this._fontFamily;
-
-
-            // Get the size of the text.
-            var _measurements: TextMetrics = this._ctx.measureText(this._text);   //when you measure the text for some reason it resets the values?! 
-            var width = _measurements.width;
-            var height = this._fontSize * 1.3; //Need to find a better way to calculate
-            
-            // Cache alignment width
-            this._alignWidth = width;
-
-            // Is the width base2?
-            if (Kiwi.Utils.Common.base2Sizes.indexOf(width) == -1) {
-                var i = 0;
-                while (width > Kiwi.Utils.Common.base2Sizes[i]) i++;
-                width = Kiwi.Utils.Common.base2Sizes[i];
-            }
-
-            // Is the height base2?
-            if (Kiwi.Utils.Common.base2Sizes.indexOf(height) == -1) {
-                var i = 0;
-                while (height > Kiwi.Utils.Common.base2Sizes[i]) i++;
-                height = Kiwi.Utils.Common.base2Sizes[i];
-            }
-
-            // Apply the width/height
-            this._canvas.width = width;  
-            this._canvas.height = height;
-
-            // Clear the canvas
-            this._ctx.clearRect(0, 0, width, height);
-
-            // Reapply the styles....cause it unapplies after a measurement...?!?
-            this._ctx.font = this._fontWeight + " " + this._fontSize + "px " + this._fontFamily;
-            this._ctx.fillStyle = this.color.slice( 0, 7 );
-            this._ctx.textBaseline = this._baseline;
-
-            // Draw the text.
-            this._ctx.fillText(this._text, 0, 0);
-
-            // Update inherited properties
-            this.width = this._alignWidth;
-            this.height = this._canvas.height;
-
-
-            //Update the cell and dirty/undirtyfiy
-            this.atlas.cells[0] = {
-                x: 0,
-                y: 0,
-                w: this._canvas.width,
-                h: this._canvas.height,
-                hitboxes: [ {
-                    x: this._textAlign === Kiwi.GameObjects.Textfield.TEXT_ALIGN_LEFT ? 0 :
-                        this._textAlign === Kiwi.GameObjects.Textfield.TEXT_ALIGN_CENTER ?
-                        -this._alignWidth * 0.5 : -this._alignWidth,
-                    y: 0,
-                    w: this.width,
-                    h: this.height
-                    } ] };
-            this._tempDirty = false;
-            this.atlas.dirty = true;
-        }
-
-        /**
-	    * Called by the Layer to which this Game Object is attached
-	    * @method render
-        * @param {Kiwi.Camera}
-        * @public
-	    */
-        public render(camera:Kiwi.Camera) {
-            
-            if (this.alpha > 0 && this.visible) {
-
-                //render on stage
-                var ctx: CanvasRenderingContext2D = this.game.stage.ctx;
-                ctx.save();
-
-                var t: Kiwi.Geom.Transform = this.transform;
-                if (this.alpha > 0 && this.alpha <= 1) {
-                    ctx.globalAlpha = this.alpha;
-                }
-
-                //Does the text need re-rendering
-                if (this._tempDirty) this._renderText();
-
-                //Align the text
-                var x = 0;
-                switch (this._textAlign) {
-                    case Kiwi.GameObjects.Textfield.TEXT_ALIGN_LEFT:
-                        x = 0;
-                        break;
-                    case Kiwi.GameObjects.Textfield.TEXT_ALIGN_CENTER:
-                        x = this._alignWidth * 0.5;
-                        break;
-                    case Kiwi.GameObjects.Textfield.TEXT_ALIGN_RIGHT:
-                        x = this._alignWidth;
-                        break;
-                }
-
-
-                //Draw the Image
-                var m: Kiwi.Geom.Matrix = t.getConcatenatedMatrix();
-
-                ctx.transform(m.a, m.b, m.c, m.d, m.tx, m.ty);
-                ctx.drawImage(this._canvas, 0, 0, this._canvas.width, this._canvas.height, -t.rotPointX - x, -t.rotPointY, this._canvas.width, this._canvas.height);
-                
-
-                ctx.restore();
-                
-            }
-            
-        }
-
-        /**
-	    * Renders the GameObject using WebGL. 
-	    * @method renderGL
-        * @param {WebGLRenderingContext} gl
-        * @param {Kiwi.Camera} camera
-        * @param {Object} params
-        * @public
-	    */
-        public renderGL(gl: WebGLRenderingContext, camera: Kiwi.Camera, params: any = null) {
-            
-            //Does the text need re-rendering
-            if (this._tempDirty) this._renderText();
-
-
-            //Set-up the xyuv and alpha
-            var vertexItems = [];
-            
-
-
-            //Transform/Matrix
-            var t: Kiwi.Geom.Transform = this.transform;
-            var m: Kiwi.Geom.Matrix = t.getConcatenatedMatrix();
-
-            //See where the text should be.
-            var x = 0;
-            switch (this._textAlign) {
-                case Kiwi.GameObjects.Textfield.TEXT_ALIGN_LEFT:
-                    x = 0;
-                    break;
-                case Kiwi.GameObjects.Textfield.TEXT_ALIGN_CENTER:
-                    x = -(this._alignWidth * 0.5);
-                    break;
-                case Kiwi.GameObjects.Textfield.TEXT_ALIGN_RIGHT:
-                    x = -(this._alignWidth);
-                    break;
-            }
-
-
-            //Create the Point Objects.
-            var pt1 = new Kiwi.Geom.Point(x - t.rotPointX, 0 - t.rotPointY);
-            var pt2 = new Kiwi.Geom.Point(this._canvas.width + x - t.rotPointX , 0 - t.rotPointY);
-            var pt3 = new Kiwi.Geom.Point(this._canvas.width + x - t.rotPointX , this._canvas.height - t.rotPointY);
-            var pt4 = new Kiwi.Geom.Point(x - t.rotPointX, this._canvas.height - t.rotPointY);
-
-
-            //Add on the matrix to the points
-            pt1 = m.transformPoint(pt1);
-            pt2 = m.transformPoint(pt2);
-            pt3 = m.transformPoint(pt3);
-            pt4 = m.transformPoint(pt4);
-
-
-            //Append to the xyuv and alpha arrays 
-            vertexItems.push(
-                pt1.x, pt1.y, 0, 0, this.alpha,                                             //Top Left Point
-                pt2.x, pt2.y, this._canvas.width, 0, this.alpha,                            //Top Right Point
-                pt3.x, pt3.y, this._canvas.width, this._canvas.height, this.alpha,          //Bottom Right Point
-                pt4.x, pt4.y, 0, this._canvas.height, this.alpha                            //Bottom Left Point
-                );
-            //Add to the batch!
-            (<Kiwi.Renderers.TextureAtlasRenderer>this.glRenderer).concatBatch(vertexItems);
-        }
-    }
-
-    /**
-    * Alias of the "Kiwi.GameObjects.Textfield". 
-    * This will continue to be an alias until we can deprecate the existing version.
-    *
-    * @class TextField
-    * @namespace Kiwi.GameObjects
-    * @extends Kiwi.GameObjects.Textfield
-    */
-    export var TextField = Kiwi.GameObjects.Textfield;
-
-}
\ No newline at end of file
+
+	/**
+	* Textfield is a GameObject that is used when you are wanting to render text onto the current State. The Textfield is not designed to have any interaction with other GameObjects and as such it does not have many (if any) components or even a width/height.
+	*
+	* @class Textfield
+	* @namespace Kiwi.GameObjects
+	* @extends Kiwi.Entity
+	* @constructor
+	* @param state {Kiwi.State} The state that this Textfield belongs to
+	* @param text {String} The text that is contained within this textfield.
+	* @param [x=0] {Number} The new x coordinate from the Position component
+	* @param [y=0] {Number} The new y coordinate from the Position component
+	* @param [color="#000000"] {String} The color of the text. 
+	* @param [size=32] {Number} The size of the text in pixels.
+	* @param [weight="normal"] {String} The weight of the text.
+	* @param [fontFamily="sans-serif"] {String} The font family that is to be used when rendering.
+	* @return {Textfield} This Game Object.
+	*/
+	export class Textfield extends Kiwi.Entity {
+
+		constructor(state: Kiwi.State, text: string, x: number = 0, y: number = 0, color: string = "#000000", size: number = 32, weight: string = "normal", fontFamily: string = "sans-serif") {
+
+			super(state, x,y);
+
+			if (this.game.renderOption === Kiwi.RENDERER_WEBGL) {
+				this.glRenderer = this.game.renderer.requestSharedRenderer("TextureAtlasRenderer");
+			}
+
+			this._text = text;
+			this._fontWeight = weight;
+			this._fontSize = size;
+			this._fontColor = new Kiwi.Utils.Color( color );
+			this._fontFamily = fontFamily;
+			this._textAlign = "left";
+			this._baseline = "top";
+			
+			this._tempDirty = true;
+
+			// Create the canvas
+			this._canvas = document.createElement("canvas");
+			this._canvas.width = 2;
+			this._canvas.height = 2;
+			this._ctx = this._canvas.getContext("2d");
+
+			// Add it to the TextureLibrary
+			this.atlas = new Kiwi.Textures.SingleImage(this.game.rnd.uuid(), this._canvas);
+			this.state.textureLibrary.add(this.atlas);
+			this.atlas.dirty = true;
+
+			// Track actual text width - not canvas width (which rounds up to powers of 2), necessary for proper alignment
+			this._alignWidth = 0;
+
+			// Setup components
+			this.box = this.components.add(
+				new Kiwi.Components.Box(
+					this, x, y, this.width, this.height ) );
+		}
+
+		/**
+		* Returns the type of object that this is
+		* @method objType
+		* @return {string} "Textfield"
+		* @public
+		*/
+		public objType() {
+			return "Textfield";
+		}
+
+		/**
+		* The text that is to be rendered.
+		* @property _text
+		* @type string
+		* @private
+		*/
+		private _text: string;
+		
+		/**
+		* The weight of the font.
+		* @property _fontWeight
+		* @type string
+		* @default "normal"
+		* @private
+		*/
+		private _fontWeight: string;
+
+		/**
+		* The size of the font.
+		* @property _fontSize
+		* @type number
+		* @default 32
+		* @private
+		*/
+		private _fontSize: number;
+
+		/**
+		* The color of the text.
+		* @property _fontColor
+		* @type Kiwi.Utils.Color
+		* @private
+		*/
+		private _fontColor: Kiwi.Utils.Color;
+
+		/**
+		* The font family that is to be rendered.
+		* @property _fontFamily
+		* @type string
+		* @default "sans-serif"
+		* @private
+		*/
+		private _fontFamily: string;
+
+		/**
+		* The alignment of the text. This can either be "left", "right" or "center"
+		* @property _textAlign
+		* @type string
+		* @default "center"
+		* @private
+		*/
+		private _textAlign: string;
+
+		/**
+		* The pixel width of the text. Used internally for alignment purposes.
+		* @property _alignWidth
+		* @type number
+		* @default 0
+		* @private
+		* @since 1.1.0
+		*/
+		private _alignWidth: number;
+
+		/**
+		* The baseline of the text to be rendered.
+		* @property _baseline
+		* @type string
+		* @private
+		*/
+		private _baseline: string; 
+
+		/**
+		* The text that you would like to appear in this textfield.
+		* @property text
+		* @type string
+		* @public
+		*/
+		public set text(value: string) {
+			this._text = value;
+			this._tempDirty = true;
+	  
+		} 
+		public get text(): string {
+			return this._text;
+		}
+
+		/**
+		* The color of the font that is contained in this textfield.
+		* May be set with a string, or an array of any valid
+		* Kiwi.Utils.Color arguments.
+		* Returns a hex string prepended with "#".
+		* @property color
+		* @type string
+		* @public
+		*/
+		public set color( val: any ) {
+			if ( !Kiwi.Utils.Common.isArray( val ) ) {
+				val = [ val ];
+			}
+			this._fontColor.set.apply( this._fontColor, val );
+			this._tempDirty = true;
+
+		}
+		public get color(): any {
+			return "#" + this._fontColor.getHex();
+		}
+
+		/**
+		* The weight of the font.
+		* @property fontWeight
+		* @type string
+		* @public
+		*/
+		public set fontWeight(val: string) {
+			this._fontWeight = val;
+			this._tempDirty = true;
+		}
+		public get fontWeight(): string {
+			return this._fontWeight;
+		}
+
+		/**
+		* The size on font when being displayed onscreen.
+		* @property fontSize
+		* @type number
+		* @public
+		*/
+		public set fontSize(val: number) {
+			this._fontSize = val;
+			this._tempDirty = true;
+		}
+		public get fontSize(): number {
+			return this._fontSize;
+		}
+
+		/**
+		* The font family that is being used to render the text.
+		* @property fontFamily 
+		* @type string
+		* @public
+		*/
+		public set fontFamily(val: string) {
+			this._fontFamily = val;
+			this._tempDirty = true;
+		}
+		public get fontFamily(): string {
+			return this._fontFamily;
+		}
+
+		/**
+		* A static property that contains the string to center align the text.
+		* @property TEXT_ALIGN_CENTER
+		* @type string
+		* @static
+		* @final
+		* @public
+		*/
+		public static TEXT_ALIGN_CENTER: string = "center";
+
+		/**
+		* A static property that contains the string to right align the text.
+		* @property TEXT_ALIGN_RIGHT
+		* @type string
+		* @static
+		* @final
+		* @public
+		*/
+		public static TEXT_ALIGN_RIGHT: string = "right";
+
+		/**
+		* A static property that contains the string to left align the text.
+		* @property TEXT_ALIGN_LEFT
+		* @type string
+		* @static
+		* @final
+		* @public
+		*/
+		public static TEXT_ALIGN_LEFT: string = "left";
+
+		/**
+		* Alignment of the text. You can either use the static TEXT_ALIGN constants or pass a string.
+		* @property textAlign
+		* @type string
+		* @public
+		*/
+		public set textAlign(val: string) {
+			this._textAlign = val;
+			this._tempDirty = true;
+		}
+
+		public get textAlign(): string {
+			return this._textAlign;
+		}
+
+		/**
+		* The canvas element which the text is rendered onto. 
+		* @property _canvas
+		* @type HTMLCanvasElement.
+		* @private
+		*/
+		private _canvas: HTMLCanvasElement;
+
+		/**
+		* The context for the canvas element. Used whilst rendering text.
+		* @property _ctx
+		* @type CanvasRenderingContext2D
+		* @private
+		*/
+		private _ctx: CanvasRenderingContext2D;
+
+		/**
+		* If the temporary canvas is dirty and needs to be re-rendered. Only used when the text field rendering is being optimised.
+		* @property _tempDirty
+		* @type boolean
+		* @private
+		*/
+		private _tempDirty: boolean = true;
+
+		/**
+		* Hitbox component
+		* @property box
+		* @type Kiwi.Components.Box
+		* @public
+		* @since 1.2.0
+		*/
+		public box: Kiwi.Components.Box;
+
+
+		/**
+		* This method is used to render the text to an offscreen-canvas which is held in a TextureAtlas (which is generated upon the instanitation of this class). 
+		* This is so that the canvas doesn't render it every frame as it can be costly and so that it can be used in WebGL with the TextureAtlasRenderer.
+		*
+		* @method _renderText
+		* @private
+		*/
+		private _renderText() {
+
+			//Get/Set the width
+			this._ctx.font = this._fontWeight + " " + this._fontSize + "px " + this._fontFamily;
+
+
+			// Get the size of the text.
+			var _measurements: TextMetrics = this._ctx.measureText(this._text);   //when you measure the text for some reason it resets the values?! 
+			var width = _measurements.width;
+			var height = this._fontSize * 1.3; //Need to find a better way to calculate
+			
+			// Cache alignment width
+			this._alignWidth = width;
+
+			// Is the width base2?
+			if (Kiwi.Utils.Common.base2Sizes.indexOf(width) == -1) {
+				var i = 0;
+				while (width > Kiwi.Utils.Common.base2Sizes[i]) i++;
+				width = Kiwi.Utils.Common.base2Sizes[i];
+			}
+
+			// Is the height base2?
+			if (Kiwi.Utils.Common.base2Sizes.indexOf(height) == -1) {
+				var i = 0;
+				while (height > Kiwi.Utils.Common.base2Sizes[i]) i++;
+				height = Kiwi.Utils.Common.base2Sizes[i];
+			}
+
+			// Apply the width/height
+			this._canvas.width = width;  
+			this._canvas.height = height;
+
+			// Clear the canvas
+			this._ctx.clearRect(0, 0, width, height);
+
+			// Reapply the styles....cause it unapplies after a measurement...?!?
+			this._ctx.font = this._fontWeight + " " + this._fontSize + "px " + this._fontFamily;
+			this._ctx.fillStyle = this.color.slice( 0, 7 );
+			this._ctx.textBaseline = this._baseline;
+
+			// Draw the text.
+			this._ctx.fillText(this._text, 0, 0);
+
+			// Update inherited properties
+			this.width = this._alignWidth;
+			this.height = this._canvas.height;
+
+
+			//Update the cell and dirty/undirtyfiy
+			this.atlas.cells[0] = {
+				x: 0,
+				y: 0,
+				w: this._canvas.width,
+				h: this._canvas.height,
+				hitboxes: [ {
+					x: this._textAlign === Kiwi.GameObjects.Textfield.TEXT_ALIGN_LEFT ? 0 :
+						this._textAlign === Kiwi.GameObjects.Textfield.TEXT_ALIGN_CENTER ?
+						-this._alignWidth * 0.5 : -this._alignWidth,
+					y: 0,
+					w: this.width,
+					h: this.height
+					} ] };
+			this._tempDirty = false;
+			this.atlas.dirty = true;
+		}
+
+		/**
+		* Called by the Layer to which this Game Object is attached
+		* @method render
+		* @param {Kiwi.Camera}
+		* @public
+		*/
+		public render(camera:Kiwi.Camera) {
+
+			if (this.alpha > 0 && this.visible) {
+
+				//render on stage
+				var ctx: CanvasRenderingContext2D = this.game.stage.ctx;
+				ctx.save();
+
+				var t: Kiwi.Geom.Transform = this.transform;
+				if (this.alpha > 0 && this.alpha <= 1) {
+					ctx.globalAlpha = this.alpha;
+				}
+
+				//Does the text need re-rendering
+				if (this._tempDirty) this._renderText();
+
+				//Align the text
+				var x = 0;
+				switch (this._textAlign) {
+					case Kiwi.GameObjects.Textfield.TEXT_ALIGN_LEFT:
+						x = 0;
+						break;
+					case Kiwi.GameObjects.Textfield.TEXT_ALIGN_CENTER:
+						x = this._alignWidth * 0.5;
+						break;
+					case Kiwi.GameObjects.Textfield.TEXT_ALIGN_RIGHT:
+						x = this._alignWidth;
+						break;
+				}
+
+				//Draw the Image
+				var m: Kiwi.Geom.Matrix = t.getConcatenatedMatrix();
+
+				ctx.transform(m.a, m.b, m.c, m.d, m.tx, m.ty);
+				ctx.drawImage(this._canvas, 0, 0, this._canvas.width, this._canvas.height, -t.rotPointX - x, -t.rotPointY, this._canvas.width, this._canvas.height);
+				
+
+				ctx.restore();
+			}
+
+		}
+
+		/**
+		* Renders the GameObject using WebGL. 
+		* @method renderGL
+		* @param {WebGLRenderingContext} gl
+		* @param {Kiwi.Camera} camera
+		* @param {Object} params
+		* @public
+		*/
+		public renderGL(gl: WebGLRenderingContext, camera: Kiwi.Camera, params: any = null) {
+
+			//Does the text need re-rendering
+			if (this._tempDirty) this._renderText();
+
+			//Set-up the xyuv and alpha
+			var vertexItems = [];
+
+			//Transform/Matrix
+			var t: Kiwi.Geom.Transform = this.transform;
+			var m: Kiwi.Geom.Matrix = t.getConcatenatedMatrix();
+
+			//See where the text should be.
+			var x = 0;
+			switch (this._textAlign) {
+				case Kiwi.GameObjects.Textfield.TEXT_ALIGN_LEFT:
+					x = 0;
+					break;
+				case Kiwi.GameObjects.Textfield.TEXT_ALIGN_CENTER:
+					x = -(this._alignWidth * 0.5);
+					break;
+				case Kiwi.GameObjects.Textfield.TEXT_ALIGN_RIGHT:
+					x = -(this._alignWidth);
+					break;
+			}
+
+			//Create the Point Objects.
+			var pt1 = new Kiwi.Geom.Point(x - t.rotPointX, 0 - t.rotPointY);
+			var pt2 = new Kiwi.Geom.Point(this._canvas.width + x - t.rotPointX , 0 - t.rotPointY);
+			var pt3 = new Kiwi.Geom.Point(this._canvas.width + x - t.rotPointX , this._canvas.height - t.rotPointY);
+			var pt4 = new Kiwi.Geom.Point(x - t.rotPointX, this._canvas.height - t.rotPointY);
+
+			//Add on the matrix to the points
+			pt1 = m.transformPoint(pt1);
+			pt2 = m.transformPoint(pt2);
+			pt3 = m.transformPoint(pt3);
+			pt4 = m.transformPoint(pt4);
+
+			//Append to the xyuv and alpha arrays 
+			vertexItems.push(
+				pt1.x, pt1.y, 0, 0, this.alpha,
+				//Top Left Point
+				pt2.x, pt2.y, this._canvas.width, 0, this.alpha,
+				//Top Right Point
+				pt3.x, pt3.y, this._canvas.width, this._canvas.height, this.alpha,          //Bottom Right Point
+				pt4.x, pt4.y, 0, this._canvas.height, this.alpha
+				//Bottom Left Point
+				);
+			//Add to the batch!
+			(<Kiwi.Renderers.TextureAtlasRenderer>this.glRenderer).concatBatch(vertexItems);
+		}
+	}
+
+	/**
+	* Alias of the "Kiwi.GameObjects.Textfield". 
+	* This will continue to be an alias until we can deprecate the existing version.
+	*
+	* @class TextField
+	* @namespace Kiwi.GameObjects
+	* @extends Kiwi.GameObjects.Textfield
+	*/
+	export var TextField = Kiwi.GameObjects.Textfield;
+
+}
diff --git a/src/gameobjects/tilemap/TileMap.ts b/src/gameobjects/tilemap/TileMap.ts
index d4be79d..9245013 100644
--- a/src/gameobjects/tilemap/TileMap.ts
+++ b/src/gameobjects/tilemap/TileMap.ts
@@ -6,506 +6,505 @@
 */
 
 module Kiwi.GameObjects.Tilemap { 
-    
-    /**
-    * A TileMap handles the creation of TileMapLayers and the TileTypes that they use.
-    * Since a TileMap isn't a Entity itself you cannot add it to the Stage inorder to render that it manages, 
-    * Instead you have to add each layer lies within it. This way you can have other GameObjects behind/in-front of layers.
-    * 
-    * @class TileMap
-    * @namespace Kiwi.GameObjects.Tilemap
-    * @constructor 
-    * @param state {Kiwi.State} The state that this Tilemap is on.
-    * @param [tileMapDataKey] {String} The Data key for the JSON you would like to use.
-    * @param [atlas] {Kiwi.Textures.TextureAtlas} The texture atlas that you would like the tilemap layers to use.
-    * @param [startingCell=0] {number} The number for the initial cell that the first TileType should use. See 'createFromFileStore' for more information.
-    * @return {TileMap}
-    */
-    export class TileMap {
- 
-        constructor(state: Kiwi.State, tileMapData?: any, atlas?: Kiwi.Textures.TextureAtlas, startingCell:number=0) {
-
-            this.tileTypes = [];
-            this.createTileType(-1);
-            this.layers = [];
-
-            this.state = state;
-            this.game = state.game;
-
-            if (tileMapData !== undefined && atlas !== undefined) {
-                this.createFromFileStore(tileMapData, atlas, startingCell);
-            } else if (tileMapData !== undefined || atlas !== undefined) {
-                Kiwi.Log.warn('You must pass BOTH the TileMapDataKey and TextureAtlas inorder to create a TileMap from the File Store.', '#tilemap');
-            }
-
-        }
-
-        /**
-        * The orientation of the tilemap. 
-        * Note: This value does not affect the individual layers. 
-        * 
-        * @property orientation
-        * @type String
-        * @public
-        */
-        public orientation: string;
-
-        /**
-        * Is an Array containing all of the TileTypes that are available on the TileMap.
-        * @property tileTypes
-        * @type TileType[]
-        * @public
-        */
-        public tileTypes: TileType[];
-
-        /**
-        * A list of all of the TileMapLayers that exist on the TileMap.
-        * @property layers
-        * @type TileMapLayer
-        * @public
-        */
-        public layers: TileMapLayer[];
-
-        /**
-        * The state that this TileMap exists on.
-        * @property state
-        * @type Kiwi.State
-        * @public
-        */
-        public state: Kiwi.State;
-
-        /**
-        * The game that this TileMap is a part of.
-        * @property game
-        * @type Kiwi.Game
-        * @public
-        */
-        public game: Kiwi.Game;
-
-        /**
-        * The default width of a single tile that a TileMapLayer is told to have upon its creation. 
-        * @property tileWidth
-        * @type Number
-        * @default 0
-        * @public
-        */
-        public tileWidth: number = 0;
-        
-        /**
-        * The default height of a single tile that a TileMapLayer is told to have upon its creation.
-        * @property tileHeight
-        * @type Number
-        * @default 0
-        * @public
-        */
-        public tileHeight: number = 0;
-
-        /**
-        * The default width of all TileMapLayers when they are created. 
-        * This value is in Tiles.
-        * @property width
-        * @type Number
-        * @default 0
-        * @public
-        */
-        public width: number = 0;
-
-        /**
-        * The default height of all TileMapLayers when they are created. 
-        * This value is in Tiles.
-        * @property height
-        * @type Number
-        * @default 0
-        * @public
-        */
-        public height: number = 0;
-
-        /**
-        * The width of the tilemap in pixels. This value is READ ONLY.
-        * @property widthInPixels
-        * @type Number
-        * @public
-        */
-        public get widthInPixels(): number {
-            return this.width * this.tileWidth;
-        }
-        
-        /**
-        * The height of the tilemap in pixels. This value is READ ONLY.
-        * @property heightInPixels
-        * @type Number
-        * @public
-        */
-        public get heightInPixels(): number {
-            return this.height * this.tileHeight;
-        }
-
-        /**
-        * Any properties that were found in the JSON during creation.
-        * @property properties
-        * @type Object
-        * @public
-        */
-        public properties: any = {};
-
-        /** 
-        * Creates new tilemap layers from a JSON file that you pass (has to be in the Tiled Format).
-        * The texture atlas you pass is that one that each TileMapLayer found in the JSON will use, You can change the TextureAtlas afterwards.
-        * New TileTypes will automatically be created. The number is based on the Tileset parameter of the JSON. 
-        * The cell used for new TileTypes will begin at 0 and increment each time a new TileType is created (and a cell exists). Otherwise new TileTypes will start will a cell of -1 (none).
-        * @method createFromFileStore
-        * @param tileMapData {Any} This can either 
-        * @param atlas {Kiwi.Textures.TextureAtlas} The texture atlas that you would like the tilemap layers to use.
-        * @param [startingCell=0] {number} The number for the initial cell that the first TileType should use. If you pass -1 then no new TileTypes will be created.
-        * @public
-        */
-        public createFromFileStore(tileMapData: any, atlas: Kiwi.Textures.TextureAtlas, startingCell:number=0) {
-
-            var json = null;
-
-            //Does the JSON exist?
-            switch (typeof tileMapData) {
-                case 'string':
-                    if (this.game.fileStore.exists(tileMapData) == false) {
-                        Kiwi.Log.error('The JSON file you have told to use for a TileMap does not exist.', '#tilemap', '#json');
-                        return false;
-                    }   
-
-                    json = JSON.parse( this.game.fileStore.getFile(tileMapData).data );
-                    break;
-
-                case 'object':
-                    json = tileMapData;
-                    break;
-
-                default:
-                    Kiwi.Log.error('The type of TileMapData passed could not be idenified. Please either pass a name of JSON file to use OR an object to be used.', '#tilemap');                    
-            }
-
-            //Get the map information
-            this.orientation = (json.orientation == undefined) ? ORTHOGONAL : json.orientation;
-            this.tileWidth = (json.tilewidth == undefined) ? 32 : json.tilewidth;
-            this.tileHeight = (json.tileheight == undefined) ? 32 : json.tileheight;
-            this.width = json.width;
-            this.height = json.height;
-
-
-            //Add the properties
-            for (var prop in json.properties) {
-                this.properties[prop] = json.properties[prop];
-            }
-
-
-            //Generate the Tiles needed.
-            if (json.tilesets !== "undefined" && startingCell !== -1) 
-                this._generateTypesFromTileset(json.tilesets, atlas, startingCell);
-            
-
-            //Generate the layers we need
-            for (var i = 0; i < json.layers.length; i++) {
-                var layerData = json.layers[i];
-
-                //Check what type it is.
-                switch (json.layers[i].type) {
-                    case "tilelayer":
-                        var w = (layerData.width !== undefined) ? layerData.width : this.width;
-                        var h = (layerData.height !== undefined) ? layerData.height : this.height;
-
-                        var layer = this.createNewLayer(layerData.name, atlas, layerData.data, w, h, layerData.x * this.tileWidth, layerData.y * this.tileHeight );
-                        layer.orientation = this.orientation;
-                        
-                        //Add the extra data...
-                        layer.visible = (layerData.visible == undefined) ? true : layerData.visible;
-                        layer.alpha = (layerData.opacity == undefined) ? 1 : layerData.opacity;
-                        if (layerData.properties !== undefined)layer.properties = layerData.properties;
-
-                        break;
-
-                    case "objectgroup":
-                        this.createNewObjectLayer();
-                        break;
-
-                    case "imagelayer":
-                        this.createNewImageLayer();
-                        break;
-                }
-
-
-            }
-
-        }
-
-        /**
-        * Generates new TileTypes based upon the Tileset information that lies inside the Tiled JSON.
-        * This is an INTERNAL method, which is used when the createFromFileStore method is executed.
-        * @method _generateTypesFromTileset
-        * @param tilesetData {Array} The tileset part of the JSON.
-        * @param atlas {Kiwi.Textures.TextureAtlas} The Texture atlas which contains the cells that the new TileTypes will use.
-        * @param startingCell {Number} The first cell number that would be used.
-        * @private
-        */
-        private _generateTypesFromTileset( tilesetData:any[], atlas:Kiwi.Textures.TextureAtlas, startingCell:number ) {
-
-            //Loop through the tilesets
-            for (var i = 0; i < tilesetData.length; i++) {
-
-                var tileset = tilesetData[i];
-
-                //Tileset Information
-                var m = tileset.margin;
-                var s = tileset.spacing; 
-                var tw = tileset.tilewidth;
-                var th = tileset.tileheight;
-                var iw = tileset.imagewidth - m;
-                var ih = tileset.imageheight - m;
-
-                //Drawing offsets
-                var offset = (tileset.tileoffset == undefined) ? { x: 0, y: 0 } : tileset.tileoffset;
-                
-                //Calculate how many tiles there are in this tileset and thus how many different tile type there can be.
-                for (var y = m; y < ih; y += th) {
-                    for (var x = m; x < iw; x += tw) {
-    
-                        //Does the cell exist? Then use that.
-                        var cell = (atlas.cells[startingCell] == undefined) ? -1 : startingCell ;  
-                        
-                        var tileType = this.createTileType(cell);
-                        tileType.offset.x = offset.x;
-                        tileType.offset.y = offset.y;
-                        
-                        startingCell++; //Increase the cell to use by one.
-                    }
-                }
-                
-                //Add tile properties
-                for (var tp in tileset.tileproperties) {
-                    var tileType = this.tileTypes[(parseInt(tileset.firstgid) + parseInt(tp))];
-                    tileType.properties = tileset.tileproperties[tp];
-                }
-
-            }
-
-        }
-
-        /**
-        * Method to set the default TileMap properties. Useful when wanting to create tilemaps programmatically.
-        * @method setTo
-        * @param tileWidth {Number} The width of a single tile.
-        * @param tileHeight {Number} The height of a single tile.
-        * @param width {Number} The width of the whole map.
-        * @param height {Number} The height of the whole map.
-        * @public
-        */
-        public setTo(tileWidth: number, tileHeight: number, width: number, height: number) {
-            this.tileWidth = tileWidth;
-            this.tileHeight = tileHeight;
-            this.width = width;
-            this.height = height;
-        }
-
-        /**
-        *-----------------------
-        * Creation of Tile Types
-        *-----------------------
-        **/
-
-        /**
-        * Generates a single new TileType. Returns the TileType that was generated.
-        * @method createTileType
-        * @param [cell=-1] {Number} The cell that is to be used. Default is -1 (which means none)
-        * @return {TileType} The TileType generated.
-        * @public
-        */
-        public createTileType(cell:number = -1):TileType {
-            var tileType = new TileType(this, this.tileTypes.length, cell);
-            this.tileTypes.push(tileType);
-
-            return tileType;
-        }
-        
-        /**
-        * Creates a new TileType for each cell that you pass.
-        * @method createTileTypes
-        * @param cells {Number[]} The cells that you want a new TileType created for.
-        * @return {TileTypes[]} The TileTypes generated.
-        * @public
-        */
-        public createTileTypes(cells:number[]):TileType[] {
-            var types = [];
-            for (var i = 0; i < cells.length; i++) {
-
-                types.push( this.createTileType( cells[i] ) );
-
-            }
-            return types;
-        }
-
-        /**
-        * Used to create a number of TileTypes based starting cell number and how many you want from there.
-        * @method createTileTypesByRange
-        * @param cellStart {Number} The starting number of the cell.
-        * @param range {Number} How many cells (from the starting cell) should be created.
-        * @return {TileTypes[]} The TileTypes generated.
-        */
-        public createTileTypesByRange(cellStart: number, range: number): TileType[]{
-            var types = [];
-            for (var i = cellStart; i <= cellStart + range; i++) {
-
-                types.push( this.createTileType( i ) );
-
-            }
-            return types;
-        }
-
-
-        /**
-        *-----------------------
-        * Cell Modifications
-        *-----------------------
-        **/
-
-        /** 
-        * Changes a single cellIndex that a TileType is to use when it is rendered.
-        * @method setCell
-        * @param type {number} The number of the TileType that is to change.
-        * @param cell {number} The new cellIndex it should have.
-        * @public
-        */
-        public setCell(type: number, cell: number) {
-            this.tileTypes[type].cellIndex = cell;
-        }
-
-        /** 
-        * Changes a range of cellIndexs for Tiles the same range of TileTypes. 
-        * @method setCellsByRange
-        * @param typeStart {number} The starting TileType that is to be modified.
-        * @param cellStart {number} The starting cellIndex that the first TileType should have.
-        * @param range {number} How many times it should run.
-        * @public
-        */
-        public setCellsByRange(typeStart: number, cellStart: number, range:number) {
-
-            for (var i = typeStart; i < typeStart + range; i++) {
-                this.tileTypes[i].cellIndex = cellStart;
-                cellStart++;
-            } 
-
-        }
-
-        /**
-        *-----------------------
-        * Creation of Tilemap Layers
-        *-----------------------
-        **/
-
-        /** 
-        * Creates a new TileMapLayer with the details that are provided. 
-        * If no width/height/tileWidth/tileHeight parameters are passed then the values will be what this TileMap has.
-        * If no 'data' is provided then the map will be automatically filled with empty Types of Tiles.
-        * Returns the new TileMapLayer that was created.
-        * @method createNewLayer
-        * @param name {String} Name of the TileMap.
-        * @param atlas {Kiwi.Textures.TextureAtlas} The TextureAtlas that this layer should use.
-        * @param data {Number[]} The tile information. 
-        * @param [w=this.width] {Number} The width of the whole tile map. In Tiles.
-        * @param [h=this.height] {Number} The height of the whole tile map. In Tiles.
-        * @param [x=0] {Number} The position of the tilemap on the x axis. In pixels.
-        * @param [y=0] {Number} The position of the tilemap on the y axis. In pixels.
-        * @param [tw=this.tileWidth] {Number} The width of a single tile.
-        * @param [th=this.tileHeight] {Number} The height of a single tile.
-        * @return {TileMapLayer} The TileMapLayer that was created.
-        * @public
-        */
-        public createNewLayer(name: string, atlas: Kiwi.Textures.TextureAtlas, data: number[]= [], w: number= this.width, h: number=this.height, x: number= 0, y: number= 0, tw:number=this.tileWidth, th:number=this.tileHeight): TileMapLayer {
-
-            //Did the user provide enough data?
-            if (data.length < w * h) {
-
-                //No... So push empty cells instead
-                var i = data.length - 1;
-                while (++i < w * h) {
-                    data.push(0);
-                }
-            }
-
-            //Create the new layer
-            var layer = new Kiwi.GameObjects.Tilemap.TileMapLayer(this, name, atlas, data, tw, th, x, y, w, h);
-
-            //Add the new layer to the array
-            this.layers.push(layer);
-
-            return layer;
-        }
-
-
-        /**
-        * Eventually will create a new object layer. Currently does nothing.
-        * @method createNewObjectLayer
-        * @public
-        */
-        public createNewObjectLayer() {
-            Kiwi.Log.log("OBJECT GROUP layers are currently not supported.", '#tilemap');
-        }
-
-        
-        /**
-        * Eventually will create a new image layer. Currently does nothing.
-        * @method createNewObjectLayer
-        * @public
-        */
-        public createNewImageLayer() {
-            Kiwi.Log.log("IMAGE layers are currently not supported.", '#tilemap');
-        }
-
-        /**
-        *-----------------------
-        * TileMapLayer Management Functions
-        *-----------------------
-        **/
-
-        /**
-        * Get a layer by the name that it was given upon creation.
-        * Returns null if no layer with that name was found.
-        * @method getLayerByName
-        * @param name {String} Name of the layer you would like to select.
-        * @return {TileMapLayer} Either the layer with the name passed, or null if no Layer with that name was found.
-        * @public
-        */
-        public getLayerByName(name: string):TileMapLayer {
-            for (var i = 0; i < this.layers.length; i++) {
-                if (this.layers[i].name == name) {
-                    return this.layers[i];
-                }
-            }
-            return null;
-        }
-        
-        /**
-        * Returns the layer with the number associated with it in the layers array.
-        * @method getLayer
-        * @param num {Number} Number of the Layer you would like to get.
-        * @return {TileMapLayer}
-        * @public
-        */
-        public getLayer(num: number):TileMapLayer {
-            return (this.layers[num] !== undefined) ? this.layers[num] : null;
-        }
-
-
-        /**
-        * The type of object that it is.
-        * @method objType
-        * @return {String} "TileMap"
-        * @public
-        */
-        public objType() {
-            return "TileMap";
-        }
-
-    }
-
-    export var ISOMETRIC: string = "isometric";
-
-    export var ORTHOGONAL: string = "orthogonal";
+
+	/**
+	* A TileMap handles the creation of TileMapLayers and the TileTypes that they use.
+	* Since a TileMap isn't a Entity itself you cannot add it to the Stage inorder to render that it manages, 
+	* Instead you have to add each layer lies within it. This way you can have other GameObjects behind/in-front of layers.
+	* 
+	* @class TileMap
+	* @namespace Kiwi.GameObjects.Tilemap
+	* @constructor 
+	* @param state {Kiwi.State} The state that this Tilemap is on.
+	* @param [tileMapDataKey] {String} The Data key for the JSON you would like to use.
+	* @param [atlas] {Kiwi.Textures.TextureAtlas} The texture atlas that you would like the tilemap layers to use.
+	* @param [startingCell=0] {number} The number for the initial cell that the first TileType should use. See 'createFromFileStore' for more information.
+	* @return {TileMap}
+	*/
+	export class TileMap {
+
+		constructor(state: Kiwi.State, tileMapData?: any, atlas?: Kiwi.Textures.TextureAtlas, startingCell:number=0) {
+
+			this.tileTypes = [];
+			this.createTileType(-1);
+			this.layers = [];
+
+			this.state = state;
+			this.game = state.game;
+
+			if (tileMapData !== undefined && atlas !== undefined) {
+				this.createFromFileStore(tileMapData, atlas, startingCell);
+			} else if (tileMapData !== undefined || atlas !== undefined) {
+				Kiwi.Log.warn('You must pass BOTH the TileMapDataKey and TextureAtlas inorder to create a TileMap from the File Store.', '#tilemap');
+			}
+
+		}
+
+		/**
+		* The orientation of the tilemap. 
+		* Note: This value does not affect the individual layers. 
+		* 
+		* @property orientation
+		* @type String
+		* @public
+		*/
+		public orientation: string;
+
+		/**
+		* Is an Array containing all of the TileTypes that are available on the TileMap.
+		* @property tileTypes
+		* @type TileType[]
+		* @public
+		*/
+		public tileTypes: TileType[];
+
+		/**
+		* A list of all of the TileMapLayers that exist on the TileMap.
+		* @property layers
+		* @type TileMapLayer
+		* @public
+		*/
+		public layers: TileMapLayer[];
+
+		/**
+		* The state that this TileMap exists on.
+		* @property state
+		* @type Kiwi.State
+		* @public
+		*/
+		public state: Kiwi.State;
+
+		/**
+		* The game that this TileMap is a part of.
+		* @property game
+		* @type Kiwi.Game
+		* @public
+		*/
+		public game: Kiwi.Game;
+
+		/**
+		* The default width of a single tile that a TileMapLayer is told to have upon its creation. 
+		* @property tileWidth
+		* @type Number
+		* @default 0
+		* @public
+		*/
+		public tileWidth: number = 0;
+
+		/**
+		* The default height of a single tile that a TileMapLayer is told to have upon its creation.
+		* @property tileHeight
+		* @type Number
+		* @default 0
+		* @public
+		*/
+		public tileHeight: number = 0;
+
+		/**
+		* The default width of all TileMapLayers when they are created. 
+		* This value is in Tiles.
+		* @property width
+		* @type Number
+		* @default 0
+		* @public
+		*/
+		public width: number = 0;
+
+		/**
+		* The default height of all TileMapLayers when they are created. 
+		* This value is in Tiles.
+		* @property height
+		* @type Number
+		* @default 0
+		* @public
+		*/
+		public height: number = 0;
+
+		/**
+		* The width of the tilemap in pixels. This value is READ ONLY.
+		* @property widthInPixels
+		* @type Number
+		* @public
+		*/
+		public get widthInPixels(): number {
+			return this.width * this.tileWidth;
+		}
+
+		/**
+		* The height of the tilemap in pixels. This value is READ ONLY.
+		* @property heightInPixels
+		* @type Number
+		* @public
+		*/
+		public get heightInPixels(): number {
+			return this.height * this.tileHeight;
+		}
+
+		/**
+		* Any properties that were found in the JSON during creation.
+		* @property properties
+		* @type Object
+		* @public
+		*/
+		public properties: any = {};
+
+		/** 
+		* Creates new tilemap layers from a JSON file that you pass (has to be in the Tiled Format).
+		* The texture atlas you pass is that one that each TileMapLayer found in the JSON will use, You can change the TextureAtlas afterwards.
+		* New TileTypes will automatically be created. The number is based on the Tileset parameter of the JSON. 
+		* The cell used for new TileTypes will begin at 0 and increment each time a new TileType is created (and a cell exists). Otherwise new TileTypes will start will a cell of -1 (none).
+		* @method createFromFileStore
+		* @param tileMapData {Any} This can either 
+		* @param atlas {Kiwi.Textures.TextureAtlas} The texture atlas that you would like the tilemap layers to use.
+		* @param [startingCell=0] {number} The number for the initial cell that the first TileType should use. If you pass -1 then no new TileTypes will be created.
+		* @public
+		*/
+		public createFromFileStore(tileMapData: any, atlas: Kiwi.Textures.TextureAtlas, startingCell:number=0) {
+
+			var json = null;
+
+			//Does the JSON exist?
+			switch (typeof tileMapData) {
+				case 'string':
+					if (this.game.fileStore.exists(tileMapData) == false) {
+						Kiwi.Log.error('The JSON file you have told to use for a TileMap does not exist.', '#tilemap', '#json');
+						return false;
+					}   
+
+					json = JSON.parse( this.game.fileStore.getFile(tileMapData).data );
+					break;
+
+				case 'object':
+					json = tileMapData;
+					break;
+
+				default:
+					Kiwi.Log.error('The type of TileMapData passed could not be idenified. Please either pass a name of JSON file to use OR an object to be used.', '#tilemap');
+			}
+
+			//Get the map information
+			this.orientation = (json.orientation == undefined) ? ORTHOGONAL : json.orientation;
+			this.tileWidth = (json.tilewidth == undefined) ? 32 : json.tilewidth;
+			this.tileHeight = (json.tileheight == undefined) ? 32 : json.tileheight;
+			this.width = json.width;
+			this.height = json.height;
+
+
+			//Add the properties
+			for (var prop in json.properties) {
+				this.properties[prop] = json.properties[prop];
+			}
+
+
+			//Generate the Tiles needed.
+			if (json.tilesets !== "undefined" && startingCell !== -1) 
+				this._generateTypesFromTileset(json.tilesets, atlas, startingCell);
+
+			//Generate the layers we need
+			for (var i = 0; i < json.layers.length; i++) {
+				var layerData = json.layers[i];
+
+				//Check what type it is.
+				switch (json.layers[i].type) {
+					case "tilelayer":
+						var w = (layerData.width !== undefined) ? layerData.width : this.width;
+						var h = (layerData.height !== undefined) ? layerData.height : this.height;
+
+						var layer = this.createNewLayer(layerData.name, atlas, layerData.data, w, h, layerData.x * this.tileWidth, layerData.y * this.tileHeight );
+						layer.orientation = this.orientation;
+						
+						//Add the extra data...
+						layer.visible = (layerData.visible == undefined) ? true : layerData.visible;
+						layer.alpha = (layerData.opacity == undefined) ? 1 : layerData.opacity;
+						if (layerData.properties !== undefined)layer.properties = layerData.properties;
+
+						break;
+
+					case "objectgroup":
+						this.createNewObjectLayer();
+						break;
+
+					case "imagelayer":
+						this.createNewImageLayer();
+						break;
+				}
+
+
+			}
+
+		}
+
+		/**
+		* Generates new TileTypes based upon the Tileset information that lies inside the Tiled JSON.
+		* This is an INTERNAL method, which is used when the createFromFileStore method is executed.
+		* @method _generateTypesFromTileset
+		* @param tilesetData {Array} The tileset part of the JSON.
+		* @param atlas {Kiwi.Textures.TextureAtlas} The Texture atlas which contains the cells that the new TileTypes will use.
+		* @param startingCell {Number} The first cell number that would be used.
+		* @private
+		*/
+		private _generateTypesFromTileset( tilesetData:any[], atlas:Kiwi.Textures.TextureAtlas, startingCell:number ) {
+
+			//Loop through the tilesets
+			for (var i = 0; i < tilesetData.length; i++) {
+
+				var tileset = tilesetData[i];
+
+				//Tileset Information
+				var m = tileset.margin;
+				var s = tileset.spacing; 
+				var tw = tileset.tilewidth;
+				var th = tileset.tileheight;
+				var iw = tileset.imagewidth - m;
+				var ih = tileset.imageheight - m;
+
+				//Drawing offsets
+				var offset = (tileset.tileoffset == undefined) ? { x: 0, y: 0 } : tileset.tileoffset;
+
+				//Calculate how many tiles there are in this tileset and thus how many different tile type there can be.
+				for (var y = m; y < ih; y += th) {
+					for (var x = m; x < iw; x += tw) {
+
+						//Does the cell exist? Then use that.
+						var cell = (atlas.cells[startingCell] == undefined) ? -1 : startingCell ;  
+
+						var tileType = this.createTileType(cell);
+						tileType.offset.x = offset.x;
+						tileType.offset.y = offset.y;
+
+						startingCell++; //Increase the cell to use by one.
+					}
+				}
+
+				//Add tile properties
+				for (var tp in tileset.tileproperties) {
+					var tileType = this.tileTypes[(parseInt(tileset.firstgid) + parseInt(tp))];
+					tileType.properties = tileset.tileproperties[tp];
+				}
+
+			}
+
+		}
+
+		/**
+		* Method to set the default TileMap properties. Useful when wanting to create tilemaps programmatically.
+		* @method setTo
+		* @param tileWidth {Number} The width of a single tile.
+		* @param tileHeight {Number} The height of a single tile.
+		* @param width {Number} The width of the whole map.
+		* @param height {Number} The height of the whole map.
+		* @public
+		*/
+		public setTo(tileWidth: number, tileHeight: number, width: number, height: number) {
+			this.tileWidth = tileWidth;
+			this.tileHeight = tileHeight;
+			this.width = width;
+			this.height = height;
+		}
+
+		/**
+		*-----------------------
+		* Creation of Tile Types
+		*-----------------------
+		**/
+
+		/**
+		* Generates a single new TileType. Returns the TileType that was generated.
+		* @method createTileType
+		* @param [cell=-1] {Number} The cell that is to be used. Default is -1 (which means none)
+		* @return {TileType} The TileType generated.
+		* @public
+		*/
+		public createTileType(cell:number = -1):TileType {
+			var tileType = new TileType(this, this.tileTypes.length, cell);
+			this.tileTypes.push(tileType);
+
+			return tileType;
+		}
+		
+		/**
+		* Creates a new TileType for each cell that you pass.
+		* @method createTileTypes
+		* @param cells {Number[]} The cells that you want a new TileType created for.
+		* @return {TileTypes[]} The TileTypes generated.
+		* @public
+		*/
+		public createTileTypes(cells:number[]):TileType[] {
+			var types = [];
+			for (var i = 0; i < cells.length; i++) {
+
+				types.push( this.createTileType( cells[i] ) );
+
+			}
+			return types;
+		}
+
+		/**
+		* Used to create a number of TileTypes based starting cell number and how many you want from there.
+		* @method createTileTypesByRange
+		* @param cellStart {Number} The starting number of the cell.
+		* @param range {Number} How many cells (from the starting cell) should be created.
+		* @return {TileTypes[]} The TileTypes generated.
+		*/
+		public createTileTypesByRange(cellStart: number, range: number): TileType[]{
+			var types = [];
+			for (var i = cellStart; i <= cellStart + range; i++) {
+
+				types.push( this.createTileType( i ) );
+
+			}
+			return types;
+		}
+
+
+		/**
+		*-----------------------
+		* Cell Modifications
+		*-----------------------
+		**/
+
+		/** 
+		* Changes a single cellIndex that a TileType is to use when it is rendered.
+		* @method setCell
+		* @param type {number} The number of the TileType that is to change.
+		* @param cell {number} The new cellIndex it should have.
+		* @public
+		*/
+		public setCell(type: number, cell: number) {
+			this.tileTypes[type].cellIndex = cell;
+		}
+
+		/** 
+		* Changes a range of cellIndexs for Tiles the same range of TileTypes. 
+		* @method setCellsByRange
+		* @param typeStart {number} The starting TileType that is to be modified.
+		* @param cellStart {number} The starting cellIndex that the first TileType should have.
+		* @param range {number} How many times it should run.
+		* @public
+		*/
+		public setCellsByRange(typeStart: number, cellStart: number, range:number) {
+
+			for (var i = typeStart; i < typeStart + range; i++) {
+				this.tileTypes[i].cellIndex = cellStart;
+				cellStart++;
+			} 
+
+		}
+
+		/**
+		*-----------------------
+		* Creation of Tilemap Layers
+		*-----------------------
+		**/
+
+		/** 
+		* Creates a new TileMapLayer with the details that are provided. 
+		* If no width/height/tileWidth/tileHeight parameters are passed then the values will be what this TileMap has.
+		* If no 'data' is provided then the map will be automatically filled with empty Types of Tiles.
+		* Returns the new TileMapLayer that was created.
+		* @method createNewLayer
+		* @param name {String} Name of the TileMap.
+		* @param atlas {Kiwi.Textures.TextureAtlas} The TextureAtlas that this layer should use.
+		* @param data {Number[]} The tile information. 
+		* @param [w=this.width] {Number} The width of the whole tile map. In Tiles.
+		* @param [h=this.height] {Number} The height of the whole tile map. In Tiles.
+		* @param [x=0] {Number} The position of the tilemap on the x axis. In pixels.
+		* @param [y=0] {Number} The position of the tilemap on the y axis. In pixels.
+		* @param [tw=this.tileWidth] {Number} The width of a single tile.
+		* @param [th=this.tileHeight] {Number} The height of a single tile.
+		* @return {TileMapLayer} The TileMapLayer that was created.
+		* @public
+		*/
+		public createNewLayer(name: string, atlas: Kiwi.Textures.TextureAtlas, data: number[]= [], w: number= this.width, h: number=this.height, x: number= 0, y: number= 0, tw:number=this.tileWidth, th:number=this.tileHeight): TileMapLayer {
+
+			//Did the user provide enough data?
+			if (data.length < w * h) {
+
+				//No... So push empty cells instead
+				var i = data.length - 1;
+				while (++i < w * h) {
+					data.push(0);
+				}
+			}
+
+			//Create the new layer
+			var layer = new Kiwi.GameObjects.Tilemap.TileMapLayer(this, name, atlas, data, tw, th, x, y, w, h);
+
+			//Add the new layer to the array
+			this.layers.push(layer);
+
+			return layer;
+		}
+
+
+		/**
+		* Eventually will create a new object layer. Currently does nothing.
+		* @method createNewObjectLayer
+		* @public
+		*/
+		public createNewObjectLayer() {
+			Kiwi.Log.log("OBJECT GROUP layers are currently not supported.", '#tilemap');
+		}
+
+
+		/**
+		* Eventually will create a new image layer. Currently does nothing.
+		* @method createNewObjectLayer
+		* @public
+		*/
+		public createNewImageLayer() {
+			Kiwi.Log.log("IMAGE layers are currently not supported.", '#tilemap');
+		}
+
+		/**
+		*-----------------------
+		* TileMapLayer Management Functions
+		*-----------------------
+		**/
+
+		/**
+		* Get a layer by the name that it was given upon creation.
+		* Returns null if no layer with that name was found.
+		* @method getLayerByName
+		* @param name {String} Name of the layer you would like to select.
+		* @return {TileMapLayer} Either the layer with the name passed, or null if no Layer with that name was found.
+		* @public
+		*/
+		public getLayerByName(name: string):TileMapLayer {
+			for (var i = 0; i < this.layers.length; i++) {
+				if (this.layers[i].name == name) {
+					return this.layers[i];
+				}
+			}
+			return null;
+		}
+
+		/**
+		* Returns the layer with the number associated with it in the layers array.
+		* @method getLayer
+		* @param num {Number} Number of the Layer you would like to get.
+		* @return {TileMapLayer}
+		* @public
+		*/
+		public getLayer(num: number):TileMapLayer {
+			return (this.layers[num] !== undefined) ? this.layers[num] : null;
+		}
+
+
+		/**
+		* The type of object that it is.
+		* @method objType
+		* @return {String} "TileMap"
+		* @public
+		*/
+		public objType() {
+			return "TileMap";
+		}
+
+	}
+
+	export var ISOMETRIC: string = "isometric";
+
+	export var ORTHOGONAL: string = "orthogonal";
 
 }
diff --git a/src/gameobjects/tilemap/TileMapLayer.ts b/src/gameobjects/tilemap/TileMapLayer.ts
index 4928acb..f8167ae 100644
--- a/src/gameobjects/tilemap/TileMapLayer.ts
+++ b/src/gameobjects/tilemap/TileMapLayer.ts
@@ -8,974 +8,970 @@
 module Kiwi.GameObjects.Tilemap {
 
 
-    /**
-    * GameObject that contains the information held for a single Layer of Tiles, along with methods to handle the rendering of those Tiles. 
-    * A TileMapLayer should not be directly created, but instead should be created through a TileMap object instead.
-    * 
-    * @class TileMapLayer
-    * @extends Kiwi.Entity
-    * @namespace Kiwi.GameObjects.Tilemap
-    * @constructor
-    * @param tilemap {Kiwi.GameObjects.Tilemap.TileMap} The TileMap that this layer belongs to.
-    * @param name {String} The name of this TileMapLayer.
-    * @param atlas {Kiwi.Textures.TextureAtlas} The texture atlas that should be used when rendering this TileMapLayer onscreen.
-    * @param data {Number[]} The information about the tiles.
-    * @param tw {Number} The width of a single tile in pixels. Usually the same as the TileMap unless told otherwise.
-    * @param th {Number} The height of a single tile in pixels. Usually the same as the TileMap unless told otherwise.
-    * @param [x=0] {Number} The x coordinate of the tilemap in pixels.
-    * @param [y=0] {Number} The y coordinate of the tilemap in pixels.
-    * @param [w=0] {Number} The width of the whole tilemap in tiles. Usually the same as the TileMap unless told otherwise.
-    * @param [h=0] {Number} The height of the whole tilemap in tiles. Usually the same as the TileMap unless told otherwise.
-    * @return {TileMapLayer}
-    */
-    export class TileMapLayer extends Kiwi.Entity {
-
-        constructor(tilemap: Kiwi.GameObjects.Tilemap.TileMap, name: string, atlas: Kiwi.Textures.TextureAtlas, data: number[], tw: number, th: number, x: number= 0, y: number= 0, w:number=0, h:number=0) {
-            super(tilemap.state, x, y);
-
-            //Request the Shared Texture Atlas renderer.
-            if (this.game.renderOption === Kiwi.RENDERER_WEBGL) {
-                this.glRenderer = this.game.renderer.requestSharedRenderer("TextureAtlasRenderer");
-            }
-
-            this.name = name;
-            this.atlas = atlas;
-            this.tilemap = tilemap;
-            this._data = data;
-            this.tileWidth = tw;
-            this.tileHeight = th;
-            this.width = w;
-            this.height = h;
-
-            this._corner1 = new Kiwi.Geom.Point(0,0);
-            this._corner2 = new Kiwi.Geom.Point(0,0);
-            this._corner3 = new Kiwi.Geom.Point(0,0);
-            this._corner4 = new Kiwi.Geom.Point(0,0);
-
-            this.physics = this.components.add(new Kiwi.Components.ArcadePhysics(this, null));
-            this.physics.immovable = true;
-        }
-
-        /**
-        * The physics component contained on the Tilemap. Use for basic collisions between People and Tiles.
-        * Note: That tilemap layers a immovable and collisions with tiles are set on the individual TileTypes that are contained on the TileMap. 
-        * @property physics
-        * @type ArcadePhysics
-        * @public
-        */
-        public physics: Kiwi.Components.ArcadePhysics;
-
-        /**
-        * Returns the type of child that this is. 
-        * @type Number
-        * @return {Number} returns the type of child that the entity is
-        * @public
-        */
-        public childType(): number {
-            return Kiwi.TILE_LAYER;
-        }
-
-        /**
-        * The type of object that it is.
-        * @method objType
-        * @return {String} "TileMapLayer"
-        * @public
-        */
-        public objType() {
-            return "TileMapLayer";
-        }
-
-        /**
-        * The tilemap that this TileMapLayer is a part of.
-        * @property tilemap
-        * @type TileMap
-        * @public
-        */
-        public tilemap: Kiwi.GameObjects.Tilemap.TileMap;
-
-        /**
-        * Properties about that this TileMapLayer has when it was created from a JSON file.
-        * @property properties
-        * @type Object
-        * @public
-        */
-        public properties: any = {};
-        
-        /**
-        * The width of this TileMap in tiles.
-        * @property width
-        * @type Number
-        * @public
-        */
-        public width: number;
-        
-        /**
-        * The height of this TileMap in tiles.
-        * @property height
-        * @type Number
-        * @public
-        */
-        public height: number;
-        
-        /**
-        * The width of a single tile.
-        * @property tileWidth
-        * @type Number
-        * @public
-        */
-        public tileWidth: number;
-        
-        /**
-        * The height of a single tile.
-        * @property tileHeight
-        * @type Number
-        * @public
-        */
-        public tileHeight: number;
-        
-        /**
-        * The texture atlas that should be used when rendering.
-        * @property atlas
-        * @type Kiwi.Textures.TextureAtlas
-        * @public
-        */
-        public atlas: Kiwi.Textures.TextureAtlas;
-        
-        /**
-        * The width of the layer in pixels. This property is READ ONLY.
-        * @property widthInPixels
-        * @type number
-        * @public
-        */
-        public get widthInPixels(): number {
-            return this.width * this.tilemap.tileWidth;
-        }
-        
-        /**
-        * The height of the layer in pixels. This property is READ ONLY.
-        * @property heightInPixels
-        * @type number
-        * @public
-        */
-        public get heightInPixels(): number {
-            return this.height * this.tilemap.tileHeight;
-        }
-
-        /**
-        * Override function to prevent unwanted inherited behaviour. Do not call.
-        *
-        * Because TileMapLayer extends Entity, it has a cellIndex parameter. However, it does not use a single atlas index, so this parameter is meaningless. It has deliberately been set to do nothing.
-        * @property cellIndex
-        * @type number
-        * @public
-        * @deprecated Not functional on this object.
-        * @since 1.1.0
-        */
-        public get cellIndex():number {
-            return null;
-        }
-        public set cellIndex( val: number ) {}
-
-        // Methods altered because TileMapLayer has its own width and height properties:
-        public scaleToWidth(value: number) {
-            this.scale = value / this.widthInPixels;
-        }
-        public scaleToHeight(value: number) {
-            this.scale = value / this.heightInPixels;
-        }
-        public centerAnchorPoint() {
-            this.anchorPointX = this.widthInPixels * 0.5;
-            this.anchorPointY = this.heightInPixels * 0.5;
-        }
-
-        /**
-        * A list containing all the types of tiles found on this TileMapLayer.
-        * @property _data
-        * @type number[]
-        * @private
-        */
-        private _data: number[];
-
-        /**
-        * Returns the total number of tiles. Either for a particular type if passed, otherwise of any type if not passed.
-        * @method countTiles
-        * @param [type] {Number} The type of tile you want to count.
-        * @return {Number} The number of tiles on this layer.
-        * @public
-        */
-        public countTiles(type?:number):number {
-
-            var cnt = 0;
-
-            for (var i = 0; i < this._data.length; i++) {
-                if (type == undefined && this._data[i] !== 0) cnt++;
-                else if (type === this._data[i]) cnt++; 
-            }
-
-            return cnt;
-        }
-
-        /**
-        * The orientation of the of tilemap. 
-        * TileMaps can be either 'orthogonal' (normal) or 'isometric'.
-        * @property orientation
-        * @type String
-        * @default 'orthogonal'
-        * @public
-        */
-        public orientation: string = ORTHOGONAL;
-
-
-        /**
-        *-----------------------
-        * Getting Tiles
-        *-----------------------
-        */
-
-
-        /**
-        * A list containing all of the types of tiles found on this TileMapLayer. This is READ ONLY.
-        * @property tileData
-        * @type number[]
-        * @public
-        */
-        public get tileData(): number[] {
-            return this._data;
-        }
-        
-        /**
-        * Returns the index of the tile based on the x and y coordinates of the tile passed. 
-        * If no tile is a the coordinates given then -1 is returned instead.
-        * Coordinates are in tiles not pixels.
-        * @method getIndexFromXY
-        * @param x {Number} The x coordinate of the Tile you would like to retrieve. 
-        * @param y {Number} The y coordinate of the Tile you would like to retrieve.
-        * @return {Number} Either the index of the tile retrieved or -1 if none was found.
-        * @public
-        */
-        public getIndexFromXY(x: number, y: number): number {
-            var num = x + y * this.width;
-
-            //Does the index exist?
-            if (num < 0 || num >= this._data.length) return -1;
-            else return num;
-        }
-
-        /**
-        * Returns the TileType for a tile that is at a particular set of coordinates passed. 
-        * If no tile is found the null is returned instead.
-        * Coordinates passed are in tiles.
-        * @method getTileFromXY
-        * @param x {Number}
-        * @param y {Number}
-        * @return {Number} The tile
-        * @public
-        */
-        public getTileFromXY(x: number, y: number): TileType {
-            var t = this.getIndexFromXY(x, y);
-            return (t !== -1) ? this.tilemap.tileTypes[ this._data[t] ] : null;
-        }
-
-        /**
-        * Returns the index of the tile based on the x and y pixel coordinates that are passed. 
-        * If no tile is a the coordinates given then -1 is returned instead.
-        * Coordinates are in pixels not tiles and use the world coordinates of the tilemap.
-        * Note: Currently only working for ORTHOGONAL TileMaps.
-        *
-        * @method getIndexFromCoords
-        * @param x {Number} The x coordinate of the Tile you would like to retrieve. 
-        * @param y {Number} The y coordinate of the Tile you would like to retrieve.
-        * @return {Number} Either the index of the tile retrieved or -1 if none was found.
-        * @public
-        */
-        public getIndexFromCoords(x: number, y: number): number {
-
-            //Not with the bounds?
-            if (x > this.transform.worldX + this.widthInPixels || y > this.transform.worldY + this.heightInPixels || x < this.transform.worldX || y < this.transform.worldY)
-                return -1;
-
-            //Is so get the tile
-            var tx = Kiwi.Utils.GameMath.snapToFloor(x - this.transform.worldX, this.tileWidth) / this.tileWidth;
-            var ty = Kiwi.Utils.GameMath.snapToFloor(y - this.transform.worldY, this.tileHeight) / this.tileHeight;
-
-            return this.getIndexFromXY(tx, ty);
-
-        }
-        
-        /**
-        * Returns the TileType for a tile that is at a particular coordinate passed. 
-        * If no tile is found then null is returned instead.
-        * Coordinates passed are in pixels and use the world coordinates of the tilemap.
-        * Note: Currently only working for ORTHOGONAL TileMaps.
-        * 
-        * @method getTileFromCoords
-        * @param x {Number}
-        * @param y {Number}
-        * @return {Number} The tile
-        * @public
-        */
-        public getTileFromCoords(x: number, y: number): TileType {
-            var t = this.getIndexFromCoords(x, y);
-            return (t !== -1) ? this.tilemap.tileTypes[ this._data[t] ] : null;
-        }
-
-        /**
-        * Returns the indexes of every tile of a type you pass. 
-        * @method getIndexsByType
-        * @param type {Number}
-        * @return {Number[]}
-        * @public
-        */
-        public getIndexesByType(type:number):number[] {
-            var tiles = [];
-            for (var i = 0; i < this._data.length; i++) {
-                if (this._data[i] == type) tiles.push(i);
-            }
-            return tiles;
-        }
-
-
-        /**
-        *-----------------------
-        * Tiles Manipulation
-        *-----------------------
-        */
-
-        /**
-        * Sets the tile to be used at the coordinates provided. 
-        * Can be used to override a tile that may already exist at the location.
-        * @method setTile
-        * @param x {Number} The coordinate of the tile on the x axis. 
-        * @param y {Number} The coordinate of the tile on the y axis.
-        * @param tileType {Number} The type of tile that should be now used.
-        * @return {Boolean} If a tile was changed or not.
-        * @public
-        */
-        public setTile(x: number, y: number, tileType:number):boolean {
-            var x = this.getIndexFromXY(x, y);
-
-            if (x !== -1) {
-                this._data[x] = tileType;
-                return true;
-            } 
-
-            return false;
-        }
-
-        /**
-        * Sets the tile to be used at the index provided.
-        * Can be used to override a tile that may already exist at the location.
-        * @method setTileByIndex
-        * @param index {Number} The index of the tile that you want to change.
-        * @param tileType {Number} The new tile type to be used at that position.
-        * @public
-        */
-        public setTileByIndex(index: number, tileType: number) {
-            this._data[index] = tileType;
-        }
-
-        /**
-        * Randomizes the types of tiles used in an area of the layer. You can choose which types of tiles to use, and the area.
-        * Default tile types used are everyone avaiable. 
-        * @method randomizeTiles
-        * @param [types] {Number[]} A list of TileTypes that can be used. Default is every tiletype on the TileMap.
-        * @param [x=0] {Number} The starting tile on the x axis to fill. 
-        * @param [y=0] {Number} The starting tile on the y axis to fill.
-        * @param [width=this.width] {Number} How far across you want to go.
-        * @param [height=this.height] {Number} How far down you want to go.
-        * @public
-        */
-        public randomizeTiles(types?: number[], x: number= 0, y: number= 0, width: number= this.width, height: number= this.height) {
-
-            if (types == undefined) {
-                types = [];
-                var i = 0;
-                while (i++ < this.tilemap.tileTypes.length) {
-                    types.push(i);
-                }
-            }
-
-            for (var j = y; j < y + height; j++) {
-                for (var i = x; i < x + width; i++) {
-
-                    var tile = this.getIndexFromXY(i, j);
-                    if (tile !== -1) this._data[tile] = this.game.rnd.pick(types);
-
-                }
-            }
-
-        }
-
-        /**
-        * Makes all of the tiles in the area specified a single type that is passed.
-        * @method fill
-        * @param type {Number} The type of tile you want to fill in the area with.
-        * @param [x=0] {Number} The starting tile on the x axis to fill. 
-        * @param [y=0] {Number} The starting tile on the y axis to fill.
-        * @param [width=this.width] {Number} How far across you want to go.
-        * @param [height=this.height] {Number} How far down you want to go.
-        * @public
-        */
-        public fill(type: number, x: number= 0, y: number= 0, width: number= this.width, height: number= this.height) {
-
-            for (var j = y; j < y + height; j++) {
-                for (var i = x; i < x + width; i++) {
-
-                    var tile = this.getIndexFromXY(i, j);
-                    if (tile !== -1) this._data[tile ] = type;
-
-                }
-            }
-
-        }
-
-        /**
-        * Replaces all tiles of typeA to typeB in the area specified. If no area is specified then it is on the whole layer.
-        * @method replaceTiles
-        * @param typeA {Number} The type of tile you want to be replaced.
-        * @param typeB {Number} The type of tile you want to be used instead.
-        * @param [x=0] {Number} The starting tile on the x axis to fill. 
-        * @param [y=0] {Number} The starting tile on the y axis to fill.
-        * @param [width=this.width] {Number} How far across you want to go.
-        * @param [height=this.height] {Number} How far down you want to go.
-        * @public
-        */
-        public replaceTiles(typeA: number, typeB: number, x:number=0, y:number=0, width:number=this.width,height:number=this.height) {
-
-            for (var j = y; j < y + height; j++) {
-                for (var i = x; i < x + width; i++) {
-
-                    var tile = this.getIndexFromXY(i, j);
-                    if (tile !== -1 && this._data[tile] == typeA) this._data[tile] = typeB; 
-
-                }
-            }
-
-        }
-
-        /**
-        * Swaps all the tiles that are typeA -> typeB and typeB -> typeA inside the area specified. If no area is specified then it is on the whole layer.
-        * @method swapTiles
-        * @param typeA {number} The type of tile you want to be replaced with typeB.
-        * @param typeB {number} The type of tile you want to be replaced with typeA.
-        * @param [x=0] {number} The starting tile on the x axis to fill. 
-        * @param [y=0] {number} The starting tile on the y axis to fill.
-        * @param [width=this.width] {number} How far across you want to go.
-        * @param [height=this.height] {number} How far down you want to go.
-        * @public
-        */
-        public swapTiles(typeA: number, typeB: number, x: number= 0, y: number= 0, width: number= this.width, height: number= this.height) {
-
-            for (var j = y; j < y + height; j++) {
-                for (var i = x; i < x + width; i++) {
-                    var tile = this.getIndexFromXY(i, j);
-
-                    if (tile !== -1) {
-                        if (this._data[tile] == typeA) this._data[tile] = typeB;
-                        else if (this._data[tile] == typeB) this._data[tile] = typeA;
-                    } 
-                }
-            }
-
-        }
-
-        /**
-        *-----------------------
-        * Get Tiles By Collision Methods
-        *-----------------------
-        */
-
-        /**
-        * Returns the tiles which overlap with a provided entities hitbox component. 
-        * Only collidable tiles on ANY side will be returned unless you pass a particular side.
-        * Note: Only designed to work with ORTHOGONAL types of tilemaps, results maybe unexpected for other types of tilemaps.
-        * 
-        * @method getOverlappingTiles
-        * @param entity {Kiwi.Entity} The entity you would like to check for the overlap.
-        * @param [collisionType=ANY] {Number} The particular type of collidable tiles which you would like to check for.
-        * @return {Object[]} Returns an Array of Objects containing information about the tiles which were found. Index/X/Y information is contained within each Object. 
-        * @public
-        */
-        public getOverlappingTiles(entity: Kiwi.Entity, collisionType: number= Kiwi.Components.ArcadePhysics.ANY): any {
-
-            //Do they have a box?
-            if (entity.components.hasComponent("Box") == false)
-                return [];
-
-            //Get the box off them
-            var b: Kiwi.Geom.Rectangle = entity.components.getComponent('Box').worldHitbox;
-
-            //Is the person within the map's bounds?    
-            if (b.left > this.transform.worldX + this.widthInPixels || b.right < this.transform.worldX || b.bottom < this.transform.worldY || b.top > this.transform.worldY + this.heightInPixels)
-                return [];
-
-            var worldX = this.transform.worldX;
-            var worldY = this.transform.worldY;
-
-            var nx = b.x - worldX;
-            var ny = b.y - worldY;
-
-            //Get starting location and now many tiles from there we will check. 
-            var x = Kiwi.Utils.GameMath.snapToFloor(nx, this.tileWidth) / this.tileWidth;
-            var y = Kiwi.Utils.GameMath.snapToFloor(ny, this.tileHeight) / this.tileHeight;
-            var w = Kiwi.Utils.GameMath.snapToCeil(b.width, this.tileWidth) / this.tileWidth;
-            var h = Kiwi.Utils.GameMath.snapToCeil(b.height, this.tileHeight) / this.tileHeight;
-
-            //Add one, because we want to include the very end tile.
-            var tiles = this.getCollidableTiles(x, y, w + 1, h + 1, collisionType);
-
-            //Loop through the tiles and make sure they are actually overlapping with the Entity.
-            for (var i = 0; i < tiles.length; i++) {
-                var t = tiles[i];
-
-                if (t.x + worldX > b.right || t.x + this.tileWidth + worldX < b.left || t.y + worldY > b.bottom || t.y + this.tileHeight + worldY < t.top) {
-                    tiles.splice(i, 1);
-                    i--;
-                } 
-            }
-
-            return tiles;
-
-        }
-
-
-        /**
-        * Returns the tiles which can collide with other objects (on ANY side unless otherwise specified) within an area provided.
-        * By default the area is the whole tilemap.
-        * 
-        * @method getCollidableTiles
-        * @param [x=0] {Number} The x coordinate of the first tile to check.
-        * @param [y=0] {Number} The y coordinate of the first tile to check.
-        * @param [width=widthOfMap] {Number} The width from the x coordinate.
-        * @param [height=heightOfmap] {Number} The height from the y coordinate.
-        * @param [collisionType=ANY] {Number} The type of collidable tiles that should be return. By default ANY type of collidable tiles will be returned. 
-        * @return {Object[]} Returns an Array of Objects containing information about the tiles which were found. Index/X/Y information is contained within each Object. 
-        * @public
-        */
-        public getCollidableTiles(x: number= 0, y: number= 0, width: number= this.width, height: number = this.height, collisionType: number= Kiwi.Components.ArcadePhysics.ANY): any {
-
-            var tiles = [];
-
-            //Make sure its within the map.
-            if (x > this.width || y > this.height) return; 
-
-            if (x < 0) x = 0;
-            if (y < 0) y = 0;
-
-            if (x + width > this.width) width = this.width - x;
-            if (y + height > this.height) height = this.height - y;
-
-            //Loop through and of the tiles.
-            for (var j = y; j < y + height; j++) {
-                for (var i = x; i < x + width; i++) {
-
-                    //Get the tile index.
-                    var index = this.getIndexFromXY(i, j);
-
-                    //Does that index exist? Should do but just in case.
-                    if (index === -1) continue;
-
-                    var type = this.tileData[index];
-
-                    //If the collision type matches the one passed. 
-                    if ((this.tilemap.tileTypes[type].allowCollisions & collisionType) !== Kiwi.Components.ArcadePhysics.NONE) {
-
-                        tiles.push({
-                            index: index,
-                            type: type,
-                            x: i * this.tileWidth,
-                            y: j * this.tileHeight
-                        });
-
-
-                    }
-
-                }
-            }
-
-            return tiles;
-        }
-
-
-        /**
-        * The update loop that is executed when this TileMapLayer is add to the Stage.
-        * @method update
-        * @public 
-        */
-        public update() {
-            super.update();
-
-        }
-        
-        /**
-        *-----------------------
-        * Temp Properties used During Rendering
-        *-----------------------
-        */
-
-        /**
-        * Used whilst rendering to calculate the number of tiles to be rendered on the X axis.
-        * Is updated each frame, via the _calculateBoundaries method.
-        * @property _maxX
-        * @type number
-        * @private
-        */
-        private _maxX: number;
-        
-        /**
-        * Used whilst rendering to calculate the number of tiles to be rendered on the Y axis.
-        * Is updated each frame, via the _calculateBoundaries method.
-        * @property _maxY
-        * @type number
-        * @private
-        */
-        private _maxY: number;
-
-        /**
-        * Used whilst rendering to calculate which is the first tile to be rendered on the X axis.
-        * Is updated each frame, via the _calculateBoundaries method.
-        * @property _startX
-        * @type number
-        * @private
-        */
-        private _startX: number;
-
-        /**
-        * Used whilst rendering to calculate which is the first tile to be rendered on the Y axis.
-        * Is updated each frame, via the _calculateBoundaries method.
-        * @property _startY
-        * @type number
-        * @private
-        */
-        private _startY: number;
-
-        /**
-        * Temporary property that holds the tileType of the current tile being rendered.
-        * @property _temptype
-        * @type TileType
-        * @private
-        */
-        private _temptype: TileType;
-
-        /**
-        * Corner values used internally.
-        * @property corner1
-        * @type {Kiwi.Geom.Point}
-        * @private
-        * @since 1.1.0
-        */
-        private _corner1: Kiwi.Geom.Point;
-        /**
-        * Corner values used internally.
-        * @property corner2
-        * @type {Kiwi.Geom.Point}
-        * @private
-        * @since 1.1.0
-        */
-        private _corner2: Kiwi.Geom.Point;
-        /**
-        * Corner values used internally.
-        * @property corner3
-        * @type {Kiwi.Geom.Point}
-        * @private
-        * @since 1.1.0
-        */
-        private _corner3: Kiwi.Geom.Point;
-        /**
-        * Corner values used internally.
-        * @property corner4
-        * @type {Kiwi.Geom.Point}
-        * @private
-        * @since 1.1.0
-        */
-        private _corner4: Kiwi.Geom.Point;
-
-        /**
-        * Used to calculate the position of the tilemap on the stage as well as how many tiles can fit on the screen. 
-        * All coordinates calculated are stored as temporary properties (maxX/Y, startX/Y).
-        *
-        * @method _calculateBoundaries
-        * @param camera {Camera}
-        * @param matrix {Matrix} 
-        * @private
-        */
-        private _calculateBoundaries(camera: Kiwi.Camera, matrix: Kiwi.Geom.Matrix) {
-
-            //If we are calculating the coordinates for 'regular' then we can do that rather easy
-            if (this.orientation == ORTHOGONAL) {
-                // Account for camera and object transformation
-                // Initialise corners...
-                this._corner1.setTo(0, 0);
-                this._corner2.setTo(this.game.stage.width, 0);
-                this._corner3.setTo(this.game.stage.width, this.game.stage.height);
-                this._corner4.setTo(0, this.game.stage.height);
-                // Transform corners by camera...
-                this._corner1 = camera.transformPoint(this._corner1);
-                this._corner2 = camera.transformPoint(this._corner2);
-                this._corner3 = camera.transformPoint(this._corner3);
-                this._corner4 = camera.transformPoint(this._corner4);
-                // Transform corners by object...
-                var m = matrix.clone();
-                m.invert();
-                this._corner1 = m.transformPoint(this._corner1);
-                this._corner2 = m.transformPoint(this._corner2);
-                this._corner3 = m.transformPoint(this._corner3);
-                this._corner4 = m.transformPoint(this._corner4);
-                // Find min/max values in X and Y...
-                this._startX = Math.min(this._corner1.x, this._corner2.x, this._corner3.x, this._corner4.x);
-                this._startY = Math.min(this._corner1.y, this._corner2.y, this._corner3.y, this._corner4.y);
-                this._maxX = Math.max(this._corner1.x, this._corner2.x, this._corner3.x, this._corner4.x);
-                this._maxY = Math.max(this._corner1.y, this._corner2.y, this._corner3.y, this._corner4.y);
-                // Convert to tile units...
-                this._startX /= this.tileWidth;
-                this._startY /= this.tileHeight;
-                this._maxX /= this.tileWidth;
-                this._maxY /= this.tileHeight;
-                // Truncate units...
-                this._startX = Math.floor(this._startX);
-                this._startY = Math.floor(this._startY);
-                this._maxX = Math.ceil(this._maxX);
-                this._maxY = Math.ceil(this._maxY);
-                // Clamp values to tilemap range...
-                this._startX = Kiwi.Utils.GameMath.clamp(this._startX, this.width);
-                this._startY = Kiwi.Utils.GameMath.clamp(this._startY, this.height);
-                this._maxX = Kiwi.Utils.GameMath.clamp(this._maxX, this.width);
-                this._maxY = Kiwi.Utils.GameMath.clamp(this._maxY, this.height);
-
-                return;
-            } 
-
-            //Otherwise we can't *just yet* so render the whole lot
-            if (this.orientation == ISOMETRIC) {
-                this._startX = 0;
-                this._startY = 0;
-                this._maxX = this.width;
-                this._maxY = this.height;
-            }
-        }
-
-        /** 
-        * ChartToScreen maps a point in the game tile coordinates into screen pixel
-        * coordinates that indicate where the tile should be drawn.
-        * Note: This is for use in ISOMETRIC Tilemaps.
-        *
-        * @method chartToScreen
-        * @param chartPt {any} A Object containing x/y properties of the tile.
-        * @param tileW {Number} The width of the tile
-        * @param tileH {Number} The height of the tile
-        * @return {Object} With x/y properties of the location of the map onscreen.
-        * @public
-        */ 
-        public chartToScreen(chartPt:any, tileW:number, tileH:number):any {
-            return { x:chartPt.x * tileW - chartPt.y * tileW, 
-                y:chartPt.x * tileH / 2 + chartPt.y * tileH / 2 };
-        }
-
-        /**
-        * ScreenToChart maps a point in screen coordinates into the game tile chart
-        * coordinates for the tile on which the screen point falls on.
-        * This is for use in ISOMETRIC Tilemaps.
-        *
-        * @method screenToChart
-        * @param scrPt {any} An object containing x/y coordinates of the point on the screen you want to convert to tile coordinates.
-        * @param tileW {Number} The width of a single tile.
-        * @param tileH {Number} The height of a single tile.
-        * @return {Object} With x/y properties of the location of tile on the screen.
-        * @public
-        */
-        public screenToChart(scrPt:any, tileW:number, tileH:number):any {
-            var column = Math.floor(scrPt.x / tileW);
-            var row = Math.floor((scrPt.y - column * (tileH / 2)) / tileH);
-            return { x:column + row, y:row };
-        }
-        
-        /** 
-        * The render loop which is used when using the Canvas renderer.
-        * @method render
-        * @param camera {Camera}
-        * @public
-        */
-        public render(camera: Kiwi.Camera) {
-
-            //When not to render the map.
-            if (this.visible === false || this.alpha < 0.1 || this.exists === false) {
-                return;
-            }
-
-            //Get the context.
-            var ctx = this.game.stage.ctx;
-            ctx.save();
-
-            //Make the map alphed out.
-            if (this.alpha > 0 && this.alpha <= 1) {
-                ctx.globalAlpha = this.alpha;
-            }
-
-            // Transform
-            var t: Kiwi.Geom.Transform = this.transform;
-            var m: Kiwi.Geom.Matrix = t.getConcatenatedMatrix();
-
-            ctx.transform(m.a, m.b, m.c, m.d, m.tx, m.ty);
-
-            this._calculateBoundaries(camera, m);
-            
-            for (var y = this._startY; y < this._maxY; y++) {
-                for (var x = this._startX; x < this._maxX; x++) {
-
-                    if ( (this._temptype = this.getTileFromXY(x, y)) && this._temptype.cellIndex !== -1 ) {
-
-                        var cell = this.atlas.cells[this._temptype.cellIndex];
-                        
-                        var drawX:number;
-                        var drawY:number;
-                        
-                        if (this.orientation == ISOMETRIC) {
-
-                            // Isometric maps
-                            
-                            var offsetX = this._temptype.offset.x;
-                            var offsetY = this._temptype.offset.y;
-                            var w = this.tileWidth * (this.width * 2 - 1 );
-                            var h = this.tileHeight * this.height;
-
-                            // We want <0,0>'s horizontal center point to be in the screen center, hence the -tileWidth/2.
-                            var shiftX = this.tileWidth / 2;
-
-                            var screenPos = this.chartToScreen( 
-                                { x:x , y:y }, 
-                                this.tileWidth/2, 
-                                this.tileHeight);
-
-                            drawX = screenPos.x + this._temptype.offset.x - shiftX;
-                            drawY = screenPos.y - (cell.h - this.tileHeight) + this._temptype.offset.y;
-
-                        } else {
-                            
-                            // Orthogonal maps
-
-                            drawX = x * this.tileWidth + this._temptype.offset.x;
-                            drawY = y * this.tileHeight - (cell.h - this.tileHeight) + this._temptype.offset.y;
-
-                        }
-                        
-                        ctx.drawImage(
-                            this.atlas.image,
-                            cell.x,
-                            cell.y,
-                            cell.w,
-                            cell.h,
-                            drawX,
-                            drawY,
-                            cell.w,
-                            cell.h
-                            );
-
-                    }
-
-
-                }
-            }
-
-
-            ctx.restore();
-            return true;
-        }
-
-        public renderGL(gl: WebGLRenderingContext, camera: Kiwi.Camera, params: any = null) {
-
-            //Setup
-            var vertexItems = [];
-            
-            //Create the point objects.
-            var pt1 = new Kiwi.Geom.Point();
-            var pt2 = new Kiwi.Geom.Point();
-            var pt3 = new Kiwi.Geom.Point();
-            var pt4 = new Kiwi.Geom.Point();
-
-            //Transform/Matrix
-            var t: Kiwi.Geom.Transform = this.transform;
-            var m: Kiwi.Geom.Matrix = t.getConcatenatedMatrix(); 
-
-
-            //Find which ones we need to render.
-            this._calculateBoundaries(camera, m);
-
-            //Loop through the tiles.
-            for (var y = this._startY; y < this._maxY; y++) {
-                for (var x = this._startX; x < this._maxX; x++) {
-                    
-
-                    //Get the tile type
-                    this._temptype = this.getTileFromXY(x, y);
-
-
-                    //Skip tiletypes that don't use a cellIndex.
-                    if (this._temptype.cellIndex == -1) continue;
-
-                    
-                    //Get the cell index
-                    var cell = this.atlas.cells[this._temptype.cellIndex];
-                    
-                    var tx;
-                    var ty;
-
-                    if (this.orientation == ISOMETRIC) {
-
-                        // Isometric maps
-                        var offsetX = this._temptype.offset.x;
-                        var offsetY = this._temptype.offset.y;
-                        var w = this.tileWidth * (this.width * 2 - 1);
-                        var h = this.tileHeight * this.height;
-                        
-                        // We want <0,0>'s horizontal center point to be in the screen center, hence the -tileWidth/2.
-                        var shiftX = this.tileWidth / 2;
-
-                        var screenPos = this.chartToScreen( 
-                            { x:x , y:y }, 
-                            this.tileWidth / 2, 
-                            this.tileHeight);
-
-                        tx = screenPos.x + this._temptype.offset.x - shiftX;
-                        ty = screenPos.y + this._temptype.offset.y;
+	/**
+	* GameObject that contains the information held for a single Layer of Tiles, along with methods to handle the rendering of those Tiles. 
+	* A TileMapLayer should not be directly created, but instead should be created through a TileMap object instead.
+	* 
+	* @class TileMapLayer
+	* @extends Kiwi.Entity
+	* @namespace Kiwi.GameObjects.Tilemap
+	* @constructor
+	* @param tilemap {Kiwi.GameObjects.Tilemap.TileMap} The TileMap that this layer belongs to.
+	* @param name {String} The name of this TileMapLayer.
+	* @param atlas {Kiwi.Textures.TextureAtlas} The texture atlas that should be used when rendering this TileMapLayer onscreen.
+	* @param data {Number[]} The information about the tiles.
+	* @param tw {Number} The width of a single tile in pixels. Usually the same as the TileMap unless told otherwise.
+	* @param th {Number} The height of a single tile in pixels. Usually the same as the TileMap unless told otherwise.
+	* @param [x=0] {Number} The x coordinate of the tilemap in pixels.
+	* @param [y=0] {Number} The y coordinate of the tilemap in pixels.
+	* @param [w=0] {Number} The width of the whole tilemap in tiles. Usually the same as the TileMap unless told otherwise.
+	* @param [h=0] {Number} The height of the whole tilemap in tiles. Usually the same as the TileMap unless told otherwise.
+	* @return {TileMapLayer}
+	*/
+	export class TileMapLayer extends Kiwi.Entity {
+
+		constructor(tilemap: Kiwi.GameObjects.Tilemap.TileMap, name: string, atlas: Kiwi.Textures.TextureAtlas, data: number[], tw: number, th: number, x: number= 0, y: number= 0, w:number=0, h:number=0) {
+			super(tilemap.state, x, y);
+
+			//Request the Shared Texture Atlas renderer.
+			if (this.game.renderOption === Kiwi.RENDERER_WEBGL) {
+				this.glRenderer = this.game.renderer.requestSharedRenderer("TextureAtlasRenderer");
+			}
+
+			this.name = name;
+			this.atlas = atlas;
+			this.tilemap = tilemap;
+			this._data = data;
+			this.tileWidth = tw;
+			this.tileHeight = th;
+			this.width = w;
+			this.height = h;
+
+			this._corner1 = new Kiwi.Geom.Point(0,0);
+			this._corner2 = new Kiwi.Geom.Point(0,0);
+			this._corner3 = new Kiwi.Geom.Point(0,0);
+			this._corner4 = new Kiwi.Geom.Point(0,0);
+
+			this.physics = this.components.add(new Kiwi.Components.ArcadePhysics(this, null));
+			this.physics.immovable = true;
+		}
+
+		/**
+		* The physics component contained on the Tilemap. Use for basic collisions between People and Tiles.
+		* Note: That tilemap layers a immovable and collisions with tiles are set on the individual TileTypes that are contained on the TileMap. 
+		* @property physics
+		* @type ArcadePhysics
+		* @public
+		*/
+		public physics: Kiwi.Components.ArcadePhysics;
+
+		/**
+		* Returns the type of child that this is. 
+		* @type Number
+		* @return {Number} returns the type of child that the entity is
+		* @public
+		*/
+		public childType(): number {
+			return Kiwi.TILE_LAYER;
+		}
+
+		/**
+		* The type of object that it is.
+		* @method objType
+		* @return {String} "TileMapLayer"
+		* @public
+		*/
+		public objType() {
+			return "TileMapLayer";
+		}
+
+		/**
+		* The tilemap that this TileMapLayer is a part of.
+		* @property tilemap
+		* @type TileMap
+		* @public
+		*/
+		public tilemap: Kiwi.GameObjects.Tilemap.TileMap;
+
+		/**
+		* Properties about that this TileMapLayer has when it was created from a JSON file.
+		* @property properties
+		* @type Object
+		* @public
+		*/
+		public properties: any = {};
+
+		/**
+		* The width of this TileMap in tiles.
+		* @property width
+		* @type Number
+		* @public
+		*/
+		public width: number;
+
+		/**
+		* The height of this TileMap in tiles.
+		* @property height
+		* @type Number
+		* @public
+		*/
+		public height: number;
+
+		/**
+		* The width of a single tile.
+		* @property tileWidth
+		* @type Number
+		* @public
+		*/
+		public tileWidth: number;
+
+		/**
+		* The height of a single tile.
+		* @property tileHeight
+		* @type Number
+		* @public
+		*/
+		public tileHeight: number;
+
+		/**
+		* The texture atlas that should be used when rendering.
+		* @property atlas
+		* @type Kiwi.Textures.TextureAtlas
+		* @public
+		*/
+		public atlas: Kiwi.Textures.TextureAtlas;
+
+		/**
+		* The width of the layer in pixels. This property is READ ONLY.
+		* @property widthInPixels
+		* @type number
+		* @public
+		*/
+		public get widthInPixels(): number {
+			return this.width * this.tilemap.tileWidth;
+		}
+
+		/**
+		* The height of the layer in pixels. This property is READ ONLY.
+		* @property heightInPixels
+		* @type number
+		* @public
+		*/
+		public get heightInPixels(): number {
+			return this.height * this.tilemap.tileHeight;
+		}
+
+		/**
+		* Override function to prevent unwanted inherited behaviour. Do not call.
+		*
+		* Because TileMapLayer extends Entity, it has a cellIndex parameter. However, it does not use a single atlas index, so this parameter is meaningless. It has deliberately been set to do nothing.
+		* @property cellIndex
+		* @type number
+		* @public
+		* @deprecated Not functional on this object.
+		* @since 1.1.0
+		*/
+		public get cellIndex():number {
+			return null;
+		}
+		public set cellIndex( val: number ) {}
+
+		// Methods altered because TileMapLayer has its own width and height properties:
+		public scaleToWidth(value: number) {
+			this.scale = value / this.widthInPixels;
+		}
+		public scaleToHeight(value: number) {
+			this.scale = value / this.heightInPixels;
+		}
+		public centerAnchorPoint() {
+			this.anchorPointX = this.widthInPixels * 0.5;
+			this.anchorPointY = this.heightInPixels * 0.5;
+		}
+
+		/**
+		* A list containing all the types of tiles found on this TileMapLayer.
+		* @property _data
+		* @type number[]
+		* @private
+		*/
+		private _data: number[];
+
+		/**
+		* Returns the total number of tiles. Either for a particular type if passed, otherwise of any type if not passed.
+		* @method countTiles
+		* @param [type] {Number} The type of tile you want to count.
+		* @return {Number} The number of tiles on this layer.
+		* @public
+		*/
+		public countTiles(type?:number):number {
+
+			var cnt = 0;
+
+			for (var i = 0; i < this._data.length; i++) {
+				if (type == undefined && this._data[i] !== 0) cnt++;
+				else if (type === this._data[i]) cnt++; 
+			}
+
+			return cnt;
+		}
+
+		/**
+		* The orientation of the of tilemap. 
+		* TileMaps can be either 'orthogonal' (normal) or 'isometric'.
+		* @property orientation
+		* @type String
+		* @default 'orthogonal'
+		* @public
+		*/
+		public orientation: string = ORTHOGONAL;
+
+
+		/**
+		*-----------------------
+		* Getting Tiles
+		*-----------------------
+		*/
+
+
+		/**
+		* A list containing all of the types of tiles found on this TileMapLayer. This is READ ONLY.
+		* @property tileData
+		* @type number[]
+		* @public
+		*/
+		public get tileData(): number[] {
+			return this._data;
+		}
+
+		/**
+		* Returns the index of the tile based on the x and y coordinates of the tile passed. 
+		* If no tile is a the coordinates given then -1 is returned instead.
+		* Coordinates are in tiles not pixels.
+		* @method getIndexFromXY
+		* @param x {Number} The x coordinate of the Tile you would like to retrieve. 
+		* @param y {Number} The y coordinate of the Tile you would like to retrieve.
+		* @return {Number} Either the index of the tile retrieved or -1 if none was found.
+		* @public
+		*/
+		public getIndexFromXY(x: number, y: number): number {
+			var num = x + y * this.width;
+
+			//Does the index exist?
+			if (num < 0 || num >= this._data.length) return -1;
+			else return num;
+		}
+
+		/**
+		* Returns the TileType for a tile that is at a particular set of coordinates passed. 
+		* If no tile is found the null is returned instead.
+		* Coordinates passed are in tiles.
+		* @method getTileFromXY
+		* @param x {Number}
+		* @param y {Number}
+		* @return {Number} The tile
+		* @public
+		*/
+		public getTileFromXY(x: number, y: number): TileType {
+			var t = this.getIndexFromXY(x, y);
+			return (t !== -1) ? this.tilemap.tileTypes[ this._data[t] ] : null;
+		}
+
+		/**
+		* Returns the index of the tile based on the x and y pixel coordinates that are passed. 
+		* If no tile is a the coordinates given then -1 is returned instead.
+		* Coordinates are in pixels not tiles and use the world coordinates of the tilemap.
+		* Note: Currently only working for ORTHOGONAL TileMaps.
+		*
+		* @method getIndexFromCoords
+		* @param x {Number} The x coordinate of the Tile you would like to retrieve. 
+		* @param y {Number} The y coordinate of the Tile you would like to retrieve.
+		* @return {Number} Either the index of the tile retrieved or -1 if none was found.
+		* @public
+		*/
+		public getIndexFromCoords(x: number, y: number): number {
+
+			//Not with the bounds?
+			if (x > this.transform.worldX + this.widthInPixels || y > this.transform.worldY + this.heightInPixels || x < this.transform.worldX || y < this.transform.worldY)
+				return -1;
+
+			//Is so get the tile
+			var tx = Kiwi.Utils.GameMath.snapToFloor(x - this.transform.worldX, this.tileWidth) / this.tileWidth;
+			var ty = Kiwi.Utils.GameMath.snapToFloor(y - this.transform.worldY, this.tileHeight) / this.tileHeight;
+
+			return this.getIndexFromXY(tx, ty);
+
+		}
+
+		/**
+		* Returns the TileType for a tile that is at a particular coordinate passed. 
+		* If no tile is found then null is returned instead.
+		* Coordinates passed are in pixels and use the world coordinates of the tilemap.
+		* Note: Currently only working for ORTHOGONAL TileMaps.
+		* 
+		* @method getTileFromCoords
+		* @param x {Number}
+		* @param y {Number}
+		* @return {Number} The tile
+		* @public
+		*/
+		public getTileFromCoords(x: number, y: number): TileType {
+			var t = this.getIndexFromCoords(x, y);
+			return (t !== -1) ? this.tilemap.tileTypes[ this._data[t] ] : null;
+		}
+
+		/**
+		* Returns the indexes of every tile of a type you pass. 
+		* @method getIndexsByType
+		* @param type {Number}
+		* @return {Number[]}
+		* @public
+		*/
+		public getIndexesByType(type:number):number[] {
+			var tiles = [];
+			for (var i = 0; i < this._data.length; i++) {
+				if (this._data[i] == type) tiles.push(i);
+			}
+			return tiles;
+		}
+
+
+		/**
+		*-----------------------
+		* Tiles Manipulation
+		*-----------------------
+		*/
+
+		/**
+		* Sets the tile to be used at the coordinates provided. 
+		* Can be used to override a tile that may already exist at the location.
+		* @method setTile
+		* @param x {Number} The coordinate of the tile on the x axis. 
+		* @param y {Number} The coordinate of the tile on the y axis.
+		* @param tileType {Number} The type of tile that should be now used.
+		* @return {Boolean} If a tile was changed or not.
+		* @public
+		*/
+		public setTile(x: number, y: number, tileType:number):boolean {
+			var x = this.getIndexFromXY(x, y);
+
+			if (x !== -1) {
+				this._data[x] = tileType;
+				return true;
+			} 
+
+			return false;
+		}
+
+		/**
+		* Sets the tile to be used at the index provided.
+		* Can be used to override a tile that may already exist at the location.
+		* @method setTileByIndex
+		* @param index {Number} The index of the tile that you want to change.
+		* @param tileType {Number} The new tile type to be used at that position.
+		* @public
+		*/
+		public setTileByIndex(index: number, tileType: number) {
+			this._data[index] = tileType;
+		}
+
+		/**
+		* Randomizes the types of tiles used in an area of the layer. You can choose which types of tiles to use, and the area.
+		* Default tile types used are everyone avaiable. 
+		* @method randomizeTiles
+		* @param [types] {Number[]} A list of TileTypes that can be used. Default is every tiletype on the TileMap.
+		* @param [x=0] {Number} The starting tile on the x axis to fill. 
+		* @param [y=0] {Number} The starting tile on the y axis to fill.
+		* @param [width=this.width] {Number} How far across you want to go.
+		* @param [height=this.height] {Number} How far down you want to go.
+		* @public
+		*/
+		public randomizeTiles(types?: number[], x: number= 0, y: number= 0, width: number= this.width, height: number= this.height) {
+
+			if (types == undefined) {
+				types = [];
+				var i = 0;
+				while (i++ < this.tilemap.tileTypes.length) {
+					types.push(i);
+				}
+			}
+
+			for (var j = y; j < y + height; j++) {
+				for (var i = x; i < x + width; i++) {
+
+					var tile = this.getIndexFromXY(i, j);
+					if (tile !== -1) this._data[tile] = this.game.rnd.pick(types);
+
+				}
+			}
+
+		}
+
+		/**
+		* Makes all of the tiles in the area specified a single type that is passed.
+		* @method fill
+		* @param type {Number} The type of tile you want to fill in the area with.
+		* @param [x=0] {Number} The starting tile on the x axis to fill. 
+		* @param [y=0] {Number} The starting tile on the y axis to fill.
+		* @param [width=this.width] {Number} How far across you want to go.
+		* @param [height=this.height] {Number} How far down you want to go.
+		* @public
+		*/
+		public fill(type: number, x: number= 0, y: number= 0, width: number= this.width, height: number= this.height) {
+
+			for (var j = y; j < y + height; j++) {
+				for (var i = x; i < x + width; i++) {
+
+					var tile = this.getIndexFromXY(i, j);
+					if (tile !== -1) this._data[tile ] = type;
+
+				}
+			}
+
+		}
+
+		/**
+		* Replaces all tiles of typeA to typeB in the area specified. If no area is specified then it is on the whole layer.
+		* @method replaceTiles
+		* @param typeA {Number} The type of tile you want to be replaced.
+		* @param typeB {Number} The type of tile you want to be used instead.
+		* @param [x=0] {Number} The starting tile on the x axis to fill. 
+		* @param [y=0] {Number} The starting tile on the y axis to fill.
+		* @param [width=this.width] {Number} How far across you want to go.
+		* @param [height=this.height] {Number} How far down you want to go.
+		* @public
+		*/
+		public replaceTiles(typeA: number, typeB: number, x:number=0, y:number=0, width:number=this.width,height:number=this.height) {
+
+			for (var j = y; j < y + height; j++) {
+				for (var i = x; i < x + width; i++) {
+
+					var tile = this.getIndexFromXY(i, j);
+					if (tile !== -1 && this._data[tile] == typeA) this._data[tile] = typeB; 
+
+				}
+			}
+
+		}
+
+		/**
+		* Swaps all the tiles that are typeA -> typeB and typeB -> typeA inside the area specified. If no area is specified then it is on the whole layer.
+		* @method swapTiles
+		* @param typeA {number} The type of tile you want to be replaced with typeB.
+		* @param typeB {number} The type of tile you want to be replaced with typeA.
+		* @param [x=0] {number} The starting tile on the x axis to fill. 
+		* @param [y=0] {number} The starting tile on the y axis to fill.
+		* @param [width=this.width] {number} How far across you want to go.
+		* @param [height=this.height] {number} How far down you want to go.
+		* @public
+		*/
+		public swapTiles(typeA: number, typeB: number, x: number= 0, y: number= 0, width: number= this.width, height: number= this.height) {
+
+			for (var j = y; j < y + height; j++) {
+				for (var i = x; i < x + width; i++) {
+					var tile = this.getIndexFromXY(i, j);
+
+					if (tile !== -1) {
+						if (this._data[tile] == typeA) this._data[tile] = typeB;
+						else if (this._data[tile] == typeB) this._data[tile] = typeA;
+					} 
+				}
+			}
+
+		}
+
+		/**
+		*-----------------------
+		* Get Tiles By Collision Methods
+		*-----------------------
+		*/
+
+		/**
+		* Returns the tiles which overlap with a provided entities hitbox component. 
+		* Only collidable tiles on ANY side will be returned unless you pass a particular side.
+		* Note: Only designed to work with ORTHOGONAL types of tilemaps, results maybe unexpected for other types of tilemaps.
+		* 
+		* @method getOverlappingTiles
+		* @param entity {Kiwi.Entity} The entity you would like to check for the overlap.
+		* @param [collisionType=ANY] {Number} The particular type of collidable tiles which you would like to check for.
+		* @return {Object[]} Returns an Array of Objects containing information about the tiles which were found. Index/X/Y information is contained within each Object. 
+		* @public
+		*/
+		public getOverlappingTiles(entity: Kiwi.Entity, collisionType: number= Kiwi.Components.ArcadePhysics.ANY): any {
+
+			//Do they have a box?
+			if (entity.components.hasComponent("Box") == false)
+				return [];
+
+			//Get the box off them
+			var b: Kiwi.Geom.Rectangle = entity.components.getComponent('Box').worldHitbox;
+
+			//Is the person within the map's bounds?    
+			if (b.left > this.transform.worldX + this.widthInPixels || b.right < this.transform.worldX || b.bottom < this.transform.worldY || b.top > this.transform.worldY + this.heightInPixels)
+				return [];
+
+			var worldX = this.transform.worldX;
+			var worldY = this.transform.worldY;
+
+			var nx = b.x - worldX;
+			var ny = b.y - worldY;
+
+			//Get starting location and now many tiles from there we will check. 
+			var x = Kiwi.Utils.GameMath.snapToFloor(nx, this.tileWidth) / this.tileWidth;
+			var y = Kiwi.Utils.GameMath.snapToFloor(ny, this.tileHeight) / this.tileHeight;
+			var w = Kiwi.Utils.GameMath.snapToCeil(b.width, this.tileWidth) / this.tileWidth;
+			var h = Kiwi.Utils.GameMath.snapToCeil(b.height, this.tileHeight) / this.tileHeight;
+
+			//Add one, because we want to include the very end tile.
+			var tiles = this.getCollidableTiles(x, y, w + 1, h + 1, collisionType);
+
+			//Loop through the tiles and make sure they are actually overlapping with the Entity.
+			for (var i = 0; i < tiles.length; i++) {
+				var t = tiles[i];
+
+				if (t.x + worldX > b.right || t.x + this.tileWidth + worldX < b.left || t.y + worldY > b.bottom || t.y + this.tileHeight + worldY < t.top) {
+					tiles.splice(i, 1);
+					i--;
+				} 
+			}
+
+			return tiles;
+
+		}
+
+
+		/**
+		* Returns the tiles which can collide with other objects (on ANY side unless otherwise specified) within an area provided.
+		* By default the area is the whole tilemap.
+		* 
+		* @method getCollidableTiles
+		* @param [x=0] {Number} The x coordinate of the first tile to check.
+		* @param [y=0] {Number} The y coordinate of the first tile to check.
+		* @param [width=widthOfMap] {Number} The width from the x coordinate.
+		* @param [height=heightOfmap] {Number} The height from the y coordinate.
+		* @param [collisionType=ANY] {Number} The type of collidable tiles that should be return. By default ANY type of collidable tiles will be returned. 
+		* @return {Object[]} Returns an Array of Objects containing information about the tiles which were found. Index/X/Y information is contained within each Object. 
+		* @public
+		*/
+		public getCollidableTiles(x: number= 0, y: number= 0, width: number= this.width, height: number = this.height, collisionType: number= Kiwi.Components.ArcadePhysics.ANY): any {
+
+			var tiles = [];
+
+			//Make sure its within the map.
+			if (x > this.width || y > this.height) return; 
+
+			if (x < 0) x = 0;
+			if (y < 0) y = 0;
+
+			if (x + width > this.width) width = this.width - x;
+			if (y + height > this.height) height = this.height - y;
+
+			//Loop through and of the tiles.
+			for (var j = y; j < y + height; j++) {
+				for (var i = x; i < x + width; i++) {
+
+					//Get the tile index.
+					var index = this.getIndexFromXY(i, j);
+
+					//Does that index exist? Should do but just in case.
+					if (index === -1) continue;
+
+					var type = this.tileData[index];
+
+					//If the collision type matches the one passed. 
+					if ((this.tilemap.tileTypes[type].allowCollisions & collisionType) !== Kiwi.Components.ArcadePhysics.NONE) {
+
+						tiles.push({
+							index: index,
+							type: type,
+							x: i * this.tileWidth,
+							y: j * this.tileHeight
+						});
+
+
+					}
+
+				}
+			}
+
+			return tiles;
+		}
+
+
+		/**
+		* The update loop that is executed when this TileMapLayer is add to the Stage.
+		* @method update
+		* @public 
+		*/
+		public update() {
+			super.update();
+		}
+
+		/**
+		*-----------------------
+		* Temp Properties used During Rendering
+		*-----------------------
+		*/
+
+		/**
+		* Used whilst rendering to calculate the number of tiles to be rendered on the X axis.
+		* Is updated each frame, via the _calculateBoundaries method.
+		* @property _maxX
+		* @type number
+		* @private
+		*/
+		private _maxX: number;
+
+		/**
+		* Used whilst rendering to calculate the number of tiles to be rendered on the Y axis.
+		* Is updated each frame, via the _calculateBoundaries method.
+		* @property _maxY
+		* @type number
+		* @private
+		*/
+		private _maxY: number;
+
+		/**
+		* Used whilst rendering to calculate which is the first tile to be rendered on the X axis.
+		* Is updated each frame, via the _calculateBoundaries method.
+		* @property _startX
+		* @type number
+		* @private
+		*/
+		private _startX: number;
+
+		/**
+		* Used whilst rendering to calculate which is the first tile to be rendered on the Y axis.
+		* Is updated each frame, via the _calculateBoundaries method.
+		* @property _startY
+		* @type number
+		* @private
+		*/
+		private _startY: number;
+
+		/**
+		* Temporary property that holds the tileType of the current tile being rendered.
+		* @property _temptype
+		* @type TileType
+		* @private
+		*/
+		private _temptype: TileType;
+
+		/**
+		* Corner values used internally.
+		* @property corner1
+		* @type {Kiwi.Geom.Point}
+		* @private
+		* @since 1.1.0
+		*/
+		private _corner1: Kiwi.Geom.Point;
+		/**
+		* Corner values used internally.
+		* @property corner2
+		* @type {Kiwi.Geom.Point}
+		* @private
+		* @since 1.1.0
+		*/
+		private _corner2: Kiwi.Geom.Point;
+		/**
+		* Corner values used internally.
+		* @property corner3
+		* @type {Kiwi.Geom.Point}
+		* @private
+		* @since 1.1.0
+		*/
+		private _corner3: Kiwi.Geom.Point;
+		/**
+		* Corner values used internally.
+		* @property corner4
+		* @type {Kiwi.Geom.Point}
+		* @private
+		* @since 1.1.0
+		*/
+		private _corner4: Kiwi.Geom.Point;
+
+		/**
+		* Used to calculate the position of the tilemap on the stage as well as how many tiles can fit on the screen. 
+		* All coordinates calculated are stored as temporary properties (maxX/Y, startX/Y).
+		*
+		* @method _calculateBoundaries
+		* @param camera {Camera}
+		* @param matrix {Matrix} 
+		* @private
+		*/
+		private _calculateBoundaries(camera: Kiwi.Camera, matrix: Kiwi.Geom.Matrix) {
+
+			//If we are calculating the coordinates for 'regular' then we can do that rather easy
+			if (this.orientation == ORTHOGONAL) {
+				// Account for camera and object transformation
+				// Initialise corners...
+				this._corner1.setTo(0, 0);
+				this._corner2.setTo(this.game.stage.width, 0);
+				this._corner3.setTo(this.game.stage.width, this.game.stage.height);
+				this._corner4.setTo(0, this.game.stage.height);
+				// Transform corners by camera...
+				this._corner1 = camera.transformPoint(this._corner1);
+				this._corner2 = camera.transformPoint(this._corner2);
+				this._corner3 = camera.transformPoint(this._corner3);
+				this._corner4 = camera.transformPoint(this._corner4);
+				// Transform corners by object...
+				var m = matrix.clone();
+				m.invert();
+				this._corner1 = m.transformPoint(this._corner1);
+				this._corner2 = m.transformPoint(this._corner2);
+				this._corner3 = m.transformPoint(this._corner3);
+				this._corner4 = m.transformPoint(this._corner4);
+				// Find min/max values in X and Y...
+				this._startX = Math.min(this._corner1.x, this._corner2.x, this._corner3.x, this._corner4.x);
+				this._startY = Math.min(this._corner1.y, this._corner2.y, this._corner3.y, this._corner4.y);
+				this._maxX = Math.max(this._corner1.x, this._corner2.x, this._corner3.x, this._corner4.x);
+				this._maxY = Math.max(this._corner1.y, this._corner2.y, this._corner3.y, this._corner4.y);
+				// Convert to tile units...
+				this._startX /= this.tileWidth;
+				this._startY /= this.tileHeight;
+				this._maxX /= this.tileWidth;
+				this._maxY /= this.tileHeight;
+				// Truncate units...
+				this._startX = Math.floor(this._startX);
+				this._startY = Math.floor(this._startY);
+				this._maxX = Math.ceil(this._maxX);
+				this._maxY = Math.ceil(this._maxY);
+				// Clamp values to tilemap range...
+				this._startX = Kiwi.Utils.GameMath.clamp(this._startX, this.width);
+				this._startY = Kiwi.Utils.GameMath.clamp(this._startY, this.height);
+				this._maxX = Kiwi.Utils.GameMath.clamp(this._maxX, this.width);
+				this._maxY = Kiwi.Utils.GameMath.clamp(this._maxY, this.height);
+
+				return;
+			}
+
+			//Otherwise we can't *just yet* so render the whole lot
+			if (this.orientation == ISOMETRIC) {
+				this._startX = 0;
+				this._startY = 0;
+				this._maxX = this.width;
+				this._maxY = this.height;
+			}
+		}
+
+		/** 
+		* ChartToScreen maps a point in the game tile coordinates into screen pixel
+		* coordinates that indicate where the tile should be drawn.
+		* Note: This is for use in ISOMETRIC Tilemaps.
+		*
+		* @method chartToScreen
+		* @param chartPt {any} A Object containing x/y properties of the tile.
+		* @param tileW {Number} The width of the tile
+		* @param tileH {Number} The height of the tile
+		* @return {Object} With x/y properties of the location of the map onscreen.
+		* @public
+		*/ 
+		public chartToScreen(chartPt:any, tileW:number, tileH:number):any {
+			return { x:chartPt.x * tileW - chartPt.y * tileW, 
+				y:chartPt.x * tileH / 2 + chartPt.y * tileH / 2 };
+		}
+
+		/**
+		* ScreenToChart maps a point in screen coordinates into the game tile chart
+		* coordinates for the tile on which the screen point falls on.
+		* This is for use in ISOMETRIC Tilemaps.
+		*
+		* @method screenToChart
+		* @param scrPt {any} An object containing x/y coordinates of the point on the screen you want to convert to tile coordinates.
+		* @param tileW {Number} The width of a single tile.
+		* @param tileH {Number} The height of a single tile.
+		* @return {Object} With x/y properties of the location of tile on the screen.
+		* @public
+		*/
+		public screenToChart(scrPt:any, tileW:number, tileH:number):any {
+			var column = Math.floor(scrPt.x / tileW);
+			var row = Math.floor((scrPt.y - column * (tileH / 2)) / tileH);
+			return { x:column + row, y:row };
+		}
+
+		/** 
+		* The render loop which is used when using the Canvas renderer.
+		* @method render
+		* @param camera {Camera}
+		* @public
+		*/
+		public render(camera: Kiwi.Camera) {
+
+			//When not to render the map.
+			if (this.visible === false || this.alpha < 0.1 || this.exists === false) {
+				return;
+			}
+
+			//Get the context.
+			var ctx = this.game.stage.ctx;
+			ctx.save();
+
+			//Make the map alphed out.
+			if (this.alpha > 0 && this.alpha <= 1) {
+				ctx.globalAlpha = this.alpha;
+			}
+
+			// Transform
+			var t: Kiwi.Geom.Transform = this.transform;
+			var m: Kiwi.Geom.Matrix = t.getConcatenatedMatrix();
+
+			ctx.transform(m.a, m.b, m.c, m.d, m.tx, m.ty);
+
+			this._calculateBoundaries(camera, m);
+			
+			for (var y = this._startY; y < this._maxY; y++) {
+				for (var x = this._startX; x < this._maxX; x++) {
+
+					if ( (this._temptype = this.getTileFromXY(x, y)) && this._temptype.cellIndex !== -1 ) {
+
+						var cell = this.atlas.cells[this._temptype.cellIndex];
+						
+						var drawX:number;
+						var drawY:number;
+						
+						if (this.orientation == ISOMETRIC) {
+
+							// Isometric maps
+							
+							var offsetX = this._temptype.offset.x;
+							var offsetY = this._temptype.offset.y;
+							var w = this.tileWidth * (this.width * 2 - 1 );
+							var h = this.tileHeight * this.height;
+
+							// We want <0,0>'s horizontal center point to be in the screen center, hence the -tileWidth/2.
+							var shiftX = this.tileWidth / 2;
+
+							var screenPos = this.chartToScreen( 
+								{ x:x , y:y }, 
+								this.tileWidth/2, 
+								this.tileHeight);
+
+							drawX = screenPos.x + this._temptype.offset.x - shiftX;
+							drawY = screenPos.y - (cell.h - this.tileHeight) + this._temptype.offset.y;
+
+						} else {
+							
+							// Orthogonal maps
+
+							drawX = x * this.tileWidth + this._temptype.offset.x;
+							drawY = y * this.tileHeight - (cell.h - this.tileHeight) + this._temptype.offset.y;
+
+						}
+						
+						ctx.drawImage(
+							this.atlas.image,
+							cell.x,
+							cell.y,
+							cell.w,
+							cell.h,
+							drawX,
+							drawY,
+							cell.w,
+							cell.h
+							);
+
+					}
+
+
+				}
+			}
+
+
+			ctx.restore();
+			return true;
+		}
+
+		public renderGL(gl: WebGLRenderingContext, camera: Kiwi.Camera, params: any = null) {
+
+			//Setup
+			var vertexItems = [];
+			
+			//Create the point objects.
+			var pt1 = new Kiwi.Geom.Point();
+			var pt2 = new Kiwi.Geom.Point();
+			var pt3 = new Kiwi.Geom.Point();
+			var pt4 = new Kiwi.Geom.Point();
+
+			//Transform/Matrix
+			var t: Kiwi.Geom.Transform = this.transform;
+			var m: Kiwi.Geom.Matrix = t.getConcatenatedMatrix(); 
+
 
-                    } else {
+			//Find which ones we need to render.
+			this._calculateBoundaries(camera, m);
+
+			//Loop through the tiles.
+			for (var y = this._startY; y < this._maxY; y++) {
+				for (var x = this._startX; x < this._maxX; x++) {
+					
+
+					//Get the tile type
+					this._temptype = this.getTileFromXY(x, y);
 
-                        // Orthogonal maps
-                        tx = x * this.tileWidth + this._temptype.offset.x;
-                        ty = y * this.tileHeight + this._temptype.offset.y;
 
-                    }
+					//Skip tiletypes that don't use a cellIndex.
+					if (this._temptype.cellIndex == -1) continue;
+
+					
+					//Get the cell index
+					var cell = this.atlas.cells[this._temptype.cellIndex];
+					
+					var tx;
+					var ty;
+
+					if (this.orientation == ISOMETRIC) {
 
-                    //Set up the points
-                    pt1.setTo(tx - t.rotPointX, ty - t.rotPointY - (cell.h - this.tileHeight));
-                    pt2.setTo(tx + cell.w - t.rotPointX, ty - t.rotPointY - (cell.h - this.tileHeight));
-                    pt3.setTo(tx + cell.w - t.rotPointX, ty + cell.h - t.rotPointY - (cell.h - this.tileHeight));
-                    pt4.setTo(tx - t.rotPointX, ty + cell.h - t.rotPointY - (cell.h - this.tileHeight));
+						// Isometric maps
+						var offsetX = this._temptype.offset.x;
+						var offsetY = this._temptype.offset.y;
+						var w = this.tileWidth * (this.width * 2 - 1);
+						var h = this.tileHeight * this.height;
+						
+						// We want <0,0>'s horizontal center point to be in the screen center, hence the -tileWidth/2.
+						var shiftX = this.tileWidth / 2;
 
+						var screenPos = this.chartToScreen( 
+							{ x:x , y:y }, 
+							this.tileWidth / 2, 
+							this.tileHeight);
 
-                    //Add on the matrix to the points
-                    pt1 = m.transformPoint(pt1);
-                    pt2 = m.transformPoint(pt2);
-                    pt3 = m.transformPoint(pt3);
-                    pt4 = m.transformPoint(pt4);
-
+						tx = screenPos.x + this._temptype.offset.x - shiftX;
+						ty = screenPos.y + this._temptype.offset.y;
 
-                    //Append to the xyuv array
-                    vertexItems.push(
-                        pt1.x + t.rotPointX, pt1.y + t.rotPointY, cell.x, cell.y, this.alpha,                   //Top Left Point
-                        pt2.x + t.rotPointX, pt2.y + t.rotPointY, cell.x + cell.w, cell.y, this.alpha,          //Top Right Point
-                        pt3.x + t.rotPointX, pt3.y + t.rotPointY, cell.x + cell.w, cell.y + cell.h, this.alpha, //Bottom Right Point
-                        pt4.x + t.rotPointX, pt4.y + t.rotPointY, cell.x, cell.y + cell.h, this.alpha           //Bottom Left Point
-                        );
-                    
+					} else {
 
-                    
-                }
-            }
-               
-            //Concat points to the Renderer.
-            (<Kiwi.Renderers.TextureAtlasRenderer>this.glRenderer).concatBatch(vertexItems);
-        }
+						// Orthogonal maps
+						tx = x * this.tileWidth + this._temptype.offset.x;
+						ty = y * this.tileHeight + this._temptype.offset.y;
 
-    }
+					}
+
+					//Set up the points
+					pt1.setTo(tx - t.rotPointX, ty - t.rotPointY - (cell.h - this.tileHeight));
+					pt2.setTo(tx + cell.w - t.rotPointX, ty - t.rotPointY - (cell.h - this.tileHeight));
+					pt3.setTo(tx + cell.w - t.rotPointX, ty + cell.h - t.rotPointY - (cell.h - this.tileHeight));
+					pt4.setTo(tx - t.rotPointX, ty + cell.h - t.rotPointY - (cell.h - this.tileHeight));
+
+
+					//Add on the matrix to the points
+					pt1 = m.transformPoint(pt1);
+					pt2 = m.transformPoint(pt2);
+					pt3 = m.transformPoint(pt3);
+					pt4 = m.transformPoint(pt4);
+
+
+					//Append to the xyuv array
+					vertexItems.push(
+						pt1.x + t.rotPointX, pt1.y + t.rotPointY, cell.x, cell.y, this.alpha,                   //Top Left Point
+						pt2.x + t.rotPointX, pt2.y + t.rotPointY, cell.x + cell.w, cell.y, this.alpha,          //Top Right Point
+						pt3.x + t.rotPointX, pt3.y + t.rotPointY, cell.x + cell.w, cell.y + cell.h, this.alpha, //Bottom Right Point
+						pt4.x + t.rotPointX, pt4.y + t.rotPointY, cell.x, cell.y + cell.h, this.alpha           //Bottom Left Point
+						);
+				}
+			}
+
+			//Concat points to the Renderer.
+			(<Kiwi.Renderers.TextureAtlasRenderer>this.glRenderer).concatBatch(vertexItems);
+		}
+
+	}
 }
diff --git a/src/gameobjects/tilemap/TileType.ts b/src/gameobjects/tilemap/TileType.ts
index 7104ffe..0ab51d8 100644
--- a/src/gameobjects/tilemap/TileType.ts
+++ b/src/gameobjects/tilemap/TileType.ts
@@ -7,95 +7,94 @@
 
 module Kiwi.GameObjects.Tilemap {
 
-    /**
-    * Define's the properties of a single Type of Tile for a TileMap. This class should not be directly instanted, 
-    * but instead when wanting to create new TileType's you should use the 'createdTileType' methods on a TileMap object.
-    * 
-    * @class TileType
-    * @namespace Kiwi.GameObjects.Tilemap
-    * @constructor
-    * @param tilemap {Kiwi.GameObjects.Tilemap.TileMap} The TileMap that this TileType is a part of.
-    * @param index {Number} The index of this TileType, which Tiles use when wanting to use this TileType.
-    * @param cellIndex {Number} The cell number to use when rendering this Type of Tile.
-    * @return {TileType} This TileType
-    * @public
-    */
-    export class TileType {
- 
-        constructor(tilemap: Kiwi.GameObjects.Tilemap.TileMap, index: number, cellIndex: number = -1) {
+	/**
+	* Define's the properties of a single Type of Tile for a TileMap. This class should not be directly instanted, 
+	* but instead when wanting to create new TileType's you should use the 'createdTileType' methods on a TileMap object.
+	* 
+	* @class TileType
+	* @namespace Kiwi.GameObjects.Tilemap
+	* @constructor
+	* @param tilemap {Kiwi.GameObjects.Tilemap.TileMap} The TileMap that this TileType is a part of.
+	* @param index {Number} The index of this TileType, which Tiles use when wanting to use this TileType.
+	* @param cellIndex {Number} The cell number to use when rendering this Type of Tile.
+	* @return {TileType} This TileType
+	* @public
+	*/
+	export class TileType {
 
-            this.tilemap = tilemap;
-            this.index = index;
-            this.cellIndex = cellIndex;
-            this.offset = new Kiwi.Geom.Point(0, 0);
-        
-        }
+		constructor(tilemap: Kiwi.GameObjects.Tilemap.TileMap, index: number, cellIndex: number = -1) {
 
-        /**
-        * The collision information for this type of tile. 
-        * It's values are the same as the Static properties inside of the ArcadePhysics Component. 
-        * @property allowCollisions
-        * @type number
-        * @default NONE
-        * @public
-        */
-        public allowCollisions: number = Kiwi.Components.ArcadePhysics.NONE;
+			this.tilemap = tilemap;
+			this.index = index;
+			this.cellIndex = cellIndex;
+			this.offset = new Kiwi.Geom.Point(0, 0);
+		}
 
-        /**
-        * The properties associated with this type of tile. 
-        * These are set when loading a JSON file that had properties associated with a TileType. 
-        * @property properties
-        * @type Object
-        * @public
-        */
-        public properties: any = {};
+		/**
+		* The collision information for this type of tile. 
+		* It's values are the same as the Static properties inside of the ArcadePhysics Component. 
+		* @property allowCollisions
+		* @type number
+		* @default NONE
+		* @public
+		*/
+		public allowCollisions: number = Kiwi.Components.ArcadePhysics.NONE;
 
-        /**
-        * The offset of this tile for rendering purposes. 
-        * Does not affect regular collision detection.
-        * 
-        * @property offset
-        * @type Kiwi.Geom.Point
-        * @public
-        */ 
-        public offset: Kiwi.Geom.Point;
-        
-        /**
-        * A reference to the tilemap this tile object belongs to.
-        * @property tilemap
-        * @type Kiwi.GameObjects.Tilemap.TileMap
-        * @public
-        */
-        public tilemap: Kiwi.GameObjects.Tilemap.TileMap;
+		/**
+		* The properties associated with this type of tile. 
+		* These are set when loading a JSON file that had properties associated with a TileType. 
+		* @property properties
+		* @type Object
+		* @public
+		*/
+		public properties: any = {};
 
-        /**
-        * The index of this tile type in the core map data.
-        * For example, if your map only has 16 different types of tiles in it, this will be one of those tiles and thus a number between 1 and 16.
-        * @property index
-        * @type Number
-        * @public
-        */
-        public index: number;
+		/**
+		* The offset of this tile for rendering purposes. 
+		* Does not affect regular collision detection.
+		* 
+		* @property offset
+		* @type Kiwi.Geom.Point
+		* @public
+		*/ 
+		public offset: Kiwi.Geom.Point;
 
-        /**
-        * A number relating to the cell that should be when rendering a Tile that uses this TileType.
-        * A cellIndex of -1 means this type of tile will not be rendered.
-        * @property cellIndex
-        * @type number
-        * @public
-        */
-        public cellIndex: number;
+		/**
+		* A reference to the tilemap this tile object belongs to.
+		* @property tilemap
+		* @type Kiwi.GameObjects.Tilemap.TileMap
+		* @public
+		*/
+		public tilemap: Kiwi.GameObjects.Tilemap.TileMap;
 
-        /**
-        * The type of object that it is.
-        * @method objType
-        * @return {String} "TileType"
-        * @public
-        */
-        public objType() {
-            return "TileType";
-        }
+		/**
+		* The index of this tile type in the core map data.
+		* For example, if your map only has 16 different types of tiles in it, this will be one of those tiles and thus a number between 1 and 16.
+		* @property index
+		* @type Number
+		* @public
+		*/
+		public index: number;
 
-    }
+		/**
+		* A number relating to the cell that should be when rendering a Tile that uses this TileType.
+		* A cellIndex of -1 means this type of tile will not be rendered.
+		* @property cellIndex
+		* @type number
+		* @public
+		*/
+		public cellIndex: number;
 
-}
\ No newline at end of file
+		/**
+		* The type of object that it is.
+		* @method objType
+		* @return {String} "TileType"
+		* @public
+		*/
+		public objType() {
+			return "TileType";
+		}
+
+	}
+
+}
diff --git a/src/geom/AABB.ts b/src/geom/AABB.ts
index 93901c3..4eada42 100644
--- a/src/geom/AABB.ts
+++ b/src/geom/AABB.ts
@@ -5,167 +5,167 @@
 * @submodule Geom
 * @main
 */
- 
+
 module Kiwi.Geom {
 
-    /**
-    * An object representation of an axis-aligned bounding box. 
-    * 
-    * @class AABB
-    * @namespace Kiwi.Geom
-    * @constructor
-    * @param cx {Number} The centeral position on the x-axis.
-    * @param cy {Number} The centeral position on the y-axis.
-    * @param width {Number} The width of the box.
-    * @param height {Number} The height of the box.
-    * @return {Kiwi.Geom.AABB}
-    */
-    export class AABB {
-
-        constructor(cx: number, cy: number, width: number, height: number) {
-            this.cx = cx || 0;
-            this.cy = cy || 0;
-            this.halfWidth = width / 2 || 0;
-            this.halfHeight = height / 2 || 0;
-        }
-
-
-        /**
-        * Returns the type of this object
-        * @method objType
-        * @return {String} "AABB"
-        * @public
-        */
-        public objType() {
-            return "AABB";
-        }
-
-        /**
-        * The centeral location of the box on the x-axis.
-        * @property cx
-        * @type Number
-        * @public
-        */
-        public cx: number = 0;
-
-        /**
-        * The centeral location of the box on the y-axis.
-        * @property cy
-        * @type Number
-        * @public
-        */
-        public cy: number = 0;
-
-        /**
-        * Half of the width.
-        * @property halfWidth
-        * @type Number
-        * @public
-        */
-        public halfWidth: number = 0;
-
-        /**
-        * Half of the height.
-        * @property halfHeight
-        * @type Number
-        * @public
-        */
-        public halfHeight: number = 0;
-
-        /**
-        * Returns the full height. This is read only.
-        * @property height
-        * @type number
-        * @readOnly
-        * @public
-        */
-        public get height():number {
-            return this.halfHeight * 2;
-        }
-
-        /**
-        * Returns the full width. This is read only.
-        * @property width
-        * @type number
-        * @readOnly
-        * @public
-        */
-        public get width():number {
-            return this.halfWidth * 2;
-        }
-
-        /**
-        * Draws the object to a canvas context passed. 
-        * @method draw
-        * @param ctx {CanvasRenderingContext2D} The context you want this drawn to.
-        * @return {Kiwi.Geom.AABB}
-        * @public
-        */
-        public draw(ctx: CanvasRenderingContext2D): AABB {
-            ctx.beginPath();
-            ctx.moveTo(this.cx - this.halfWidth, this.cy);
-            ctx.lineTo(this.cx + this.halfWidth, this.cy);
-            ctx.moveTo(this.cx, this.cy - this.halfHeight);
-            ctx.lineTo(this.cx, this.cy + this.halfHeight);
-            ctx.stroke();
-            return this;
-        }
-
-        /**
-        * Sets the position of the object.
-        * @method setPosition
-        * @param cx {Number} Its new x-axis location.
-        * @param cy {Number} Its new y-axis location.
-        * @return {Kiwi.Geom.AABB}
-        * @public
-        */
-        public setPosition(cx: number, cy: number): AABB {
-            this.cx = cx;
-            this.cy = cy;
-            return this;
-        }
-
-        /**
-        * Sets the position of the object by a point that you pass.
-        * 
-        * @method setPositionPoint
-        * @param pos {Kiwi.Geom.Point} 
-        * @return {Kiwi.Geom.AABB}
-        * @public
-        */
-        public setPositionPoint(pos: Point): AABB {
-            this.cx = pos.x;
-            this.cy = pos.y;
-            return this;
-        }
-
-        /**
-        * Returns this object but as a new Rectangle.
-        * 
-        * @method toRect
-        * @return {Kiwi.Geom.Rectangle}
-        * @public
-        */
-        public toRect(): Rectangle {
-            return new Rectangle(this.cx - this.halfWidth, this.cy - this.halfHeight, this.halfWidth * 2, this.halfHeight * 2);
-        }
-
-        /**
-        * Gives the dimension of this AABB from a rectangle's.
-        * @method fromRect
-        * @param {Kiwi.Geom.Rectangle} rect
-        * @return {Kiwi.Geom.AABB}
-        * @public
-        */
-        public fromRect(rect: Rectangle): AABB {
-            this.halfWidth = rect.width / 2;
-            this.halfHeight = rect.height / 2;
-            this.cx = rect.x + this.halfWidth;
-            this.cy = rect.y + this.halfHeight;
-            return this;
-        }
-
-
-    }
+	/**
+	* An object representation of an axis-aligned bounding box. 
+	* 
+	* @class AABB
+	* @namespace Kiwi.Geom
+	* @constructor
+	* @param cx {Number} The centeral position on the x-axis.
+	* @param cy {Number} The centeral position on the y-axis.
+	* @param width {Number} The width of the box.
+	* @param height {Number} The height of the box.
+	* @return {Kiwi.Geom.AABB}
+	*/
+	export class AABB {
+
+		constructor(cx: number, cy: number, width: number, height: number) {
+			this.cx = cx || 0;
+			this.cy = cy || 0;
+			this.halfWidth = width / 2 || 0;
+			this.halfHeight = height / 2 || 0;
+		}
+
+
+		/**
+		* Returns the type of this object
+		* @method objType
+		* @return {String} "AABB"
+		* @public
+		*/
+		public objType() {
+			return "AABB";
+		}
+
+		/**
+		* The centeral location of the box on the x-axis.
+		* @property cx
+		* @type Number
+		* @public
+		*/
+		public cx: number = 0;
+
+		/**
+		* The centeral location of the box on the y-axis.
+		* @property cy
+		* @type Number
+		* @public
+		*/
+		public cy: number = 0;
+
+		/**
+		* Half of the width.
+		* @property halfWidth
+		* @type Number
+		* @public
+		*/
+		public halfWidth: number = 0;
+
+		/**
+		* Half of the height.
+		* @property halfHeight
+		* @type Number
+		* @public
+		*/
+		public halfHeight: number = 0;
+
+		/**
+		* Returns the full height. This is read only.
+		* @property height
+		* @type number
+		* @readOnly
+		* @public
+		*/
+		public get height():number {
+			return this.halfHeight * 2;
+		}
+
+		/**
+		* Returns the full width. This is read only.
+		* @property width
+		* @type number
+		* @readOnly
+		* @public
+		*/
+		public get width():number {
+			return this.halfWidth * 2;
+		}
+
+		/**
+		* Draws the object to a canvas context passed. 
+		* @method draw
+		* @param ctx {CanvasRenderingContext2D} The context you want this drawn to.
+		* @return {Kiwi.Geom.AABB}
+		* @public
+		*/
+		public draw(ctx: CanvasRenderingContext2D): AABB {
+			ctx.beginPath();
+			ctx.moveTo(this.cx - this.halfWidth, this.cy);
+			ctx.lineTo(this.cx + this.halfWidth, this.cy);
+			ctx.moveTo(this.cx, this.cy - this.halfHeight);
+			ctx.lineTo(this.cx, this.cy + this.halfHeight);
+			ctx.stroke();
+			return this;
+		}
+
+		/**
+		* Sets the position of the object.
+		* @method setPosition
+		* @param cx {Number} Its new x-axis location.
+		* @param cy {Number} Its new y-axis location.
+		* @return {Kiwi.Geom.AABB}
+		* @public
+		*/
+		public setPosition(cx: number, cy: number): AABB {
+			this.cx = cx;
+			this.cy = cy;
+			return this;
+		}
+
+		/**
+		* Sets the position of the object by a point that you pass.
+		* 
+		* @method setPositionPoint
+		* @param pos {Kiwi.Geom.Point} 
+		* @return {Kiwi.Geom.AABB}
+		* @public
+		*/
+		public setPositionPoint(pos: Point): AABB {
+			this.cx = pos.x;
+			this.cy = pos.y;
+			return this;
+		}
+
+		/**
+		* Returns this object but as a new Rectangle.
+		* 
+		* @method toRect
+		* @return {Kiwi.Geom.Rectangle}
+		* @public
+		*/
+		public toRect(): Rectangle {
+			return new Rectangle(this.cx - this.halfWidth, this.cy - this.halfHeight, this.halfWidth * 2, this.halfHeight * 2);
+		}
+
+		/**
+		* Gives the dimension of this AABB from a rectangle's.
+		* @method fromRect
+		* @param {Kiwi.Geom.Rectangle} rect
+		* @return {Kiwi.Geom.AABB}
+		* @public
+		*/
+		public fromRect(rect: Rectangle): AABB {
+			this.halfWidth = rect.width / 2;
+			this.halfHeight = rect.height / 2;
+			this.cx = rect.x + this.halfWidth;
+			this.cy = rect.y + this.halfHeight;
+			return this;
+		}
+
+
+	}
 
 }
diff --git a/src/geom/Circle.ts b/src/geom/Circle.ts
index ff531ac..4301ce2 100644
--- a/src/geom/Circle.ts
+++ b/src/geom/Circle.ts
@@ -6,493 +6,493 @@
 
 module Kiwi.Geom {
 
-    /**
-    * A Circle object is an area defined by its position, 
-    * as indicated by its center point (x,y) and diameter.
-    *	
-    * @class Circle
-    * @namespace Kiwi.Geom
-    * @constructor
-    * @param [x=0] {Number} The x coordinate of the center of the circle.
-    * @param [y=0] {Number} The y coordinate of the center of the circle.
-    * @param [diameter=0] {number} The diameter of the circle.
-    * @return {Kiwi.Geom.Circle} This circle object
-    *
-    */
-    export class Circle {
-        
-        constructor (x: number = 0, y: number = 0, diameter: number = 0) {
-
-            this.setTo(x, y, diameter);
-
-        }
-
-        /**
-        * The type of this object.
-        * @method objType
-        * @return {String} "Circle"
-        * @public
-        */
-        public objType() {
-            return "Circle";
-        }
-
-	    /** 
-	    * The diameter of the circle
-	    * @property _diameter
-	    * @type Number
-        * @default 0
-        * @private
-	    */
-        private _diameter: number = 0;
-
-	    /** 
-	    * The radius of the circle
-	    * @property _radius
-	    * @type Number
-        * @default 0
-        * @private
-	    */
-        private _radius: number = 0;
-
-	    /** 
-	    * The x coordinate of the center of the circle
-	    * @property x
-	    * @type Number
-        * @default 0
-        * @public
-	    */
-        public x: number = 0;
-
-	    /** 
-	    * The y coordinate of the center of the circle
-	    * @property y
-	    * @type Number
-        * @default 0
-        * @public
-	    */
-        public y: number = 0;
-
-        /**
-        * The diameter of the circle. 
-        * The largest distance between any two points on the circle. 
-        * The same as the radius * 2.
-        *
-        * @property diameter
-        * @type number
-        * @public
-	    */
-        public set diameter(value: number) {
-
-            if (value > 0)
-            {
-                this._diameter = value;
-                this._radius = value * 0.5;
-            }
-
-        }
-        public get diameter(): number {
-
-             return this._diameter;
-
-        }
-
-	    /**
-	    * The radius of the circle. 
-        * The length of a line extending from the center of the circle to any point on the circle itself. 
-        * The same as half the diameter.
-	    *
-        * @property radius
-	    * @type number
-        * @public
-	    */
-        public set radius(value: number) {
-
-            if (value > 0)
-            {
-                this._radius = value;
-                this._diameter = value * 2;
-            }
-
-        }
-        public get radius(): number {
-
-            return this._radius;
-
-        }
-
-	    /**
-	    * The circumference of the circle. This is READ ONLY.
-	    * @property circumference
-	    * @type number
-        * @readOnly
-        * @public
-	    */
-        public get circumference(): number {
-
-            return 2 * (Math.PI * this._radius);
-
-        }
-
-        /**
-        * The sum of the y and radius properties. 
-        * Changing the bottom property of a Circle object has no effect on the x and y properties,
-        * but does change the diameter.
-        * @property bottom
-        * @type number
-        * @public
-        */
-        public set bottom(value: number) {
-
-            if (!isNaN(value))
-            {
-                if (value < this.y)
-                {
-                    this._radius = 0;
-                    this._diameter = 0;
-                }
-                else
-                {
-                    this.radius = value - this.y;
-                }
-            }
-
-        } 
-        public get bottom(): number {
-
-            return this.y + this._radius;
-
-        }
-
-        /**
-        * The x coordinate of the leftmost point of the circle. 
-        * Changing the left property of a Circle object has no effect on the x and y properties. 
-        * However it does affect the diameter, whereas changing the x value does not affect the diameter property.
-        *
-        * @property left
-        * @type number
-        * @public
-        */
-        public set left(value: number) {
-
-            if (!isNaN(value))
-            {
-                if (value < this.x)
-                {
-                    this.radius = this.x - value;
-                }
-                else
-                {
-                    this._radius = 0;
-                    this._diameter = 0;
-                }
-            }
-
-        } 
-        public get left(): number {
-
-            return this.x - this._radius;
-
-        }
-
-        /**
-        * The x coordinate of the rightmost point of the circle. 
-        * Changing the right property of a Circle object has no effect on the x and y properties. 
-        * However it does affect the diameter, whereas changing the x value does not affect the diameter property.
-        *
-        * @property right
-        * @type number
-        * @public
-        */
-        public set right(value: number) {
-
-            if (value && !isNaN(value))
-            {
-                if (value > this.x)
-                {
-                    this.radius = value - this.x;
-                }
-                else
-                {
-                    this._radius = 0;
-                    this._diameter = 0;
-                }
-            }
-
-        } 
-        public get right(): number {
-
-            return this.x + this._radius;
-
-        }
-
-        /**
-        * The sum of the y minus the radius property.
-        * Changing the top property of a Circle object has no effect on the x and y properties,
-        * but does change the diameter.
-        *
-        * @property top
-        * @type number
-        * @public
-        */
-        public set top(value: number) {
-
-            if (value && !isNaN(value))
-            {
-                if (value > this.y)
-                {
-                    this._radius = 0;
-                    this._diameter = 0;
-                }
-                else
-                {
-                    this.radius = this.y - value;
-                }
-            }
-
-        }
-
-        public get top(): number {
-
-            return this.y - this._radius;
-
-        }
-
-        /**
-	    * Gets the area of this Circle. Note this is READ ONLY.
-	    * @property area
-        * @type number
-        * @readOnly
-        * @public
-        */
-        public get area(): number {
-
-            if (this._radius > 0)
-            {
-                return Math.PI * this._radius * this._radius;
-            }
-            else
-            {
-                return 0;
-            }
-
-        }
-
-        /**
-	    * Determines whether or not this Circle object is empty. 
-	    * @method isEmpty
-	    * @return {boolean} A value of true if the Circle objects diameter is less than or equal to 0; otherwise false.
-        * @public
-	    */
-        public get isEmpty(): boolean {
-
-            if (this._diameter <= 0)
-            {
-                return true;
-            }
-
-            return false;
-
-        }
-          
-	    /**
-	    * Returns a new Circle object with the same values for the x, y, diameter, and radius properties as the original Circle object.
-	    * @method clone
-	    * @param [output=Circle] {Kiwi.Geom.Circle} If given the values will be set into the object, otherwise a brand new Circle object will be created and returned.
-	    * @return {Kiwi.Geom.Circle}
-        * @public
-	    */
-        public clone(output: Circle = new Circle): Circle {
-
-            return output.setTo(this.x, this.y, this._diameter);
-
-        }
-
-	    /**
-	    * Copies all of circle data from a Circle object passed (the source) into this Circle object.
-	    * @method copyFrom
-	    * @param source {Kiwi.Geom.Circle} The source circle object to copy from
-	    * @return {Kiwi.Geom.Circle} This circle object
-        * @public
-	    */
-        public copyFrom(source: Circle): Circle {
-
-            return this.setTo(source.x, source.y, source.diameter);
-
-        }
-
-	    /**
-	    * Copies all of circle data from this Circle object into a passed Circle object (destination).
-	    * @method copyTo
-	    * @param circle {Kiwi.Geom.Circle} The destination circle object to copy in to
-	    * @return {Kiwi.Geom.Circle} The destination circle object
-        * @public
-	    */
-        public copyTo(target: Circle) {
-
-            return target.copyFrom(this);
-
-        }
-
-	    /**
-	    * Returns the distance from the center of this Circle object to the passed object.
-        * The passed object can be a Circle, Point, or anything with x/y values.
-	    *
-        * @method distanceTo
-	    * @param target {Any} The destination Point object.
-	    * @param [round=false] {boolean} Round the distance to the nearest integer (default false)
-	    * @return {Number} The distance between this Point object and the destination Point object.
-        * @public
-	    */
-        public distanceTo(target: any, round: boolean = false): number {
-
-            var dx = this.x - target.x;
-            var dy = this.y - target.y;
-
-            if (round === true)
-            {
-                return Math.round(Math.sqrt(dx * dx + dy * dy));
-            }
-            else
-            {
-                return Math.sqrt(dx * dx + dy * dy);
-            }
-
-        }
-
-	    /**
-	    * Determines whether a Circle passed is equal to this Circle.
-        * They are considered 'equal' if both circles have the same values for x, y, and diameter properties.  
-        *
-	    * @method equals
-	    * @param toCompare {Kiwi.Geom.Circle} The circle to compare to this Circle object.
-	    * @return {boolean} A value of true if the object has exactly the same values for the x, y and diameter properties as this Circle object; otherwise false.
-        * @public
-	    */
-        public equals(toCompare: Circle): boolean {
-
-            if (this.x === toCompare.x && this.y === toCompare.y && this.diameter === toCompare.diameter)
-            {
-                return true;
-            }
-
-            return false;
-
-        }
-
-	    /**
-	    * Determines whether a Circle passed intersects with this Circle. 
-        * Returns a boolean indicating if the two circles intersect.
-        *
-	    * @method intersects
-	    * @param toIntersect {Kiwi.Geom.Circle} The Circle object to compare against to see if it intersects with this Circle object.
-	    * @return {boolean} A value of true if the specified object intersects with this Circle object; otherwise false.
-        * @public
-	    */
-        public intersects(toIntersect: Circle): boolean {
-
-            if (this.distanceTo(toIntersect, false) < (this._radius + toIntersect._radius))
-            {
-                return true;
-            }
-
-            return false;
-
-        }
-
-	    /**
-	    * Returns a Point object containing the coordinates of a point on the circumference of this Circle based on the given angle.
-        *
-	    * @method circumferencePoint
-	    * @param angle {Number} The angle in radians (unless asDegrees is true) to return the point from.
-	    * @param [asDegress=false] {boolean} Is the given angle in radians (false) or degrees (true)?
-	    * @param [output] {Kiwi.Geom.Point} A Point object to put the result in to. If none specified a new Point object will be created.
-	    * @return {Kiwi.Geom.Point} The Point object holding the result.
-        * @public
-	    */
-        public circumferencePoint(angle: number, asDegrees: boolean = false, output: Point = new Point): Point {
-
-            if (asDegrees === true)
-            {
-                angle = angle * (Math.PI / 180); // Radians to Degrees
-                //angle = angle * (180 / Math.PI); // Degrees to Radians
-            }
-
-            output.x = this.x + this._radius * Math.cos(angle);
-            output.y = this.y + this._radius * Math.sin(angle);
-
-            return output;
-
-        }
-
-	    /**
-	    * Adjusts the location of the Circle object, as determined by its center coordinate, by the specified amounts.
-	    * @method offset
-	    * @param dx {Number} Moves the x value of the Circle object by this amount.
-	    * @param dy {Number} Moves the y value of the Circle object by this amount.
-	    * @return {Kiwi.Geom.Circle} This Circle object.
-        * @public
-	    */
-        public offset(dx: number, dy: number): Circle {
-
-            if (!isNaN(dx) && !isNaN(dy))
-            {
-                this.x += dx;
-                this.y += dy;
-            }
-
-            return this;
-
-        }
-
-	    /**
-	    * Adjusts the location of the Circle object using a Point object as a parameter. 
-        * This method is similar to the 'offset' method, except that it takes a Point object as a parameter.
-        *
-	    * @method offsetPoint
-	    * @param {Kiwi.Geom.Point} point A Point object to use to offset this Circle object.
-	    * @return {Kiwi.Geom.Circle} This Circle object.
-        * @public
-	    */
-        public offsetPoint(point: Point): Circle {
-
-            return this.offset(point.x, point.y);
-
-        }
-
-	    /**
-	    * Sets the members of Circle to the specified values.
-        *
-	    * @method setTo
-	    * @param x {Number} The x coordinate of the center of the circle.
-	    * @param y {Number} The y coordinate of the center of the circle.
-	    * @param diameter {Number} The diameter of the circle in pixels.
-	    * @return {Kiwi.Geom.Circle} This circle object
-        * @public
-	    */
-        public setTo(x: number, y: number, diameter: number): Circle {
-
-            this.x = x;
-            this.y = y;
-            this._diameter = diameter;
-            this._radius = diameter * 0.5;
-
-            return this;
-
-        }
-
-	    /**
-	    * Returns a string representation of this object.
-	    * @method toString
-	    * @return {string} a string representation of the instance.
-        * @public
-	    */
-        public toString(): string {
-
-            return "[{Circle (x=" + this.x + " y=" + this.y + " diameter=" + this.diameter + " radius=" + this.radius + ")}]";
-
-        }
-
-    }
-
-}
\ No newline at end of file
+	/**
+	* A Circle object is an area defined by its position, 
+	* as indicated by its center point (x,y) and diameter.
+	*	
+	* @class Circle
+	* @namespace Kiwi.Geom
+	* @constructor
+	* @param [x=0] {Number} The x coordinate of the center of the circle.
+	* @param [y=0] {Number} The y coordinate of the center of the circle.
+	* @param [diameter=0] {number} The diameter of the circle.
+	* @return {Kiwi.Geom.Circle} This circle object
+	*
+	*/
+	export class Circle {
+
+		constructor (x: number = 0, y: number = 0, diameter: number = 0) {
+
+			this.setTo(x, y, diameter);
+
+		}
+
+		/**
+		* The type of this object.
+		* @method objType
+		* @return {String} "Circle"
+		* @public
+		*/
+		public objType() {
+			return "Circle";
+		}
+
+		/** 
+		* The diameter of the circle
+		* @property _diameter
+		* @type Number
+		* @default 0
+		* @private
+		*/
+		private _diameter: number = 0;
+
+		/** 
+		* The radius of the circle
+		* @property _radius
+		* @type Number
+		* @default 0
+		* @private
+		*/
+		private _radius: number = 0;
+
+		/** 
+		* The x coordinate of the center of the circle
+		* @property x
+		* @type Number
+		* @default 0
+		* @public
+		*/
+		public x: number = 0;
+
+		/** 
+		* The y coordinate of the center of the circle
+		* @property y
+		* @type Number
+		* @default 0
+		* @public
+		*/
+		public y: number = 0;
+
+		/**
+		* The diameter of the circle. 
+		* The largest distance between any two points on the circle. 
+		* The same as the radius * 2.
+		*
+		* @property diameter
+		* @type number
+		* @public
+		*/
+		public set diameter(value: number) {
+
+			if (value > 0)
+			{
+				this._diameter = value;
+				this._radius = value * 0.5;
+			}
+
+		}
+		public get diameter(): number {
+
+			 return this._diameter;
+
+		}
+
+		/**
+		* The radius of the circle. 
+		* The length of a line extending from the center of the circle to any point on the circle itself. 
+		* The same as half the diameter.
+		*
+		* @property radius
+		* @type number
+		* @public
+		*/
+		public set radius(value: number) {
+
+			if (value > 0)
+			{
+				this._radius = value;
+				this._diameter = value * 2;
+			}
+
+		}
+		public get radius(): number {
+
+			return this._radius;
+
+		}
+
+		/**
+		* The circumference of the circle. This is READ ONLY.
+		* @property circumference
+		* @type number
+		* @readOnly
+		* @public
+		*/
+		public get circumference(): number {
+
+			return 2 * (Math.PI * this._radius);
+
+		}
+
+		/**
+		* The sum of the y and radius properties. 
+		* Changing the bottom property of a Circle object has no effect on the x and y properties,
+		* but does change the diameter.
+		* @property bottom
+		* @type number
+		* @public
+		*/
+		public set bottom(value: number) {
+
+			if (!isNaN(value))
+			{
+				if (value < this.y)
+				{
+					this._radius = 0;
+					this._diameter = 0;
+				}
+				else
+				{
+					this.radius = value - this.y;
+				}
+			}
+
+		} 
+		public get bottom(): number {
+
+			return this.y + this._radius;
+
+		}
+
+		/**
+		* The x coordinate of the leftmost point of the circle. 
+		* Changing the left property of a Circle object has no effect on the x and y properties. 
+		* However it does affect the diameter, whereas changing the x value does not affect the diameter property.
+		*
+		* @property left
+		* @type number
+		* @public
+		*/
+		public set left(value: number) {
+
+			if (!isNaN(value))
+			{
+				if (value < this.x)
+				{
+					this.radius = this.x - value;
+				}
+				else
+				{
+					this._radius = 0;
+					this._diameter = 0;
+				}
+			}
+
+		}
+		public get left(): number {
+
+			return this.x - this._radius;
+
+		}
+
+		/**
+		* The x coordinate of the rightmost point of the circle. 
+		* Changing the right property of a Circle object has no effect on the x and y properties. 
+		* However it does affect the diameter, whereas changing the x value does not affect the diameter property.
+		*
+		* @property right
+		* @type number
+		* @public
+		*/
+		public set right(value: number) {
+
+			if (value && !isNaN(value))
+			{
+				if (value > this.x)
+				{
+					this.radius = value - this.x;
+				}
+				else
+				{
+					this._radius = 0;
+					this._diameter = 0;
+				}
+			}
+
+		}
+		public get right(): number {
+
+			return this.x + this._radius;
+
+		}
+
+		/**
+		* The sum of the y minus the radius property.
+		* Changing the top property of a Circle object has no effect on the x and y properties,
+		* but does change the diameter.
+		*
+		* @property top
+		* @type number
+		* @public
+		*/
+		public set top(value: number) {
+
+			if (value && !isNaN(value))
+			{
+				if (value > this.y)
+				{
+					this._radius = 0;
+					this._diameter = 0;
+				}
+				else
+				{
+					this.radius = this.y - value;
+				}
+			}
+
+		}
+
+		public get top(): number {
+
+			return this.y - this._radius;
+
+		}
+
+		/**
+		* Gets the area of this Circle. Note this is READ ONLY.
+		* @property area
+		* @type number
+		* @readOnly
+		* @public
+		*/
+		public get area(): number {
+
+			if (this._radius > 0)
+			{
+				return Math.PI * this._radius * this._radius;
+			}
+			else
+			{
+				return 0;
+			}
+
+		}
+
+		/**
+		* Determines whether or not this Circle object is empty. 
+		* @method isEmpty
+		* @return {boolean} A value of true if the Circle objects diameter is less than or equal to 0; otherwise false.
+		* @public
+		*/
+		public get isEmpty(): boolean {
+
+			if (this._diameter <= 0)
+			{
+				return true;
+			}
+
+			return false;
+
+		}
+
+		/**
+		* Returns a new Circle object with the same values for the x, y, diameter, and radius properties as the original Circle object.
+		* @method clone
+		* @param [output=Circle] {Kiwi.Geom.Circle} If given the values will be set into the object, otherwise a brand new Circle object will be created and returned.
+		* @return {Kiwi.Geom.Circle}
+		* @public
+		*/
+		public clone(output: Circle = new Circle): Circle {
+
+			return output.setTo(this.x, this.y, this._diameter);
+
+		}
+
+		/**
+		* Copies all of circle data from a Circle object passed (the source) into this Circle object.
+		* @method copyFrom
+		* @param source {Kiwi.Geom.Circle} The source circle object to copy from
+		* @return {Kiwi.Geom.Circle} This circle object
+		* @public
+		*/
+		public copyFrom(source: Circle): Circle {
+
+			return this.setTo(source.x, source.y, source.diameter);
+
+		}
+
+		/**
+		* Copies all of circle data from this Circle object into a passed Circle object (destination).
+		* @method copyTo
+		* @param circle {Kiwi.Geom.Circle} The destination circle object to copy in to
+		* @return {Kiwi.Geom.Circle} The destination circle object
+		* @public
+		*/
+		public copyTo(target: Circle) {
+
+			return target.copyFrom(this);
+
+		}
+
+		/**
+		* Returns the distance from the center of this Circle object to the passed object.
+		* The passed object can be a Circle, Point, or anything with x/y values.
+		*
+		* @method distanceTo
+		* @param target {Any} The destination Point object.
+		* @param [round=false] {boolean} Round the distance to the nearest integer (default false)
+		* @return {Number} The distance between this Point object and the destination Point object.
+		* @public
+		*/
+		public distanceTo(target: any, round: boolean = false): number {
+
+			var dx = this.x - target.x;
+			var dy = this.y - target.y;
+
+			if (round === true)
+			{
+				return Math.round(Math.sqrt(dx * dx + dy * dy));
+			}
+			else
+			{
+				return Math.sqrt(dx * dx + dy * dy);
+			}
+
+		}
+
+		/**
+		* Determines whether a Circle passed is equal to this Circle.
+		* They are considered 'equal' if both circles have the same values for x, y, and diameter properties.  
+		*
+		* @method equals
+		* @param toCompare {Kiwi.Geom.Circle} The circle to compare to this Circle object.
+		* @return {boolean} A value of true if the object has exactly the same values for the x, y and diameter properties as this Circle object; otherwise false.
+		* @public
+		*/
+		public equals(toCompare: Circle): boolean {
+
+			if (this.x === toCompare.x && this.y === toCompare.y && this.diameter === toCompare.diameter)
+			{
+				return true;
+			}
+
+			return false;
+
+		}
+
+		/**
+		* Determines whether a Circle passed intersects with this Circle. 
+		* Returns a boolean indicating if the two circles intersect.
+		*
+		* @method intersects
+		* @param toIntersect {Kiwi.Geom.Circle} The Circle object to compare against to see if it intersects with this Circle object.
+		* @return {boolean} A value of true if the specified object intersects with this Circle object; otherwise false.
+		* @public
+		*/
+		public intersects(toIntersect: Circle): boolean {
+
+			if (this.distanceTo(toIntersect, false) < (this._radius + toIntersect._radius))
+			{
+				return true;
+			}
+
+			return false;
+
+		}
+
+		/**
+		* Returns a Point object containing the coordinates of a point on the circumference of this Circle based on the given angle.
+		*
+		* @method circumferencePoint
+		* @param angle {Number} The angle in radians (unless asDegrees is true) to return the point from.
+		* @param [asDegress=false] {boolean} Is the given angle in radians (false) or degrees (true)?
+		* @param [output] {Kiwi.Geom.Point} A Point object to put the result in to. If none specified a new Point object will be created.
+		* @return {Kiwi.Geom.Point} The Point object holding the result.
+		* @public
+		*/
+		public circumferencePoint(angle: number, asDegrees: boolean = false, output: Point = new Point): Point {
+
+			if (asDegrees === true)
+			{
+				angle = angle * (Math.PI / 180); // Radians to Degrees
+				//angle = angle * (180 / Math.PI); // Degrees to Radians
+			}
+
+			output.x = this.x + this._radius * Math.cos(angle);
+			output.y = this.y + this._radius * Math.sin(angle);
+
+			return output;
+
+		}
+
+		/**
+		* Adjusts the location of the Circle object, as determined by its center coordinate, by the specified amounts.
+		* @method offset
+		* @param dx {Number} Moves the x value of the Circle object by this amount.
+		* @param dy {Number} Moves the y value of the Circle object by this amount.
+		* @return {Kiwi.Geom.Circle} This Circle object.
+		* @public
+		*/
+		public offset(dx: number, dy: number): Circle {
+
+			if (!isNaN(dx) && !isNaN(dy))
+			{
+				this.x += dx;
+				this.y += dy;
+			}
+
+			return this;
+
+		}
+
+		/**
+		* Adjusts the location of the Circle object using a Point object as a parameter. 
+		* This method is similar to the 'offset' method, except that it takes a Point object as a parameter.
+		*
+		* @method offsetPoint
+		* @param {Kiwi.Geom.Point} point A Point object to use to offset this Circle object.
+		* @return {Kiwi.Geom.Circle} This Circle object.
+		* @public
+		*/
+		public offsetPoint(point: Point): Circle {
+
+			return this.offset(point.x, point.y);
+
+		}
+
+		/**
+		* Sets the members of Circle to the specified values.
+		*
+		* @method setTo
+		* @param x {Number} The x coordinate of the center of the circle.
+		* @param y {Number} The y coordinate of the center of the circle.
+		* @param diameter {Number} The diameter of the circle in pixels.
+		* @return {Kiwi.Geom.Circle} This circle object
+		* @public
+		*/
+		public setTo(x: number, y: number, diameter: number): Circle {
+
+			this.x = x;
+			this.y = y;
+			this._diameter = diameter;
+			this._radius = diameter * 0.5;
+
+			return this;
+
+		}
+
+		/**
+		* Returns a string representation of this object.
+		* @method toString
+		* @return {string} a string representation of the instance.
+		* @public
+		*/
+		public toString(): string {
+
+			return "[{Circle (x=" + this.x + " y=" + this.y + " diameter=" + this.diameter + " radius=" + this.radius + ")}]";
+
+		}
+
+	}
+
+}
diff --git a/src/geom/Intersect.ts b/src/geom/Intersect.ts
index 34b3836..c0bd5fa 100644
--- a/src/geom/Intersect.ts
+++ b/src/geom/Intersect.ts
@@ -2,650 +2,650 @@
 *  
 * @module Kiwi
 * @submodule Geom
-*/ 
+*/
 
 module Kiwi.Geom {
 
-    /**
-    * Contains a collection of STATIC methods for determining intersections between geometric objects.
-    *
-    * May methods contained here store the results of the intersections in a 'IntersectResult' Object, 
-    * which is either created for you (by the methods which require it) OR you can pass one to use instead. 
-    * 
-    * If you are using the Intersect methods a lot, you may want to consider
-    * creating a IntersectResult class a reusing it (by passing it to the methods on the Intersect class)
-    * instead of having new IntersectResults created.
-    * 
-    * @class Intersect
-    * @namespace Kiwi.Geom
-    * @static
-    */
-    export class Intersect {
-
-        /**
-        * The type of this object.
-        * @method objType
-        * @return {String} "Intersect"
-        * @public
-        */
-        public objType() {
-            return "Intersect";
-        }
-
-        /**
-	    * -------------------------------------------------------------------------------------------
-	    * Distance
-	    * -------------------------------------------------------------------------------------------
-	    **/
-
-        /** 
-	    * Returns the distance between two sets of coordinates that you specify. 
-	    * @method distance
-        * @param x1 {Number} The x position of the first coordinate.
-        * @param y1 {Number} The y position of the first coordinate.
-        * @param x2 {Number} The x position of the second coordinate.
-        * @param y2 {Number} The y position of the second coordinate.
-        * @return {Number} The distance between the two points.
-        * @public
-        * @static
-	    */
-        static distance(x1: number, y1: number, x2: number, y2: number) {
-            return Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
-        }
-
-        /** 
-	    * Returns the distance squared between two sets of coordinates that you specify. 
-        *
-	    * @method distanceSquared
-        * @param x1 {Number} The x position of the first coordinate.
-        * @param y1 {Number} The y position of the first coordinate.
-        * @param x2 {Number} The x position of the second coordinate.
-        * @param y2 {Number} The y position of the second coordinate.
-        * @return {Number} The distance between the two points squared.
-        * @public
-        * @static
-	    */
-        static distanceSquared(x1: number, y1: number, x2: number, y2: number) {
-            return (x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1);
-        }
-
-        /**
-	    * -------------------------------------------------------------------------------------------
-	    * Lines
-	    * -------------------------------------------------------------------------------------------
-	    **/
-
-        /**
-	    * Check to see if any two Lines intersect at any point. 
-        * Both lines are treated as if they extend infintely through space.
-        *
-	    * @method lineToLine
-	    * @param line1 {Kiwi.Geom.Line} The first line object to check.
-	    * @param line2 {Kiwi.Geom.Line} The second line object to check.
-	    * @param [output] {Kiwi.Geom.IntersectResult} An optional IntersectResult object to store the intersection values in. One is created if none given.
-	    * @return {Kiwi.Geom.IntersectResult} An IntersectResult object containing the results of this intersection in x/y
-        * @public
-        * @static
-	    */
-        static lineToLine(line1: Line, line2: Line, output: IntersectResult = new IntersectResult): IntersectResult {
-
-            var denom = (line1.x1 - line1.x2) * (line2.y1 - line2.y2) - (line1.y1 - line1.y2) * (line2.x1 - line2.x2);
-
-            if (denom !== 0)
-            {
-                output.result = true;
-                output.x = ((line1.x1 * line1.y2 - line1.y1 * line1.x2) * (line2.x1 - line2.x2) - (line1.x1 - line1.x2) * (line2.x1 * line2.y2 - line2.y1 * line2.x2)) / denom;
-                output.y = ((line1.x1 * line1.y2 - line1.y1 * line1.x2) * (line2.y1 - line2.y2) - (line1.y1 - line1.y2) * (line2.x1 * line2.y2 - line2.y1 * line2.x2)) / denom;
-            }
-
-            return output;
-        }
-
-        /**
-	    * Check to see if a Line and a Line Segment intersect at any point. 
-        * Note: The first line passed is treated as if it extends infinately though space, 
-        * The second is treated as if it only exists between its two points.
-        *
-	    * @method lineToLineSegment
-	    * @param line1 {Kiwi.Geom.Line} The first line to check. This is the one that will extend through space infinately.
-	    * @param seg {Kiwi.Geom.Line} The second line to check. This is the one that will only exist between its two coordinates.
-	    * @param [output] {Kiwi.Geom.IntersectResult} An optional IntersectResult object to store the intersection values in. One is created if none given.
-	    * @return {Kiwi.Geom.IntersectResult} An IntersectResult object containing the results of this intersection.
-        * @public
-        * @static
-	    */
-        static lineToLineSegment(line1: Line, seg: Line, output: IntersectResult = new IntersectResult): IntersectResult {
-
-            var denom = (line1.x1 - line1.x2) * (seg.y1 - seg.y2) - (line1.y1 - line1.y2) * (seg.x1 - seg.x2);
-
-            if (denom !== 0)
-            {
-                output.x = ((line1.x1 * line1.y2 - line1.y1 * line1.x2) * (seg.x1 - seg.x2) - (line1.x1 - line1.x2) * (seg.x1 * seg.y2 - seg.y1 * seg.x2)) / denom;
-                output.y = ((line1.x1 * line1.y2 - line1.y1 * line1.x2) * (seg.y1 - seg.y2) - (line1.y1 - line1.y2) * (seg.x1 * seg.y2 - seg.y1 * seg.x2)) / denom;
-
-                var maxX = Math.max(seg.x1, seg.x2);
-                var minX = Math.min(seg.x1, seg.x2);
-                var maxY = Math.max(seg.y1, seg.y2);
-                var minY = Math.min(seg.y1, seg.y2);
-
-                //if (!(output.x <= maxX && output.x >= minX) || !(output.y <= maxY && output.y >= minY))
-                if ((output.x <= maxX && output.x >= minX) === true || (output.y <= maxY && output.y >= minY) === true)
-                {
-                    output.result = true;
-                }
-
-            }
-
-            return output;
-
-        }
-
-        /**
-	    * Checks to see if a Line that is passed, intersects at any point with a Line that is made by passing a set of coordinates to this method. 
-        * Note: The first line will extend infinately through space. 
-        * And the second line will only exist between the two points passed.
-        *
-	    * @method lineToRawSegment
-	    * @param line {Kiwi.Geom.Line} The line object that extends infinatly through space.
-	    * @param x1 {number} The x coordinate of the first point in the second line.
-	    * @param y1 {number} The y coordinate of the first point in the second line.
-	    * @param x2 {number} The x coordinate of the second point in the second line.
-	    * @param y2 {number} The y coordinate of the second point in the second line.
-	    * @param [output] {Kiwi.Geom.IntersectResult} An optional IntersectResult object to store the intersection values in. One is created if none given.
-	    * @return {Kiwi.Geom.IntersectResult} An IntersectResult object containing the results of this intersection in x/y
-	    * @static
-        * @public
-        */
-        static lineToRawSegment(line: Line, x1: number, y1: number, x2: number, y2: number, output: IntersectResult = new IntersectResult): IntersectResult {
-
-            var denom = (line.x1 - line.x2) * (y1 - y2) - (line.y1 - line.y2) * (x1 - x2);
-
-            if (denom !== 0)
-            {
-                output.x = ((line.x1 * line.y2 - line.y1 * line.x2) * (x1 - x2) - (line.x1 - line.x2) * (x1 * y2 - y1 * x2)) / denom;
-                output.y = ((line.x1 * line.y2 - line.y1 * line.x2) * (y1 - y2) - (line.y1 - line.y2) * (x1 * y2 - y1 * x2)) / denom;
-
-                var maxX = Math.max(x1, x2);
-                var minX = Math.min(x1, x2);
-                var maxY = Math.max(y1, y2);
-                var minY = Math.min(y1, y2);
-
-                if ((output.x <= maxX && output.x >= minX) === true || (output.y <= maxY && output.y >= minY) === true)
-                {
-                    output.result = true;
-                }
-
-            }
-
-            return output;
-
-        }
-
-        /**
-	    * Checks to see if a Line and Ray object intersects at any point. 
-        * Note: The line in this case extends infinately through space. 
-        * 
-	    * @method lineToRay
-	    * @param line1 {Kiwi.Geom.Line} The Line object that extends infinatly through space.
-	    * @param ray {Kiwi.Geom.Ray} The Ray object that you want to check it against.
-	    * @param [output] {Kiwi.Geom.IntersectResult} An optional IntersectResult object to store the intersection values in. One is created if none given.
-	    * @return {Kiwi.Geom.IntersectResult} An IntersectResult object containing the results of this intersection in x/y
-	    * @public
-        * @static
-        */
-        static lineToRay(line1: Line, ray: Ray, output: IntersectResult = new IntersectResult): IntersectResult {
-
-            var denom = (line1.x1 - line1.x2) * (ray.y1 - ray.y2) - (line1.y1 - line1.y2) * (ray.x1 - ray.x2);
-
-            if (denom !== 0)
-            {
-                output.x = ((line1.x1 * line1.y2 - line1.y1 * line1.x2) * (ray.x1 - ray.x2) - (line1.x1 - line1.x2) * (ray.x1 * ray.y2 - ray.y1 * ray.x2)) / denom;
-                output.y = ((line1.x1 * line1.y2 - line1.y1 * line1.x2) * (ray.y1 - ray.y2) - (line1.y1 - line1.y2) * (ray.x1 * ray.y2 - ray.y1 * ray.x2)) / denom;
-                output.result = true; // true unless either of the 2 following conditions are met
-
-                if (!(ray.x1 >= ray.x2) && output.x < ray.x1)
-                {
-                    output.result = false;
-                }
-
-                if (!(ray.y1 >= ray.y2) && output.y < ray.y1)
-                {
-                    output.result = false;
-                }
-            }
-
-            return output;
-
-        }
-
-        /**
-	    * Checks to see if a Line and a Circle intersect at any point.
-        * Note: The line passed is assumed to extend infinately through space. 
-        *
-	    * @method lineToCircle
-	    * @param line {Kiwi.Geom.Line} The Line object that you want to check it against.
-	    * @param circle {Kiwi.Geom.Circle} The Circle object to check.
-	    * @param [output] {IntersectResult} An optional IntersectResult object to store the intersection values in. One is created if none given.
-	    * @return {Kiwi.Geom.IntersectResult} An IntersectResult object containing the results of this intersection
-	    * @public
-        * @static
-        */
-        static lineToCircle(line: Line, circle: Circle, output: IntersectResult = new IntersectResult): IntersectResult {
-
-            //  Get a perpendicular line running to the center of the circle
-            if (line.perp(circle.x, circle.y).length <= circle.radius)
-            {
-                output.result = true;
-            }
-
-            return output;
-
-        }
-
-        /**
-	    * Check if the Line intersects with each side of a Rectangle.
-        * Note: The Line is assumned to extend infinately through space.
-        * 
-	    * @method lineToRectangle
-	    * @param line {Kiwi.Geom.Line} The Line object to check
-	    * @param rectangle {Kiwi.Geom.Rectangle} The Rectangle object to check
-	    * @param [output] {Kiwi.Geom.IntersectResult} An optional IntersectResult object to store the intersection values in. One is created if none given.
-	    * @return {Kiwi.Geom.IntersectResult} An IntersectResult object containing the results of this intersection
-        * @public
-        * @static
-	    */
-        static lineToRectangle(line: any, rect: Rectangle, output: IntersectResult = new IntersectResult): IntersectResult {
-
-            //  Top of the Rectangle vs the Line
-            Intersect.lineToRawSegment(line, rect.x, rect.y, rect.right, rect.y, output);
-
-            if (output.result === true)
-            {
-                return output;
-            }
-
-            //  Left of the Rectangle vs the Line
-            Intersect.lineToRawSegment(line, rect.x, rect.y, rect.x, rect.bottom, output);
-
-            if (output.result === true)
-            {
-                return output;
-            }
-
-            //  Bottom of the Rectangle vs the Line
-            Intersect.lineToRawSegment(line, rect.x, rect.bottom, rect.right, rect.bottom, output);
-
-            if (output.result === true)
-            {
-                return output;
-            }
-
-            //  Right of the Rectangle vs the Line
-            Intersect.lineToRawSegment(line, rect.right, rect.y, rect.right, rect.bottom, output);
-
-            return output;
-
-        }
-
-        /**
-	    * -------------------------------------------------------------------------------------------
-	    * Line Segment
-	    * -------------------------------------------------------------------------------------------
-	    **/
-
-        /**
-	    * Checks to see if two Line Segments intersect at any point in space. 
-        * Note: Both lines are treated as if they only exist between their two line coordinates.
-        * 
-	    * @method lineSegmentToLineSegment
-	    * @param line1 {Kiwi.Geom.Line} The first line object to check.
-	    * @param line2 {Kiwi.Geom.Line} The second line object to check.
-	    * @param [output]{Kiwi.Geom.IntersectResult} An optional IntersectResult object to store the intersection values in. One is created if none given.
-	    * @return {Kiwi.Geom.IntersectResult} An IntersectResult object containing the results of this intersection in x/y.
-	    * @public
-        * @static
-        */
-        static lineSegmentToLineSegment(line1: Line, line2: Line, output: IntersectResult = new IntersectResult): IntersectResult {
-
-            Intersect.lineToLineSegment(line1, line2, output);
-
-            if (output.result === true)
-            {
-                if (!(output.x >= Math.min(line1.x1, line1.x2) && output.x <= Math.max(line1.x1, line1.x2)
-                    && output.y >= Math.min(line1.y1, line1.y2) && output.y <= Math.max(line1.y1, line1.y2)))
-                {
-                    output.result = false;
-                }
-            }
-
-            return output;
-        }
-
-        /**
-	    * Check if the Line Segment intersects with the Ray.
-        * Note: The Line only exists between its two points.
-        * 
-	    * @method lineSegmentToRay
-	    * @param line1 {Kiwi.Geom.Line} The Line object to check.
-	    * @param ray {Kiwi.Geom.Line} The Ray object to check.
-	    * @param [output] {Kiwi.Geom.IntersectResult} An optional IntersectResult object to store the intersection values in. One is created if none given.
-	    * @return {Kiwi.Geom.IntersectResult} An IntersectResult object containing the results of this intersection in x/y
-        * @public
-        * @static
-	    */
-        static lineSegmentToRay(line1: Line, ray: Ray, output: IntersectResult = new IntersectResult): IntersectResult {
-
-            Intersect.lineToRay(line1, ray, output);
-
-            if (output.result === true)
-            {
-                if (!(output.x >= Math.min(line1.x1, line1.x2) && output.x <= Math.max(line1.x1, line1.x2)
-                    && output.y >= Math.min(line1.y1, line1.y2) && output.y <= Math.max(line1.y1, line1.y2)))
-                {
-                    output.result = false;
-                }
-            }
-
-            return output;
-
-        }
-
-        /**
-	    * Check if the Line Segment intersects with the Circle.
-        * Note the Line only exists between its point points.
-        * 
-	    * @method lineSegmentToCircle
-	    * @param seg {Kiwi.Geom.Line} The Line object to check
-	    * @param circle {Kiwi.Geom.Circle} The Circle object to check
-	    * @param [ouput] {Kiwi.Geom.IntersectResult} An optional IntersectResult object to store the intersection values in. One is created if none given.
-	    * @return {Kiwi.Geom.IntersectResult} An IntersectResult object containing the results of this intersection in x/y
-        * @public
-        * @static
-	    */
-        static lineSegmentToCircle(seg: Line, circle: Circle, output: IntersectResult = new IntersectResult): IntersectResult {
-
-            var perp = seg.perp(circle.x, circle.y);
-
-            if (perp.length <= circle.radius)
-            {
-                //  Line intersects circle - check if segment does
-                var maxX = Math.max(seg.x1, seg.x2);
-                var minX = Math.min(seg.x1, seg.x2);
-                var maxY = Math.max(seg.y1, seg.y2);
-                var minY = Math.min(seg.y1, seg.y2);
-
-                if ((perp.x2 <= maxX && perp.x2 >= minX) && (perp.y2 <= maxY && perp.y2 >= minY))
-                {
-                    output.result = true;
-                }
-                else
-                {
-                    //  Worst case - segment doesn't traverse center, so no perpendicular connection.
-                    if (Intersect.circleContainsPoint(circle, <Point> { x: seg.x1, y: seg.y1 }) || Intersect.circleContainsPoint(circle, <Point> { x: seg.x2, y: seg.y2 }))
-                    {
-                        output.result = true;
-                    }
-                }
-
-            }
-
-            return output;
-        }
-
-        /**
-	    * Check if the Line Segment intersects with any side of a Rectangle.
-        * Note: The Line only exists between its two points.
-        *
-	    * @method lineSegmentToCircle
-	    * @param seg {Kiwi.Geom.Line} The Line object to check.
-	    * @param rect {Kiwi.Geom.Rectangle} The Rectangle object to check.
-	    * @param [output] {Kiwi.Geom.IntersectResult} An optional IntersectResult object to store the intersection values in. One is created if none given.
-	    * @return {Kiwi.Geom.IntersectResult} An IntersectResult object containing the results of this intersection in x/y.
-	    * @public
-        * @static
-        */ 
-        static lineSegmentToRectangle(seg: Line, rect: Rectangle, output: IntersectResult = new IntersectResult): IntersectResult {
-
-            if (rect.contains(seg.x1, seg.y1) && rect.contains(seg.x2, seg.y2))
-            {
-                output.result = true;
-            }
-            else
-            {
-                //  Top of the Rectangle vs the Line
-                Intersect.lineToRawSegment(seg, rect.x, rect.y, rect.right, rect.bottom, output);
-
-                if (output.result === true)
-                {
-                    return output;
-                }
-
-                //  Left of the Rectangle vs the Line
-                Intersect.lineToRawSegment(seg, rect.x, rect.y, rect.x, rect.bottom, output);
-
-                if (output.result === true)
-                {
-                    return output;
-                }
-
-                //  Bottom of the Rectangle vs the Line
-                Intersect.lineToRawSegment(seg, rect.x, rect.bottom, rect.right, rect.bottom, output);
-
-                if (output.result === true)
-                {
-                    return output;
-                }
-
-                //  Right of the Rectangle vs the Line
-                Intersect.lineToRawSegment(seg, rect.right, rect.y, rect.right, rect.bottom, output);
-
-                return output;
-
-            }
-
-            return output;
-
-        }
-
-        /**
-	    * -------------------------------------------------------------------------------------------
-	    * Ray
-	    * -------------------------------------------------------------------------------------------
-	    **/
-
-        /**
-	    * Check to see if a Ray intersects at any point with a Rectangle.
-        * 
-	    * @method rayToRectangle
-	    * @param ray {Kiwi.Geom.Ray} The Ray object to check. 
-	    * @param rect {Kiwi.Geom.Rectangle} The Rectangle to check.
-	    * @param [output] {Kiwi.Geom.IntersectResult} An optional IntersectResult object to store the intersection values in. One is created if none given.
-	    * @return {Kiwi.Geom.IntersectResult} An IntersectResult object containing the results of this intersection
-	    * @public
-        * @static
-        */
-        static rayToRectangle(ray: Ray, rect: Rectangle, output: IntersectResult = new IntersectResult): IntersectResult {
-
-            //  Currently just finds first intersection - might not be closest to ray pt1
-            Intersect.lineToRectangle(ray, rect, output);
-
-            return output;
-
-        }
-
-        /**
-        * Check whether a Ray intersects a Line segment, returns the parametric value where the intersection occurs.
-        * Note: The Line only exists between its two points.
-        * 
-        * @method rayToLineSegment
-        * @static
-        * @param rayx1 {Number} The origin point of the ray on the x axis.
-        * @param rayy1 {Number} The origin point of the ray on the y axis.
-        * @param rayx2 {Number} The direction of the ray on the x axis. 
-        * @param rayy2 {Number} The direction of the ray on the y axis.
-        * @param linex1 {Number} The x of the first point of the line segment.
-        * @param liney1 {Number} The y of the first point of the line segment.
-        * @param linex2 {Number} The x of the second point of the line segment.
-        * @param liney2 {Number} The y of the second point of the line segment.
-	    * @param [output] {Kiwi.Geom.IntersectResult} An optional IntersectResult object to store the intersection values in. One is created if none given.
-	    * @return {Kiwi.Geom.IntersectResult} An IntersectResult object containing the results of this intersection stored in x
-        * @public
-        */
-        static rayToLineSegment(rayx1, rayy1, rayx2, rayy2, linex1, liney1, linex2, liney2, output: IntersectResult = new IntersectResult): IntersectResult {
-
-            var r, s, d;
-
-            // Check lines are not parallel
-            if ((rayy2 - rayy1) / (rayx2 - rayx1) != (liney2 - liney1) / (linex2 - linex1))
-            {
-                d = (((rayx2 - rayx1) * (liney2 - liney1)) - (rayy2 - rayy1) * (linex2 - linex1));
-
-                if (d != 0)
-                {
-                    r = (((rayy1 - liney1) * (linex2 - linex1)) - (rayx1 - linex1) * (liney2 - liney1)) / d;
-                    s = (((rayy1 - liney1) * (rayx2 - rayx1)) - (rayx1 - linex1) * (rayy2 - rayy1)) / d;
-
-                    if (r >= 0)
-                    {
-                        if (s >= 0 && s <= 1)
-                        {
-                            output.result = true;
-                            output.x = rayx1 + r * (rayx2 - rayx1), rayy1 + r * (rayy2 - rayy1);
-                        }
-                    }
-                }
-            }
-
-            return output;
-
-        }
-
-        /**
-	    * -------------------------------------------------------------------------------------------
-	    * Circle
-	    * -------------------------------------------------------------------------------------------
-	    **/
-
-        /**
-	    * Check if the two given Circle objects intersect at any point.
-        * 
-	    * @method circleToCircle
-	    * @param circle1 {Kiwi.Geom.Circle} The first circle object to check.
-	    * @param circle2 {Kiwi.Geom.Circle} The second circle object to check.
-	    * @param [output] {Kiwi.Geom.IntersectResult} An optional IntersectResult object to store the intersection values in. One is created if none given.
-	    * @return {Kiwi.Geom.IntersectResult} An IntersectResult object containing the results of this intersection
-	    * @public
-        * @static
-        */
-        static circleToCircle(circle1: Circle, circle2: Circle, output: IntersectResult = new IntersectResult): IntersectResult {
-
-            output.result = ((circle1.radius + circle2.radius) * (circle1.radius + circle2.radius)) >= Intersect.distanceSquared(circle1.x, circle1.y, circle2.x, circle2.y);
-
-            return output;
-
-        }
-
-        /**
-	    * Check if a Circle and a Rectangle intersect with each other at any point. 
-        * 
-	    * @method circleToRectangle
-	    * @param circle {Kiwi.Geom.Circle} The circle object to check.
-	    * @param rect {Kiwi.Geom.Rectangle} The Rectangle object to check.
-	    * @param [output] {Kiwi.Geom.IntersectResult} An optional IntersectResult object to store the intersection values in. One is created if none given.
-	    * @return {Kiwi.Geom.IntersectResult} An IntersectResult object containing the results of this intersection
-	    * @public
-        * @static
-        */
-        static circleToRectangle(circle: Circle, rect: Rectangle, output: IntersectResult = new IntersectResult): IntersectResult {
-
-            var inflatedRect: Rectangle = rect.clone();
-
-            inflatedRect.inflate(circle.radius, circle.radius);
-
-            output.result = inflatedRect.contains(circle.x, circle.y);
-
-            return output;
-
-        }
-
-        /**
-	    * Check if the given Point is found within the given Circle.
-        * 
-	    * @method circleContainsPoint
-	    * @param circle {Kiwi.Geom.Circle} The circle object to check
-	    * @param point {Kiwi.Geom.Point} The point object to check
-	    * @param [output] {Kiwi.Geom.IntersectResult} An optional IntersectResult object to store the intersection values in. One is created if none given.
-	    * @return {Kiwi.Geom.IntersectResult} An IntersectResult object containing the results of this intersection
-	    * @public
-        * @static
-        */
-        static circleContainsPoint(circle: Circle, point: Point, output: IntersectResult = new IntersectResult): IntersectResult {
-
-            output.result = circle.radius * circle.radius >= Intersect.distanceSquared(circle.x, circle.y, point.x, point.y);
-
-            return output;
-
-        }
-
-        /**
-	    * -------------------------------------------------------------------------------------------
-	    * Rectangles
-	    * -------------------------------------------------------------------------------------------
-	    **/
-
-        /**
-        * Determines whether the specified point is contained within a given Rectangle object.
-        * 
-        * @method pointToRectangle
-        * @param point {Kiwi.Geom.Point} The point object being checked.
-        * @param rect {Kiwi.Geom.Rectangle} The rectangle object being checked.
-	    * @param [output] {Kiwi.Geom.IntersectResult}  An optional IntersectResult object to store the intersection values in. One is created if none given.
-        * @return {Kiwi.Geom.IntersectResult} An IntersectResult object containing the results of this intersection in x/y/result
-        * @public
-        * @static
-        */
-        static pointToRectangle(point: Point, rect: Rectangle, output: IntersectResult = new IntersectResult): IntersectResult {
-
-            output.setTo(point.x, point.y);
-
-            output.result = rect.containsPoint(point);
-
-            return output;
-
-        }
-
-        /**
-	    * Check whether two axis aligned rectangles intersect. Return the intersecting rectangle dimensions if they do.
-        *
-	    * @method rectangleToRectangle
-	    * @param rect1 {Kiwi.Geom.Rectangle} The first Rectangle object.
-	    * @param rect2 {Kiwi.Geom.Rectangle} The second Rectangle object.
-	    * @param [output] {Kiwi.Geom.IntersectResult} An optional IntersectResult object to store the intersection values in. One is created if none given.
-	    * @return {Kiwi.Geom.IntersectResult} An IntersectResult object containing the results of this intersection in x/y/width/height
-	    * @public
-        * @static
-        */
-        static rectangleToRectangle(rect1: Rectangle, rect2: Rectangle, output: IntersectResult = new IntersectResult): IntersectResult {
-
-            var leftX = Math.max(rect1.x, rect2.x);
-            var rightX = Math.min(rect1.right, rect2.right);
-            var topY = Math.max(rect1.y, rect2.y);
-            var bottomY = Math.min(rect1.bottom, rect2.bottom);
-
-            output.setTo(leftX, topY, rightX - leftX, bottomY - topY, rightX - leftX, bottomY - topY);
-
-            var cx = output.x + output.width * .5;
-            var cy = output.y + output.height * .5;
+	/**
+	* Contains a collection of STATIC methods for determining intersections between geometric objects.
+	*
+	* May methods contained here store the results of the intersections in a 'IntersectResult' Object, 
+	* which is either created for you (by the methods which require it) OR you can pass one to use instead. 
+	* 
+	* If you are using the Intersect methods a lot, you may want to consider
+	* creating a IntersectResult class a reusing it (by passing it to the methods on the Intersect class)
+	* instead of having new IntersectResults created.
+	* 
+	* @class Intersect
+	* @namespace Kiwi.Geom
+	* @static
+	*/
+	export class Intersect {
+
+		/**
+		* The type of this object.
+		* @method objType
+		* @return {String} "Intersect"
+		* @public
+		*/
+		public objType() {
+			return "Intersect";
+		}
+
+		/**
+		* -------------------------------------------------------------------------------------------
+		* Distance
+		* -------------------------------------------------------------------------------------------
+		**/
+
+		/** 
+		* Returns the distance between two sets of coordinates that you specify. 
+		* @method distance
+		* @param x1 {Number} The x position of the first coordinate.
+		* @param y1 {Number} The y position of the first coordinate.
+		* @param x2 {Number} The x position of the second coordinate.
+		* @param y2 {Number} The y position of the second coordinate.
+		* @return {Number} The distance between the two points.
+		* @public
+		* @static
+		*/
+		static distance(x1: number, y1: number, x2: number, y2: number) {
+			return Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
+		}
+
+		/** 
+		* Returns the distance squared between two sets of coordinates that you specify. 
+		*
+		* @method distanceSquared
+		* @param x1 {Number} The x position of the first coordinate.
+		* @param y1 {Number} The y position of the first coordinate.
+		* @param x2 {Number} The x position of the second coordinate.
+		* @param y2 {Number} The y position of the second coordinate.
+		* @return {Number} The distance between the two points squared.
+		* @public
+		* @static
+		*/
+		static distanceSquared(x1: number, y1: number, x2: number, y2: number) {
+			return (x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1);
+		}
+
+		/**
+		* -------------------------------------------------------------------------------------------
+		* Lines
+		* -------------------------------------------------------------------------------------------
+		**/
+
+		/**
+		* Check to see if any two Lines intersect at any point. 
+		* Both lines are treated as if they extend infintely through space.
+		*
+		* @method lineToLine
+		* @param line1 {Kiwi.Geom.Line} The first line object to check.
+		* @param line2 {Kiwi.Geom.Line} The second line object to check.
+		* @param [output] {Kiwi.Geom.IntersectResult} An optional IntersectResult object to store the intersection values in. One is created if none given.
+		* @return {Kiwi.Geom.IntersectResult} An IntersectResult object containing the results of this intersection in x/y
+		* @public
+		* @static
+		*/
+		static lineToLine(line1: Line, line2: Line, output: IntersectResult = new IntersectResult): IntersectResult {
+
+			var denom = (line1.x1 - line1.x2) * (line2.y1 - line2.y2) - (line1.y1 - line1.y2) * (line2.x1 - line2.x2);
+
+			if (denom !== 0)
+			{
+				output.result = true;
+				output.x = ((line1.x1 * line1.y2 - line1.y1 * line1.x2) * (line2.x1 - line2.x2) - (line1.x1 - line1.x2) * (line2.x1 * line2.y2 - line2.y1 * line2.x2)) / denom;
+				output.y = ((line1.x1 * line1.y2 - line1.y1 * line1.x2) * (line2.y1 - line2.y2) - (line1.y1 - line1.y2) * (line2.x1 * line2.y2 - line2.y1 * line2.x2)) / denom;
+			}
+
+			return output;
+		}
+
+		/**
+		* Check to see if a Line and a Line Segment intersect at any point. 
+		* Note: The first line passed is treated as if it extends infinately though space, 
+		* The second is treated as if it only exists between its two points.
+		*
+		* @method lineToLineSegment
+		* @param line1 {Kiwi.Geom.Line} The first line to check. This is the one that will extend through space infinately.
+		* @param seg {Kiwi.Geom.Line} The second line to check. This is the one that will only exist between its two coordinates.
+		* @param [output] {Kiwi.Geom.IntersectResult} An optional IntersectResult object to store the intersection values in. One is created if none given.
+		* @return {Kiwi.Geom.IntersectResult} An IntersectResult object containing the results of this intersection.
+		* @public
+		* @static
+		*/
+		static lineToLineSegment(line1: Line, seg: Line, output: IntersectResult = new IntersectResult): IntersectResult {
+
+			var denom = (line1.x1 - line1.x2) * (seg.y1 - seg.y2) - (line1.y1 - line1.y2) * (seg.x1 - seg.x2);
+
+			if (denom !== 0)
+			{
+				output.x = ((line1.x1 * line1.y2 - line1.y1 * line1.x2) * (seg.x1 - seg.x2) - (line1.x1 - line1.x2) * (seg.x1 * seg.y2 - seg.y1 * seg.x2)) / denom;
+				output.y = ((line1.x1 * line1.y2 - line1.y1 * line1.x2) * (seg.y1 - seg.y2) - (line1.y1 - line1.y2) * (seg.x1 * seg.y2 - seg.y1 * seg.x2)) / denom;
+
+				var maxX = Math.max(seg.x1, seg.x2);
+				var minX = Math.min(seg.x1, seg.x2);
+				var maxY = Math.max(seg.y1, seg.y2);
+				var minY = Math.min(seg.y1, seg.y2);
+
+				//if (!(output.x <= maxX && output.x >= minX) || !(output.y <= maxY && output.y >= minY))
+				if ((output.x <= maxX && output.x >= minX) === true || (output.y <= maxY && output.y >= minY) === true)
+				{
+					output.result = true;
+				}
+
+			}
+
+			return output;
+
+		}
+
+		/**
+		* Checks to see if a Line that is passed, intersects at any point with a Line that is made by passing a set of coordinates to this method. 
+		* Note: The first line will extend infinately through space. 
+		* And the second line will only exist between the two points passed.
+		*
+		* @method lineToRawSegment
+		* @param line {Kiwi.Geom.Line} The line object that extends infinatly through space.
+		* @param x1 {number} The x coordinate of the first point in the second line.
+		* @param y1 {number} The y coordinate of the first point in the second line.
+		* @param x2 {number} The x coordinate of the second point in the second line.
+		* @param y2 {number} The y coordinate of the second point in the second line.
+		* @param [output] {Kiwi.Geom.IntersectResult} An optional IntersectResult object to store the intersection values in. One is created if none given.
+		* @return {Kiwi.Geom.IntersectResult} An IntersectResult object containing the results of this intersection in x/y
+		* @static
+		* @public
+		*/
+		static lineToRawSegment(line: Line, x1: number, y1: number, x2: number, y2: number, output: IntersectResult = new IntersectResult): IntersectResult {
+
+			var denom = (line.x1 - line.x2) * (y1 - y2) - (line.y1 - line.y2) * (x1 - x2);
+
+			if (denom !== 0)
+			{
+				output.x = ((line.x1 * line.y2 - line.y1 * line.x2) * (x1 - x2) - (line.x1 - line.x2) * (x1 * y2 - y1 * x2)) / denom;
+				output.y = ((line.x1 * line.y2 - line.y1 * line.x2) * (y1 - y2) - (line.y1 - line.y2) * (x1 * y2 - y1 * x2)) / denom;
+
+				var maxX = Math.max(x1, x2);
+				var minX = Math.min(x1, x2);
+				var maxY = Math.max(y1, y2);
+				var minY = Math.min(y1, y2);
+
+				if ((output.x <= maxX && output.x >= minX) === true || (output.y <= maxY && output.y >= minY) === true)
+				{
+					output.result = true;
+				}
+
+			}
+
+			return output;
+
+		}
+
+		/**
+		* Checks to see if a Line and Ray object intersects at any point. 
+		* Note: The line in this case extends infinately through space. 
+		* 
+		* @method lineToRay
+		* @param line1 {Kiwi.Geom.Line} The Line object that extends infinatly through space.
+		* @param ray {Kiwi.Geom.Ray} The Ray object that you want to check it against.
+		* @param [output] {Kiwi.Geom.IntersectResult} An optional IntersectResult object to store the intersection values in. One is created if none given.
+		* @return {Kiwi.Geom.IntersectResult} An IntersectResult object containing the results of this intersection in x/y
+		* @public
+		* @static
+		*/
+		static lineToRay(line1: Line, ray: Ray, output: IntersectResult = new IntersectResult): IntersectResult {
+
+			var denom = (line1.x1 - line1.x2) * (ray.y1 - ray.y2) - (line1.y1 - line1.y2) * (ray.x1 - ray.x2);
+
+			if (denom !== 0)
+			{
+				output.x = ((line1.x1 * line1.y2 - line1.y1 * line1.x2) * (ray.x1 - ray.x2) - (line1.x1 - line1.x2) * (ray.x1 * ray.y2 - ray.y1 * ray.x2)) / denom;
+				output.y = ((line1.x1 * line1.y2 - line1.y1 * line1.x2) * (ray.y1 - ray.y2) - (line1.y1 - line1.y2) * (ray.x1 * ray.y2 - ray.y1 * ray.x2)) / denom;
+				output.result = true; // true unless either of the 2 following conditions are met
+
+				if (!(ray.x1 >= ray.x2) && output.x < ray.x1)
+				{
+					output.result = false;
+				}
+
+				if (!(ray.y1 >= ray.y2) && output.y < ray.y1)
+				{
+					output.result = false;
+				}
+			}
+
+			return output;
+
+		}
+
+		/**
+		* Checks to see if a Line and a Circle intersect at any point.
+		* Note: The line passed is assumed to extend infinately through space. 
+		*
+		* @method lineToCircle
+		* @param line {Kiwi.Geom.Line} The Line object that you want to check it against.
+		* @param circle {Kiwi.Geom.Circle} The Circle object to check.
+		* @param [output] {IntersectResult} An optional IntersectResult object to store the intersection values in. One is created if none given.
+		* @return {Kiwi.Geom.IntersectResult} An IntersectResult object containing the results of this intersection
+		* @public
+		* @static
+		*/
+		static lineToCircle(line: Line, circle: Circle, output: IntersectResult = new IntersectResult): IntersectResult {
+
+			//  Get a perpendicular line running to the center of the circle
+			if (line.perp(circle.x, circle.y).length <= circle.radius)
+			{
+				output.result = true;
+			}
+
+			return output;
+
+		}
+
+		/**
+		* Check if the Line intersects with each side of a Rectangle.
+		* Note: The Line is assumned to extend infinately through space.
+		* 
+		* @method lineToRectangle
+		* @param line {Kiwi.Geom.Line} The Line object to check
+		* @param rectangle {Kiwi.Geom.Rectangle} The Rectangle object to check
+		* @param [output] {Kiwi.Geom.IntersectResult} An optional IntersectResult object to store the intersection values in. One is created if none given.
+		* @return {Kiwi.Geom.IntersectResult} An IntersectResult object containing the results of this intersection
+		* @public
+		* @static
+		*/
+		static lineToRectangle(line: any, rect: Rectangle, output: IntersectResult = new IntersectResult): IntersectResult {
+
+			//  Top of the Rectangle vs the Line
+			Intersect.lineToRawSegment(line, rect.x, rect.y, rect.right, rect.y, output);
+
+			if (output.result === true)
+			{
+				return output;
+			}
+
+			//  Left of the Rectangle vs the Line
+			Intersect.lineToRawSegment(line, rect.x, rect.y, rect.x, rect.bottom, output);
+
+			if (output.result === true)
+			{
+				return output;
+			}
+
+			//  Bottom of the Rectangle vs the Line
+			Intersect.lineToRawSegment(line, rect.x, rect.bottom, rect.right, rect.bottom, output);
+
+			if (output.result === true)
+			{
+				return output;
+			}
+
+			//  Right of the Rectangle vs the Line
+			Intersect.lineToRawSegment(line, rect.right, rect.y, rect.right, rect.bottom, output);
+
+			return output;
+
+		}
+
+		/**
+		* -------------------------------------------------------------------------------------------
+		* Line Segment
+		* -------------------------------------------------------------------------------------------
+		**/
+
+		/**
+		* Checks to see if two Line Segments intersect at any point in space. 
+		* Note: Both lines are treated as if they only exist between their two line coordinates.
+		* 
+		* @method lineSegmentToLineSegment
+		* @param line1 {Kiwi.Geom.Line} The first line object to check.
+		* @param line2 {Kiwi.Geom.Line} The second line object to check.
+		* @param [output]{Kiwi.Geom.IntersectResult} An optional IntersectResult object to store the intersection values in. One is created if none given.
+		* @return {Kiwi.Geom.IntersectResult} An IntersectResult object containing the results of this intersection in x/y.
+		* @public
+		* @static
+		*/
+		static lineSegmentToLineSegment(line1: Line, line2: Line, output: IntersectResult = new IntersectResult): IntersectResult {
+
+			Intersect.lineToLineSegment(line1, line2, output);
+
+			if (output.result === true)
+			{
+				if (!(output.x >= Math.min(line1.x1, line1.x2) && output.x <= Math.max(line1.x1, line1.x2)
+					&& output.y >= Math.min(line1.y1, line1.y2) && output.y <= Math.max(line1.y1, line1.y2)))
+				{
+					output.result = false;
+				}
+			}
+
+			return output;
+		}
+
+		/**
+		* Check if the Line Segment intersects with the Ray.
+		* Note: The Line only exists between its two points.
+		* 
+		* @method lineSegmentToRay
+		* @param line1 {Kiwi.Geom.Line} The Line object to check.
+		* @param ray {Kiwi.Geom.Line} The Ray object to check.
+		* @param [output] {Kiwi.Geom.IntersectResult} An optional IntersectResult object to store the intersection values in. One is created if none given.
+		* @return {Kiwi.Geom.IntersectResult} An IntersectResult object containing the results of this intersection in x/y
+		* @public
+		* @static
+		*/
+		static lineSegmentToRay(line1: Line, ray: Ray, output: IntersectResult = new IntersectResult): IntersectResult {
+
+			Intersect.lineToRay(line1, ray, output);
+
+			if (output.result === true)
+			{
+				if (!(output.x >= Math.min(line1.x1, line1.x2) && output.x <= Math.max(line1.x1, line1.x2)
+					&& output.y >= Math.min(line1.y1, line1.y2) && output.y <= Math.max(line1.y1, line1.y2)))
+				{
+					output.result = false;
+				}
+			}
+
+			return output;
+
+		}
+
+		/**
+		* Check if the Line Segment intersects with the Circle.
+		* Note the Line only exists between its point points.
+		* 
+		* @method lineSegmentToCircle
+		* @param seg {Kiwi.Geom.Line} The Line object to check
+		* @param circle {Kiwi.Geom.Circle} The Circle object to check
+		* @param [ouput] {Kiwi.Geom.IntersectResult} An optional IntersectResult object to store the intersection values in. One is created if none given.
+		* @return {Kiwi.Geom.IntersectResult} An IntersectResult object containing the results of this intersection in x/y
+		* @public
+		* @static
+		*/
+		static lineSegmentToCircle(seg: Line, circle: Circle, output: IntersectResult = new IntersectResult): IntersectResult {
+
+			var perp = seg.perp(circle.x, circle.y);
+
+			if (perp.length <= circle.radius)
+			{
+				//  Line intersects circle - check if segment does
+				var maxX = Math.max(seg.x1, seg.x2);
+				var minX = Math.min(seg.x1, seg.x2);
+				var maxY = Math.max(seg.y1, seg.y2);
+				var minY = Math.min(seg.y1, seg.y2);
+
+				if ((perp.x2 <= maxX && perp.x2 >= minX) && (perp.y2 <= maxY && perp.y2 >= minY))
+				{
+					output.result = true;
+				}
+				else
+				{
+					//  Worst case - segment doesn't traverse center, so no perpendicular connection.
+					if (Intersect.circleContainsPoint(circle, <Point> { x: seg.x1, y: seg.y1 }) || Intersect.circleContainsPoint(circle, <Point> { x: seg.x2, y: seg.y2 }))
+					{
+						output.result = true;
+					}
+				}
+
+			}
+
+			return output;
+		}
+
+		/**
+		* Check if the Line Segment intersects with any side of a Rectangle.
+		* Note: The Line only exists between its two points.
+		*
+		* @method lineSegmentToCircle
+		* @param seg {Kiwi.Geom.Line} The Line object to check.
+		* @param rect {Kiwi.Geom.Rectangle} The Rectangle object to check.
+		* @param [output] {Kiwi.Geom.IntersectResult} An optional IntersectResult object to store the intersection values in. One is created if none given.
+		* @return {Kiwi.Geom.IntersectResult} An IntersectResult object containing the results of this intersection in x/y.
+		* @public
+		* @static
+		*/
+		static lineSegmentToRectangle(seg: Line, rect: Rectangle, output: IntersectResult = new IntersectResult): IntersectResult {
+
+			if (rect.contains(seg.x1, seg.y1) && rect.contains(seg.x2, seg.y2))
+			{
+				output.result = true;
+			}
+			else
+			{
+				//  Top of the Rectangle vs the Line
+				Intersect.lineToRawSegment(seg, rect.x, rect.y, rect.right, rect.bottom, output);
+
+				if (output.result === true)
+				{
+					return output;
+				}
+
+				//  Left of the Rectangle vs the Line
+				Intersect.lineToRawSegment(seg, rect.x, rect.y, rect.x, rect.bottom, output);
+
+				if (output.result === true)
+				{
+					return output;
+				}
+
+				//  Bottom of the Rectangle vs the Line
+				Intersect.lineToRawSegment(seg, rect.x, rect.bottom, rect.right, rect.bottom, output);
+
+				if (output.result === true)
+				{
+					return output;
+				}
+
+				//  Right of the Rectangle vs the Line
+				Intersect.lineToRawSegment(seg, rect.right, rect.y, rect.right, rect.bottom, output);
+
+				return output;
+
+			}
+
+			return output;
+
+		}
+
+		/**
+		* -------------------------------------------------------------------------------------------
+		* Ray
+		* -------------------------------------------------------------------------------------------
+		**/
+
+		/**
+		* Check to see if a Ray intersects at any point with a Rectangle.
+		* 
+		* @method rayToRectangle
+		* @param ray {Kiwi.Geom.Ray} The Ray object to check. 
+		* @param rect {Kiwi.Geom.Rectangle} The Rectangle to check.
+		* @param [output] {Kiwi.Geom.IntersectResult} An optional IntersectResult object to store the intersection values in. One is created if none given.
+		* @return {Kiwi.Geom.IntersectResult} An IntersectResult object containing the results of this intersection
+		* @public
+		* @static
+		*/
+		static rayToRectangle(ray: Ray, rect: Rectangle, output: IntersectResult = new IntersectResult): IntersectResult {
+
+			//  Currently just finds first intersection - might not be closest to ray pt1
+			Intersect.lineToRectangle(ray, rect, output);
+
+			return output;
+
+		}
+
+		/**
+		* Check whether a Ray intersects a Line segment, returns the parametric value where the intersection occurs.
+		* Note: The Line only exists between its two points.
+		* 
+		* @method rayToLineSegment
+		* @static
+		* @param rayx1 {Number} The origin point of the ray on the x axis.
+		* @param rayy1 {Number} The origin point of the ray on the y axis.
+		* @param rayx2 {Number} The direction of the ray on the x axis. 
+		* @param rayy2 {Number} The direction of the ray on the y axis.
+		* @param linex1 {Number} The x of the first point of the line segment.
+		* @param liney1 {Number} The y of the first point of the line segment.
+		* @param linex2 {Number} The x of the second point of the line segment.
+		* @param liney2 {Number} The y of the second point of the line segment.
+		* @param [output] {Kiwi.Geom.IntersectResult} An optional IntersectResult object to store the intersection values in. One is created if none given.
+		* @return {Kiwi.Geom.IntersectResult} An IntersectResult object containing the results of this intersection stored in x
+		* @public
+		*/
+		static rayToLineSegment(rayx1, rayy1, rayx2, rayy2, linex1, liney1, linex2, liney2, output: IntersectResult = new IntersectResult): IntersectResult {
+
+			var r, s, d;
+
+			// Check lines are not parallel
+			if ((rayy2 - rayy1) / (rayx2 - rayx1) != (liney2 - liney1) / (linex2 - linex1))
+			{
+				d = (((rayx2 - rayx1) * (liney2 - liney1)) - (rayy2 - rayy1) * (linex2 - linex1));
+
+				if (d != 0)
+				{
+					r = (((rayy1 - liney1) * (linex2 - linex1)) - (rayx1 - linex1) * (liney2 - liney1)) / d;
+					s = (((rayy1 - liney1) * (rayx2 - rayx1)) - (rayx1 - linex1) * (rayy2 - rayy1)) / d;
+
+					if (r >= 0)
+					{
+						if (s >= 0 && s <= 1)
+						{
+							output.result = true;
+							output.x = rayx1 + r * (rayx2 - rayx1), rayy1 + r * (rayy2 - rayy1);
+						}
+					}
+				}
+			}
+
+			return output;
+
+		}
+
+		/**
+		* -------------------------------------------------------------------------------------------
+		* Circle
+		* -------------------------------------------------------------------------------------------
+		**/
+
+		/**
+		* Check if the two given Circle objects intersect at any point.
+		* 
+		* @method circleToCircle
+		* @param circle1 {Kiwi.Geom.Circle} The first circle object to check.
+		* @param circle2 {Kiwi.Geom.Circle} The second circle object to check.
+		* @param [output] {Kiwi.Geom.IntersectResult} An optional IntersectResult object to store the intersection values in. One is created if none given.
+		* @return {Kiwi.Geom.IntersectResult} An IntersectResult object containing the results of this intersection
+		* @public
+		* @static
+		*/
+		static circleToCircle(circle1: Circle, circle2: Circle, output: IntersectResult = new IntersectResult): IntersectResult {
+
+			output.result = ((circle1.radius + circle2.radius) * (circle1.radius + circle2.radius)) >= Intersect.distanceSquared(circle1.x, circle1.y, circle2.x, circle2.y);
+
+			return output;
+
+		}
+
+		/**
+		* Check if a Circle and a Rectangle intersect with each other at any point. 
+		* 
+		* @method circleToRectangle
+		* @param circle {Kiwi.Geom.Circle} The circle object to check.
+		* @param rect {Kiwi.Geom.Rectangle} The Rectangle object to check.
+		* @param [output] {Kiwi.Geom.IntersectResult} An optional IntersectResult object to store the intersection values in. One is created if none given.
+		* @return {Kiwi.Geom.IntersectResult} An IntersectResult object containing the results of this intersection
+		* @public
+		* @static
+		*/
+		static circleToRectangle(circle: Circle, rect: Rectangle, output: IntersectResult = new IntersectResult): IntersectResult {
+
+			var inflatedRect: Rectangle = rect.clone();
+
+			inflatedRect.inflate(circle.radius, circle.radius);
+
+			output.result = inflatedRect.contains(circle.x, circle.y);
+
+			return output;
+
+		}
+
+		/**
+		* Check if the given Point is found within the given Circle.
+		* 
+		* @method circleContainsPoint
+		* @param circle {Kiwi.Geom.Circle} The circle object to check
+		* @param point {Kiwi.Geom.Point} The point object to check
+		* @param [output] {Kiwi.Geom.IntersectResult} An optional IntersectResult object to store the intersection values in. One is created if none given.
+		* @return {Kiwi.Geom.IntersectResult} An IntersectResult object containing the results of this intersection
+		* @public
+		* @static
+		*/
+		static circleContainsPoint(circle: Circle, point: Point, output: IntersectResult = new IntersectResult): IntersectResult {
+
+			output.result = circle.radius * circle.radius >= Intersect.distanceSquared(circle.x, circle.y, point.x, point.y);
+
+			return output;
+
+		}
+
+		/**
+		* -------------------------------------------------------------------------------------------
+		* Rectangles
+		* -------------------------------------------------------------------------------------------
+		**/
+
+		/**
+		* Determines whether the specified point is contained within a given Rectangle object.
+		* 
+		* @method pointToRectangle
+		* @param point {Kiwi.Geom.Point} The point object being checked.
+		* @param rect {Kiwi.Geom.Rectangle} The rectangle object being checked.
+		* @param [output] {Kiwi.Geom.IntersectResult}  An optional IntersectResult object to store the intersection values in. One is created if none given.
+		* @return {Kiwi.Geom.IntersectResult} An IntersectResult object containing the results of this intersection in x/y/result
+		* @public
+		* @static
+		*/
+		static pointToRectangle(point: Point, rect: Rectangle, output: IntersectResult = new IntersectResult): IntersectResult {
+
+			output.setTo(point.x, point.y);
+
+			output.result = rect.containsPoint(point);
+
+			return output;
+
+		}
+
+		/**
+		* Check whether two axis aligned rectangles intersect. Return the intersecting rectangle dimensions if they do.
+		*
+		* @method rectangleToRectangle
+		* @param rect1 {Kiwi.Geom.Rectangle} The first Rectangle object.
+		* @param rect2 {Kiwi.Geom.Rectangle} The second Rectangle object.
+		* @param [output] {Kiwi.Geom.IntersectResult} An optional IntersectResult object to store the intersection values in. One is created if none given.
+		* @return {Kiwi.Geom.IntersectResult} An IntersectResult object containing the results of this intersection in x/y/width/height
+		* @public
+		* @static
+		*/
+		static rectangleToRectangle(rect1: Rectangle, rect2: Rectangle, output: IntersectResult = new IntersectResult): IntersectResult {
+
+			var leftX = Math.max(rect1.x, rect2.x);
+			var rightX = Math.min(rect1.right, rect2.right);
+			var topY = Math.max(rect1.y, rect2.y);
+			var bottomY = Math.min(rect1.bottom, rect2.bottom);
+
+			output.setTo(leftX, topY, rightX - leftX, bottomY - topY, rightX - leftX, bottomY - topY);
+
+			var cx = output.x + output.width * .5;
+			var cy = output.y + output.height * .5;
 
-            if ((cx > rect1.x && cx < rect1.right) && (cy > rect1.y && cy < rect1.bottom))
-            {
-                output.result = true;
-            }
-
-            return output;
-
-        }
-
-    }
-
-}
\ No newline at end of file
+			if ((cx > rect1.x && cx < rect1.right) && (cy > rect1.y && cy < rect1.bottom))
+			{
+				output.result = true;
+			}
+
+			return output;
+
+		}
+
+	}
+
+}
diff --git a/src/geom/IntersectResult.ts b/src/geom/IntersectResult.ts
index ff377a2..a1a3179 100644
--- a/src/geom/IntersectResult.ts
+++ b/src/geom/IntersectResult.ts
@@ -6,136 +6,136 @@
 
 module Kiwi.Geom {
 
-    /**
-    * A Lightweight object to hold the results of an Intersection. 
-    * Used in combination with the STATIC methods on the Intersect class.
-    *
-    * If you are using the Intersect methods a lot, you may want to consider
-    * creating a IntersectResult class a reusing it (by passing it to the methods on the Intersect class)
-    * instead of having new IntersectResults created.
-    * 
-    *
-    * @class IntersectResult
-    * @namespace Kiwi.Geom
-    * @constructor
-    */
-    export class IntersectResult {
-
-        /**
-        * The type of object this is.
-        * @method objType
-        * @return {String} "IntersectResult"
-        * @public
-        */
-        public objType() {
-            return "IntersectResult";
-        }
-
-        /**
-        * Holds the result of an Intersection between two geometric items.
-        * TRUE means an Intersection did occur and FALSE means not. 
-        * @property result
-        * @type boolean
-        * @default false
-        * @public
-        */
-        public result: boolean = false;
-
-        /**
-        * Holds the x coordinate of the point in which the Intersection occured.
-        * Note: This is only set in the case the TWO geometric items are either Lines or Rays (Line like in function)
-        * and a Intersection occured.
-        * @property x
-        * @type Number
-        * @public
-        */
-        public x: number;
-
-        /**
-        * Holds the y coordinate of the point in which the Intersection occured.
-        * Note: This is only set in the case the TWO geometric items are either Lines or Rays (Line like in function)
-        * and a Intersection occured.
-        * @property y
-        * @type Number
-        * @public
-        */
-        public y: number;
-
-        /**
-        * [CURRENTLY NOT IN USE]
-        * @property x1
-        * @type Number
-        * @public
-        */
-        public x1: number;
-
-        /**
-        * [CURRENTLY NOT IN USE]
-        * @property y1
-        * @type Number
-        * @public
-        */
-        public y1: number;
-
-        /**
-        * [CURRENTLY NOT IN USE]
-        * @property x2
-        * @type Number
-        * @public
-        */
-        public x2: number;
-
-        /**
-        * [CURRENTLY NOT IN USE]
-        * @property y2
-        * @type Number
-        * @public
-        */
-        public y2: number;
-
-        /**
-        * [CURRENTLY NOT IN USE]
-        * @property width
-        * @type Number
-        * @public
-        */
-        public width: number;
-
-        /**
-        * [CURRENTLY NOT IN USE]
-        * @property height
-        * @type Number
-        * @public
-        */
-        public height: number;
-
-        /**
-        * Sets the coordinates of the points based on the parameters passed.
-        * @method setTo
-        * @param {Number} x1
-        * @param {Number} y1
-        * @param {Number} [x2=0]
-        * @param {Number} [y2=0]
-        * @param {Number} [width=0]
-        * @param {Number} [height=0]
-        * @public
-        */
-        public setTo(x1: number, y1: number, x2: number = 0, y2: number = 0, width: number = 0, height: number = 0) {
-
-            this.x = x1;
-            this.y = y1;
-
-            this.x1 = x1;
-            this.y1 = y1;
-
-            this.x2 = x2;
-            this.y2 = y2;
-
-            this.width = width;
-            this.height = height;
-
-        }
-
-    }
+	/**
+	* A Lightweight object to hold the results of an Intersection. 
+	* Used in combination with the STATIC methods on the Intersect class.
+	*
+	* If you are using the Intersect methods a lot, you may want to consider
+	* creating a IntersectResult class a reusing it (by passing it to the methods on the Intersect class)
+	* instead of having new IntersectResults created.
+	* 
+	*
+	* @class IntersectResult
+	* @namespace Kiwi.Geom
+	* @constructor
+	*/
+	export class IntersectResult {
+
+		/**
+		* The type of object this is.
+		* @method objType
+		* @return {String} "IntersectResult"
+		* @public
+		*/
+		public objType() {
+			return "IntersectResult";
+		}
+
+		/**
+		* Holds the result of an Intersection between two geometric items.
+		* TRUE means an Intersection did occur and FALSE means not. 
+		* @property result
+		* @type boolean
+		* @default false
+		* @public
+		*/
+		public result: boolean = false;
+
+		/**
+		* Holds the x coordinate of the point in which the Intersection occured.
+		* Note: This is only set in the case the TWO geometric items are either Lines or Rays (Line like in function)
+		* and a Intersection occured.
+		* @property x
+		* @type Number
+		* @public
+		*/
+		public x: number;
+
+		/**
+		* Holds the y coordinate of the point in which the Intersection occured.
+		* Note: This is only set in the case the TWO geometric items are either Lines or Rays (Line like in function)
+		* and a Intersection occured.
+		* @property y
+		* @type Number
+		* @public
+		*/
+		public y: number;
+
+		/**
+		* [CURRENTLY NOT IN USE]
+		* @property x1
+		* @type Number
+		* @public
+		*/
+		public x1: number;
+
+		/**
+		* [CURRENTLY NOT IN USE]
+		* @property y1
+		* @type Number
+		* @public
+		*/
+		public y1: number;
+
+		/**
+		* [CURRENTLY NOT IN USE]
+		* @property x2
+		* @type Number
+		* @public
+		*/
+		public x2: number;
+
+		/**
+		* [CURRENTLY NOT IN USE]
+		* @property y2
+		* @type Number
+		* @public
+		*/
+		public y2: number;
+
+		/**
+		* [CURRENTLY NOT IN USE]
+		* @property width
+		* @type Number
+		* @public
+		*/
+		public width: number;
+
+		/**
+		* [CURRENTLY NOT IN USE]
+		* @property height
+		* @type Number
+		* @public
+		*/
+		public height: number;
+
+		/**
+		* Sets the coordinates of the points based on the parameters passed.
+		* @method setTo
+		* @param {Number} x1
+		* @param {Number} y1
+		* @param {Number} [x2=0]
+		* @param {Number} [y2=0]
+		* @param {Number} [width=0]
+		* @param {Number} [height=0]
+		* @public
+		*/
+		public setTo(x1: number, y1: number, x2: number = 0, y2: number = 0, width: number = 0, height: number = 0) {
+
+			this.x = x1;
+			this.y = y1;
+
+			this.x1 = x1;
+			this.y1 = y1;
+
+			this.x2 = x2;
+			this.y2 = y2;
+
+			this.width = width;
+			this.height = height;
+
+		}
+
+	}
 
 }
diff --git a/src/geom/Line.ts b/src/geom/Line.ts
index 85a1484..f464c86 100644
--- a/src/geom/Line.ts
+++ b/src/geom/Line.ts
@@ -6,314 +6,314 @@
 
 module Kiwi.Geom {
 
-    /**
-    * A Line object has two meanings depending on the situation you need. 
-    * Either an infinte line through space (this is the usual meaning of a Line) 
-    * OR it can be a Line Segment which just exists between the TWO points you specify. 
-    *
-    * @class Line
-    * @namespace Kiwi.Geom
-    * @constructor
-    * @param [x1=0] {Number} Starting location of the line on the x-axis.
-    * @param [y1=0] {Number} Starting location of the line on the y-axis.
-    * @param [x2=0] {Number} End location of the line on the x-axis.
-    * @param [y2=0] {Number} End location of the line on the y-axis.
-    * @return {Kiwi.Geom.Line} This Object
-    *
-    */
-    export class Line {
-         
-        constructor(x1: number = 0, y1: number = 0, x2: number = 0, y2: number = 0) {
-
-            this.setTo(x1, y1, x2, y2);
-
-        }
-
-        /**
-        * Returns the type of this object
-        * @method objType
-        * @return {string} "Line"
-        * @public
-        */
-        public objType() {
-            return "Line";
-        }
-
-        /**
-        * X position of first point on the line.
-        * @property x1
-        * @type Number
-        * @public
-        */
-        public x1: number = 0;
-
-        /**
-        * Y position of first point on the line.
-        * @property y1
-        * @type Number
-        * @public
-        */
-        public y1: number = 0;
-
-        /**
-        * X position of second point.
-        * @property x2
-        * @type Number
-        * @public
-        */
-        public x2: number = 0;
-
-        /**
-        * Y position of second point.
-        * @property y2
-        * @type Number
-        * @public
-        */
-        public y2: number = 0;
-
-        /**
-        * Makes a clone of this Line. 
-        * The clone can either be a new Line Object, 
-        * Otherwise you can pass a existing Line Object that you want to be a clone of this one.
-        *
-        * @method clone
-        * @param [output=Line] {Kiwi.Geom.Line}
-        * @return {Kiwi.Geom.Line}
-        * @public
-        */
-        public clone(output: Line = new Line): Line {
-
-            return output.setTo(this.x1, this.y1, this.x2, this.y2);
-
-        }
-
-        /**
-        * Make this Line a copy of another passed Line.
-        * @method copyFrom 
-        * @param source {Kiwi.Geom.Line} source
-        * @return {Kiwi.Geom.Line}
-        * @public
-        */
-        public copyFrom(source: Line): Line {
-
-            return this.setTo(source.x1, source.y1, source.x2, source.y2);
-
-        }
-
-        /**
-        * Make another passed Line a copy of this one.
-        * @method copyTo
-        * @param target {Kiwi.Geom.Line} target
-        * @return {Kiwi.Geom.Line}
-        * @public
-        */
-        public copyTo(target: Line): Line {
-
-            return target.copyFrom(this);
-
-        }
-
-        /**
-        * Used to set all components on the line.
-        * @method setTo
-        * @param [x1=0]{Number} X component of first point.
-        * @param [y1=0]{Number} Y component of first point.
-        * @param [x2=0]{Number} X component of second point.
-        * @param [y2=0]{Number} Y component of second point.
-        * @return {Kiwi.Geom.Line}
-        * @public
-        */
-        public setTo(x1: number = 0, y1: number = 0, x2: number = 0, y2: number = 0): Line {
-
-            this.x1 = x1;
-            this.y1 = y1;
-            this.x2 = x2;
-            this.y2 = y2;
-
-            return this;
-
-        }
-
-        /**
-        * Get the length of the Line as a Line Segment.
-        * @property length
-        * @type number
-        * @readOnly
-        * @public
-        */
-        public get length(): number {
-
-            return Math.sqrt((this.x2 - this.x1) * (this.x2 - this.x1) + (this.y2 - this.y1) * (this.y2 - this.y1));
-
-        }
-
-        /**
-        * Get the y of a point on the line for a given x.
-        * @method getY
-        * @param x {Number} 
-        * @return {Number}
-        * @public
-        */
-        public getY(x: number): number {
-            if (this.x1 == this.x2)
-                return null;
-            else
-            return this.slope * x + this.yIntercept;
-
-        }
-
-        /**
-        * Get the angle of the line.
-        * @property angle 
-        * @type Number
-        * @readOnly
-        * @public
-        */
-        public get angle(): number {
-
-            return Math.atan2(this.y2 - this.y1, this.x2 - this.x1);
-
-        }
-
-        /**
-        * Get the slope of the line (y/x).
-        * @property slope
-        * @type Number
-        * @readOnly
-        * @public
-        */
-        public get slope(): number {
-
-            return (this.y2 - this.y1) / (this.x2 - this.x1);
-
-        }
-
-        /**
-        * Get the perpendicular slope of the line (x/y).
-        * @propery perpSlope
-        * @type Number
-        * @readOnly
-        * @public
-        */
-        public get perpSlope(): number {
-
-            return -((this.x2 - this.x1) / (this.y2 - this.y1));
-
-        }
-
-        /**
-        * Get the y intercept for the line.
-        * @property yIntercept
-        * @type Number
-        * @readOnly
-        * @public
-        */
-        public get yIntercept(): number {
-
-            return (this.y1 - this.slope * this.x1);
-
-        }
-
-        /**
-        * Check if a point is on the line.
-        * @method isPointOnLine
-        * @param x {Number}
-        * @param y {Number}
-        * @return {boolean}
-        * @public
-        */
-        public isPointOnLine(x: number, y: number): boolean {
-
-            if ((x - this.x1) * (this.y2 - this.y1) === (this.x2 - this.x1) * (y - this.y1))
-            {
-                return true;
-            }
-            else
-            {
-                return false;
-            }
-
-        }
-
-        /**
-        * Check if the point is both on the line and within the line segment.
-        * @method isPointOnLineSegment
-        * @param x {Number}
-        * @param y {Number}
-        * @return {boolean}
-        * @public
-        */
-        public isPointOnLineSegment(x: number, y: number): boolean {
-
-            var xMin = Math.min(this.x1, this.x2);
-            var xMax = Math.max(this.x1, this.x2);
-            var yMin = Math.min(this.y1, this.y2);
-            var yMax = Math.max(this.y1, this.y2);
-
-            if (this.isPointOnLine(x, y) && (x >= xMin && x <= xMax) && (y >= yMin && y <= yMax))
-            {
-                return true;
-            }
-            else
-            {
-                return false;
-            }
-
-        }
-
-        /**
-        * Check to see if this Line object intersects at any point with a passed Line.
-        * Note: Both are treated as extending infinately through space.
-        * Functions as an alias for the 'Kiwi.Geom.Intersect.lineToLine' method.
-        *
-        * @method intersectLineLine
-        * @param line {Kiwi.Geom.Line} The line you want to check for a Intersection with.
-        * @return {Kiwi.Geom.IntersectResult} The Intersect Result containing the collision information.
-        * @public
-        */
-        public intersectLineLine(line): IntersectResult {
-            return Kiwi.Geom.Intersect.lineToLine(this,line);
-        }
-
-        /**
-        * Get a line perpendicular to the line passing through a given point.
-        *
-        * @method perp
-        * @param x {Number} 
-        * @param y {Number} 
-        * @param [output] {Kiwi.Geom.Line} The line object that the result should be output to. Creates a new Line if one is not passed. 
-        * @return {Kiwi.Geom.Line}
-        * @public
-        */
-        public perp(x: number, y: number, output: Line=new Line): Line {
-
-            if (this.y1 === this.y2) {
-                
-                output.setTo(x, y, x, this.y1);
-            }
-
-            var yInt: number = (y - this.perpSlope * x);
-
-            var pt: any = this.intersectLineLine({ x1: x, y1: y, x2: 0, y2: yInt });
-
-            output.setTo(x, y, pt.x, pt.y);
-
-            return output;
-
-        }
-
-        /**
-        * Get a string representation of the line.
-        * @method toString
-        * @return {String}
-        * @public
-        */
-        public toString(): string {
-
-            return "[{Line (x1=" + this.x1 + " y1=" + this.y1 + " x2=" + this.x2 + " y2=" + this.y2 + ")}]";
-
-        }
-
-    }
-
-}
\ No newline at end of file
+	/**
+	* A Line object has two meanings depending on the situation you need. 
+	* Either an infinte line through space (this is the usual meaning of a Line) 
+	* OR it can be a Line Segment which just exists between the TWO points you specify. 
+	*
+	* @class Line
+	* @namespace Kiwi.Geom
+	* @constructor
+	* @param [x1=0] {Number} Starting location of the line on the x-axis.
+	* @param [y1=0] {Number} Starting location of the line on the y-axis.
+	* @param [x2=0] {Number} End location of the line on the x-axis.
+	* @param [y2=0] {Number} End location of the line on the y-axis.
+	* @return {Kiwi.Geom.Line} This Object
+	*
+	*/
+	export class Line {
+		 
+		constructor(x1: number = 0, y1: number = 0, x2: number = 0, y2: number = 0) {
+
+			this.setTo(x1, y1, x2, y2);
+
+		}
+
+		/**
+		* Returns the type of this object
+		* @method objType
+		* @return {string} "Line"
+		* @public
+		*/
+		public objType() {
+			return "Line";
+		}
+
+		/**
+		* X position of first point on the line.
+		* @property x1
+		* @type Number
+		* @public
+		*/
+		public x1: number = 0;
+
+		/**
+		* Y position of first point on the line.
+		* @property y1
+		* @type Number
+		* @public
+		*/
+		public y1: number = 0;
+
+		/**
+		* X position of second point.
+		* @property x2
+		* @type Number
+		* @public
+		*/
+		public x2: number = 0;
+
+		/**
+		* Y position of second point.
+		* @property y2
+		* @type Number
+		* @public
+		*/
+		public y2: number = 0;
+
+		/**
+		* Makes a clone of this Line. 
+		* The clone can either be a new Line Object, 
+		* Otherwise you can pass a existing Line Object that you want to be a clone of this one.
+		*
+		* @method clone
+		* @param [output=Line] {Kiwi.Geom.Line}
+		* @return {Kiwi.Geom.Line}
+		* @public
+		*/
+		public clone(output: Line = new Line): Line {
+
+			return output.setTo(this.x1, this.y1, this.x2, this.y2);
+
+		}
+
+		/**
+		* Make this Line a copy of another passed Line.
+		* @method copyFrom 
+		* @param source {Kiwi.Geom.Line} source
+		* @return {Kiwi.Geom.Line}
+		* @public
+		*/
+		public copyFrom(source: Line): Line {
+
+			return this.setTo(source.x1, source.y1, source.x2, source.y2);
+
+		}
+
+		/**
+		* Make another passed Line a copy of this one.
+		* @method copyTo
+		* @param target {Kiwi.Geom.Line} target
+		* @return {Kiwi.Geom.Line}
+		* @public
+		*/
+		public copyTo(target: Line): Line {
+
+			return target.copyFrom(this);
+
+		}
+
+		/**
+		* Used to set all components on the line.
+		* @method setTo
+		* @param [x1=0]{Number} X component of first point.
+		* @param [y1=0]{Number} Y component of first point.
+		* @param [x2=0]{Number} X component of second point.
+		* @param [y2=0]{Number} Y component of second point.
+		* @return {Kiwi.Geom.Line}
+		* @public
+		*/
+		public setTo(x1: number = 0, y1: number = 0, x2: number = 0, y2: number = 0): Line {
+
+			this.x1 = x1;
+			this.y1 = y1;
+			this.x2 = x2;
+			this.y2 = y2;
+
+			return this;
+
+		}
+
+		/**
+		* Get the length of the Line as a Line Segment.
+		* @property length
+		* @type number
+		* @readOnly
+		* @public
+		*/
+		public get length(): number {
+
+			return Math.sqrt((this.x2 - this.x1) * (this.x2 - this.x1) + (this.y2 - this.y1) * (this.y2 - this.y1));
+
+		}
+
+		/**
+		* Get the y of a point on the line for a given x.
+		* @method getY
+		* @param x {Number} 
+		* @return {Number}
+		* @public
+		*/
+		public getY(x: number): number {
+			if (this.x1 == this.x2)
+				return null;
+			else
+			return this.slope * x + this.yIntercept;
+
+		}
+
+		/**
+		* Get the angle of the line.
+		* @property angle 
+		* @type Number
+		* @readOnly
+		* @public
+		*/
+		public get angle(): number {
+
+			return Math.atan2(this.y2 - this.y1, this.x2 - this.x1);
+
+		}
+
+		/**
+		* Get the slope of the line (y/x).
+		* @property slope
+		* @type Number
+		* @readOnly
+		* @public
+		*/
+		public get slope(): number {
+
+			return (this.y2 - this.y1) / (this.x2 - this.x1);
+
+		}
+
+		/**
+		* Get the perpendicular slope of the line (x/y).
+		* @propery perpSlope
+		* @type Number
+		* @readOnly
+		* @public
+		*/
+		public get perpSlope(): number {
+
+			return -((this.x2 - this.x1) / (this.y2 - this.y1));
+
+		}
+
+		/**
+		* Get the y intercept for the line.
+		* @property yIntercept
+		* @type Number
+		* @readOnly
+		* @public
+		*/
+		public get yIntercept(): number {
+
+			return (this.y1 - this.slope * this.x1);
+
+		}
+
+		/**
+		* Check if a point is on the line.
+		* @method isPointOnLine
+		* @param x {Number}
+		* @param y {Number}
+		* @return {boolean}
+		* @public
+		*/
+		public isPointOnLine(x: number, y: number): boolean {
+
+			if ((x - this.x1) * (this.y2 - this.y1) === (this.x2 - this.x1) * (y - this.y1))
+			{
+				return true;
+			}
+			else
+			{
+				return false;
+			}
+
+		}
+
+		/**
+		* Check if the point is both on the line and within the line segment.
+		* @method isPointOnLineSegment
+		* @param x {Number}
+		* @param y {Number}
+		* @return {boolean}
+		* @public
+		*/
+		public isPointOnLineSegment(x: number, y: number): boolean {
+
+			var xMin = Math.min(this.x1, this.x2);
+			var xMax = Math.max(this.x1, this.x2);
+			var yMin = Math.min(this.y1, this.y2);
+			var yMax = Math.max(this.y1, this.y2);
+
+			if (this.isPointOnLine(x, y) && (x >= xMin && x <= xMax) && (y >= yMin && y <= yMax))
+			{
+				return true;
+			}
+			else
+			{
+				return false;
+			}
+
+		}
+
+		/**
+		* Check to see if this Line object intersects at any point with a passed Line.
+		* Note: Both are treated as extending infinately through space.
+		* Functions as an alias for the 'Kiwi.Geom.Intersect.lineToLine' method.
+		*
+		* @method intersectLineLine
+		* @param line {Kiwi.Geom.Line} The line you want to check for a Intersection with.
+		* @return {Kiwi.Geom.IntersectResult} The Intersect Result containing the collision information.
+		* @public
+		*/
+		public intersectLineLine(line): IntersectResult {
+			return Kiwi.Geom.Intersect.lineToLine(this,line);
+		}
+
+		/**
+		* Get a line perpendicular to the line passing through a given point.
+		*
+		* @method perp
+		* @param x {Number} 
+		* @param y {Number} 
+		* @param [output] {Kiwi.Geom.Line} The line object that the result should be output to. Creates a new Line if one is not passed. 
+		* @return {Kiwi.Geom.Line}
+		* @public
+		*/
+		public perp(x: number, y: number, output: Line=new Line): Line {
+
+			if (this.y1 === this.y2) {
+				
+				output.setTo(x, y, x, this.y1);
+			}
+
+			var yInt: number = (y - this.perpSlope * x);
+
+			var pt: any = this.intersectLineLine({ x1: x, y1: y, x2: 0, y2: yInt });
+
+			output.setTo(x, y, pt.x, pt.y);
+
+			return output;
+
+		}
+
+		/**
+		* Get a string representation of the line.
+		* @method toString
+		* @return {String}
+		* @public
+		*/
+		public toString(): string {
+
+			return "[{Line (x1=" + this.x1 + " y1=" + this.y1 + " x2=" + this.x2 + " y2=" + this.y2 + ")}]";
+
+		}
+
+	}
+
+}
diff --git a/src/geom/Matrix.ts b/src/geom/Matrix.ts
index 5fbdf0b..ab4bdc7 100644
--- a/src/geom/Matrix.ts
+++ b/src/geom/Matrix.ts
@@ -6,471 +6,471 @@
 
 module Kiwi.Geom {
 
-    /**
-    * Represents a 2d transformation matrix. This can be used to map points between different coordinate spaces. Matrices are used
+	/**
+	* Represents a 2d transformation matrix. This can be used to map points between different coordinate spaces. Matrices are used
 	* by Transform objects to represent translation, scale and rotation transformations, and to determine where objects are in world space or camera space.
 	* Objects such as entities and groups may be nested, and their associated transforms may represent how they are scaled, translated and rotated relative to a parent
-    * transform.
-    * By concatenating an object's transformation matrix with its ancestors matrices, it is possible to determine the absolute position of the object in world space.
-    * See http://en.wikipedia.org/wiki/Transformation_matrix#Examples_in_2D_graphics for an in depth discussion of 2d tranformation matrices.
-    * 
-    * @class Matrix
-    * @namespace Kiwi.Geom
-    * @constructor
-    * @param [a=1] {Number}  position 0,0 of the matrix, affects scaling and rotation.
-    * @param [b=0] {Number}  position 0,1 of the matrix, affects scaling and rotation.
-    * @param [c=0] {Number}  position 1,0 of the matrix, affects scaling and rotation.
-    * @param [d=1] {Number}  position 1,1 of the matrix, affects scaling and rotation.
-    * @param [tx=0] {Number}  position 2,0 of the matrix, affects translation on x axis.
-    * @param [ty=0] {Number}  position 2,1 of the matrix, affects translation on y axis.
-    * @return (Object) This object.
-    * 
-    */
-    export class Matrix {
-         
-        constructor(a: number = 1, b: number = 0, c: number = 0, d: number = 1, tx: number = 0, ty: number = 0) {
-
-            this.setTo(a, b, c, d, tx, ty);
-
-        }
-
-        /**
-        * The type of object this is.
-        * @method objType
-        * @return {String} "Matrix"
-        * @public
-        */ 
-        public objType() {
-            return "Matrix";
-        }
-
-        /**
-        * Position 0,0 of the matrix, affects scaling and rotation
-        * @property a
-        * @type Number
-        * @default 1
-        * @public
-        */
-        public a: number = 1;
-
-        /**
-        * Position 0,1 of the matrix, affects scaling and rotation.
-        * @property b
-        * @type Number
-        * @default 0
-        * @public
-        */
-        public b: number = 0;
-
-        /**
-        * Position 1,0 of the matrix, affects scaling and rotation.
-        * @property c
-        * @type Number
-        * @default 0
-        * @public
-        */
-        public c: number = 0;
-
-        /**
-        * Position 1,1 of the matrix, affects scaling and rotation.
-        * @property d
-        * @type Number
-        * @default 1
-        * @public
-        */
-        public d: number = 1;
-
-        /**
-        * Position 2,0 of the matrix, affects translation on x axis.
-        * @property tx
-        * @type Number
-        * @default 0
-        * @public
-        */
-        public tx: number = 0;
-
-        /**
-        * Position 2,1 of the matrix, affects translation on y axis.
-        * @property ty
-        * @type Number
-        * @default 0
-        * @public
-        */
-        public ty: number = 0;
-
-        /**
-        * Set all matrix values 
-        * @method setTo
-        * @param [a=1] {Number} position 0,0 of the matrix, affects scaling and rotation.
-        * @param [b=0] {Number} position 0,1 of the matrix, affects scaling and rotation.
-        * @param [c=0] {Number} position 1,0 of the matrix, affects scaling and rotation.
-        * @param [d=1] {Number} position 1,1 of the matrix, affects scaling and rotation.
-        * @param [tx=0] {Number} position 2,0 of the matrix, affects translation on x axis.
-        * @param [ty=0] {Number} position 2,1 of the matrix, affects translation on y axis.
-        * @return {Kiwi.Geom.Matrix} This object.
-        * @public
-        */
-        public setTo(a: number = 1, b: number = 0, c: number = 0, d: number = 1, tx: number = 0, ty: number = 0): Matrix {
-
-            this.a = a;
-            this.b = b;
-            this.c = c;
-            this.d = d;
-            this.tx = tx;
-            this.ty = ty;
-
-            return this;
-
-        }
-
-        /**
-	    * Set matrix values from transform values
-	    * @method setFromTransform
-	    * @param tx {Number} Translation on x axis.
-	    * @param ty {Number} Translation on y axis.
-	    * @param scaleX {Number} scaleX. Scale on x axis.
-	    * @param scaleY {Number} scaleY. Scale on y axis.
-	    * @param rotation {Number} rotation. 
-        * @return {Kiwi.Geom.Matrix} This object.
-        * @public
-	    */
-          public setFromTransform(tx: number, ty: number, scaleX: number, scaleY: number, rotation: number) {
-            this.identity();
-            var cos = Math.cos(rotation);
-            var sin = Math.sin(rotation);
-
-            this.append(cos * scaleX, sin * scaleX, -sin * scaleY, cos * scaleY, tx, ty);
-
-            return this;
-        }
-
-        /**
-	    * Set matrix values from transform values, with rotation point data included
-	    * @method setFromOffsetTransform
-	    * @param tx {Number} tx. Translation on x axis.
-	    * @param ty {Number} ty. Translation on y axis.
-	    * @param scaleX {Number} scaleX. Scale on x axis.
-	    * @param scaleY {Number} scaleY. Scale on y axis.
-	    * @param rotation {Number} rotation. 
-	    * @param rotPointX {Number} Rotation point offset on x axis.
-	    * @param rotPointY {Number} Rotation point offset on y axis.
-        * @return {Kiwi.Geom.Matrix} This object.
-        * @public
-        * @since 1.0.1
-	    */
-          public setFromOffsetTransform(tx: number, ty: number, scaleX: number, scaleY: number, rotation: number, rotPointX: number, rotPointY: number) {
-            this.identity();
-            var cos = Math.cos(rotation);
-            var sin = Math.sin(rotation);
-
-            this.append(cos * scaleX, sin * scaleX, -sin * scaleY, cos * scaleY, tx + rotPointX, ty + rotPointY);
-
-            return this;
-        }
-
-        /**
-        * Prepend values to this matrix, paramters supplied individually.
-        * @method prepend
-        * @param [a=1]{Number} position 0,0 of the matrix, affects scaling and rotation.
-        * @param [b=0]{Number} position 0,1 of the matrix, affects scaling and rotation.
-        * @param [c=0]{Number} position 1,0 of the matrix, affects scaling and rotation.
-        * @param [d=0]{Number} position 1,1 of the matrix, affects scaling and rotation.
-        * @param [tx=0]{Number} position 2,0 of the matrix, affects translation on x axis.
-        * @param [ty=0]{Number} position 2,1 of the matrix, affects translation on y axis.
-        * @return {Kiwi.Geom.Matrix} This object.
-        * @public
-        */
-        public prepend(a: number = 1, b: number = 0, c: number = 0, d: number = 1, tx: number = 0, ty: number = 0): Matrix {
-            var tx1 = this.tx;
-            var a1 = this.a;
-            var c1 = this.c;
-
-            this.a = a1 * a + this.b * c;
-            this.b = a1 * b + this.b * d;
-            this.c = c1 * a + this.d * c;
-            this.d = c1 * b + this.d * d;
-
-            this.tx = tx1 * a + this.ty * c + tx;
-            this.ty = tx1 * b + this.ty * d + ty;
-            return this;
-
-        }
-
-        /**
-        * Prepend a matrix to this matrix.
-        * @method prependMatrix
-        * @param m {Kiwi.Geom.Matrix} The matrix to prepend.
-        * @return {Kiwi.Geom.Matrix} This object.
-        * @public
-        */
-        public prependMatrix(m: Matrix): Matrix {
-            var tx1 = this.tx;
-            var a1 = this.a;
-            var c1 = this.c;
-
-            this.a = a1 * m.a + this.b * m.c;
-            this.b = a1 * m.b + this.b * m.d;
-            this.c = c1 * m.a + this.d * m.c;
-            this.d = c1 * m.b + this.d * m.d;
-
-            this.tx = tx1 * m.a + this.ty * m.c + m.tx;
-            this.ty = tx1 * m.b + this.ty * m.d + m.ty;
-            return this;
-
-        }
-
-        /**
-	    * Append values to this matrix, parameters supplied individually.
-	    * @method append
-	    * @param [a=1]{Number} position 0,0 of the matrix, affects scaling and rotation.
-	    * @param [b=0]{Number} position 0,1 of the matrix, affects scaling and rotation.
-	    * @param [c=0]{Number} position 1,0 of the matrix, affects scaling and rotation.
-	    * @param [d=1]{Number} position 1,1 of the matrix, affects scaling and rotation.
-	    * @param [tx=0]{Number} position 2,0 of the matrix, affects translation on x axis.
-	    * @param [ty=0]{Number} position 2,1 of the matrix, affects translation on y axis.
-        * @return {Kiwi.Geom.Matrix} This object.
-        * @public
-	    */
-        public append(a: number = 1, b: number = 0, c: number = 0, d: number = 1, tx: number = 0, ty: number = 0): Matrix {
-            var a1 = this.a;
-            var b1 = this.b;
-            var c1 = this.c;
-            var d1 = this.d;
-
-            this.a = a * a1 + b * c1;
-            this.b = a * b1 + b * d1;
-            this.c = c * a1 + d * c1;
-            this.d = c * b1 + d * d1;
-            this.tx = tx * a1 + ty * c1 + this.tx;
-            this.ty = tx * b1 + ty * d1 + this.ty;
-            return this;
-        }
-
-        /**
-        * Append a matrix to this matrix.
-        * @method appendMatrix
-        * @param m {Kiwi.Geom.Matrix} The matrix to append.
-        * @return {Kiwi.Geom.Matrix} This object.
-        * @public
-        */
-        public appendMatrix(m: Matrix): Matrix {
-            var a1 = this.a;
-            var b1 = this.b;
-            var c1 = this.c;
-            var d1 = this.d;
-
-            this.a = m.a * a1 + m.b * c1;
-            this.b = m.a * b1 + m.b * d1;
-            this.c = m.c * a1 + m.d * c1;
-            this.d = m.c * b1 + m.d * d1;
-            this.tx = m.tx * a1 + m.ty * c1 + this.tx;
-            this.ty = m.tx * b1 + m.ty * d1 + this.ty;
-            return this;
-        }
-
-        /**
-        * Set the tx and ty elements of the matrix.
-        * @method setPosition
-        * @param x {Number} Translation on x axis.
-        * @param y {Number} Translation on y axis.
-        * @return {Kiwi.Geom.Matrix} This object.
-        * @public
-        */
-        public setPosition(x: number, y: number): Matrix {
-            this.tx = x;
-            this.ty = y;
-            return this;
-        }
-
-        /**
-	    * Set the tx and ty elements of the matrix from an object with x and y properties.
-	    * @method setPositionPoint
-	    * @param p {Number} The object from which to copy the x and y properties from.
-        * @return {Kiwi.Geom.Matrix} This object.
-        * @public
-	    */
-        public setPositionPoint(p: any): Matrix {
-            this.tx = p.x;
-            this.ty = p.y;
-            return this
-        }
-
-        /**
-	    * Get the x and y position of the matrix as an object with x and y properties
-	    * @method getPosition
-	    * @return {Kiwi.Geom.Point} An object constructed from a literal with x and y properties.
-        * @public
-	    */
-        public getPosition(output: Kiwi.Geom.Point = new Kiwi.Geom.Point): Kiwi.Geom.Point {
-            return output.setTo(this.tx, this.ty);
-        }
-
-        /**
-	    * Set the matrix to the identity matrix - when appending or prepending this matrix to another there will be no change in the resulting matrix
-	    * @method identity
-        * @return {Kiwi.Geom.Matrix} This object.
-        * @public
-	    */
-        public identity(): Matrix {
-            this.a = 1;
-            this.b = 0;
-            this.c = 0;
-            this.d = 1;
-            this.tx = 0;
-            this.ty = 0;
-            return this;
-        }
-
-        /**
-	    * Rotate the matrix by "radians" degrees
-	    * @method rotate
-	    * @param radians {Number} The angle (in radians) to rotate this matrix by. 
-        * @return {Kiwi.Geom.Matrix} This object.
-        * @public
-        */
-        public rotate(radians: number): Matrix {
-            var cos = Math.cos(radians);
-            var sin = Math.sin(radians);
-
-            var a1 = this.a;
-            var c1 = this.c;
-            var tx1 = this.tx;
-
-            this.a = a1 * cos - this.b * sin;
-            this.b = a1 * sin + this.b * cos;
-            this.c = c1 * cos - this.d * sin;
-            this.d = c1 * sin + this.d * cos;
-            this.tx = tx1 * cos - this.ty * sin;
-            this.ty = tx1 * sin + this.ty * cos;
-            return this;
-
-        }
-
-        /**
-	    * Translate the matrix by the amount passed.
-        * 
-	    * @method translate
-	    * @param tx {Number} The amount to translate on the x axis.
-	    * @param ty {Number} The amount to translate on the y axis.
-        * @return {Kiwi.Geom.Matrix} This object.
-        * @public
-	    */
-        public translate(tx: number, ty: number): Matrix {
-            this.tx += tx;
-            this.ty += ty;
-            return this;
-        }
-
-        /**
-	    * Scales the matrix by the amount passed.
-        *
-	    * @method scale
-	    * @param scaleX {Number} The amount to scale on the x axis.
-	    * @param scaleY {Number} The amount to scale on the y axis.
-        * @return {Kiwi.Geom.Matrix} This object.
-        * @public
-	    */
-        public scale(scaleX: number, scaleY: number): Matrix {
-            this.a *= scaleX;
-            this.d *= scaleY;
-            return this;
-        }
-
-        /**
-	    * Apply this matrix to a an object with x and y properties representing a point and return the transformed point.
-	    * @method transformPoint
-	    * @param pt {Object} The point to be translated.
-        * @return {Kiwi.Geom.Matrix} This object.
-        * @public
-	    */
-        public transformPoint(pt: any) {
-            var x = pt.x;
-            var y = pt.y
-            pt.x = this.a * x + this.c * y + this.tx;
-            pt.y = this.b * x + this.d * y + this.ty;
-            return pt;
-        }
-
-        /**
-	    * Invert this matrix so that it represents the opposite of its orginal tranformaation.
-	    * @method invert
-        * @return {Kiwi.Geom.Matrix} This object.
-        * @public
-	    */
-        public invert(): Matrix {
-            var a1 = this.a;
-            var b1 = this.b;
-            var c1 = this.c;
-            var d1 = this.d;
-            var tx1 = this.tx;
-            var n = a1 * d1 - b1 * c1;
-
-            this.a = d1 / n;
-            this.b = -b1 / n;
-            this.c = -c1 / n;
-            this.d = a1 / n;
-            this.tx = (c1 * this.ty - d1 * tx1) / n;
-            this.ty = -(a1 * this.ty - b1 * tx1) / n;
-            return this;
-        }
-
-        /**
-	    * Copy another matrix to this matrix.
-	    * @method copyFrom
-	    * @param m {Kiwi.Geom.Matrix} The matrixto be copied from.
-        * @return {Kiwi.Geom.Matrix} This object.
-        * @public
-	    */
-        public copyFrom(m: Matrix): Matrix {
-            this.a = m.a;
-            this.b = m.b;
-            this.c = m.c;
-            this.d = m.d;
-            this.tx = m.tx;
-            this.ty = m.ty;
-
-            return this;
-        }
-
-        /**
-        * Copy this matrix to another matrix.
-        * @method copyTo
-        * @param m {Kiwi.Geom.Matrix} The matrix to copy to.
-        * @return {Kiwi.Geom.Matrix} This object.
-        * @public
-        */
-        public copyTo(m: Matrix): Matrix {
-            m.a = this.a;
-            m.b = this.b;
-            m.c = this.c;
-            m.d = this.d;
-            m.tx = this.tx;
-            m.ty = this.ty;
-            return this;
-        }
-
-        /**
-	    * Clone this matrix and returns a new Matrix object.
-	    * @method clone
-        * @return {Kiwi.Geom.Matrix} 
-        * @public
-	    */
-        public clone(): Matrix {
-            return new Kiwi.Geom.Matrix(this.a, this.b, this.c, this.d, this.tx, this.ty);
-        }
-
-        /**
-	    * Returns a string representation of this object.
-	    * @method toString
-	    * @return {string} A string representation of the instance.
-        * @public
-	    */
-        public get toString(): string {
-
-            return "[{Matrix (a=" + this.a + " b=" + this.b + " c=" + this.c + " d=" + this.d + " tx=" + this.tx + " ty=" + this.ty + ")}]";
-
-        }
-
-    }
-
-}
\ No newline at end of file
+	* transform.
+	* By concatenating an object's transformation matrix with its ancestors matrices, it is possible to determine the absolute position of the object in world space.
+	* See http://en.wikipedia.org/wiki/Transformation_matrix#Examples_in_2D_graphics for an in depth discussion of 2d tranformation matrices.
+	* 
+	* @class Matrix
+	* @namespace Kiwi.Geom
+	* @constructor
+	* @param [a=1] {Number}  position 0,0 of the matrix, affects scaling and rotation.
+	* @param [b=0] {Number}  position 0,1 of the matrix, affects scaling and rotation.
+	* @param [c=0] {Number}  position 1,0 of the matrix, affects scaling and rotation.
+	* @param [d=1] {Number}  position 1,1 of the matrix, affects scaling and rotation.
+	* @param [tx=0] {Number}  position 2,0 of the matrix, affects translation on x axis.
+	* @param [ty=0] {Number}  position 2,1 of the matrix, affects translation on y axis.
+	* @return (Object) This object.
+	* 
+	*/
+	export class Matrix {
+
+		constructor(a: number = 1, b: number = 0, c: number = 0, d: number = 1, tx: number = 0, ty: number = 0) {
+
+			this.setTo(a, b, c, d, tx, ty);
+
+		}
+
+		/**
+		* The type of object this is.
+		* @method objType
+		* @return {String} "Matrix"
+		* @public
+		*/ 
+		public objType() {
+			return "Matrix";
+		}
+
+		/**
+		* Position 0,0 of the matrix, affects scaling and rotation
+		* @property a
+		* @type Number
+		* @default 1
+		* @public
+		*/
+		public a: number = 1;
+
+		/**
+		* Position 0,1 of the matrix, affects scaling and rotation.
+		* @property b
+		* @type Number
+		* @default 0
+		* @public
+		*/
+		public b: number = 0;
+
+		/**
+		* Position 1,0 of the matrix, affects scaling and rotation.
+		* @property c
+		* @type Number
+		* @default 0
+		* @public
+		*/
+		public c: number = 0;
+
+		/**
+		* Position 1,1 of the matrix, affects scaling and rotation.
+		* @property d
+		* @type Number
+		* @default 1
+		* @public
+		*/
+		public d: number = 1;
+
+		/**
+		* Position 2,0 of the matrix, affects translation on x axis.
+		* @property tx
+		* @type Number
+		* @default 0
+		* @public
+		*/
+		public tx: number = 0;
+
+		/**
+		* Position 2,1 of the matrix, affects translation on y axis.
+		* @property ty
+		* @type Number
+		* @default 0
+		* @public
+		*/
+		public ty: number = 0;
+
+		/**
+		* Set all matrix values 
+		* @method setTo
+		* @param [a=1] {Number} position 0,0 of the matrix, affects scaling and rotation.
+		* @param [b=0] {Number} position 0,1 of the matrix, affects scaling and rotation.
+		* @param [c=0] {Number} position 1,0 of the matrix, affects scaling and rotation.
+		* @param [d=1] {Number} position 1,1 of the matrix, affects scaling and rotation.
+		* @param [tx=0] {Number} position 2,0 of the matrix, affects translation on x axis.
+		* @param [ty=0] {Number} position 2,1 of the matrix, affects translation on y axis.
+		* @return {Kiwi.Geom.Matrix} This object.
+		* @public
+		*/
+		public setTo(a: number = 1, b: number = 0, c: number = 0, d: number = 1, tx: number = 0, ty: number = 0): Matrix {
+
+			this.a = a;
+			this.b = b;
+			this.c = c;
+			this.d = d;
+			this.tx = tx;
+			this.ty = ty;
+
+			return this;
+
+		}
+
+		/**
+		* Set matrix values from transform values
+		* @method setFromTransform
+		* @param tx {Number} Translation on x axis.
+		* @param ty {Number} Translation on y axis.
+		* @param scaleX {Number} scaleX. Scale on x axis.
+		* @param scaleY {Number} scaleY. Scale on y axis.
+		* @param rotation {Number} rotation. 
+		* @return {Kiwi.Geom.Matrix} This object.
+		* @public
+		*/
+		  public setFromTransform(tx: number, ty: number, scaleX: number, scaleY: number, rotation: number) {
+			this.identity();
+			var cos = Math.cos(rotation);
+			var sin = Math.sin(rotation);
+
+			this.append(cos * scaleX, sin * scaleX, -sin * scaleY, cos * scaleY, tx, ty);
+
+			return this;
+		}
+
+		/**
+		* Set matrix values from transform values, with rotation point data included
+		* @method setFromOffsetTransform
+		* @param tx {Number} tx. Translation on x axis.
+		* @param ty {Number} ty. Translation on y axis.
+		* @param scaleX {Number} scaleX. Scale on x axis.
+		* @param scaleY {Number} scaleY. Scale on y axis.
+		* @param rotation {Number} rotation. 
+		* @param rotPointX {Number} Rotation point offset on x axis.
+		* @param rotPointY {Number} Rotation point offset on y axis.
+		* @return {Kiwi.Geom.Matrix} This object.
+		* @public
+		* @since 1.0.1
+		*/
+		  public setFromOffsetTransform(tx: number, ty: number, scaleX: number, scaleY: number, rotation: number, rotPointX: number, rotPointY: number) {
+			this.identity();
+			var cos = Math.cos(rotation);
+			var sin = Math.sin(rotation);
+
+			this.append(cos * scaleX, sin * scaleX, -sin * scaleY, cos * scaleY, tx + rotPointX, ty + rotPointY);
+
+			return this;
+		}
+
+		/**
+		* Prepend values to this matrix, paramters supplied individually.
+		* @method prepend
+		* @param [a=1]{Number} position 0,0 of the matrix, affects scaling and rotation.
+		* @param [b=0]{Number} position 0,1 of the matrix, affects scaling and rotation.
+		* @param [c=0]{Number} position 1,0 of the matrix, affects scaling and rotation.
+		* @param [d=0]{Number} position 1,1 of the matrix, affects scaling and rotation.
+		* @param [tx=0]{Number} position 2,0 of the matrix, affects translation on x axis.
+		* @param [ty=0]{Number} position 2,1 of the matrix, affects translation on y axis.
+		* @return {Kiwi.Geom.Matrix} This object.
+		* @public
+		*/
+		public prepend(a: number = 1, b: number = 0, c: number = 0, d: number = 1, tx: number = 0, ty: number = 0): Matrix {
+			var tx1 = this.tx;
+			var a1 = this.a;
+			var c1 = this.c;
+
+			this.a = a1 * a + this.b * c;
+			this.b = a1 * b + this.b * d;
+			this.c = c1 * a + this.d * c;
+			this.d = c1 * b + this.d * d;
+
+			this.tx = tx1 * a + this.ty * c + tx;
+			this.ty = tx1 * b + this.ty * d + ty;
+			return this;
+
+		}
+
+		/**
+		* Prepend a matrix to this matrix.
+		* @method prependMatrix
+		* @param m {Kiwi.Geom.Matrix} The matrix to prepend.
+		* @return {Kiwi.Geom.Matrix} This object.
+		* @public
+		*/
+		public prependMatrix(m: Matrix): Matrix {
+			var tx1 = this.tx;
+			var a1 = this.a;
+			var c1 = this.c;
+
+			this.a = a1 * m.a + this.b * m.c;
+			this.b = a1 * m.b + this.b * m.d;
+			this.c = c1 * m.a + this.d * m.c;
+			this.d = c1 * m.b + this.d * m.d;
+
+			this.tx = tx1 * m.a + this.ty * m.c + m.tx;
+			this.ty = tx1 * m.b + this.ty * m.d + m.ty;
+			return this;
+
+		}
+
+		/**
+		* Append values to this matrix, parameters supplied individually.
+		* @method append
+		* @param [a=1]{Number} position 0,0 of the matrix, affects scaling and rotation.
+		* @param [b=0]{Number} position 0,1 of the matrix, affects scaling and rotation.
+		* @param [c=0]{Number} position 1,0 of the matrix, affects scaling and rotation.
+		* @param [d=1]{Number} position 1,1 of the matrix, affects scaling and rotation.
+		* @param [tx=0]{Number} position 2,0 of the matrix, affects translation on x axis.
+		* @param [ty=0]{Number} position 2,1 of the matrix, affects translation on y axis.
+		* @return {Kiwi.Geom.Matrix} This object.
+		* @public
+		*/
+		public append(a: number = 1, b: number = 0, c: number = 0, d: number = 1, tx: number = 0, ty: number = 0): Matrix {
+			var a1 = this.a;
+			var b1 = this.b;
+			var c1 = this.c;
+			var d1 = this.d;
+
+			this.a = a * a1 + b * c1;
+			this.b = a * b1 + b * d1;
+			this.c = c * a1 + d * c1;
+			this.d = c * b1 + d * d1;
+			this.tx = tx * a1 + ty * c1 + this.tx;
+			this.ty = tx * b1 + ty * d1 + this.ty;
+			return this;
+		}
+
+		/**
+		* Append a matrix to this matrix.
+		* @method appendMatrix
+		* @param m {Kiwi.Geom.Matrix} The matrix to append.
+		* @return {Kiwi.Geom.Matrix} This object.
+		* @public
+		*/
+		public appendMatrix(m: Matrix): Matrix {
+			var a1 = this.a;
+			var b1 = this.b;
+			var c1 = this.c;
+			var d1 = this.d;
+
+			this.a = m.a * a1 + m.b * c1;
+			this.b = m.a * b1 + m.b * d1;
+			this.c = m.c * a1 + m.d * c1;
+			this.d = m.c * b1 + m.d * d1;
+			this.tx = m.tx * a1 + m.ty * c1 + this.tx;
+			this.ty = m.tx * b1 + m.ty * d1 + this.ty;
+			return this;
+		}
+
+		/**
+		* Set the tx and ty elements of the matrix.
+		* @method setPosition
+		* @param x {Number} Translation on x axis.
+		* @param y {Number} Translation on y axis.
+		* @return {Kiwi.Geom.Matrix} This object.
+		* @public
+		*/
+		public setPosition(x: number, y: number): Matrix {
+			this.tx = x;
+			this.ty = y;
+			return this;
+		}
+
+		/**
+		* Set the tx and ty elements of the matrix from an object with x and y properties.
+		* @method setPositionPoint
+		* @param p {Number} The object from which to copy the x and y properties from.
+		* @return {Kiwi.Geom.Matrix} This object.
+		* @public
+		*/
+		public setPositionPoint(p: any): Matrix {
+			this.tx = p.x;
+			this.ty = p.y;
+			return this
+		}
+
+		/**
+		* Get the x and y position of the matrix as an object with x and y properties
+		* @method getPosition
+		* @return {Kiwi.Geom.Point} An object constructed from a literal with x and y properties.
+		* @public
+		*/
+		public getPosition(output: Kiwi.Geom.Point = new Kiwi.Geom.Point): Kiwi.Geom.Point {
+			return output.setTo(this.tx, this.ty);
+		}
+
+		/**
+		* Set the matrix to the identity matrix - when appending or prepending this matrix to another there will be no change in the resulting matrix
+		* @method identity
+		* @return {Kiwi.Geom.Matrix} This object.
+		* @public
+		*/
+		public identity(): Matrix {
+			this.a = 1;
+			this.b = 0;
+			this.c = 0;
+			this.d = 1;
+			this.tx = 0;
+			this.ty = 0;
+			return this;
+		}
+
+		/**
+		* Rotate the matrix by "radians" degrees
+		* @method rotate
+		* @param radians {Number} The angle (in radians) to rotate this matrix by. 
+		* @return {Kiwi.Geom.Matrix} This object.
+		* @public
+		*/
+		public rotate(radians: number): Matrix {
+			var cos = Math.cos(radians);
+			var sin = Math.sin(radians);
+
+			var a1 = this.a;
+			var c1 = this.c;
+			var tx1 = this.tx;
+
+			this.a = a1 * cos - this.b * sin;
+			this.b = a1 * sin + this.b * cos;
+			this.c = c1 * cos - this.d * sin;
+			this.d = c1 * sin + this.d * cos;
+			this.tx = tx1 * cos - this.ty * sin;
+			this.ty = tx1 * sin + this.ty * cos;
+			return this;
+
+		}
+
+		/**
+		* Translate the matrix by the amount passed.
+		* 
+		* @method translate
+		* @param tx {Number} The amount to translate on the x axis.
+		* @param ty {Number} The amount to translate on the y axis.
+		* @return {Kiwi.Geom.Matrix} This object.
+		* @public
+		*/
+		public translate(tx: number, ty: number): Matrix {
+			this.tx += tx;
+			this.ty += ty;
+			return this;
+		}
+
+		/**
+		* Scales the matrix by the amount passed.
+		*
+		* @method scale
+		* @param scaleX {Number} The amount to scale on the x axis.
+		* @param scaleY {Number} The amount to scale on the y axis.
+		* @return {Kiwi.Geom.Matrix} This object.
+		* @public
+		*/
+		public scale(scaleX: number, scaleY: number): Matrix {
+			this.a *= scaleX;
+			this.d *= scaleY;
+			return this;
+		}
+
+		/**
+		* Apply this matrix to a an object with x and y properties representing a point and return the transformed point.
+		* @method transformPoint
+		* @param pt {Object} The point to be translated.
+		* @return {Kiwi.Geom.Matrix} This object.
+		* @public
+		*/
+		public transformPoint(pt: any) {
+			var x = pt.x;
+			var y = pt.y
+			pt.x = this.a * x + this.c * y + this.tx;
+			pt.y = this.b * x + this.d * y + this.ty;
+			return pt;
+		}
+
+		/**
+		* Invert this matrix so that it represents the opposite of its orginal tranformaation.
+		* @method invert
+		* @return {Kiwi.Geom.Matrix} This object.
+		* @public
+		*/
+		public invert(): Matrix {
+			var a1 = this.a;
+			var b1 = this.b;
+			var c1 = this.c;
+			var d1 = this.d;
+			var tx1 = this.tx;
+			var n = a1 * d1 - b1 * c1;
+
+			this.a = d1 / n;
+			this.b = -b1 / n;
+			this.c = -c1 / n;
+			this.d = a1 / n;
+			this.tx = (c1 * this.ty - d1 * tx1) / n;
+			this.ty = -(a1 * this.ty - b1 * tx1) / n;
+			return this;
+		}
+
+		/**
+		* Copy another matrix to this matrix.
+		* @method copyFrom
+		* @param m {Kiwi.Geom.Matrix} The matrixto be copied from.
+		* @return {Kiwi.Geom.Matrix} This object.
+		* @public
+		*/
+		public copyFrom(m: Matrix): Matrix {
+			this.a = m.a;
+			this.b = m.b;
+			this.c = m.c;
+			this.d = m.d;
+			this.tx = m.tx;
+			this.ty = m.ty;
+
+			return this;
+		}
+
+		/**
+		* Copy this matrix to another matrix.
+		* @method copyTo
+		* @param m {Kiwi.Geom.Matrix} The matrix to copy to.
+		* @return {Kiwi.Geom.Matrix} This object.
+		* @public
+		*/
+		public copyTo(m: Matrix): Matrix {
+			m.a = this.a;
+			m.b = this.b;
+			m.c = this.c;
+			m.d = this.d;
+			m.tx = this.tx;
+			m.ty = this.ty;
+			return this;
+		}
+
+		/**
+		* Clone this matrix and returns a new Matrix object.
+		* @method clone
+		* @return {Kiwi.Geom.Matrix} 
+		* @public
+		*/
+		public clone(): Matrix {
+			return new Kiwi.Geom.Matrix(this.a, this.b, this.c, this.d, this.tx, this.ty);
+		}
+
+		/**
+		* Returns a string representation of this object.
+		* @method toString
+		* @return {string} A string representation of the instance.
+		* @public
+		*/
+		public get toString(): string {
+
+			return "[{Matrix (a=" + this.a + " b=" + this.b + " c=" + this.c + " d=" + this.d + " tx=" + this.tx + " ty=" + this.ty + ")}]";
+
+		}
+
+	}
+
+}
diff --git a/src/geom/Point.ts b/src/geom/Point.ts
index cf4d07a..4b454d3 100644
--- a/src/geom/Point.ts
+++ b/src/geom/Point.ts
@@ -6,459 +6,459 @@
 
 module Kiwi.Geom {
 
-    /**
-    * Represents a location in a two-dimensional coordinate system, where x represents the horizontal axis and y represents the vertical axis.
-    *
-    * @class Point
-    * @constructor
-    * @namespace Kiwi.Geom
-    * @param [x=0] {Number} Position of this point on the x-axis.
-    * @param [y=0] {Number} Position of this point on the y-axis.
-    *
-    */
-    export class Point {
-
-        constructor (x: number = 0, y: number = 0) {
-
-            this.setTo(x, y);
-
-        }
-
-
-        /**
-        * The type of this object.
-        * @method objType
-        * @return {String} "Point"
-        * @public
-        */
-        public objType() {
-            return "Point";
-        }
-
-	    /** 
-	    * The horizontal position of this point.
-	    * @property x
-	    * @type Number
-        * @public
-	    */
-        public x: number;
-
-	    /** 
-	    * The vertical position of this point.
-	    * @property y
-	    * @type Number
-        * @public
-	    */
-        public y: number;
-
-
-        /**
-        * Converts a pair of polar coordinates to a Cartesian point coordinate and sets them on the point instance.
-        * @method polar
-        * @param length {Number} The length coordinate of the polar pair.
-        * @param angle {Number} The angle, in radians, of the polar pair.
-        * @return {Kiwi.Geom.Point} The new Cartesian Point object.
-        * @public
-        */
-        public polar(distance: number, angle: number): Point {
-            //Note: Would be badarse if it did this based on the current x/y coordinates
-            this.x = distance * Math.cos(angle); 
-            this.y = distance * Math.sin(angle);
-            return this;
-        }   
-
-	    /**
-	    * Adds the coordinates of another point to the coordinates of this point to create a new point.
-	    * @method add
-	    * @param toAdd {Kiwi.Geom.Point} The point to be added.
-        * @param output {Kiwi.Geom.Point} 
-	    * @return {Kiwi.Geom.Point} The new Point object.
-        * @public
-	    */
-        public add(toAdd: Point, output: Point = new Point): Point {
-
-            return output.setTo(this.x + toAdd.x, this.y + toAdd.y);
-
-        }
-
-	    /**
-	    * Adds the given values to the coordinates of this point and returns it
-	    * @method addTo
-	    * @param x {Number} The amount to add to the x value of the point
-	    * @param y {Number} The amount to add to the x value of the point
-	    * @return {Kiwi.Geom.Point} This Point object.
-        * @public
-	    */
-        public addTo(x: number = 0, y: number = 0): Point {
-
-            return this.setTo(this.x + x, this.y + y);
-
-        }
-
-	    /**
-	    * Adds the given values to the coordinates of this point and returns it
-	    * @method subtractFrom
-	    * @param x {Number} The amount to subtract from the x value of the point
-	    * @param y {Number} The amount to subtract from the x value of the point
-	    * @return {Kiwi.Geom.Point} This Point object.
-        * @public
-	    */
-        public subtractFrom(x: number = 0, y: number = 0): Point {
-
-            return this.setTo(this.x - x, this.y - y);
-
-        }
-
-        /**
-        * Inverts the x and y values of this point
-        * @method invert
-	    * @return {Kiwi.Geom.Point} This Point object.
-        * @public
-        */
-        public invert(): Point {
-
-            return this.setTo(this.y, this.x);
-
-        }
-
-	    /**
-	    * Clamps this Point object to be between the given min and max.
-	    * @method clamp
-	    * @param min {number} The minimum value to clamp this Point to.
-	    * @param max {number} The maximum value to clamp this Point to.
-	    * @return {Kiwi.Geom.Point} This Point object.
-        * @public
-	    */
-        public clamp(min: number, max: number): Point {
-
-            this.clampX(min, max);
-            this.clampY(min, max);
-            return this;
-
-        }
-
-	    /**
-	    * Clamps the x value of this Point object to be between the given min and max
-	    * @method clampX
-	    * @param min {Number} The minimum value to clamp this Point to
-	    * @param max {Number} The maximum value to clamp this Point to
-	    * @return {Kiwi.Geom.Point} This Point object.
-        * @public
-	    */
-        public clampX(min: number, max: number): Point {
-
-            this.x = Math.max(Math.min(this.x, max), min);
-
-            return this;
-
-        }
-
-	    /**
-	    * Clamps the y value of this Point object to be between the given min and max
-	    * @method clampY
-	    * @param min {Number} The minimum value to clamp this Point to
-	    * @param max {Number} The maximum value to clamp this Point to
-	    * @return {Kiwi.Geom.Point} This Point object.
-        * @public
-	    */
-        public clampY(min: number, max: number): Point {
-
-            this.x = Math.max(Math.min(this.x, max), min);
-            this.y = Math.max(Math.min(this.y, max), min);
-
-            return this;
-
-        }
-
-	    /**
-	    * Creates a copy of this Point.
-	    * @method clone
-	    * @param [output] {Kiwi.Geom.Point} Optional Point object. If given the values will be set into this object, otherwise a new Point object will be created.
-	    * @return {Kiwi.Geom.Point} 
-        * @public
-	    */
-        public clone(output: Point = new Point): Point {
-
-            return output.setTo(this.x, this.y);
-
-        }
-
-	    /**
-	    * Copies the point data from the source Point object into this Point object.
-	    * @method copyFrom
-	    * @param source {Kiwi.Geom.Point} The point to copy from.
-	    * @return {Kiwi.Geom.Point} This Point object. Useful for chaining method calls.
-        * @public
-	    */
-        public copyFrom(source: Point): Point {
-
-            return this.setTo(source.x, source.y);
-
-        }
-
-	    /**
-	    * Copies the point data from this Point object to the given target Point object.
-	    * @method copyTo
-	    * @param target {Kiwi.Geom.Point} target - The point to copy to.
-	    * @return {Kiwi.Geom.Point} The target Point object.
-        * @public
-	    */
-        public copyTo(target: Point): Point {
-
-            return target.setTo(this.x, this.y);
-
-        }
-
-
-        /**
-        * Get the angle from this Point object to given Point object.
-        * @method angleTo
-        * @param target {Kiwi.Geom.Point} destination Point object.
-        * @return {Number} angle to point
-        * @public
-        */
-        public angleTo(target: Point): number {
-
-            //Y then X ....cause JavaScript :P
-            return Math.atan2(target.y - this.y, target.x - this.x);
-
-        }
-
-        /**
-        * Get the angle from this Point object to given X,Y coordinates.
-        * @method angleTo
-        * @param x {Number} x value.
-        * @param y {Number} y value.
-        * @return {Number} angle to point.
-        */
-        public angleToXY(x: number, y: number): number {
-            
-            //Y then X ....cause JavaScript :P
-            return Math.atan2(y - this.y, x - this.x);
-
-        }
-        
-        /**
-        * Returns the distance from this Point object to the given Point object.
-        * @method distanceTo
-        * @param target {Kiwi.Geom.Point} The destination Point object.
-        * @param round {boolean} Round the distance to the nearest integer (default false)
-        * @return {Number} The distance between this Point object and the destination Point object.
-        * @public
-        */
-        public distanceTo(target: Point, round: boolean = false): number {
-
-            var dx = this.x - target.x;
-            var dy = this.y - target.y;
-
-            if (round === true)
-            {
-                return Math.round(Math.sqrt(dx * dx + dy * dy));
-            }
-            else
-            {
-                return Math.sqrt(dx * dx + dy * dy);
-            }
-
-        }
-
-	    /**
-	    * Returns the distance from this Point object to the given Point object.
-	    * @method distanceToXY
-	    * @param x {Number} The x value.
-	    * @param y {Number} The y value.
-	    * @param [round=false] {boolean} Round the distance to the nearest integer (default false)
-	    * @return {Number} The distance between this Point object and the x/y values.
-        * @public
-	    */
-        public distanceToXY(x: number, y: number, round: boolean = false): number {
-
-            var dx = this.x - x;
-            var dy = this.y - y;
-
-            if (round === true)
-            {
-                return Math.round(Math.sqrt(dx * dx + dy * dy));
-            }
-            else
-            {
-                return Math.sqrt(dx * dx + dy * dy);
-            }
-
-        }
-
-        /**
-        * Returns the distance between the two Point objects.
-        * @method distanceBetween
-        * @param pointA {Kiwi.Geom.Point} The first Point object.
-        * @param pointB {Kiwi.Geom.Point} The second Point object.
-        * @param [round=false] {boolean} Round the distance to the nearest integer (default false)
-        * @return {Number} The distance between the two Point objects.
-        * @public
-        */
-        static distanceBetween(pointA: Point, pointB: Point, round: boolean = false): number {
-
-            var dx: number = pointA.x - pointB.x;
-            var dy: number = pointA.y - pointB.y;
-
-            if (round === true)
-            {
-                return Math.round(Math.sqrt(dx * dx + dy * dy));
-            }
-            else
-            {
-                return Math.sqrt(dx * dx + dy * dy);
-            }
-
-        }
-        
-        /**
-        * Creates a new point with cartesian coordinates from a pair of polar coordinates
-        * @method polar
-        * @param length {Number} The length coordinate of the polar pair.
-        * @param angle {Number} The angle, in radians, of the polar pair.
-        * @return {Kiwi.Geom.Point} The new Cartesian Point object.
-        * @public
-        */
-        static polar(length: number, angle: number): Point {
-            return new Point(length * Math.cos(angle), length * Math.sin(angle));
-                   
-        }
-
-	    /**
-	    * Returns true if the distance between this point and a target point is greater than or equal a specified distance.
-	    * This avoids using a costly square root operation
-	    * @method distanceCompare
-	    * @param target {Kiwi.Geom.Point} The Point object to use for comparison.
-	    * @param distance {Number} The distance to use for comparison.
-	    * @return {Boolean} True if distance is >= specified distance.
-        * @public
-	    */
-        public distanceCompare(target: Point, distance: number): boolean {
-
-            if (this.distanceTo(target) >= distance)
-            {
-                return true;
-            }
-            else
-            {
-                return false;
-            }
-
-        }
-
-	    /**
-	    * Determines whether this Point object and the given point object are equal. They are equal if they have the same x and y values.
-	    * @method equals
-	    * @param point {Kiwi.Geom.Point} The point to compare against.
-	    * @return {boolean} A value of true if the object is equal to this Point object; false if it is not equal.
-        * @public
-	    */
-        public equals(toCompare: Point): boolean {
-
-            if (this.x === toCompare.x && this.y === toCompare.y)
-            {
-                return true;
-            }
-            else
-            {
-                return false;
-            }
-
-        }
-
-        /**
-        * Determines a point between two specified points. 
-        * The parameter f determines where the new interpolated point is located relative to the two end points specified by parameters pt1 and pt2.
-        *
-        * The closer the value of the parameter f is to 1.0, 
-        * the closer the interpolated point is to the first point (parameter pt1). 
-        * The closer the value of the parameter f is to 0, the closer the interpolated point is to the second point (parameter pt2).
-        *
-        * @method interpolate
-        * @param pointA{Kiwi.Geom.Point} The first Point object.
-        * @param pointB {Kiwi.Geom.Point} The second Point object.
-        * @param f {Number} The level of interpolation between the two points. Indicates where the new point will be, along the line between pt1 and pt2. If f=1, pt1 is returned; if f=0, pt2 is returned.
-        * @return {Kiwi.Geom.Point} The new interpolated Point object.
-        * @public
-        */
-        public static interpolate(pointA:Point, pointB:Point, f:number):Point {
-            
-            var xDiff: number = pointB.x - pointA.x;
-            var yDiff: number = pointB.y - pointA.y;
-            return new Point(pointB.x - xDiff * f, pointB.y - yDiff * f);
-
-        }
-
-	    /**
-	    * Offsets the Point object by the specified amount. The value of dx is added to the original value of x to create the new x value.
-	    * The value of dy is added to the original value of y to create the new y value.
-        *
-	    * @method offset
-	    * @param dx {Number} The amount by which to offset the horizontal coordinate, x.
-	    * @param dy {Number} The amount by which to offset the vertical coordinate, y.
-	    * @return {Kiwi.Geom.Point} This Point object. Useful for chaining method calls.
-        * @public
-	    */
-        public offset(dx: number, dy: number): Point {
-
-            this.x += dx;
-            this.y += dy;
-
-            return this;
-
-        }
-
-        
-	    /**
-	    * Sets the x and y values of this Point object to the given coordinates.
-	    * @method setTo
-	    * @param x {Number} The horizontal position of this point.
-	    * @param y {Number} The vertical position of this point.
-	    * @return {Kiwi.Geom.Point} This Point object. Useful for chaining method calls.
-        * @public
-	    */
-        public setTo(x: number, y: number): Point {
-
-            this.x = x;
-            this.y = y;
-
-            return this;
-
-        }
-
-	    /**
-	    * Subtracts the coordinates of another point from the coordinates of this point to create a new point.
-	    * @method subtract
-	    * @param point {Kiwi.Geom.Point} The point to be subtracted.
-	    * @param output {Kiwi.Geom.Point} Optional Point object. If given the values will be set into this object, otherwise a brand new Point object will be created and returned.
-	    * @return {Kiwi.Geom.Point} The new Point object.
-        * @public
-	    */
-        public subtract(point: Point, output: Point = new Point): Point {
-
-            return output.setTo(this.x - point.x, this.y - point.y);
-
-        }
-
-        public getCSS(): string {
-
-            return this.x + 'px ' + this.y + 'px';
-
-        }
-
-	    /**
-	    * Returns a string representation of this object.
-	    * @method toString
-	    * @return {String} a string representation of the instance.
-        * @public
-	    */
-        public toString(): string {
-
-            return '[{Point (x=' + this.x + ' y=' + this.y + ')}]';
-
-        }
-
-    }
-
-}
\ No newline at end of file
+	/**
+	* Represents a location in a two-dimensional coordinate system, where x represents the horizontal axis and y represents the vertical axis.
+	*
+	* @class Point
+	* @constructor
+	* @namespace Kiwi.Geom
+	* @param [x=0] {Number} Position of this point on the x-axis.
+	* @param [y=0] {Number} Position of this point on the y-axis.
+	*
+	*/
+	export class Point {
+
+		constructor (x: number = 0, y: number = 0) {
+
+			this.setTo(x, y);
+
+		}
+
+
+		/**
+		* The type of this object.
+		* @method objType
+		* @return {String} "Point"
+		* @public
+		*/
+		public objType() {
+			return "Point";
+		}
+
+		/** 
+		* The horizontal position of this point.
+		* @property x
+		* @type Number
+		* @public
+		*/
+		public x: number;
+
+		/** 
+		* The vertical position of this point.
+		* @property y
+		* @type Number
+		* @public
+		*/
+		public y: number;
+
+
+		/**
+		* Converts a pair of polar coordinates to a Cartesian point coordinate and sets them on the point instance.
+		* @method polar
+		* @param length {Number} The length coordinate of the polar pair.
+		* @param angle {Number} The angle, in radians, of the polar pair.
+		* @return {Kiwi.Geom.Point} The new Cartesian Point object.
+		* @public
+		*/
+		public polar(distance: number, angle: number): Point {
+			//Note: Would be badarse if it did this based on the current x/y coordinates
+			this.x = distance * Math.cos(angle); 
+			this.y = distance * Math.sin(angle);
+			return this;
+		}
+
+		/**
+		* Adds the coordinates of another point to the coordinates of this point to create a new point.
+		* @method add
+		* @param toAdd {Kiwi.Geom.Point} The point to be added.
+		* @param output {Kiwi.Geom.Point} 
+		* @return {Kiwi.Geom.Point} The new Point object.
+		* @public
+		*/
+		public add(toAdd: Point, output: Point = new Point): Point {
+
+			return output.setTo(this.x + toAdd.x, this.y + toAdd.y);
+
+		}
+
+		/**
+		* Adds the given values to the coordinates of this point and returns it
+		* @method addTo
+		* @param x {Number} The amount to add to the x value of the point
+		* @param y {Number} The amount to add to the x value of the point
+		* @return {Kiwi.Geom.Point} This Point object.
+		* @public
+		*/
+		public addTo(x: number = 0, y: number = 0): Point {
+
+			return this.setTo(this.x + x, this.y + y);
+
+		}
+
+		/**
+		* Adds the given values to the coordinates of this point and returns it
+		* @method subtractFrom
+		* @param x {Number} The amount to subtract from the x value of the point
+		* @param y {Number} The amount to subtract from the x value of the point
+		* @return {Kiwi.Geom.Point} This Point object.
+		* @public
+		*/
+		public subtractFrom(x: number = 0, y: number = 0): Point {
+
+			return this.setTo(this.x - x, this.y - y);
+
+		}
+
+		/**
+		* Inverts the x and y values of this point
+		* @method invert
+		* @return {Kiwi.Geom.Point} This Point object.
+		* @public
+		*/
+		public invert(): Point {
+
+			return this.setTo(this.y, this.x);
+
+		}
+
+		/**
+		* Clamps this Point object to be between the given min and max.
+		* @method clamp
+		* @param min {number} The minimum value to clamp this Point to.
+		* @param max {number} The maximum value to clamp this Point to.
+		* @return {Kiwi.Geom.Point} This Point object.
+		* @public
+		*/
+		public clamp(min: number, max: number): Point {
+
+			this.clampX(min, max);
+			this.clampY(min, max);
+			return this;
+
+		}
+
+		/**
+		* Clamps the x value of this Point object to be between the given min and max
+		* @method clampX
+		* @param min {Number} The minimum value to clamp this Point to
+		* @param max {Number} The maximum value to clamp this Point to
+		* @return {Kiwi.Geom.Point} This Point object.
+		* @public
+		*/
+		public clampX(min: number, max: number): Point {
+
+			this.x = Math.max(Math.min(this.x, max), min);
+
+			return this;
+
+		}
+
+		/**
+		* Clamps the y value of this Point object to be between the given min and max
+		* @method clampY
+		* @param min {Number} The minimum value to clamp this Point to
+		* @param max {Number} The maximum value to clamp this Point to
+		* @return {Kiwi.Geom.Point} This Point object.
+		* @public
+		*/
+		public clampY(min: number, max: number): Point {
+
+			this.x = Math.max(Math.min(this.x, max), min);
+			this.y = Math.max(Math.min(this.y, max), min);
+
+			return this;
+
+		}
+
+		/**
+		* Creates a copy of this Point.
+		* @method clone
+		* @param [output] {Kiwi.Geom.Point} Optional Point object. If given the values will be set into this object, otherwise a new Point object will be created.
+		* @return {Kiwi.Geom.Point} 
+		* @public
+		*/
+		public clone(output: Point = new Point): Point {
+
+			return output.setTo(this.x, this.y);
+
+		}
+
+		/**
+		* Copies the point data from the source Point object into this Point object.
+		* @method copyFrom
+		* @param source {Kiwi.Geom.Point} The point to copy from.
+		* @return {Kiwi.Geom.Point} This Point object. Useful for chaining method calls.
+		* @public
+		*/
+		public copyFrom(source: Point): Point {
+
+			return this.setTo(source.x, source.y);
+
+		}
+
+		/**
+		* Copies the point data from this Point object to the given target Point object.
+		* @method copyTo
+		* @param target {Kiwi.Geom.Point} target - The point to copy to.
+		* @return {Kiwi.Geom.Point} The target Point object.
+		* @public
+		*/
+		public copyTo(target: Point): Point {
+
+			return target.setTo(this.x, this.y);
+
+		}
+
+
+		/**
+		* Get the angle from this Point object to given Point object.
+		* @method angleTo
+		* @param target {Kiwi.Geom.Point} destination Point object.
+		* @return {Number} angle to point
+		* @public
+		*/
+		public angleTo(target: Point): number {
+
+			//Y then X ....cause JavaScript :P
+			return Math.atan2(target.y - this.y, target.x - this.x);
+
+		}
+
+		/**
+		* Get the angle from this Point object to given X,Y coordinates.
+		* @method angleTo
+		* @param x {Number} x value.
+		* @param y {Number} y value.
+		* @return {Number} angle to point.
+		*/
+		public angleToXY(x: number, y: number): number {
+			
+			//Y then X ....cause JavaScript :P
+			return Math.atan2(y - this.y, x - this.x);
+
+		}
+		
+		/**
+		* Returns the distance from this Point object to the given Point object.
+		* @method distanceTo
+		* @param target {Kiwi.Geom.Point} The destination Point object.
+		* @param round {boolean} Round the distance to the nearest integer (default false)
+		* @return {Number} The distance between this Point object and the destination Point object.
+		* @public
+		*/
+		public distanceTo(target: Point, round: boolean = false): number {
+
+			var dx = this.x - target.x;
+			var dy = this.y - target.y;
+
+			if (round === true)
+			{
+				return Math.round(Math.sqrt(dx * dx + dy * dy));
+			}
+			else
+			{
+				return Math.sqrt(dx * dx + dy * dy);
+			}
+
+		}
+
+		/**
+		* Returns the distance from this Point object to the given Point object.
+		* @method distanceToXY
+		* @param x {Number} The x value.
+		* @param y {Number} The y value.
+		* @param [round=false] {boolean} Round the distance to the nearest integer (default false)
+		* @return {Number} The distance between this Point object and the x/y values.
+		* @public
+		*/
+		public distanceToXY(x: number, y: number, round: boolean = false): number {
+
+			var dx = this.x - x;
+			var dy = this.y - y;
+
+			if (round === true)
+			{
+				return Math.round(Math.sqrt(dx * dx + dy * dy));
+			}
+			else
+			{
+				return Math.sqrt(dx * dx + dy * dy);
+			}
+
+		}
+
+		/**
+		* Returns the distance between the two Point objects.
+		* @method distanceBetween
+		* @param pointA {Kiwi.Geom.Point} The first Point object.
+		* @param pointB {Kiwi.Geom.Point} The second Point object.
+		* @param [round=false] {boolean} Round the distance to the nearest integer (default false)
+		* @return {Number} The distance between the two Point objects.
+		* @public
+		*/
+		static distanceBetween(pointA: Point, pointB: Point, round: boolean = false): number {
+
+			var dx: number = pointA.x - pointB.x;
+			var dy: number = pointA.y - pointB.y;
+
+			if (round === true)
+			{
+				return Math.round(Math.sqrt(dx * dx + dy * dy));
+			}
+			else
+			{
+				return Math.sqrt(dx * dx + dy * dy);
+			}
+
+		}
+		
+		/**
+		* Creates a new point with cartesian coordinates from a pair of polar coordinates
+		* @method polar
+		* @param length {Number} The length coordinate of the polar pair.
+		* @param angle {Number} The angle, in radians, of the polar pair.
+		* @return {Kiwi.Geom.Point} The new Cartesian Point object.
+		* @public
+		*/
+		static polar(length: number, angle: number): Point {
+			return new Point(length * Math.cos(angle), length * Math.sin(angle));
+				   
+		}
+
+		/**
+		* Returns true if the distance between this point and a target point is greater than or equal a specified distance.
+		* This avoids using a costly square root operation
+		* @method distanceCompare
+		* @param target {Kiwi.Geom.Point} The Point object to use for comparison.
+		* @param distance {Number} The distance to use for comparison.
+		* @return {Boolean} True if distance is >= specified distance.
+		* @public
+		*/
+		public distanceCompare(target: Point, distance: number): boolean {
+
+			if (this.distanceTo(target) >= distance)
+			{
+				return true;
+			}
+			else
+			{
+				return false;
+			}
+
+		}
+
+		/**
+		* Determines whether this Point object and the given point object are equal. They are equal if they have the same x and y values.
+		* @method equals
+		* @param point {Kiwi.Geom.Point} The point to compare against.
+		* @return {boolean} A value of true if the object is equal to this Point object; false if it is not equal.
+		* @public
+		*/
+		public equals(toCompare: Point): boolean {
+
+			if (this.x === toCompare.x && this.y === toCompare.y)
+			{
+				return true;
+			}
+			else
+			{
+				return false;
+			}
+
+		}
+
+		/**
+		* Determines a point between two specified points. 
+		* The parameter f determines where the new interpolated point is located relative to the two end points specified by parameters pt1 and pt2.
+		*
+		* The closer the value of the parameter f is to 1.0, 
+		* the closer the interpolated point is to the first point (parameter pt1). 
+		* The closer the value of the parameter f is to 0, the closer the interpolated point is to the second point (parameter pt2).
+		*
+		* @method interpolate
+		* @param pointA{Kiwi.Geom.Point} The first Point object.
+		* @param pointB {Kiwi.Geom.Point} The second Point object.
+		* @param f {Number} The level of interpolation between the two points. Indicates where the new point will be, along the line between pt1 and pt2. If f=1, pt1 is returned; if f=0, pt2 is returned.
+		* @return {Kiwi.Geom.Point} The new interpolated Point object.
+		* @public
+		*/
+		public static interpolate(pointA:Point, pointB:Point, f:number):Point {
+			
+			var xDiff: number = pointB.x - pointA.x;
+			var yDiff: number = pointB.y - pointA.y;
+			return new Point(pointB.x - xDiff * f, pointB.y - yDiff * f);
+
+		}
+
+		/**
+		* Offsets the Point object by the specified amount. The value of dx is added to the original value of x to create the new x value.
+		* The value of dy is added to the original value of y to create the new y value.
+		*
+		* @method offset
+		* @param dx {Number} The amount by which to offset the horizontal coordinate, x.
+		* @param dy {Number} The amount by which to offset the vertical coordinate, y.
+		* @return {Kiwi.Geom.Point} This Point object. Useful for chaining method calls.
+		* @public
+		*/
+		public offset(dx: number, dy: number): Point {
+
+			this.x += dx;
+			this.y += dy;
+
+			return this;
+
+		}
+
+
+		/**
+		* Sets the x and y values of this Point object to the given coordinates.
+		* @method setTo
+		* @param x {Number} The horizontal position of this point.
+		* @param y {Number} The vertical position of this point.
+		* @return {Kiwi.Geom.Point} This Point object. Useful for chaining method calls.
+		* @public
+		*/
+		public setTo(x: number, y: number): Point {
+
+			this.x = x;
+			this.y = y;
+
+			return this;
+
+		}
+
+		/**
+		* Subtracts the coordinates of another point from the coordinates of this point to create a new point.
+		* @method subtract
+		* @param point {Kiwi.Geom.Point} The point to be subtracted.
+		* @param output {Kiwi.Geom.Point} Optional Point object. If given the values will be set into this object, otherwise a brand new Point object will be created and returned.
+		* @return {Kiwi.Geom.Point} The new Point object.
+		* @public
+		*/
+		public subtract(point: Point, output: Point = new Point): Point {
+
+			return output.setTo(this.x - point.x, this.y - point.y);
+
+		}
+
+		public getCSS(): string {
+
+			return this.x + 'px ' + this.y + 'px';
+
+		}
+
+		/**
+		* Returns a string representation of this object.
+		* @method toString
+		* @return {String} a string representation of the instance.
+		* @public
+		*/
+		public toString(): string {
+
+			return '[{Point (x=' + this.x + ' y=' + this.y + ')}]';
+
+		}
+
+	}
+
+}
diff --git a/src/geom/Ray.ts b/src/geom/Ray.ts
index 07695a1..8145dd6 100644
--- a/src/geom/Ray.ts
+++ b/src/geom/Ray.ts
@@ -6,209 +6,206 @@
 
 module Kiwi.Geom {
 
-    /**
-    * Represents a halfline. The ray starts at the first point and extends infinitely in the direction of the second.
-    *
-    * @class Ray
-    * @namespace Kiwi.Geom
-    * @constructor
-    * @param [x1=0] {Number} Starting location of the ray on the x-axis.
-    * @param [y1=0] {Number} Starting location of the ray on the y-axis.
-    * @param [x2=0] {Number} End location of the ray on the x-axis. Used to calculate direction so it isn't really the 'end' location.
-    * @param [y2=0] {Number} End location of the ray on the y-axis. Used to calculate direction so it isn't really the 'end' location.
-    * @return {Kiwi.Geom.Ray} This Object
-    *
-    */
-    export class Ray {
-
-        constructor(x1: number = 0, y1: number = 0, x2: number = 0, y2: number = 0) {
-
-            this.setTo(x1, y1, x2, y2);
-
-        }
-        /**
-        * The type of this object.
-        * @method objType
-        * @return {String} "Ray"
-        * @public
-        */
-        public objType() {
-            return "Ray";
-        }
-
-        /**
-        * The x component of the initial point of the ray
-        * @property x1
-        * @type Number
-        * @default 0
-        * @public
-        */
-        public x1: number = 0;
-
-        /**
-        * The y component of the initial point of the ray
-        * @property y1
-        * @type Number
-        * @default 0
-        * @public
-        */
-        public y1: number = 0;
-
-        /**
-        * The x component of the direction point of the ray
-        * @property x2
-        * @type Number
-        * @default 0
-        * @public
-        */
-        public x2: number = 0;
-
-        /**
-        * The y component of the direction point of the ray
-        * @property y2
-        * @type Number
-        * @default 0
-        * @public
-        */
-        public y2: number = 0;
-
-        /**
-        * Makes a copy of this Ray either as a new Ray object or,
-        * makes a passed Ray a copy of this one. 
-        *
-        * @method clone
-        * @param [output] {Kiwi.Geom.Ray} 
-        * @return {Kiwi.Geom.Ray}
-        * @public
-        */
-        public clone(output: Ray = new Ray): Ray {
-
-            return output.setTo(this.x1, this.y1, this.x2, this.y2);
-
-        }
-
-        /**
-        * Makes this Ray the same as a passed Ray.
-        * @method copyFrom
-        * @param source {Kiwi.Geom.Ray} 
-        * @return {Kiwi.Geom.Ray}
-        * @public
-        */
-        public copyFrom(source: Ray): Ray {
-
-            return this.setTo(source.x1, source.y1, source.x2, source.y2);
-
-        }
-
-        /**
-        * Makes a passed Ray the same as this Ray object. 
-        * @method copyTo
-        * @param target {Kiwi.Geom.Ray} 
-        * @return {Kiwi.Geom.Ray}
-        * @public
-        */
-        public copyTo(target: Ray): Ray {
-
-            return target.copyFrom(this);
-
-        }
-
-        /**
-        * Sets the origin and the direction of this Ray.
-        * @method setTo
-        * @param [x1=0] {Number} 
-        * @param [y1=0] {Number} 
-        * @param [x2=0] {Number} 
-        * @param [y2=0] {Number} 
-        * @return {Kiwi.Geom.Ray}
-        * @public
-        */
-        public setTo(x1: number = 0, y1: number = 0, x2: number = 0, y2: number = 0): Ray {
-
-            this.x1 = x1;
-            this.y1 = y1;
-            this.x2 = x2;
-            this.y2 = y2;
-
-            return this;
-
-        }
-
-        /**
-        * Get the angle of the ray.
-        * @property angle
-        * @type Number
-        * @readOnly
-        * @public
-        */
-        public get angle(): number {
-
-            return Math.atan2(this.y2 - this.y1, this.x2 - this.x1);
-
-        }
-
-        /**
-        * Get the slope of the ray.
-        * @property slope
-        * @type Number
-        * @readOnly
-        * @public
-        */
-        public get slope(): number {
-
-            return (this.y2 - this.y1) / (this.x2 - this.x1);
-
-        }
-
-        /**
-        * 
-        * @property yIntercept
-        * @type Number
-        * @readOnly
-        * @public
-        */
-        public get yIntercept(): number {
-
-            return (this.y1 - this.slope * this.x1);
-
-        }
-
-        /**
-        * Check if the Ray passes through a point.
-        * @method isPointOnRay
-        * @param x {Number}
-        * @param y {Number}
-        * @return {boolean}
-        * @public
-        */
-        public isPointOnRay(x: number, y: number): boolean {
-
-            if ((x - this.x1) * (this.y2 - this.y1) === (this.x2 - this.x1) * (y - this.y1)) {
-                if (Math.atan2(y-this.y1, x-this.x1) == Math.atan2(this.y2-this.y1, this.x2- this.x1)){ 
-                    return true
-                }
-
-            }
-            
-            return false;
-            
-
-        }
-
-        
-        
-        /**
-        * Get a string representation of the ray.
-        * @method toString
-        * @return {String}
-        * @public
-        */
-        public toString(): string {
-
-            return "[{Ray (x1=" + this.x1 + " y1=" + this.y1 + " x2=" + this.x2 + " y2=" + this.y2 + ")}]";
-
-        }
-
-    }
-
-}
\ No newline at end of file
+	/**
+	* Represents a halfline. The ray starts at the first point and extends infinitely in the direction of the second.
+	*
+	* @class Ray
+	* @namespace Kiwi.Geom
+	* @constructor
+	* @param [x1=0] {Number} Starting location of the ray on the x-axis.
+	* @param [y1=0] {Number} Starting location of the ray on the y-axis.
+	* @param [x2=0] {Number} End location of the ray on the x-axis. Used to calculate direction so it isn't really the 'end' location.
+	* @param [y2=0] {Number} End location of the ray on the y-axis. Used to calculate direction so it isn't really the 'end' location.
+	* @return {Kiwi.Geom.Ray} This Object
+	*
+	*/
+	export class Ray {
+
+		constructor(x1: number = 0, y1: number = 0, x2: number = 0, y2: number = 0) {
+
+			this.setTo(x1, y1, x2, y2);
+
+		}
+		/**
+		* The type of this object.
+		* @method objType
+		* @return {String} "Ray"
+		* @public
+		*/
+		public objType() {
+			return "Ray";
+		}
+
+		/**
+		* The x component of the initial point of the ray
+		* @property x1
+		* @type Number
+		* @default 0
+		* @public
+		*/
+		public x1: number = 0;
+
+		/**
+		* The y component of the initial point of the ray
+		* @property y1
+		* @type Number
+		* @default 0
+		* @public
+		*/
+		public y1: number = 0;
+
+		/**
+		* The x component of the direction point of the ray
+		* @property x2
+		* @type Number
+		* @default 0
+		* @public
+		*/
+		public x2: number = 0;
+
+		/**
+		* The y component of the direction point of the ray
+		* @property y2
+		* @type Number
+		* @default 0
+		* @public
+		*/
+		public y2: number = 0;
+
+		/**
+		* Makes a copy of this Ray either as a new Ray object or,
+		* makes a passed Ray a copy of this one. 
+		*
+		* @method clone
+		* @param [output] {Kiwi.Geom.Ray} 
+		* @return {Kiwi.Geom.Ray}
+		* @public
+		*/
+		public clone(output: Ray = new Ray): Ray {
+
+			return output.setTo(this.x1, this.y1, this.x2, this.y2);
+
+		}
+
+		/**
+		* Makes this Ray the same as a passed Ray.
+		* @method copyFrom
+		* @param source {Kiwi.Geom.Ray} 
+		* @return {Kiwi.Geom.Ray}
+		* @public
+		*/
+		public copyFrom(source: Ray): Ray {
+
+			return this.setTo(source.x1, source.y1, source.x2, source.y2);
+
+		}
+
+		/**
+		* Makes a passed Ray the same as this Ray object. 
+		* @method copyTo
+		* @param target {Kiwi.Geom.Ray} 
+		* @return {Kiwi.Geom.Ray}
+		* @public
+		*/
+		public copyTo(target: Ray): Ray {
+
+			return target.copyFrom(this);
+
+		}
+
+		/**
+		* Sets the origin and the direction of this Ray.
+		* @method setTo
+		* @param [x1=0] {Number} 
+		* @param [y1=0] {Number} 
+		* @param [x2=0] {Number} 
+		* @param [y2=0] {Number} 
+		* @return {Kiwi.Geom.Ray}
+		* @public
+		*/
+		public setTo(x1: number = 0, y1: number = 0, x2: number = 0, y2: number = 0): Ray {
+
+			this.x1 = x1;
+			this.y1 = y1;
+			this.x2 = x2;
+			this.y2 = y2;
+
+			return this;
+
+		}
+
+		/**
+		* Get the angle of the ray.
+		* @property angle
+		* @type Number
+		* @readOnly
+		* @public
+		*/
+		public get angle(): number {
+
+			return Math.atan2(this.y2 - this.y1, this.x2 - this.x1);
+
+		}
+
+		/**
+		* Get the slope of the ray.
+		* @property slope
+		* @type Number
+		* @readOnly
+		* @public
+		*/
+		public get slope(): number {
+
+			return (this.y2 - this.y1) / (this.x2 - this.x1);
+
+		}
+
+		/**
+		* 
+		* @property yIntercept
+		* @type Number
+		* @readOnly
+		* @public
+		*/
+		public get yIntercept(): number {
+
+			return (this.y1 - this.slope * this.x1);
+
+		}
+
+		/**
+		* Check if the Ray passes through a point.
+		* @method isPointOnRay
+		* @param x {Number}
+		* @param y {Number}
+		* @return {boolean}
+		* @public
+		*/
+		public isPointOnRay(x: number, y: number): boolean {
+
+			if ((x - this.x1) * (this.y2 - this.y1) === (this.x2 - this.x1) * (y - this.y1)) {
+				if (Math.atan2(y-this.y1, x-this.x1) == Math.atan2(this.y2-this.y1, this.x2- this.x1)){ 
+					return true
+				}
+
+			}
+
+			return false;
+		}
+
+		
+		/**
+		* Get a string representation of the ray.
+		* @method toString
+		* @return {String}
+		* @public
+		*/
+		public toString(): string {
+
+			return "[{Ray (x1=" + this.x1 + " y1=" + this.y1 + " x2=" + this.x2 + " y2=" + this.y2 + ")}]";
+
+		}
+
+	}
+
+}
diff --git a/src/geom/Rectangle.ts b/src/geom/Rectangle.ts
index 9082584..b6c98bd 100644
--- a/src/geom/Rectangle.ts
+++ b/src/geom/Rectangle.ts
@@ -6,710 +6,710 @@
 
 module Kiwi.Geom {
 
-    /**
-    * An area defined by its position, as indicated by its top-left corner (x,y) and width and height
-    *
-    * @class Rectangle
-    * @namespace Kiwi.Geom
-    * @constructor
-    * @param [x=0] {Number} The x coordinate of the top-left corner of the rectangle.
-    * @param [y=0] {Number} The y coordinate of the top-left corner of the rectangle.
-    * @param [width=0] {Number} width The width of the rectangle in pixels.
-    * @param [height=0] {Number} height The height of the rectangle in pixels.
-    * @return {Kiwi.Geom.Rectangle} This rectangle object
-    * 
-    */
-    export class Rectangle {
-
-        /**
-        * Creates a new Rectangle object with the top-left corner specified by the x and y parameters and with the specified width and height parameters. If you call this function without parameters, a rectangle with x, y, width, and height properties set to 0 is created.
-        **/
-        constructor (x: number = 0, y: number = 0, width: number = 0, height: number = 0) {
-
-            this.setTo(x, y, width, height);
-
-        }
-
-        /**
-        * The type of this object.
-        * @method objType
-        * @return {String} "Rectangle"
-        * @public
-        */
-        public objType() {
-            return "Rectangle";
-        }
-
-        /** 
-        * The x coordinate of the top-left corner of the rectangle
-        * @property x
-        * @type Number
-        * @default 0
-        * @public
-        */
-        public x: number = 0;
-
-        /** 
-        * The y coordinate of the top-left corner of the rectangle
-        * @property y
-        * @type Number
-        * @default 0
-        * @public
-        */
-        public y: number = 0;
-
-        /** 
-        * The width of the rectangle in pixels
-        * @property width
-        * @type Number
-        * @default 0
-        * @public
-        */
-        public width: number = 0;
-
-        /** 
-        * The height of the rectangle in pixels
-        * @property height
-        * @type Number
-        * @default 0
-        * @public
-        */
-        public height: number = 0;
-
-        /**
-        * The sum of the y and height properties. 
-        * Changing the bottom property of a Rectangle object has no effect on the x, y and width properties, 
-        * but does change the height property.
-        *
-        * @property bottom
-        * @type Number
-        * @public
-        */
-        public set bottom(value: number) {
-
-            if (value)
-            {
-                if (value < this.y)
-                {
-                    this.height = 0;
-                }
-                else
-                {
-                    this.height = value;
-                }
-            }
-
-        }
-
-        public get bottom(): number {
-
-            return this.y + this.height;
-
-        }
-
-        /**
-        * Returns a Point containing the location of the center of the Rectangle, relative to the top left edge
-        * @property center
-        * @type Kiwi.Geom.Point
-        * @readOnly 
-        * @public
-        */
-        public get center(): Point {
-
-            var output: Point = new Point();
-            return output.setTo(Math.round(this.width / 2), Math.round(this.height / 2));
-
-        }
-
-        /**
-        * Returns a Point containing the location of the Rectangle's bottom-right corner, determined by the values of the right and bottom properties.
-        * @property bottomRight
-        * @type Kiwi.Geom.Point 
-        * @public
-        */
-        public set bottomRight(value: Point) {
-            
-            if (value)
-            {
-                this.right = value.x;
-                this.bottom = value.y;
-            }
-
-        }
-
-        public get bottomRight(): Point {
-
-            var output: Point = new Point();
-            return output.setTo(this.right, this.bottom);
-
-        }
-
-        /**
-        * The x coordinate of the top-left corner of the rectangle. Changing the left property of a Rectangle object has no effect on the y and height properties. However it does affect the width property, whereas changing the x value does not affect the width property.
-        * @property left
-        * @type Number 
-        * @public
-        */
-        public set left(value: number) {
-
-            if (value)
-            {
-                var diff = this.x - value;
-
-                if (this.width + diff < 0)
-                {
-                    this.width = 0;
-
-                    this.x = value;
-                }
-                else
-                {
-                    this.width += diff;
-
-                    this.x = value;
-                }
-            }
-
-        }
-
-        public get left(): number {
-
-            return this.x;
-
-        }
-
-        /**
-        * The sum of the x and width properties. Changing the right property of a Rectangle object has no effect on the x, y and height properties. However it does affect the width property.
-        * @property right
-        * @type Number 
-        * @public
-        */
-        public set right(value: number) {
-
-            if (value)
-            {
-                if (value < this.x)
-                {
-                    this.width = 0;
-                }
-                else
-                {
-                    this.width = value - this.x;
-                }
-            }
-
-        }
-
-        public get right(): number {
-
-            return this.x + this.width;
-
-        }
-
-        /**
-        * The size of the Rectangle object, expressed as a Point object with the values of the width and height properties.
-        * @property size
-        * @type Kiwi.Geom.Point
-        * @readOnly
-        * @public
-        */
-        public get size(): Point {
-
-            var output: Point = new Point();
-            return output.setTo(this.width, this.height);
-
-        }
-
-        /**
-        * The volume of the Rectangle object in pixels, derived from width * height
-        * @property volume
-        * @type Number
-        * @readOnly 
-        * @return
-        */
-        public get volume(): number {
-
-            return this.width * this.height;
-
-        }
-
-        /**
-        * The perimeter size of the Rectangle object in pixels. This is the sum of all 4 sides.
-        * @property perimeter
-        * @type Number
-        * @readOnly 
-        * @public
-        */
-        public get perimeter(): number {
-
-            return (this.width * 2) + (this.height * 2);
-
-        }
-
-        /**
-        * The y coordinate of the top-left corner of the rectangle. 
-        * Changing the top property of a Rectangle object has no effect on the x and width properties.
-        * However it does affect the height property, whereas changing the y value does not affect the height property.
-        *
-        * @method top
-        * @return {Number} 
-        * @public
-        */
-        public set top(value: number) {
-
-            if (value)
-            {
-                var diff = this.y - value;
-
-                if (this.height + diff < 0)
-                {
-                    this.height = 0;
-
-                    this.y = value;
-                }
-                else
-                {
-                    this.height += diff;
-
-                    this.y = value;
-                }
-            }
-
-        }
-
-        public get top(): number {
-
-            return this.y;
-
-        }
-        /**
-        * The location of the Rectangle object's top-left corner, determined by the x and y coordinates of the point.
-        * @property topLeft
-        * @type Kiwi.Geom.Point
-        * @public
-        */
-        public set topLeft(value: Point) {
-
-            if (value)
-            {
-                this.x = value.x;
-                this.y = value.y;
-            }
-
-        }
-
-        public get topLeft(): Point {
-
-            var output: Point = new Point();
-            return output.setTo(this.x, this.y);
-
-        }
-
-        /**
-        * Returns a new Rectangle object with the same values for the x, y, width, and height properties as the original Rectangle object.
-        * @method clone
-        * @param [output] {Kiwi.Geom.Rectangle} Optional Rectangle object. If given the values will be set into the object, otherwise a brand new Rectangle object will be created and returned.
-        * @return {Kiwi.Geom.Rectangle}
-        * @public
-        */
-        public clone(output: Rectangle = new Rectangle): Rectangle {
-
-            return output.setTo(this.x, this.y, this.width, this.height);
-
-        }
-
-        /**
-        * Determines whether the specified coordinates are contained within the region defined by this Rectangle object.
-        * @method contains
-        * @param {Number} x The x coordinate of the point to test.
-        * @param {Number} y The y coordinate of the point to test.
-        * @return {boolean} A value of true if the Rectangle object contains the specified point; otherwise false.
-        * @public
-        */
-        public contains(x: number, y: number): boolean {
-
-            if (x >= this.x && x <= this.right && y >= this.y && y <= this.bottom)
-            {
-                return true;
-            }
-
-            return false;
-
-        }
-
-        /**
-        * Determines whether the specified point is contained within the rectangular region defined by this Rectangle object.
-        * This method is similar to the Rectangle.contains() method, except that it takes a Point object as a parameter.
-        *
-        * @method containsPoint
-        * @param {Kiwi.Geom.Point} point The point object being checked. Can be Kiwi.Geom.Point or any object with .x and .y values.
-        * @return {boolean} A value of true if the Rectangle object contains the specified point; otherwise false.
-        * @public
-        */
-        public containsPoint(point: Point): boolean {
-
-            return this.contains(point.x, point.y);
-
-        }
-
-        /**
-        * Determines whether the Rectangle object specified by the rect parameter is contained within this Rectangle object. 
-        * A Rectangle object is said to contain another if the second Rectangle object falls entirely within the boundaries of the first.
-        *
-        * @method containsRect
-        * @param rect {Kiwi.Geom.Rectangle} The rectangle object being checked.
-        * @return {boolean} A value of true if the Rectangle object contains the specified point; otherwise false.
-        * @public
-        */
-        public containsRect(rect: Rectangle): boolean {
-
-            //	If the given rect has a larger volume than this one then it can never contain it
-            if (rect.volume > this.volume)
-            {
-                return false;
-            }
-
-            if (rect.x >= this.x && rect.y >= this.y && rect.right <= this.right && rect.bottom <= this.bottom)
-            {
-                return true;
-            }
-
-            return false;
-
-        }
-
-        /**
-        * Copies all of rectangle data from the source Rectangle object into the calling Rectangle object.
-        *
-        * @method copyFrom
-        * @param source {Kiwi.Geom.Rectangle} The source rectangle object to copy from
-        * @return {Kiwi.Geom.Rectangle} This rectangle object
-        * @public
-        */
-        public copyFrom(source: Rectangle): Rectangle {
-
-            return this.setTo(source.x, source.y, source.width, source.height);
-
-        }
-
-        /**
-        * Copies all the rectangle data from this Rectangle object into the destination Rectangle object.
-        * Creates a new rectangle if one was not passed.
-        *
-        * @method copyTo
-        * @param [target] {Kiwi.Geom.Rectangle} The destination rectangle object to copy in to. Creates a new rectangle if one is not passed.
-        * @return {Kiwi.Geom.Rectangle} The destination rectangle object
-        * @public
-        */
-        public copyTo(target: Rectangle = new Rectangle()): Rectangle {
-
-            return target.copyFrom(this);
-
-        }
-
-        /**
-        * Determines whether the object specified in the toCompare parameter is equal to this Rectangle object.
-        * This method compares the x, y, width, and height properties of an object against the same properties of this Rectangle object.
-        *
-        * @method equals
-        * @param  toCompare {Kiwi.Geom.Rectangle} toCompare The rectangle to compare to this Rectangle object.
-        * @return {boolean} A value of true if the object has exactly the same values for the x, y, width, and height properties as this Rectangle object; otherwise false.
-        * @public
-        */
-        public equals(toCompare: Rectangle): boolean {
-
-            if (this.x === toCompare.x && this.y === toCompare.y && this.width === toCompare.width && this.height === toCompare.height)
-            {
-                return true;
-            }
-
-            return false;
-
-        }
-
-        /**
-        * Increases the size of the Rectangle object by the specified amounts, in pixels.
-        *
-        * The center point of the Rectangle object stays the same,
-        * and its size increases to the left and right by the dx value,
-        * and to the top and the bottom by the dy value.
-        *
-        * @method inflate
-        * @param dx {Number} dx The amount to be added to the left side of this Rectangle.
-        * @param dy {Number} dy The amount to be added to the bottom side of this Rectangle.
-        * @return {Kiwi.Geom.Rectangle} This Rectangle object.
-        * @public
-        */
-        public inflate(dx: number, dy: number): Rectangle {
-
-            if (!isNaN(dx) && !isNaN(dy))
-            {
-                this.x -= dx;
-                this.width += 2 * dx;
-
-                this.y -= dy;
-                this.height += 2 * dy;
-            }
-
-            return this;
-
-        }
-
-        /**
-        * Increases the size of the Rectangle object. This method is similar to the Rectangle.inflate() method except it takes a Point object as a parameter.
-        *
-        * @method inflatePoint
-        * @param point {Kiwi.Geom.Point} The x property of this Point object is used to increase the horizontal dimension of the Rectangle object. The y property is used to increase the vertical dimension of the Rectangle object.
-        * @return {Kiwi.Geom.Rectangle} This Rectangle object.
-        * @public
-        */
-        public inflatePoint(point: Point): Rectangle {
-
-            return this.inflate(point.x, point.y);
-
-        }
-
-        /**
-        * If the Rectangle object specified in the toIntersect parameter intersects with this Rectangle object,
-        * returns the area of intersection as a Rectangle object.
-        * If the rectangles do not intersect, this method returns an empty Rectangle object with its properties set to 0.
-        *
-        * @method intersection
-        * @param toIntersect {Kiwi.Geom.Rectangle} The Rectangle object to compare against to see if it intersects with this Rectangle object.
-        * @param [output] {Kiwi.Geom.Rectangle} Optional Rectangle object. If given the intersection values will be set into this object, otherwise a brand new Rectangle object will be created and returned.
-        * @return {Kiwi.Geom.Rectangle} A Rectangle object that equals the area of intersection. If the rectangles do not intersect, this method returns an empty Rectangle object; that is, a rectangle with its x, y, width, and height properties set to 0.
-        * @public
-        */
-        public intersection(toIntersect: Rectangle, output: Rectangle = new Rectangle): Rectangle {
-
-            if (this.intersects(toIntersect) === true)
-            {
-                output.x = Math.max(toIntersect.x, this.x);
-                output.y = Math.max(toIntersect.y, this.y);
-                output.width = Math.min(toIntersect.right, this.right) - output.x;
-                output.height = Math.min(toIntersect.bottom, this.bottom) - output.y;
-            }
-
-            return output;
-
-        }
-
-        /**
-        * Determines whether the object specified in the toIntersect parameter intersects with this Rectangle object. 
-        * This method checks the x, y, width, and height properties of the specified Rectangle object to see if it intersects with this Rectangle object.
-        *
-        * @method intersects
-        * @param toIntersect {Kiwi.Geom.Rectangle} The Rectangle object to compare against to see if it intersects with this Rectangle object.
-        * @return {boolean} A value of true if the specified object intersects with this Rectangle object; otherwise false.
-        * @public
-        **/
-        public intersects(toIntersect: Rectangle): boolean {
-
-            if (toIntersect.x > this.right - 1) {
-                return false;
-            }
-
-            if (toIntersect.right - 1 < this.x) {
-                return false;
-            }
-
-            if (toIntersect.bottom - 1 < this.y) {
-                return false;
-            }
-
-            if (toIntersect.y > this.bottom - 1) {
-                return false;
-            }
-
-            return true;
-
-        }
-
-        /**
-        * Checks for overlaps between this Rectangle and the given Rectangle. Returns an object with boolean values for each check.
-        *
-        * @method overlap
-        * @param rect {Kiwi.Geom.Rectangle} 
-        * @return {Object} An object containing the overlapping details between the two Rectangles
-        * @todo Move to an IntersectResult? Do not want to be generating all of these values each time this is called
-        * @public
-        */
-        public overlap(rect: Rectangle): any {
-
-            var result = { top: false, bottom: false, left: false, right: false, contains: false, contained: false };
-            var interRect: Rectangle = this.intersection(rect);
-
-            if ( interRect.isEmpty ) return result;
-            if ( this.containsRect(rect) ) result.contains = true;
-            if ( rect.containsRect(this) ) result.contained = true;
-            if ( this.top < rect.top ) result.top = true;
-            if ( this.bottom > rect.bottom ) result.bottom = true;
-            if ( this.left < rect.left ) result.left = true;
-            if ( this.right > rect.right ) result.right = true;
-
-            return result;
-
-        }
-
-        /**
-        * Determines whether or not this Rectangle object is empty.
-        * @method isEmpty
-        * @return {boolean} A value of true if the Rectangle object's width or height is less than or equal to 0; otherwise false.
-        * @public
-        */
-        public isEmpty(): boolean {
-
-            if (this.width < 1 || this.height < 1)
-            {
-                return true;
-            }
-
-            return false;
-
-        }
-
-        /**
-        * Adjusts the location of the Rectangle object, as determined by its top-left corner, by the specified amounts.
-        * 
-        * @method offset
-        * @param dx {Number} Moves the x value of the Rectangle object by this amount.
-        * @param dy {Number} Moves the y value of the Rectangle object by this amount.
-        * @return {Kiwi.Geom.Rectangle} This Rectangle object.
-        * @public
-        */
-        public offset(dx: number, dy: number): Rectangle {
-
-            if (!isNaN(dx) && !isNaN(dy))
-            {
-                this.x += dx;
-                this.y += dy;
-            }
-
-            return this;
-
-        }
-
-        /**
-        * Adjusts the location of the Rectangle object using a Point object as a parameter. 
-        * This method is similar to the Rectangle.offset() method, except that it takes a Point object as a parameter.
-        * 
-        * @method offsetPoint
-        * @param point {Kiwi.Geom.Point} A Point object to use to offset this Rectangle object.
-        * @return {Kiwi.Geom.Rectangle} This Rectangle object.
-        * @public
-        */
-        public offsetPoint(point: Point): Rectangle {
-
-            return this.offset(point.x, point.y);
-
-        }
-
-        /**
-        * Sets all of the Rectangle object's properties to 0. 
-        * A Rectangle object is empty if its width or height is less than or equal to 0.
-        * 
-        * @method setEmpty
-        * @return {Kiwi.Geom.Rectangle} This rectangle object
-        * @public
-        */
-        public setEmpty() {
-
-            return this.setTo(0, 0, 0, 0);
-
-        }
-
-        /**
-        * Sets the properties of Rectangle to the specified values.
-        * 
-        * @method setTo
-        * @param x {Number} x The x coordinate of the top-left corner of the rectangle.
-        * @param y {Number} y The y coordinate of the top-left corner of the rectangle.
-        * @param width {Number} width The width of the rectangle in pixels.
-        * @param height {Number} height The height of the rectangle in pixels.
-        * @return {Kiwi.Geom.Rectangle} This rectangle object
-        * @public
-        */
-        public setTo(x: number, y: number, width: number, height: number): Rectangle {
-
-            if (!isNaN(x) && !isNaN(y) && !isNaN(width) && !isNaN(height))
-            {
-                this.x = x;
-                this.y = y;
-
-                if (width >= 0)
-                {
-                    this.width = width;
-                }
-
-                if (height >= 0)
-                {
-                    this.height = height;
-                }
-            }
-
-            return this;
-
-        }
-
-        /**
-        * Adds two rectangles together to create a new Rectangle object, by filling in the horizontal and vertical space between the two rectangles.
-        * 
-        * @method union
-        * @param toUnion {Kiwi.Geom.Rectangle} toUnion A Rectangle object to add to this Rectangle object.
-        * @param [output] {Kiwi.Geom.Rectangle} output Optional Rectangle object. If given the new values will be set into this object, otherwise a new Rectangle object will be created.
-        * @return {Kiwi.Geom.Rectangle} A Rectangle object that is the union of the two rectangles.
-        * @public
-        */
-        public union(toUnion: Rectangle, output: Rectangle = new Rectangle): Rectangle {
-
-            return output.setTo(
-                    Math.min(toUnion.x, this.x),
-                    Math.min(toUnion.y, this.y),
-                    Math.max(toUnion.right, this.right),
-                    Math.max(toUnion.bottom, this.bottom)
-                  );
-
-        }
-
-        /**
-        * Scales this Rectangle by values passed. 
-        *
-        * @method scale
-        * @param x {number}
-        * @param y {number}
-        * @param translation {Kiwi.Geom.Point}
-        * @return {Kiwi.Geom.Rectangle}
-        * @public
-        */
-        public scale(x:number,y:number,translation:Kiwi.Geom.Point): Rectangle {
-
-            var trans: Kiwi.Geom.Transform = new Kiwi.Geom.Transform;
-            trans.scaleX = x;
-            trans.scaleY = y;
-            trans.x = translation.x;
-            trans.y = translation.y;
-            
-            var tl: Kiwi.Geom.Point = this.topLeft;
-            trans.transformPoint(tl);
-            this.topLeft = tl;
-
-            this.width *= x;
-            this.height *= y;
-
-            return this;
-        }
-
-        /**
-        * Returns a string representation of this object.
-        * @method toString
-        * @return {String} a string representation of the instance.
-        */
-        public toString(): string {
-
-            return "[{Rectangle (x=" + this.x + " y=" + this.y + " width=" + this.width + " height=" + this.height + " isEmpty=" + this.isEmpty() + ")}]";
-
-        }
-
-    }
-
-}
\ No newline at end of file
+	/**
+	* An area defined by its position, as indicated by its top-left corner (x,y) and width and height
+	*
+	* @class Rectangle
+	* @namespace Kiwi.Geom
+	* @constructor
+	* @param [x=0] {Number} The x coordinate of the top-left corner of the rectangle.
+	* @param [y=0] {Number} The y coordinate of the top-left corner of the rectangle.
+	* @param [width=0] {Number} width The width of the rectangle in pixels.
+	* @param [height=0] {Number} height The height of the rectangle in pixels.
+	* @return {Kiwi.Geom.Rectangle} This rectangle object
+	* 
+	*/
+	export class Rectangle {
+
+		/**
+		* Creates a new Rectangle object with the top-left corner specified by the x and y parameters and with the specified width and height parameters. If you call this function without parameters, a rectangle with x, y, width, and height properties set to 0 is created.
+		**/
+		constructor (x: number = 0, y: number = 0, width: number = 0, height: number = 0) {
+
+			this.setTo(x, y, width, height);
+
+		}
+
+		/**
+		* The type of this object.
+		* @method objType
+		* @return {String} "Rectangle"
+		* @public
+		*/
+		public objType() {
+			return "Rectangle";
+		}
+
+		/** 
+		* The x coordinate of the top-left corner of the rectangle
+		* @property x
+		* @type Number
+		* @default 0
+		* @public
+		*/
+		public x: number = 0;
+
+		/** 
+		* The y coordinate of the top-left corner of the rectangle
+		* @property y
+		* @type Number
+		* @default 0
+		* @public
+		*/
+		public y: number = 0;
+
+		/** 
+		* The width of the rectangle in pixels
+		* @property width
+		* @type Number
+		* @default 0
+		* @public
+		*/
+		public width: number = 0;
+
+		/** 
+		* The height of the rectangle in pixels
+		* @property height
+		* @type Number
+		* @default 0
+		* @public
+		*/
+		public height: number = 0;
+
+		/**
+		* The sum of the y and height properties. 
+		* Changing the bottom property of a Rectangle object has no effect on the x, y and width properties, 
+		* but does change the height property.
+		*
+		* @property bottom
+		* @type Number
+		* @public
+		*/
+		public set bottom(value: number) {
+
+			if (value)
+			{
+				if (value < this.y)
+				{
+					this.height = 0;
+				}
+				else
+				{
+					this.height = value;
+				}
+			}
+
+		}
+
+		public get bottom(): number {
+
+			return this.y + this.height;
+
+		}
+
+		/**
+		* Returns a Point containing the location of the center of the Rectangle, relative to the top left edge
+		* @property center
+		* @type Kiwi.Geom.Point
+		* @readOnly 
+		* @public
+		*/
+		public get center(): Point {
+
+			var output: Point = new Point();
+			return output.setTo(Math.round(this.width / 2), Math.round(this.height / 2));
+
+		}
+
+		/**
+		* Returns a Point containing the location of the Rectangle's bottom-right corner, determined by the values of the right and bottom properties.
+		* @property bottomRight
+		* @type Kiwi.Geom.Point 
+		* @public
+		*/
+		public set bottomRight(value: Point) {
+			
+			if (value)
+			{
+				this.right = value.x;
+				this.bottom = value.y;
+			}
+
+		}
+
+		public get bottomRight(): Point {
+
+			var output: Point = new Point();
+			return output.setTo(this.right, this.bottom);
+
+		}
+
+		/**
+		* The x coordinate of the top-left corner of the rectangle. Changing the left property of a Rectangle object has no effect on the y and height properties. However it does affect the width property, whereas changing the x value does not affect the width property.
+		* @property left
+		* @type Number 
+		* @public
+		*/
+		public set left(value: number) {
+
+			if (value)
+			{
+				var diff = this.x - value;
+
+				if (this.width + diff < 0)
+				{
+					this.width = 0;
+
+					this.x = value;
+				}
+				else
+				{
+					this.width += diff;
+
+					this.x = value;
+				}
+			}
+
+		}
+
+		public get left(): number {
+
+			return this.x;
+
+		}
+
+		/**
+		* The sum of the x and width properties. Changing the right property of a Rectangle object has no effect on the x, y and height properties. However it does affect the width property.
+		* @property right
+		* @type Number 
+		* @public
+		*/
+		public set right(value: number) {
+
+			if (value)
+			{
+				if (value < this.x)
+				{
+					this.width = 0;
+				}
+				else
+				{
+					this.width = value - this.x;
+				}
+			}
+
+		}
+
+		public get right(): number {
+
+			return this.x + this.width;
+
+		}
+
+		/**
+		* The size of the Rectangle object, expressed as a Point object with the values of the width and height properties.
+		* @property size
+		* @type Kiwi.Geom.Point
+		* @readOnly
+		* @public
+		*/
+		public get size(): Point {
+
+			var output: Point = new Point();
+			return output.setTo(this.width, this.height);
+
+		}
+
+		/**
+		* The volume of the Rectangle object in pixels, derived from width * height
+		* @property volume
+		* @type Number
+		* @readOnly 
+		* @return
+		*/
+		public get volume(): number {
+
+			return this.width * this.height;
+
+		}
+
+		/**
+		* The perimeter size of the Rectangle object in pixels. This is the sum of all 4 sides.
+		* @property perimeter
+		* @type Number
+		* @readOnly 
+		* @public
+		*/
+		public get perimeter(): number {
+
+			return (this.width * 2) + (this.height * 2);
+
+		}
+
+		/**
+		* The y coordinate of the top-left corner of the rectangle. 
+		* Changing the top property of a Rectangle object has no effect on the x and width properties.
+		* However it does affect the height property, whereas changing the y value does not affect the height property.
+		*
+		* @method top
+		* @return {Number} 
+		* @public
+		*/
+		public set top(value: number) {
+
+			if (value)
+			{
+				var diff = this.y - value;
+
+				if (this.height + diff < 0)
+				{
+					this.height = 0;
+
+					this.y = value;
+				}
+				else
+				{
+					this.height += diff;
+
+					this.y = value;
+				}
+			}
+
+		}
+
+		public get top(): number {
+
+			return this.y;
+
+		}
+		/**
+		* The location of the Rectangle object's top-left corner, determined by the x and y coordinates of the point.
+		* @property topLeft
+		* @type Kiwi.Geom.Point
+		* @public
+		*/
+		public set topLeft(value: Point) {
+
+			if (value)
+			{
+				this.x = value.x;
+				this.y = value.y;
+			}
+
+		}
+
+		public get topLeft(): Point {
+
+			var output: Point = new Point();
+			return output.setTo(this.x, this.y);
+
+		}
+
+		/**
+		* Returns a new Rectangle object with the same values for the x, y, width, and height properties as the original Rectangle object.
+		* @method clone
+		* @param [output] {Kiwi.Geom.Rectangle} Optional Rectangle object. If given the values will be set into the object, otherwise a brand new Rectangle object will be created and returned.
+		* @return {Kiwi.Geom.Rectangle}
+		* @public
+		*/
+		public clone(output: Rectangle = new Rectangle): Rectangle {
+
+			return output.setTo(this.x, this.y, this.width, this.height);
+
+		}
+
+		/**
+		* Determines whether the specified coordinates are contained within the region defined by this Rectangle object.
+		* @method contains
+		* @param {Number} x The x coordinate of the point to test.
+		* @param {Number} y The y coordinate of the point to test.
+		* @return {boolean} A value of true if the Rectangle object contains the specified point; otherwise false.
+		* @public
+		*/
+		public contains(x: number, y: number): boolean {
+
+			if (x >= this.x && x <= this.right && y >= this.y && y <= this.bottom)
+			{
+				return true;
+			}
+
+			return false;
+
+		}
+
+		/**
+		* Determines whether the specified point is contained within the rectangular region defined by this Rectangle object.
+		* This method is similar to the Rectangle.contains() method, except that it takes a Point object as a parameter.
+		*
+		* @method containsPoint
+		* @param {Kiwi.Geom.Point} point The point object being checked. Can be Kiwi.Geom.Point or any object with .x and .y values.
+		* @return {boolean} A value of true if the Rectangle object contains the specified point; otherwise false.
+		* @public
+		*/
+		public containsPoint(point: Point): boolean {
+
+			return this.contains(point.x, point.y);
+
+		}
+
+		/**
+		* Determines whether the Rectangle object specified by the rect parameter is contained within this Rectangle object. 
+		* A Rectangle object is said to contain another if the second Rectangle object falls entirely within the boundaries of the first.
+		*
+		* @method containsRect
+		* @param rect {Kiwi.Geom.Rectangle} The rectangle object being checked.
+		* @return {boolean} A value of true if the Rectangle object contains the specified point; otherwise false.
+		* @public
+		*/
+		public containsRect(rect: Rectangle): boolean {
+
+			//	If the given rect has a larger volume than this one then it can never contain it
+			if (rect.volume > this.volume)
+			{
+				return false;
+			}
+
+			if (rect.x >= this.x && rect.y >= this.y && rect.right <= this.right && rect.bottom <= this.bottom)
+			{
+				return true;
+			}
+
+			return false;
+
+		}
+
+		/**
+		* Copies all of rectangle data from the source Rectangle object into the calling Rectangle object.
+		*
+		* @method copyFrom
+		* @param source {Kiwi.Geom.Rectangle} The source rectangle object to copy from
+		* @return {Kiwi.Geom.Rectangle} This rectangle object
+		* @public
+		*/
+		public copyFrom(source: Rectangle): Rectangle {
+
+			return this.setTo(source.x, source.y, source.width, source.height);
+
+		}
+
+		/**
+		* Copies all the rectangle data from this Rectangle object into the destination Rectangle object.
+		* Creates a new rectangle if one was not passed.
+		*
+		* @method copyTo
+		* @param [target] {Kiwi.Geom.Rectangle} The destination rectangle object to copy in to. Creates a new rectangle if one is not passed.
+		* @return {Kiwi.Geom.Rectangle} The destination rectangle object
+		* @public
+		*/
+		public copyTo(target: Rectangle = new Rectangle()): Rectangle {
+
+			return target.copyFrom(this);
+
+		}
+
+		/**
+		* Determines whether the object specified in the toCompare parameter is equal to this Rectangle object.
+		* This method compares the x, y, width, and height properties of an object against the same properties of this Rectangle object.
+		*
+		* @method equals
+		* @param  toCompare {Kiwi.Geom.Rectangle} toCompare The rectangle to compare to this Rectangle object.
+		* @return {boolean} A value of true if the object has exactly the same values for the x, y, width, and height properties as this Rectangle object; otherwise false.
+		* @public
+		*/
+		public equals(toCompare: Rectangle): boolean {
+
+			if (this.x === toCompare.x && this.y === toCompare.y && this.width === toCompare.width && this.height === toCompare.height)
+			{
+				return true;
+			}
+
+			return false;
+
+		}
+
+		/**
+		* Increases the size of the Rectangle object by the specified amounts, in pixels.
+		*
+		* The center point of the Rectangle object stays the same,
+		* and its size increases to the left and right by the dx value,
+		* and to the top and the bottom by the dy value.
+		*
+		* @method inflate
+		* @param dx {Number} dx The amount to be added to the left side of this Rectangle.
+		* @param dy {Number} dy The amount to be added to the bottom side of this Rectangle.
+		* @return {Kiwi.Geom.Rectangle} This Rectangle object.
+		* @public
+		*/
+		public inflate(dx: number, dy: number): Rectangle {
+
+			if (!isNaN(dx) && !isNaN(dy))
+			{
+				this.x -= dx;
+				this.width += 2 * dx;
+
+				this.y -= dy;
+				this.height += 2 * dy;
+			}
+
+			return this;
+
+		}
+
+		/**
+		* Increases the size of the Rectangle object. This method is similar to the Rectangle.inflate() method except it takes a Point object as a parameter.
+		*
+		* @method inflatePoint
+		* @param point {Kiwi.Geom.Point} The x property of this Point object is used to increase the horizontal dimension of the Rectangle object. The y property is used to increase the vertical dimension of the Rectangle object.
+		* @return {Kiwi.Geom.Rectangle} This Rectangle object.
+		* @public
+		*/
+		public inflatePoint(point: Point): Rectangle {
+
+			return this.inflate(point.x, point.y);
+
+		}
+
+		/**
+		* If the Rectangle object specified in the toIntersect parameter intersects with this Rectangle object,
+		* returns the area of intersection as a Rectangle object.
+		* If the rectangles do not intersect, this method returns an empty Rectangle object with its properties set to 0.
+		*
+		* @method intersection
+		* @param toIntersect {Kiwi.Geom.Rectangle} The Rectangle object to compare against to see if it intersects with this Rectangle object.
+		* @param [output] {Kiwi.Geom.Rectangle} Optional Rectangle object. If given the intersection values will be set into this object, otherwise a brand new Rectangle object will be created and returned.
+		* @return {Kiwi.Geom.Rectangle} A Rectangle object that equals the area of intersection. If the rectangles do not intersect, this method returns an empty Rectangle object; that is, a rectangle with its x, y, width, and height properties set to 0.
+		* @public
+		*/
+		public intersection(toIntersect: Rectangle, output: Rectangle = new Rectangle): Rectangle {
+
+			if (this.intersects(toIntersect) === true)
+			{
+				output.x = Math.max(toIntersect.x, this.x);
+				output.y = Math.max(toIntersect.y, this.y);
+				output.width = Math.min(toIntersect.right, this.right) - output.x;
+				output.height = Math.min(toIntersect.bottom, this.bottom) - output.y;
+			}
+
+			return output;
+
+		}
+
+		/**
+		* Determines whether the object specified in the toIntersect parameter intersects with this Rectangle object. 
+		* This method checks the x, y, width, and height properties of the specified Rectangle object to see if it intersects with this Rectangle object.
+		*
+		* @method intersects
+		* @param toIntersect {Kiwi.Geom.Rectangle} The Rectangle object to compare against to see if it intersects with this Rectangle object.
+		* @return {boolean} A value of true if the specified object intersects with this Rectangle object; otherwise false.
+		* @public
+		**/
+		public intersects(toIntersect: Rectangle): boolean {
+
+			if (toIntersect.x > this.right - 1) {
+				return false;
+			}
+
+			if (toIntersect.right - 1 < this.x) {
+				return false;
+			}
+
+			if (toIntersect.bottom - 1 < this.y) {
+				return false;
+			}
+
+			if (toIntersect.y > this.bottom - 1) {
+				return false;
+			}
+
+			return true;
+
+		}
+
+		/**
+		* Checks for overlaps between this Rectangle and the given Rectangle. Returns an object with boolean values for each check.
+		*
+		* @method overlap
+		* @param rect {Kiwi.Geom.Rectangle} 
+		* @return {Object} An object containing the overlapping details between the two Rectangles
+		* @todo Move to an IntersectResult? Do not want to be generating all of these values each time this is called
+		* @public
+		*/
+		public overlap(rect: Rectangle): any {
+
+			var result = { top: false, bottom: false, left: false, right: false, contains: false, contained: false };
+			var interRect: Rectangle = this.intersection(rect);
+
+			if ( interRect.isEmpty ) return result;
+			if ( this.containsRect(rect) ) result.contains = true;
+			if ( rect.containsRect(this) ) result.contained = true;
+			if ( this.top < rect.top ) result.top = true;
+			if ( this.bottom > rect.bottom ) result.bottom = true;
+			if ( this.left < rect.left ) result.left = true;
+			if ( this.right > rect.right ) result.right = true;
+
+			return result;
+
+		}
+
+		/**
+		* Determines whether or not this Rectangle object is empty.
+		* @method isEmpty
+		* @return {boolean} A value of true if the Rectangle object's width or height is less than or equal to 0; otherwise false.
+		* @public
+		*/
+		public isEmpty(): boolean {
+
+			if (this.width < 1 || this.height < 1)
+			{
+				return true;
+			}
+
+			return false;
+
+		}
+
+		/**
+		* Adjusts the location of the Rectangle object, as determined by its top-left corner, by the specified amounts.
+		* 
+		* @method offset
+		* @param dx {Number} Moves the x value of the Rectangle object by this amount.
+		* @param dy {Number} Moves the y value of the Rectangle object by this amount.
+		* @return {Kiwi.Geom.Rectangle} This Rectangle object.
+		* @public
+		*/
+		public offset(dx: number, dy: number): Rectangle {
+
+			if (!isNaN(dx) && !isNaN(dy))
+			{
+				this.x += dx;
+				this.y += dy;
+			}
+
+			return this;
+
+		}
+
+		/**
+		* Adjusts the location of the Rectangle object using a Point object as a parameter. 
+		* This method is similar to the Rectangle.offset() method, except that it takes a Point object as a parameter.
+		* 
+		* @method offsetPoint
+		* @param point {Kiwi.Geom.Point} A Point object to use to offset this Rectangle object.
+		* @return {Kiwi.Geom.Rectangle} This Rectangle object.
+		* @public
+		*/
+		public offsetPoint(point: Point): Rectangle {
+
+			return this.offset(point.x, point.y);
+
+		}
+
+		/**
+		* Sets all of the Rectangle object's properties to 0. 
+		* A Rectangle object is empty if its width or height is less than or equal to 0.
+		* 
+		* @method setEmpty
+		* @return {Kiwi.Geom.Rectangle} This rectangle object
+		* @public
+		*/
+		public setEmpty() {
+
+			return this.setTo(0, 0, 0, 0);
+
+		}
+
+		/**
+		* Sets the properties of Rectangle to the specified values.
+		* 
+		* @method setTo
+		* @param x {Number} x The x coordinate of the top-left corner of the rectangle.
+		* @param y {Number} y The y coordinate of the top-left corner of the rectangle.
+		* @param width {Number} width The width of the rectangle in pixels.
+		* @param height {Number} height The height of the rectangle in pixels.
+		* @return {Kiwi.Geom.Rectangle} This rectangle object
+		* @public
+		*/
+		public setTo(x: number, y: number, width: number, height: number): Rectangle {
+
+			if (!isNaN(x) && !isNaN(y) && !isNaN(width) && !isNaN(height))
+			{
+				this.x = x;
+				this.y = y;
+
+				if (width >= 0)
+				{
+					this.width = width;
+				}
+
+				if (height >= 0)
+				{
+					this.height = height;
+				}
+			}
+
+			return this;
+
+		}
+
+		/**
+		* Adds two rectangles together to create a new Rectangle object, by filling in the horizontal and vertical space between the two rectangles.
+		* 
+		* @method union
+		* @param toUnion {Kiwi.Geom.Rectangle} toUnion A Rectangle object to add to this Rectangle object.
+		* @param [output] {Kiwi.Geom.Rectangle} output Optional Rectangle object. If given the new values will be set into this object, otherwise a new Rectangle object will be created.
+		* @return {Kiwi.Geom.Rectangle} A Rectangle object that is the union of the two rectangles.
+		* @public
+		*/
+		public union(toUnion: Rectangle, output: Rectangle = new Rectangle): Rectangle {
+
+			return output.setTo(
+					Math.min(toUnion.x, this.x),
+					Math.min(toUnion.y, this.y),
+					Math.max(toUnion.right, this.right),
+					Math.max(toUnion.bottom, this.bottom)
+				  );
+
+		}
+
+		/**
+		* Scales this Rectangle by values passed. 
+		*
+		* @method scale
+		* @param x {number}
+		* @param y {number}
+		* @param translation {Kiwi.Geom.Point}
+		* @return {Kiwi.Geom.Rectangle}
+		* @public
+		*/
+		public scale(x:number,y:number,translation:Kiwi.Geom.Point): Rectangle {
+
+			var trans: Kiwi.Geom.Transform = new Kiwi.Geom.Transform;
+			trans.scaleX = x;
+			trans.scaleY = y;
+			trans.x = translation.x;
+			trans.y = translation.y;
+			
+			var tl: Kiwi.Geom.Point = this.topLeft;
+			trans.transformPoint(tl);
+			this.topLeft = tl;
+
+			this.width *= x;
+			this.height *= y;
+
+			return this;
+		}
+
+		/**
+		* Returns a string representation of this object.
+		* @method toString
+		* @return {String} a string representation of the instance.
+		*/
+		public toString(): string {
+
+			return "[{Rectangle (x=" + this.x + " y=" + this.y + " width=" + this.width + " height=" + this.height + " isEmpty=" + this.isEmpty() + ")}]";
+
+		}
+
+	}
+
+}
diff --git a/src/geom/Transform.ts b/src/geom/Transform.ts
index 5ce7f7b..b8c0a25 100644
--- a/src/geom/Transform.ts
+++ b/src/geom/Transform.ts
@@ -6,696 +6,696 @@
 
 module Kiwi.Geom {
 
-    /**
-    * Represents position, scale, rotation and rotationPoint of an Entity.
-    * - Values can be transformed with a 3x3 affine transformation matrix, which each transform is assigned.
-    * - A tranform can be assigned a parent, which may in turn have it's own parent, thereby creating a tranform inheritence heirarchy
-    * - A concatenated transformation matrix, representing the combined matrices of the transform and its ancestors.
-    *
-    * @class Transform
-    * @namespace Kiwi.Geom
-    * @constructor
-    * @param [x=0] {Number} X position of the transform.
-    * @param [y=0] {Number} Y position of the transform.
-    * @param [scaleX=1] {Number} X scaling of the transform.
-    * @param [scaleY=1] {Number} Y scaling of the transform.
-    * @param [rotation=0] {Number} Rotation of the transform in radians.
-    * @param [rotX=0] {Number} rotationPoint offset on X axis.
-    * @param [rotY=0] {Number} rotationPoint offset on Y axis.
-    * @return {Transform} This object.
-    *
-    */
-    export class Transform {
-
-        constructor(x: number = 0, y: number = 0, scaleX: number = 1, scaleY: number = 1, rotation: number = 0, rotPointX: number = 0, rotPointY: number = 0) {
-
-            this.setTransform(x, y, scaleX, scaleY, rotation, rotPointX, rotPointY);
-
-            this._matrix = new Matrix();
-
-            this._matrix.setFromOffsetTransform(this._x, this._y, this._scaleX, this._scaleY, this._rotation, this._rotPointX, this._rotPointY);
-
-            this._cachedConcatenatedMatrix = this.getConcatenatedMatrix();
-            this._concatMatrix = new Matrix();
-
-        }
-
-        /**
-        * The type of this object.
-        * @method objType
-        * @return {String} "Transform"
-        * @public
-        */
-        public objType() {
-            return "Transform";
-        }
-
-        /** 
-        * X position of the transform
-        * @property _x
-        * @type Number
-        * @default 0
-        * @private
-        */
-        private _x: number = 0;
-
-        /** 
-        * Return the X value of the transform.
-        * @property x
-        * @type Number
-        * @public
-        */
-        public set x(value: number) {
-            
-            this._x = value;
-
-        }
-        public get x():number {
-            return this._x;
-        }
-
-        /** 
-        * Y position of the transform
-        * @property _y
-        * @type Number
-        * @default 0
-        * @private
-        */
-        private _y: number = 0;
-
-        /** 
-        * Return the Y value of the transform.
-        * @property y
-        * @type Number
-        * @public
-        */
-        public set y(value: number) {
-            this._y = value;
-        }
-        public get y(): number {
-            return this._y;
-        }
-
-
-        /** 
-        * X scaleof the transform
-        * @property _scaleX
-        * @type Number
-        * @default 1
-        * @private
-        */
-        private _scaleX: number = 1;
-
-        /** 
-        * Return the X scale value of the transform.
-        * @property scaleX
-        * @type Number
-        * @public
-        */
-        public set scaleX(value: number) {
-            this._scaleX = value;
-        }
-
-        public get scaleX(): number {
-            return this._scaleX;
-        }
-
-        /** 
-        * Y scale of the transform
-        * @property _scaleY
-        * @type Number
-        * @default 1
-        * @private
-        */
-        private _scaleY: number = 1;
-
-        /** 
-        * Return the Y scale value of the transform.
-        * @property scaleY
-        * @type Number
-        * @public
-        */
-        public set scaleY(value: number) {
-            this._scaleY = value;
-        }
-        public get scaleY():number {
-            return this._scaleY;
-        }
-
-        /** 
-        * Rotation of the transform in radians.
-        * @property _rotation
-        * @type Number
-        * @default 0
-        * @private
-        */
-        private _rotation: number = 0;
-
-        /** 
-        * Return the rotation value of the transform in radians.
-        * @property rotation
-        * @type Number
-        * @public
-        */
-        public set rotation(value: number) {
-            this._rotation = value;
-        }
-
-        public get rotation():number {
-            return this._rotation;
-        }
-
-        /** 
-        * Rotation offset on X axis.
-        * @property _rotPointX
-        * @type Number
-        * @default 0
-        * @private
-        */
-        private _rotPointX: number = 0;
-
-        /** 
-        * Return the rotation offset from the x axis.
-        * @property rotPointX
-        * @type Number
-        * @default 0
-        * @public
-        */
-        public set rotPointX(value: number) {
-            this._rotPointX = value;
-        }
-
-        public get rotPointX(): number {
-            return this._rotPointX;
-        }
-
-        /** 
-        * Rotation offset on Y axis.
-        * @property _rotPointY
-        * @type Number
-        * @default 0
-        * @private
-        */
-        private _rotPointY: number = 0;
-
-        /** 
-        * Return the rotation offset from the y axis.
-        * @property rotPointY
-        * @type Number
-        * @public
-        */
-        public set rotPointY(value: number) {
-            this._rotPointY = value;
-        }
-
-        public get rotPointY(): number {
-            return this._rotPointY;
-        }
-
-        /**
-        * Return the anchor point value from the X axis. (Aliases to rotPointX.)
-        * @property anchorPointX
-        * @type Number
-        * @public
-        * @since 1.1.0
-        */
-        public set anchorPointX(value: number) {
-            this.rotPointX = value;
-        }
-        public get anchorPointX(): number {
-            return( this.rotPointX );
-        }
-
-        /**
-        * Return the anchor point value from the Y axis. (Aliases to rotPointY.)
-        * @property anchorPointY
-        * @type Number
-        * @public
-        * @since 1.1.0
-        */
-        public set anchorPointY(value: number) {
-            this._rotPointY = value;
-        }
-        public get anchorPointY(): number {
-            return( this._rotPointY );
-        }
-
-        /** 
-        * A 3x3 transformation matrix object that can be use this tranform to manipulate points or the context transformation.
-        * @property _matrix
-        * @type Kiwi.Geom.Matrix
-        * @private
-        */
-        private _matrix: Matrix;
-
-        /** 
-        * Return the Matrix being used by this Transform
-        * @property matrix
-        * @type Kiwi.Geom.Matrix
-        * @readOnly
-        * @public
-        */
-        public get matrix(): Matrix {
-
-            return this._matrix;
-
-        }
-
-        /** 
-        * The most recently calculated matrix from getConcatenatedMatrix.
-        * Not used or updated after object creation.
-        * Candidate for deprecation.
-        * @property _cachedConcatenatedMatrix
-        * @type Kiwi.Geom.Matrix
-        * @private
-        */
-        private _cachedConcatenatedMatrix: Matrix;
-
-        /** 
-        * Temporary matrix used in concatenation operations
-        * @property _concatMatrix
-        * @type Kiwi.Geom.Matrix
-        * @private
-        */
-        private _concatMatrix: Matrix;
-
-        /** 
-        * Return the x of this transform translated to world space.
-        * @property worldX
-        * @type Number
-        * @readOnly
-        * @public
-        */
-        public get worldX(): number {
-
-            return this.getConcatenatedMatrix().tx - this._rotPointX;
-
-        }
-
-        /** 
-        * Return the y of this transform translated to world space.
-        * @property worldY
-        * @type Number
-        * @readOnly
-        * @public
-        */
-        public get worldY(): number {
-
-            return this.getConcatenatedMatrix().ty - this._rotPointY;
-
-        }
-
-
-        /** 
-        * The parent transform. If set to null there is no parent. Otherwise this is used by getConcatenatedMatrix to offset the current transforms by the another matrix
-        * @property _parent
-        * @type Kiwi.Geom.Transform
-        * @default null
-        * @private
-        */
-        private _parent: Transform = null;
-
-        /** 
-        * Return the parent Transform. If the transform does not have a parent this null is returned.
-        * @property parent
-        * @type Kiwi.Geom.Transform
-        * @default null
-        * @public
-        */
-        public set parent(value: Transform) {
-            if(!this.checkAncestor(value)) {
-                this._parent = value;
-            }
-        }
-
-        public get parent(): Transform {
-            return this._parent;
-        }
-
-
-        /**
-        * Private copy.
-        * Whether the Transform is locked. In locked mode, the Transform
-        * will not update its matrix, saving on computation.
-        * However, it will still follow its parent.
-        * @property _locked
-        * @type boolean
-        * @default false
-        * @private
-        * @since 1.2.0
-        */
-        private _locked: boolean = false;
-
-        /**
-        * Whether the Transform is locked. In locked mode, the Transform
-        * will not update its matrix, saving on computation.
-        * However, it will still follow its parent.
-        * When locked is set to true, it will set the matrix according to
-        * current transform values.
-        * @property locked
-        * @type boolean
-        * @default false
-        * @public
-        * @since 1.2.0
-        */
-        public set locked( value: boolean ) {
-            this._locked = value;
-            if ( this._locked ) {
-                this._matrix.setFromOffsetTransform(
-                    this.x, this.y,
-                    this.scaleX, this.scaleY,
-                    this.rotation,
-                    this.anchorPointX, this.anchorPointY );
-            }
-        }
-        public get locked(): boolean {
-            return this._locked;
-        }
-
-
-        /**
-        * Private copy.
-        * Whether to ignore its parent when concatenating matrices.
-        * If true, it won't compute parent matrices.
-        * This can save computation, but prevents it from following
-        * its parent's transforms.
-        * Use this to save some processor cycles if the transform isn't
-        * following a parent and the state does not transform.
-        * @property _ignoreParent
-        * @type boolean
-        * @default false
-        * @private
-        * @since 1.2.0
-        */
-        private _ignoreParent: boolean = false;
-
-        /**
-        * Whether to ignore its parent when concatenating matrices.
-        * If true, it won't compute parent matrices.
-        * This can save computation, but prevents it from following
-        * its parent's transforms.
-        * Use this to save some processor cycles if the transform isn't
-        * following a parent and the state does not transform.
-        * @property ignoreParent
-        * @type boolean
-        * @default false
-        * @public
-        * @since 1.2.0
-        */
-        public set ignoreParent( value: boolean ) {
-            this._ignoreParent = value;
-        }
-
-        public get ignoreParent(): boolean {
-            return this._ignoreParent;
-        }
-
-
-        /** 
-        * Set the X and Y values of the transform.
-        * @method setPosition
-        * @param x {Number} 
-        * @param y {Number} 
-        * @return {Kiwi.Geom.Transform} This object.
-        * @public
-        */
-        public setPosition(x: number, y: number): Transform {
-
-            this._x = x;
-            this._y = y;
-            //this.owner.dirty = true;
-
-            return this;
-        }
-
-        /** 
-        * Set the X and Y values of the transform from a point.
-        * @method setPositionPoint
-        * @param point {Kiwi.Geom.Point} point.
-        * @return {Kiwi.Geom.Transform} This object.
-        * @public
-        */
-        public setPositionFromPoint(point: Point): Transform {
-
-            this._x = point.x;
-            this._y = point.y;
-            //this.owner.dirty = true;
-
-            return this;
-
-        }
-
-        /** 
-        * Translate the X and Y value of the transform by point components.
-        * @method translatePositionFromPoint
-        * @param point {Kiwi.Geom.Point} point.
-        * @return {Kiwi.Geom.Transform} This object.
-        * @public
-        */
-        public translatePositionFromPoint(point: Point): Transform {
-
-            this._x += point.x;
-            this._y += point.y;
-            //this.owner.dirty = true;
-
-            return this;
-
-        }
-
-        /** 
-        * Return a Point representing the X and Y values of the transform.
-        * If no point is given a new Point objected will be created.
-        *
-        * @method getPositionPoint
-        * @param [output] {Kiwi.Geom.Point} The Point to output the coordinates into. Creates a new Point if none given.
-        * @return {Kiwi.Geom.Point} A point representing the X and Y values of the transform.
-        * @public
-        */
-        public getPositionPoint(output: Point = new Kiwi.Geom.Point): Point {
-
-            return output.setTo(this._x, this._y);
-
-        }
-
-        /** 
-	    * Set the X and Y scale value of the transform.
-        * This property is set only. 
-        * In the future this will be looked into and updated as needed.
-        * 
-	    * @property scale
-	    * @type Number
-        * @public
-	    */
-        public set scale(value:number) {
-
-            this._scaleX = value;
-            this._scaleY = value;
-
-        }
-
-        /** 
-        * Set the core properties of the transform.
-        *
-        * @method setTransform
-        * @param [x=0] {Number} X position of the transform.
-        * @param [y=0] {Number} Y position of the transform.
-        * @param [scaleX=1] {Number} X scaling of the transform.
-        * @param [scaleY=1] {Number} Y scaling of the transform.
-        * @param [rotation=0] {Number} Rotation of the transform in radians.
-        * @param [rotX=0] {Number} rotationPoint offset on X axis.
-        * @param [rotY=0] {Number} rotationPoint offset on Y axis.
-        * @return {Kiwi.Geom.Transform} This object.
-        * @public
-        */
-        public setTransform(x: number = 0, y: number = 0, scaleX: number = 1, scaleY: number = 1, rotation: number = 0, rotPointX: number = 0, rotPointY: number = 0): Transform {
-
-            this._x = x;
-            this._y = y;
-            this._scaleX = scaleX;
-            this._scaleY = scaleY;
-            this._rotation = rotation;
-            this._rotPointX = rotPointX;
-            this._rotPointY = rotPointY;
-
-
-            return this;
-
-        }
-
-        /** 
-        * Return the parent matrix of the transform.
-        * If there is no parent then null is returned.
-        * @method getParentMatrix
-        * @return {Kiwi.Geom.Matrix} Parent transform matrix
-        * @public
-        */
-        public getParentMatrix(): Matrix {
-
-            if (this._parent) {
-                return this._parent.getConcatenatedMatrix();
-            }
-
-            return null;
-        }
-
-        /** 
-        * Return the transformation matrix that concatenates this transform
-        * with all ancestor transforms. If there is no parent then this will
-        * return a matrix the same as this transform's matrix.
-        * @method getConcatenatedMatrix
-        * @return {Kiwi.Geom.Matrix} The concatenated matrix.
-        * @public
-        */
-        public getConcatenatedMatrix(): Matrix {
-
-            // this._matrix.setFromOffsetTransform(this._x, this._y, this._scaleX, this._scaleY, this._rotation, this._rotPointX, this._rotPointY);
-
-            // var parentMatrix = this.getParentMatrix();
-
-            // if (parentMatrix) {
-            //     var matrix = this._matrix.clone();
-            //     matrix.prependMatrix(parentMatrix);
-            //     this._cachedConcatenatedMatrix.copyFrom(matrix);
-            //     return matrix;
-            // }
-
-            // return this._matrix;
-
-            var parentMatrix;
-
-            if ( !this._locked ) {
-                if ( this._parent ) {
-                    this._matrix.setFromOffsetTransform(
-                        this.x, this.y,
-                        this.scaleX, this.scaleY,
-                        this.rotation,
-                        this.anchorPointX - this._parent.anchorPointX,
-                        this.anchorPointY - this._parent.anchorPointY );
-                } else {
-                    this._matrix.setFromOffsetTransform(
-                        this.x, this.y,
-                        this.scaleX, this.scaleY,
-                        this.rotation,
-                        this.anchorPointX,
-                        this.anchorPointY );
-                }
-            }
-
-            if ( !this._ignoreParent ) {
-                parentMatrix = this.getParentMatrix();
-                if ( parentMatrix ) {
-                    this._concatMatrix.copyFrom( this._matrix );
-                    this._concatMatrix.prependMatrix( parentMatrix );
-                    return this._concatMatrix;
-                }
-            }
-
-            return this._matrix;
-        }
-
-
-        /** 
-	    * Apply this matrix to a an object with x and y properties representing a point and return the transformed point.
-	    * @method transformPoint
-        * @param point {Kiwi.Geom.Point} 
-        * @return {Kiwi.Geom.Point}
-        * @public
-	    */
-        public transformPoint(point: Point): Point {
-
-            var mat = this.getConcatenatedMatrix();
-
-            return mat.transformPoint(point);
-
-        }
-
-        /** 
-        * Copy another transforms data to this transform. A clone of the source matrix is created for the matrix property.
-        * @method copyFrom
-        * @param transform {Kiwi.Geom.Transform} transform. The tranform to be copied from.
-        * @return {Kiwi.Geom.Transform} This object.
-        * @public
-        */
-        public copyFrom(source: Transform): Transform {
-
-            this.setTransform(source.x, source.y, source.scaleX, source.scaleY, source.rotation, source.rotPointX, source.rotPointY);
-
-            this.parent = source.parent;
-
-            this._matrix = source.matrix.clone();
-
-            return this;
-
-        }
-
-        /** 
-	    * Copy this transforms data to the destination Transform. 
-        * A clone of this transforms matrix is created in the destination Transform Matrix.
-	    *
-        * @method copyTo
-	    * @param destination {Kiwi.Geom.Transform} The tranform to copy to.
-        * @return {Kiwi.Geom.Transform} This object.
-        * @public
-	    */
-        public copyTo(destination: Transform): Transform {
-
-            destination.copyFrom(this);
-
-            return this;
-
-        }
-
-        /** 
-	    * Return a clone of this transform.
-        *
-	    * @method clone
-	    * @param [output] {Kiwi.Geom.Transform} A Transform to copy the clone in to. If none is given a new Transform object will be made.
-        * @return {Kiwi.Geom.Transform} A clone of this object.
-        * @public
-	    */
-        public clone(output: Transform = new Transform()): Transform {
-
-            output.copyFrom(this);
-
-            return output;
-
-        }
-
-        /** 
-	    * Recursively check that a transform does not appear as its own ancestor
-	    * @method checkAncestor
-        * @param transform {Kiwi.Geom.Transform} The Transform to check.
-	    * @return {boolean} Returns true if the given transform is the same as this or an ancestor, otherwise false.
-        * @public
-	    */
-        public checkAncestor(transform: Transform): boolean {
-            
-            /*if (transform === this)
-            {
-                return true
-            }
-
-            if (transform.parent !== null)
-            {
-                return (this.checkAncestor(transform._parent))
-            }*/
-        
-            return false;
-
-        }
-
-        /** 
-        * Return a string represention of this object.
-        * @method toString
-        * @return {String} A string represention of this object.
-        * @public
-        */
-        public get toString(): string {
+	/**
+	* Represents position, scale, rotation and rotationPoint of an Entity.
+	* - Values can be transformed with a 3x3 affine transformation matrix, which each transform is assigned.
+	* - A tranform can be assigned a parent, which may in turn have it's own parent, thereby creating a tranform inheritence heirarchy
+	* - A concatenated transformation matrix, representing the combined matrices of the transform and its ancestors.
+	*
+	* @class Transform
+	* @namespace Kiwi.Geom
+	* @constructor
+	* @param [x=0] {Number} X position of the transform.
+	* @param [y=0] {Number} Y position of the transform.
+	* @param [scaleX=1] {Number} X scaling of the transform.
+	* @param [scaleY=1] {Number} Y scaling of the transform.
+	* @param [rotation=0] {Number} Rotation of the transform in radians.
+	* @param [rotX=0] {Number} rotationPoint offset on X axis.
+	* @param [rotY=0] {Number} rotationPoint offset on Y axis.
+	* @return {Transform} This object.
+	*
+	*/
+	export class Transform {
+
+		constructor(x: number = 0, y: number = 0, scaleX: number = 1, scaleY: number = 1, rotation: number = 0, rotPointX: number = 0, rotPointY: number = 0) {
+
+			this.setTransform(x, y, scaleX, scaleY, rotation, rotPointX, rotPointY);
+
+			this._matrix = new Matrix();
+
+			this._matrix.setFromOffsetTransform(this._x, this._y, this._scaleX, this._scaleY, this._rotation, this._rotPointX, this._rotPointY);
+
+			this._cachedConcatenatedMatrix = this.getConcatenatedMatrix();
+			this._concatMatrix = new Matrix();
+
+		}
+
+		/**
+		* The type of this object.
+		* @method objType
+		* @return {String} "Transform"
+		* @public
+		*/
+		public objType() {
+			return "Transform";
+		}
+
+		/** 
+		* X position of the transform
+		* @property _x
+		* @type Number
+		* @default 0
+		* @private
+		*/
+		private _x: number = 0;
+
+		/** 
+		* Return the X value of the transform.
+		* @property x
+		* @type Number
+		* @public
+		*/
+		public set x(value: number) {
+			
+			this._x = value;
+
+		}
+		public get x():number {
+			return this._x;
+		}
+
+		/** 
+		* Y position of the transform
+		* @property _y
+		* @type Number
+		* @default 0
+		* @private
+		*/
+		private _y: number = 0;
+
+		/** 
+		* Return the Y value of the transform.
+		* @property y
+		* @type Number
+		* @public
+		*/
+		public set y(value: number) {
+			this._y = value;
+		}
+		public get y(): number {
+			return this._y;
+		}
+
+
+		/** 
+		* X scaleof the transform
+		* @property _scaleX
+		* @type Number
+		* @default 1
+		* @private
+		*/
+		private _scaleX: number = 1;
+
+		/** 
+		* Return the X scale value of the transform.
+		* @property scaleX
+		* @type Number
+		* @public
+		*/
+		public set scaleX(value: number) {
+			this._scaleX = value;
+		}
+
+		public get scaleX(): number {
+			return this._scaleX;
+		}
+
+		/** 
+		* Y scale of the transform
+		* @property _scaleY
+		* @type Number
+		* @default 1
+		* @private
+		*/
+		private _scaleY: number = 1;
+
+		/** 
+		* Return the Y scale value of the transform.
+		* @property scaleY
+		* @type Number
+		* @public
+		*/
+		public set scaleY(value: number) {
+			this._scaleY = value;
+		}
+		public get scaleY():number {
+			return this._scaleY;
+		}
+
+		/** 
+		* Rotation of the transform in radians.
+		* @property _rotation
+		* @type Number
+		* @default 0
+		* @private
+		*/
+		private _rotation: number = 0;
+
+		/** 
+		* Return the rotation value of the transform in radians.
+		* @property rotation
+		* @type Number
+		* @public
+		*/
+		public set rotation(value: number) {
+			this._rotation = value;
+		}
+
+		public get rotation():number {
+			return this._rotation;
+		}
+
+		/** 
+		* Rotation offset on X axis.
+		* @property _rotPointX
+		* @type Number
+		* @default 0
+		* @private
+		*/
+		private _rotPointX: number = 0;
+
+		/** 
+		* Return the rotation offset from the x axis.
+		* @property rotPointX
+		* @type Number
+		* @default 0
+		* @public
+		*/
+		public set rotPointX(value: number) {
+			this._rotPointX = value;
+		}
+
+		public get rotPointX(): number {
+			return this._rotPointX;
+		}
+
+		/** 
+		* Rotation offset on Y axis.
+		* @property _rotPointY
+		* @type Number
+		* @default 0
+		* @private
+		*/
+		private _rotPointY: number = 0;
+
+		/** 
+		* Return the rotation offset from the y axis.
+		* @property rotPointY
+		* @type Number
+		* @public
+		*/
+		public set rotPointY(value: number) {
+			this._rotPointY = value;
+		}
+
+		public get rotPointY(): number {
+			return this._rotPointY;
+		}
+
+		/**
+		* Return the anchor point value from the X axis. (Aliases to rotPointX.)
+		* @property anchorPointX
+		* @type Number
+		* @public
+		* @since 1.1.0
+		*/
+		public set anchorPointX(value: number) {
+			this.rotPointX = value;
+		}
+		public get anchorPointX(): number {
+			return( this.rotPointX );
+		}
+
+		/**
+		* Return the anchor point value from the Y axis. (Aliases to rotPointY.)
+		* @property anchorPointY
+		* @type Number
+		* @public
+		* @since 1.1.0
+		*/
+		public set anchorPointY(value: number) {
+			this._rotPointY = value;
+		}
+		public get anchorPointY(): number {
+			return( this._rotPointY );
+		}
+
+		/** 
+		* A 3x3 transformation matrix object that can be use this tranform to manipulate points or the context transformation.
+		* @property _matrix
+		* @type Kiwi.Geom.Matrix
+		* @private
+		*/
+		private _matrix: Matrix;
+
+		/** 
+		* Return the Matrix being used by this Transform
+		* @property matrix
+		* @type Kiwi.Geom.Matrix
+		* @readOnly
+		* @public
+		*/
+		public get matrix(): Matrix {
+
+			return this._matrix;
+
+		}
+
+		/** 
+		* The most recently calculated matrix from getConcatenatedMatrix.
+		* Not used or updated after object creation.
+		* Candidate for deprecation.
+		* @property _cachedConcatenatedMatrix
+		* @type Kiwi.Geom.Matrix
+		* @private
+		*/
+		private _cachedConcatenatedMatrix: Matrix;
+
+		/** 
+		* Temporary matrix used in concatenation operations
+		* @property _concatMatrix
+		* @type Kiwi.Geom.Matrix
+		* @private
+		*/
+		private _concatMatrix: Matrix;
+
+		/** 
+		* Return the x of this transform translated to world space.
+		* @property worldX
+		* @type Number
+		* @readOnly
+		* @public
+		*/
+		public get worldX(): number {
+
+			return this.getConcatenatedMatrix().tx - this._rotPointX;
+
+		}
+
+		/** 
+		* Return the y of this transform translated to world space.
+		* @property worldY
+		* @type Number
+		* @readOnly
+		* @public
+		*/
+		public get worldY(): number {
+
+			return this.getConcatenatedMatrix().ty - this._rotPointY;
+
+		}
+
+
+		/** 
+		* The parent transform. If set to null there is no parent. Otherwise this is used by getConcatenatedMatrix to offset the current transforms by the another matrix
+		* @property _parent
+		* @type Kiwi.Geom.Transform
+		* @default null
+		* @private
+		*/
+		private _parent: Transform = null;
+
+		/** 
+		* Return the parent Transform. If the transform does not have a parent this null is returned.
+		* @property parent
+		* @type Kiwi.Geom.Transform
+		* @default null
+		* @public
+		*/
+		public set parent(value: Transform) {
+			if(!this.checkAncestor(value)) {
+				this._parent = value;
+			}
+		}
+
+		public get parent(): Transform {
+			return this._parent;
+		}
+
+
+		/**
+		* Private copy.
+		* Whether the Transform is locked. In locked mode, the Transform
+		* will not update its matrix, saving on computation.
+		* However, it will still follow its parent.
+		* @property _locked
+		* @type boolean
+		* @default false
+		* @private
+		* @since 1.2.0
+		*/
+		private _locked: boolean = false;
+
+		/**
+		* Whether the Transform is locked. In locked mode, the Transform
+		* will not update its matrix, saving on computation.
+		* However, it will still follow its parent.
+		* When locked is set to true, it will set the matrix according to
+		* current transform values.
+		* @property locked
+		* @type boolean
+		* @default false
+		* @public
+		* @since 1.2.0
+		*/
+		public set locked( value: boolean ) {
+			this._locked = value;
+			if ( this._locked ) {
+				this._matrix.setFromOffsetTransform(
+					this.x, this.y,
+					this.scaleX, this.scaleY,
+					this.rotation,
+					this.anchorPointX, this.anchorPointY );
+			}
+		}
+		public get locked(): boolean {
+			return this._locked;
+		}
+
+
+		/**
+		* Private copy.
+		* Whether to ignore its parent when concatenating matrices.
+		* If true, it won't compute parent matrices.
+		* This can save computation, but prevents it from following
+		* its parent's transforms.
+		* Use this to save some processor cycles if the transform isn't
+		* following a parent and the state does not transform.
+		* @property _ignoreParent
+		* @type boolean
+		* @default false
+		* @private
+		* @since 1.2.0
+		*/
+		private _ignoreParent: boolean = false;
+
+		/**
+		* Whether to ignore its parent when concatenating matrices.
+		* If true, it won't compute parent matrices.
+		* This can save computation, but prevents it from following
+		* its parent's transforms.
+		* Use this to save some processor cycles if the transform isn't
+		* following a parent and the state does not transform.
+		* @property ignoreParent
+		* @type boolean
+		* @default false
+		* @public
+		* @since 1.2.0
+		*/
+		public set ignoreParent( value: boolean ) {
+			this._ignoreParent = value;
+		}
+
+		public get ignoreParent(): boolean {
+			return this._ignoreParent;
+		}
+
+
+		/** 
+		* Set the X and Y values of the transform.
+		* @method setPosition
+		* @param x {Number} 
+		* @param y {Number} 
+		* @return {Kiwi.Geom.Transform} This object.
+		* @public
+		*/
+		public setPosition(x: number, y: number): Transform {
+
+			this._x = x;
+			this._y = y;
+			//this.owner.dirty = true;
+
+			return this;
+		}
+
+		/** 
+		* Set the X and Y values of the transform from a point.
+		* @method setPositionPoint
+		* @param point {Kiwi.Geom.Point} point.
+		* @return {Kiwi.Geom.Transform} This object.
+		* @public
+		*/
+		public setPositionFromPoint(point: Point): Transform {
+
+			this._x = point.x;
+			this._y = point.y;
+			//this.owner.dirty = true;
+
+			return this;
+
+		}
+
+		/** 
+		* Translate the X and Y value of the transform by point components.
+		* @method translatePositionFromPoint
+		* @param point {Kiwi.Geom.Point} point.
+		* @return {Kiwi.Geom.Transform} This object.
+		* @public
+		*/
+		public translatePositionFromPoint(point: Point): Transform {
+
+			this._x += point.x;
+			this._y += point.y;
+			//this.owner.dirty = true;
+
+			return this;
+
+		}
+
+		/** 
+		* Return a Point representing the X and Y values of the transform.
+		* If no point is given a new Point objected will be created.
+		*
+		* @method getPositionPoint
+		* @param [output] {Kiwi.Geom.Point} The Point to output the coordinates into. Creates a new Point if none given.
+		* @return {Kiwi.Geom.Point} A point representing the X and Y values of the transform.
+		* @public
+		*/
+		public getPositionPoint(output: Point = new Kiwi.Geom.Point): Point {
+
+			return output.setTo(this._x, this._y);
+
+		}
+
+		/** 
+		* Set the X and Y scale value of the transform.
+		* This property is set only. 
+		* In the future this will be looked into and updated as needed.
+		* 
+		* @property scale
+		* @type Number
+		* @public
+		*/
+		public set scale(value:number) {
+
+			this._scaleX = value;
+			this._scaleY = value;
+
+		}
+
+		/** 
+		* Set the core properties of the transform.
+		*
+		* @method setTransform
+		* @param [x=0] {Number} X position of the transform.
+		* @param [y=0] {Number} Y position of the transform.
+		* @param [scaleX=1] {Number} X scaling of the transform.
+		* @param [scaleY=1] {Number} Y scaling of the transform.
+		* @param [rotation=0] {Number} Rotation of the transform in radians.
+		* @param [rotX=0] {Number} rotationPoint offset on X axis.
+		* @param [rotY=0] {Number} rotationPoint offset on Y axis.
+		* @return {Kiwi.Geom.Transform} This object.
+		* @public
+		*/
+		public setTransform(x: number = 0, y: number = 0, scaleX: number = 1, scaleY: number = 1, rotation: number = 0, rotPointX: number = 0, rotPointY: number = 0): Transform {
+
+			this._x = x;
+			this._y = y;
+			this._scaleX = scaleX;
+			this._scaleY = scaleY;
+			this._rotation = rotation;
+			this._rotPointX = rotPointX;
+			this._rotPointY = rotPointY;
+
+
+			return this;
+
+		}
+
+		/** 
+		* Return the parent matrix of the transform.
+		* If there is no parent then null is returned.
+		* @method getParentMatrix
+		* @return {Kiwi.Geom.Matrix} Parent transform matrix
+		* @public
+		*/
+		public getParentMatrix(): Matrix {
+
+			if (this._parent) {
+				return this._parent.getConcatenatedMatrix();
+			}
+
+			return null;
+		}
+
+		/** 
+		* Return the transformation matrix that concatenates this transform
+		* with all ancestor transforms. If there is no parent then this will
+		* return a matrix the same as this transform's matrix.
+		* @method getConcatenatedMatrix
+		* @return {Kiwi.Geom.Matrix} The concatenated matrix.
+		* @public
+		*/
+		public getConcatenatedMatrix(): Matrix {
+
+			// this._matrix.setFromOffsetTransform(this._x, this._y, this._scaleX, this._scaleY, this._rotation, this._rotPointX, this._rotPointY);
+
+			// var parentMatrix = this.getParentMatrix();
+
+			// if (parentMatrix) {
+			//     var matrix = this._matrix.clone();
+			//     matrix.prependMatrix(parentMatrix);
+			//     this._cachedConcatenatedMatrix.copyFrom(matrix);
+			//     return matrix;
+			// }
+
+			// return this._matrix;
+
+			var parentMatrix;
+
+			if ( !this._locked ) {
+				if ( this._parent ) {
+					this._matrix.setFromOffsetTransform(
+						this.x, this.y,
+						this.scaleX, this.scaleY,
+						this.rotation,
+						this.anchorPointX - this._parent.anchorPointX,
+						this.anchorPointY - this._parent.anchorPointY );
+				} else {
+					this._matrix.setFromOffsetTransform(
+						this.x, this.y,
+						this.scaleX, this.scaleY,
+						this.rotation,
+						this.anchorPointX,
+						this.anchorPointY );
+				}
+			}
+
+			if ( !this._ignoreParent ) {
+				parentMatrix = this.getParentMatrix();
+				if ( parentMatrix ) {
+					this._concatMatrix.copyFrom( this._matrix );
+					this._concatMatrix.prependMatrix( parentMatrix );
+					return this._concatMatrix;
+				}
+			}
+
+			return this._matrix;
+		}
+
+
+		/** 
+		* Apply this matrix to a an object with x and y properties representing a point and return the transformed point.
+		* @method transformPoint
+		* @param point {Kiwi.Geom.Point} 
+		* @return {Kiwi.Geom.Point}
+		* @public
+		*/
+		public transformPoint(point: Point): Point {
+
+			var mat = this.getConcatenatedMatrix();
+
+			return mat.transformPoint(point);
+
+		}
+
+		/** 
+		* Copy another transforms data to this transform. A clone of the source matrix is created for the matrix property.
+		* @method copyFrom
+		* @param transform {Kiwi.Geom.Transform} transform. The tranform to be copied from.
+		* @return {Kiwi.Geom.Transform} This object.
+		* @public
+		*/
+		public copyFrom(source: Transform): Transform {
+
+			this.setTransform(source.x, source.y, source.scaleX, source.scaleY, source.rotation, source.rotPointX, source.rotPointY);
+
+			this.parent = source.parent;
+
+			this._matrix = source.matrix.clone();
+
+			return this;
+
+		}
+
+		/** 
+		* Copy this transforms data to the destination Transform. 
+		* A clone of this transforms matrix is created in the destination Transform Matrix.
+		*
+		* @method copyTo
+		* @param destination {Kiwi.Geom.Transform} The tranform to copy to.
+		* @return {Kiwi.Geom.Transform} This object.
+		* @public
+		*/
+		public copyTo(destination: Transform): Transform {
+
+			destination.copyFrom(this);
+
+			return this;
+
+		}
+
+		/** 
+		* Return a clone of this transform.
+		*
+		* @method clone
+		* @param [output] {Kiwi.Geom.Transform} A Transform to copy the clone in to. If none is given a new Transform object will be made.
+		* @return {Kiwi.Geom.Transform} A clone of this object.
+		* @public
+		*/
+		public clone(output: Transform = new Transform()): Transform {
+
+			output.copyFrom(this);
+
+			return output;
+
+		}
+
+		/** 
+		* Recursively check that a transform does not appear as its own ancestor
+		* @method checkAncestor
+		* @param transform {Kiwi.Geom.Transform} The Transform to check.
+		* @return {boolean} Returns true if the given transform is the same as this or an ancestor, otherwise false.
+		* @public
+		*/
+		public checkAncestor(transform: Transform): boolean {
+			
+			/*if (transform === this)
+			{
+				return true
+			}
+
+			if (transform.parent !== null)
+			{
+				return (this.checkAncestor(transform._parent))
+			}*/
 
-            return "[{Transform (x=" + this._x + " y=" + this._y + " scaleX=" + this._scaleX + " scaleY=" + this._scaleY + " rotation=" + this._rotation + " regX=" + this._rotPointX + " regY=" + this.rotPointY + " matrix=" + this._matrix + ")}]";
+			return false;
 
-        }
-
-    }
+		}
 
-}
\ No newline at end of file
+		/** 
+		* Return a string represention of this object.
+		* @method toString
+		* @return {String} A string represention of this object.
+		* @public
+		*/
+		public get toString(): string {
+
+			return "[{Transform (x=" + this._x + " y=" + this._y + " scaleX=" + this._scaleX + " scaleY=" + this._scaleY + " rotation=" + this._rotation + " regX=" + this._rotPointX + " regY=" + this.rotPointY + " matrix=" + this._matrix + ")}]";
+
+		}
+
+	}
+
+}
diff --git a/src/geom/Vector2.ts b/src/geom/Vector2.ts
index 2d28b85..a2b1eb5 100644
--- a/src/geom/Vector2.ts
+++ b/src/geom/Vector2.ts
@@ -6,356 +6,356 @@
 
 module Kiwi.Geom {
 
-    /**
-    * A two dimensional vector object for storing and manipulating x and y vector components.
-    *
-    * @class Vector2
-    * @namespace Kiwi.Geom
-    * @constructor
-    * @param [x=0] {Number} The x component of the vector.
-    * @param [y=0] {Number} The y component of the vector.
-    * @return {Kiwi.Geom.Vector2}
-    */
-    export class Vector2 {
-
-        constructor (x: number = 0, y: number = 0) {
-            this.setTo(x, y);
-        }
-
-        /**
-        * The type of this object.
-        * @method objType
-        * @return {String} "Vector2"
-        * @public
-        */
-        public objType() {
-            return "Vector2";
-        }
-
-        /**
-        * The x component of this Vector2.
-        * @property x
-        * @type Number
-        * @public
-        */
-        public x: number;
-        
-        /**
-        * The y component of this Vector2.
-        * @property y
-        * @type Number
-        * @public
-        */
-        public y: number;
-
-        /**
-        * Generate a Vector2 from an angle
-        * @method fromAngle
-        * @param angle {Number} The angle to generate the Vector2 from.
-        * @return {Kiwi.Geom.Vector2} A new Vector2
-        * @static
-        * @public
-        */
-        public static fromAngle(angle:number): Vector2 {
-             return new Vector2(Math.cos(angle), Math.sin(angle));
-        }
-
-        /**
-        * Generate a random Vector2 within a given radius.
-        * @method randomRadius
-        * @param radius {Number} The size of the radius to use.
-        * @return {Kiwi.Geom.Vector2} A new Vector2
-        * @static
-        * @public
-        */
-        public static randomRadius(radius:number): Vector2 {
-            return new Vector2
+	/**
+	* A two dimensional vector object for storing and manipulating x and y vector components.
+	*
+	* @class Vector2
+	* @namespace Kiwi.Geom
+	* @constructor
+	* @param [x=0] {Number} The x component of the vector.
+	* @param [y=0] {Number} The y component of the vector.
+	* @return {Kiwi.Geom.Vector2}
+	*/
+	export class Vector2 {
+
+		constructor (x: number = 0, y: number = 0) {
+			this.setTo(x, y);
+		}
+
+		/**
+		* The type of this object.
+		* @method objType
+		* @return {String} "Vector2"
+		* @public
+		*/
+		public objType() {
+			return "Vector2";
+		}
+
+		/**
+		* The x component of this Vector2.
+		* @property x
+		* @type Number
+		* @public
+		*/
+		public x: number;
+		
+		/**
+		* The y component of this Vector2.
+		* @property y
+		* @type Number
+		* @public
+		*/
+		public y: number;
+
+		/**
+		* Generate a Vector2 from an angle
+		* @method fromAngle
+		* @param angle {Number} The angle to generate the Vector2 from.
+		* @return {Kiwi.Geom.Vector2} A new Vector2
+		* @static
+		* @public
+		*/
+		public static fromAngle(angle:number): Vector2 {
+			 return new Vector2(Math.cos(angle), Math.sin(angle));
+		}
+
+		/**
+		* Generate a random Vector2 within a given radius.
+		* @method randomRadius
+		* @param radius {Number} The size of the radius to use.
+		* @return {Kiwi.Geom.Vector2} A new Vector2
+		* @static
+		* @public
+		*/
+		public static randomRadius(radius:number): Vector2 {
+			return new Vector2
 				(
 					Math.random() * 2 - 1,
 					Math.random() * 2 - 1
 				).multiplyScalar( radius );
-        }
-
-        /**
-        * Generate a Vector2 from a point.
-        * @method fromPoint
-        * @param point {Kiwi.Geom.Point} point. 
-        * @return {Kiwi.Geom.Vector2} A new Vector2
-        * @static
-        * @public
-        */
-        public static fromPoint(point: Point): Vector2 {
-            return new Vector2(point.x,point.y);
-        }
-
-        /**
-        * Add each component of another Vector2 to this vectors components.
-        * @method add
-        * @param {Kiwi.Geom.Vector2} Vector2 to add
-        * @return {Kiwi.Geom.Vector2} A new Vector2 containing the product
-        * @public
-        */
-        public add(vector2: Vector2): Vector2 {
-            return new Vector2(this.x + vector2.x, this.y + vector2.y);
-        }
-
-        /**
-        * Add only the x component of another Vector2 to this vector.
-        * @method addX
-        * @param vector2 {Kiwi.Geom.Vector2} Vector2 to add
-        * @return {Kiwi.Geom.Vector2} A new Vector2 containing the result
-        * @public
-        */
-        public addX(vector2: Vector2): Vector2 {
-            return new Vector2(this.x + vector2.x, this.y);
-        }
-
-        /**
-        * Add only the y component of another Vector2 to this vector.
-        * @method addY
-        * @param vector2 {Kiwi.Geom.Vector2} Vector2 to add
-        * @return {Kiwi.Geom.Vector2} A new Vector2 containing the result
-        * @public
-        */
-        public addY(vector2: Vector2): Vector2 {
-            return new Vector2(this.x, this.y + vector2.y);
-        }
-
-        /**
-        * Subtract each component of another Vector2 from this vectors components.
-        * @method subtract
-        * @param vector2 {Kiwi.Geom.Vector2} Vector2 to subtract
-        * @return {Kiwi.Geom.Vector2} A new Vector2 containing the result
-        * @public
-        */
-        public subtract (vector2:Vector2):Vector2 {
-            return new Kiwi.Geom.Vector2(this.x - vector2.x, this.y - vector2.y);
-        }
-
-        /**
-        * Multiply each component of another Vector2 with this vectors components.
-        * @method multiply
-        * @param vector2 {Kiwi.Geom.Vector2} Vector2 to multiply
-        * @return {Kiwi.Geom.Vector2} A new Vector2 containing the result
-        * @public
-        */
-        public multiply (vector2:Vector2):Vector2 {
-            return new Kiwi.Geom.Vector2(this.x * vector2.x, this.y * vector2.y);
-        }
-
-        /**
-        * Multiply each component of this vector with a scalar number.
-        * @method multiplyScalar
-        * @param scalar {Number} Scalar to multiply
-        * @return {Kiwi.Geom.Vector2} A new Vector2 containing the result
-        * @public
-        */
-        public multiplyScalar (scalar:number):Vector2 {
-            return new Kiwi.Geom.Vector2(this.x * scalar, this.y * scalar);
-        }
-	
-        /**
-	    * Calculate the dot product if a Vector2 with this Vector2.
-        * @method dot
-	    * @param vector2 {Kiwi.Geom.Vector2} Vector2 to dot with this Vector2.
-	    * @return {Number} Result of dot product.
-        * @public
-	    */
-        public dot(vector2:Vector2): number {
-            return this.x * vector2.x + this.y * vector2.y;
-        }
-
-        /**
-	    * Calculate the square length of this Vector2 (Distance from the origin).
-        * @method lenSqr
-	    * @return {Number} The square length.
-        * @public
-	    */
-        public lenSqr(): number {
-            return this.x * this.x + this.y * this.y;
-        }
-
-        /**
-	    * Calculate the length of this Vector2 (Distance from the origin).
-        * @method len
-	    * @return {Number} The length.
-        * @public
-	    */
-        public len(): number {
-            return Math.sqrt(this.x * this.x + this.y * this.y);
-        }
-
-        /**
-	    * Calculate a normalised unit Vector2 from this Vector2.
-        * @method unit
-	    * @return {Kiwi.Geom.Vector2} a new Unit Length Vector2.
-        * @public
-	    */
-        public unit(): Vector2 {
-            var invLen = 1.0 / this.len();
-            return this.multiplyScalar(invLen);
-        }
-
-        /**
-	    * Reduce each component of the Vector to the closest lower round value.
-        * @method floor
-	    * @return {Kiwi.Geom.Vector2} a rounded down Vector2.
-        * @public
-	    */
-        public floor(): Vector2 {
-            return new Vector2(Math.floor(this.x), Math.floor(this.y));
-        }
-
-        /**
-	    * Increase each component of the Vector to the closest upper round value.
-        * @method ceil
-	    * @return {Kiwi.Geom.Vector2} a rounded up Vector2.
-        * @public
-	    */
-        public ceil(): Vector2 {
-            return new Vector2(Math.ceil(this.x), Math.ceil(this.y));
-        }
-
-        /**
-	    * Round each component of the Vector to the closest round value.
-        * @method round
-	    * @return {Kiwi.Geom.Vector2} a rounded Vector2.
-        * @public
-	    */
-        public round(): Vector2 {
-            return new Vector2(Math.round(this.x), Math.round(this.y));
-        }
-        
-        /**
-	    * Clamp the vector between a maximum and minimum Vector2 range component-wise.
-        * @method clamp
-        * @param min {Kiwi.Geom.Vector2} Minimum values for Vector2.
-        * @param max {Kiwi.Geom.Vector2} Maximum values for Vector2.
-	    * @return {Kiwi.Geom.Vector2} a clamped Vector2.
-        * @public
-	    */
-        public clamp(min:Vector2,max:Vector2): Vector2 {
-            return new Vector2(
-                                Math.max( Math.min(this.x, max.x), min.x ),
-						        Math.max( Math.min(this.y, max.y), min.y )
-                               );
-        }
-
-        /**
-	    * Calculate a Vector2 perpendicular to this Vector2.
-        * @method perp
-	    * @return {Kiwi.Geom.Vector2} the perpendicular Vector2.
-        * @public
-	    */
-        public perp(): Vector2 {
-            return new Vector2(-this.y, this.x);
-        }
-        
-        /**
-	    * Calculate a Vector2 opposite to this Vector2.
-        * @method neg
-	    * @return {Kiwi.Geom.Vector2} the opposite Vector2.
-        * @public
-	    */
-        public neg(): Vector2 {
-            return new Vector2( -this.x, -this.y);
-        }
-
-        /**
-	    * Check if two Vector2s from equal components.
-        * @method equal
-        * @param vector2 {Kiwi.Geom.Vector2} vector2. Vector2 to check against.
-        * @return {boolean} returns true if equal.
-        * @public
-	    */
-        public equal(vector2: Vector2): boolean {
-            return this.x === vector2.x && this.y === vector2.y;
-        }
-
-        /**
-	    * Get a Point object with the same components as this Vector2.
-        * @method point
-	    * @return {Kiwi.Geom.Point} A new Point.
-        * @public
-	    */
-        public point():Point {
-            return new Point(this.x, this.y);
-        }
-
-        /**
-	    * Set both components to zero.
-        * @method clear
-	    * @return {Kiwi.Geom.Vector2} This object.
-        * @public
-	    */
-        public clear(): Vector2 {
-            this.x = 0;
-            this.y = 0;
-            return this;
-        }
-
-        /**
-	    * Get a clone of this Vector2.
-        * @method clone
-        * @param [output] {Kiwi.Geom.Vector2} Optional. A vector2 that will be cloned to. One will be created if none passed.
-        * @return {Kiwi.Geom.Vector2} Either a new cloned Vector2 or the output vector with cloned components.
-        * @public
-	    */
-        public clone(output: Vector2= new Vector2): Vector2 {
-
-            return output.setTo(this.x, this.y);
-
-        }
-
-        /**
-	    * Copy components from another Vector2.
-        * @method copyFrom
-        * @param source {Kiwi.Geom.Vector2} A Vector2 to copy from.
-        * @return {Kiwi.Geom.Vector2} This object.
-        * @public
-	    */
-        public copyFrom(source: Vector2): Vector2 {
-            this.x = source.x;
-            this.y = source.y;
-            return this;
-        }
-
-        /**
-	    * Copy components to another Vector2.
-        * @method copyTo
-        * @param target {Kiwi.Geom.Vector2} A Vector2 to copy to.
-        * @return {Kiwi.Geom.Vector2} The supplied Vector2.
-        * @public
-	    */
-        public copyTo(target: Vector2): Vector2 {
-            target.x = this.x;
-            target.y = this.y;
-            return target;
-        }
-
-        /**
-	    * Set components on this Vector2.
-        * @method setTo
-        * @param x {Number} x component to set.
-        * @param y {Number} y component to set.
-        * @return {Kiwi.Geom.Vector2} This object.
-        * @public
-	    */
-        public setTo(x: number, y: number): Vector2 {
-            this.x = x;
-            this.y = y;
-            return this;
-        }
-
-        /**
-	    * Get a string representation of this object.
-        * @method toString
-        * @return {String} This object as a string.
-	    */
-        public toString(): string {
-            return '[{Vector2 (x=' + this.x + ' y=' + this.y + ')}]';
-        }
-
-    }
-
-}
\ No newline at end of file
+		}
+
+		/**
+		* Generate a Vector2 from a point.
+		* @method fromPoint
+		* @param point {Kiwi.Geom.Point} point. 
+		* @return {Kiwi.Geom.Vector2} A new Vector2
+		* @static
+		* @public
+		*/
+		public static fromPoint(point: Point): Vector2 {
+			return new Vector2(point.x,point.y);
+		}
+
+		/**
+		* Add each component of another Vector2 to this vectors components.
+		* @method add
+		* @param {Kiwi.Geom.Vector2} Vector2 to add
+		* @return {Kiwi.Geom.Vector2} A new Vector2 containing the product
+		* @public
+		*/
+		public add(vector2: Vector2): Vector2 {
+			return new Vector2(this.x + vector2.x, this.y + vector2.y);
+		}
+
+		/**
+		* Add only the x component of another Vector2 to this vector.
+		* @method addX
+		* @param vector2 {Kiwi.Geom.Vector2} Vector2 to add
+		* @return {Kiwi.Geom.Vector2} A new Vector2 containing the result
+		* @public
+		*/
+		public addX(vector2: Vector2): Vector2 {
+			return new Vector2(this.x + vector2.x, this.y);
+		}
+
+		/**
+		* Add only the y component of another Vector2 to this vector.
+		* @method addY
+		* @param vector2 {Kiwi.Geom.Vector2} Vector2 to add
+		* @return {Kiwi.Geom.Vector2} A new Vector2 containing the result
+		* @public
+		*/
+		public addY(vector2: Vector2): Vector2 {
+			return new Vector2(this.x, this.y + vector2.y);
+		}
+
+		/**
+		* Subtract each component of another Vector2 from this vectors components.
+		* @method subtract
+		* @param vector2 {Kiwi.Geom.Vector2} Vector2 to subtract
+		* @return {Kiwi.Geom.Vector2} A new Vector2 containing the result
+		* @public
+		*/
+		public subtract (vector2:Vector2):Vector2 {
+			return new Kiwi.Geom.Vector2(this.x - vector2.x, this.y - vector2.y);
+		}
+
+		/**
+		* Multiply each component of another Vector2 with this vectors components.
+		* @method multiply
+		* @param vector2 {Kiwi.Geom.Vector2} Vector2 to multiply
+		* @return {Kiwi.Geom.Vector2} A new Vector2 containing the result
+		* @public
+		*/
+		public multiply (vector2:Vector2):Vector2 {
+			return new Kiwi.Geom.Vector2(this.x * vector2.x, this.y * vector2.y);
+		}
+
+		/**
+		* Multiply each component of this vector with a scalar number.
+		* @method multiplyScalar
+		* @param scalar {Number} Scalar to multiply
+		* @return {Kiwi.Geom.Vector2} A new Vector2 containing the result
+		* @public
+		*/
+		public multiplyScalar (scalar:number):Vector2 {
+			return new Kiwi.Geom.Vector2(this.x * scalar, this.y * scalar);
+		}
+
+		/**
+		* Calculate the dot product if a Vector2 with this Vector2.
+		* @method dot
+		* @param vector2 {Kiwi.Geom.Vector2} Vector2 to dot with this Vector2.
+		* @return {Number} Result of dot product.
+		* @public
+		*/
+		public dot(vector2:Vector2): number {
+			return this.x * vector2.x + this.y * vector2.y;
+		}
+
+		/**
+		* Calculate the square length of this Vector2 (Distance from the origin).
+		* @method lenSqr
+		* @return {Number} The square length.
+		* @public
+		*/
+		public lenSqr(): number {
+			return this.x * this.x + this.y * this.y;
+		}
+
+		/**
+		* Calculate the length of this Vector2 (Distance from the origin).
+		* @method len
+		* @return {Number} The length.
+		* @public
+		*/
+		public len(): number {
+			return Math.sqrt(this.x * this.x + this.y * this.y);
+		}
+
+		/**
+		* Calculate a normalised unit Vector2 from this Vector2.
+		* @method unit
+		* @return {Kiwi.Geom.Vector2} a new Unit Length Vector2.
+		* @public
+		*/
+		public unit(): Vector2 {
+			var invLen = 1.0 / this.len();
+			return this.multiplyScalar(invLen);
+		}
+
+		/**
+		* Reduce each component of the Vector to the closest lower round value.
+		* @method floor
+		* @return {Kiwi.Geom.Vector2} a rounded down Vector2.
+		* @public
+		*/
+		public floor(): Vector2 {
+			return new Vector2(Math.floor(this.x), Math.floor(this.y));
+		}
+
+		/**
+		* Increase each component of the Vector to the closest upper round value.
+		* @method ceil
+		* @return {Kiwi.Geom.Vector2} a rounded up Vector2.
+		* @public
+		*/
+		public ceil(): Vector2 {
+			return new Vector2(Math.ceil(this.x), Math.ceil(this.y));
+		}
+
+		/**
+		* Round each component of the Vector to the closest round value.
+		* @method round
+		* @return {Kiwi.Geom.Vector2} a rounded Vector2.
+		* @public
+		*/
+		public round(): Vector2 {
+			return new Vector2(Math.round(this.x), Math.round(this.y));
+		}
+		
+		/**
+		* Clamp the vector between a maximum and minimum Vector2 range component-wise.
+		* @method clamp
+		* @param min {Kiwi.Geom.Vector2} Minimum values for Vector2.
+		* @param max {Kiwi.Geom.Vector2} Maximum values for Vector2.
+		* @return {Kiwi.Geom.Vector2} a clamped Vector2.
+		* @public
+		*/
+		public clamp(min:Vector2,max:Vector2): Vector2 {
+			return new Vector2(
+								Math.max( Math.min(this.x, max.x), min.x ),
+								Math.max( Math.min(this.y, max.y), min.y )
+							   );
+		}
+
+		/**
+		* Calculate a Vector2 perpendicular to this Vector2.
+		* @method perp
+		* @return {Kiwi.Geom.Vector2} the perpendicular Vector2.
+		* @public
+		*/
+		public perp(): Vector2 {
+			return new Vector2(-this.y, this.x);
+		}
+		
+		/**
+		* Calculate a Vector2 opposite to this Vector2.
+		* @method neg
+		* @return {Kiwi.Geom.Vector2} the opposite Vector2.
+		* @public
+		*/
+		public neg(): Vector2 {
+			return new Vector2( -this.x, -this.y);
+		}
+
+		/**
+		* Check if two Vector2s from equal components.
+		* @method equal
+		* @param vector2 {Kiwi.Geom.Vector2} vector2. Vector2 to check against.
+		* @return {boolean} returns true if equal.
+		* @public
+		*/
+		public equal(vector2: Vector2): boolean {
+			return this.x === vector2.x && this.y === vector2.y;
+		}
+
+		/**
+		* Get a Point object with the same components as this Vector2.
+		* @method point
+		* @return {Kiwi.Geom.Point} A new Point.
+		* @public
+		*/
+		public point():Point {
+			return new Point(this.x, this.y);
+		}
+
+		/**
+		* Set both components to zero.
+		* @method clear
+		* @return {Kiwi.Geom.Vector2} This object.
+		* @public
+		*/
+		public clear(): Vector2 {
+			this.x = 0;
+			this.y = 0;
+			return this;
+		}
+
+		/**
+		* Get a clone of this Vector2.
+		* @method clone
+		* @param [output] {Kiwi.Geom.Vector2} Optional. A vector2 that will be cloned to. One will be created if none passed.
+		* @return {Kiwi.Geom.Vector2} Either a new cloned Vector2 or the output vector with cloned components.
+		* @public
+		*/
+		public clone(output: Vector2= new Vector2): Vector2 {
+
+			return output.setTo(this.x, this.y);
+
+		}
+
+		/**
+		* Copy components from another Vector2.
+		* @method copyFrom
+		* @param source {Kiwi.Geom.Vector2} A Vector2 to copy from.
+		* @return {Kiwi.Geom.Vector2} This object.
+		* @public
+		*/
+		public copyFrom(source: Vector2): Vector2 {
+			this.x = source.x;
+			this.y = source.y;
+			return this;
+		}
+
+		/**
+		* Copy components to another Vector2.
+		* @method copyTo
+		* @param target {Kiwi.Geom.Vector2} A Vector2 to copy to.
+		* @return {Kiwi.Geom.Vector2} The supplied Vector2.
+		* @public
+		*/
+		public copyTo(target: Vector2): Vector2 {
+			target.x = this.x;
+			target.y = this.y;
+			return target;
+		}
+
+		/**
+		* Set components on this Vector2.
+		* @method setTo
+		* @param x {Number} x component to set.
+		* @param y {Number} y component to set.
+		* @return {Kiwi.Geom.Vector2} This object.
+		* @public
+		*/
+		public setTo(x: number, y: number): Vector2 {
+			this.x = x;
+			this.y = y;
+			return this;
+		}
+
+		/**
+		* Get a string representation of this object.
+		* @method toString
+		* @return {String} This object as a string.
+		*/
+		public toString(): string {
+			return '[{Vector2 (x=' + this.x + ' y=' + this.y + ')}]';
+		}
+
+	}
+
+}
diff --git a/src/hud/HUDDisplay.ts b/src/hud/HUDDisplay.ts
index d53a270..f34d8da 100644
--- a/src/hud/HUDDisplay.ts
+++ b/src/hud/HUDDisplay.ts
@@ -7,228 +7,227 @@
 
 module Kiwi.HUD {
 
-    /**
-    * A HUDDisplay is a container for which you can add/removes widget on, and is more used to manage the widgets that are being displayed on it.
-    * A HUDDisplay is created through a games HUDManager and is NOT directly instantiated.
-    * Each game can contain multiple HUDDisplay's and each HUDDisplay can contain multiple HUDWidgets.
-    *
-    * @class HUDDisplay
-    * @namespace Kiwi.HUD
-    * @constructor
-    * @param game {Kiwi.Game} The game that this HUD Display belongs to. 
-    * @param name {string} The name of this display.
-    * @return HUDDisplay
-    */
-    export class HUDDisplay {
-        
-        constructor(game: Kiwi.Game,name:string) {
-            this._game = game;
-            this.name = name;
-            this._manager = this._game.huds;
-            this._device = this._game.deviceTargetOption;
-
-            if (this._manager.supported) {
-
-                switch (this._device) {
-                    case Kiwi.TARGET_BROWSER:
-                        this.container = <HTMLDivElement>document.createElement("div");
-                        this.container.id = "HUD-layer-" + game.rnd.uuid();
-                        this.container.style.width = "100%";
-                        this.container.style.height = "100%";
-                        this.container.style.position = "absolute";
-                        this._widgets = new Array();
-
-                        break;
-                }
-
-                this.class = 'kiwi-display';
-            }
-        }
-
-        /**
-        * Returns the type of object that this is.
-        * @method objType
-        * @return {String} "HUDDisplay"
-        * @public
-        */
-        public objType():string {
-            return 'HUDDisplay';
-        }
-
-        /**
-        * The type of device that is being targeted for the game. This is the same as games deviceTargetOption 
-        * Needed as the type of device will detiremine how the items will be added to game or whether it will even work.
-        * 
-        * @property _device
-        * @type number
-        * @private
-        */
-        private _device: number;
-
-        /**
-        * The HUD Manager that this Display belongs to. 
-        * @property _manager
-        * @type Kiwi.HUD.HUDManager
-        * @private
-        */
-        private _manager: Kiwi.HUD.HUDManager;
-
-        /**
-        * Holds the container HTMLDivElement.
-        * @property container
-        * @type HTMLDivElement
-        * @public
-        */
-        public container: HTMLDivElement;
-
-        /**
-        * The name of this HUD Display. 
-        * @property name
-        * @type String
-        * @public
-        */
-        public name: string;
-        
-        /**
-        * The game that this HUD Display is on.
-        * @property _game
-        * @type Kiwi.Game
-        * @private
-        */
-        private _game: Kiwi.Game;
-
-        /**
-        * Contains a list of the widgets that are contained in this HUDDisplay. Each member is of the type Kiwi.HUD.HUDWidget.
-        * @property _widgets
-        * @type Array
-        * @private
-        */
-        private _widgets: Kiwi.HUD.HUDWidget[];
-
-        /**
-        * Adds a widget to the HUDDisplay. Returns a boolean as an indication of whether or not it was successful.
-        *
-        * @method addWidget
-        * @param widget {Kiwi.HUD.HUDWidget}  The widget to be added to the Display
-        * @return {Boolean} If it was successful or not.
-        * @public
-        */
-        public addWidget(widget: Kiwi.HUD.HUDWidget):boolean {
-            if (this._manager.supported) {
-                this._widgets.push(widget);
-                
-                if (this._device == Kiwi.TARGET_BROWSER) {
-                    this.container.appendChild(widget.container);
-                    return true;
-                }
-            }
-            return false;
-        }
-
-        /**
-        * Removes a singular widget from the display. Returns a boolean as an indication of if anything happened or not.
-        * 
-        * @method removeWidget
-        * @param widget {Kiwi.HUD.HUDWidget} The widget to be removed.
-        * @return {boolean} If it was successful or not.
-        * @public
-        */
-        public removeWidget(widget: Kiwi.HUD.HUDWidget):boolean {
-            if (this._manager.supported) {
-                
-                if (this.removeFromContainer(widget)) {
-
-                    var i = this._widgets.indexOf(widget);
-
-                    if (i !== -1) {
-                        this._widgets.splice(i, 1);
-                        return true;
-                    }
-                }
-
-            }
-            return false;
-        }
-
-        /**
-        * Removes all of the widgets on this display.
-        * @method removeAllWidgets
-        * @public
-        */
-        public removeAllWidgets() {
-            for (var i = 0; i < this._widgets.length; i++) {
-                this.removeFromContainer(this._widgets[i]);
-            }
-
-            this._widgets = [];
-        }
-
-        /**
-        * Removes a widget from on the HUDDisplay. 
-        * @method removeFromContainer
-        * @param widget {Kiwi.HUD.HUDWidget} The Widget to be removed.
-        * @returns {boolean}
-        */
-        private removeFromContainer(widget:Kiwi.HUD.HUDWidget):boolean {
-            if (this._manager.supported) {
-                if(this._device == Kiwi.TARGET_BROWSER) {
-
-                    if (this.container.contains(widget.container)) {
-                        this.container.removeChild(widget.container);
-                        return true;
-                    }
-
-                }
-            }
-            return false;
-        }
-
-        /**
-        * Update loop.
-        * @method update
-        * @public
-        */
-        public update() {
-            for (var i = 0; i < this._widgets.length; i++) {
-                this._widgets[i].update();
-            }
-        }
-
-        /**
-        * Shows displays the HUD Display on screen.
-        * @method show
-        * @public
-        */
-        public show() {
-            this.container.style.display = 'block';
-        }
-
-        /**
-        * Hides the current HUD Display from the screen.
-        * @method hide
-        * @public
-        */
-        public hide() {
-            this.container.style.display = 'none';
-        }
-
-        /**
-        * The class name that the container element that this HUDWidget current has.
-        * @property class
-        * @type {String} 
-        * @public
-        */
-        public set class(cssClass: string) {
-            if (this._device == Kiwi.TARGET_BROWSER) {
-                this.container.className = cssClass;
-            }
-        }
-        public get class(): string {
-            if (this._device == Kiwi.TARGET_BROWSER) {
-                return this.container.className;
-            }
-        }
-
-    }
+	/**
+	* A HUDDisplay is a container for which you can add/removes widget on, and is more used to manage the widgets that are being displayed on it.
+	* A HUDDisplay is created through a games HUDManager and is NOT directly instantiated.
+	* Each game can contain multiple HUDDisplay's and each HUDDisplay can contain multiple HUDWidgets.
+	*
+	* @class HUDDisplay
+	* @namespace Kiwi.HUD
+	* @constructor
+	* @param game {Kiwi.Game} The game that this HUD Display belongs to. 
+	* @param name {string} The name of this display.
+	* @return HUDDisplay
+	*/
+	export class HUDDisplay {
+
+		constructor(game: Kiwi.Game,name:string) {
+			this._game = game;
+			this.name = name;
+			this._manager = this._game.huds;
+			this._device = this._game.deviceTargetOption;
+
+			if (this._manager.supported) {
+
+				switch (this._device) {
+					case Kiwi.TARGET_BROWSER:
+						this.container = <HTMLDivElement>document.createElement("div");
+						this.container.id = "HUD-layer-" + game.rnd.uuid();
+						this.container.style.width = "100%";
+						this.container.style.height = "100%";
+						this.container.style.position = "absolute";
+						this._widgets = new Array();
+
+						break;
+				}
+
+				this.class = 'kiwi-display';
+			}
+		}
+
+		/**
+		* Returns the type of object that this is.
+		* @method objType
+		* @return {String} "HUDDisplay"
+		* @public
+		*/
+		public objType():string {
+			return 'HUDDisplay';
+		}
+
+		/**
+		* The type of device that is being targeted for the game. This is the same as games deviceTargetOption 
+		* Needed as the type of device will detiremine how the items will be added to game or whether it will even work.
+		* 
+		* @property _device
+		* @type number
+		* @private
+		*/
+		private _device: number;
+
+		/**
+		* The HUD Manager that this Display belongs to. 
+		* @property _manager
+		* @type Kiwi.HUD.HUDManager
+		* @private
+		*/
+		private _manager: Kiwi.HUD.HUDManager;
+
+		/**
+		* Holds the container HTMLDivElement.
+		* @property container
+		* @type HTMLDivElement
+		* @public
+		*/
+		public container: HTMLDivElement;
+
+		/**
+		* The name of this HUD Display. 
+		* @property name
+		* @type String
+		* @public
+		*/
+		public name: string;
+		
+		/**
+		* The game that this HUD Display is on.
+		* @property _game
+		* @type Kiwi.Game
+		* @private
+		*/
+		private _game: Kiwi.Game;
+
+		/**
+		* Contains a list of the widgets that are contained in this HUDDisplay. Each member is of the type Kiwi.HUD.HUDWidget.
+		* @property _widgets
+		* @type Array
+		* @private
+		*/
+		private _widgets: Kiwi.HUD.HUDWidget[];
+
+		/**
+		* Adds a widget to the HUDDisplay. Returns a boolean as an indication of whether or not it was successful.
+		*
+		* @method addWidget
+		* @param widget {Kiwi.HUD.HUDWidget}  The widget to be added to the Display
+		* @return {Boolean} If it was successful or not.
+		* @public
+		*/
+		public addWidget(widget: Kiwi.HUD.HUDWidget):boolean {
+			if (this._manager.supported) {
+				this._widgets.push(widget);
+				
+				if (this._device == Kiwi.TARGET_BROWSER) {
+					this.container.appendChild(widget.container);
+					return true;
+				}
+			}
+			return false;
+		}
+
+		/**
+		* Removes a singular widget from the display. Returns a boolean as an indication of if anything happened or not.
+		* 
+		* @method removeWidget
+		* @param widget {Kiwi.HUD.HUDWidget} The widget to be removed.
+		* @return {boolean} If it was successful or not.
+		* @public
+		*/
+		public removeWidget(widget: Kiwi.HUD.HUDWidget):boolean {
+			if (this._manager.supported) {
+				
+				if (this.removeFromContainer(widget)) {
+
+					var i = this._widgets.indexOf(widget);
+
+					if (i !== -1) {
+						this._widgets.splice(i, 1);
+						return true;
+					}
+				}
+
+			}
+			return false;
+		}
+
+		/**
+		* Removes all of the widgets on this display.
+		* @method removeAllWidgets
+		* @public
+		*/
+		public removeAllWidgets() {
+			for (var i = 0; i < this._widgets.length; i++) {
+				this.removeFromContainer(this._widgets[i]);
+			}
+
+			this._widgets = [];
+		}
+
+		/**
+		* Removes a widget from on the HUDDisplay. 
+		* @method removeFromContainer
+		* @param widget {Kiwi.HUD.HUDWidget} The Widget to be removed.
+		* @returns {boolean}
+		*/
+		private removeFromContainer(widget:Kiwi.HUD.HUDWidget):boolean {
+			if (this._manager.supported) {
+				if(this._device == Kiwi.TARGET_BROWSER) {
+
+					if (this.container.contains(widget.container)) {
+						this.container.removeChild(widget.container);
+						return true;
+					}
+
+				}
+			}
+			return false;
+		}
+
+		/**
+		* Update loop.
+		* @method update
+		* @public
+		*/
+		public update() {
+			for (var i = 0; i < this._widgets.length; i++) {
+				this._widgets[i].update();
+			}
+		}
+
+		/**
+		* Shows displays the HUD Display on screen.
+		* @method show
+		* @public
+		*/
+		public show() {
+			this.container.style.display = 'block';
+		}
+
+		/**
+		* Hides the current HUD Display from the screen.
+		* @method hide
+		* @public
+		*/
+		public hide() {
+			this.container.style.display = 'none';
+		}
+
+		/**
+		* The class name that the container element that this HUDWidget current has.
+		* @property class
+		* @type {String} 
+		* @public
+		*/
+		public set class(cssClass: string) {
+			if (this._device == Kiwi.TARGET_BROWSER) {
+				this.container.className = cssClass;
+			}
+		}
+		public get class(): string {
+			if (this._device == Kiwi.TARGET_BROWSER) {
+				return this.container.className;
+			}
+		}
+
+	}
 }
-
diff --git a/src/hud/HUDManager.ts b/src/hud/HUDManager.ts
index 3d85e20..8979d77 100644
--- a/src/hud/HUDManager.ts
+++ b/src/hud/HUDManager.ts
@@ -9,284 +9,283 @@
 
 module Kiwi.HUD {
 
-    /**
-    * This class manages all of the various HUDDisplays that are currently used on this Managers game.
-    * Using this class you can create/add and remove HUDDisplays from this game,
-    * change the HUDDisplay that is currently being display (also known as the currentHUD) and show/hide the currentHUD.
-    * Each HUDManager also has at least one HUDDisplay which is called the 'defaultHUD' you cannot remove,
-    * but you can reassign the defaultHUD to be a different HUDDisplay if you want. 
-    * 
-    *
-    * @class HUDManager
-    * @namespace Kiwi.HUD
-    * @constructor
-    * @param game {Kiwi.Game} game
-    * @return {Kiwi.HUD.HUDManager}
-    */
-    export class HUDManager {
-        
-        constructor(game: Kiwi.Game) {
-            this._game = game;
-            this._device = this._game.deviceTargetOption;
-        }
-
-        /**
-        * The game that this HUDManager belongs to.
-        * @property _game
-        * @type Kiwi.Game
-        * @private
-        */
-        private _game: Kiwi.Game;
-
-        /**
-        * The device that this game is being target at. The same as the deviceTargetOption property on the root Game.
-        * This is needed as it detirmines if HUD is supported on the device or not and if so, how it is implemented. 
-        * @property _device
-        * @type number
-        * @private
-        */
-        private _device: number;
-
-        /**
-        * If the HUD is supported on the DEVICE that is being targeted. Gets set during the BOOT sequence.
-        * @property _supported
-        * @type boolean
-        * @private
-        */
-        private _supported: boolean;
-
-        /**
-        * Returns the _supported property indicating whether HUD is supported or not.
-        * @property supported
-        * @type boolean
-        * @public
-        */
-        public get supported():boolean {
-            return this._supported;
-        }
-
-        /**
-        * The HTMLDivElement that is being used as the container for the whole manager.
-        * @property _hudContainer
-        * @type HTMLDivElement
-        * @private
-        */
-        private _hudContainer: HTMLDivElement;
-
-        /**
-        * The DOM is ready, so if the current state is pending we can boot up the HUD now.
-        * @method boot
-        * @public
-        */
-        public boot() {
-
-            if (this._device === Kiwi.TARGET_BROWSER) {
-                this._supported = true;
-
-                this._hudContainer = <HTMLDivElement>document.createElement("div");
-                this._hudContainer.id = "HUDContainer";
-                this._hudContainer.style.position = "absolute";
-                this._hudContainer.style.width = "100%";
-                this._hudContainer.style.height = "100%";
-                this._hudContainer.style.top = '0';
-                this._hudContainer.style.left = '0';
-                this._game.stage.container.appendChild(this._hudContainer);
-
-                this._huds = new Array<HUDDisplay>();
-
-                this._defaultHUD = this.createHUD("defaultHUD");
-                this._currentHUD = this._defaultHUD;
-                this.setHUD(this._defaultHUD);
-
-            } else {
-                this._supported = false;
-            }
-
-        }
-
-        /**
-        * Returns the type of object this is.
-        * @method objType
-        * @return {String} "HUDManager"
-        * @public
-        */
-        public objType():string {
-            return "HUDManager";
-        }
-
-        /**
-        * An array containing all of the HUDDisplays that are currently active on this HUDManager.
-        * @property _huds
-        * @type Array
-        * @private
-        */
-        private _huds: Kiwi.HUD.HUDDisplay[];
-
-        /**
-        * The defaultHUD that is being used.
-        * The defaultHUD cannot be removed, but can be swapped out for another HUDDisplay.
-        * @property _defaultHUD
-        * @type Kiwi.HUD.HUDDisplay
-        * @private
-        */
-        private _defaultHUD: Kiwi.HUD.HUDDisplay;
-
-        /**
-        * The currentHUD that is in use. Can be the same as the defaultHUD.
-        * @property _currentHUD
-        * @type Kiwi.HUD.HUDDisplay
-        * @private
-        */
-        private _currentHUD: Kiwi.HUD.HUDDisplay;
-
-        /**
-        * The default HUDDisplay that is to be used.
-        * The defaultHUD cannot be removed, and a game (that supports HUDS) will always contain the defaultHUD.
-        *
-        * @property defaultHUD
-        * @type Kiwi.HUD.HUDDisplay
-        * @public
-        */
-        public set defaultHUD(value: Kiwi.HUD.HUDDisplay) {
-            if (this._currentHUD === this._defaultHUD) {
-                this._currentHUD = value;
-                this.setHUD(this._currentHUD);
-            }
-            this._defaultHUD = value;
-        }
-        public get defaultHUD(): Kiwi.HUD.HUDDisplay {
-            return this._defaultHUD;
-        }
-
-        /**
-        * Changes the currentHUD that is being displayed to one that is passed.
-        * @method setHUD
-        * @param hud {Kiwi.HUD.HUDDisplay} The HUD you want to display. 
-        * @public
-        */
-        public setHUD(hud: Kiwi.HUD.HUDDisplay) {
-            if (this.supported) {
-                this.hideHUD();
-                this._currentHUD = hud;
-                this.showHUD();
-            }
-        }
-
-        /**
-        * Shows the currentHUD (if nothing is passed) or shows a HUDDisplay that is passed.
-        * @method showHUD
-        * @param [hud=currentHUD] {Kiwi.HUD.HUDDisplay} The HUDDisplay you want to show. Defaults to the currentHUD if nothing is passed.
-        * @public
-        */
-        public showHUD(hud:Kiwi.HUD.HUDDisplay=this._currentHUD) {
-            hud.show();
-        }
-
-        /**
-        * Hides the currentHUD (if nothing is passed) or shows a HUDDisplay that is passed.
-        * @method hideHUD 
-        * @param [hud=currentHUD] {Kiwi.HUD.HUDDisplay} The HUDDisplay you want to hude. Defaults to the currentHUD if nothing is passed.
-        * @public
-        */
-        public hideHUD(hud:Kiwi.HUD.HUDDisplay=this._currentHUD) {
-            hud.hide();
-        }
-
-        /**
-        * Creates a new HUDDisplay on this HUDManager.
-        * 
-        * @method createHUD
-        * @param name {string} Name of the new HUDDisplay that is being creates.
-        * @param [switchTo=false] {boolean} Switch to the new HUD that was created. DE
-        * @return {Kiwi.HUD.HUDDisplay} The HUDDisplay that was created.
-        * @public
-        */
-        public createHUD(name: string, switchTo:boolean=false): Kiwi.HUD.HUDDisplay {
-            
-            if (this.supported) {
-
-                var hud: Kiwi.HUD.HUDDisplay = new Kiwi.HUD.HUDDisplay(this._game, name);
-                hud.hide();
-                this.addToContainer(hud);
-                this._huds.push(hud);
-                
-                if(switchTo === true) this.setHUD(hud);
-
-                return hud;
-
-            }
-        }
-
-        /**
-        * Removes a HUDDisplay off this manager. Returns a boolean indicating whether or not this method was a success.
-        *
-        * @method removeHUD
-        * @param hud {Kiwi.HUD.HUDDisplay} The hud you want to remove.
-        * @returns {boolean} If this method succeeded or not.
-        * @public
-        */
-        public removeHUD(hud: Kiwi.HUD.HUDDisplay):boolean {
-            if (this.supported) {
-                if (hud === this._defaultHUD) {
-                    return false;
-                }
-
-                if (this._currentHUD === hud) {
-                    this.setHUD(this._defaultHUD);
-                }
-
-                this.removeFromContainer(hud);
-
-                var i = this._huds.indexOf(hud);
-
-                if (i !== -1) {
-                    this._huds.splice(i, 1);
-                }
-
-                return true;
-            }
-        }
-
-        /**
-        * Adds a HUDDisplays HTMLDivElement to this HUDManagers container element.
-        * @method addToContainer
-        * @param hud {Kiwi.HUD.HUDDisplay} The HUDDisplay that is to be added.
-        * @private
-        */
-        private addToContainer(hud:Kiwi.HUD.HUDDisplay) {
-            if (this._device == Kiwi.TARGET_BROWSER) {
-                this._hudContainer.appendChild(hud.container);
-            }
-        }
-
-        /**
-        * Removes the hud that is passed from this HUD Manager. Checks to see if that hud has this container as a parent first.
-        * @method removeFromContainer
-        * @param hud {Kiwi.HUD.HUDDisplay} The hud to be removed
-        * @private
-        */
-        private removeFromContainer(hud: Kiwi.HUD.HUDDisplay) {
-            if (this._device == Kiwi.TARGET_BROWSER) {
-                if (this._hudContainer.contains(hud.container)) {
-                    this._hudContainer.removeChild(hud.container);
-                }
-            }
-
-        }
-
-        /**
-        * Game loop
-        * @method update
-        * @public
-        */
-        public update() {
-            if (this._supported) {
-                for (var i = 0; i < this._huds.length; i++) {
-                    this._huds[i].update();
-                }
-            }
-        }
-
-    }
+	/**
+	* This class manages all of the various HUDDisplays that are currently used on this Managers game.
+	* Using this class you can create/add and remove HUDDisplays from this game,
+	* change the HUDDisplay that is currently being display (also known as the currentHUD) and show/hide the currentHUD.
+	* Each HUDManager also has at least one HUDDisplay which is called the 'defaultHUD' you cannot remove,
+	* but you can reassign the defaultHUD to be a different HUDDisplay if you want. 
+	* 
+	*
+	* @class HUDManager
+	* @namespace Kiwi.HUD
+	* @constructor
+	* @param game {Kiwi.Game} game
+	* @return {Kiwi.HUD.HUDManager}
+	*/
+	export class HUDManager {
+
+		constructor(game: Kiwi.Game) {
+			this._game = game;
+			this._device = this._game.deviceTargetOption;
+		}
+
+		/**
+		* The game that this HUDManager belongs to.
+		* @property _game
+		* @type Kiwi.Game
+		* @private
+		*/
+		private _game: Kiwi.Game;
+
+		/**
+		* The device that this game is being target at. The same as the deviceTargetOption property on the root Game.
+		* This is needed as it detirmines if HUD is supported on the device or not and if so, how it is implemented. 
+		* @property _device
+		* @type number
+		* @private
+		*/
+		private _device: number;
+
+		/**
+		* If the HUD is supported on the DEVICE that is being targeted. Gets set during the BOOT sequence.
+		* @property _supported
+		* @type boolean
+		* @private
+		*/
+		private _supported: boolean;
+
+		/**
+		* Returns the _supported property indicating whether HUD is supported or not.
+		* @property supported
+		* @type boolean
+		* @public
+		*/
+		public get supported():boolean {
+			return this._supported;
+		}
+
+		/**
+		* The HTMLDivElement that is being used as the container for the whole manager.
+		* @property _hudContainer
+		* @type HTMLDivElement
+		* @private
+		*/
+		private _hudContainer: HTMLDivElement;
+
+		/**
+		* The DOM is ready, so if the current state is pending we can boot up the HUD now.
+		* @method boot
+		* @public
+		*/
+		public boot() {
+
+			if (this._device === Kiwi.TARGET_BROWSER) {
+				this._supported = true;
+
+				this._hudContainer = <HTMLDivElement>document.createElement("div");
+				this._hudContainer.id = "HUDContainer";
+				this._hudContainer.style.position = "absolute";
+				this._hudContainer.style.width = "100%";
+				this._hudContainer.style.height = "100%";
+				this._hudContainer.style.top = '0';
+				this._hudContainer.style.left = '0';
+				this._game.stage.container.appendChild(this._hudContainer);
+
+				this._huds = new Array<HUDDisplay>();
+
+				this._defaultHUD = this.createHUD("defaultHUD");
+				this._currentHUD = this._defaultHUD;
+				this.setHUD(this._defaultHUD);
+
+			} else {
+				this._supported = false;
+			}
+
+		}
+
+		/**
+		* Returns the type of object this is.
+		* @method objType
+		* @return {String} "HUDManager"
+		* @public
+		*/
+		public objType():string {
+			return "HUDManager";
+		}
+
+		/**
+		* An array containing all of the HUDDisplays that are currently active on this HUDManager.
+		* @property _huds
+		* @type Array
+		* @private
+		*/
+		private _huds: Kiwi.HUD.HUDDisplay[];
+
+		/**
+		* The defaultHUD that is being used.
+		* The defaultHUD cannot be removed, but can be swapped out for another HUDDisplay.
+		* @property _defaultHUD
+		* @type Kiwi.HUD.HUDDisplay
+		* @private
+		*/
+		private _defaultHUD: Kiwi.HUD.HUDDisplay;
+
+		/**
+		* The currentHUD that is in use. Can be the same as the defaultHUD.
+		* @property _currentHUD
+		* @type Kiwi.HUD.HUDDisplay
+		* @private
+		*/
+		private _currentHUD: Kiwi.HUD.HUDDisplay;
+
+		/**
+		* The default HUDDisplay that is to be used.
+		* The defaultHUD cannot be removed, and a game (that supports HUDS) will always contain the defaultHUD.
+		*
+		* @property defaultHUD
+		* @type Kiwi.HUD.HUDDisplay
+		* @public
+		*/
+		public set defaultHUD(value: Kiwi.HUD.HUDDisplay) {
+			if (this._currentHUD === this._defaultHUD) {
+				this._currentHUD = value;
+				this.setHUD(this._currentHUD);
+			}
+			this._defaultHUD = value;
+		}
+		public get defaultHUD(): Kiwi.HUD.HUDDisplay {
+			return this._defaultHUD;
+		}
+
+		/**
+		* Changes the currentHUD that is being displayed to one that is passed.
+		* @method setHUD
+		* @param hud {Kiwi.HUD.HUDDisplay} The HUD you want to display. 
+		* @public
+		*/
+		public setHUD(hud: Kiwi.HUD.HUDDisplay) {
+			if (this.supported) {
+				this.hideHUD();
+				this._currentHUD = hud;
+				this.showHUD();
+			}
+		}
+
+		/**
+		* Shows the currentHUD (if nothing is passed) or shows a HUDDisplay that is passed.
+		* @method showHUD
+		* @param [hud=currentHUD] {Kiwi.HUD.HUDDisplay} The HUDDisplay you want to show. Defaults to the currentHUD if nothing is passed.
+		* @public
+		*/
+		public showHUD(hud:Kiwi.HUD.HUDDisplay=this._currentHUD) {
+			hud.show();
+		}
+
+		/**
+		* Hides the currentHUD (if nothing is passed) or shows a HUDDisplay that is passed.
+		* @method hideHUD 
+		* @param [hud=currentHUD] {Kiwi.HUD.HUDDisplay} The HUDDisplay you want to hude. Defaults to the currentHUD if nothing is passed.
+		* @public
+		*/
+		public hideHUD(hud:Kiwi.HUD.HUDDisplay=this._currentHUD) {
+			hud.hide();
+		}
+
+		/**
+		* Creates a new HUDDisplay on this HUDManager.
+		* 
+		* @method createHUD
+		* @param name {string} Name of the new HUDDisplay that is being creates.
+		* @param [switchTo=false] {boolean} Switch to the new HUD that was created. DE
+		* @return {Kiwi.HUD.HUDDisplay} The HUDDisplay that was created.
+		* @public
+		*/
+		public createHUD(name: string, switchTo:boolean=false): Kiwi.HUD.HUDDisplay {
+			
+			if (this.supported) {
+
+				var hud: Kiwi.HUD.HUDDisplay = new Kiwi.HUD.HUDDisplay(this._game, name);
+				hud.hide();
+				this.addToContainer(hud);
+				this._huds.push(hud);
+				
+				if(switchTo === true) this.setHUD(hud);
+
+				return hud;
+
+			}
+		}
+
+		/**
+		* Removes a HUDDisplay off this manager. Returns a boolean indicating whether or not this method was a success.
+		*
+		* @method removeHUD
+		* @param hud {Kiwi.HUD.HUDDisplay} The hud you want to remove.
+		* @returns {boolean} If this method succeeded or not.
+		* @public
+		*/
+		public removeHUD(hud: Kiwi.HUD.HUDDisplay):boolean {
+			if (this.supported) {
+				if (hud === this._defaultHUD) {
+					return false;
+				}
+
+				if (this._currentHUD === hud) {
+					this.setHUD(this._defaultHUD);
+				}
+
+				this.removeFromContainer(hud);
+
+				var i = this._huds.indexOf(hud);
+
+				if (i !== -1) {
+					this._huds.splice(i, 1);
+				}
+
+				return true;
+			}
+		}
+
+		/**
+		* Adds a HUDDisplays HTMLDivElement to this HUDManagers container element.
+		* @method addToContainer
+		* @param hud {Kiwi.HUD.HUDDisplay} The HUDDisplay that is to be added.
+		* @private
+		*/
+		private addToContainer(hud:Kiwi.HUD.HUDDisplay) {
+			if (this._device == Kiwi.TARGET_BROWSER) {
+				this._hudContainer.appendChild(hud.container);
+			}
+		}
+
+		/**
+		* Removes the hud that is passed from this HUD Manager. Checks to see if that hud has this container as a parent first.
+		* @method removeFromContainer
+		* @param hud {Kiwi.HUD.HUDDisplay} The hud to be removed
+		* @private
+		*/
+		private removeFromContainer(hud: Kiwi.HUD.HUDDisplay) {
+			if (this._device == Kiwi.TARGET_BROWSER) {
+				if (this._hudContainer.contains(hud.container)) {
+					this._hudContainer.removeChild(hud.container);
+				}
+			}
+
+		}
+
+		/**
+		* Game loop
+		* @method update
+		* @public
+		*/
+		public update() {
+			if (this._supported) {
+				for (var i = 0; i < this._huds.length; i++) {
+					this._huds[i].update();
+				}
+			}
+		}
+
+	}
 }
-
diff --git a/src/hud/HUDWidget.ts b/src/hud/HUDWidget.ts
index 494421e..6e52de4 100644
--- a/src/hud/HUDWidget.ts
+++ b/src/hud/HUDWidget.ts
@@ -6,307 +6,306 @@
 
 module Kiwi.HUD {
 
-    /**
-    * The HUDWidget is an abstract class containing the fundamental properties and methods that every HUDWidget needs to have.
-    * This class is designed to be extended from and thus objects should not directly instantiate it.
-    *
-    * @class HUDWidget
-    * @namespace Kiwi.HUD
-    * @constructor
-    * @param game {Kiwi.Game}  The game that this HUDWidget belongs to.
-    * @param name {string} Name of the type of HUDWidget.
-    * @param x {number} The coordinates of this HUDWidget on the x-axis.
-    * @param y {number} The coordinates of this HUDWidget on the y-axis.
-    * @return {Kiwi.HUD.HUDWidget}
-    */
-    export class HUDWidget {
-        
-        constructor(game:Kiwi.Game,name: string,x:number,y:number) {
-            this.name = name;
-            this.game = game;
-            this._manager = this.game.huds;
-            this._device = this.game.deviceTargetOption;
-            this.components = new Kiwi.ComponentManager(Kiwi.HUD_WIDGET, this);
+	/**
+	* The HUDWidget is an abstract class containing the fundamental properties and methods that every HUDWidget needs to have.
+	* This class is designed to be extended from and thus objects should not directly instantiate it.
+	*
+	* @class HUDWidget
+	* @namespace Kiwi.HUD
+	* @constructor
+	* @param game {Kiwi.Game}  The game that this HUDWidget belongs to.
+	* @param name {string} Name of the type of HUDWidget.
+	* @param x {number} The coordinates of this HUDWidget on the x-axis.
+	* @param y {number} The coordinates of this HUDWidget on the y-axis.
+	* @return {Kiwi.HUD.HUDWidget}
+	*/
+	export class HUDWidget {
 
-            if (this._manager.supported) {
+		constructor(game:Kiwi.Game,name: string,x:number,y:number) {
+			this.name = name;
+			this.game = game;
+			this._manager = this.game.huds;
+			this._device = this.game.deviceTargetOption;
+			this.components = new Kiwi.ComponentManager(Kiwi.HUD_WIDGET, this);
 
-                if(this._device === Kiwi.TARGET_BROWSER) {
-                    this.container = <HTMLDivElement>document.createElement("div");
-                    this.container.id = 'HUD-widget-' + this.game.rnd.uuid();
-                    this.container.className = 'HUD-widget';
-                    this.container.style.position = "absolute";
-                }
-                
-                this.onCoordsUpdate = new Kiwi.Signal();
-                this.x = x;
-                this.y = y;
-            }
-        }
+			if (this._manager.supported) {
 
-        /**
-        * Returns the type of object that this is.
-        * @method objType
-        * @return {String} "HUDWidget"
-        * @public
-        */
-        public objType(): string {
-            return 'HUDWidget';
-        }
+				if(this._device === Kiwi.TARGET_BROWSER) {
+					this.container = <HTMLDivElement>document.createElement("div");
+					this.container.id = 'HUD-widget-' + this.game.rnd.uuid();
+					this.container.className = 'HUD-widget';
+					this.container.style.position = "absolute";
+				}
+				
+				this.onCoordsUpdate = new Kiwi.Signal();
+				this.x = x;
+				this.y = y;
+			}
+		}
 
-        /**
-        * The HUDManager that this widget 'belongs' to.
-        * This is mainly indented for INTERNAL Kiwi use only and is public so that sub classes can have a reference to it.
-        * @property _manager
-        * @type Kiwi.HUD.HUDManager
-        * @protected
-        */
-        public _manager: Kiwi.HUD.HUDManager;
-        
-        /**
-        * The type of device that this game is being targeted at. Same as the deviceTargetOption on the game class.
-        * Used to detirmine how the HUD is to be managed behind the scenes.
-        * This is mainly indented for INTERNAL Kiwi use only and is public so that sub classes can have a reference to it.
-        * @property _device
-        * @type _device
-        * @protected
-        */
-        public _device: number;
+		/**
+		* Returns the type of object that this is.
+		* @method objType
+		* @return {String} "HUDWidget"
+		* @public
+		*/
+		public objType(): string {
+			return 'HUDWidget';
+		}
 
-        /**
-        * The game that this HUDWidget belongs to.
-        * @property game
-        * @type Kiwi.Game
-        * @public
-        */
-        public game: Kiwi.Game;
+		/**
+		* The HUDManager that this widget 'belongs' to.
+		* This is mainly indented for INTERNAL Kiwi use only and is public so that sub classes can have a reference to it.
+		* @property _manager
+		* @type Kiwi.HUD.HUDManager
+		* @protected
+		*/
+		public _manager: Kiwi.HUD.HUDManager;
 
-        /**
-        * A quick way to reference the style object that exists on the container element of this widget.
-        * @property style
-        * @type any
-        * @public
-        */
-        public get style():any {
-            if (this._device === Kiwi.TARGET_BROWSER) {
-                return this.container.style;
-            }
-        }
-        public set style(val: any) {
-            if (this._device === Kiwi.TARGET_BROWSER) {
-                this.container.style = val;
-            }
-        }
+		/**
+		* The type of device that this game is being targeted at. Same as the deviceTargetOption on the game class.
+		* Used to detirmine how the HUD is to be managed behind the scenes.
+		* This is mainly indented for INTERNAL Kiwi use only and is public so that sub classes can have a reference to it.
+		* @property _device
+		* @type _device
+		* @protected
+		*/
+		public _device: number;
 
-        /**
-        * Called when the coordinates of the HUD Widget updates.
-        * @property onCoordsUpdate
-        * @type Kiwi.Signal
-        * @public
-        */
-        public onCoordsUpdate: Kiwi.Signal;
+		/**
+		* The game that this HUDWidget belongs to.
+		* @property game
+		* @type Kiwi.Game
+		* @public
+		*/
+		public game: Kiwi.Game;
 
-        /**
-        * The x coordinate of the widget
-        * @property _x
-        * @type number
-        * @private
-        */
-        private _x: number;
-        
-        /**
-        * Get the x coordinate of the widget
-        * @property x
-        * @type number
-        * @public
-        */
-        public get x():number {
-            return this._x;
-        }
-        public set x(value: number) {
-            if (this._manager.supported) {
-                this._x = value;
-                if(this._device == Kiwi.TARGET_BROWSER) 
-                    this.container.style.left = this.x + "px";
-                
-                this.onCoordsUpdate.dispatch(this.x, this.y);
-            }
-        }
-        
-        /**
-        * The y coordinate of the widget
-        * @property _y
-        * @type number
-        * @private
-        */
-        private _y: number;
-        
-        /**
-        * Get the y coordinate of the widget
-        * @property y
-        * @type number
-        * @public
-        */
-        public get y(): number {
-            return this._y;
-        }
-        public set y(value: number) {
-            if (this._manager.supported) {
-                this._y = value;
-                if(this._device == Kiwi.TARGET_BROWSER)
-                    this.container.style.top = this.y + "px";
+		/**
+		* A quick way to reference the style object that exists on the container element of this widget.
+		* @property style
+		* @type any
+		* @public
+		*/
+		public get style():any {
+			if (this._device === Kiwi.TARGET_BROWSER) {
+				return this.container.style;
+			}
+		}
+		public set style(val: any) {
+			if (this._device === Kiwi.TARGET_BROWSER) {
+				this.container.style = val;
+			}
+		}
 
-                this.onCoordsUpdate.dispatch(this.x, this.y);
-            }    
-        }
-        
-        /**
-        * The list of components that the HUDWidget use's.
-        * @property components
-        * @type Kiwi.ComponentManager
-        * @public
-        */
-        public components: Kiwi.ComponentManager;
-        
-        /**
-        * The HTMLDivElement that this widget is using.
-        * @property
-        * @type HTMLDivElement
-        * @public
-        */
-        public container: HTMLDivElement;
+		/**
+		* Called when the coordinates of the HUD Widget updates.
+		* @property onCoordsUpdate
+		* @type Kiwi.Signal
+		* @public
+		*/
+		public onCoordsUpdate: Kiwi.Signal;
 
-        /**
-        * The name of the widget which is used to identify the type of widget.
-        * @property
-        * @type string
-        * @public
-        */
-        public name: string;
+		/**
+		* The x coordinate of the widget
+		* @property _x
+		* @type number
+		* @private
+		*/
+		private _x: number;
 
-        /**
-        * When a template has been set, this property will have a reference to the HTMLElement we can place the HUDWidget information into.
-        * Currently doesn't have that great support.
-        * @property tempElement
-        * @type HTMLElement
-        * @public
-        */
-        public tempElement: HTMLElement;
+		/**
+		* Get the x coordinate of the widget
+		* @property x
+		* @type number
+		* @public
+		*/
+		public get x():number {
+			return this._x;
+		}
+		public set x(value: number) {
+			if (this._manager.supported) {
+				this._x = value;
+				if(this._device == Kiwi.TARGET_BROWSER) 
+					this.container.style.left = this.x + "px";
+				
+				this.onCoordsUpdate.dispatch(this.x, this.y);
+			}
+		}
 
-        /**
-        * The parent of the template container. So that when removing a template we can place it in the right spot
-        * Currently doesn't have that great support.
-        * @property _tempParent
-        * @type HTMLElement
-        * @private
-        */
-        private _tempParent: HTMLElement;
+		/**
+		* The y coordinate of the widget
+		* @property _y
+		* @type number
+		* @private
+		*/
+		private _y: number;
 
-        /**
-        * The container element for the template
-        * Currently doesn't have that great support.
-        * @property _tempContainer
-        * @type HTMLElement
-        * @private
-        */
-        private _tempContainer: HTMLElement; 
+		/**
+		* Get the y coordinate of the widget
+		* @property y
+		* @type number
+		* @public
+		*/
+		public get y(): number {
+			return this._y;
+		}
+		public set y(value: number) {
+			if (this._manager.supported) {
+				this._y = value;
+				if(this._device == Kiwi.TARGET_BROWSER)
+					this.container.style.top = this.y + "px";
 
-        /**
-        * This method is used to remove existing DOM elements and place them inside a HUDWidget's container element.
-        * Useful so that when making HUD Widgets the developer can style HUDWidgets without having to create/write to much javascript.
-        *
-        * Can be used by itself but maybe more useful if you customise it to suit your own needs. 
-        * Currently doesn't have that great support.
-        *
-        * @method setTemplate
-        * @param main {string} main - ID of an HTMLElement. This element should contain all of the elements you would like to place inside the HUDWidget. 
-        * @param [element] {string} element - ID of an HTMLElement that resides inside of the main param. This is the element that the HUDWidget can use to populate with information. E.g. Your score, health remaining, the icon, e.t.c.
-        * @public
-        */
-        public setTemplate(main: string, element?: string, ...paramsArr: any[]) {
+				this.onCoordsUpdate.dispatch(this.x, this.y);
+			}
+		}
 
-            if (this._device == Kiwi.TARGET_BROWSER) {
-                var containerElement: HTMLElement = document.getElementById(main);
-                if (containerElement === undefined) {
-                    return;
-                }
+		/**
+		* The list of components that the HUDWidget use's.
+		* @property components
+		* @type Kiwi.ComponentManager
+		* @public
+		*/
+		public components: Kiwi.ComponentManager;
 
-                if (element === undefined) {
-                    var fieldElement = containerElement;
-                } else {
-                    var fieldElement: HTMLElement = document.getElementById(element);
-                    if (fieldElement === undefined || containerElement.contains(fieldElement) === false) {
-                        return;
-                    }
-                }
-                
-                this.tempElement = fieldElement;
-                this._tempContainer = containerElement;
-                this._tempParent = containerElement.parentElement;
-                this._tempParent.removeChild(containerElement);
-                this.container.appendChild(containerElement);
-            }
+		/**
+		* The HTMLDivElement that this widget is using.
+		* @property
+		* @type HTMLDivElement
+		* @public
+		*/
+		public container: HTMLDivElement;
 
-        }
+		/**
+		* The name of the widget which is used to identify the type of widget.
+		* @property
+		* @type string
+		* @public
+		*/
+		public name: string;
 
-        /**
-        * Used to remove any the template HTML from this HUDWidget.
-        * Currently doesn't have that great support.
-        * 
-        * @method removeTemplate
-        * @public
-        */
-        public removeTemplate() {
-            if (this._device == Kiwi.TARGET_BROWSER) {
-                if (this.tempElement !== undefined) {
-                    this.container.removeChild(this._tempContainer);
-                    this._tempParent.appendChild(this._tempContainer);
-                    this.tempElement = null;
-                    this._tempParent = null;
-                    this._tempContainer = null;
-                }
-            }
-        }
+		/**
+		* When a template has been set, this property will have a reference to the HTMLElement we can place the HUDWidget information into.
+		* Currently doesn't have that great support.
+		* @property tempElement
+		* @type HTMLElement
+		* @public
+		*/
+		public tempElement: HTMLElement;
 
-        /**
-        * The class name/s that the container element that this HUDWidget current has.
-        * @property class
-        * @type {String} 
-        * @public
-        */
-        public set class(cssClass: string) {
-            if (this._device == Kiwi.TARGET_BROWSER) {
-                this.container.className = cssClass;
-            }
-        }
-        public get class(): string {
-            if (this._device == Kiwi.TARGET_BROWSER) {
-                return this.container.className;
-            }
-        }
+		/**
+		* The parent of the template container. So that when removing a template we can place it in the right spot
+		* Currently doesn't have that great support.
+		* @property _tempParent
+		* @type HTMLElement
+		* @private
+		*/
+		private _tempParent: HTMLElement;
 
-        /**
-        * The game update loop.
-        * @method update
-        * @public
-        */
-        public update() {
-            this.components.update();
-        }
+		/**
+		* The container element for the template
+		* Currently doesn't have that great support.
+		* @property _tempContainer
+		* @type HTMLElement
+		* @private
+		*/
+		private _tempContainer: HTMLElement; 
 
-        /**
-        * 
-        * @method destroy
-        * @public
-        */
-        public destroy() {
-            delete this.game;
-            delete this._manager;
-            delete this._device;
-            if (this.onCoordsUpdate) this.onCoordsUpdate.dispose();
-            delete this.onCoordsUpdate;
-            //remove the elements....
-        }
+		/**
+		* This method is used to remove existing DOM elements and place them inside a HUDWidget's container element.
+		* Useful so that when making HUD Widgets the developer can style HUDWidgets without having to create/write to much javascript.
+		*
+		* Can be used by itself but maybe more useful if you customise it to suit your own needs. 
+		* Currently doesn't have that great support.
+		*
+		* @method setTemplate
+		* @param main {string} main - ID of an HTMLElement. This element should contain all of the elements you would like to place inside the HUDWidget. 
+		* @param [element] {string} element - ID of an HTMLElement that resides inside of the main param. This is the element that the HUDWidget can use to populate with information. E.g. Your score, health remaining, the icon, e.t.c.
+		* @public
+		*/
+		public setTemplate(main: string, element?: string, ...paramsArr: any[]) {
 
-    }
-}
+			if (this._device == Kiwi.TARGET_BROWSER) {
+				var containerElement: HTMLElement = document.getElementById(main);
+				if (containerElement === undefined) {
+					return;
+				}
+
+				if (element === undefined) {
+					var fieldElement = containerElement;
+				} else {
+					var fieldElement: HTMLElement = document.getElementById(element);
+					if (fieldElement === undefined || containerElement.contains(fieldElement) === false) {
+						return;
+					}
+				}
+				
+				this.tempElement = fieldElement;
+				this._tempContainer = containerElement;
+				this._tempParent = containerElement.parentElement;
+				this._tempParent.removeChild(containerElement);
+				this.container.appendChild(containerElement);
+			}
+
+		}
+
+		/**
+		* Used to remove any the template HTML from this HUDWidget.
+		* Currently doesn't have that great support.
+		* 
+		* @method removeTemplate
+		* @public
+		*/
+		public removeTemplate() {
+			if (this._device == Kiwi.TARGET_BROWSER) {
+				if (this.tempElement !== undefined) {
+					this.container.removeChild(this._tempContainer);
+					this._tempParent.appendChild(this._tempContainer);
+					this.tempElement = null;
+					this._tempParent = null;
+					this._tempContainer = null;
+				}
+			}
+		}
 
+		/**
+		* The class name/s that the container element that this HUDWidget current has.
+		* @property class
+		* @type {String} 
+		* @public
+		*/
+		public set class(cssClass: string) {
+			if (this._device == Kiwi.TARGET_BROWSER) {
+				this.container.className = cssClass;
+			}
+		}
+		public get class(): string {
+			if (this._device == Kiwi.TARGET_BROWSER) {
+				return this.container.className;
+			}
+		}
+
+		/**
+		* The game update loop.
+		* @method update
+		* @public
+		*/
+		public update() {
+			this.components.update();
+		}
+
+		/**
+		* 
+		* @method destroy
+		* @public
+		*/
+		public destroy() {
+			delete this.game;
+			delete this._manager;
+			delete this._device;
+			if (this.onCoordsUpdate) this.onCoordsUpdate.dispose();
+			delete this.onCoordsUpdate;
+			//remove the elements....
+		}
+
+	}
+}
diff --git a/src/hud/components/Counter.ts b/src/hud/components/Counter.ts
index b0fbd3c..71c6d7b 100644
--- a/src/hud/components/Counter.ts
+++ b/src/hud/components/Counter.ts
@@ -8,186 +8,185 @@
 
 module Kiwi.HUD.HUDComponents {
 
-    /**
-    * The Counter component handles a incrementation/decrementation of a singular numeric value. 
-    * You can also specifiy maximum/minimum values that the numeric value has be within but by default there is no max/min.
-    *
-    * @class Counter
-    * @extends Kiwi.Component
-    * @namespace Kiwi.HUD.HUDComponents
-    * @constructor
-    * @param owner {any} The object that this Component belongs to.
-    * @param current {number} The current value.
-    * @param [max=null] {number} The maximum value it can be. Default is null which means no maximum.
-    * @param [min=null] {number} The minimum value that the current can be. Default is null which means no minium.
-    * @return {Kiwi.HUD.HUDComponents.Counter}
-    */
-    export class Counter extends Kiwi.Component {
-        
-        constructor(owner: any, current: number, max: number= null, min: number= null) {
-            super(owner, "counter");
-
-            this._current = current;
-            this._max = max;
-            this._min = min;
-
-            //signals!!!
-            this.updated = new Kiwi.Signal();
-        }
-
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} 'CounterComponent'
-        * @public
-        */
-        public objType(): string {
-            return 'CounterComponent';
-        }
-
-        /**
-        * The current value of the range.
-        * @property _current
-        * @type number
-        * @private
-        */
-        private _current: number;
-
-        /**
-        * The maximum value that of the range.
-        * @property _max
-        * @type number
-        * @private
-        */
-        private _max: number;
-
-        /**
-        * The minimum value that of the range.
-        * @property _min
-        * @type number
-        * @default 0
-        * @private
-        */
-        private _min: number;
-
-        /**
-        * A Kiwi.Signal that dispatches an event when a value has changed.
-        * @property updated
-        * @type Kiwi.Signal
-        * @public
-        */
-        public updated: Kiwi.Signal;
-
-        /**
-        * Set allows setting of the maximum value that the range can be in. 
-        * Get returns the maximum value.
-        *
-        * @property max
-        * @type number
-        * @public
-        */
-        public set max(val: number) {
-            this._max = val;
-            this.updated.dispatch(this._current, this._max, this._min);
-        }
-        public get max(): number {
-            return this._max;
-        }
-
-        /**
-        * Set allows setting of the minimum value that the range can be in. 
-        * Get returns the minimum value.
-        *
-        * @property min
-        * @type number
-        * @public
-        */
-        public set min(val: number) {
-
-            this._min = val;
-            this.updated.dispatch(this._current, this._max, this._min);
-        
-        }
-        public get min(): number {
-            return this._min;
-        }
-
-        /**
-        * Set allows setting of the current value that the range can be in. 
-        * The current value will only change if it is within the maximum/minimum values.
-        * Get returns the current value.
-        *
-        * @property current
-        * @type number
-        * @public
-        */
-        public set current(val: number) {
-            if (this._max !== null && val > this._max) {
-                this._current = this._max;
-            } else if (this._min !== null && val < this._min) {
-                this._current = this._min;
-            } else {
-                this._current = val;
-            }
-            this.updated.dispatch(this._current, this._max, this._min);
-        }
-        public get current(): number {
-            return this._current;
-        }
-
-        /**
-        * Decreases the current value by the amount past. 
-        * If the new amount would be less than the minimun it goes to the min instead.
-        *
-        * @method decrease
-        * @param [val=1] {number} The amount that you want to decrease the current value by. Default is 1.
-        * @return {number}
-        * @public
-        */
-        public decrease(val: number= 1): number {
-            if (this._min === null || this._current > this._min) {
-                if (this._min !== null && this._current - val < this._min) {
-                    this._current = this._min;
-                } else {
-                    this._current -= val;
-                }
-                this.updated.dispatch(this._current, this._max, this._min);
-            }
-            return this._current;
-        }
-
-        /**
-        * Increases the current value by the amount past. 
-        * If the new amount would be greater than the maximum it goes to the max instead.
-        *
-        * @method increase
-        * @param [val=1] {number} The amount that you want to increase the current value by. Default is 1.
-        * @return {number}
-        * @public
-        */
-        public increase(val: number= 1): number {
-            if (this._max === null || this._current < this._max) {
-                if (this._max !== null && this._current + val > this._max) {
-                    this._current = this._max;
-                } else {
-                    this._current += val;
-                }
-                this.updated.dispatch(this._current, this._max, this._min);
-            }
-            return this._current;
-        }
-
-        /**
-        * @method currentPercent
-        * @return {number}
-        * @public
-        */
-        public currentPercent(): number {
-            if(this.max !== null) 
-            return ((this.current) / (this.max)) * 100;
-        }
-
-    }
+	/**
+	* The Counter component handles a incrementation/decrementation of a singular numeric value. 
+	* You can also specifiy maximum/minimum values that the numeric value has be within but by default there is no max/min.
+	*
+	* @class Counter
+	* @extends Kiwi.Component
+	* @namespace Kiwi.HUD.HUDComponents
+	* @constructor
+	* @param owner {any} The object that this Component belongs to.
+	* @param current {number} The current value.
+	* @param [max=null] {number} The maximum value it can be. Default is null which means no maximum.
+	* @param [min=null] {number} The minimum value that the current can be. Default is null which means no minium.
+	* @return {Kiwi.HUD.HUDComponents.Counter}
+	*/
+	export class Counter extends Kiwi.Component {
+
+		constructor(owner: any, current: number, max: number= null, min: number= null) {
+			super(owner, "counter");
+
+			this._current = current;
+			this._max = max;
+			this._min = min;
+
+			//signals!!!
+			this.updated = new Kiwi.Signal();
+		}
+
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} 'CounterComponent'
+		* @public
+		*/
+		public objType(): string {
+			return 'CounterComponent';
+		}
+
+		/**
+		* The current value of the range.
+		* @property _current
+		* @type number
+		* @private
+		*/
+		private _current: number;
+
+		/**
+		* The maximum value that of the range.
+		* @property _max
+		* @type number
+		* @private
+		*/
+		private _max: number;
+
+		/**
+		* The minimum value that of the range.
+		* @property _min
+		* @type number
+		* @default 0
+		* @private
+		*/
+		private _min: number;
+
+		/**
+		* A Kiwi.Signal that dispatches an event when a value has changed.
+		* @property updated
+		* @type Kiwi.Signal
+		* @public
+		*/
+		public updated: Kiwi.Signal;
+
+		/**
+		* Set allows setting of the maximum value that the range can be in. 
+		* Get returns the maximum value.
+		*
+		* @property max
+		* @type number
+		* @public
+		*/
+		public set max(val: number) {
+			this._max = val;
+			this.updated.dispatch(this._current, this._max, this._min);
+		}
+		public get max(): number {
+			return this._max;
+		}
+
+		/**
+		* Set allows setting of the minimum value that the range can be in. 
+		* Get returns the minimum value.
+		*
+		* @property min
+		* @type number
+		* @public
+		*/
+		public set min(val: number) {
+
+			this._min = val;
+			this.updated.dispatch(this._current, this._max, this._min);
+		
+		}
+		public get min(): number {
+			return this._min;
+		}
+
+		/**
+		* Set allows setting of the current value that the range can be in. 
+		* The current value will only change if it is within the maximum/minimum values.
+		* Get returns the current value.
+		*
+		* @property current
+		* @type number
+		* @public
+		*/
+		public set current(val: number) {
+			if (this._max !== null && val > this._max) {
+				this._current = this._max;
+			} else if (this._min !== null && val < this._min) {
+				this._current = this._min;
+			} else {
+				this._current = val;
+			}
+			this.updated.dispatch(this._current, this._max, this._min);
+		}
+		public get current(): number {
+			return this._current;
+		}
+
+		/**
+		* Decreases the current value by the amount past. 
+		* If the new amount would be less than the minimun it goes to the min instead.
+		*
+		* @method decrease
+		* @param [val=1] {number} The amount that you want to decrease the current value by. Default is 1.
+		* @return {number}
+		* @public
+		*/
+		public decrease(val: number= 1): number {
+			if (this._min === null || this._current > this._min) {
+				if (this._min !== null && this._current - val < this._min) {
+					this._current = this._min;
+				} else {
+					this._current -= val;
+				}
+				this.updated.dispatch(this._current, this._max, this._min);
+			}
+			return this._current;
+		}
+
+		/**
+		* Increases the current value by the amount past. 
+		* If the new amount would be greater than the maximum it goes to the max instead.
+		*
+		* @method increase
+		* @param [val=1] {number} The amount that you want to increase the current value by. Default is 1.
+		* @return {number}
+		* @public
+		*/
+		public increase(val: number= 1): number {
+			if (this._max === null || this._current < this._max) {
+				if (this._max !== null && this._current + val > this._max) {
+					this._current = this._max;
+				} else {
+					this._current += val;
+				}
+				this.updated.dispatch(this._current, this._max, this._min);
+			}
+			return this._current;
+		}
+
+		/**
+		* @method currentPercent
+		* @return {number}
+		* @public
+		*/
+		public currentPercent(): number {
+			if(this.max !== null) 
+			return ((this.current) / (this.max)) * 100;
+		}
+
+	}
 
 }
-
diff --git a/src/hud/components/Time.ts b/src/hud/components/Time.ts
index 09d99d1..75fe799 100644
--- a/src/hud/components/Time.ts
+++ b/src/hud/components/Time.ts
@@ -7,270 +7,269 @@
 
 module Kiwi.HUD.HUDComponents {
 
-    /**
-    * A Component to manage and display a Time in a particular format.
-    * The Time Component creates a new clock on the Time Manager and it uses that clock to keep track of the time.
-    * When you create a new Time Component you can specify a format that you want the time to display in, which is a string based on keywords.
-    * Current supported keywords for the format are:
-    *  's' = 'seconds'
-    *  'm' = 'minutes'
-    *  'ms' = milliseconds'
-    *  'ss' = 'seconds with leading zero'
-    *  'mm' = 'minutes with leading zero'
-    *
-    * @class Time
-    * @extends Kiwi.Component
-    * @namespace Kiwi.HUD.HUDComponents
-    * @constructor
-    * @param owner {any} The object that this component belongs to.
-    * @param [format=''] {string} The format that the time is to be displayed in. Leave blank for the default time.
-    * @return {Kiwi.HUD.HUDComponents.Counter}
-    */
-    export class Time extends Kiwi.Component {
+	/**
+	* A Component to manage and display a Time in a particular format.
+	* The Time Component creates a new clock on the Time Manager and it uses that clock to keep track of the time.
+	* When you create a new Time Component you can specify a format that you want the time to display in, which is a string based on keywords.
+	* Current supported keywords for the format are:
+	*  's' = 'seconds'
+	*  'm' = 'minutes'
+	*  'ms' = milliseconds'
+	*  'ss' = 'seconds with leading zero'
+	*  'mm' = 'minutes with leading zero'
+	*
+	* @class Time
+	* @extends Kiwi.Component
+	* @namespace Kiwi.HUD.HUDComponents
+	* @constructor
+	* @param owner {any} The object that this component belongs to.
+	* @param [format=''] {string} The format that the time is to be displayed in. Leave blank for the default time.
+	* @return {Kiwi.HUD.HUDComponents.Counter}
+	*/
+	export class Time extends Kiwi.Component {
 
-        constructor(owner:any, format:string='') {
-            super(owner, "time"); 
-            
-            this.clock = this.game.time.addClock(name + '-clock', 1000);
-            this.format = format;
+		constructor(owner:any, format:string='') {
+			super(owner, "time"); 
+			
+			this.clock = this.game.time.addClock(name + '-clock', 1000);
+			this.format = format;
 
-        }
+		}
 
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} 'TimeComponent'
-        * @public
-        */
-        public objType(): string {
-            return 'TimeComponent';
-        }
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} 'TimeComponent'
+		* @public
+		*/
+		public objType(): string {
+			return 'TimeComponent';
+		}
 
-        /**
-        * The clock that this component creates and uses to manage the current time.
-        * @property clock
-        * @type Kiwi.Time.Clock
-        * @private
-        */
-        public clock: Kiwi.Time.Clock;
+		/**
+		* The clock that this component creates and uses to manage the current time.
+		* @property clock
+		* @type Kiwi.Time.Clock
+		* @private
+		*/
+		public clock: Kiwi.Time.Clock;
 
-        /**
-        * Indicates whether or not the clock is currently running or not, and thus whether or not the time is playing or not.
-        * @property isRunning
-        * @type boolean
-        * @public
-        */
-        public get isRunning():boolean {
-            return this.clock.isRunning();
-        }
+		/**
+		* Indicates whether or not the clock is currently running or not, and thus whether or not the time is playing or not.
+		* @property isRunning
+		* @type boolean
+		* @public
+		*/
+		public get isRunning():boolean {
+			return this.clock.isRunning();
+		}
 
-        /**
-        * Pauses the clock where is stands. Calls the pause method on the clock.
-        * @method pause
-        * @public
-        */
-        public pause() {
-            this.clock.pause();
-        }
+		/**
+		* Pauses the clock where is stands. Calls the pause method on the clock.
+		* @method pause
+		* @public
+		*/
+		public pause() {
+			this.clock.pause();
+		}
 
-        /**
-        * Stops the clock and thus the time. Calls the stop method of the clock.
-        * @method stop
-        * @public
-        */
-        public stop() {
-            this.clock.stop();
-        }
+		/**
+		* Stops the clock and thus the time. Calls the stop method of the clock.
+		* @method stop
+		* @public
+		*/
+		public stop() {
+			this.clock.stop();
+		}
 
-        /**
-        * Starts the clock and thus the time. 
-        * @method start
-        * @public
-        */
-        public start() {
-            this.clock.start();
-            this._timeBefore = this.clock.elapsed();
-        }
+		/**
+		* Starts the clock and thus the time. 
+		* @method start
+		* @public
+		*/
+		public start() {
+			this.clock.start();
+			this._timeBefore = this.clock.elapsed();
+		}
 
-        /**
-        * Resumes the clock and thus the time.
-        * @method resume
-        * @public
-        */
-        public resume() {
-            this.clock.resume();
-        }
+		/**
+		* Resumes the clock and thus the time.
+		* @method resume
+		* @public
+		*/
+		public resume() {
+			this.clock.resume();
+		}
 
-        /**
-        * The format that they want the time to be displayed.
-        * @property _format
-        * @type string
-        * @private
-        */
-        private _format: string;
+		/**
+		* The format that they want the time to be displayed.
+		* @property _format
+		* @type string
+		* @private
+		*/
+		private _format: string;
 
-        /**
-        * The format that you want the time to be displayed in.
-        * @property format
-        * @type string
-        * @public
-        */
-        public set format(val: string) {
-            this._format = val;
-        }
-        public get format(): string {
-            return this._format;
-        }
+		/**
+		* The format that you want the time to be displayed in.
+		* @property format
+		* @type string
+		* @public
+		*/
+		public set format(val: string) {
+			this._format = val;
+		}
+		public get format(): string {
+			return this._format;
+		}
 
-        /**
-        * If the clock should 'count down' instead of up.
-        * @property countDown
-        * @type boolean
-        * @default false
-        * @public
-        */
-        public countDown: boolean = false;
+		/**
+		* If the clock should 'count down' instead of up.
+		* @property countDown
+		* @type boolean
+		* @default false
+		* @public
+		*/
+		public countDown: boolean = false;
 
-        /**
-        * Used during the formatting stage of displaying the time.
-        * @property _displayString
-        * @type string
-        * @private
-        */
-        private _displayString: string = '';
+		/**
+		* Used during the formatting stage of displaying the time.
+		* @property _displayString
+		* @type string
+		* @private
+		*/
+		private _displayString: string = '';
 
-        /**
-        * The current time in seconds.
-        * @property _currentTime
-        * @type number
-        * @private
-        */
-        private _currentTime: number = 0;
+		/**
+		* The current time in seconds.
+		* @property _currentTime
+		* @type number
+		* @private
+		*/
+		private _currentTime: number = 0;
 
-        /**
-        * The current time in seconds. This is READ ONLY.
-        * @property currentTime
-        * @type number
-        * @public
-        */
-        public get currentTime(): number {
-            return this._currentTime;
-        }
+		/**
+		* The current time in seconds. This is READ ONLY.
+		* @property currentTime
+		* @type number
+		* @public
+		*/
+		public get currentTime(): number {
+			return this._currentTime;
+		}
 
-        /**
-        * The last time that the timer update. Used to calculate the time delta.
-        * @property _timeBefore
-        * @type number
-        * @private
-        */
-        private _timeBefore: number = 0;
+		/**
+		* The last time that the timer update. Used to calculate the time delta.
+		* @property _timeBefore
+		* @type number
+		* @private
+		*/
+		private _timeBefore: number = 0;
 
-        /**
-        * Sets the current time of the timer.
-        * @method setTime
-        * @param milli {number} The number of milliseconds.
-        * @param [sec=0] {number} The number of seconds to add.
-        * @param [minutes=0] {number} The number of minutes to add.
-        * @public
-        */
-        public setTime(milli: number, sec: number= 0, minutes: number= 0) {
-            this._currentTime = milli;
-            if(sec != 0) this._currentTime += (sec * 1000);
-            if(minutes != 0) this._currentTime += (minutes * 60 * 1000);
-        }
+		/**
+		* Sets the current time of the timer.
+		* @method setTime
+		* @param milli {number} The number of milliseconds.
+		* @param [sec=0] {number} The number of seconds to add.
+		* @param [minutes=0] {number} The number of minutes to add.
+		* @public
+		*/
+		public setTime(milli: number, sec: number= 0, minutes: number= 0) {
+			this._currentTime = milli;
+			if(sec != 0) this._currentTime += (sec * 1000);
+			if(minutes != 0) this._currentTime += (minutes * 60 * 1000);
+		}
 
-        /**
-        * Increases the current time by the amount passed.
-        * @method addTime
-        * @param milli {number} The number of milliseconds.
-        * @param [sec=0] {number} The number of seconds to add.
-        * @param [minutes=0] {number} The number of minutes to add.
-        * @public
-        */
-        public addTime(milli:number, sec:number= 0,minutes:number= 0) {
-            this._currentTime += milli;
-            if(sec != 0) this._currentTime += (sec * 1000);
-            if (minutes != 0) this._currentTime += (minutes * 60 * 1000);
-        }
-        
-        /**
-        * Decreases the current time by the amount passed.
-        * @method removeTime
-        * @param milli {number} The number of milliseconds.
-        * @param [sec=0] {number} The number of seconds to add.
-        * @param [minutes=0] {number} The number of minutes to add.
-        * @public
-        */
-        public removeTime(milli: number, sec: number= 0, minutes: number= 0) {
-            this._currentTime -= milli;
-            if (sec != 0) this._currentTime -= (sec * 1000);
-            if (minutes != 0) this._currentTime -= (minutes * 60 * 1000);
-        }
+		/**
+		* Increases the current time by the amount passed.
+		* @method addTime
+		* @param milli {number} The number of milliseconds.
+		* @param [sec=0] {number} The number of seconds to add.
+		* @param [minutes=0] {number} The number of minutes to add.
+		* @public
+		*/
+		public addTime(milli:number, sec:number= 0,minutes:number= 0) {
+			this._currentTime += milli;
+			if(sec != 0) this._currentTime += (sec * 1000);
+			if (minutes != 0) this._currentTime += (minutes * 60 * 1000);
+		}
+		
+		/**
+		* Decreases the current time by the amount passed.
+		* @method removeTime
+		* @param milli {number} The number of milliseconds.
+		* @param [sec=0] {number} The number of seconds to add.
+		* @param [minutes=0] {number} The number of minutes to add.
+		* @public
+		*/
+		public removeTime(milli: number, sec: number= 0, minutes: number= 0) {
+			this._currentTime -= milli;
+			if (sec != 0) this._currentTime -= (sec * 1000);
+			if (minutes != 0) this._currentTime -= (minutes * 60 * 1000);
+		}
 
-        /**
-        * The speed at which the time will increase/decrease by. 
-        * Modify this property to make the time count down slower/faster.
-        * @property _speed
-        * @type number
-        * @default 1
-        * @private
-        */
-        public speed: number = 1;
-        
-        /**
-        * Returns a string with the current time that this component is upto in the format that was passed.
-        *
-        * @method updateTime
-        * @return string
-        * @public
-        */
-        public getTime():string {
-            if (this.countDown) {
-                this._currentTime -= (this.clock.elapsed() - this._timeBefore) * this.speed;
-            } else {
-                this._currentTime += (this.clock.elapsed() - this._timeBefore) * this.speed;
-            }
-            this._timeBefore = this.clock.elapsed();
+		/**
+		* The speed at which the time will increase/decrease by. 
+		* Modify this property to make the time count down slower/faster.
+		* @property _speed
+		* @type number
+		* @default 1
+		* @private
+		*/
+		public speed: number = 1;
+		
+		/**
+		* Returns a string with the current time that this component is upto in the format that was passed.
+		*
+		* @method updateTime
+		* @return string
+		* @public
+		*/
+		public getTime():string {
+			if (this.countDown) {
+				this._currentTime -= (this.clock.elapsed() - this._timeBefore) * this.speed;
+			} else {
+				this._currentTime += (this.clock.elapsed() - this._timeBefore) * this.speed;
+			}
+			this._timeBefore = this.clock.elapsed();
 
-            //format time
-            if (this._format !== '') {
-                this._displayString = this._format;
+			//format time
+			if (this._format !== '') {
+				this._displayString = this._format;
 
-                //milliseconds
-                if (this._displayString.indexOf('ms') !== -1) {
-                    var t = String(Math.floor(this._currentTime * 1000) % 1000);
-                    this._displayString = this._displayString.replace('ms', t);
-                }
-                //seconds - leading
-                if (this._displayString.indexOf('ss') != -1) {
-                    var t = String(Math.floor(this._currentTime) % 60);
-                    if (t.length < 2) t = '0' + t;
-                    this._displayString = this._displayString.replace('ss', t);
-                }
-                //minutes - leading
-                if (this._displayString.indexOf('mm') !== -1) {
-                    var t = String(Math.floor(this._currentTime / 60) % 60);
-                    if (t.length < 2) t = '0' + t;
-                    this._displayString = this._displayString.replace('mm', t);
-                }
-                //minutes - no leading
-                if (this._displayString.indexOf('s') != -1) {
-                    var t = String(Math.floor(this._currentTime) % 60);
-                    this._displayString = this._displayString.replace('s', t);
-                }
-                //seconds - no leading
-                if (this._displayString.indexOf('m') !== -1) {
-                    var t = String(Math.floor(this._currentTime / 60) % 60);
-                    this._displayString = this._displayString.replace('m', t);
-                }
+				//milliseconds
+				if (this._displayString.indexOf('ms') !== -1) {
+					var t = String(Math.floor(this._currentTime * 1000) % 1000);
+					this._displayString = this._displayString.replace('ms', t);
+				}
+				//seconds - leading
+				if (this._displayString.indexOf('ss') != -1) {
+					var t = String(Math.floor(this._currentTime) % 60);
+					if (t.length < 2) t = '0' + t;
+					this._displayString = this._displayString.replace('ss', t);
+				}
+				//minutes - leading
+				if (this._displayString.indexOf('mm') !== -1) {
+					var t = String(Math.floor(this._currentTime / 60) % 60);
+					if (t.length < 2) t = '0' + t;
+					this._displayString = this._displayString.replace('mm', t);
+				}
+				//minutes - no leading
+				if (this._displayString.indexOf('s') != -1) {
+					var t = String(Math.floor(this._currentTime) % 60);
+					this._displayString = this._displayString.replace('s', t);
+				}
+				//seconds - no leading
+				if (this._displayString.indexOf('m') !== -1) {
+					var t = String(Math.floor(this._currentTime / 60) % 60);
+					this._displayString = this._displayString.replace('m', t);
+				}
 
-                return this._displayString;
-            } else {
-                return String(this._currentTime.toFixed(2));
-            }
-        }
+				return this._displayString;
+			} else {
+				return String(this._currentTime.toFixed(2));
+			}
+		}
 
-    }
+	}
 
 }
-
diff --git a/src/hud/components/WidgetInput.ts b/src/hud/components/WidgetInput.ts
index 2f2d307..9ad7bce 100644
--- a/src/hud/components/WidgetInput.ts
+++ b/src/hud/components/WidgetInput.ts
@@ -6,190 +6,188 @@
 */
 
 module Kiwi.HUD.HUDComponents {
-    
-    /**
-    * The WidgetInput Component handles the input events that you may want to listen to on a widget.
-    * This Component is essentually another version of the normal Input Component but instead of for GameObjects this is for HUDWidgets.
-    *
-    * @class WidgetInput
-    * @extends Kiwi.Component
-    * @namespace Kiwi.HUD.HUDComponents
-    * @constructor
-    * @param owner {any} The object that this WidgetInput belongs to.
-    * @param container {HTMLElement} The HTMLElement that the events will occur on/to.
-    * @return {Kiwi.HUD.HUDComponents.WidgetInput} 
-    */
-    export class WidgetInput extends Component {
-
-        constructor(owner:any, container:HTMLElement) {
-            super(owner, 'WidgetInput');
-            this._container = container;
-
-            //signals!!
-            this.onUp = new Kiwi.Signal;
-            this.onDown = new Kiwi.Signal;
-            this.onOver = new Kiwi.Signal;
-            this.onOut = new Kiwi.Signal;
-
-            this._addEvents();
-        }
-
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} 'WidgetInputComponent'
-        * @public
-        */
-        public objType(): string {
-            return 'WidgetInputComponent';
-        }
-
-        /**
-        * A Signal that dispatches events when the user releases the mouse on top of the HTMLElement.
-        * @property onUp
-        * @type Kiwi.Signal
-        * @public
-        */
-        public onUp: Kiwi.Signal;
-
-        /**
-        * A Signal that dispatches events when the user presses the mouse on top of the HTMLElement.
-        * @property onDown
-        * @type Kiwi.Signal
-        * @public
-        */
-        public onDown: Kiwi.Signal;
-
-        /**
-        * A Signal that dispatches events when the user's mouse initially goes over the top of the HTMLElement.
-        * @property onOver
-        * @type Kiwi.Signal
-        * @public
-        */
-        public onOver: Kiwi.Signal;
-
-        /**
-        * A Signal that dispatches events when the user's mouse leaves the HTMLElement.
-        * @property onOut
-        * @type Kiwi.Signal
-        * @public
-        */
-        public onOut: Kiwi.Signal;
-        
-        /**
-        * The HTMLElement that the events are going to occur on.
-        * @property _container
-        * @type HTMLElement
-        * @private
-        */
-        private _container: HTMLElement;
-
-        /**
-        * Changes the HTMLElement that the events are occuring on to one passed. 
-        * Removes all of the current events from container before changing.
-        * @method setElement
-        * @param container {HTMLElement} The new element that the events are going to occur on.
-        * @public
-        */
-        public setElement(container: HTMLElement) {
-            this._removeEvents();
-            this._container = container;
-            this._addEvents();
-        }
-
-        /**
-        * Creates new bindings and adds the events to the HTMLElement.
-        * @method _addEvents
-        * @private
-        */
-        private _addEvents() {
-            if (!this._active) {
-                this._binds = [];
-                this._binds.push({ 'event': 'mouseup', 'function': this._up.bind(this) });
-                this._binds.push({ 'event': 'mousedown', 'function': this._down.bind(this) });
-                this._binds.push({ 'event': 'mouseover', 'function': this._over.bind(this) });
-                this._binds.push({ 'event': 'mouseout', 'function': this._out.bind(this) });
-
-                for (var i = 0; i < this._binds.length; i++) {
-                    this._container.addEventListener(this._binds[i].event, this._binds[i].function, false);
-                }
-                this._active = true;
-            }
-        }
-
-        /**
-        * Removes the events off of the current container.
-        * @method _removeEvents
-        * @private
-        */
-        private _removeEvents() {
-            if (this._active) {
-                for (var i = 0; i < this._binds.length; i++) {
-                    this._container.removeEventListener(this._binds[i].event, this._binds[i].function, false);
-                }
-                this._binds = [];
-                this._active = false;
-            }
-        }
-
-        /**
-        * An array of objects, that holds the events that are happening and the methods that are bound to the container. 
-        * @property _binds
-        * @type any
-        * @private
-        */
-        private _binds: any;
-
-        /**
-        * If the events are currently actively running or not.
-        * @property active
-        * @type boolean
-        * @private
-        */
-        private _active: boolean = false;
-
-        /**
-        * The method that is called when a mouseup event fires. The onUp Signal is called.
-        * @method _up
-        * @param evt {MouseEvent}
-        * @private
-        */
-        private _up(evt) {
-            this.onUp.dispatch(evt);
-        }
-        
-        /**
-        * The method that is called when a mousedown event fires. The onDown Signal is called.
-        * @method _down
-        * @param evt {MouseEvent}
-        * @private
-        */
-        private _down(evt) {
-            this.onDown.dispatch(evt);
-        }
-        
-        /**
-        * The method that is called when a mouseover event fires. The onOver Signal is called.
-        * @method _over
-        * @param evt {MouseEvent}
-        * @private
-        */
-        private _over(evt) {
-            this.onOver.dispatch(evt);
-        }
-        
-        /**
-        * The method that is called when a mouseout event fires. The onOut Signal is called.
-        * @method _out
-        * @param evt {MouseEvent}
-        * @private
-        */
-        private _out(evt) {
-            this.onOut.dispatch(evt);
-        }
-
-    }
-
-}
 
+	/**
+	* The WidgetInput Component handles the input events that you may want to listen to on a widget.
+	* This Component is essentually another version of the normal Input Component but instead of for GameObjects this is for HUDWidgets.
+	*
+	* @class WidgetInput
+	* @extends Kiwi.Component
+	* @namespace Kiwi.HUD.HUDComponents
+	* @constructor
+	* @param owner {any} The object that this WidgetInput belongs to.
+	* @param container {HTMLElement} The HTMLElement that the events will occur on/to.
+	* @return {Kiwi.HUD.HUDComponents.WidgetInput} 
+	*/
+	export class WidgetInput extends Component {
+
+		constructor(owner:any, container:HTMLElement) {
+			super(owner, 'WidgetInput');
+			this._container = container;
+
+			//signals!!
+			this.onUp = new Kiwi.Signal;
+			this.onDown = new Kiwi.Signal;
+			this.onOver = new Kiwi.Signal;
+			this.onOut = new Kiwi.Signal;
+
+			this._addEvents();
+		}
+
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} 'WidgetInputComponent'
+		* @public
+		*/
+		public objType(): string {
+			return 'WidgetInputComponent';
+		}
+
+		/**
+		* A Signal that dispatches events when the user releases the mouse on top of the HTMLElement.
+		* @property onUp
+		* @type Kiwi.Signal
+		* @public
+		*/
+		public onUp: Kiwi.Signal;
+
+		/**
+		* A Signal that dispatches events when the user presses the mouse on top of the HTMLElement.
+		* @property onDown
+		* @type Kiwi.Signal
+		* @public
+		*/
+		public onDown: Kiwi.Signal;
+
+		/**
+		* A Signal that dispatches events when the user's mouse initially goes over the top of the HTMLElement.
+		* @property onOver
+		* @type Kiwi.Signal
+		* @public
+		*/
+		public onOver: Kiwi.Signal;
+
+		/**
+		* A Signal that dispatches events when the user's mouse leaves the HTMLElement.
+		* @property onOut
+		* @type Kiwi.Signal
+		* @public
+		*/
+		public onOut: Kiwi.Signal;
+		
+		/**
+		* The HTMLElement that the events are going to occur on.
+		* @property _container
+		* @type HTMLElement
+		* @private
+		*/
+		private _container: HTMLElement;
+
+		/**
+		* Changes the HTMLElement that the events are occuring on to one passed. 
+		* Removes all of the current events from container before changing.
+		* @method setElement
+		* @param container {HTMLElement} The new element that the events are going to occur on.
+		* @public
+		*/
+		public setElement(container: HTMLElement) {
+			this._removeEvents();
+			this._container = container;
+			this._addEvents();
+		}
+
+		/**
+		* Creates new bindings and adds the events to the HTMLElement.
+		* @method _addEvents
+		* @private
+		*/
+		private _addEvents() {
+			if (!this._active) {
+				this._binds = [];
+				this._binds.push({ 'event': 'mouseup', 'function': this._up.bind(this) });
+				this._binds.push({ 'event': 'mousedown', 'function': this._down.bind(this) });
+				this._binds.push({ 'event': 'mouseover', 'function': this._over.bind(this) });
+				this._binds.push({ 'event': 'mouseout', 'function': this._out.bind(this) });
+
+				for (var i = 0; i < this._binds.length; i++) {
+					this._container.addEventListener(this._binds[i].event, this._binds[i].function, false);
+				}
+				this._active = true;
+			}
+		}
+
+		/**
+		* Removes the events off of the current container.
+		* @method _removeEvents
+		* @private
+		*/
+		private _removeEvents() {
+			if (this._active) {
+				for (var i = 0; i < this._binds.length; i++) {
+					this._container.removeEventListener(this._binds[i].event, this._binds[i].function, false);
+				}
+				this._binds = [];
+				this._active = false;
+			}
+		}
+
+		/**
+		* An array of objects, that holds the events that are happening and the methods that are bound to the container. 
+		* @property _binds
+		* @type any
+		* @private
+		*/
+		private _binds: any;
+
+		/**
+		* If the events are currently actively running or not.
+		* @property active
+		* @type boolean
+		* @private
+		*/
+		private _active: boolean = false;
+
+		/**
+		* The method that is called when a mouseup event fires. The onUp Signal is called.
+		* @method _up
+		* @param evt {MouseEvent}
+		* @private
+		*/
+		private _up(evt) {
+			this.onUp.dispatch(evt);
+		}
+		
+		/**
+		* The method that is called when a mousedown event fires. The onDown Signal is called.
+		* @method _down
+		* @param evt {MouseEvent}
+		* @private
+		*/
+		private _down(evt) {
+			this.onDown.dispatch(evt);
+		}
+		
+		/**
+		* The method that is called when a mouseover event fires. The onOver Signal is called.
+		* @method _over
+		* @param evt {MouseEvent}
+		* @private
+		*/
+		private _over(evt) {
+			this.onOver.dispatch(evt);
+		}
+		
+		/**
+		* The method that is called when a mouseout event fires. The onOut Signal is called.
+		* @method _out
+		* @param evt {MouseEvent}
+		* @private
+		*/
+		private _out(evt) {
+			this.onOut.dispatch(evt);
+		}
+
+	}
 
+}
diff --git a/src/hud/widgets/Bar.ts b/src/hud/widgets/Bar.ts
index 250bf3a..5504957 100644
--- a/src/hud/widgets/Bar.ts
+++ b/src/hud/widgets/Bar.ts
@@ -4,231 +4,230 @@
 */
 
 module Kiwi.HUD.Widget {
-    
-    /**
-    * Used for displaying of information in a bar like of format. Example: Amount of health remaining for a character.
-    * This class creates a 'innerbar' div inside of its main container which you can apply styles to.
-    * You can control the minimum/maximum and current values of the bar through the Counter widget.
-    * 
-    * @class Bar
-    * @extends Kiwi.HUD.HUDWidget
-    * @namespace Kiwi.HUD.Widget
-    * @constructor 
-    * @param game {Kiwi.Game} The game that this bar belongs to.
-    * @param current {Number} The current value of the bar.
-    * @param max {Number} The maximum value that there can be.
-    * @param x {Number} The coordinates of this widget on the x-axis.
-    * @param y {Number} The cooridnates of this widget on the y-axis.
-    * @param [width=120] {number} The width of the widget. Defaults to 120.
-    * @param [height=20] {number} The height of the widget. Defaults to 20.
-    * @param [color='#000'] {string} The default color of the inner bar. Defaults to #000 (black).
-    * @return {Kiwi.HUD.Widget.Bar}
-    */
-    export class Bar extends Kiwi.HUD.HUDWidget {
-        
-        constructor(game:Kiwi.Game, current: number, max:number, x:number,y:number, width:number=120, height:number=20, color='#000') {
-            super(game,"bar", x, y);
-            this._horizontal = true;
-            this.class = 'kiwi-bar-widget kiwi-widget';
-
-            if (this._manager.supported) {
-                if (this._device == Kiwi.TARGET_BROWSER) {
-                    this._bar = document.createElement('div');
-                    this._bar.className = 'kiwi-innerbar-widget';
-                    this._bar.style.backgroundColor = color;
-                    this.bar = this._bar;
-                    this.container.appendChild(this.bar);
-                }
-
-                this.counter = this.components.add(new Kiwi.HUD.HUDComponents.Counter(this, current, max, 0));
-                this.counter.updated.add(this.updateCSS, this);
-
-                this.width = width;
-                this.height = height;
-
-                this._bar.style.height = '100%';
-                this._bar.style.width = '100%';
-
-                this.updateCSS();
-            }
-        }
-
-        /**
-        * Returns the type of object that this is.
-        * @method objType
-        * @return {String} "BarWidget"
-        * @public
-        */
-        public objType(): string {
-            return 'BarWidget';
-        }
-
-        /**
-        * The width of the container
-        * @property _width
-        * @type number
-        * @private
-        */
-        private _width: number;
-        
-        /**
-        * The width of the container
-        * @property width
-        * @type number
-        * @public
-        */
-        public get width(): number {
-            return this._width;
-        }
-        public set width(value: number) {
-            if(this._device == Kiwi.TARGET_BROWSER) {
-                this.container.style.width = value + "px";
-            }
-
-            this._width = value;
-        }
-        
-        /**
-        * The height of the container
-        * @property _height
-        * @type number
-        * @private
-        */
-        private _height: number;
-        
-        /**
-        * The height of the container
-        * @property height
-        * @type number
-        * @public
-        */
-        public get height(): number {
-            return this._height;
-        }
-        public set height(value: number) {
-            if (this._device == Kiwi.TARGET_BROWSER) {
-                this.container.style.height = value + "px";
-            }
-            this._height = value;
-        }
-        
-        /**
-        * Knows if this bar is ment to be horizontal or veritical
-        * @property _horizontal
-        * @type boolean
-        * @private 
-        */
-        private _horizontal: boolean;
-        
-        /**
-        * The HTMLElement that is currently being used as the 'bar'.
-        * @property bar
-        * @type HTMLElement
-        * @public
-        */
-        public bar: HTMLElement;
-
-        /**
-        * A reference to the HTMLElement that this class always generates.
-        * @property _bar
-        * @type HTMLElement
-        * @private
-        */
-        private _bar: HTMLElement;
-        
-        /**
-        * The counter component.
-        * @property counter
-        * @type Kiwi.HUD.HUDComponents.Counter
-        * @public
-        */
-        public counter: Kiwi.HUD.HUDComponents.Counter;
-        
-        /**
-        * Used to set the bar to be horizontal or vertical by passing a boolean.
-        * @property horizontal
-        * @type boolean
-        * @public
-        */
-        public get horizontal(): boolean {
-            return this._horizontal;
-        }
-        public set horizontal(val: boolean) {
-            this._horizontal = val;
-            this.updateCSS();
-        }
-
-        /**
-        * Used to set the bar to be horizontal or vertical by passing a boolean.
-        * @property verticle
-        * @type boolean
-        * @public
-        */
-        public get vertical(): boolean {
-            return !this._horizontal;
-        }
-        public set vertical(val: boolean) {
-            this._horizontal = !val;
-            this.updateCSS();
-        }
-
-        /**
-        * This method is used to remove existing DOM elements and place them inside a HUDWidget's container element.
-        * Useful so that when making HUD Widgets the developer can style HUDWidgets without having to create/write to much javascript.
-        * Currently not supported. 
-        *
-        * @method setTemplate
-        * @param main {string} ID of an HTMLElement. This element should contain all of the elements you would like to place inside the HUDWidget.
-        * @param innerbar {string} ID of an HTMLElement that resides inside of the main param. This is the element that the HUDWidget can use to populate with information. E.g. Your score, health remaining, the icon, e.t.c.
-        * @public
-        */
-        public setTemplate(main: string, innerbar?: string) {
-
-            if(this._device == Kiwi.TARGET_BROWSER) {
-                super.setTemplate(main, innerbar);
-
-                if (this.tempElement !== undefined) {
-                    this.bar = this.tempElement;
-                }
-            }
-        }
-
-        /**
-        * Used to remove any the template HTML from this HUDWidget.
-        * Current not supported. 
-        *
-        * @method removeTemplate
-        * @public
-        */
-        public removeTemplate() {
-            if (this._device == Kiwi.TARGET_BROWSER) {
-                super.removeTemplate();
-
-                this.bar = this._bar;
-                this.container.appendChild(this.bar);
-                this.updateCSS();
-            }
-        }
-
-        /**
-        * Will be called when the range has been updated and thus you will want to preform the render of the bar here.
-        * This should be overriden by subclasses so that you have your own custom bars. 
-        * @method updateCSS
-        * @public
-        */
-        public updateCSS() {
-            
-            if (this.horizontal === true) {
-                this.bar.style.width = String(this.counter.currentPercent()) + '%';
-                this.bar.style.height = '100%';
-            } else {
-                this.bar.style.height = String(this.counter.currentPercent()) + '%';
-                this.bar.style.width = '100%';
-            }
-
-        }
-
-    }
-
-
-}
\ No newline at end of file
+
+	/**
+	* Used for displaying of information in a bar like of format. Example: Amount of health remaining for a character.
+	* This class creates a 'innerbar' div inside of its main container which you can apply styles to.
+	* You can control the minimum/maximum and current values of the bar through the Counter widget.
+	* 
+	* @class Bar
+	* @extends Kiwi.HUD.HUDWidget
+	* @namespace Kiwi.HUD.Widget
+	* @constructor 
+	* @param game {Kiwi.Game} The game that this bar belongs to.
+	* @param current {Number} The current value of the bar.
+	* @param max {Number} The maximum value that there can be.
+	* @param x {Number} The coordinates of this widget on the x-axis.
+	* @param y {Number} The cooridnates of this widget on the y-axis.
+	* @param [width=120] {number} The width of the widget. Defaults to 120.
+	* @param [height=20] {number} The height of the widget. Defaults to 20.
+	* @param [color='#000'] {string} The default color of the inner bar. Defaults to #000 (black).
+	* @return {Kiwi.HUD.Widget.Bar}
+	*/
+	export class Bar extends Kiwi.HUD.HUDWidget {
+
+		constructor(game:Kiwi.Game, current: number, max:number, x:number,y:number, width:number=120, height:number=20, color='#000') {
+			super(game,"bar", x, y);
+			this._horizontal = true;
+			this.class = 'kiwi-bar-widget kiwi-widget';
+
+			if (this._manager.supported) {
+				if (this._device == Kiwi.TARGET_BROWSER) {
+					this._bar = document.createElement('div');
+					this._bar.className = 'kiwi-innerbar-widget';
+					this._bar.style.backgroundColor = color;
+					this.bar = this._bar;
+					this.container.appendChild(this.bar);
+				}
+
+				this.counter = this.components.add(new Kiwi.HUD.HUDComponents.Counter(this, current, max, 0));
+				this.counter.updated.add(this.updateCSS, this);
+
+				this.width = width;
+				this.height = height;
+
+				this._bar.style.height = '100%';
+				this._bar.style.width = '100%';
+
+				this.updateCSS();
+			}
+		}
+
+		/**
+		* Returns the type of object that this is.
+		* @method objType
+		* @return {String} "BarWidget"
+		* @public
+		*/
+		public objType(): string {
+			return 'BarWidget';
+		}
+
+		/**
+		* The width of the container
+		* @property _width
+		* @type number
+		* @private
+		*/
+		private _width: number;
+
+		/**
+		* The width of the container
+		* @property width
+		* @type number
+		* @public
+		*/
+		public get width(): number {
+			return this._width;
+		}
+		public set width(value: number) {
+			if(this._device == Kiwi.TARGET_BROWSER) {
+				this.container.style.width = value + "px";
+			}
+
+			this._width = value;
+		}
+
+		/**
+		* The height of the container
+		* @property _height
+		* @type number
+		* @private
+		*/
+		private _height: number;
+		
+		/**
+		* The height of the container
+		* @property height
+		* @type number
+		* @public
+		*/
+		public get height(): number {
+			return this._height;
+		}
+		public set height(value: number) {
+			if (this._device == Kiwi.TARGET_BROWSER) {
+				this.container.style.height = value + "px";
+			}
+			this._height = value;
+		}
+
+		/**
+		* Knows if this bar is ment to be horizontal or veritical
+		* @property _horizontal
+		* @type boolean
+		* @private 
+		*/
+		private _horizontal: boolean;
+
+		/**
+		* The HTMLElement that is currently being used as the 'bar'.
+		* @property bar
+		* @type HTMLElement
+		* @public
+		*/
+		public bar: HTMLElement;
+
+		/**
+		* A reference to the HTMLElement that this class always generates.
+		* @property _bar
+		* @type HTMLElement
+		* @private
+		*/
+		private _bar: HTMLElement;
+
+		/**
+		* The counter component.
+		* @property counter
+		* @type Kiwi.HUD.HUDComponents.Counter
+		* @public
+		*/
+		public counter: Kiwi.HUD.HUDComponents.Counter;
+
+		/**
+		* Used to set the bar to be horizontal or vertical by passing a boolean.
+		* @property horizontal
+		* @type boolean
+		* @public
+		*/
+		public get horizontal(): boolean {
+			return this._horizontal;
+		}
+		public set horizontal(val: boolean) {
+			this._horizontal = val;
+			this.updateCSS();
+		}
+
+		/**
+		* Used to set the bar to be horizontal or vertical by passing a boolean.
+		* @property verticle
+		* @type boolean
+		* @public
+		*/
+		public get vertical(): boolean {
+			return !this._horizontal;
+		}
+		public set vertical(val: boolean) {
+			this._horizontal = !val;
+			this.updateCSS();
+		}
+
+		/**
+		* This method is used to remove existing DOM elements and place them inside a HUDWidget's container element.
+		* Useful so that when making HUD Widgets the developer can style HUDWidgets without having to create/write to much javascript.
+		* Currently not supported. 
+		*
+		* @method setTemplate
+		* @param main {string} ID of an HTMLElement. This element should contain all of the elements you would like to place inside the HUDWidget.
+		* @param innerbar {string} ID of an HTMLElement that resides inside of the main param. This is the element that the HUDWidget can use to populate with information. E.g. Your score, health remaining, the icon, e.t.c.
+		* @public
+		*/
+		public setTemplate(main: string, innerbar?: string) {
+
+			if(this._device == Kiwi.TARGET_BROWSER) {
+				super.setTemplate(main, innerbar);
+
+				if (this.tempElement !== undefined) {
+					this.bar = this.tempElement;
+				}
+			}
+		}
+
+		/**
+		* Used to remove any the template HTML from this HUDWidget.
+		* Current not supported. 
+		*
+		* @method removeTemplate
+		* @public
+		*/
+		public removeTemplate() {
+			if (this._device == Kiwi.TARGET_BROWSER) {
+				super.removeTemplate();
+
+				this.bar = this._bar;
+				this.container.appendChild(this.bar);
+				this.updateCSS();
+			}
+		}
+
+		/**
+		* Will be called when the range has been updated and thus you will want to preform the render of the bar here.
+		* This should be overriden by subclasses so that you have your own custom bars. 
+		* @method updateCSS
+		* @public
+		*/
+		public updateCSS() {
+			
+			if (this.horizontal === true) {
+				this.bar.style.width = String(this.counter.currentPercent()) + '%';
+				this.bar.style.height = '100%';
+			} else {
+				this.bar.style.height = String(this.counter.currentPercent()) + '%';
+				this.bar.style.width = '100%';
+			}
+
+		}
+
+	}
+
+}
diff --git a/src/hud/widgets/BasicScore.ts b/src/hud/widgets/BasicScore.ts
index f668480..9091a2a 100644
--- a/src/hud/widgets/BasicScore.ts
+++ b/src/hud/widgets/BasicScore.ts
@@ -5,58 +5,58 @@
 
 module Kiwi.HUD.Widget {
 
-    /**
-    * A subclass of textfield that is primarily used to keep track of a score.
-    * The score can be accessed via the counter component.
-    * 
-    * @class BasicScore
-    * @extends Kiwi.HUD.TextField
-    * @namespace Kiwi.HUD.Widget
-    * @constructor
-    * @param game {Kiwi.Game} The game that this BasicScore belongs to.
-    * @param x {number} The cooridnates of the game on the x-axis.
-    * @param y {number} The cooridnates of the game on the y-axis.
-    * @param [initial=0] {number} The initial score to start off at.
-    * @return {Kiwi.HUD.Widget.BasicScore}
-    */
-    export class BasicScore extends Kiwi.HUD.Widget.TextField {
-       
-        constructor(game: Kiwi.Game, x: number, y: number, initial:number=0) {
-            super(game, "basicScore", x, y);
-            this.name = 'basicScore';
-            this.class = 'kiwi-basicscore-widget kiwi-widget';
-            this.counter = this.components.add(new Kiwi.HUD.HUDComponents.Counter(this, initial));
-            this.counter.updated.add(this._updateText, this);
-            this._updateText();
-        }
+	/**
+	* A subclass of textfield that is primarily used to keep track of a score.
+	* The score can be accessed via the counter component.
+	* 
+	* @class BasicScore
+	* @extends Kiwi.HUD.TextField
+	* @namespace Kiwi.HUD.Widget
+	* @constructor
+	* @param game {Kiwi.Game} The game that this BasicScore belongs to.
+	* @param x {number} The cooridnates of the game on the x-axis.
+	* @param y {number} The cooridnates of the game on the y-axis.
+	* @param [initial=0] {number} The initial score to start off at.
+	* @return {Kiwi.HUD.Widget.BasicScore}
+	*/
+	export class BasicScore extends Kiwi.HUD.Widget.TextField {
+	   
+		constructor(game: Kiwi.Game, x: number, y: number, initial:number=0) {
+			super(game, "basicScore", x, y);
+			this.name = 'basicScore';
+			this.class = 'kiwi-basicscore-widget kiwi-widget';
+			this.counter = this.components.add(new Kiwi.HUD.HUDComponents.Counter(this, initial));
+			this.counter.updated.add(this._updateText, this);
+			this._updateText();
+		}
 
-        /**
-        * Returns the type of object that this is.
-        * @method objType
-        * @return {String} "BasicScoreWidget"
-        * @public
-        */
-        public objType(): string {
-            return 'BasicScoreWidget';
-        }
+		/**
+		* Returns the type of object that this is.
+		* @method objType
+		* @return {String} "BasicScoreWidget"
+		* @public
+		*/
+		public objType(): string {
+			return 'BasicScoreWidget';
+		}
 
-        /**
-        * Holds a reference to the counter component.
-        * @property counter
-        * @type Kiwi.HUD.HUDComponents.Counter
-        * @public
-        */
-        public counter: Kiwi.HUD.HUDComponents.Counter;
-        
-        /**
-        * Updates the text inside the textfield.
-        * @method _updateText
-        * @private
-        */
-        public _updateText() {
-            this.text = String(this.counter.current);
-        }
+		/**
+		* Holds a reference to the counter component.
+		* @property counter
+		* @type Kiwi.HUD.HUDComponents.Counter
+		* @public
+		*/
+		public counter: Kiwi.HUD.HUDComponents.Counter;
+		
+		/**
+		* Updates the text inside the textfield.
+		* @method _updateText
+		* @private
+		*/
+		public _updateText() {
+			this.text = String(this.counter.current);
+		}
 
-    }
+	}
 
 }
diff --git a/src/hud/widgets/Button.ts b/src/hud/widgets/Button.ts
index ef9cb6f..4d3735c 100644
--- a/src/hud/widgets/Button.ts
+++ b/src/hud/widgets/Button.ts
@@ -6,50 +6,50 @@
 */
 
 module Kiwi.HUD.Widget {
-    
-    /**
-    * A subclass of the TextField that has its own input component so that you can listen for mouse events on this widget.
-    *
-    * @class Button
-    * @extends Kiwi.HUD.TextField
-    * @namespace Kiwi.HUD.Widget
-    * @constructor
-    * @param game {Kiwi.Game} The game that this belongs to.
-    * @param text {string} The text that you want to display inside the button.
-    * @param x {number} The x-coordnates of this Widget.
-    * @param y {number} The y-coordinates of this Widget.
-    * @return {Kiwi.HUD.Widget.Button}
-    */
-    export class Button extends Kiwi.HUD.Widget.TextField {
-
-        constructor(game: Kiwi.Game, text:string, x: number, y: number) {
-
-            super(game, text, x, y);
-
-            this.name = 'button';
-            this.class = 'kiwi-button-widget kiwi-widget';
-            
-            this.input = this.components.add(new Kiwi.HUD.HUDComponents.WidgetInput(this, this.container));
-        }
-
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} "ButtonWidget"
-        * @public
-        */
-        public objType(): string {
-            return 'ButtonWidget';
-        }
-        
-        /**
-        * The WidgetInput component that handles the management of events for this button.
-        * @property input
-        * @type Kiwi.HUD.HUDComponents.WidgetInput
-        * @public
-        */
-        public input: Kiwi.HUD.HUDComponents.WidgetInput;
-
-    }
-
-}
\ No newline at end of file
+
+	/**
+	* A subclass of the TextField that has its own input component so that you can listen for mouse events on this widget.
+	*
+	* @class Button
+	* @extends Kiwi.HUD.TextField
+	* @namespace Kiwi.HUD.Widget
+	* @constructor
+	* @param game {Kiwi.Game} The game that this belongs to.
+	* @param text {string} The text that you want to display inside the button.
+	* @param x {number} The x-coordnates of this Widget.
+	* @param y {number} The y-coordinates of this Widget.
+	* @return {Kiwi.HUD.Widget.Button}
+	*/
+	export class Button extends Kiwi.HUD.Widget.TextField {
+
+		constructor(game: Kiwi.Game, text:string, x: number, y: number) {
+
+			super(game, text, x, y);
+
+			this.name = 'button';
+			this.class = 'kiwi-button-widget kiwi-widget';
+			
+			this.input = this.components.add(new Kiwi.HUD.HUDComponents.WidgetInput(this, this.container));
+		}
+
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} "ButtonWidget"
+		* @public
+		*/
+		public objType(): string {
+			return 'ButtonWidget';
+		}
+		
+		/**
+		* The WidgetInput component that handles the management of events for this button.
+		* @property input
+		* @type Kiwi.HUD.HUDComponents.WidgetInput
+		* @public
+		*/
+		public input: Kiwi.HUD.HUDComponents.WidgetInput;
+
+	}
+
+}
diff --git a/src/hud/widgets/Icon.ts b/src/hud/widgets/Icon.ts
index bc5df47..c8e87e1 100644
--- a/src/hud/widgets/Icon.ts
+++ b/src/hud/widgets/Icon.ts
@@ -6,168 +6,168 @@
 */
 
 module Kiwi.HUD.Widget {
-    
-    /**
-    * Used to display a cell from a TextureAtlas in the HUD. This could be used for portraits of the character, e.t.c.
-    * You can change the current cell that is being used in the TextureAtlas by modifing the cellIndex property.
-    *
-    * @class Icon
-    * @extends Kiwi.HUD.HUDWidget
-    * @namespace Kiwi.HUD.Widget
-    * @constructor
-    * @param game {Kiwi.Game} The game that this icon belongs to.
-    * @param atlas {Kiwi.Textures.TextureAtlas} The image that you would like displayed.
-    * @param x {Number} The coordinate of the icon on the x-axis.
-    * @param y {Number} The coordinate of the icon on the y-axis.
-    * @return {Kiwi.HUD.Widget.Icon}
-    */
-    export class Icon extends Kiwi.HUD.HUDWidget {
-
-        constructor(game:Kiwi.Game, atlas: Kiwi.Textures.TextureAtlas, x:number, y:number) {
-
-            super(game, 'Icon', x, y);
-
-            this.class = 'kiwi-icon-widget kiwi-widget';
-            this.atlas = atlas;
-            this.icon = this.container;
-            this._applyCSS();
-        }
-
-        /**
-        * Holds the texture atlas that is being used
-        * @property atlas
-        * @type Kiwi.Textures.TextureAtlas
-        * @public
-        */
-        public atlas: Kiwi.Textures.TextureAtlas;
-        
-        /**
-        * The cell inside the texture atlas that this icon is using
-        * @property _cellIndex
-        * @type number
-        * @default 0
-        * @private
-        */
-        private _cellIndex: number = 0;
-        
-        /**
-        * Gets the cell index that is being used.
-        * @property cellIndex
-        * @type number
-        * @default 0 
-        * @public
-        */
-        public get cellIndex(): number {
-            return this._cellIndex;
-        }
-        public set cellIndex(value: number) {
-            this._cellIndex = value;
-            this.width = this.atlas.cells[this.cellIndex].w;
-            this.height = this.atlas.cells[this.cellIndex].h;
-            this._applyCSS();
-        }
-
-        /**
-        * Returns the width of the cell that is being used.
-        * @property width
-        * @type number
-        * @public
-        */
-        public get width(): number {
-            return this.atlas.cells[this.cellIndex].w;
-        }
-        
-        /**
-        * Returns the height of the cell that is being used.
-        * @property height
-        * @type number
-        * @public
-        */
-        public get height(): number {
-            return this.atlas.cells[this.cellIndex].h;
-        }
-
-        /**
-        * Is a reference to the element that the icon CSS is being applyed to.
-        * @property icon
-        * @type HTMLElement
-        * @public
-        */
-        public icon: HTMLElement;
-
-        /**
-        * Removes the CSS from the Icon.
-        * This can happen when setting/removing a template and is public to allow for overriding from subclasses.
-        * @method _removeCSS
-        * @protected
-        */
-        public _removeCSS() {
-            this.icon.style.width = '';
-            this.icon.style.height = '';
-            this.icon.style.backgroundImage = '';
-            this.icon.style.backgroundRepeat = '';
-        }
-
-        /**
-        * Applys the css to the HTMLElement that is to be affected. 
-        * @method _applyCSS
-        * @protected
-        */
-        public _applyCSS() {
-            this.icon.style.width = this.width + "px";
-            this.icon.style.height = this.height + "px";
-            this.icon.style.backgroundPositionX = -this.atlas.cells[this.cellIndex].x + "px";
-            this.icon.style.backgroundPositionY = -this.atlas.cells[this.cellIndex].y + "px";
-            this.icon.style.backgroundRepeat = 'no-repeat';
-
-            if ( Kiwi.Utils.Common.isUndefined( this.atlas.image.src) == false) {
-                this.icon.style.backgroundImage = 'url("' + this.atlas.image.src + '")';
-            } else {
-                this.icon.style.backgroundImage = 'url("' + this.atlas.image.toDataURL("image/png") + '")';
-            }
-
-        }
-
-        /**
-        * This method is used to remove existing DOM elements and place them inside a HUDWidget's container element.
-        * Useful so that when making HUD Widgets the developer can style HUDWidgets without having to create/write to much javascript.
-        * Currently not supported.
-        *
-        * @method setTemplate
-        * @param main {string} main - ID of an HTMLElement. This element should contain all of the elements you would like to place inside the HUDWidget. 
-        * @param icon {string} icon - ID of an HTMLElement that resides inside of the main param. This is the element that the HUDWidget can use to populate with information. E.g. Your score, health remaining, the icon, e.t.c.
-        * @public
-        */
-        public setTemplate(main: string, icon?: string) {  
-            if (this._device == Kiwi.TARGET_BROWSER) {
-                this._removeCSS();
-
-                super.setTemplate(main, icon);
-                
-                if (this.tempElement !== undefined) {
-                    this.icon = this.tempElement;
-                }
-
-                this._applyCSS();
-            }
-        }
-
-        /**
-        * Used to remove any the template HTML from this HUDWidget.
-        * 
-        * @method removeTemplate
-        * @public
-        */
-        public removeTemplate() {
-            if (this._device == Kiwi.TARGET_BROWSER) {
-                super.removeTemplate();
-
-                this._removeCSS();
-                this.icon = this.container;
-                this._applyCSS();
-            }
-        }
-
-    }
-
-}
\ No newline at end of file
+
+	/**
+	* Used to display a cell from a TextureAtlas in the HUD. This could be used for portraits of the character, e.t.c.
+	* You can change the current cell that is being used in the TextureAtlas by modifing the cellIndex property.
+	*
+	* @class Icon
+	* @extends Kiwi.HUD.HUDWidget
+	* @namespace Kiwi.HUD.Widget
+	* @constructor
+	* @param game {Kiwi.Game} The game that this icon belongs to.
+	* @param atlas {Kiwi.Textures.TextureAtlas} The image that you would like displayed.
+	* @param x {Number} The coordinate of the icon on the x-axis.
+	* @param y {Number} The coordinate of the icon on the y-axis.
+	* @return {Kiwi.HUD.Widget.Icon}
+	*/
+	export class Icon extends Kiwi.HUD.HUDWidget {
+
+		constructor(game:Kiwi.Game, atlas: Kiwi.Textures.TextureAtlas, x:number, y:number) {
+
+			super(game, 'Icon', x, y);
+
+			this.class = 'kiwi-icon-widget kiwi-widget';
+			this.atlas = atlas;
+			this.icon = this.container;
+			this._applyCSS();
+		}
+
+		/**
+		* Holds the texture atlas that is being used
+		* @property atlas
+		* @type Kiwi.Textures.TextureAtlas
+		* @public
+		*/
+		public atlas: Kiwi.Textures.TextureAtlas;
+
+		/**
+		* The cell inside the texture atlas that this icon is using
+		* @property _cellIndex
+		* @type number
+		* @default 0
+		* @private
+		*/
+		private _cellIndex: number = 0;
+
+		/**
+		* Gets the cell index that is being used.
+		* @property cellIndex
+		* @type number
+		* @default 0 
+		* @public
+		*/
+		public get cellIndex(): number {
+			return this._cellIndex;
+		}
+		public set cellIndex(value: number) {
+			this._cellIndex = value;
+			this.width = this.atlas.cells[this.cellIndex].w;
+			this.height = this.atlas.cells[this.cellIndex].h;
+			this._applyCSS();
+		}
+
+		/**
+		* Returns the width of the cell that is being used.
+		* @property width
+		* @type number
+		* @public
+		*/
+		public get width(): number {
+			return this.atlas.cells[this.cellIndex].w;
+		}
+
+		/**
+		* Returns the height of the cell that is being used.
+		* @property height
+		* @type number
+		* @public
+		*/
+		public get height(): number {
+			return this.atlas.cells[this.cellIndex].h;
+		}
+
+		/**
+		* Is a reference to the element that the icon CSS is being applyed to.
+		* @property icon
+		* @type HTMLElement
+		* @public
+		*/
+		public icon: HTMLElement;
+
+		/**
+		* Removes the CSS from the Icon.
+		* This can happen when setting/removing a template and is public to allow for overriding from subclasses.
+		* @method _removeCSS
+		* @protected
+		*/
+		public _removeCSS() {
+			this.icon.style.width = '';
+			this.icon.style.height = '';
+			this.icon.style.backgroundImage = '';
+			this.icon.style.backgroundRepeat = '';
+		}
+
+		/**
+		* Applys the css to the HTMLElement that is to be affected. 
+		* @method _applyCSS
+		* @protected
+		*/
+		public _applyCSS() {
+			this.icon.style.width = this.width + "px";
+			this.icon.style.height = this.height + "px";
+			this.icon.style.backgroundPositionX = -this.atlas.cells[this.cellIndex].x + "px";
+			this.icon.style.backgroundPositionY = -this.atlas.cells[this.cellIndex].y + "px";
+			this.icon.style.backgroundRepeat = 'no-repeat';
+
+			if ( Kiwi.Utils.Common.isUndefined( this.atlas.image.src) == false) {
+				this.icon.style.backgroundImage = 'url("' + this.atlas.image.src + '")';
+			} else {
+				this.icon.style.backgroundImage = 'url("' + this.atlas.image.toDataURL("image/png") + '")';
+			}
+
+		}
+
+		/**
+		* This method is used to remove existing DOM elements and place them inside a HUDWidget's container element.
+		* Useful so that when making HUD Widgets the developer can style HUDWidgets without having to create/write to much javascript.
+		* Currently not supported.
+		*
+		* @method setTemplate
+		* @param main {string} main - ID of an HTMLElement. This element should contain all of the elements you would like to place inside the HUDWidget. 
+		* @param icon {string} icon - ID of an HTMLElement that resides inside of the main param. This is the element that the HUDWidget can use to populate with information. E.g. Your score, health remaining, the icon, e.t.c.
+		* @public
+		*/
+		public setTemplate(main: string, icon?: string) {  
+			if (this._device == Kiwi.TARGET_BROWSER) {
+				this._removeCSS();
+
+				super.setTemplate(main, icon);
+				
+				if (this.tempElement !== undefined) {
+					this.icon = this.tempElement;
+				}
+
+				this._applyCSS();
+			}
+		}
+
+		/**
+		* Used to remove any the template HTML from this HUDWidget.
+		* 
+		* @method removeTemplate
+		* @public
+		*/
+		public removeTemplate() {
+			if (this._device == Kiwi.TARGET_BROWSER) {
+				super.removeTemplate();
+
+				this._removeCSS();
+				this.icon = this.container;
+				this._applyCSS();
+			}
+		}
+
+	}
+
+}
diff --git a/src/hud/widgets/IconBar.ts b/src/hud/widgets/IconBar.ts
index c9d229f..f36fb9b 100644
--- a/src/hud/widgets/IconBar.ts
+++ b/src/hud/widgets/IconBar.ts
@@ -6,206 +6,206 @@
 
 module Kiwi.HUD.Widget {
 
-    /**
-    * The IconBar used to display a series of icons which represent a number of 'something' the user may have. 
-    * Example: If you had a shooter style game you might want to display the amount of 'ammo' left in the gun using a series of bullet icons. You could then use this IconBar to display that series.
-    * The amount is based of a counter components current value, so you can set a maximum and minimum number of images to be displayed.
-    *
-    * @class IconBar
-    * @extends Kiwi.HUD.HUDWidget
-    * @namespace Kiwi.HUD.Widget
-    * @constructor
-    * @param game {Kiwi.Game} The game that this icon bar belongs to.
-    * @param atlas {Kiwi.Textures.TextureAtlas} The texture atlas that the icons will have.
-    * @param current {number} The current amount of icons in the bar.
-    * @param max {number} The maximum number of icons.
-    * @param x {number} The x coordinates of the first icon.
-    * @param y {number} The y coordinates of the last icon.
-    * @return {Kiwi.HUD.Widget.IconBar}
-    */
-    export class IconBar extends Kiwi.HUD.HUDWidget {
-
-        constructor(game:Kiwi.Game, atlas: Kiwi.Textures.TextureAtlas, current: number, max: number, x: number, y: number) {
-            
-            super(game, 'IconBar', x, y);
-
-            this.class = 'kiwi-iconbar-widget kiwi-widget';
-            this.atlas = atlas;
-            this.width = this.atlas.cells[0].w;
-            this.height = this.atlas.cells[0].h;
-            this._horizontal = true;
-            
-            this.counter = this.components.add(new Kiwi.HUD.HUDComponents.Counter(this, current, max, 0));
-            this.counter.updated.add(this._amountChanged, this);
-
-            this._icons = [];
-            this._amountChanged();
-        }
-
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} "IconBarWidget"
-        * @public
-        */
-        public objType():string {
-            return 'IconBarWidget';
-        }
-
-        /**
-        * The amount of spacing you want between each icon in the bar. Defaults to 0.
-        * @property iconGap
-        * @type number
-        * @default 0
-        * @public
-        */
-        public iconGap: number = 0;
-
-        /**
-        * The texture atlas that each Icon inside the IconBar will use.
-        * @property atlas
-        * @type Kiwi.Textures.TextureAtlas
-        * @public
-        */
-        public atlas: Kiwi.Textures.TextureAtlas;
-
-        /**
-        * The width of a single Icon in the bar. This is based on the width of the first cell in the atlas.
-        * @property width
-        * @type number
-        * @private
-        */
-        private width: number;
-
-        /**
-        * The height of a single Icon in the bar. This is based on the height of the first cell in the atlas.
-        * @property height
-        * @type number
-        * @private
-        */
-        private height: number;
-
-        /**
-        * Knowledge of whether the icons should be horizontal or vertical
-        * @property _horizontal
-        * @type boolean
-        * @default true
-        * @private
-        */
-        private _horizontal: boolean;
-
-        /**
-        * Holds the counter component.
-        * @property counter
-        * @type Kiwi.HUD.HUDComponents.Counter
-        * @public
-        */
-        public counter: Kiwi.HUD.HUDComponents.Counter;
-
-        /**
-        * An array of all of the icons on the screen. Each item in the array is of the type Kiwi.HUD.Widget.Icon
-        * @property icons
-        * @type Array
-        * @private
-        */
-        private _icons: Kiwi.HUD.Widget.Icon[];
-
-        /**
-        * Gets called when the range has updated and then it updates the size of the bar.
-        * @method _changeSize
-        * @private
-        */
-        private _amountChanged() {
-
-            //do we need to do something to the icons?!?
-            if (this.counter.max !== this._icons.length) {
-                if ((this.counter.max) > this._icons.length) {
-                    //add more
-                    var amount = (this.counter.max) - this._icons.length;
-                    for (var i = 0; i < amount; i++) {
-                        this._addIcon();
-                    }
-                } else {
-                    //remove some
-                    for (var i = this.counter.max; i < this._icons.length; i++) {
-                        this._removeIcon(this._icons[i]);
-                        this._icons[i].destroy();
-                        this._icons.splice(i, 1);
-                        i--;
-                    }
-                }
-            }
-
-            //display them all!
-            for (var i = 0; i < this._icons.length; i++) {
-                if (i > (this.counter.current - 1)) {
-                    this._icons[i].style.display = 'none';
-                } else {
-                    this._icons[i].style.display = 'block';
-                }
-            }
-        }
-
-        /**
-        * Creates a new Icon and adds it to this IconBar.
-        * @method _addIcon
-        * @private
-        */
-        private _addIcon() {
-            if (this.horizontal) {
-                var i: Kiwi.HUD.Widget.Icon = new Kiwi.HUD.Widget.Icon(this.game, this.atlas, this.x + ((this.width + this.iconGap) * (this._icons.length - 1)), this.y);
-            } else {
-                var i: Kiwi.HUD.Widget.Icon = new Kiwi.HUD.Widget.Icon(this.game, this.atlas, this.x, ((this.height + this.iconGap) * (this._icons.length - 1)) + this.y);
-            }
-
-            this._icons.push(i);
-            if (this._device == Kiwi.TARGET_BROWSER) {
-                this.container.appendChild(i.container);
-            }
-        }
-
-        /**
-        * Removes a Icon from the container.
-        * @method _removeIcon
-        * @param icon {Kiwi.HUD.Widget.Icon} The icon that you want to remove.
-        * @private
-        */
-        private _removeIcon(icon:Kiwi.HUD.Widget.Icon) {
-            if (this._device == Kiwi.TARGET_BROWSER) {
-                this.container.removeChild(icon.container);
-            }
-        }
-        
-        /**
-        * Used to set the bar to be horizontal or vertical by passing a boolean.
-        * @property horizontal
-        * @type boolean
-        * @default true
-        * @public
-        */
-        public get horizontal(): boolean {
-            return this._horizontal;
-        }
-        public set horizontal(val: boolean) {
-            this._horizontal = val;
-            this._amountChanged();
-        }
-
-        /**
-        * Used to set the bar to be horizontal or vertical by passing a boolean.
-        * @property vertical
-        * @type boolean
-        * @default false
-        * @public
-        */
-        public get vertical(): boolean {
-            return !this._horizontal;
-        }
-        public set vertical(val: boolean) {
-            this._horizontal = !val;
-            this._amountChanged();
-        }
-
-    }
-
-}
\ No newline at end of file
+	/**
+	* The IconBar used to display a series of icons which represent a number of 'something' the user may have. 
+	* Example: If you had a shooter style game you might want to display the amount of 'ammo' left in the gun using a series of bullet icons. You could then use this IconBar to display that series.
+	* The amount is based of a counter components current value, so you can set a maximum and minimum number of images to be displayed.
+	*
+	* @class IconBar
+	* @extends Kiwi.HUD.HUDWidget
+	* @namespace Kiwi.HUD.Widget
+	* @constructor
+	* @param game {Kiwi.Game} The game that this icon bar belongs to.
+	* @param atlas {Kiwi.Textures.TextureAtlas} The texture atlas that the icons will have.
+	* @param current {number} The current amount of icons in the bar.
+	* @param max {number} The maximum number of icons.
+	* @param x {number} The x coordinates of the first icon.
+	* @param y {number} The y coordinates of the last icon.
+	* @return {Kiwi.HUD.Widget.IconBar}
+	*/
+	export class IconBar extends Kiwi.HUD.HUDWidget {
+
+		constructor(game:Kiwi.Game, atlas: Kiwi.Textures.TextureAtlas, current: number, max: number, x: number, y: number) {
+			
+			super(game, 'IconBar', x, y);
+
+			this.class = 'kiwi-iconbar-widget kiwi-widget';
+			this.atlas = atlas;
+			this.width = this.atlas.cells[0].w;
+			this.height = this.atlas.cells[0].h;
+			this._horizontal = true;
+			
+			this.counter = this.components.add(new Kiwi.HUD.HUDComponents.Counter(this, current, max, 0));
+			this.counter.updated.add(this._amountChanged, this);
+
+			this._icons = [];
+			this._amountChanged();
+		}
+
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} "IconBarWidget"
+		* @public
+		*/
+		public objType():string {
+			return 'IconBarWidget';
+		}
+
+		/**
+		* The amount of spacing you want between each icon in the bar. Defaults to 0.
+		* @property iconGap
+		* @type number
+		* @default 0
+		* @public
+		*/
+		public iconGap: number = 0;
+
+		/**
+		* The texture atlas that each Icon inside the IconBar will use.
+		* @property atlas
+		* @type Kiwi.Textures.TextureAtlas
+		* @public
+		*/
+		public atlas: Kiwi.Textures.TextureAtlas;
+
+		/**
+		* The width of a single Icon in the bar. This is based on the width of the first cell in the atlas.
+		* @property width
+		* @type number
+		* @private
+		*/
+		private width: number;
+
+		/**
+		* The height of a single Icon in the bar. This is based on the height of the first cell in the atlas.
+		* @property height
+		* @type number
+		* @private
+		*/
+		private height: number;
+
+		/**
+		* Knowledge of whether the icons should be horizontal or vertical
+		* @property _horizontal
+		* @type boolean
+		* @default true
+		* @private
+		*/
+		private _horizontal: boolean;
+
+		/**
+		* Holds the counter component.
+		* @property counter
+		* @type Kiwi.HUD.HUDComponents.Counter
+		* @public
+		*/
+		public counter: Kiwi.HUD.HUDComponents.Counter;
+
+		/**
+		* An array of all of the icons on the screen. Each item in the array is of the type Kiwi.HUD.Widget.Icon
+		* @property icons
+		* @type Array
+		* @private
+		*/
+		private _icons: Kiwi.HUD.Widget.Icon[];
+
+		/**
+		* Gets called when the range has updated and then it updates the size of the bar.
+		* @method _changeSize
+		* @private
+		*/
+		private _amountChanged() {
+
+			//do we need to do something to the icons?!?
+			if (this.counter.max !== this._icons.length) {
+				if ((this.counter.max) > this._icons.length) {
+					//add more
+					var amount = (this.counter.max) - this._icons.length;
+					for (var i = 0; i < amount; i++) {
+						this._addIcon();
+					}
+				} else {
+					//remove some
+					for (var i = this.counter.max; i < this._icons.length; i++) {
+						this._removeIcon(this._icons[i]);
+						this._icons[i].destroy();
+						this._icons.splice(i, 1);
+						i--;
+					}
+				}
+			}
+
+			//display them all!
+			for (var i = 0; i < this._icons.length; i++) {
+				if (i > (this.counter.current - 1)) {
+					this._icons[i].style.display = 'none';
+				} else {
+					this._icons[i].style.display = 'block';
+				}
+			}
+		}
+
+		/**
+		* Creates a new Icon and adds it to this IconBar.
+		* @method _addIcon
+		* @private
+		*/
+		private _addIcon() {
+			if (this.horizontal) {
+				var i: Kiwi.HUD.Widget.Icon = new Kiwi.HUD.Widget.Icon(this.game, this.atlas, this.x + ((this.width + this.iconGap) * (this._icons.length - 1)), this.y);
+			} else {
+				var i: Kiwi.HUD.Widget.Icon = new Kiwi.HUD.Widget.Icon(this.game, this.atlas, this.x, ((this.height + this.iconGap) * (this._icons.length - 1)) + this.y);
+			}
+
+			this._icons.push(i);
+			if (this._device == Kiwi.TARGET_BROWSER) {
+				this.container.appendChild(i.container);
+			}
+		}
+
+		/**
+		* Removes a Icon from the container.
+		* @method _removeIcon
+		* @param icon {Kiwi.HUD.Widget.Icon} The icon that you want to remove.
+		* @private
+		*/
+		private _removeIcon(icon:Kiwi.HUD.Widget.Icon) {
+			if (this._device == Kiwi.TARGET_BROWSER) {
+				this.container.removeChild(icon.container);
+			}
+		}
+
+		/**
+		* Used to set the bar to be horizontal or vertical by passing a boolean.
+		* @property horizontal
+		* @type boolean
+		* @default true
+		* @public
+		*/
+		public get horizontal(): boolean {
+			return this._horizontal;
+		}
+		public set horizontal(val: boolean) {
+			this._horizontal = val;
+			this._amountChanged();
+		}
+
+		/**
+		* Used to set the bar to be horizontal or vertical by passing a boolean.
+		* @property vertical
+		* @type boolean
+		* @default false
+		* @public
+		*/
+		public get vertical(): boolean {
+			return !this._horizontal;
+		}
+		public set vertical(val: boolean) {
+			this._horizontal = !val;
+			this._amountChanged();
+		}
+
+	}
+
+}
diff --git a/src/hud/widgets/Menu.ts b/src/hud/widgets/Menu.ts
index 75bb470..2776fb2 100644
--- a/src/hud/widgets/Menu.ts
+++ b/src/hud/widgets/Menu.ts
@@ -4,187 +4,187 @@
 */
 
 module Kiwi.HUD.Widget {
-    
-    /**
-    * A Widget for that is used for the management/displaying of a Menu. 
-    * This class is primarily used as a manager of MenuItems, so on this class you can create/add MenuItems
-    * and styles that you want applyed to all MenuItems. 
-    * 
-    * @class Menu
-    * @extends Kiwi.HUD.HUDWidget
-    * @namespace Kiwi.HUD.Widget
-    * @constructor
-    * @param game {Kiwi.Game} The game that this Menu belongs to.
-    * @param x {number} Its position on the x-axis.
-    * @param y {number} Its position on the y -axis.
-    * @return {Kiwi.HUD.Widget.Menu}
-    */
-    export class Menu extends Kiwi.HUD.HUDWidget {
-        
-        constructor(game: Kiwi.Game, x: number, y: number) {
-            super(game, 'menu', x, y);
-
-            this._menuItems = [];
-            this._styles = [];
-            this.class = 'kiwi-menu-widget kiwi-widget';
-        }
-        
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {string} "MenuWidget"
-        * @public
-        */
-        public objType():string {
-            return 'MenuWidget';
-        }
-        
-        /**
-        * Contains a list of all of the menu items that are currently on this menu. Each item in the list is of the type Kiwi.HUD.Widget.MenuItem.
-        * @property _menuItems
-        * @type Array.
-        * @private
-        */
-        private _menuItems: Kiwi.HUD.Widget.MenuItem[];
-
-        /**
-        * Sets the style of all of the icons that will be on this menu.
-        * @method setStyle
-        * @param index {string}
-        * @param value {string}
-        * @public
-        */
-        public setIconStyle(index: string, value: string) {
-            this._styles.push(({ 'index': index, 'value': value }));
-
-            for (var i = 0; i < this._menuItems.length; i++) {
-                this._menuItems[i].style[index] = value;
-            }
-        }
-
-        /**
-        * An array containing all of the styles that are/will be applyed to each MenuIcon.
-        * @property _styles
-        * @type Array
-        * @private
-        */
-        private _styles: any[];
-
-        /**
-        * Returns a list that contains all of the menu items (buttons) that are currently on this menu.
-        * Each item in the list is of the type Kiwi.HUD.Widget.MenuItem.
-        * Note: The array itself is READ ONLY but you can modify the objects contained inside of it.
-        * @property menuItems
-        * @type Array
-        * @public
-        */
-        public get menuItems(): Kiwi.HUD.Widget.MenuItem[] {
-            return this._menuItems;
-        }
-        
-        /**
-        * Creates a new menu item and add's it to this menu.
-        * @method createMenuItem
-        * @param text {string} The text that you would like the menu item to have.
-        * @param x {number} The x position of the menu item you are wanting to add.
-        * @param y {number} The y position of the menu item you are wanting to add.
-        * @return {Kiwi.HUD.Widget.MenuItem} The newly created MenuItem.
-        * @public
-        */
-        public createMenuItem(text:string,x:number,y:number): Kiwi.HUD.Widget.MenuItem {
-            return this.addMenuItem(new Kiwi.HUD.Widget.MenuItem(this.game, text, x, y));
-        }
-
-        /**
-        * Adds a MenuItem to this menu.
-        * @method addMenuItem
-        * @param item {Kiwi.HUD.Widget.MenuItem} The MenuItem that you would like to add to this menu.
-        * @return {Kiwi.HUD.Widget.MenuItem}
-        * @public 
-        */
-        public addMenuItem(item: Kiwi.HUD.Widget.MenuItem): Kiwi.HUD.Widget.MenuItem {
-            this._menuItems.push(item);
-            item.menu = this;
-
-            for (var i = 0; i < this._styles.length; i++) {
-                item.style[this._styles[i].index] = this._styles[i].value;
-            }
-
-            if (this._device == Kiwi.TARGET_BROWSER) {
-                this.container.appendChild(item.container);
-            }
-
-            return item;
-        }
-
-        /**
-        * Adds multiple MenuItems to this Menu. Each item in the array you would like to add needs to be of the type Kiwi.HUD.Widget.MenuItem.
-        * @method addMenuItems
-        * @param items {Array} The array containing all of the menu items you want to add.
-        * @public 
-        */
-        public addMenuItems(items: Kiwi.HUD.Widget.MenuItem[]) {
-            for (var i = 0; i < items.length; i++) {
-                this.addMenuItem(items[i]);
-            }
-        }
-
-        /**
-        * Returns a MenuItem based on its corresponding numeric position that you pass in the array. 
-        * @method getMenuItem
-        * @param val {Number} 
-        * @return {Kiwi.HUD.Widget.MenuItem}
-        * @public
-        */
-        public getMenuItem(val: number):Kiwi.HUD.Widget.MenuItem {
-            return this._menuItems[val];
-        }
-
-        /**
-        * Currently not supported or working.
-        * @method setTemplate 
-        * @param main {string}
-        * @param [sub] {string}
-        * @public
-        */
-        public setTemplate(main: string, sub?: string) {
-            if (false) {
-                var mainElement = document.getElementById(main)
-                if (mainElement === undefined) {
-                    return;
-                }
-
-                var subElements = mainElement.getElementsByTagName(sub);
-                if (subElements === undefined) {
-                    return;
-                }
-
-                super.setTemplate(main);
-                //do something with each item
-            }
-        }
-
-        /**
-        * Currently not supported or working.
-        * @method removeTemplate
-        * @public 
-        */
-        public removeTemplate() {
-
-        }
-        
-        /**
-        * The update loop.
-        * @method update
-        * @public 
-        */
-        public update() {
-            for (var i = 0; i < this._menuItems.length; i++) {
-                this._menuItems[i].update();
-            }
-            super.update();
-        }
-
-    }
-
-}
\ No newline at end of file
+
+	/**
+	* A Widget for that is used for the management/displaying of a Menu. 
+	* This class is primarily used as a manager of MenuItems, so on this class you can create/add MenuItems
+	* and styles that you want applyed to all MenuItems. 
+	* 
+	* @class Menu
+	* @extends Kiwi.HUD.HUDWidget
+	* @namespace Kiwi.HUD.Widget
+	* @constructor
+	* @param game {Kiwi.Game} The game that this Menu belongs to.
+	* @param x {number} Its position on the x-axis.
+	* @param y {number} Its position on the y -axis.
+	* @return {Kiwi.HUD.Widget.Menu}
+	*/
+	export class Menu extends Kiwi.HUD.HUDWidget {
+
+		constructor(game: Kiwi.Game, x: number, y: number) {
+			super(game, 'menu', x, y);
+
+			this._menuItems = [];
+			this._styles = [];
+			this.class = 'kiwi-menu-widget kiwi-widget';
+		}
+
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {string} "MenuWidget"
+		* @public
+		*/
+		public objType():string {
+			return 'MenuWidget';
+		}
+
+		/**
+		* Contains a list of all of the menu items that are currently on this menu. Each item in the list is of the type Kiwi.HUD.Widget.MenuItem.
+		* @property _menuItems
+		* @type Array.
+		* @private
+		*/
+		private _menuItems: Kiwi.HUD.Widget.MenuItem[];
+
+		/**
+		* Sets the style of all of the icons that will be on this menu.
+		* @method setStyle
+		* @param index {string}
+		* @param value {string}
+		* @public
+		*/
+		public setIconStyle(index: string, value: string) {
+			this._styles.push(({ 'index': index, 'value': value }));
+
+			for (var i = 0; i < this._menuItems.length; i++) {
+				this._menuItems[i].style[index] = value;
+			}
+		}
+
+		/**
+		* An array containing all of the styles that are/will be applyed to each MenuIcon.
+		* @property _styles
+		* @type Array
+		* @private
+		*/
+		private _styles: any[];
+
+		/**
+		* Returns a list that contains all of the menu items (buttons) that are currently on this menu.
+		* Each item in the list is of the type Kiwi.HUD.Widget.MenuItem.
+		* Note: The array itself is READ ONLY but you can modify the objects contained inside of it.
+		* @property menuItems
+		* @type Array
+		* @public
+		*/
+		public get menuItems(): Kiwi.HUD.Widget.MenuItem[] {
+			return this._menuItems;
+		}
+
+		/**
+		* Creates a new menu item and add's it to this menu.
+		* @method createMenuItem
+		* @param text {string} The text that you would like the menu item to have.
+		* @param x {number} The x position of the menu item you are wanting to add.
+		* @param y {number} The y position of the menu item you are wanting to add.
+		* @return {Kiwi.HUD.Widget.MenuItem} The newly created MenuItem.
+		* @public
+		*/
+		public createMenuItem(text:string,x:number,y:number): Kiwi.HUD.Widget.MenuItem {
+			return this.addMenuItem(new Kiwi.HUD.Widget.MenuItem(this.game, text, x, y));
+		}
+
+		/**
+		* Adds a MenuItem to this menu.
+		* @method addMenuItem
+		* @param item {Kiwi.HUD.Widget.MenuItem} The MenuItem that you would like to add to this menu.
+		* @return {Kiwi.HUD.Widget.MenuItem}
+		* @public 
+		*/
+		public addMenuItem(item: Kiwi.HUD.Widget.MenuItem): Kiwi.HUD.Widget.MenuItem {
+			this._menuItems.push(item);
+			item.menu = this;
+
+			for (var i = 0; i < this._styles.length; i++) {
+				item.style[this._styles[i].index] = this._styles[i].value;
+			}
+
+			if (this._device == Kiwi.TARGET_BROWSER) {
+				this.container.appendChild(item.container);
+			}
+
+			return item;
+		}
+
+		/**
+		* Adds multiple MenuItems to this Menu. Each item in the array you would like to add needs to be of the type Kiwi.HUD.Widget.MenuItem.
+		* @method addMenuItems
+		* @param items {Array} The array containing all of the menu items you want to add.
+		* @public 
+		*/
+		public addMenuItems(items: Kiwi.HUD.Widget.MenuItem[]) {
+			for (var i = 0; i < items.length; i++) {
+				this.addMenuItem(items[i]);
+			}
+		}
+
+		/**
+		* Returns a MenuItem based on its corresponding numeric position that you pass in the array. 
+		* @method getMenuItem
+		* @param val {Number} 
+		* @return {Kiwi.HUD.Widget.MenuItem}
+		* @public
+		*/
+		public getMenuItem(val: number):Kiwi.HUD.Widget.MenuItem {
+			return this._menuItems[val];
+		}
+
+		/**
+		* Currently not supported or working.
+		* @method setTemplate 
+		* @param main {string}
+		* @param [sub] {string}
+		* @public
+		*/
+		public setTemplate(main: string, sub?: string) {
+			if (false) {
+				var mainElement = document.getElementById(main)
+				if (mainElement === undefined) {
+					return;
+				}
+
+				var subElements = mainElement.getElementsByTagName(sub);
+				if (subElements === undefined) {
+					return;
+				}
+
+				super.setTemplate(main);
+				//do something with each item
+			}
+		}
+
+		/**
+		* Currently not supported or working.
+		* @method removeTemplate
+		* @public 
+		*/
+		public removeTemplate() {
+
+		}
+
+		/**
+		* The update loop.
+		* @method update
+		* @public 
+		*/
+		public update() {
+			for (var i = 0; i < this._menuItems.length; i++) {
+				this._menuItems[i].update();
+			}
+			super.update();
+		}
+
+	}
+
+}
diff --git a/src/hud/widgets/MenuItem.ts b/src/hud/widgets/MenuItem.ts
index a597904..23ff9e9 100644
--- a/src/hud/widgets/MenuItem.ts
+++ b/src/hud/widgets/MenuItem.ts
@@ -4,50 +4,50 @@
 */
 
 module Kiwi.HUD.Widget {
-    
-    /**
-    * A MenuItem extends the Button Widget and is typically contained inside of a Menu Widget. 
-    * Since a MenuItem extends the Button Widget you can access the Input Component that it has to listen to mouse events.
-    *
-    * @class MenuItem
-    * @extends Kiwi.HUD.Widget.Button
-    * @namespace Kiwi.HUD.Widget
-    * @contructor
-    * @param game {Kiwi.Game} The game that this MenuItem belongs to.
-    * @param text {string} The text that is to be inside the menuitem.
-    * @param x {number} The position of this menu item on the x-axis.
-    * @param y {number} The position of this menu item on the y-axis.
-    * @return {Kiwi.HUD.Widget.MenuItem}
-    */
-    export class MenuItem extends Kiwi.HUD.Widget.Button {
-
-        constructor(game:Kiwi.Game, text:string, x: number, y: number) {
-            
-            super(game, text, x, y);
-
-            this.name = 'menuItem';
-            this.class = 'kiwi-menuitem-widget kiwi-widget';
-
-        }
-
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {string} "MenuItem"
-        * @public
-        */
-        public objType():string {
-            return 'MenuItem';
-        }
-
-        /**
-        * The Menu that this belongs to.
-        * @property menu
-        * @type Kiwi.HUD.Widget.Menu
-        * @public
-        */
-        public menu: Kiwi.HUD.Widget.Menu;
-
-    }
-
-}
\ No newline at end of file
+
+	/**
+	* A MenuItem extends the Button Widget and is typically contained inside of a Menu Widget. 
+	* Since a MenuItem extends the Button Widget you can access the Input Component that it has to listen to mouse events.
+	*
+	* @class MenuItem
+	* @extends Kiwi.HUD.Widget.Button
+	* @namespace Kiwi.HUD.Widget
+	* @contructor
+	* @param game {Kiwi.Game} The game that this MenuItem belongs to.
+	* @param text {string} The text that is to be inside the menuitem.
+	* @param x {number} The position of this menu item on the x-axis.
+	* @param y {number} The position of this menu item on the y-axis.
+	* @return {Kiwi.HUD.Widget.MenuItem}
+	*/
+	export class MenuItem extends Kiwi.HUD.Widget.Button {
+
+		constructor(game:Kiwi.Game, text:string, x: number, y: number) {
+			
+			super(game, text, x, y);
+
+			this.name = 'menuItem';
+			this.class = 'kiwi-menuitem-widget kiwi-widget';
+
+		}
+
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {string} "MenuItem"
+		* @public
+		*/
+		public objType():string {
+			return 'MenuItem';
+		}
+
+		/**
+		* The Menu that this belongs to.
+		* @property menu
+		* @type Kiwi.HUD.Widget.Menu
+		* @public
+		*/
+		public menu: Kiwi.HUD.Widget.Menu;
+
+	}
+
+}
diff --git a/src/hud/widgets/TextField.ts b/src/hud/widgets/TextField.ts
index e5aad2e..945884d 100644
--- a/src/hud/widgets/TextField.ts
+++ b/src/hud/widgets/TextField.ts
@@ -10,183 +10,183 @@
 
 module Kiwi.HUD.Widget {
 
-    /**
-    * A Widget that is used for the displaying of text on the HUD. 
-    * Foreach TextField you can add some prefix/suffix text, which is more useful on classes extending this one.
-    *
-    * @class TextField
-    * @extends Kiwi.HUD.HUDWidget
-    * @namespace Kiwi.HUD.Widget
-    * @constructor
-    * @param game {Kiwi.Game} The game that this textfield belongs to.
-    * @param text {string} The text on this textfield.
-    * @param x {number} The x coordinates
-    * @param y {number} The y coordinates
-    * @return {Kiwi.HUD.Widget.TextField} 
-    */
-    export class TextField extends Kiwi.HUD.HUDWidget {
-        
-        constructor(game:Kiwi.Game,text:string,x:number,y:number) {
-            super(game, "textField", x, y);
-
-            this.class = 'kiwi-textfield-widget kiwi-widget';
-
-            if (this._manager.supported) {
-                if (this._device === Kiwi.TARGET_BROWSER) {
-                    this._textField = this.container;
-                    this._textField.innerHTML = text;
-                }
-            }
-        }
-
-        /**
-        * Returns the type of object that this is.
-        * @method objType
-        * @return {String} 'TextFieldWidget'
-        * @public
-        */
-        public objType(): string {
-            return 'TextFieldWidget';
-        }
-
-        /**
-        * The text current being displayed inside this textfield.
-        * @property _text
-        * @type string
-        * @private
-        */
-        private _text: string;
-
-        /**
-        * The htmlelement that is being used as the textfield.
-        * Initially when created this is the same as the container HTMLDivElement.
-        * @property _textField
-        * @type HTMLElement
-        * @private
-        */
-        private _textField: HTMLElement;
-        
-        /**
-        * This method is used to remove existing DOM elements and place them inside a HUDWidget's container element.
-        * Useful so that when making HUD Widgets the developer can style HUDWidgets without having to create/write to much javascript.
-        * 
-        * Currently doesn't have great support.
-        *
-        * @method setTemplate
-        * @param main {string} ID of an HTMLElement. This element should contain all of the elements you would like to place inside the HUDWidget. 
-        * @param icon {string} ID of an HTMLElement that resides inside of the main param. This is the element that the HUDWidget can use to populate with information. E.g. Your score, health remaining, the icon, e.t.c.
-        * @public
-        */
-        public setTemplate(main: string, field?: string) {
-            if (this._device === Kiwi.TARGET_BROWSER) {
-                this._textField.innerText = '';
-                super.setTemplate(main, field);
-
-                if (this.tempElement !== undefined) {
-                    this._textField = this.tempElement;
-                }
-                this._textField.innerHTML = this._text;
-            }
-        }
-
-        /**
-        * Used to remove any the template HTML from this HUDWidget.
-        * Currently doesn't have great support.
-        *
-        * @method removeTemplate
-        * @public
-        */
-        public removeTemplate() {
-            if (this._device === Kiwi.TARGET_BROWSER) {
-                super.removeTemplate();
-
-                if (this._device === Kiwi.TARGET_BROWSER) {
-                    this._textField = this.container;
-                    this._textField.innerHTML = this._text;
-                }
-            }
-        }
-
-        /**
-        * The text that is currently being displayed inside the textfield.
-        * @property text
-        * @type string
-        * @public
-        */
-        public set text(val: string) {
-            if (this._manager.supported) {
-                if (this._device === Kiwi.TARGET_BROWSER) {
-
-                    if (this._prefix !== '') val = this._prefix + val;
-                    if (this._suffix !== '') val += this._suffix;
-
-                    this._text = val;
-                    this._textField.innerHTML = this._text;
-                }
-            }
-        }
-        public get text():string {
-            return this._text;
-        }
-        
-        /**
-        * A string that is to be added in-front of the score. Can contain HTMLElements.
-        * @property _prefix
-        * @type string
-        * @default ''
-        * @private
-        */
-        private _prefix: string = '';
-
-        /**
-        * A string that is to be added after the score. Can contain HTMLElements.
-        * @property _suffix
-        * @type string
-        * @default ''
-        * @private
-        */
-        private _suffix: string = '';
-
-        /**
-        * A string that is to be added after the score. Can contain HTMLElements.
-        * @property _suffix
-        * @type string
-        * @default ''
-        * @public
-        */
-        public set suffix(val: string) {
-            this._suffix = val;
-            this._updateText();
-        }
-        public get suffix(): string {
-            return this._suffix;
-        }
-
-        /**
-        * A string that is to be added in-front of the score. Can contain HTMLElements.
-        * @property _prefix
-        * @type string
-        * @default ''
-        * @public
-        */
-        public set prefix(val: string) {
-            this._prefix = val;
-            this._updateText();
-        }
-        public get prefix(): string {
-            return this._prefix;
-        }
-
-        /**
-        * This method is intended to be overriden by subclasses which functions update the text being displayed.
-        * @method _updateText
-        * @protected
-        */
-        public _updateText() {
-            //..your code here
-            this.text = this._text;
-        }
-
-    }
+	/**
+	* A Widget that is used for the displaying of text on the HUD. 
+	* Foreach TextField you can add some prefix/suffix text, which is more useful on classes extending this one.
+	*
+	* @class TextField
+	* @extends Kiwi.HUD.HUDWidget
+	* @namespace Kiwi.HUD.Widget
+	* @constructor
+	* @param game {Kiwi.Game} The game that this textfield belongs to.
+	* @param text {string} The text on this textfield.
+	* @param x {number} The x coordinates
+	* @param y {number} The y coordinates
+	* @return {Kiwi.HUD.Widget.TextField} 
+	*/
+	export class TextField extends Kiwi.HUD.HUDWidget {
+		
+		constructor(game:Kiwi.Game,text:string,x:number,y:number) {
+			super(game, "textField", x, y);
+
+			this.class = 'kiwi-textfield-widget kiwi-widget';
+
+			if (this._manager.supported) {
+				if (this._device === Kiwi.TARGET_BROWSER) {
+					this._textField = this.container;
+					this._textField.innerHTML = text;
+				}
+			}
+		}
+
+		/**
+		* Returns the type of object that this is.
+		* @method objType
+		* @return {String} 'TextFieldWidget'
+		* @public
+		*/
+		public objType(): string {
+			return 'TextFieldWidget';
+		}
+
+		/**
+		* The text current being displayed inside this textfield.
+		* @property _text
+		* @type string
+		* @private
+		*/
+		private _text: string;
+
+		/**
+		* The htmlelement that is being used as the textfield.
+		* Initially when created this is the same as the container HTMLDivElement.
+		* @property _textField
+		* @type HTMLElement
+		* @private
+		*/
+		private _textField: HTMLElement;
+		
+		/**
+		* This method is used to remove existing DOM elements and place them inside a HUDWidget's container element.
+		* Useful so that when making HUD Widgets the developer can style HUDWidgets without having to create/write to much javascript.
+		* 
+		* Currently doesn't have great support.
+		*
+		* @method setTemplate
+		* @param main {string} ID of an HTMLElement. This element should contain all of the elements you would like to place inside the HUDWidget. 
+		* @param icon {string} ID of an HTMLElement that resides inside of the main param. This is the element that the HUDWidget can use to populate with information. E.g. Your score, health remaining, the icon, e.t.c.
+		* @public
+		*/
+		public setTemplate(main: string, field?: string) {
+			if (this._device === Kiwi.TARGET_BROWSER) {
+				this._textField.innerText = '';
+				super.setTemplate(main, field);
+
+				if (this.tempElement !== undefined) {
+					this._textField = this.tempElement;
+				}
+				this._textField.innerHTML = this._text;
+			}
+		}
+
+		/**
+		* Used to remove any the template HTML from this HUDWidget.
+		* Currently doesn't have great support.
+		*
+		* @method removeTemplate
+		* @public
+		*/
+		public removeTemplate() {
+			if (this._device === Kiwi.TARGET_BROWSER) {
+				super.removeTemplate();
+
+				if (this._device === Kiwi.TARGET_BROWSER) {
+					this._textField = this.container;
+					this._textField.innerHTML = this._text;
+				}
+			}
+		}
+
+		/**
+		* The text that is currently being displayed inside the textfield.
+		* @property text
+		* @type string
+		* @public
+		*/
+		public set text(val: string) {
+			if (this._manager.supported) {
+				if (this._device === Kiwi.TARGET_BROWSER) {
+
+					if (this._prefix !== '') val = this._prefix + val;
+					if (this._suffix !== '') val += this._suffix;
+
+					this._text = val;
+					this._textField.innerHTML = this._text;
+				}
+			}
+		}
+		public get text():string {
+			return this._text;
+		}
+
+		/**
+		* A string that is to be added in-front of the score. Can contain HTMLElements.
+		* @property _prefix
+		* @type string
+		* @default ''
+		* @private
+		*/
+		private _prefix: string = '';
+
+		/**
+		* A string that is to be added after the score. Can contain HTMLElements.
+		* @property _suffix
+		* @type string
+		* @default ''
+		* @private
+		*/
+		private _suffix: string = '';
+
+		/**
+		* A string that is to be added after the score. Can contain HTMLElements.
+		* @property _suffix
+		* @type string
+		* @default ''
+		* @public
+		*/
+		public set suffix(val: string) {
+			this._suffix = val;
+			this._updateText();
+		}
+		public get suffix(): string {
+			return this._suffix;
+		}
+
+		/**
+		* A string that is to be added in-front of the score. Can contain HTMLElements.
+		* @property _prefix
+		* @type string
+		* @default ''
+		* @public
+		*/
+		public set prefix(val: string) {
+			this._prefix = val;
+			this._updateText();
+		}
+		public get prefix(): string {
+			return this._prefix;
+		}
+
+		/**
+		* This method is intended to be overriden by subclasses which functions update the text being displayed.
+		* @method _updateText
+		* @protected
+		*/
+		public _updateText() {
+			//..your code here
+			this.text = this._text;
+		}
+
+	}
 
 }
diff --git a/src/hud/widgets/Time.ts b/src/hud/widgets/Time.ts
index 4709f9c..5ef17a7 100644
--- a/src/hud/widgets/Time.ts
+++ b/src/hud/widgets/Time.ts
@@ -8,99 +8,99 @@
 * TO DO---- SIGNALS/CALLBACKS
 */
 module Kiwi.HUD.Widget {
-    
-    /**
-    * A subclass of TextField which manages the displaying of a Time/Timer by creating a new clock on the Time Manager.
-    * The time is managed by a Time Component which contains a format property that handles how the time should be formatted.
-    * 
-    * @class Time
-    * @extends Kiwi.HUD.Widget.TextField
-    * @namespace Kiwi.HUD.Widget
-    * @constructor
-    * @param game {Kiwi.Game} The game that this object belongs to.
-    * @param format {string} The format that you want the time to be displayed in. Leave it empty to display as normal.
-    * @param x {number} The position of this text on the field.
-    * @param y {number} The position of this text on the field.
-    * @return {Kiwi.HUD.Widget.Time}
-    */
-    export class Time extends Kiwi.HUD.Widget.TextField {
-        
-        constructor(game:Kiwi.Game,format:string,x:number,y:number) {
-            super(game, 'time', x, y);
-            this.name = 'time';
-            this.class = 'kiwi-time-widget kiwi-widget';
-            this.time = this.components.add(new Kiwi.HUD.HUDComponents.Time(this, format) );
-        }
 
-        /**
-        * Holds the time component which manages the counting/formating of the time.
-        *
-        * @property time
-        * @type Kiwi.HUD.HUDComponents.Time
-        * @public
-        */
-        public time: Kiwi.HUD.HUDComponents.Time;
+	/**
+	* A subclass of TextField which manages the displaying of a Time/Timer by creating a new clock on the Time Manager.
+	* The time is managed by a Time Component which contains a format property that handles how the time should be formatted.
+	* 
+	* @class Time
+	* @extends Kiwi.HUD.Widget.TextField
+	* @namespace Kiwi.HUD.Widget
+	* @constructor
+	* @param game {Kiwi.Game} The game that this object belongs to.
+	* @param format {string} The format that you want the time to be displayed in. Leave it empty to display as normal.
+	* @param x {number} The position of this text on the field.
+	* @param y {number} The position of this text on the field.
+	* @return {Kiwi.HUD.Widget.Time}
+	*/
+	export class Time extends Kiwi.HUD.Widget.TextField {
+		
+		constructor(game:Kiwi.Game,format:string,x:number,y:number) {
+			super(game, 'time', x, y);
+			this.name = 'time';
+			this.class = 'kiwi-time-widget kiwi-widget';
+			this.time = this.components.add(new Kiwi.HUD.HUDComponents.Time(this, format) );
+		}
 
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} 'TimeWidget'
-        * @public
-        */
-        public objType(): string {
-            return 'TimeWidget';
-        }
-        
-        /**
-        * Pauses the clock where is stands. Calls the pause method on the clock.
-        * @method pause
-        * @public
-        */
-        public pause() {
-            this.time.pause();
-        }
+		/**
+		* Holds the time component which manages the counting/formating of the time.
+		*
+		* @property time
+		* @type Kiwi.HUD.HUDComponents.Time
+		* @public
+		*/
+		public time: Kiwi.HUD.HUDComponents.Time;
 
-        /**
-        * Stops the clock and thus the time. Calls the stop method of the clock.
-        * @method stop
-        * @public
-        */
-        public stop() {
-            this.time.stop();
-        }
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} 'TimeWidget'
+		* @public
+		*/
+		public objType(): string {
+			return 'TimeWidget';
+		}
+		
+		/**
+		* Pauses the clock where is stands. Calls the pause method on the clock.
+		* @method pause
+		* @public
+		*/
+		public pause() {
+			this.time.pause();
+		}
 
-        /**
-        * Starts the clock and thus the time. 
-        * @method start
-        * @public
-        */
-        public start() {
-            this.time.start();
-        }
+		/**
+		* Stops the clock and thus the time. Calls the stop method of the clock.
+		* @method stop
+		* @public
+		*/
+		public stop() {
+			this.time.stop();
+		}
 
-        /**
-        * Resumes the clock and thus the time.
-        * @method resume
-        * @public
-        */
-        public resume() {
-            this.time.resume();
-        }
+		/**
+		* Starts the clock and thus the time. 
+		* @method start
+		* @public
+		*/
+		public start() {
+			this.time.start();
+		}
 
-        /**
-        * The update loop.
-        * @method update
-        * @public
-        */
-        public update() {
-            super.update();
+		/**
+		* Resumes the clock and thus the time.
+		* @method resume
+		* @public
+		*/
+		public resume() {
+			this.time.resume();
+		}
 
-            //update the time
-            if(this.time.isRunning) {
-                this.text = this.time.getTime();
-            }
-        }
+		/**
+		* The update loop.
+		* @method update
+		* @public
+		*/
+		public update() {
+			super.update();
 
-    }
+			//update the time
+			if(this.time.isRunning) {
+				this.text = this.time.getTime();
+			}
+		}
 
-}
\ No newline at end of file
+	}
+
+}
diff --git a/src/input/Finger.ts b/src/input/Finger.ts
index 60e1fbc..fafb130 100644
--- a/src/input/Finger.ts
+++ b/src/input/Finger.ts
@@ -3,80 +3,80 @@
 * @module Kiwi
 * @submodule Input
 * 
-*/ 
- 
+*/
+
 module Kiwi.Input {
 
-    /**
-    * Used with the Touch manager class, this object holds information about a
-    * single touch point/location (or, you know, a finger). By default a Finger
-    * has a diameter of 44 pixels (random average size of a finger) which can
-    * be used for collision/overlap detection. That value can be modified.
-    * Note: A Finger is only active whilst the user is 'pressing' down on stage. 
-    *
-    * @class Finger
-    * @extends Pointer
-    * @namespace Kiwi.Input
-    * @constructor
-    * @param game {Kiwi.Game} The game that this finger belongs to.
-    * @return Finger
-    */
-    export class Finger extends Pointer {
-        
-        constructor(game: Kiwi.Game) {
-            super(game);
-            this.circle.diameter = 44; //The diameter of your average finger!
-        }
+	/**
+	* Used with the Touch manager class, this object holds information about a
+	* single touch point/location (or, you know, a finger). By default a Finger
+	* has a diameter of 44 pixels (random average size of a finger) which can
+	* be used for collision/overlap detection. That value can be modified.
+	* Note: A Finger is only active whilst the user is 'pressing' down on stage. 
+	*
+	* @class Finger
+	* @extends Pointer
+	* @namespace Kiwi.Input
+	* @constructor
+	* @param game {Kiwi.Game} The game that this finger belongs to.
+	* @return Finger
+	*/
+	export class Finger extends Pointer {
+
+		constructor(game: Kiwi.Game) {
+			super(game);
+			this.circle.diameter = 44; //The diameter of your average finger!
+		}
 
-        /**
-        * The type of object this is. 
-        * @method objType
-        * @return {string} "Finger"
-        * @public
-        */
-        public objType(): string {
-            return "Finger";
-        }
+		/**
+		* The type of object this is. 
+		* @method objType
+		* @return {string} "Finger"
+		* @public
+		*/
+		public objType(): string {
+			return "Finger";
+		}
 
-        /** 
-        * @method start
-        * @param {Any} event
-        * @public
-        */
-        public start(event) {
-            this.active = true;
-            super.start(event);
-        }
+		/** 
+		* @method start
+		* @param {Any} event
+		* @public
+		*/
+		public start(event) {
+			this.active = true;
+			super.start(event);
+		}
 
-        /**
-        * @method stop
-        * @param event {Any}
-        * @public
-        */
-        public stop(event) {
-            this.active = false;
-            super.stop(event);
-        }
+		/**
+		* @method stop
+		* @param event {Any}
+		* @public
+		*/
+		public stop(event) {
+			this.active = false;
+			super.stop(event);
+		}
 
-        /** 
-        * @method leave
-        * @param event {Any} 
-        * @public
-        */
-        public leave(event) {
-            this.withinGame = false;
-            this.move(event);
-        }
+		/** 
+		* @method leave
+		* @param event {Any} 
+		* @public
+		*/
+		public leave(event) {
+			this.withinGame = false;
+			this.move(event);
+		}
 
-        /**
-        * @method reset
-        * @public
-        */
-        public reset() {
-            this.active = false;
-            super.reset();
-        }
+		/**
+		* @method reset
+		* @public
+		*/
+		public reset() {
+			this.active = false;
+			super.reset();
+		}
 
-    }
+	}
 
 }
diff --git a/src/input/InputManager.ts b/src/input/InputManager.ts
index 17cd98c..9a4cfec 100644
--- a/src/input/InputManager.ts
+++ b/src/input/InputManager.ts
@@ -4,264 +4,264 @@
 * @module Kiwi
 * @submodule Input
 * @main Input
-*/ 
+*/
 
 module Kiwi.Input {
 
-    /**
-    * Handles the initialization and management of the various ways a user can interact with the device/game,
-    * whether this is through a Keyboard and Mouse or by a Touch. Also contains some of the general callbacks that are 'global' between both Desktop and Mobile based devices.
-    * 
-    * @class InputManager
-    * @constructor
-    * @namespace Kiwi.Input
-    * @param game {Kiwi.Game} The game that this object belongs to.
-    * @return {Kiwi.Input.InputManager} This object.
-    *
-    */
-    export class InputManager {
-         
-        constructor (game: Kiwi.Game) {
-            this.game = game;
-
-        }
-
-        /**
-        * The type of object this is.
-        * @method objType
-        * @return {String} "InputManager"
-        * @public
-        */
-        public objType() {
-            return "InputManager";
-        }
-
-        /**
-        * A Signal that dispatches a event when any Pointer is pressed from the game.
-        * @property onDown
-        * @type Signal
-        * @public
-        */
-        public onDown: Kiwi.Signal;
-        
-        /**
-        * A Signal that dispatches a event when any Pointer is released from the game.
-        * @property onUp
-        * @type Signal
-        * @public
-        */
-        public onUp: Kiwi.Signal;
-
-        /** 
-        * The game that this manager belongs to.
-        * @property game
-        * @type Game
-        * @public
-        */
-        public game: Kiwi.Game;
-
-        /** 
-        * A reference to the mouse manager.
-        * @property mouse
-        * @type Mouse
-        * @public
-        */
-        public mouse:Kiwi.Input.Mouse;
-
-        /** 
-        * The keyboard manager
-        * @property keyboard
-        * @type Keyboard
-        * @public
-        */
-        public keyboard:Kiwi.Input.Keyboard;
-
-        /** 
-        * The touch manager.
-        * @property touch
-        * @type Touch
-        * @public
-        */
-        public touch:Kiwi.Input.Touch;
-        
-        /**
-        * An array containing all of the pointers that are active on the stage.
-        * @property _pointers
-        * @type Array
-        * @private
-        */
-        private _pointers: Kiwi.Input.Pointer[];
-
-
-        /**
-        * Returns all of the pointers that can be used on the Input Manager. This is READ only.
-        * @property pointers
-        * @type Array
-        * @public
-        */
-        public get pointers(): Kiwi.Input.Pointer[] {
-            return this._pointers;
-        }
-
-        /** 
-        * This method is executed when the DOM has loaded and the manager is ready to load.
-        * @method boot 
-        * @public
-        */
-        public boot() {
-            this._pointers = [];
-
-            this.mouse = new Kiwi.Input.Mouse(this.game);
-            this.mouse.boot();
-
-            this.keyboard = new Kiwi.Input.Keyboard(this.game);
-            this.keyboard.boot();
-
-            this.touch = new Kiwi.Input.Touch(this.game);
-            this.touch.boot();
-
-            this.mouse.onDown.add(this._onDownEvent, this);
-            this.mouse.onUp.add(this._onUpEvent, this);
-
-            this.touch.touchDown.add(this._onDownEvent, this);
-            this.touch.touchUp.add(this._onUpEvent, this);
-
-            /*
-            * Add the fingers/cursors to the list of 'pointers'
-            */
-            this._pointers = this.touch.fingers.slice();
-            this._pointers.push(this.mouse.cursor);
-
-
-            this.isDown = false;
-            this.position = new Kiwi.Geom.Point();
-             
-            this.onDown = new Kiwi.Signal();
-            this.onUp = new Kiwi.Signal();
-        }
-
-        /**
-        * A private method that gets dispatched when either the mouse or touch manager dispatches a down event
-        * @method _onDownEvent
-        * @param x {Number} The x coordinate of the pointer
-        * @param y {Number} The y coordinate of the pointer
-        * @param timeDown {Number} The time that the pointer has been down for.
-        * @param timeUp {Number} The Time that the pointer has been up form
-        * @param duration {Number} 
-        * @param pointer {Kiwi.Input.Pointer} The pointer that was used.
-        * @private
-        */
-        private _onDownEvent(x, y, timeDown, timeUp, duration, pointer) {
-            this.onDown.dispatch(x, y, timeDown, timeUp, duration, pointer);
-        }
-
-        
-        /**
-        * A private method that gets dispatched when either the mouse or touch manager dispatches a up event
-        * @method _onUpEvent
-        * @param x {Number} The x coordinate of the pointer
-        * @param y {Number} The y coordinate of the pointer
-        * @param timeDown {Number} The time that the pointer has been down for.
-        * @param timeUp {Number} The Time that the pointer has been up form
-        * @param duration {Number} 
-        * @param pointer {Kiwi.Input.Pointer} The pointer that was used.
-        * @private
-        */
-        private _onUpEvent(x, y, timeDown, timeUp, duration, pointer) {
-            this.onUp.dispatch(x, y, timeDown, timeUp, duration, pointer);
-        }
-
-        /*
-        * An alias for the onPress signal that goes straight to the onDown.
-        * @property onPressed
-        * @type Signal
-        * @public
-        */
-        public get onPressed(): Kiwi.Signal {
-            return this.onDown;
-        }
-        
-        /**
-        * An alias for the onRelease signal that goes straight to the onUp
-        * @property onReleased
-        * @type Signal
-        * @public
-        */
-        public get onReleased(): Kiwi.Signal {
-            return this.onUp;
-        }
-
-        /** 
-        * The update loop that gets executed every frame.
-        * @method update 
-        * @public
-        */
-        public update() {
-            this.mouse.update();
-            this.keyboard.update();
-            this.touch.update();
-
-            if (this.touch.touchEnabled) {
-                this.position.setTo(this.touch.x, this.touch.y);
-
-            } else {
-                this.position.setTo(this.mouse.x, this.mouse.y);
-
-            }
-
-            this.isDown = this.mouse.isDown || this.touch.isDown;
-
-        }
-
-        /** 
-        * Runs the reset method on the managers.
-        * @method reset
-        */
-        public reset() {
-            this.mouse.reset();
-            this.keyboard.reset();
-            this.touch.reset();
-
-        }
-        
-        /**
-        * The position of the last pointer that was/is active on the stage.
-        * @property position
-        * @type Kiwi.Geom.Point
-        * @public
-        */
-        public position: Kiwi.Geom.Point;
-
-        /**
-        * If an input (either touch or the mouse cursor) is currently down. Not an accurate representation, should use the individual managers.
-        * @property isDown
-        * @type boolean
-        * @public
-        */
-        public isDown: boolean;
+	/**
+	* Handles the initialization and management of the various ways a user can interact with the device/game,
+	* whether this is through a Keyboard and Mouse or by a Touch. Also contains some of the general callbacks that are 'global' between both Desktop and Mobile based devices.
+	* 
+	* @class InputManager
+	* @constructor
+	* @namespace Kiwi.Input
+	* @param game {Kiwi.Game} The game that this object belongs to.
+	* @return {Kiwi.Input.InputManager} This object.
+	*
+	*/
+	export class InputManager {
+
+		constructor (game: Kiwi.Game) {
+			this.game = game;
+
+		}
+
+		/**
+		* The type of object this is.
+		* @method objType
+		* @return {String} "InputManager"
+		* @public
+		*/
+		public objType() {
+			return "InputManager";
+		}
+
+		/**
+		* A Signal that dispatches a event when any Pointer is pressed from the game.
+		* @property onDown
+		* @type Signal
+		* @public
+		*/
+		public onDown: Kiwi.Signal;
+
+		/**
+		* A Signal that dispatches a event when any Pointer is released from the game.
+		* @property onUp
+		* @type Signal
+		* @public
+		*/
+		public onUp: Kiwi.Signal;
+
+		/** 
+		* The game that this manager belongs to.
+		* @property game
+		* @type Game
+		* @public
+		*/
+		public game: Kiwi.Game;
+
+		/** 
+		* A reference to the mouse manager.
+		* @property mouse
+		* @type Mouse
+		* @public
+		*/
+		public mouse:Kiwi.Input.Mouse;
+
+		/** 
+		* The keyboard manager
+		* @property keyboard
+		* @type Keyboard
+		* @public
+		*/
+		public keyboard:Kiwi.Input.Keyboard;
+
+		/** 
+		* The touch manager.
+		* @property touch
+		* @type Touch
+		* @public
+		*/
+		public touch:Kiwi.Input.Touch;
+
+		/**
+		* An array containing all of the pointers that are active on the stage.
+		* @property _pointers
+		* @type Array
+		* @private
+		*/
+		private _pointers: Kiwi.Input.Pointer[];
+
+
+		/**
+		* Returns all of the pointers that can be used on the Input Manager. This is READ only.
+		* @property pointers
+		* @type Array
+		* @public
+		*/
+		public get pointers(): Kiwi.Input.Pointer[] {
+			return this._pointers;
+		}
+
+		/** 
+		* This method is executed when the DOM has loaded and the manager is ready to load.
+		* @method boot 
+		* @public
+		*/
+		public boot() {
+			this._pointers = [];
+
+			this.mouse = new Kiwi.Input.Mouse(this.game);
+			this.mouse.boot();
+
+			this.keyboard = new Kiwi.Input.Keyboard(this.game);
+			this.keyboard.boot();
+
+			this.touch = new Kiwi.Input.Touch(this.game);
+			this.touch.boot();
+
+			this.mouse.onDown.add(this._onDownEvent, this);
+			this.mouse.onUp.add(this._onUpEvent, this);
+
+			this.touch.touchDown.add(this._onDownEvent, this);
+			this.touch.touchUp.add(this._onUpEvent, this);
+
+			/*
+			* Add the fingers/cursors to the list of 'pointers'
+			*/
+			this._pointers = this.touch.fingers.slice();
+			this._pointers.push(this.mouse.cursor);
+
+
+			this.isDown = false;
+			this.position = new Kiwi.Geom.Point();
+			 
+			this.onDown = new Kiwi.Signal();
+			this.onUp = new Kiwi.Signal();
+		}
+
+		/**
+		* A private method that gets dispatched when either the mouse or touch manager dispatches a down event
+		* @method _onDownEvent
+		* @param x {Number} The x coordinate of the pointer
+		* @param y {Number} The y coordinate of the pointer
+		* @param timeDown {Number} The time that the pointer has been down for.
+		* @param timeUp {Number} The Time that the pointer has been up form
+		* @param duration {Number} 
+		* @param pointer {Kiwi.Input.Pointer} The pointer that was used.
+		* @private
+		*/
+		private _onDownEvent(x, y, timeDown, timeUp, duration, pointer) {
+			this.onDown.dispatch(x, y, timeDown, timeUp, duration, pointer);
+		}
+
+
+		/**
+		* A private method that gets dispatched when either the mouse or touch manager dispatches a up event
+		* @method _onUpEvent
+		* @param x {Number} The x coordinate of the pointer
+		* @param y {Number} The y coordinate of the pointer
+		* @param timeDown {Number} The time that the pointer has been down for.
+		* @param timeUp {Number} The Time that the pointer has been up form
+		* @param duration {Number} 
+		* @param pointer {Kiwi.Input.Pointer} The pointer that was used.
+		* @private
+		*/
+		private _onUpEvent(x, y, timeDown, timeUp, duration, pointer) {
+			this.onUp.dispatch(x, y, timeDown, timeUp, duration, pointer);
+		}
+
+		/*
+		* An alias for the onPress signal that goes straight to the onDown.
+		* @property onPressed
+		* @type Signal
+		* @public
+		*/
+		public get onPressed(): Kiwi.Signal {
+			return this.onDown;
+		}
+
+		/**
+		* An alias for the onRelease signal that goes straight to the onUp
+		* @property onReleased
+		* @type Signal
+		* @public
+		*/
+		public get onReleased(): Kiwi.Signal {
+			return this.onUp;
+		}
+
+		/** 
+		* The update loop that gets executed every frame.
+		* @method update 
+		* @public
+		*/
+		public update() {
+			this.mouse.update();
+			this.keyboard.update();
+			this.touch.update();
+
+			if (this.touch.touchEnabled) {
+				this.position.setTo(this.touch.x, this.touch.y);
+
+			} else {
+				this.position.setTo(this.mouse.x, this.mouse.y);
+
+			}
+
+			this.isDown = this.mouse.isDown || this.touch.isDown;
+
+		}
+
+		/** 
+		* Runs the reset method on the managers.
+		* @method reset
+		*/
+		public reset() {
+			this.mouse.reset();
+			this.keyboard.reset();
+			this.touch.reset();
+
+		}
+
+		/**
+		* The position of the last pointer that was/is active on the stage.
+		* @property position
+		* @type Kiwi.Geom.Point
+		* @public
+		*/
+		public position: Kiwi.Geom.Point;
+
+		/**
+		* If an input (either touch or the mouse cursor) is currently down. Not an accurate representation, should use the individual managers.
+		* @property isDown
+		* @type boolean
+		* @public
+		*/
+		public isDown: boolean;
  
-        /**
-        * Populated x coordinate based on the most recent click/touch event
-        * @property x
-        * @type Number
-        * @public
-        */
-        public get x(): number {
-            return this.position.x;
-
-        }
-
-        /**
-        * Populated y coordinate based on the most recent click/touch event
-        * @property y
-        * @type Number
-        * @public
-        */
-        public get y(): number {
-            return this.position.y;
-
-        }
-
-    }
-
-}
\ No newline at end of file
+		/**
+		* Populated x coordinate based on the most recent click/touch event
+		* @property x
+		* @type Number
+		* @public
+		*/
+		public get x(): number {
+			return this.position.x;
+
+		}
+
+		/**
+		* Populated y coordinate based on the most recent click/touch event
+		* @property y
+		* @type Number
+		* @public
+		*/
+		public get y(): number {
+			return this.position.y;
+
+		}
+
+	}
+
+}
diff --git a/src/input/Key.ts b/src/input/Key.ts
index 26a0554..08c0a25 100644
--- a/src/input/Key.ts
+++ b/src/input/Key.ts
@@ -3,262 +3,262 @@
 * @module Kiwi
 * @submodule Input
 * 
-*/ 
+*/
 
 module Kiwi.Input {
-    
-    /**
-    * A compact object that holds the most important details about a Keyboard Event response.
-    *
-    * @class Key
-    * @constructor
-    * @namespace Kiwi.Input
-    * @param manager {Kiwi.Input.Keyboard} The keyboard manager that this key belongs to. 
-    * @param keycode {Number} The keycode that this key is. 
-    * @param [event] {KeyboardEvent} The keyboard event (if there was one) when this was created.
-    * @return {Kiwi.Input.Key} This object.
-    *
-    */
-    export class Key {
-
-        constructor (manager: Kiwi.Input.Keyboard, keycode: number, event?: KeyboardEvent) {
-
-            this._manager = manager;
-            this.game = this._manager.game;
-            this.keyCode = keycode;
-
-            if (event) {
-                this.update(event);
-            }
-
-        }
-
-        /**
-        * If the default action for this Key should be prevented or not. 
-        * For example. If your game use's the spacebar you would want its default action (which is to make the website scrolldown) prevented, 
-        * So you can set this to true.
-        * @property preventDefault
-        * @type Boolean
-        * @default false
-        * @public
-        */
-        public preventDefault: boolean = false;
-
-        /**
-        * The game that this key belongs to.
-        * @property game
-        * @type Kiwi.Game
-        * @public
-        */
-        public game: Kiwi.Game;
-
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} "Key"
-        * @public
-        */
-        public objType() {
-            return "Key";
-        }
-
-        /** 
-        * The keyboard manager that this key belongs to.
-        * @property _manager
-        * @type Kiwi.Input.Keyboard
-        * @private
-        */
-        private _manager: Kiwi.Input.Keyboard;
-
-        /** 
-        * The keycode that this key is.
-        * @property keyCode
-        * @type Number
-        * @public
-        */
-        public keyCode: number;
-
-        /** 
-        * Indicated whether or not the key is currently down.
-        * @property isDown
-        * @type boolean
-        * @default false
-        * @public
-        */
-        public isDown: boolean = false;
-
-        /** 
-        * Indicates whether or not the key is currently up.
-        * @property isUp
-        * @type boolean
-        * @default true
-        * @public 
-        */
-        public isUp: boolean = true;
-
-        /** 
-        * If the alt key was held at the time of the event happening.
-        * @property altKey
-        * @type boolean
-        * @default false
-        * @public 
-        */
-        public altKey: boolean = false;
-
-        /** 
-        * If the ctrl key was held at the time of the event happening.
-        * @property ctrlKey
-        * @type boolean
-        * @default false
-        * @public
-        */
-        public ctrlKey: boolean = false;
-
-        /** 
-        * If the shift key was held at the time of the event happening.
-        * @property shiftKey
-        * @type boolean
-        * @default false
-        * @public
-        */
-        public shiftKey: boolean = false;
-
-        /** 
-        * The time that the key was pressed initially.
-        * @property timeDown
-        * @type Number
-        * @default 0
-        * @public
-        */
-        public timeDown: number = 0;
-
-        /** 
-        * The duration (in milliseconds) that the key has been down for.
-        * This is property is READ ONLY.
-        * @property duration
-        * @type Number
-        * @default 0
-        * @public
-        */
-        public get duration(): number {
-
-            //If the key is down when the dev is getting the duration, then update the duration.
-            if (this.isDown) {
-                this.timeDown = this.game.time.now();
-            }
-
-            return (this.timeDown < this.timeUp) ? 0 : this.timeDown - this.timeUp;
-        }
-
-        /** 
-        * The time at which the key was released. 
-        * @property timeUp
-        * @type Number
-        * @default 0
-        * @public
-        */
-        public timeUp: number = 0;
-
-        /** 
-        * If this key is being 'held' down, this property will indicate the amount of times the 'onkeydown' event has fired.
-        * This is reset each time the key is pressed.
-        * @property repeats
-        * @type Number
-        * @default 0
-        * @public
-        */
-        public repeats: number = 0;
-
-        /** 
-        * The 'update' method fires when an event occur's. Updates the keys properties
-        * @method update
-        * @param event {KeyboardEvent} 
-        * @public
-        */
-        public update(event: KeyboardEvent) {
-
-            this.keyCode = event.keyCode;
-
-            //Are we needing to prevent the default action?
-            if (this.preventDefault) event.preventDefault();
-
-            if (event.type === 'keydown') {
-                this.altKey = event.altKey;
-                this.ctrlKey = event.ctrlKey;
-                this.shiftKey = event.shiftKey;
-
-                if (this.isDown === true) {
-                    // Key was already held down, this must be a repeat rate based event
-                    this.repeats++;
-                    this.timeDown = this.game.time.now();
-                } else {
-                    this.isDown = true;
-                    this.isUp = false;
-                    this.timeDown = this.game.time.now();
-                    this.repeats = 0;
-                }
-
-            } else if (event.type === 'keyup') {
-                this.isDown = false;
-                this.isUp = true;
-                this.timeUp = this.game.time.now();
-
-            }
-
-        }
-
-        /** 
-        * Returns a boolean indicating whether or not this key was just pressed.
-        * @method justPressed
-        * @param [duration] {Number} The duration at which determines if a key was just pressed. Defaults to the managers just pressed rate.
-        * @return {boolean} 
-        * @public
-        */
-        public justPressed(duration: number = this._manager.justPressedRate): boolean {
-
-            if (this.isDown === true && (this.timeDown + duration) > this.game.time.now()) {
-                return true;
-            } else {
-                return false;
-            }
-
-        }
-
-        /** 
-        * Returns a boolean indicating whether or not this key was just released.
-        * @method justReleased
-        * @param [duration] {Number} The duration at which determines if a key was just released. Defaults to the managers just pressed rate.
-        * @return {boolean} 
-        * @public
-        */
-        public justReleased(duration: number = this._manager.justReleasedRate): boolean {
-
-            if (this.isUp === true && (this.timeUp + duration) > this.game.time.now()) {
-                return true;
-            }
-            else
-            {
-                return false;
-            }
-
-        }
-
-        /**
-        * Resets all of the properties on the Key to their default values. 
-        * @method reset
-        * @public
-        */
-        public reset() {
-            this.isDown = false;
-            this.isUp = true;
-            this.timeUp = 0;
-            this.timeDown = 0;
-            this.repeats = 0;
-            this.altKey = false;
-            this.shiftKey = false;
-            this.ctrlKey = false;
-        }
-
-    }
-
-}
\ No newline at end of file
+	
+	/**
+	* A compact object that holds the most important details about a Keyboard Event response.
+	*
+	* @class Key
+	* @constructor
+	* @namespace Kiwi.Input
+	* @param manager {Kiwi.Input.Keyboard} The keyboard manager that this key belongs to. 
+	* @param keycode {Number} The keycode that this key is. 
+	* @param [event] {KeyboardEvent} The keyboard event (if there was one) when this was created.
+	* @return {Kiwi.Input.Key} This object.
+	*
+	*/
+	export class Key {
+
+		constructor (manager: Kiwi.Input.Keyboard, keycode: number, event?: KeyboardEvent) {
+
+			this._manager = manager;
+			this.game = this._manager.game;
+			this.keyCode = keycode;
+
+			if (event) {
+				this.update(event);
+			}
+
+		}
+
+		/**
+		* If the default action for this Key should be prevented or not. 
+		* For example. If your game use's the spacebar you would want its default action (which is to make the website scrolldown) prevented, 
+		* So you can set this to true.
+		* @property preventDefault
+		* @type Boolean
+		* @default false
+		* @public
+		*/
+		public preventDefault: boolean = false;
+
+		/**
+		* The game that this key belongs to.
+		* @property game
+		* @type Kiwi.Game
+		* @public
+		*/
+		public game: Kiwi.Game;
+
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} "Key"
+		* @public
+		*/
+		public objType() {
+			return "Key";
+		}
+
+		/** 
+		* The keyboard manager that this key belongs to.
+		* @property _manager
+		* @type Kiwi.Input.Keyboard
+		* @private
+		*/
+		private _manager: Kiwi.Input.Keyboard;
+
+		/** 
+		* The keycode that this key is.
+		* @property keyCode
+		* @type Number
+		* @public
+		*/
+		public keyCode: number;
+
+		/** 
+		* Indicated whether or not the key is currently down.
+		* @property isDown
+		* @type boolean
+		* @default false
+		* @public
+		*/
+		public isDown: boolean = false;
+
+		/** 
+		* Indicates whether or not the key is currently up.
+		* @property isUp
+		* @type boolean
+		* @default true
+		* @public 
+		*/
+		public isUp: boolean = true;
+
+		/** 
+		* If the alt key was held at the time of the event happening.
+		* @property altKey
+		* @type boolean
+		* @default false
+		* @public 
+		*/
+		public altKey: boolean = false;
+
+		/** 
+		* If the ctrl key was held at the time of the event happening.
+		* @property ctrlKey
+		* @type boolean
+		* @default false
+		* @public
+		*/
+		public ctrlKey: boolean = false;
+
+		/** 
+		* If the shift key was held at the time of the event happening.
+		* @property shiftKey
+		* @type boolean
+		* @default false
+		* @public
+		*/
+		public shiftKey: boolean = false;
+
+		/** 
+		* The time that the key was pressed initially.
+		* @property timeDown
+		* @type Number
+		* @default 0
+		* @public
+		*/
+		public timeDown: number = 0;
+
+		/** 
+		* The duration (in milliseconds) that the key has been down for.
+		* This is property is READ ONLY.
+		* @property duration
+		* @type Number
+		* @default 0
+		* @public
+		*/
+		public get duration(): number {
+
+			//If the key is down when the dev is getting the duration, then update the duration.
+			if (this.isDown) {
+				this.timeDown = this.game.time.now();
+			}
+
+			return (this.timeDown < this.timeUp) ? 0 : this.timeDown - this.timeUp;
+		}
+
+		/** 
+		* The time at which the key was released. 
+		* @property timeUp
+		* @type Number
+		* @default 0
+		* @public
+		*/
+		public timeUp: number = 0;
+
+		/** 
+		* If this key is being 'held' down, this property will indicate the amount of times the 'onkeydown' event has fired.
+		* This is reset each time the key is pressed.
+		* @property repeats
+		* @type Number
+		* @default 0
+		* @public
+		*/
+		public repeats: number = 0;
+
+		/** 
+		* The 'update' method fires when an event occur's. Updates the keys properties
+		* @method update
+		* @param event {KeyboardEvent} 
+		* @public
+		*/
+		public update(event: KeyboardEvent) {
+
+			this.keyCode = event.keyCode;
+
+			//Are we needing to prevent the default action?
+			if (this.preventDefault) event.preventDefault();
+
+			if (event.type === 'keydown') {
+				this.altKey = event.altKey;
+				this.ctrlKey = event.ctrlKey;
+				this.shiftKey = event.shiftKey;
+
+				if (this.isDown === true) {
+					// Key was already held down, this must be a repeat rate based event
+					this.repeats++;
+					this.timeDown = this.game.time.now();
+				} else {
+					this.isDown = true;
+					this.isUp = false;
+					this.timeDown = this.game.time.now();
+					this.repeats = 0;
+				}
+
+			} else if (event.type === 'keyup') {
+				this.isDown = false;
+				this.isUp = true;
+				this.timeUp = this.game.time.now();
+
+			}
+
+		}
+
+		/** 
+		* Returns a boolean indicating whether or not this key was just pressed.
+		* @method justPressed
+		* @param [duration] {Number} The duration at which determines if a key was just pressed. Defaults to the managers just pressed rate.
+		* @return {boolean} 
+		* @public
+		*/
+		public justPressed(duration: number = this._manager.justPressedRate): boolean {
+
+			if (this.isDown === true && (this.timeDown + duration) > this.game.time.now()) {
+				return true;
+			} else {
+				return false;
+			}
+
+		}
+
+		/** 
+		* Returns a boolean indicating whether or not this key was just released.
+		* @method justReleased
+		* @param [duration] {Number} The duration at which determines if a key was just released. Defaults to the managers just pressed rate.
+		* @return {boolean} 
+		* @public
+		*/
+		public justReleased(duration: number = this._manager.justReleasedRate): boolean {
+
+			if (this.isUp === true && (this.timeUp + duration) > this.game.time.now()) {
+				return true;
+			}
+			else
+			{
+				return false;
+			}
+
+		}
+
+		/**
+		* Resets all of the properties on the Key to their default values. 
+		* @method reset
+		* @public
+		*/
+		public reset() {
+			this.isDown = false;
+			this.isUp = true;
+			this.timeUp = 0;
+			this.timeDown = 0;
+			this.repeats = 0;
+			this.altKey = false;
+			this.shiftKey = false;
+			this.ctrlKey = false;
+		}
+
+	}
+
+}
diff --git a/src/input/Keyboard.ts b/src/input/Keyboard.ts
index b2462f4..643b2be 100644
--- a/src/input/Keyboard.ts
+++ b/src/input/Keyboard.ts
@@ -3,308 +3,308 @@
 * @module Kiwi
 * @submodule Input
 * 
-*/ 
+*/
 
 module Kiwi.Input {
-    
-    /**
-    * Handles and Manages the dispatching of keyboard events. When the user press's a button a new Key object is created.
-    *
-    * @class Keyboard
-    * @constructor
-    * @namespace Kiwi.Input
-    * @param game {Kiwi.Game}
-    * @return {Kiwi.Input.Keyboard} This object.
-    *
-    */
-    export class Keyboard {
-         
-        constructor (game: Kiwi.Game) {
-
-            this.game = game;
-
-        }
-
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} "Keyboard"
-        * @public
-        */
-        public objType() {
-            return "Keyboard";
-        }
-
-        /** 
-        * The game that this Keyboard belongs to.
-        * @property game
-        * @type Kiwi.Game
-        * @public
-        */
-        public game: Kiwi.Game;
-         
-        /** 
-        * Contains a reference to each Key object when they are either added to this Keyboard manager (by the developer), or when an event fires with that keycode.
-        * @property _keys
-        * @type Key[]
-        * @private
-        */
-        private _keys:Key[] = [];
-
-        /**
-        * Returns all of the Key objects that currently exist. This is READ ONLY.
-        * @property keys
-        * @type Keys[]
-        * @public
-        */
-        public get keys():Key[] {
-            return this._keys;
-        }
-
-        /** 
-        * The time in milliseconds which determines if a key was just pressed or not.
-        * @property justPressedRate
-        * @type Number
-        * @default 200
-        * @public
-        */
-        public justPressedRate: number = 200;
-        
-        /** 
-        * The time in milliseconds which determines if a key was just released or not.
-        * @property justReleasedRate
-        * @type Number
-        * @default 200
-        * @public
-        */
-        public justReleasedRate: number = 200;
-
-        /** 
-        * Is executed when the DOMElements that are need to get the game going are loaded and thus the game can 'boot'
-        * @method boot
-        * @public
-        */
-        public boot() {
-            this.onKeyUp = new Kiwi.Signal;
-            this.onKeyDown = new Kiwi.Signal;
-            this.onKeyDownOnce = new Kiwi.Signal;
-            this.start();
-        }
-
-        /** 
-        * The update loop that is executed every frame.
-        * @method update
-        * @public
-        */
-        public update() {
-
-        }
-        
-        /**
-        * A Signal that dispatches events when a key is released/is now up.
-        * Callbacks fired by this Signal will contain two parameters, the keyCode and key object.
-        * 1) KeyCode - The keyCode of the key that was just released.
-        * 2) Key - The key object for that keycode.
-        * @property onKeyUp
-        * @type Kiwi.Signal
-        * @public
-        */
-        public onKeyUp: Kiwi.Signal;
-        
-        /**
-        * A Signal that dispatches events when a key is pressed/is down.
-        * This mimics the natural 'keydown' event listener, so it will keep dispatching events if the user holds the key down. 
-        * Note: This fires after the 'onKeyDownOnce' signal.
-        * Callbacks fired by this Signal will contain two parameters, the keyCode and key object.
-        * 1) KeyCode - The keyCode of the key that was just released.
-        * 2) Key - The key object for that keycode.
-        *
-        * @property onKeyDown
-        * @type Kiwi.Signal
-        * @public
-        */
-        public onKeyDown: Kiwi.Signal;
-
-        /**
-        * A Signal that dispatches events when a key is pressed/is down initially. 
-        * This event only fires the first time that the key is pressed, so it won't dispatch events if the user is holding the key down.
-        * Note: This fires before the 'onKeyDown' signal;
-        * Callbacks fired by this Signal will contain two parameters, the keyCode and key object.
-        * 1) KeyCode - The keyCode of the key that was just released.
-        * 2) Key - The key object for that keycode.
-        *
-        * @property onKeyDownOnce
-        * @type Kiwi.Signal
-        * @public
-        */
-        public onKeyDownOnce: Kiwi.Signal;
-
-        /** 
-        * Adds the event listeners to the browser to listen for key events.
-        * @method start
-        * @public 
-        */
-        public start() {
-            if (this.game.deviceTargetOption=== Kiwi.TARGET_BROWSER) {
-                //this._domElement.addEventListener('keydown', (event:KeyboardEvent) => this.onKeyDown(event), false);
-                //this._domElement.addEventListener('keyup', (event:KeyboardEvent) => this.onKeyUp(event), false);
-                document.body.addEventListener('keydown', (event: KeyboardEvent) => this._keyPressed(event), false);
-                document.body.addEventListener('keyup', (event: KeyboardEvent) => this._keyReleased(event), false);
-            }
-        }
-
-        /** 
-        * Removes the event listeners and so effectively 'stops' all keyboard events.
-        * @method stop
-        * @public
-        */
-        public stop() {
-            if (this.game.deviceTargetOption === Kiwi.TARGET_BROWSER) {
-                //this._domElement.removeEventListener('keydown', (event:KeyboardEvent) => this.onKeyDown(event), false);
-                //this._domElement.removeEventListener('keyup', (event:KeyboardEvent) => this.onKeyUp(event), false);
-                document.body.removeEventListener('keydown', (event: KeyboardEvent) => this._keyPressed(event), false);
-                document.body.removeEventListener('keyup', (event: KeyboardEvent) => this._keyReleased(event), false);
-            }
-        }
-
-        /** 
-        * Is executed when a key is pressed/is down. This then either creates a new Key (if one does not currently exist) for that keycode, 
-        * or it updates the key that was pressed (if one does exist). 
-        * @method onKeyDown
-        * @param {KeyboardEvent} event.
-        * @private
-        */
-        private _keyPressed(event:KeyboardEvent) {
-
-            if (this._keys[event.keyCode]) {
-                this._keys[event.keyCode].update(event);
-
-            } else {
-                this._keys[event.keyCode] = new Kiwi.Input.Key(this, event.keyCode, event);
-
-            }
-
-            if (this._keys[event.keyCode].repeats == 0) this.onKeyDownOnce.dispatch(event.keyCode, this._keys[event.keyCode]);
-
-            this.onKeyDown.dispatch(event.keyCode, this._keys[event.keyCode]);
-        }
-
-        /** 
-        * Is executed when a key is release/is now up. This then either creates a new Key (if one does not currently exist) for that keycode, 
-        * or it updates the key that was released (if one does exist). 
-        * @method onKeyUp
-        * @param {KeyboardEvent} event.
-        * @private
-        */
-        private _keyReleased(event:KeyboardEvent) {
-
-            if (this._keys[event.keyCode]) {
-                this._keys[event.keyCode].update(event);
-
-            } else {
-                this._keys[event.keyCode] = new Kiwi.Input.Key(this, event.keyCode, event);
-
-            }
-            this.onKeyUp.dispatch(event.keyCode, this._keys[event.keyCode]);
-        }
-
-        /** 
-        * Creates a new Key object for a keycode that is specified.
-        * Not strictly needed (as one will be created once an event occurs on that keycode) but can be good for setting the game up
-        * and choosing whether to prevent that keys any default action.
-        * @method addKey
-        * @param keycode {Number} The keycode of the key that you want to add. 
-        * @param [preventDefault=false] {Boolean} If the default action for that key should be prevented or not when an event fires.
-        * @return {Kiwi.Input.Key}
-        * @public
-        */
-        public addKey(keycode: number, preventDefault:boolean = false): Key {
-
-            var key = new Kiwi.Input.Key(this, keycode);
-            key.preventDefault = preventDefault;
-
-            return this._keys[keycode] = key;
-
-        }
-
-        /** 
-        * Returns a boolean indicating if a key (that you pass via a keycode) was just pressed or not. 
-        * @method justPressed
-        * @param keycode {Number} The keycode of the key that you would like to check against.
-        * @param [duration=this.justPressedRate] {Number} The duration at which determines if a key was 'just' pressed or not. If not specified defaults to the justPressedRate
-        * @public
-        */
-        public justPressed(keycode, duration:number=this.justPressedRate):boolean {
-
-            if (this._keys[keycode]) {
-                return this._keys[keycode].justPressed(duration);
-            } 
-
-            return false;
-        }
-
-        
-        /** 
-        * Returns a boolean indicating if a key (that you pass via a keycode) was just released or not. 
-        * @method justReleased
-        * @param keycode {Number} The keycode of the key that you would like to check against.
-        * @param [duration=this.justReleasedRate] {Number} The duration at which determines if a key was 'just' released or not. If not specified defaults to the justReleasedRate
-        * @public
-        */
-        public justReleased(keycode, duration:number=this.justReleasedRate):boolean {
-
-            if (this._keys[keycode]) {
-                return this._keys[keycode].justReleased(duration);
-            }
-
-            return false;
-        }
-
-        /** 
-        * Returns a boolean indicating whether a key (that you pass via its keycode) is down or not.
-        * @method isDown
-        * @param keycode {Number} The keycode of the key that you are checking.
-        * @return {boolean}
-        * @public
-        */
-        public isDown(keycode: number): boolean {
-
-            if (this._keys[keycode]) {
-                return this._keys[keycode].isDown;
-            } else {
-                return false;
-            }
-
-        }
-
-        /** 
-        * Returns a boolean indicating whether a key (that you pass via its keycode) is up or not.
-        * @method isUp
-        * @param keycode {Number} The keycode of the key that you are checking.
-        * @return {boolean}
-        * @public
-        */
-        public isUp(keycode: number): boolean {
-
-            if (this._keys[keycode]) {
-                return this._keys[keycode].isUp;
-            } else {
-                return false;
-            }
-
-        }
-        
-        /**
-        * Executes the reset method on every Key that currently exists.
-        * @method reset
-        * @public
-        */
-        public reset() {
-            for (var index in this._keys) {
-                this._keys[index].reset();
-            }
-        }
-
-    }
+
+	/**
+	* Handles and Manages the dispatching of keyboard events. When the user press's a button a new Key object is created.
+	*
+	* @class Keyboard
+	* @constructor
+	* @namespace Kiwi.Input
+	* @param game {Kiwi.Game}
+	* @return {Kiwi.Input.Keyboard} This object.
+	*
+	*/
+	export class Keyboard {
+
+		constructor (game: Kiwi.Game) {
+
+			this.game = game;
+
+		}
+
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} "Keyboard"
+		* @public
+		*/
+		public objType() {
+			return "Keyboard";
+		}
+
+		/** 
+		* The game that this Keyboard belongs to.
+		* @property game
+		* @type Kiwi.Game
+		* @public
+		*/
+		public game: Kiwi.Game;
+
+		/** 
+		* Contains a reference to each Key object when they are either added to this Keyboard manager (by the developer), or when an event fires with that keycode.
+		* @property _keys
+		* @type Key[]
+		* @private
+		*/
+		private _keys:Key[] = [];
+
+		/**
+		* Returns all of the Key objects that currently exist. This is READ ONLY.
+		* @property keys
+		* @type Keys[]
+		* @public
+		*/
+		public get keys():Key[] {
+			return this._keys;
+		}
+
+		/** 
+		* The time in milliseconds which determines if a key was just pressed or not.
+		* @property justPressedRate
+		* @type Number
+		* @default 200
+		* @public
+		*/
+		public justPressedRate: number = 200;
+
+		/** 
+		* The time in milliseconds which determines if a key was just released or not.
+		* @property justReleasedRate
+		* @type Number
+		* @default 200
+		* @public
+		*/
+		public justReleasedRate: number = 200;
+
+		/** 
+		* Is executed when the DOMElements that are need to get the game going are loaded and thus the game can 'boot'
+		* @method boot
+		* @public
+		*/
+		public boot() {
+			this.onKeyUp = new Kiwi.Signal;
+			this.onKeyDown = new Kiwi.Signal;
+			this.onKeyDownOnce = new Kiwi.Signal;
+			this.start();
+		}
+
+		/** 
+		* The update loop that is executed every frame.
+		* @method update
+		* @public
+		*/
+		public update() {
+
+		}
+
+		/**
+		* A Signal that dispatches events when a key is released/is now up.
+		* Callbacks fired by this Signal will contain two parameters, the keyCode and key object.
+		* 1) KeyCode - The keyCode of the key that was just released.
+		* 2) Key - The key object for that keycode.
+		* @property onKeyUp
+		* @type Kiwi.Signal
+		* @public
+		*/
+		public onKeyUp: Kiwi.Signal;
+
+		/**
+		* A Signal that dispatches events when a key is pressed/is down.
+		* This mimics the natural 'keydown' event listener, so it will keep dispatching events if the user holds the key down. 
+		* Note: This fires after the 'onKeyDownOnce' signal.
+		* Callbacks fired by this Signal will contain two parameters, the keyCode and key object.
+		* 1) KeyCode - The keyCode of the key that was just released.
+		* 2) Key - The key object for that keycode.
+		*
+		* @property onKeyDown
+		* @type Kiwi.Signal
+		* @public
+		*/
+		public onKeyDown: Kiwi.Signal;
+
+		/**
+		* A Signal that dispatches events when a key is pressed/is down initially. 
+		* This event only fires the first time that the key is pressed, so it won't dispatch events if the user is holding the key down.
+		* Note: This fires before the 'onKeyDown' signal;
+		* Callbacks fired by this Signal will contain two parameters, the keyCode and key object.
+		* 1) KeyCode - The keyCode of the key that was just released.
+		* 2) Key - The key object for that keycode.
+		*
+		* @property onKeyDownOnce
+		* @type Kiwi.Signal
+		* @public
+		*/
+		public onKeyDownOnce: Kiwi.Signal;
+
+		/** 
+		* Adds the event listeners to the browser to listen for key events.
+		* @method start
+		* @public 
+		*/
+		public start() {
+			if (this.game.deviceTargetOption=== Kiwi.TARGET_BROWSER) {
+				//this._domElement.addEventListener('keydown', (event:KeyboardEvent) => this.onKeyDown(event), false);
+				//this._domElement.addEventListener('keyup', (event:KeyboardEvent) => this.onKeyUp(event), false);
+				document.body.addEventListener('keydown', (event: KeyboardEvent) => this._keyPressed(event), false);
+				document.body.addEventListener('keyup', (event: KeyboardEvent) => this._keyReleased(event), false);
+			}
+		}
+
+		/** 
+		* Removes the event listeners and so effectively 'stops' all keyboard events.
+		* @method stop
+		* @public
+		*/
+		public stop() {
+			if (this.game.deviceTargetOption === Kiwi.TARGET_BROWSER) {
+				//this._domElement.removeEventListener('keydown', (event:KeyboardEvent) => this.onKeyDown(event), false);
+				//this._domElement.removeEventListener('keyup', (event:KeyboardEvent) => this.onKeyUp(event), false);
+				document.body.removeEventListener('keydown', (event: KeyboardEvent) => this._keyPressed(event), false);
+				document.body.removeEventListener('keyup', (event: KeyboardEvent) => this._keyReleased(event), false);
+			}
+		}
+
+		/** 
+		* Is executed when a key is pressed/is down. This then either creates a new Key (if one does not currently exist) for that keycode, 
+		* or it updates the key that was pressed (if one does exist). 
+		* @method onKeyDown
+		* @param {KeyboardEvent} event.
+		* @private
+		*/
+		private _keyPressed(event:KeyboardEvent) {
+
+			if (this._keys[event.keyCode]) {
+				this._keys[event.keyCode].update(event);
+
+			} else {
+				this._keys[event.keyCode] = new Kiwi.Input.Key(this, event.keyCode, event);
+
+			}
+
+			if (this._keys[event.keyCode].repeats == 0) this.onKeyDownOnce.dispatch(event.keyCode, this._keys[event.keyCode]);
+
+			this.onKeyDown.dispatch(event.keyCode, this._keys[event.keyCode]);
+		}
+
+		/** 
+		* Is executed when a key is release/is now up. This then either creates a new Key (if one does not currently exist) for that keycode, 
+		* or it updates the key that was released (if one does exist). 
+		* @method onKeyUp
+		* @param {KeyboardEvent} event.
+		* @private
+		*/
+		private _keyReleased(event:KeyboardEvent) {
+
+			if (this._keys[event.keyCode]) {
+				this._keys[event.keyCode].update(event);
+
+			} else {
+				this._keys[event.keyCode] = new Kiwi.Input.Key(this, event.keyCode, event);
+
+			}
+			this.onKeyUp.dispatch(event.keyCode, this._keys[event.keyCode]);
+		}
+
+		/** 
+		* Creates a new Key object for a keycode that is specified.
+		* Not strictly needed (as one will be created once an event occurs on that keycode) but can be good for setting the game up
+		* and choosing whether to prevent that keys any default action.
+		* @method addKey
+		* @param keycode {Number} The keycode of the key that you want to add. 
+		* @param [preventDefault=false] {Boolean} If the default action for that key should be prevented or not when an event fires.
+		* @return {Kiwi.Input.Key}
+		* @public
+		*/
+		public addKey(keycode: number, preventDefault:boolean = false): Key {
+
+			var key = new Kiwi.Input.Key(this, keycode);
+			key.preventDefault = preventDefault;
+
+			return this._keys[keycode] = key;
+
+		}
+
+		/** 
+		* Returns a boolean indicating if a key (that you pass via a keycode) was just pressed or not. 
+		* @method justPressed
+		* @param keycode {Number} The keycode of the key that you would like to check against.
+		* @param [duration=this.justPressedRate] {Number} The duration at which determines if a key was 'just' pressed or not. If not specified defaults to the justPressedRate
+		* @public
+		*/
+		public justPressed(keycode, duration:number=this.justPressedRate):boolean {
+
+			if (this._keys[keycode]) {
+				return this._keys[keycode].justPressed(duration);
+			} 
+
+			return false;
+		}
+
+
+		/** 
+		* Returns a boolean indicating if a key (that you pass via a keycode) was just released or not. 
+		* @method justReleased
+		* @param keycode {Number} The keycode of the key that you would like to check against.
+		* @param [duration=this.justReleasedRate] {Number} The duration at which determines if a key was 'just' released or not. If not specified defaults to the justReleasedRate
+		* @public
+		*/
+		public justReleased(keycode, duration:number=this.justReleasedRate):boolean {
+
+			if (this._keys[keycode]) {
+				return this._keys[keycode].justReleased(duration);
+			}
+
+			return false;
+		}
+
+		/** 
+		* Returns a boolean indicating whether a key (that you pass via its keycode) is down or not.
+		* @method isDown
+		* @param keycode {Number} The keycode of the key that you are checking.
+		* @return {boolean}
+		* @public
+		*/
+		public isDown(keycode: number): boolean {
+
+			if (this._keys[keycode]) {
+				return this._keys[keycode].isDown;
+			} else {
+				return false;
+			}
+
+		}
+
+		/** 
+		* Returns a boolean indicating whether a key (that you pass via its keycode) is up or not.
+		* @method isUp
+		* @param keycode {Number} The keycode of the key that you are checking.
+		* @return {boolean}
+		* @public
+		*/
+		public isUp(keycode: number): boolean {
+
+			if (this._keys[keycode]) {
+				return this._keys[keycode].isUp;
+			} else {
+				return false;
+			}
+
+		}
+
+		/**
+		* Executes the reset method on every Key that currently exists.
+		* @method reset
+		* @public
+		*/
+		public reset() {
+			for (var index in this._keys) {
+				this._keys[index].reset();
+			}
+		}
+
+	}
 
 }
diff --git a/src/input/Keycodes.ts b/src/input/Keycodes.ts
index 769474a..9c50b9b 100644
--- a/src/input/Keycodes.ts
+++ b/src/input/Keycodes.ts
@@ -3,915 +3,915 @@
 * @module Kiwi
 * @submodule Input
 * 
-*/ 
+*/
 
 module Kiwi.Input {
 
-    /**
-    * A Static class which has a property associated with all all of the character codes on a typical keyboard. While you don't need this class for your game to work, it is quite handy to use as it can speed up the development process.
-    *
-    * @class Keycodes
-    * @namespace Kiwi.Input
-    * @static
-    */
-    export class Keycodes {
-
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {string} "Keycodes"
-        * @public
-        */
-        public objType() {
-            return "Keycodes";
-        }
-
-        /**
-        * A Static property that holds the keycode for the character A
-        * @property A
-        * @static
-        * @final
-        * @public
-        */
-        public static A: number = "A".charCodeAt(0);
-
-        /**
-        * A Static property that holds the keycode for the character B
-        * @property B
-        * @static
-        * @final
-        * @public
-        */
-        public static B: number = "B".charCodeAt(0);
-
-        /**
-        * A Static property that holds the keycode for the character C
-        * @property C
-        * @static
-        * @final
-        * @public
-        */
-        public static C: number = "C".charCodeAt(0);
-
-        /**
-        * A Static property that holds the keycode for the character D
-        * @property D
-        * @static
-        * @final
-        * @public
-        */
-        public static D: number = "D".charCodeAt(0);
-
-        /**
-        * A Static property that holds the keycode for the character E
-        * @property E
-        * @static
-        * @final
-        * @public
-        */
-        public static E: number = "E".charCodeAt(0);
-
-        /**
-        * A Static property that holds the keycode for the character F
-        * @property F
-        * @static
-        * @final
-        * @public
-        */
-        public static F: number = "F".charCodeAt(0);
-
-        /**
-        * A Static property that holds the keycode for the character G
-        * @property G
-        * @static
-        * @final
-        * @public
-        */
-        public static G: number = "G".charCodeAt(0);
-
-        /**
-        * A Static property that holds the keycode for the character H
-        * @property H
-        * @static
-        * @final
-        * @public
-        */
-        public static H: number = "H".charCodeAt(0);
-
-        /**
-        * A Static property that holds the keycode for the character I
-        * @property I
-        * @static
-        * @final
-        * @public
-        */
-        public static I: number = "I".charCodeAt(0);
-
-        /**
-        * A Static property that holds the keycode for the character J
-        * @property J
-        * @static
-        * @final
-        * @public
-        */
-        public static J: number = "J".charCodeAt(0);
-
-        /**
-        * A Static property that holds the keycode for the character K
-        * @property K
-        * @static
-        * @final
-        * @public
-        */
-        public static K: number = "K".charCodeAt(0);
-
-        /**
-        * A Static property that holds the keycode for the character L
-        * @property L
-        * @static
-        * @final
-        * @public
-        */
-        public static L: number = "L".charCodeAt(0);
-
-        /**
-        * A Static property that holds the keycode for the character M
-        * @property M
-        * @static
-        * @final
-        * @public
-        */
-        public static M: number = "M".charCodeAt(0);
-
-        /**
-        * A Static property that holds the keycode for the character N
-        * @property N
-        * @static
-        * @final
-        * @public
-        */
-        public static N: number = "N".charCodeAt(0);
-
-        /**
-        * A Static property that holds the keycode for the character O
-        * @property O
-        * @static
-        * @final
-        * @public
-        */
-        public static O: number = "O".charCodeAt(0);
-
-        /**
-        * A Static property that holds the keycode for the character P
-        * @property P
-        * @static
-        * @final
-        * @public
-        */
-        public static P: number = "P".charCodeAt(0);
-
-        /**
-        * A Static property that holds the keycode for the character Q
-        * @property Q
-        * @static
-        * @final
-        * @public
-        */
-        public static Q: number = "Q".charCodeAt(0);
-
-        /**
-        * A Static property that holds the keycode for the character R
-        * @property R
-        * @static
-        * @final
-        * @public
-        */
-        public static R: number = "R".charCodeAt(0);
-
-        /**
-        * A Static property that holds the keycode for the character S
-        * @property S
-        * @static
-        * @final
-        * @public
-        */
-        public static S: number = "S".charCodeAt(0);
-
-        /**
-        * A Static property that holds the keycode for the character T
-        * @property T
-        * @static
-        * @final
-        * @public
-        */
-        public static T: number = "T".charCodeAt(0);
-
-        /**
-        * A Static property that holds the keycode for the character U
-        * @property U
-        * @static
-        * @final
-        * @public
-        */
-        public static U: number = "U".charCodeAt(0);
-
-        /**
-        * A Static property that holds the keycode for the character V
-        * @property V
-        * @static
-        * @final
-        * @public
-        */
-        public static V: number = "V".charCodeAt(0);
-
-        /**
-        * A Static property that holds the keycode for the character W
-        * @property W
-        * @static
-        * @final
-        * @public
-        */
-        public static W: number = "W".charCodeAt(0);
-
-        /**
-        * A Static property that holds the keycode for the character X
-        * @property X
-        * @static
-        * @final
-        * @public
-        */
-        public static X: number = "X".charCodeAt(0);
-
-        /**
-        * A Static property that holds the keycode for the character Y
-        * @property Y
-        * @static
-        * @final
-        * @public
-        */
-        public static Y: number = "Y".charCodeAt(0);
-
-	    /**
-        * A Static property that holds the keycode for the character Z
-        * @property Z
-        * @static
-        * @final
-        * @public
-        */
-	    public static Z:number = "Z".charCodeAt(0);
-
-
-        /**
-        * A Static property that holds the keycode for the character 0
-        * @property ZERO
-        * @static
-        * @final
-        * @public
-        */
-        public static ZERO: number = "0".charCodeAt(0);
-
-        /**
-        * A Static property that holds the keycode for the character 1
-        * @property ONE
-        * @static
-        * @final
-        * @public
-        */
-        public static ONE: number = "1".charCodeAt(0);
-
-        /**
-        * A Static property that holds the keycode for the character 2
-        * @property TWO
-        * @static
-        * @final
-        * @public
-        */
-        public static TWO: number = "2".charCodeAt(0);
-
-        /**
-        * A Static property that holds the keycode for the character 3
-        * @property THREE
-        * @static
-        * @final
-        * @public
-        */
-        public static THREE: number = "3".charCodeAt(0);
-
-        /**
-        * A Static property that holds the keycode for the character 4
-        * @property FOUR
-        * @static
-        * @final
-        * @public
-        */
-        public static FOUR: number = "4".charCodeAt(0);
-
-        /**
-        * A Static property that holds the keycode for the character 5
-        * @property FIVE
-        * @static
-        * @final
-        * @public
-        */
-        public static FIVE: number = "5".charCodeAt(0);
-
-        /**
-        * A Static property that holds the keycode for the character 6
-        * @property SIX
-        * @static
-        * @final
-        * @public
-        */
-        public static SIX: number = "6".charCodeAt(0);
-
-        /**
-        * A Static property that holds the keycode for the character 7
-        * @property SEVEN
-        * @static
-        * @final
-        * @public
-        */
-        public static SEVEN: number = "7".charCodeAt(0);
-
-        /**
-        * A Static property that holds the keycode for the character 8
-        * @property EIGHT
-        * @static
-        * @final
-        * @public
-        */
-        public static EIGHT: number = "8".charCodeAt(0);
-
-	    /**
-        * A Static property that holds the keycode for the character 9
-        * @property NINE
-        * @static
-        * @final
-        * @public
-        */
-	    public static NINE:number = "9".charCodeAt(0);
-        
-
-        /**
-        * A Static property that holds the keycode for the character number pad 0
-        * @property NUMPAD_0
-        * @static
-        * @final
-        * @public
-        */
-        public static NUMPAD_0: number = 96;
-
-        /**
-        * A Static property that holds the keycode for the character number pad 1
-        * @property NUMPAD_1
-        * @static
-        * @final
-        * @public
-        */
-        public static NUMPAD_1: number = 97;
-
-        /**
-        * A Static property that holds the keycode for the character number pad 2
-        * @property NUMPAD_2
-        * @static
-        * @final
-        * @public
-        */
-        public static NUMPAD_2: number = 98;
-
-        /**
-        * A Static property that holds the keycode for the character number pad 3
-        * @property NUMPAD_3
-        * @static
-        * @final
-        * @public
-        */
-        public static NUMPAD_3: number = 99;
-
-        /**
-        * A Static property that holds the keycode for the character number pad 4
-        * @property NUMPAD_4
-        * @static
-        * @final
-        * @public
-        */
-        public static NUMPAD_4: number = 100;
-
-        /**
-        * A Static property that holds the keycode for the character number pad 5
-        * @property NUMPAD_5
-        * @static
-        * @final
-        * @public
-        */
-        public static NUMPAD_5: number = 101;
-
-        /**
-        * A Static property that holds the keycode for the character number pad 6
-        * @property NUMPAD_6
-        * @static
-        * @final
-        * @public
-        */
-        public static NUMPAD_6: number = 102;
-
-        /**
-        * A Static property that holds the keycode for the character number pad 7
-        * @property NUMPAD_7
-        * @static
-        * @final
-        * @public
-        */
-        public static NUMPAD_7: number = 103;
-
-        /**
-        * A Static property that holds the keycode for the character number pad 8
-        * @property NUMPAD_8
-        * @static
-        * @final
-        * @public
-        */
-        public static NUMPAD_8: number = 104;
-
-        /**
-        * A Static property that holds the keycode for the character number pad 9
-        * @property NUMPAD_9
-        * @static
-        * @final
-        * @public
-        */
-        public static NUMPAD_9: number = 105;
-
-        /**
-        * A Static property that holds the keycode for the character number pad *
-        * @property NUMPAD_MULTIPLY
-        * @static
-        * @final
-        * @public
-        */
-        public static NUMPAD_MULTIPLY: number = 106;
-
-        /**
-        * A Static property that holds the keycode for the character number pad +
-        * @property NUMPAD_ADD
-        * @static
-        * @final
-        * @public
-        */
-        public static NUMPAD_ADD: number = 107;
-
-        /**
-        * A Static property that holds the keycode for the character on the number pad enter
-        * @property NUMPAD_ENTER
-        * @static
-        * @final
-        * @public
-        */
-        public static NUMPAD_ENTER: number = 108;
-
-        /**
-        * A Static property that holds the keycode for the character number pad -
-        * @property NUMPAD_SUBTRACT
-        * @static
-        * @final
-        * @public
-        */
-        public static NUMPAD_SUBTRACT: number = 109;
-
-        /**
-        * A Static property that holds the keycode for the character number pad .
-        * @property NUMPAD_DECIMAL
-        * @static
-        * @final
-        * @public
-        */
-        public static NUMPAD_DECIMAL: number = 110;
-
-	    /**
-        * A Static property that holds the keycode for the character /
-        * @property NUMPAD_DIVIDE
-        * @static
-        * @final
-        * @public
-        */
-	    public static NUMPAD_DIVIDE:number = 111;
-        
-
-        /**
-        * A Static property that holds the keycode for the character F1
-        * @property F1
-        * @static
-        * @final
-        * @public
-        */
-        public static F1: number = 112;
-
-        /**
-        * A Static property that holds the keycode for the character F2
-        * @property F2
-        * @static
-        * @final
-        * @public
-        */
-        public static F2: number = 113;
-
-        /**
-        * A Static property that holds the keycode for the character F3
-        * @property F3
-        * @static
-        * @final
-        * @public
-        */
-        public static F3: number = 114;
-
-        /**
-        * A Static property that holds the keycode for the character F4
-        * @property F4
-        * @static
-        * @final
-        * @public
-        */
-        public static F4: number = 115;
-
-        /**
-        * A Static property that holds the keycode for the character F5
-        * @property F5
-        * @static
-        * @final
-        * @public
-        */
-        public static F5: number = 116;
-
-        /**
-        * A Static property that holds the keycode for the character F6
-        * @property F6
-        * @static
-        * @final
-        * @public
-        */
-        public static F6: number = 117;
-
-        /**
-        * A Static property that holds the keycode for the character F7
-        * @property F7
-        * @static
-        * @final
-        * @public
-        */
-        public static F7: number = 118;
-
-        /**
-        * A Static property that holds the keycode for the character F8
-        * @property F8
-        * @static
-        * @final
-        * @public
-        */
-        public static F8: number = 119;
-
-        /**
-        * A Static property that holds the keycode for the character F9
-        * @property F9
-        * @static
-        * @final
-        * @public
-        */
-        public static F9: number = 120;
-
-        /**
-        * A Static property that holds the keycode for the character F10
-        * @property F10
-        * @static
-        * @final
-        * @public
-        */
-        public static F10: number = 121;
-
-        /**
-        * A Static property that holds the keycode for the character F11
-        * @property F11
-        * @static
-        * @final
-        * @public
-        */
-        public static F11: number = 122;
-
-        /**
-        * A Static property that holds the keycode for the character F12
-        * @property F12
-        * @static
-        * @final
-        * @public
-        */
-        public static F12: number = 123;
-
-        /**
-        * A Static property that holds the keycode for the character F13
-        * @property F13
-        * @static
-        * @final
-        * @public
-        */
-        public static F13: number = 124;
-
-        /**
-        * A Static property that holds the keycode for the character F14
-        * @property F14
-        * @static
-        * @final
-        * @public
-        */
-        public static F14: number = 125;
-
-	    /**
-        * A Static property that holds the keycode for the character F15
-        * @property F15
-        * @static
-        * @final
-        * @public
-        */
-	    public static F15:number = 126;
-
-	    /**
-        * A Static property that holds the keycode for the character COLON
-        * @property COLON
-        * @static
-        * @final
-        * @public
-        */
-        public static COLON: number = 186;
-
-        /**
-        * A Static property that holds the keycode for the character =
-        * @property EQUALS
-        * @static
-        * @final
-        * @public
-        */
-        public static EQUALS: number = 187;
-
-        /**
-        * A Static property that holds the keycode for the character UNDERSCORE
-        * @property UNDERSCORE
-        * @static
-        * @final
-        * @public
-        */
-        public static UNDERSCORE: number = 189;
-
-        /**
-        * A Static property that holds the keycode for the character QUESTION_MARK
-        * @property QUESTION_MARK
-        * @static
-        * @final
-        * @public
-        */
-        public static QUESTION_MARK: number = 191;
-
-        /**
-        * A Static property that holds the keycode for the character TILDE
-        * @property TILDE
-        * @static
-        * @final
-        * @public
-        */
-        public static TILDE: number = 192;
-
-        /**
-        * A Static property that holds the keycode for the character OPEN_BRAKET
-        * @property OPEN_BRACKET
-        * @static
-        * @final
-        * @public
-        */
-        public static OPEN_BRACKET: number = 219;
-
-        /**
-        * A Static property that holds the keycode for the character BACKWARD_SLASH
-        * @property BACKWARD_SLASH
-        * @static
-        * @final
-        * @public
-        */
-        public static BACKWARD_SLASH: number = 220;
-
-        /**
-        * A Static property that holds the keycode for the character CLOSED_BRACKET
-        * @property CLOSED_BRACKET
-        * @static
-        * @final
-        * @public
-        */
-        public static CLOSED_BRACKET: number = 221;
-
-	    /**
-        * A Static property that holds the keycode for the character QUOTES
-        * @property QUOTES
-        * @static
-        * @final
-        * @public
-        */
-	    public static QUOTES:number = 222;
-        
-
-        /**
-        * A Static property that holds the keycode for the character BACKSPACE
-        * @property BACKSPACE
-        * @static
-        * @final
-        * @public
-        */
-        public static BACKSPACE: number = 8;
-
-        /**
-        * A Static property that holds the keycode for the character TAB
-        * @property TAB
-        * @static
-        * @final
-        * @public
-        */
-        public static TAB: number = 9;
-
-        /**
-        * A Static property that holds the keycode for the character CLEAR
-        * @property CLEAR
-        * @static
-        * @final
-        * @public
-        */
-        public static CLEAR: number = 12;
-
-        /**
-        * A Static property that holds the keycode for the character ENTER
-        * @property ENTER
-        * @static
-        * @final
-        * @public
-        */
-        public static ENTER: number = 13;
-
-        /**
-        * A Static property that holds the keycode for the character SHIFT
-        * @property SHIFT
-        * @static
-        * @final
-        * @public
-        */
-        public static SHIFT: number = 16;
-
-        /**
-        * A Static property that holds the keycode for the character CONTROL
-        * @property CONTROL
-        * @static
-        * @final
-        * @public
-        */
-        public static CONTROL: number = 17;
-
-        /**
-        * A Static property that holds the keycode for the character ALT
-        * @property ALT
-        * @static
-        * @final
-        * @public
-        */
-        public static ALT: number = 18;
-
-        /**
-        * A Static property that holds the keycode for the character CAPS_LOCK
-        * @property CAPS_LOCK
-        * @static
-        * @final
-        * @public
-        */
-        public static CAPS_LOCK: number = 20;
-
-        /**
-        * A Static property that holds the keycode for the character ESC
-        * @property ESC
-        * @static
-        * @final
-        * @public
-        */
-        public static ESC: number = 27;
-
-        /**
-        * A Static property that holds the keycode for the character SPACEBAR
-        * @property SPACEBAR
-        * @static
-        * @final
-        * @public
-        */
-        public static SPACEBAR: number = 32;
-
-        /**
-        * A Static property that holds the keycode for the character PAGE_UP
-        * @property PAGE_UP
-        * @static
-        * @final
-        * @public
-        */
-        public static PAGE_UP: number = 33;
-
-        /**
-        * A Static property that holds the keycode for the character PAGE_DOWN
-        * @property PAGE_DOWN
-        * @static
-        * @final
-        * @public
-        */
-        public static PAGE_DOWN: number = 34;
-
-        /**
-        * A Static property that holds the keycode for the character END
-        * @property END
-        * @static
-        * @final
-        * @public
-        */
-        public static END: number = 35;
-
-        /**
-        * A Static property that holds the keycode for the character HOME
-        * @property HOME
-        * @static
-        * @final
-        * @public
-        */
-        public static HOME: number = 36;
-
-        /**
-        * A Static property that holds the keycode for the character LEFT
-        * @property LEFT
-        * @static
-        * @final
-        * @public
-        */
-        public static LEFT: number = 37;
-
-        /**
-        * A Static property that holds the keycode for the character UP
-        * @property UP
-        * @static
-        * @final
-        * @public
-        */
-        public static UP: number = 38;
-
-        /**
-        * A Static property that holds the keycode for the character RIGHT
-        * @property RIGHT
-        * @static
-        * @final
-        * @public
-        */
-        public static RIGHT: number = 39;
-
-        /**
-        * A Static property that holds the keycode for the character DOWN
-        * @property DOWN
-        * @static
-        * @final
-        * @public
-        */
-        public static DOWN: number = 40;
-
-        /**
-        * A Static property that holds the keycode for the character INSERT
-        * @property INSERT
-        * @static
-        * @final
-        * @public
-        */
-        public static INSERT: number = 45;
-
-        /**
-        * A Static property that holds the keycode for the character DELETE
-        * @property DELETE
-        * @static
-        * @final
-        * @public
-        */
-        public static DELETE: number = 46;
-
-        /**
-        * A Static property that holds the keycode for the character HELP
-        * @property HELP
-        * @static
-        * @final
-        * @public
-        */
-        public static HELP: number = 47;
-
-	    /**
-        * A Static property that holds the keycode for the character NUM_LOCK
-        * @property NUM_LOCK
-        * @static
-        * @final
-        * @public
-        */
-	    public static NUM_LOCK: number = 144;
-
-    }
+	/**
+	* A Static class which has a property associated with all all of the character codes on a typical keyboard. While you don't need this class for your game to work, it is quite handy to use as it can speed up the development process.
+	*
+	* @class Keycodes
+	* @namespace Kiwi.Input
+	* @static
+	*/
+	export class Keycodes {
+
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {string} "Keycodes"
+		* @public
+		*/
+		public objType() {
+			return "Keycodes";
+		}
+
+		/**
+		* A Static property that holds the keycode for the character A
+		* @property A
+		* @static
+		* @final
+		* @public
+		*/
+		public static A: number = "A".charCodeAt(0);
+
+		/**
+		* A Static property that holds the keycode for the character B
+		* @property B
+		* @static
+		* @final
+		* @public
+		*/
+		public static B: number = "B".charCodeAt(0);
+
+		/**
+		* A Static property that holds the keycode for the character C
+		* @property C
+		* @static
+		* @final
+		* @public
+		*/
+		public static C: number = "C".charCodeAt(0);
+
+		/**
+		* A Static property that holds the keycode for the character D
+		* @property D
+		* @static
+		* @final
+		* @public
+		*/
+		public static D: number = "D".charCodeAt(0);
+
+		/**
+		* A Static property that holds the keycode for the character E
+		* @property E
+		* @static
+		* @final
+		* @public
+		*/
+		public static E: number = "E".charCodeAt(0);
+
+		/**
+		* A Static property that holds the keycode for the character F
+		* @property F
+		* @static
+		* @final
+		* @public
+		*/
+		public static F: number = "F".charCodeAt(0);
+
+		/**
+		* A Static property that holds the keycode for the character G
+		* @property G
+		* @static
+		* @final
+		* @public
+		*/
+		public static G: number = "G".charCodeAt(0);
+
+		/**
+		* A Static property that holds the keycode for the character H
+		* @property H
+		* @static
+		* @final
+		* @public
+		*/
+		public static H: number = "H".charCodeAt(0);
+
+		/**
+		* A Static property that holds the keycode for the character I
+		* @property I
+		* @static
+		* @final
+		* @public
+		*/
+		public static I: number = "I".charCodeAt(0);
+
+		/**
+		* A Static property that holds the keycode for the character J
+		* @property J
+		* @static
+		* @final
+		* @public
+		*/
+		public static J: number = "J".charCodeAt(0);
+
+		/**
+		* A Static property that holds the keycode for the character K
+		* @property K
+		* @static
+		* @final
+		* @public
+		*/
+		public static K: number = "K".charCodeAt(0);
+
+		/**
+		* A Static property that holds the keycode for the character L
+		* @property L
+		* @static
+		* @final
+		* @public
+		*/
+		public static L: number = "L".charCodeAt(0);
+
+		/**
+		* A Static property that holds the keycode for the character M
+		* @property M
+		* @static
+		* @final
+		* @public
+		*/
+		public static M: number = "M".charCodeAt(0);
+
+		/**
+		* A Static property that holds the keycode for the character N
+		* @property N
+		* @static
+		* @final
+		* @public
+		*/
+		public static N: number = "N".charCodeAt(0);
+
+		/**
+		* A Static property that holds the keycode for the character O
+		* @property O
+		* @static
+		* @final
+		* @public
+		*/
+		public static O: number = "O".charCodeAt(0);
+
+		/**
+		* A Static property that holds the keycode for the character P
+		* @property P
+		* @static
+		* @final
+		* @public
+		*/
+		public static P: number = "P".charCodeAt(0);
+
+		/**
+		* A Static property that holds the keycode for the character Q
+		* @property Q
+		* @static
+		* @final
+		* @public
+		*/
+		public static Q: number = "Q".charCodeAt(0);
+
+		/**
+		* A Static property that holds the keycode for the character R
+		* @property R
+		* @static
+		* @final
+		* @public
+		*/
+		public static R: number = "R".charCodeAt(0);
+
+		/**
+		* A Static property that holds the keycode for the character S
+		* @property S
+		* @static
+		* @final
+		* @public
+		*/
+		public static S: number = "S".charCodeAt(0);
+
+		/**
+		* A Static property that holds the keycode for the character T
+		* @property T
+		* @static
+		* @final
+		* @public
+		*/
+		public static T: number = "T".charCodeAt(0);
+
+		/**
+		* A Static property that holds the keycode for the character U
+		* @property U
+		* @static
+		* @final
+		* @public
+		*/
+		public static U: number = "U".charCodeAt(0);
+
+		/**
+		* A Static property that holds the keycode for the character V
+		* @property V
+		* @static
+		* @final
+		* @public
+		*/
+		public static V: number = "V".charCodeAt(0);
+
+		/**
+		* A Static property that holds the keycode for the character W
+		* @property W
+		* @static
+		* @final
+		* @public
+		*/
+		public static W: number = "W".charCodeAt(0);
+
+		/**
+		* A Static property that holds the keycode for the character X
+		* @property X
+		* @static
+		* @final
+		* @public
+		*/
+		public static X: number = "X".charCodeAt(0);
+
+		/**
+		* A Static property that holds the keycode for the character Y
+		* @property Y
+		* @static
+		* @final
+		* @public
+		*/
+		public static Y: number = "Y".charCodeAt(0);
+
+		/**
+		* A Static property that holds the keycode for the character Z
+		* @property Z
+		* @static
+		* @final
+		* @public
+		*/
+		public static Z:number = "Z".charCodeAt(0);
+
+
+		/**
+		* A Static property that holds the keycode for the character 0
+		* @property ZERO
+		* @static
+		* @final
+		* @public
+		*/
+		public static ZERO: number = "0".charCodeAt(0);
+
+		/**
+		* A Static property that holds the keycode for the character 1
+		* @property ONE
+		* @static
+		* @final
+		* @public
+		*/
+		public static ONE: number = "1".charCodeAt(0);
+
+		/**
+		* A Static property that holds the keycode for the character 2
+		* @property TWO
+		* @static
+		* @final
+		* @public
+		*/
+		public static TWO: number = "2".charCodeAt(0);
+
+		/**
+		* A Static property that holds the keycode for the character 3
+		* @property THREE
+		* @static
+		* @final
+		* @public
+		*/
+		public static THREE: number = "3".charCodeAt(0);
+
+		/**
+		* A Static property that holds the keycode for the character 4
+		* @property FOUR
+		* @static
+		* @final
+		* @public
+		*/
+		public static FOUR: number = "4".charCodeAt(0);
+
+		/**
+		* A Static property that holds the keycode for the character 5
+		* @property FIVE
+		* @static
+		* @final
+		* @public
+		*/
+		public static FIVE: number = "5".charCodeAt(0);
+
+		/**
+		* A Static property that holds the keycode for the character 6
+		* @property SIX
+		* @static
+		* @final
+		* @public
+		*/
+		public static SIX: number = "6".charCodeAt(0);
+
+		/**
+		* A Static property that holds the keycode for the character 7
+		* @property SEVEN
+		* @static
+		* @final
+		* @public
+		*/
+		public static SEVEN: number = "7".charCodeAt(0);
+
+		/**
+		* A Static property that holds the keycode for the character 8
+		* @property EIGHT
+		* @static
+		* @final
+		* @public
+		*/
+		public static EIGHT: number = "8".charCodeAt(0);
+
+		/**
+		* A Static property that holds the keycode for the character 9
+		* @property NINE
+		* @static
+		* @final
+		* @public
+		*/
+		public static NINE:number = "9".charCodeAt(0);
+		
+
+		/**
+		* A Static property that holds the keycode for the character number pad 0
+		* @property NUMPAD_0
+		* @static
+		* @final
+		* @public
+		*/
+		public static NUMPAD_0: number = 96;
+
+		/**
+		* A Static property that holds the keycode for the character number pad 1
+		* @property NUMPAD_1
+		* @static
+		* @final
+		* @public
+		*/
+		public static NUMPAD_1: number = 97;
+
+		/**
+		* A Static property that holds the keycode for the character number pad 2
+		* @property NUMPAD_2
+		* @static
+		* @final
+		* @public
+		*/
+		public static NUMPAD_2: number = 98;
+
+		/**
+		* A Static property that holds the keycode for the character number pad 3
+		* @property NUMPAD_3
+		* @static
+		* @final
+		* @public
+		*/
+		public static NUMPAD_3: number = 99;
+
+		/**
+		* A Static property that holds the keycode for the character number pad 4
+		* @property NUMPAD_4
+		* @static
+		* @final
+		* @public
+		*/
+		public static NUMPAD_4: number = 100;
+
+		/**
+		* A Static property that holds the keycode for the character number pad 5
+		* @property NUMPAD_5
+		* @static
+		* @final
+		* @public
+		*/
+		public static NUMPAD_5: number = 101;
+
+		/**
+		* A Static property that holds the keycode for the character number pad 6
+		* @property NUMPAD_6
+		* @static
+		* @final
+		* @public
+		*/
+		public static NUMPAD_6: number = 102;
+
+		/**
+		* A Static property that holds the keycode for the character number pad 7
+		* @property NUMPAD_7
+		* @static
+		* @final
+		* @public
+		*/
+		public static NUMPAD_7: number = 103;
+
+		/**
+		* A Static property that holds the keycode for the character number pad 8
+		* @property NUMPAD_8
+		* @static
+		* @final
+		* @public
+		*/
+		public static NUMPAD_8: number = 104;
+
+		/**
+		* A Static property that holds the keycode for the character number pad 9
+		* @property NUMPAD_9
+		* @static
+		* @final
+		* @public
+		*/
+		public static NUMPAD_9: number = 105;
+
+		/**
+		* A Static property that holds the keycode for the character number pad *
+		* @property NUMPAD_MULTIPLY
+		* @static
+		* @final
+		* @public
+		*/
+		public static NUMPAD_MULTIPLY: number = 106;
+
+		/**
+		* A Static property that holds the keycode for the character number pad +
+		* @property NUMPAD_ADD
+		* @static
+		* @final
+		* @public
+		*/
+		public static NUMPAD_ADD: number = 107;
+
+		/**
+		* A Static property that holds the keycode for the character on the number pad enter
+		* @property NUMPAD_ENTER
+		* @static
+		* @final
+		* @public
+		*/
+		public static NUMPAD_ENTER: number = 108;
+
+		/**
+		* A Static property that holds the keycode for the character number pad -
+		* @property NUMPAD_SUBTRACT
+		* @static
+		* @final
+		* @public
+		*/
+		public static NUMPAD_SUBTRACT: number = 109;
+
+		/**
+		* A Static property that holds the keycode for the character number pad .
+		* @property NUMPAD_DECIMAL
+		* @static
+		* @final
+		* @public
+		*/
+		public static NUMPAD_DECIMAL: number = 110;
+
+		/**
+		* A Static property that holds the keycode for the character /
+		* @property NUMPAD_DIVIDE
+		* @static
+		* @final
+		* @public
+		*/
+		public static NUMPAD_DIVIDE:number = 111;
+		
+
+		/**
+		* A Static property that holds the keycode for the character F1
+		* @property F1
+		* @static
+		* @final
+		* @public
+		*/
+		public static F1: number = 112;
+
+		/**
+		* A Static property that holds the keycode for the character F2
+		* @property F2
+		* @static
+		* @final
+		* @public
+		*/
+		public static F2: number = 113;
+
+		/**
+		* A Static property that holds the keycode for the character F3
+		* @property F3
+		* @static
+		* @final
+		* @public
+		*/
+		public static F3: number = 114;
+
+		/**
+		* A Static property that holds the keycode for the character F4
+		* @property F4
+		* @static
+		* @final
+		* @public
+		*/
+		public static F4: number = 115;
+
+		/**
+		* A Static property that holds the keycode for the character F5
+		* @property F5
+		* @static
+		* @final
+		* @public
+		*/
+		public static F5: number = 116;
+
+		/**
+		* A Static property that holds the keycode for the character F6
+		* @property F6
+		* @static
+		* @final
+		* @public
+		*/
+		public static F6: number = 117;
+
+		/**
+		* A Static property that holds the keycode for the character F7
+		* @property F7
+		* @static
+		* @final
+		* @public
+		*/
+		public static F7: number = 118;
+
+		/**
+		* A Static property that holds the keycode for the character F8
+		* @property F8
+		* @static
+		* @final
+		* @public
+		*/
+		public static F8: number = 119;
+
+		/**
+		* A Static property that holds the keycode for the character F9
+		* @property F9
+		* @static
+		* @final
+		* @public
+		*/
+		public static F9: number = 120;
+
+		/**
+		* A Static property that holds the keycode for the character F10
+		* @property F10
+		* @static
+		* @final
+		* @public
+		*/
+		public static F10: number = 121;
+
+		/**
+		* A Static property that holds the keycode for the character F11
+		* @property F11
+		* @static
+		* @final
+		* @public
+		*/
+		public static F11: number = 122;
+
+		/**
+		* A Static property that holds the keycode for the character F12
+		* @property F12
+		* @static
+		* @final
+		* @public
+		*/
+		public static F12: number = 123;
+
+		/**
+		* A Static property that holds the keycode for the character F13
+		* @property F13
+		* @static
+		* @final
+		* @public
+		*/
+		public static F13: number = 124;
+
+		/**
+		* A Static property that holds the keycode for the character F14
+		* @property F14
+		* @static
+		* @final
+		* @public
+		*/
+		public static F14: number = 125;
+
+		/**
+		* A Static property that holds the keycode for the character F15
+		* @property F15
+		* @static
+		* @final
+		* @public
+		*/
+		public static F15:number = 126;
+
+		/**
+		* A Static property that holds the keycode for the character COLON
+		* @property COLON
+		* @static
+		* @final
+		* @public
+		*/
+		public static COLON: number = 186;
+
+		/**
+		* A Static property that holds the keycode for the character =
+		* @property EQUALS
+		* @static
+		* @final
+		* @public
+		*/
+		public static EQUALS: number = 187;
+
+		/**
+		* A Static property that holds the keycode for the character UNDERSCORE
+		* @property UNDERSCORE
+		* @static
+		* @final
+		* @public
+		*/
+		public static UNDERSCORE: number = 189;
+
+		/**
+		* A Static property that holds the keycode for the character QUESTION_MARK
+		* @property QUESTION_MARK
+		* @static
+		* @final
+		* @public
+		*/
+		public static QUESTION_MARK: number = 191;
+
+		/**
+		* A Static property that holds the keycode for the character TILDE
+		* @property TILDE
+		* @static
+		* @final
+		* @public
+		*/
+		public static TILDE: number = 192;
+
+		/**
+		* A Static property that holds the keycode for the character OPEN_BRAKET
+		* @property OPEN_BRACKET
+		* @static
+		* @final
+		* @public
+		*/
+		public static OPEN_BRACKET: number = 219;
+
+		/**
+		* A Static property that holds the keycode for the character BACKWARD_SLASH
+		* @property BACKWARD_SLASH
+		* @static
+		* @final
+		* @public
+		*/
+		public static BACKWARD_SLASH: number = 220;
+
+		/**
+		* A Static property that holds the keycode for the character CLOSED_BRACKET
+		* @property CLOSED_BRACKET
+		* @static
+		* @final
+		* @public
+		*/
+		public static CLOSED_BRACKET: number = 221;
+
+		/**
+		* A Static property that holds the keycode for the character QUOTES
+		* @property QUOTES
+		* @static
+		* @final
+		* @public
+		*/
+		public static QUOTES:number = 222;
+		
+
+		/**
+		* A Static property that holds the keycode for the character BACKSPACE
+		* @property BACKSPACE
+		* @static
+		* @final
+		* @public
+		*/
+		public static BACKSPACE: number = 8;
+
+		/**
+		* A Static property that holds the keycode for the character TAB
+		* @property TAB
+		* @static
+		* @final
+		* @public
+		*/
+		public static TAB: number = 9;
+
+		/**
+		* A Static property that holds the keycode for the character CLEAR
+		* @property CLEAR
+		* @static
+		* @final
+		* @public
+		*/
+		public static CLEAR: number = 12;
+
+		/**
+		* A Static property that holds the keycode for the character ENTER
+		* @property ENTER
+		* @static
+		* @final
+		* @public
+		*/
+		public static ENTER: number = 13;
+
+		/**
+		* A Static property that holds the keycode for the character SHIFT
+		* @property SHIFT
+		* @static
+		* @final
+		* @public
+		*/
+		public static SHIFT: number = 16;
+
+		/**
+		* A Static property that holds the keycode for the character CONTROL
+		* @property CONTROL
+		* @static
+		* @final
+		* @public
+		*/
+		public static CONTROL: number = 17;
+
+		/**
+		* A Static property that holds the keycode for the character ALT
+		* @property ALT
+		* @static
+		* @final
+		* @public
+		*/
+		public static ALT: number = 18;
+
+		/**
+		* A Static property that holds the keycode for the character CAPS_LOCK
+		* @property CAPS_LOCK
+		* @static
+		* @final
+		* @public
+		*/
+		public static CAPS_LOCK: number = 20;
+
+		/**
+		* A Static property that holds the keycode for the character ESC
+		* @property ESC
+		* @static
+		* @final
+		* @public
+		*/
+		public static ESC: number = 27;
+
+		/**
+		* A Static property that holds the keycode for the character SPACEBAR
+		* @property SPACEBAR
+		* @static
+		* @final
+		* @public
+		*/
+		public static SPACEBAR: number = 32;
+
+		/**
+		* A Static property that holds the keycode for the character PAGE_UP
+		* @property PAGE_UP
+		* @static
+		* @final
+		* @public
+		*/
+		public static PAGE_UP: number = 33;
+
+		/**
+		* A Static property that holds the keycode for the character PAGE_DOWN
+		* @property PAGE_DOWN
+		* @static
+		* @final
+		* @public
+		*/
+		public static PAGE_DOWN: number = 34;
+
+		/**
+		* A Static property that holds the keycode for the character END
+		* @property END
+		* @static
+		* @final
+		* @public
+		*/
+		public static END: number = 35;
+
+		/**
+		* A Static property that holds the keycode for the character HOME
+		* @property HOME
+		* @static
+		* @final
+		* @public
+		*/
+		public static HOME: number = 36;
+
+		/**
+		* A Static property that holds the keycode for the character LEFT
+		* @property LEFT
+		* @static
+		* @final
+		* @public
+		*/
+		public static LEFT: number = 37;
+
+		/**
+		* A Static property that holds the keycode for the character UP
+		* @property UP
+		* @static
+		* @final
+		* @public
+		*/
+		public static UP: number = 38;
+
+		/**
+		* A Static property that holds the keycode for the character RIGHT
+		* @property RIGHT
+		* @static
+		* @final
+		* @public
+		*/
+		public static RIGHT: number = 39;
+
+		/**
+		* A Static property that holds the keycode for the character DOWN
+		* @property DOWN
+		* @static
+		* @final
+		* @public
+		*/
+		public static DOWN: number = 40;
+
+		/**
+		* A Static property that holds the keycode for the character INSERT
+		* @property INSERT
+		* @static
+		* @final
+		* @public
+		*/
+		public static INSERT: number = 45;
+
+		/**
+		* A Static property that holds the keycode for the character DELETE
+		* @property DELETE
+		* @static
+		* @final
+		* @public
+		*/
+		public static DELETE: number = 46;
+
+		/**
+		* A Static property that holds the keycode for the character HELP
+		* @property HELP
+		* @static
+		* @final
+		* @public
+		*/
+		public static HELP: number = 47;
+
+		/**
+		* A Static property that holds the keycode for the character NUM_LOCK
+		* @property NUM_LOCK
+		* @static
+		* @final
+		* @public
+		*/
+		public static NUM_LOCK: number = 144;
+
+	}
 
 }
diff --git a/src/input/Mouse.ts b/src/input/Mouse.ts
index f5bf2a8..d5563b0 100644
--- a/src/input/Mouse.ts
+++ b/src/input/Mouse.ts
@@ -3,390 +3,390 @@
 * @module Kiwi
 * @submodule Input
 * 
-*/ 
+*/
 
 module Kiwi.Input {
 
-    /**
-    * Handles the dispatching/management of Mouse Events on a game. When this class is instantiated a MouseCursor object is also created (on this object) which holds the information that is unique to the mouse cursor, although majority of that information is still accessible inside this object.
-    *
-    * @class Mouse
-    * @constructor
-    * @namespace Kiwi.Input
-    * @param game {Kiwi.Game} The game that this mouse manager belongs to.
-    * @return {Kiwi.Input.Mouse} 
-    *
-    */
-    export class Mouse {
-          
-        constructor (game: Kiwi.Game) {
-            this._game = game;
-        }
-
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} "Mouse"
-        * @public
-        */
-        public objType() {
-            return "Mouse";
-        }
-         
-        /**
-        * The game that this mouse manager belongs to.
-        * @property _game
-        * @type Kiwi.Game
-        * @private
-        */
-        private _game: Kiwi.Game;
-         
-        /**
-        * The HTMLElement that is being used to apply the mouse events to.
-        * @property _domElement
-        * @type HTMLDivElement
-        * @private
-        */
-        private _domElement:HTMLDivElement = null;
-
-        /**  
-        * The numeric value for the LEFT button.
-        * @property LEFT_BUTTON
-        * @type Number
-        * @static
-        * @public
-        * @final
-        * @default 0
-        */
-        public static LEFT_BUTTON: number = 0;
-
-        /**  
-        * The numeric value for the MIDDLE button.
-        * @property MIDDLE_BUTTON
-        * @type Number
-        * @static
-        * @public 
-        * @final
-        * @default 1
-        */
-        public static MIDDLE_BUTTON: number = 1;
-
-        /**  
-        * The numeric value for the RIGHT button.
-        * @property RIGHT_BUTTON
-        * @type Number
-        * @static
-        * @public
-        * @final 
-        * @default 2
-        */
-        public static RIGHT_BUTTON: number = 2;
-         
-        /**
-        * A Signal that dispatches events when the mouse is pressed down on the stage.
-        * @property onDown 
-        * @type Kiwi.Signal
-        * @public
-        */
-        public onDown: Kiwi.Signal;
-        
-        /**
-        * A Signal that dispatches events when the mouse is released from being down on the stage.
-        * @property onUp 
-        * @type Kiwi.Signal
-        * @public
-        */
-        public onUp: Kiwi.Signal;
-
-        /**
-        * A Signal that dispatches events mouse wheel moves.
-        * @property onWheel 
-        * @type Kiwi.Signal
-        * @public
-        */
-        public onWheel: Kiwi.Signal;
-
-        /**
-        * The MouseCursor that is on the stage. This contains the coordinates and information about the cursor.
-        * @property _cursor
-        * @type Kiwi.Input.MouseCursor
-        * @private
-        */
-        private _cursor: Kiwi.Input.MouseCursor;
-
-        /**
-        * Returns the MouseCursor that is being used on the stage. This is READ ONLY.
-        * @property cursor
-        * @type Kiwi.Input.MouseCursor
-        * @private
-        */
-        public get cursor(): Kiwi.Input.MouseCursor {
-            return this._cursor;
-        }
-
-        /** 
-        * This method is executed when the DOM has finished loading and thus the MouseManager can start listening for events.
-        * @method boot
-        * @public
-        */
-        public boot() {
-
-            this._domElement = this._game.stage.container;
-
-            this._cursor = new Kiwi.Input.MouseCursor(this._game);
-            this._cursor.active = true;
-            this._cursor.id = 1;
-            
-            this.onDown = new Kiwi.Signal();
-            this.onUp = new Kiwi.Signal();
-            this.onWheel = new Kiwi.Signal();
-
-            this.start();
-        }
-
-        /**
-        * Indicates whether or not the cursor is currently down. This is READ ONLY.
-        * @property isDown
-        * @type boolean
-        * @default false
-        * @public
-        */
-        public get isDown(): boolean {
-            return this._cursor.isDown;
-        }
-
-        /**
-        * Indicates whether or not the cursor is currently up. This is READ ONLY.
-        * @property isUp
-        * @type boolean
-        * @default true
-        * @public
-        */
-        public get isUp(): boolean {
-            return this._cursor.isUp;
-        }
-
-        /**
-        * Gets the duration in Milliseconds that the mouse cursor has either been up or down for.
-        * @property duration
-        * @type number
-        * @public
-        */
-        public get duration(): number {
-            return this._cursor.duration;
-        }
-        
-        /**
-        * Gets the x coordinate of the mouse cursor.
-        * @property x
-        * @type number
-        * @public
-        */
-        public get x(): number {
-            return this._cursor.x;
-        }
-        
-        /**
-        * Gets the y coordinate of the mouse cursor.
-        * @property y
-        * @type number
-        * @public
-        */
-        public get y(): number {
-            return this._cursor.y;
-        }
-
-        /**
-        * Gets the wheelDeltaX coordinate of the mouse cursors wheel.
-        * @property wheelDeltaX
-        * @type number
-        * @public
-        */
-        public get wheelDeltaX(): number {
-            return this._cursor.wheelDeltaX;
-        }
-
-        /**
-        * Gets the wheelDeltaY coordinate of the mouse cursors wheel.
-        * @property wheelDeltaY
-        * @type number
-        * @public
-        */
-        public get wheelDeltaY(): number {
-            return this._cursor.wheelDeltaY;
-        }
-
-        /**
-        * Indicates if the ctrl key is down.
-        * @property ctrlKey
-        * @type boolean
-        * @default false
-        * @public
-        */
-        public get ctrlKey(): boolean {
-            return this._cursor.ctrlKey;
-        }
-
-        /**
-        * Indicates if the shift key is down.
-        * @property shiftKey
-        * @type boolean
-        * @default false
-        * @public
-        */
-        public get shiftKey(): boolean {
-            return this._cursor.shiftKey;
-        }
-
-        /**
-        * Indicates if the alt key is down.
-        * @property altKey
-        * @type boolean
-        * @default false
-        * @public
-        */
-        public get altKey(): boolean {
-            return this._cursor.altKey;
-        }
-
-        /**
-        * Returns a number indicating the button that was used. This can be used with the STATIC button properties.
-        * @property button
-        * @type number
-        * @public
-        */
-        public get button(): number {
-            return this._cursor.button;
-        }
-         
-        /**
-        * The update loop for the cursor.
-        * @method update
-        * @public
-        */
-        public update() { 
-            this._cursor.update();
-        }
-
-        /**  
-        * Start the mouse event listeners on the game. Automatically called by the boot.
-        * @method start 
-        * @public
-        */
-        public start() {
-            if (this._game.deviceTargetOption === Kiwi.TARGET_BROWSER) {
-                if (Kiwi.DEVICE.ie && Kiwi.DEVICE.ieVersion < 9) { //remove possibably?
-                    this._domElement.attachEvent('onmousedown', (event: MouseEvent) => this.onMouseDown(event));
-                    this._domElement.attachEvent('onmousemove', (event: MouseEvent) => this.onMouseMove(event));
-                    this._domElement.attachEvent('onmouseup', (event: MouseEvent) => this.onMouseUp(event));
-                    this._domElement.attachEvent('onmousewheel', (event: WheelEvent) => this.onMouseWheel(event));
-                } else {
-                    this._domElement.addEventListener('mousedown', (event: MouseEvent) => this.onMouseDown(event), true);
-                    this._domElement.addEventListener('mousemove', (event: MouseEvent) => this.onMouseMove(event), true);
-                    this._domElement.addEventListener('mouseup', (event: MouseEvent) => this.onMouseUp(event), true);
-                    this._domElement.addEventListener('mousewheel', (event: WheelEvent) => this.onMouseWheel(event), true);
-                    this._domElement.addEventListener('DOMMouseScroll', (event: WheelEvent) => this.onMouseWheel(event), true);
-                }
-            } else if (this._game.deviceTargetOption === Kiwi.TARGET_COCOON) {
-                this._game.stage.canvas.addEventListener('mousedown', (event: MouseEvent) => this.onMouseDown(event), true);
-                this._game.stage.canvas.addEventListener('mousemove', (event: MouseEvent) => this.onMouseMove(event), true);
-                this._game.stage.canvas.addEventListener('mouseup', (event: MouseEvent) => this.onMouseUp(event), true);
-                this._game.stage.canvas.addEventListener('mousewheel', (event: WheelEvent) => this.onMouseWheel(event), true);
-                this._game.stage.canvas.addEventListener('DOMMouseScroll', (event: WheelEvent) => this.onMouseWheel(event), true);
-            }
-        }
-
-        /**  
-        * Stops the mouse event listeners from working. Useful if you no longer want the mouse to 'work'/be listened to.
-        * @method stop 
-        * @public
-        */
-        public stop() {
-            if (this._game.deviceTargetOption === Kiwi.TARGET_BROWSER) {
-                this._domElement.removeEventListener('mousedown', (event: MouseEvent) => this.onMouseDown(event), false);
-                this._domElement.removeEventListener('mousedown', this.onMouseDown, false);
-                this._domElement.removeEventListener('mousemove', this.onMouseMove, false);
-                this._domElement.removeEventListener('mouseup', this.onMouseUp, false);
-                this._domElement.removeEventListener('mousewheel', this.onMouseWheel, false);
-                this._domElement.removeEventListener('DOMMouseScroll', this.onMouseWheel, false);
-            }
-        }
-
-        /**  
-        * Method that gets fired when the mouse is pressed on the stage.
-        * @method onMouseDown
-        * @param {MouseEvent} event. 
-        * @private
-        */
-        private onMouseDown(event: MouseEvent) { 
-            this._cursor.start(event); 
-            this.onDown.dispatch(this._cursor.x, this._cursor.y, this._cursor.timeDown, this._cursor.timeUp, this.duration, this._cursor); 
-        }
-
-        /**  
-        * Method that gets fired when the mouse moves anywhere on the stage.
-        * @method onMouseMove
-        * @param {MouseEvent} event. 
-        * @private
-        */
-        private onMouseMove(event: MouseEvent) {
-            event.preventDefault();
-            this._cursor.move(event);
-        }
-
-        /**  
-        * Method that gets fired when the mouse is released on the stage.
-        * @method onMouseUp
-        * @param {MouseEvent} event. 
-        * @private
-        */
-        private onMouseUp(event: MouseEvent) {
-            this._cursor.stop(event);
-            this.onUp.dispatch(this._cursor.x, this._cursor.y, this._cursor.timeDown, this._cursor.timeUp, this.duration, this._cursor); 
-        }
-        
-        /**  
-        * Method that gets fired when the mousewheel is moved.
-        * @method onMouseWheel
-        * @param {MouseEvent} event. 
-        * @private
-        */
-        private onMouseWheel(event: WheelEvent) {
-            this._cursor.wheel(event);
-            this.onWheel.dispatch(this._cursor.wheelDeltaX, this._cursor.wheelDeltaY, this._cursor);
-        }
-
-        /**  
-        * Returns a boolean indicating if the mouse was 'justPressed' within a certain timeframe. The default timeframe is 200 milliseconds.
-        * @method justPressed
-        * @param [duration=200] {Number} The timeframe that it could have occured in. 
-        * @return {boolean}
-        * @public
-        */
-        public justPressed(duration: number = this._cursor.justPressedRate): boolean { 
-            return this._cursor.justPressed(duration);
-        }
-
-        /**  
-        * Returns a boolean indicating if the mouse was 'justReleased' within a certain timeframe. The default timeframe is 200 milliseconds.
-        * @method justReleased
-        * @param [duration=200] {Number} The timeframe that it could have occured in.. 
-        * @return {boolean}
-        * @public
-        */
-        public justReleased(duration: number = this._cursor.justReleasedRate): boolean { 
-            return this._cursor.justReleased(duration); 
-        }
-
-        /** 
-        * Runs the Reset method on the MouseCursor.
-        * @method reset
-        * @public
-        */
-        public reset() {
-            this._cursor.reset();
-        }
-
-    }
-
-}
\ No newline at end of file
+	/**
+	* Handles the dispatching/management of Mouse Events on a game. When this class is instantiated a MouseCursor object is also created (on this object) which holds the information that is unique to the mouse cursor, although majority of that information is still accessible inside this object.
+	*
+	* @class Mouse
+	* @constructor
+	* @namespace Kiwi.Input
+	* @param game {Kiwi.Game} The game that this mouse manager belongs to.
+	* @return {Kiwi.Input.Mouse} 
+	*
+	*/
+	export class Mouse {
+
+		constructor (game: Kiwi.Game) {
+			this._game = game;
+		}
+
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} "Mouse"
+		* @public
+		*/
+		public objType() {
+			return "Mouse";
+		}
+
+		/**
+		* The game that this mouse manager belongs to.
+		* @property _game
+		* @type Kiwi.Game
+		* @private
+		*/
+		private _game: Kiwi.Game;
+
+		/**
+		* The HTMLElement that is being used to apply the mouse events to.
+		* @property _domElement
+		* @type HTMLDivElement
+		* @private
+		*/
+		private _domElement:HTMLDivElement = null;
+
+		/**  
+		* The numeric value for the LEFT button.
+		* @property LEFT_BUTTON
+		* @type Number
+		* @static
+		* @public
+		* @final
+		* @default 0
+		*/
+		public static LEFT_BUTTON: number = 0;
+
+		/**  
+		* The numeric value for the MIDDLE button.
+		* @property MIDDLE_BUTTON
+		* @type Number
+		* @static
+		* @public 
+		* @final
+		* @default 1
+		*/
+		public static MIDDLE_BUTTON: number = 1;
+
+		/**  
+		* The numeric value for the RIGHT button.
+		* @property RIGHT_BUTTON
+		* @type Number
+		* @static
+		* @public
+		* @final 
+		* @default 2
+		*/
+		public static RIGHT_BUTTON: number = 2;
+
+		/**
+		* A Signal that dispatches events when the mouse is pressed down on the stage.
+		* @property onDown 
+		* @type Kiwi.Signal
+		* @public
+		*/
+		public onDown: Kiwi.Signal;
+
+		/**
+		* A Signal that dispatches events when the mouse is released from being down on the stage.
+		* @property onUp 
+		* @type Kiwi.Signal
+		* @public
+		*/
+		public onUp: Kiwi.Signal;
+
+		/**
+		* A Signal that dispatches events mouse wheel moves.
+		* @property onWheel 
+		* @type Kiwi.Signal
+		* @public
+		*/
+		public onWheel: Kiwi.Signal;
+
+		/**
+		* The MouseCursor that is on the stage. This contains the coordinates and information about the cursor.
+		* @property _cursor
+		* @type Kiwi.Input.MouseCursor
+		* @private
+		*/
+		private _cursor: Kiwi.Input.MouseCursor;
+
+		/**
+		* Returns the MouseCursor that is being used on the stage. This is READ ONLY.
+		* @property cursor
+		* @type Kiwi.Input.MouseCursor
+		* @private
+		*/
+		public get cursor(): Kiwi.Input.MouseCursor {
+			return this._cursor;
+		}
+
+		/** 
+		* This method is executed when the DOM has finished loading and thus the MouseManager can start listening for events.
+		* @method boot
+		* @public
+		*/
+		public boot() {
+
+			this._domElement = this._game.stage.container;
+
+			this._cursor = new Kiwi.Input.MouseCursor(this._game);
+			this._cursor.active = true;
+			this._cursor.id = 1;
+			
+			this.onDown = new Kiwi.Signal();
+			this.onUp = new Kiwi.Signal();
+			this.onWheel = new Kiwi.Signal();
+
+			this.start();
+		}
+
+		/**
+		* Indicates whether or not the cursor is currently down. This is READ ONLY.
+		* @property isDown
+		* @type boolean
+		* @default false
+		* @public
+		*/
+		public get isDown(): boolean {
+			return this._cursor.isDown;
+		}
+
+		/**
+		* Indicates whether or not the cursor is currently up. This is READ ONLY.
+		* @property isUp
+		* @type boolean
+		* @default true
+		* @public
+		*/
+		public get isUp(): boolean {
+			return this._cursor.isUp;
+		}
+
+		/**
+		* Gets the duration in Milliseconds that the mouse cursor has either been up or down for.
+		* @property duration
+		* @type number
+		* @public
+		*/
+		public get duration(): number {
+			return this._cursor.duration;
+		}
+
+		/**
+		* Gets the x coordinate of the mouse cursor.
+		* @property x
+		* @type number
+		* @public
+		*/
+		public get x(): number {
+			return this._cursor.x;
+		}
+
+		/**
+		* Gets the y coordinate of the mouse cursor.
+		* @property y
+		* @type number
+		* @public
+		*/
+		public get y(): number {
+			return this._cursor.y;
+		}
+
+		/**
+		* Gets the wheelDeltaX coordinate of the mouse cursors wheel.
+		* @property wheelDeltaX
+		* @type number
+		* @public
+		*/
+		public get wheelDeltaX(): number {
+			return this._cursor.wheelDeltaX;
+		}
+
+		/**
+		* Gets the wheelDeltaY coordinate of the mouse cursors wheel.
+		* @property wheelDeltaY
+		* @type number
+		* @public
+		*/
+		public get wheelDeltaY(): number {
+			return this._cursor.wheelDeltaY;
+		}
+
+		/**
+		* Indicates if the ctrl key is down.
+		* @property ctrlKey
+		* @type boolean
+		* @default false
+		* @public
+		*/
+		public get ctrlKey(): boolean {
+			return this._cursor.ctrlKey;
+		}
+
+		/**
+		* Indicates if the shift key is down.
+		* @property shiftKey
+		* @type boolean
+		* @default false
+		* @public
+		*/
+		public get shiftKey(): boolean {
+			return this._cursor.shiftKey;
+		}
+
+		/**
+		* Indicates if the alt key is down.
+		* @property altKey
+		* @type boolean
+		* @default false
+		* @public
+		*/
+		public get altKey(): boolean {
+			return this._cursor.altKey;
+		}
+
+		/**
+		* Returns a number indicating the button that was used. This can be used with the STATIC button properties.
+		* @property button
+		* @type number
+		* @public
+		*/
+		public get button(): number {
+			return this._cursor.button;
+		}
+
+		/**
+		* The update loop for the cursor.
+		* @method update
+		* @public
+		*/
+		public update() { 
+			this._cursor.update();
+		}
+
+		/**  
+		* Start the mouse event listeners on the game. Automatically called by the boot.
+		* @method start 
+		* @public
+		*/
+		public start() {
+			if (this._game.deviceTargetOption === Kiwi.TARGET_BROWSER) {
+				if (Kiwi.DEVICE.ie && Kiwi.DEVICE.ieVersion < 9) { //remove possibably?
+					this._domElement.attachEvent('onmousedown', (event: MouseEvent) => this.onMouseDown(event));
+					this._domElement.attachEvent('onmousemove', (event: MouseEvent) => this.onMouseMove(event));
+					this._domElement.attachEvent('onmouseup', (event: MouseEvent) => this.onMouseUp(event));
+					this._domElement.attachEvent('onmousewheel', (event: WheelEvent) => this.onMouseWheel(event));
+				} else {
+					this._domElement.addEventListener('mousedown', (event: MouseEvent) => this.onMouseDown(event), true);
+					this._domElement.addEventListener('mousemove', (event: MouseEvent) => this.onMouseMove(event), true);
+					this._domElement.addEventListener('mouseup', (event: MouseEvent) => this.onMouseUp(event), true);
+					this._domElement.addEventListener('mousewheel', (event: WheelEvent) => this.onMouseWheel(event), true);
+					this._domElement.addEventListener('DOMMouseScroll', (event: WheelEvent) => this.onMouseWheel(event), true);
+				}
+			} else if (this._game.deviceTargetOption === Kiwi.TARGET_COCOON) {
+				this._game.stage.canvas.addEventListener('mousedown', (event: MouseEvent) => this.onMouseDown(event), true);
+				this._game.stage.canvas.addEventListener('mousemove', (event: MouseEvent) => this.onMouseMove(event), true);
+				this._game.stage.canvas.addEventListener('mouseup', (event: MouseEvent) => this.onMouseUp(event), true);
+				this._game.stage.canvas.addEventListener('mousewheel', (event: WheelEvent) => this.onMouseWheel(event), true);
+				this._game.stage.canvas.addEventListener('DOMMouseScroll', (event: WheelEvent) => this.onMouseWheel(event), true);
+			}
+		}
+
+		/**  
+		* Stops the mouse event listeners from working. Useful if you no longer want the mouse to 'work'/be listened to.
+		* @method stop 
+		* @public
+		*/
+		public stop() {
+			if (this._game.deviceTargetOption === Kiwi.TARGET_BROWSER) {
+				this._domElement.removeEventListener('mousedown', (event: MouseEvent) => this.onMouseDown(event), false);
+				this._domElement.removeEventListener('mousedown', this.onMouseDown, false);
+				this._domElement.removeEventListener('mousemove', this.onMouseMove, false);
+				this._domElement.removeEventListener('mouseup', this.onMouseUp, false);
+				this._domElement.removeEventListener('mousewheel', this.onMouseWheel, false);
+				this._domElement.removeEventListener('DOMMouseScroll', this.onMouseWheel, false);
+			}
+		}
+
+		/**  
+		* Method that gets fired when the mouse is pressed on the stage.
+		* @method onMouseDown
+		* @param {MouseEvent} event. 
+		* @private
+		*/
+		private onMouseDown(event: MouseEvent) { 
+			this._cursor.start(event); 
+			this.onDown.dispatch(this._cursor.x, this._cursor.y, this._cursor.timeDown, this._cursor.timeUp, this.duration, this._cursor); 
+		}
+
+		/**  
+		* Method that gets fired when the mouse moves anywhere on the stage.
+		* @method onMouseMove
+		* @param {MouseEvent} event. 
+		* @private
+		*/
+		private onMouseMove(event: MouseEvent) {
+			event.preventDefault();
+			this._cursor.move(event);
+		}
+
+		/**  
+		* Method that gets fired when the mouse is released on the stage.
+		* @method onMouseUp
+		* @param {MouseEvent} event. 
+		* @private
+		*/
+		private onMouseUp(event: MouseEvent) {
+			this._cursor.stop(event);
+			this.onUp.dispatch(this._cursor.x, this._cursor.y, this._cursor.timeDown, this._cursor.timeUp, this.duration, this._cursor); 
+		}
+
+		/**  
+		* Method that gets fired when the mousewheel is moved.
+		* @method onMouseWheel
+		* @param {MouseEvent} event. 
+		* @private
+		*/
+		private onMouseWheel(event: WheelEvent) {
+			this._cursor.wheel(event);
+			this.onWheel.dispatch(this._cursor.wheelDeltaX, this._cursor.wheelDeltaY, this._cursor);
+		}
+
+		/**  
+		* Returns a boolean indicating if the mouse was 'justPressed' within a certain timeframe. The default timeframe is 200 milliseconds.
+		* @method justPressed
+		* @param [duration=200] {Number} The timeframe that it could have occured in. 
+		* @return {boolean}
+		* @public
+		*/
+		public justPressed(duration: number = this._cursor.justPressedRate): boolean { 
+			return this._cursor.justPressed(duration);
+		}
+
+		/**  
+		* Returns a boolean indicating if the mouse was 'justReleased' within a certain timeframe. The default timeframe is 200 milliseconds.
+		* @method justReleased
+		* @param [duration=200] {Number} The timeframe that it could have occured in.. 
+		* @return {boolean}
+		* @public
+		*/
+		public justReleased(duration: number = this._cursor.justReleasedRate): boolean { 
+			return this._cursor.justReleased(duration); 
+		}
+
+		/** 
+		* Runs the Reset method on the MouseCursor.
+		* @method reset
+		* @public
+		*/
+		public reset() {
+			this._cursor.reset();
+		}
+
+	}
+
+}
diff --git a/src/input/MouseCursor.ts b/src/input/MouseCursor.ts
index 4bcf53b..cbad5bb 100644
--- a/src/input/MouseCursor.ts
+++ b/src/input/MouseCursor.ts
@@ -3,160 +3,160 @@
 * @module Kiwi
 * @submodule Input
 * 
-*/ 
+*/
 
 module Kiwi.Input {
-    
-    /**
-    * Holds the information about a Mouse Cursor, such as the position of the
-    * cursor, the mouse wheel's delta, the button that was used, e.t.c.
-    * Note: A mouse cursor is always active.
-    *
-    * @class MouseCursor
-    * @namespace Kiwi.Input
-    * @extends Pointer
-    */
-    export class MouseCursor extends Pointer {
-
-        /**
-        * The type of object this class is.
-        * @method objType
-        * @return {string} "MouseCursor"
-        * @public
-        */
-        public objType(): string {
-            return "MouseCursor";
-        }
-
-        /**
-        * The offset of the mouse wheel on the X axis.
-        * @property wheelDeltaX
-        * @type number
-        * @default 0 
-        * @public
-        */
-        public wheelDeltaX: number = 0;
-
-        /**
-        * The offset of the mouse wheel on the Y axis.
-        * @property wheelDeltaY
-        * @type number
-        * @default 0 
-        * @public
-        */
-        public wheelDeltaY: number = 0;
-
-        /**
-        * If the ctrl key is down.
-        * @property ctrlKey
-        * @type boolean
-        * @public
-        */
-        public ctrlKey: boolean;
-
-        /**
-        * If the shift key is down.
-        * @property shiftKey
-        * @type boolean
-        * @public
-        */
-        public shiftKey: boolean;
-
-        /**
-        * If the alt key is down.
-        * @property altKey
-        * @type boolean
-        * @public
-        */
-        public altKey: boolean;
-
-        /**
-        * The button that got pressed. Eg. If the LEFT mouse button was pressed this number would be 0
-        * @property button
-        * @type number
-        * @public
-        */
-        public button: number;
-
-        /**
-        * Indicates if the "preventDefault" method should be executed whenever a 'down' mouse event occurs.
-        * @property preventDown
-        * @type boolean
-        * @public
-        */
-        public preventDown: boolean = true;
-
-        /**
-        * Indicates if the "preventDefault" method should be executed whenever a 'up' mouse event occurs.
-        * @property preventUp
-        * @type boolean
-        * @public
-        */
-        public preventUp: boolean = true;
-
-        /**
-        * Indicates if the "preventDefault" method should be executed whenever a 'wheel' mouse event occurs.
-        * @property preventWheel
-        * @type boolean
-        * @public
-        */
-        public preventWheel: boolean = true;
-
-        /**
-        * Gets executed when the mouse cursor gets initally pressed.
-        * @method start
-        * @param {event} event
-        * @public
-        */
-        public start(event) {
-
-            if (this.preventDown)  event.preventDefault();
-            
-            this.ctrlKey = event.ctrlKey;
-            this.shiftKey = event.shiftKey;
-            this.altKey = event.altKey;
-            this.button = event.button;
-
-            super.start(event);
-        }
-        
-        /**
-        * Gets executed when the mouse cursor gets initally released.
-        * @method stop
-        * @param {event} event
-        * @public
-        */
-        public stop(event) {
-
-            if (this.preventUp)  event.preventDefault();
-
-            this.move(event);
-            super.stop(event);
-        }
-
-        /**
-        * When the mouse wheel event fires and the mouse's delta changes.
-        * @method wheel
-        * @param {event} event
-        * @public
-        */
-        public wheel(event) { 
-
-            if (this.preventWheel)  event.preventDefault();
-
-            if (event['wheelDeltaX']) {
-                this.wheelDeltaX = event['wheelDeltaX'];
-            } else {
-                this.wheelDeltaX = event.deltaX;
-            }
-
-            if (event['wheelDeltaY']) {
-                this.wheelDeltaY = event['wheelDeltaY'];
-            } else {
-                this.wheelDeltaY = event.deltaY;
-            }
-        }
-
-    }
+
+	/**
+	* Holds the information about a Mouse Cursor, such as the position of the
+	* cursor, the mouse wheel's delta, the button that was used, e.t.c.
+	* Note: A mouse cursor is always active.
+	*
+	* @class MouseCursor
+	* @namespace Kiwi.Input
+	* @extends Pointer
+	*/
+	export class MouseCursor extends Pointer {
+
+		/**
+		* The type of object this class is.
+		* @method objType
+		* @return {string} "MouseCursor"
+		* @public
+		*/
+		public objType(): string {
+			return "MouseCursor";
+		}
+
+		/**
+		* The offset of the mouse wheel on the X axis.
+		* @property wheelDeltaX
+		* @type number
+		* @default 0 
+		* @public
+		*/
+		public wheelDeltaX: number = 0;
+
+		/**
+		* The offset of the mouse wheel on the Y axis.
+		* @property wheelDeltaY
+		* @type number
+		* @default 0 
+		* @public
+		*/
+		public wheelDeltaY: number = 0;
+
+		/**
+		* If the ctrl key is down.
+		* @property ctrlKey
+		* @type boolean
+		* @public
+		*/
+		public ctrlKey: boolean;
+
+		/**
+		* If the shift key is down.
+		* @property shiftKey
+		* @type boolean
+		* @public
+		*/
+		public shiftKey: boolean;
+
+		/**
+		* If the alt key is down.
+		* @property altKey
+		* @type boolean
+		* @public
+		*/
+		public altKey: boolean;
+
+		/**
+		* The button that got pressed. Eg. If the LEFT mouse button was pressed this number would be 0
+		* @property button
+		* @type number
+		* @public
+		*/
+		public button: number;
+
+		/**
+		* Indicates if the "preventDefault" method should be executed whenever a 'down' mouse event occurs.
+		* @property preventDown
+		* @type boolean
+		* @public
+		*/
+		public preventDown: boolean = true;
+
+		/**
+		* Indicates if the "preventDefault" method should be executed whenever a 'up' mouse event occurs.
+		* @property preventUp
+		* @type boolean
+		* @public
+		*/
+		public preventUp: boolean = true;
+
+		/**
+		* Indicates if the "preventDefault" method should be executed whenever a 'wheel' mouse event occurs.
+		* @property preventWheel
+		* @type boolean
+		* @public
+		*/
+		public preventWheel: boolean = true;
+
+		/**
+		* Gets executed when the mouse cursor gets initally pressed.
+		* @method start
+		* @param {event} event
+		* @public
+		*/
+		public start(event) {
+
+			if (this.preventDown)  event.preventDefault();
+
+			this.ctrlKey = event.ctrlKey;
+			this.shiftKey = event.shiftKey;
+			this.altKey = event.altKey;
+			this.button = event.button;
+
+			super.start(event);
+		}
+
+		/**
+		* Gets executed when the mouse cursor gets initally released.
+		* @method stop
+		* @param {event} event
+		* @public
+		*/
+		public stop(event) {
+
+			if (this.preventUp)  event.preventDefault();
+
+			this.move(event);
+			super.stop(event);
+		}
+
+		/**
+		* When the mouse wheel event fires and the mouse's delta changes.
+		* @method wheel
+		* @param {event} event
+		* @public
+		*/
+		public wheel(event) { 
+
+			if (this.preventWheel)  event.preventDefault();
+
+			if (event['wheelDeltaX']) {
+				this.wheelDeltaX = event['wheelDeltaX'];
+			} else {
+				this.wheelDeltaX = event.deltaX;
+			}
+
+			if (event['wheelDeltaY']) {
+				this.wheelDeltaY = event['wheelDeltaY'];
+			} else {
+				this.wheelDeltaY = event.deltaY;
+			}
+		}
+
+	}
 
 }
diff --git a/src/input/Pointer.ts b/src/input/Pointer.ts
index 3507f1e..a96c019 100644
--- a/src/input/Pointer.ts
+++ b/src/input/Pointer.ts
@@ -3,406 +3,406 @@
 * @module Kiwi
 * @submodule Input
 * 
-*/ 
+*/
 
 module Kiwi.Input {
 
-    /**
-    * Is a generic class that holds the properties/methods that are common across various different methods of inputs from the user, mainly between Touch and Mouse based events. This abstract class and such it is suppose to be extended from for individual implementations. 
-    *
-    * @class Pointer
-    * @constructor
-    * @namespace Kiwi.Input
-    * @param {Kiwi.Game} game
-    * @return {Kiwi.Input.Pointer}
-    *
-    */
-    export class Pointer {
-
-        constructor(game:Kiwi.Game) {
-            this._game = game;
-            this.point = new Kiwi.Geom.Point();
-            this.circle = new Kiwi.Geom.Circle(0, 0, 1);
-            this.startPoint = new Kiwi.Geom.Point();
-            this.endPoint = new Kiwi.Geom.Point();
-        }
-
-        /**
-        * The type of object this class is.
-        * @method objType
-        * @return {string} "Pointer"
-        * @public
-        */
-        public objType():string {
-            return "Pointer";
-        }
-
-        /**
-        * The game that this pointer belongs to.
-        * @property _game
-        * @type Game
-        * @private
-        */
-        private _game: Kiwi.Game;
-
-        /**
-        * Get the game that this pointer belongs to.
-        * @type Game
-        * @public
-        */
-        public get game(): Kiwi.Game {
-            return this._game;
-        }
-
-        /**
-        * The unique identifier for this pointer.
-        * @property _id
-        * @type number
-        * @private
-        */
-        public id: number;
-
-        /**
-        * The horizontal coordinate of point relative to the game element
-        * @property x
-        * @type Number
-        * @default -1
-        * @public
-        */
-        public x: number = -1;
-
-        /**
-        * The vertical coordinate of point relative to the game element
-        * @property y
-        * @type Number
-        * @default -1
-        * @public
-        */
-        public y: number = -1;
-
-        /**
-        * The horizontal coordinate of point relative to the viewport in pixels, excluding any scroll offset
-        * @property clientX
-        * @type Number
-        * @default -1
-        * @public
-        */
-        public clientX: number = -1;
-
-        /**
-        * The vertical coordinate of point relative to the viewport in pixels, excluding any scroll offset
-        * @property clientY
-        * @type Number
-        * @default -1
-        * @public
-        */
-        public clientY: number = -1;
-
-        /**
-        * The horizontal coordinate of point relative to the viewport in pixels, including any scroll offset
-        * @property pageX
-        * @type Number
-        * @default -1
-        * @public
-        */
-        public pageX: number = -1;
-
-        /**
-        * The vertical coordinate of point relative to the viewport in pixels, including any scroll offset
-        * @property pageY
-        * @type Number
-        * @default -1
-        * @public
-        */
-        public pageY: number = -1;
-
-        /**
-        * The horizontal coordinate of point relative to the screen in pixels
-        * @property screenX
-        * @type Number
-        * @default -1
-        * @public
-        */
-        public screenX: number = -1;
-
-        /**
-        * The vertical coordinate of point relative to the screen in pixels
-        * @property screenY
-        * @type Number
-        * @default -1
-        * @public
-        */
-        public screenY: number = -1;
-
-        /**
-        * The point that this pointer is at. Same coordinates as X/Y properties.
-        * @property point
-        * @type Kiwi.Geom.Point
-        * @public
-        */
-        public point: Kiwi.Geom.Point;
-
-        /**
-        * A circle that is representative of the area this point covers.
-        * @property circle
-        * @type Kiwi.Geom.Circle
-        * @public
-        */
-        public circle: Kiwi.Geom.Circle;
-
-        /**
-        * Indicates if this pointer is currently down.
-        * @property isDown
-        * @type boolean
-        * @default false
-        * @public
-        */
-        public isDown: boolean = false;
-
-        /**
-        * Indicates if this pointer is currently up.
-        * @property isUp
-        * @default true
-        * @type boolean
-        * @public
-        */
-        public isUp: boolean = true;
-
-        /**
-        * Indicates if this pointer is currently within the game.
-        * @property withinGame
-        * @type boolean
-        * @default false
-        * @public
-        */
-        public withinGame: boolean = false;
-
-        /**
-        * Indicates if this pointer is active. Note a mouse is always 'active' where as a finger is only active when it is down.
-        * @property active
-        * @type boolean
-        * @default false
-        * @public
-        */
-        public active: boolean = false;
-
-        /**
-        * Indicates the time that the pointer was pressed initially.
-        * @property timeDown
-        * @type number
-        * @default 0
-        * @public
-        */
-        public timeDown: number = 0;
-
-        /**
-        * Indicates the time that the pointer was released initially.
-        * @property timeUp
-        * @type number
-        * @default 0
-        * @public
-        */
-        public timeUp: number = 0;
-
-        /**
-        * The duration that the pointer has been down for in milliseconds.
-        * @property duration
-        * @type number
-        * @default 0
-        * @public
-        */
-        public duration: number = 0;
-
-        /**
-        * The duration that the pointer has been down for in frames.
-        * @property frameDuration
-        * @type number
-        * @default 0
-        * @public
-        */
-        public frameDuration: number = 0;
-
-        /**
-        * A time that is used to calculate if someone justPressed the pointer.
-        * @property justPressedRate
-        * @type number
-        * @defeault 200
-        * @public
-        */
-        public justPressedRate: number = 200;
-
-        /**
-        * A time that is used to calculate if someone justReleased the pointer.
-        * @property justReleasedRate
-        * @type number
-        * @default 200
-        * @public
-        */
-        public justReleasedRate: number = 200;
-
-        /**
-        * The points inital coordinates when pressed down.
-        * @property startPoint
-        * @type Kiwi.Geom.Point
-        * @public
-        */
-        public startPoint: Kiwi.Geom.Point;
-
-        /**
-        * The coordinates where the user released the pointer.
-        * @property endPoint
-        * @type Kiwi.Geom.Point
-        * @public
-        */
-        public endPoint: Kiwi.Geom.Point;
-
-        /**
-        * The method that gets executed when the pointer presses/initially goes down on the screen.
-        * From the event passed the coordinates are calculated.
-        * @method start
-        * @param {event} event
-        * @public
-        */
-        public start(event) {
-            this.move(event); 
-            this.startPoint.setTo(this.x, this.y);
-            this.frameDuration = 0;
-            this.withinGame = true;
-            this.isDown = true;
-            this.isUp = false;
-            this.timeDown = this.game.time.now();
-        }
-
-        /**
-        * The stop method is to be called when the pointer gets released initially. 
-        * @method stop
-        * @param {event} event
-        * @public
-        */
-        public stop(event) {
-            this.withinGame = false;
-            this.endPoint.setTo(this.x, this.y);
-            this.isDown = false;
-            this.isUp = true;
-
-            this.timeUp = this.game.time.now();
-            this.duration = this.timeUp - this.timeDown;
-        }
-
-        /**
-        * Used to get the cooridnates of a pointer and inputs them to the correct properties.  
-        * @method move
-        * @param {event} event
-        * @public
-        */
-        public move(event) { 
-            this.clientX = event.clientX;
-            this.clientY = event.clientY;
-
-            this.pageX = event.pageX;
-            this.pageY = event.pageY;
-
-            this.screenX = event.screenX;
-            this.screenY = event.screenY;
-
-            this.x = (this.pageX - this.game.stage.offset.x) * this.game.stage.scaleX;
-            this.y = (this.pageY - this.game.stage.offset.y) * this.game.stage.scaleY;
-
-            this.point.setTo(this.x, this.y);
-            this.circle.x = this.x;
-            this.circle.y = this.y;
-
-            this.duration = this.game.time.now() - this.timeDown;
-        }
-
-        /**
-        * Indicates if the pointer was just pressed. This is based of the justPressedRate unless otherwise specifieds.
-        * @method justPressed
-        * @param {Number} duration
-        * @return boolean
-        * @public
-        */
-        public justPressed(duration: number = this.justPressedRate): boolean {
-
-            if (this.isDown === true && (this.timeDown + duration) > this._game.time.now()) {
-                return true;
-            } else {
-                return false;
-            }
-
-        }
-
-        /**
-        * Indicates if the pointer was just released. This is based of the justReleasedRate unless otherwise specified.
-        * @method justReleased
-        * @param {Number} duration
-        * @return boolean
-        * @public
-        */
-        public justReleased(duration: number = this.justReleasedRate): boolean {
-
-            if (this.isUp === true && (this.timeUp + duration) > this._game.time.now()) {
-                return true;
-            } else {
-                return false;
-            }
-
-        }
-
-        /**
-        * READ ONLY: Indicates if this pointer was pressed on the last frame or not. 
-        * This is only true on the frame that the point was 'justPressed' and is not a constant like 'isDown'
-        *
-        * @property pressed
-        * @type boolean
-        * @readOnly
-        * @public
-        */
-        public get pressed():boolean {
-            return ( this.timeDown >= this._game.time.now() - this._game.time.delta() );
-        }
-        
-
-        /**
-        * READ ONLY: Indicates if this pointer was released on the last frame or not. 
-        * This is only true on the frame that the point was 'justReleased' and is not a constant like 'isUp'
-        *
-        * @property released
-        * @type boolean
-        * @readOnly
-        * @public
-        */
-        public get released(): boolean {
-            return ( this.timeUp >= this._game.time.now() - this._game.time.delta() );
-        }
-
-        
-        /**
-        * Resets the pointer properties to the default ones. Assumes that the pointer is no longer down.
-        * @method reset
-        * @public
-        */
-        public reset() {
-            this.isDown = false;
-            this.isUp = true;
-            this.timeDown = 0;
-            this.timeUp = 0;
-            this.duration = 0;
-            this.frameDuration = 0;
-        }
-
-        /**
-        * The update loop for the pointer. Used only if down to update the duration.
-        * @method update
-        * @public
-        */
-        public update() {
-            if (this.isDown === true) {
-                this.frameDuration ++;
-                this.duration = this._game.time.now() - this.timeDown;
-            } 
-        }
-
-    }
+	/**
+	* Is a generic class that holds the properties/methods that are common across various different methods of inputs from the user, mainly between Touch and Mouse based events. This abstract class and such it is suppose to be extended from for individual implementations. 
+	*
+	* @class Pointer
+	* @constructor
+	* @namespace Kiwi.Input
+	* @param {Kiwi.Game} game
+	* @return {Kiwi.Input.Pointer}
+	*
+	*/
+	export class Pointer {
+
+		constructor(game:Kiwi.Game) {
+			this._game = game;
+			this.point = new Kiwi.Geom.Point();
+			this.circle = new Kiwi.Geom.Circle(0, 0, 1);
+			this.startPoint = new Kiwi.Geom.Point();
+			this.endPoint = new Kiwi.Geom.Point();
+		}
+
+		/**
+		* The type of object this class is.
+		* @method objType
+		* @return {string} "Pointer"
+		* @public
+		*/
+		public objType():string {
+			return "Pointer";
+		}
+
+		/**
+		* The game that this pointer belongs to.
+		* @property _game
+		* @type Game
+		* @private
+		*/
+		private _game: Kiwi.Game;
+
+		/**
+		* Get the game that this pointer belongs to.
+		* @type Game
+		* @public
+		*/
+		public get game(): Kiwi.Game {
+			return this._game;
+		}
+
+		/**
+		* The unique identifier for this pointer.
+		* @property _id
+		* @type number
+		* @private
+		*/
+		public id: number;
+
+		/**
+		* The horizontal coordinate of point relative to the game element
+		* @property x
+		* @type Number
+		* @default -1
+		* @public
+		*/
+		public x: number = -1;
+
+		/**
+		* The vertical coordinate of point relative to the game element
+		* @property y
+		* @type Number
+		* @default -1
+		* @public
+		*/
+		public y: number = -1;
+
+		/**
+		* The horizontal coordinate of point relative to the viewport in pixels, excluding any scroll offset
+		* @property clientX
+		* @type Number
+		* @default -1
+		* @public
+		*/
+		public clientX: number = -1;
+
+		/**
+		* The vertical coordinate of point relative to the viewport in pixels, excluding any scroll offset
+		* @property clientY
+		* @type Number
+		* @default -1
+		* @public
+		*/
+		public clientY: number = -1;
+
+		/**
+		* The horizontal coordinate of point relative to the viewport in pixels, including any scroll offset
+		* @property pageX
+		* @type Number
+		* @default -1
+		* @public
+		*/
+		public pageX: number = -1;
+
+		/**
+		* The vertical coordinate of point relative to the viewport in pixels, including any scroll offset
+		* @property pageY
+		* @type Number
+		* @default -1
+		* @public
+		*/
+		public pageY: number = -1;
+
+		/**
+		* The horizontal coordinate of point relative to the screen in pixels
+		* @property screenX
+		* @type Number
+		* @default -1
+		* @public
+		*/
+		public screenX: number = -1;
+
+		/**
+		* The vertical coordinate of point relative to the screen in pixels
+		* @property screenY
+		* @type Number
+		* @default -1
+		* @public
+		*/
+		public screenY: number = -1;
+
+		/**
+		* The point that this pointer is at. Same coordinates as X/Y properties.
+		* @property point
+		* @type Kiwi.Geom.Point
+		* @public
+		*/
+		public point: Kiwi.Geom.Point;
+
+		/**
+		* A circle that is representative of the area this point covers.
+		* @property circle
+		* @type Kiwi.Geom.Circle
+		* @public
+		*/
+		public circle: Kiwi.Geom.Circle;
+
+		/**
+		* Indicates if this pointer is currently down.
+		* @property isDown
+		* @type boolean
+		* @default false
+		* @public
+		*/
+		public isDown: boolean = false;
+
+		/**
+		* Indicates if this pointer is currently up.
+		* @property isUp
+		* @default true
+		* @type boolean
+		* @public
+		*/
+		public isUp: boolean = true;
+
+		/**
+		* Indicates if this pointer is currently within the game.
+		* @property withinGame
+		* @type boolean
+		* @default false
+		* @public
+		*/
+		public withinGame: boolean = false;
+
+		/**
+		* Indicates if this pointer is active. Note a mouse is always 'active' where as a finger is only active when it is down.
+		* @property active
+		* @type boolean
+		* @default false
+		* @public
+		*/
+		public active: boolean = false;
+
+		/**
+		* Indicates the time that the pointer was pressed initially.
+		* @property timeDown
+		* @type number
+		* @default 0
+		* @public
+		*/
+		public timeDown: number = 0;
+
+		/**
+		* Indicates the time that the pointer was released initially.
+		* @property timeUp
+		* @type number
+		* @default 0
+		* @public
+		*/
+		public timeUp: number = 0;
+
+		/**
+		* The duration that the pointer has been down for in milliseconds.
+		* @property duration
+		* @type number
+		* @default 0
+		* @public
+		*/
+		public duration: number = 0;
+
+		/**
+		* The duration that the pointer has been down for in frames.
+		* @property frameDuration
+		* @type number
+		* @default 0
+		* @public
+		*/
+		public frameDuration: number = 0;
+
+		/**
+		* A time that is used to calculate if someone justPressed the pointer.
+		* @property justPressedRate
+		* @type number
+		* @defeault 200
+		* @public
+		*/
+		public justPressedRate: number = 200;
+
+		/**
+		* A time that is used to calculate if someone justReleased the pointer.
+		* @property justReleasedRate
+		* @type number
+		* @default 200
+		* @public
+		*/
+		public justReleasedRate: number = 200;
+
+		/**
+		* The points inital coordinates when pressed down.
+		* @property startPoint
+		* @type Kiwi.Geom.Point
+		* @public
+		*/
+		public startPoint: Kiwi.Geom.Point;
+
+		/**
+		* The coordinates where the user released the pointer.
+		* @property endPoint
+		* @type Kiwi.Geom.Point
+		* @public
+		*/
+		public endPoint: Kiwi.Geom.Point;
+
+		/**
+		* The method that gets executed when the pointer presses/initially goes down on the screen.
+		* From the event passed the coordinates are calculated.
+		* @method start
+		* @param {event} event
+		* @public
+		*/
+		public start(event) {
+			this.move(event); 
+			this.startPoint.setTo(this.x, this.y);
+			this.frameDuration = 0;
+			this.withinGame = true;
+			this.isDown = true;
+			this.isUp = false;
+			this.timeDown = this.game.time.now();
+		}
+
+		/**
+		* The stop method is to be called when the pointer gets released initially. 
+		* @method stop
+		* @param {event} event
+		* @public
+		*/
+		public stop(event) {
+			this.withinGame = false;
+			this.endPoint.setTo(this.x, this.y);
+			this.isDown = false;
+			this.isUp = true;
+
+			this.timeUp = this.game.time.now();
+			this.duration = this.timeUp - this.timeDown;
+		}
+
+		/**
+		* Used to get the cooridnates of a pointer and inputs them to the correct properties.  
+		* @method move
+		* @param {event} event
+		* @public
+		*/
+		public move(event) { 
+			this.clientX = event.clientX;
+			this.clientY = event.clientY;
+
+			this.pageX = event.pageX;
+			this.pageY = event.pageY;
+
+			this.screenX = event.screenX;
+			this.screenY = event.screenY;
+
+			this.x = (this.pageX - this.game.stage.offset.x) * this.game.stage.scaleX;
+			this.y = (this.pageY - this.game.stage.offset.y) * this.game.stage.scaleY;
+
+			this.point.setTo(this.x, this.y);
+			this.circle.x = this.x;
+			this.circle.y = this.y;
+
+			this.duration = this.game.time.now() - this.timeDown;
+		}
+
+		/**
+		* Indicates if the pointer was just pressed. This is based of the justPressedRate unless otherwise specifieds.
+		* @method justPressed
+		* @param {Number} duration
+		* @return boolean
+		* @public
+		*/
+		public justPressed(duration: number = this.justPressedRate): boolean {
+
+			if (this.isDown === true && (this.timeDown + duration) > this._game.time.now()) {
+				return true;
+			} else {
+				return false;
+			}
+
+		}
+
+		/**
+		* Indicates if the pointer was just released. This is based of the justReleasedRate unless otherwise specified.
+		* @method justReleased
+		* @param {Number} duration
+		* @return boolean
+		* @public
+		*/
+		public justReleased(duration: number = this.justReleasedRate): boolean {
+
+			if (this.isUp === true && (this.timeUp + duration) > this._game.time.now()) {
+				return true;
+			} else {
+				return false;
+			}
+
+		}
+
+		/**
+		* READ ONLY: Indicates if this pointer was pressed on the last frame or not. 
+		* This is only true on the frame that the point was 'justPressed' and is not a constant like 'isDown'
+		*
+		* @property pressed
+		* @type boolean
+		* @readOnly
+		* @public
+		*/
+		public get pressed():boolean {
+			return ( this.timeDown >= this._game.time.now() - this._game.time.delta() );
+		}
+
+
+		/**
+		* READ ONLY: Indicates if this pointer was released on the last frame or not. 
+		* This is only true on the frame that the point was 'justReleased' and is not a constant like 'isUp'
+		*
+		* @property released
+		* @type boolean
+		* @readOnly
+		* @public
+		*/
+		public get released(): boolean {
+			return ( this.timeUp >= this._game.time.now() - this._game.time.delta() );
+		}
+
+
+		/**
+		* Resets the pointer properties to the default ones. Assumes that the pointer is no longer down.
+		* @method reset
+		* @public
+		*/
+		public reset() {
+			this.isDown = false;
+			this.isUp = true;
+			this.timeDown = 0;
+			this.timeUp = 0;
+			this.duration = 0;
+			this.frameDuration = 0;
+		}
+
+		/**
+		* The update loop for the pointer. Used only if down to update the duration.
+		* @method update
+		* @public
+		*/
+		public update() {
+			if (this.isDown === true) {
+				this.frameDuration ++;
+				this.duration = this._game.time.now() - this.timeDown;
+			}
+		}
+
+	}
 
 }
diff --git a/src/input/Touch.ts b/src/input/Touch.ts
index 7994f14..229c938 100644
--- a/src/input/Touch.ts
+++ b/src/input/Touch.ts
@@ -3,811 +3,808 @@
 * @module Kiwi
 * @submodule Input
 * 
-*/ 
+*/
 
 module Kiwi.Input {
 
-    /**
-    * Handles the dispatching and management of touch based events for the game. When the Touch manager is created TEN finger objects are created and used when the user interacts with the screen. Those finger are what you can use to create games that make the most out of multitouch events. 
-    * 
-    * @class Touch
-    * @constructor
-    * @namespace Kiwi.Input
-    * @param game {Game} the game that this touch manager belongs to.
-    * @return {Touch} This object.
-    *
-    */
-    export class Touch {
-         
-        constructor(game: Kiwi.Game) {
-            this._game = game;
-        }
-
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} "TouchManager"
-        * @public
-        */
-        public objType():string {
-            return "TouchManager";
-        }
-
-        /**
-        * If the touch inputs are enabled on the current device (and so if the events will fire) or not.
-        * @property touchEnabled
-        * @type boolean
-        * @public
-        */
-        public touchEnabled: boolean;
-
-        /** 
-        * The game that this touch manager belongs to.
-        * @property _game
-        * @type Game
-        * @private
-        **/
-        private _game: Kiwi.Game;
-
-        /** 
-        * The dom element that these touch events are to take place on. This is usally set to be the stage/game container.
-        * @property _domElement
-        * @type HTMLElement
-        * @default null
-        * @private
-        **/
-        private _domElement: HTMLElement = null;
-         
-        /** 
-        * Contains a list of all of the fingers that are used for the touch events.
-        * @property _fingers
-        * @type Array
-        * @private
-        */
-        private _fingers: Finger[];
-        
-        /**
-        * Get the fingers that are being used.
-        * @type Finger[]
-        * @public
-        */
-        public get fingers(): Kiwi.Input.Finger[] {
-            return this._fingers;
-        }
-
-        /** 
-        * The first finger that is used for touch events.
-        * @property finger1
-        * @type Finger
-        * @public
-        */
-        public finger1: Kiwi.Input.Finger;
-
-        /** 
-        * The second finger that is used for touch events.
-        * @property finger2
-        * @type Finger
-        * @public
-        */
-        public finger2: Kiwi.Input.Finger;
-
-        /** 
-        * The third finger that is used for touch events.
-        * @property finger3
-        * @type Finger
-        * @public
-        */
-        public finger3: Kiwi.Input.Finger;
-
-        /** 
-        * The fourth finger that is used for touch events.
-        * @property finger4
-        * @type Finger
-        * @public
-        */
-        public finger4: Kiwi.Input.Finger;
-
-        /** 
-        * Finger number five that is used for touch events.
-        * @property finger5
-        * @type Finger
-        * @public
-        */
-        public finger5: Kiwi.Input.Finger;
-
-        /** 
-        * Finger number six, that is used for touch events.
-        * @property finger6
-        * @type Finger
-        * @public
-        */
-        public finger6: Kiwi.Input.Finger;
-
-        /** 
-        * The seventh finger used for touch events.
-        * @property finger7
-        * @type Finger
-        * @public
-        */
-        public finger7: Kiwi.Input.Finger;
-
-        /** 
-        * Finger number eight
-        * @property finger8
-        * @type Finger
-        * @public
-        */
-        public finger8: Kiwi.Input.Finger;
-
-        /** 
-        * The ninth finger that is used for touch events.
-        * @property finger9
-        * @type Finger
-        * @public
-        */
-        public finger9: Kiwi.Input.Finger;
-
-        /** 
-        * The tenth finger that is used for touch events.
-        * @property finger10
-        * @type Finger
-        * @public
-        */
-        public finger10: Kiwi.Input.Finger;
-
-        /** 
-        * The latest finger that was used for any task.
-        * @property latestFinger
-        * @type Finger
-        * @public
-        */
-        public latestFinger: Kiwi.Input.Finger;
-
-        /** 
-        * A boolean that will roughly indicate if any finger is currently down.
-        * @property isDown
-        * @type boolean
-        * @default false
-        * @public
-        */
-        public isDown: boolean = false;
-
-        /** 
-        * If all the fingers are up.
-        * @property isUp
-        * @type boolean
-        * @default true
-        * @public
-        */
-        public isUp: boolean = true;
-
-        /**
-        * A Kiwi Signal that dispatches an event when a user presses down on the stage.
-        * @property touchDown
-        * @type Signal
-        * @public
-        * @deprecated
-        */
-        public touchDown: Kiwi.Signal;
-
-        /**
-        * A Kiwi Signal that dispatches an event when a user presses down on the stage.
-        * @property onDown
-        * @type Signal
-        * @public
-        */
-        public get onDown(): Kiwi.Signal {
-            return this.touchDown;
-        }
-        
-        /**
-        * A Kiwi Signal that dispatches an event when a user releases a finger off of the stage.
-        * @property touchUp
-        * @type Signal
-        * @public
-        * @deprecated
-        */
-        public touchUp: Kiwi.Signal;
-
-        /**
-        * A Kiwi Signal that dispatches an event when a user releases a finger off of the stage.
-        * @property onUp
-        * @type Signal
-        * @public
-        */
-        public get onUp(): Kiwi.Signal {
-            return this.touchUp;
-        }
-
-        /**
-        * A Kiwi Signal that dispatches an event when a touch event is cancelled for the some reason.
-        * @property touchCancel
-        * @type Signal
-        * @public
-        * @deprecated
-        */
-        public touchCancel: Kiwi.Signal;
-
-        /**
-        * A Kiwi Signal that dispatches an event when a touch event is cancelled for the some reason.
-        * @property onCancel
-        * @type Signal
-        * @public
-        */
-        public get onCancel(): Kiwi.Signal {
-            return this.touchCancel;
-        }
-
-        /** 
-        * An internal Kiwi method that runs when the DOM is loaded and the touch manager can now 'boot' up.
-        * @method boot
-        * @public
-        */
-        public boot() {
-            this._domElement = this._game.stage.container;
-
-            this.finger1 = new Kiwi.Input.Finger(this._game);
-            this.finger2 = new Kiwi.Input.Finger(this._game);
-            this.finger3 = new Kiwi.Input.Finger(this._game);
-            this.finger4 = new Kiwi.Input.Finger(this._game);
-            this.finger5 = new Kiwi.Input.Finger(this._game);
-            this.finger6 = new Kiwi.Input.Finger(this._game);
-            this.finger7 = new Kiwi.Input.Finger(this._game);
-            this.finger8 = new Kiwi.Input.Finger(this._game);
-            this.finger9 = new Kiwi.Input.Finger(this._game);
-            this.finger10 = new Kiwi.Input.Finger(this._game);
-
-            this._fingers = [this.finger1, this.finger2, this.finger3, this.finger4, this.finger5, this.finger6, this.finger7, this.finger8, this.finger9, this.finger10];
-            this.latestFinger = this.finger1;
-
-            this.touchDown = new Kiwi.Signal();
-            this.touchUp = new Kiwi.Signal();
-            this.touchCancel = new Kiwi.Signal();
-             
-            this.start();
-        }
-
-        /** 
-        * Starts up the event listeners that are being used on the touch manager.
-        * @method start
-        * @public
-        */
-        public start() {
-
-            if (Kiwi.DEVICE.touch) {
-                this.touchEnabled = true;
-
-                if (this._game.deviceTargetOption === Kiwi.TARGET_BROWSER) {
-
-                    //If IE....
-                    if (Kiwi.DEVICE.pointerEnabled) {
-                        var pointerUp = 'pointerup',
-                            pointerDown = 'pointerdown',
-                            pointerEnter = 'pointerenter',
-                            pointerLeave = 'pointerleave',
-                            pointerCancel = 'pointercancel',
-                            pointerMove = 'pointermove';
-
-                        if ((window.navigator.msPointerEnabled)) {
-                            var pointerUp = 'MSPointerUp',
-                                pointerDown = 'MSPointerDown',
-                                pointerEnter = 'MSPointerEnter',
-                                pointerLeave = 'MSPointerLeave',
-                                pointerCancel = 'MSPointerCancel',
-                                pointerMove = 'MSPointerMove';
-                        }
-
-                        this._domElement.addEventListener(pointerUp, (event:MSPointerEvent) => this.onPointerStart(event), false);
-                        this._domElement.addEventListener(pointerDown, (event: MSPointerEvent) => this.onPointerEnd(event), false);
-                        this._domElement.addEventListener(pointerEnter, (event: MSPointerEvent) => this.onPointerEnter(event), false);
-                        this._domElement.addEventListener(pointerLeave, (event: MSPointerEvent) => this.onPointerLeave(event), false);
-                        this._domElement.addEventListener(pointerCancel, (event: MSPointerEvent) => this.onPointerCancel(event), false);
-                        this._domElement.addEventListener(pointerMove, (event: MSPointerEvent) => this.onPointerMove(event), false);
-
-                    } else {
-                        this._domElement.addEventListener('touchstart', (event) => this.onTouchStart(event), false);
-                        this._domElement.addEventListener('touchmove', (event) => this.onTouchMove(event), false);
-                        this._domElement.addEventListener('touchend', (event) => this.onTouchEnd(event), false);
-                        this._domElement.addEventListener('touchenter', (event) => this.onTouchEnter(event), false);
-                        this._domElement.addEventListener('touchleave', (event) => this.onTouchLeave(event), false);
-                        this._domElement.addEventListener('touchcancel', (event) => this.onTouchCancel(event), false);
-
-                        document.addEventListener('touchmove', (event) => this.consumeTouchMove(event), false);
-
-                    }
-
-
-                } else if (this._game.deviceTargetOption === Kiwi.TARGET_COCOON) {
-
-                    this._game.stage.canvas.addEventListener('touchstart', (event) => this.onTouchStart(event), false);
-                    this._game.stage.canvas.addEventListener('touchmove', (event) => this.onTouchMove(event), false);
-                    this._game.stage.canvas.addEventListener('touchend', (event) => this.onTouchEnd(event), false);
-                    this._game.stage.canvas.addEventListener('touchenter', (event) => this.onTouchEnter(event), false);
-                    this._game.stage.canvas.addEventListener('touchleave', (event) => this.onTouchLeave(event), false);
-                    this._game.stage.canvas.addEventListener('touchcancel', (event) => this.onTouchCancel(event), false);
-                }
-            } else {
-                this.touchEnabled = false;
-            }
-
-        }
-
-        /** 
-        * Prevent iOS bounce-back (doesn't work?)
-        * @method consumeTouchMove
-        * @param {Any} event
-        * @public
-        */
-        private consumeTouchMove(event) {
-            event.preventDefault();
-        }
-
-        /** 
-        * Gets the position of the latest finger on the x axis.
-        * @property x
-        * @type number
-        * @public
-        */
-        public get x(): number {
-            return this.latestFinger.x;
-        }
-
-        /**  
-        * Gets the position of the latest finger on the y axis.
-        * @property y
-        * @type number
-        * @public
-        */
-        public get y(): number {
-            return this.latestFinger.y;
-        }
-
-        /**
-        * The developer defined maximum number of touch events.
-        * By default this is set to 10 but this can be set to be lower.
-        * @property _maxPointers
-        * @type number
-        * @default 10
-        * @private
-        */
-        private _maxPointers: number = 10;
-
-        /**
-        * Sets the maximum number of point of contact that are allowed on the game stage at one point.
-        * The maximum number of points that are allowed is 10, and the minimum is 0.
-        * @property maximumPointers
-        * @type number
-        * @public
-        */
-        public set maximumPointers(val:number) {
-            if (val < 0)
-                val = 1;
-            if (val > this._fingers.length) val = this._fingers.length;
-            
-            this._maxPointers = val; 
-        }
-
-        /**
-        * Gets the maximum number of points of contact that are allowed on the game stage at one point.
-        * @type number
-        * @public
-        */
-        public get maximumPointers(): number {
-            return this._maxPointers;
-        }
-
-
-        /**
-        *-------------------------
-        * Generic Methods for Dealing with Pointers
-        *-------------------------
-        */
-
-        /**
-        * This method is in charge of registering a "finger"  (either from a Touch/Pointer start method) and assigning it a Finger,
-        * You have to pass this method a id which is used to idenfied when released/cancelled.
-        * @method _registerFinger
-        * @param event {Any} 
-        * @param id {Number} 
-        * @private
-        */
-        private _registerFinger(event, id:number) {
-            for (var f = 0; f < this._maxPointers; f++) {
-                if (this._fingers[f].active === false) {
-                    this._fingers[f].id = id;
-                    this._fingers[f].start(event);
-                    this.latestFinger = this._fingers[f];
-
-                    this.touchDown.dispatch(this._fingers[f].x, this._fingers[f].y, this._fingers[f].timeDown, this._fingers[f].timeUp, this._fingers[f].duration, this._fingers[f]);
-
-                    this.isDown = true;
-                    this.isUp = false;
-                    break;
-                }
-            }
-        }
-
-        /**
-        * This method is in charge of deregistering (removing) a "finger" when it has been released,
-        * You have to pass this method a id which is used to identfy the finger to deregister.
-        * @method _deregisterFinger
-        * @param event {Any} 
-        * @param id {Number} 
-        * @private
-        */
-        private _deregisterFinger(event, id) {
-
-            var finger = null;
-            for (var f = 0; f < this._fingers.length; f++) {
-                if (this._fingers[f].active && this._fingers[f].id === id) {
-                    this._fingers[f].stop(event);
-                    this.latestFinger = this._fingers[f];
-                    finger = this._fingers[f];
-                    this.isDown = false;
-                    this.isUp = true;
-                    break;
-                }
-            }
-
-
-            //Loop through the fingers and check to see that none of them are down.
-            for (var i = 0; i < this._fingers.length; i++) {
-                if (this._fingers[i].active === true) {
-                    this.isDown = true;
-                    this.isUp = false;
-                }
-            }
-
-            if (finger !== null) {
-                this.touchUp.dispatch(finger.x, finger.y, finger.timeDown, finger.timeUp, finger.duration, finger);
-            }
-
-        }
-
-        
-        /**
-        * This method is in charge of cancelling (removing) a "finger".
-        * You have to pass this method a id which is used to idenfied the finger that was cancelled.
-        * @method _cancelFinger
-        * @param event {Any} 
-        * @param id {Number} 
-        * @private
-        */
-        private _cancelFinger(event, id) {
-            for (var f = 0; f < this._fingers.length; f++) {
-                if (this._fingers[f].active && this._fingers[f].id === id) {
-                    this._fingers[f].stop(event);
-                    this.touchCancel.dispatch(this._fingers[f].x, this._fingers[f].y, this._fingers[f].timeDown, this._fingers[f].timeUp, this._fingers[f].duration, this._fingers[f]);
-                    break;
-                }
-            }
-
-            //loop through the fingers and check to see that none of them are down.
-            for (var i = 0; i < this._fingers.length; i++) {
-                if (this._fingers[i].active) {
-                    this.isDown = true;
-                    this.isUp = false;
-                }
-            }
-        }
-        
-        
-        /**
-        * This method is in charge of creating and assigning (removing) a "finger" when it has entered the dom element.
-        * You have to pass this method a id which is used to idenfied the finger that was cancelled.
-        * @method _enterFinger
-        * @param event {Any} 
-        * @param id {Number} 
-        * @private
-        */
-        private _enterFinger(event, id) {
-            for (var f = 0; f < this._maxPointers; f++) {
-                if (this._fingers[f].active === false) {
-                    this._fingers[f].id = id;
-                    this._fingers[f].start(event);
-                    this.latestFinger = this._fingers[f];
-                    this.isDown = true;
-                    this.isUp = false;
-                    break;
-                }
-            }
-        }
-        
-        /**
-        * This method is in charge of removing an assigned "finger" when it has left the DOM Elemetn.
-        * You have to pass this method a id which is used to idenfied the finger that left.
-        * @method _leaveFinger
-        * @param event {Any} 
-        * @param id {Number} 
-        * @private
-        */
-        private _leaveFinger(event, id) {
-            for (var f = 0; f < this._fingers.length; f++) {
-                if (this._fingers[f].active && this._fingers[f].id === id) {
-                    this._fingers[f].leave(event);
-                    break;
-                }
-            }
-        }
-        
-        /**
-        * This method is in charge of updating the coordinates of a "finger" when it has moved..
-        * You have to pass this method a id which is used to idenfied the finger that moved.
-        * @method _moveFinger
-        * @param event {Any} 
-        * @param id {Number} 
-        * @private
-        */
-        private _moveFinger(event, id) {
-            for (var f = 0; f < this._fingers.length; f++) {
-                if (this._fingers[f].active && this._fingers[f].id === id) {
-                    this._fingers[f].move(event);
-                    this.latestFinger = this._fingers[f];
-                    break;
-                }
-            }
-        }
-
-        
-        /**
-        *-------------------
-        * Touch Events
-        *-------------------
-        **/
-
-
-        /** 
-        * This method runs when the a touch start event is fired by the browser and then assigns the event to a pointer that is currently not active.
-        * https://developer.mozilla.org/en-US/docs/DOM/TouchList
-        * @method onTouchStart
-        * @param {Any} event
-        * @private
-        */
-        private onTouchStart(event) {
-
-            //Stop corresponding mouse events from firing.
-            event.preventDefault();
-            
-            for (var i = 0; i < event.changedTouches.length; i++) {
-                this._registerFinger(event.changedTouches[i], event.changedTouches[i].identifier);
-            }
-
-        }
-
-        /** 
-        * Doesn't appear to be supported by most browsers yet but if it was it would fire events when a touch is canceled.
-        * http://www.w3.org/TR/touch-events/#dfn-touchcancel
-        * @method onTouchCancel
-        * @param {Any} event
-        * @private
-        */
-        private onTouchCancel(event) {
-
-            event.preventDefault();
-
-            for (var i = 0; i < event.changedTouches.length; i++) {
-                this._cancelFinger(event.changedTouches[i], event.changedTouches[i].identifier);
-            }
-
-        }
-
-        /** 
-        * Doesn't appear to be supported by most browsers yet. But if it was would fire events when touch events enter an element. 
-        * @method onTouchEnter
-        * @param {Any} event
-        * @private
-        */
-        private onTouchEnter(event) {
-
-            //Stop corresponding mouse events from firing.
-            event.preventDefault();
-
-            // For touch enter and leave its a list of the touch points that have entered or left the target
-            for (var i = 0; i < event.changedTouches.length; i++) {
-                this._enterFinger(event.changedTouches[i], event.changedTouches[i].identifier);
-            }
-
-        }
-
-        /** 
-        * Doesn't appear to be supported by most browsers yet. Would fire events when a 'finger' leaves an element.     
-        * Would be handly for when an finger 'leaves' the stage.
-        * @method onTouchLeave
-        * @param {Any} event
-        * @private
-        */
-        private onTouchLeave(event) {
-
-            //Stops corresponding mouse events from firing
-            event.preventDefault();
-
-            // For touch enter and leave its a list of the touch points that have entered or left the target 
-            for (var i = 0; i < event.changedTouches.length; i++) {
-                this._leaveFinger(event.changedTouches[i], event.changedTouches[i].identifier);
-            }
-
-        }
-
-        /** 
-        * When a touch pointer moves. This method updates the appropriate pointer.
-        * @method onTouchMove
-        * @param {Any} event
-        * @private
-        */
-        private onTouchMove(event) {
-
-            //Stop cooresponding mouse events from firing
-            event.preventDefault();
-
-            for (var i = 0; i < event.changedTouches.length; i++) {
-                this._moveFinger(event.changedTouches[i], event.changedTouches[i].identifier);
-            }
-
-        }
-
-        /** 
-        * When a touch event gets released.
-        * https://developer.mozilla.org/en-US/docs/DOM/TouchList
-        * @method onTouchEnd
-        * @param {Any} event
-        * @private
-        */
-        private onTouchEnd(event) {
-
-            //Stop cooresponding mouse events from firing
-            event.preventDefault();
-
-            for (var i = 0; i < event.changedTouches.length; i++) {
-                this._deregisterFinger(event.changedTouches[i], event.changedTouches[i].identifier);
-            }
-            
-        }
-
-
-        /**
-        *-------------------
-        * Pointer Events
-        *-------------------
-        **/
-
-
-        /** 
-        * Event that is fired when a pointer is initially pressed.
-        * @method onPointerStart
-        * @param event {PointerEvent}
-        * @private
-        */
-        private onPointerStart(event: MSPointerEvent) {
-            if (event.type === 'touch') {
-                this._registerFinger(event, event.pointerId);
-            }
-        }
-
-        /** 
-        * Event that is fired by a pointer event listener upon a pointer canceling for some reason. 
-        * @method onPointerCancel
-        * @param event {PointerEvent}
-        * @private
-        */
-        private onPointerCancel(event: MSPointerEvent) {
-            if (event.type === 'touch') {
-                this._cancelFinger(event, event.pointerId);
-            }
-        }
-
-        /** 
-        * Event that is fired by a pointer event listener upon a pointer entering the DOM Element the event listener is attached to.
-        * @method onPointerEnter
-        * @param event {PointerEvent}
-        * @private
-        */
-        private onPointerEnter(event: MSPointerEvent) {
-            if (event.type === 'touch') {
-                this._enterFinger(event, event.pointerId);
-            }
-        }
-
-        /** 
-        * Event that is fired by a pointer event listener upon a pointer being leaving the DOM Element the event listener is attached to.
-        * @method onPointerLeave
-        * @param event {PointerEvent}
-        * @private
-        */
-        private onPointerLeave(event: MSPointerEvent) {
-            if (event.type === 'touch') {
-                this._leaveFinger(event, event.pointerId);
-            }
-        }
-
-        /**
-        * Event that is fired by a pointer event listener upon a pointer moving.
-        * @method onPointerMove
-        * @param event {PointerEvent}
-        */
-        private onPointerMove(event: MSPointerEvent) {
-            if (event.type === 'touch') {
-                this._moveFinger(event, event.pointerId);
-            }
-        }
-        
-        /** 
-        * Event that is fired by a pointer event listener upon a pointer being released.
-        * @method onPointerEnd
-        * @param event {PointerEvent}
-        * @private
-        */
-        private onPointerEnd(event: MSPointerEvent) {
-            if (event.type === 'touch') {
-                this._deregisterFinger(event, event.pointerId);
-            }
-        }
-
-
-        /**
-        *-----------------
-        * Normal Methods 
-        *-----------------
-        **/
-
-
-        /** 
-        * The update loop fro the touch manager.
-        * @method update 
-        * @public
-        */
-        public update() {
-            if (this.touchEnabled && this.isDown) {
-
-                for (var i = 0; i < this._fingers.length; i++) {
-                    if (this._fingers[i].active) {
-                        this._fingers[i].update();
-                    }
-                }
-
-            }
-        }
-
-
-        /** 
-        * This method removes all of the event listeners and thus 'stops' the touch manager.
-        * @method stop 
-        * @public
-        */
-        public stop() {
-
-            if (this.touchEnabled) {
-                if (this._game.deviceTargetOption === Kiwi.TARGET_BROWSER) {
-
-                    this._domElement.removeEventListener('touchstart', (event) => this.onTouchStart(event), false);
-                    this._domElement.removeEventListener('touchmove', (event) => this.onTouchMove(event), false);
-                    this._domElement.removeEventListener('touchend', (event) => this.onTouchEnd(event), false);
-                    this._domElement.removeEventListener('touchenter', (event) => this.onTouchEnter(event), false);
-                    this._domElement.removeEventListener('touchleave', (event) => this.onTouchLeave(event), false);
-                    this._domElement.removeEventListener('touchcancel', (event) => this.onTouchCancel(event), false);
-
-                } else if (this._game.deviceTargetOption === Kiwi.TARGET_COCOON) {
-
-                    this._game.stage.canvas.removeEventListener('touchstart', (event) => this.onTouchStart(event), false);
-                    this._game.stage.canvas.removeEventListener('touchmove', (event) => this.onTouchMove(event), false);
-                    this._game.stage.canvas.removeEventListener('touchend', (event) => this.onTouchEnd(event), false);
-                    this._game.stage.canvas.removeEventListener('touchenter', (event) => this.onTouchEnter(event), false);
-                    this._game.stage.canvas.removeEventListener('touchleave', (event) => this.onTouchLeave(event), false);
-                    this._game.stage.canvas.removeEventListener('touchcancel', (event) => this.onTouchCancel(event), false);
-                }
-            }
-        }
-
-        /**  
-        * Resets all of the fingers/pointers to their default states.
-        * @method reset
-        * @public
-        */
-        public reset() {
-            for (var i = 0; i < this._fingers.length; i++) {
-                this._fingers[i].reset();
-            }
-        }
-
-    }
+	/**
+	* Handles the dispatching and management of touch based events for the game. When the Touch manager is created TEN finger objects are created and used when the user interacts with the screen. Those finger are what you can use to create games that make the most out of multitouch events. 
+	* 
+	* @class Touch
+	* @constructor
+	* @namespace Kiwi.Input
+	* @param game {Game} the game that this touch manager belongs to.
+	* @return {Touch} This object.
+	*
+	*/
+	export class Touch {
+
+		constructor(game: Kiwi.Game) {
+			this._game = game;
+		}
+
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} "TouchManager"
+		* @public
+		*/
+		public objType():string {
+			return "TouchManager";
+		}
+
+		/**
+		* If the touch inputs are enabled on the current device (and so if the events will fire) or not.
+		* @property touchEnabled
+		* @type boolean
+		* @public
+		*/
+		public touchEnabled: boolean;
+
+		/** 
+		* The game that this touch manager belongs to.
+		* @property _game
+		* @type Game
+		* @private
+		**/
+		private _game: Kiwi.Game;
+
+		/** 
+		* The dom element that these touch events are to take place on. This is usally set to be the stage/game container.
+		* @property _domElement
+		* @type HTMLElement
+		* @default null
+		* @private
+		**/
+		private _domElement: HTMLElement = null;
+
+		/** 
+		* Contains a list of all of the fingers that are used for the touch events.
+		* @property _fingers
+		* @type Array
+		* @private
+		*/
+		private _fingers: Finger[];
+
+		/**
+		* Get the fingers that are being used.
+		* @type Finger[]
+		* @public
+		*/
+		public get fingers(): Kiwi.Input.Finger[] {
+			return this._fingers;
+		}
+
+		/** 
+		* The first finger that is used for touch events.
+		* @property finger1
+		* @type Finger
+		* @public
+		*/
+		public finger1: Kiwi.Input.Finger;
+
+		/** 
+		* The second finger that is used for touch events.
+		* @property finger2
+		* @type Finger
+		* @public
+		*/
+		public finger2: Kiwi.Input.Finger;
+
+		/** 
+		* The third finger that is used for touch events.
+		* @property finger3
+		* @type Finger
+		* @public
+		*/
+		public finger3: Kiwi.Input.Finger;
+
+		/** 
+		* The fourth finger that is used for touch events.
+		* @property finger4
+		* @type Finger
+		* @public
+		*/
+		public finger4: Kiwi.Input.Finger;
+
+		/** 
+		* Finger number five that is used for touch events.
+		* @property finger5
+		* @type Finger
+		* @public
+		*/
+		public finger5: Kiwi.Input.Finger;
+
+		/** 
+		* Finger number six, that is used for touch events.
+		* @property finger6
+		* @type Finger
+		* @public
+		*/
+		public finger6: Kiwi.Input.Finger;
+
+		/** 
+		* The seventh finger used for touch events.
+		* @property finger7
+		* @type Finger
+		* @public
+		*/
+		public finger7: Kiwi.Input.Finger;
+
+		/** 
+		* Finger number eight
+		* @property finger8
+		* @type Finger
+		* @public
+		*/
+		public finger8: Kiwi.Input.Finger;
+
+		/** 
+		* The ninth finger that is used for touch events.
+		* @property finger9
+		* @type Finger
+		* @public
+		*/
+		public finger9: Kiwi.Input.Finger;
+
+		/** 
+		* The tenth finger that is used for touch events.
+		* @property finger10
+		* @type Finger
+		* @public
+		*/
+		public finger10: Kiwi.Input.Finger;
+
+		/** 
+		* The latest finger that was used for any task.
+		* @property latestFinger
+		* @type Finger
+		* @public
+		*/
+		public latestFinger: Kiwi.Input.Finger;
+
+		/** 
+		* A boolean that will roughly indicate if any finger is currently down.
+		* @property isDown
+		* @type boolean
+		* @default false
+		* @public
+		*/
+		public isDown: boolean = false;
+
+		/** 
+		* If all the fingers are up.
+		* @property isUp
+		* @type boolean
+		* @default true
+		* @public
+		*/
+		public isUp: boolean = true;
+
+		/**
+		* A Kiwi Signal that dispatches an event when a user presses down on the stage.
+		* @property touchDown
+		* @type Signal
+		* @public
+		* @deprecated
+		*/
+		public touchDown: Kiwi.Signal;
+
+		/**
+		* A Kiwi Signal that dispatches an event when a user presses down on the stage.
+		* @property onDown
+		* @type Signal
+		* @public
+		*/
+		public get onDown(): Kiwi.Signal {
+			return this.touchDown;
+		}
+
+		/**
+		* A Kiwi Signal that dispatches an event when a user releases a finger off of the stage.
+		* @property touchUp
+		* @type Signal
+		* @public
+		* @deprecated
+		*/
+		public touchUp: Kiwi.Signal;
+
+		/**
+		* A Kiwi Signal that dispatches an event when a user releases a finger off of the stage.
+		* @property onUp
+		* @type Signal
+		* @public
+		*/
+		public get onUp(): Kiwi.Signal {
+			return this.touchUp;
+		}
+
+		/**
+		* A Kiwi Signal that dispatches an event when a touch event is cancelled for the some reason.
+		* @property touchCancel
+		* @type Signal
+		* @public
+		* @deprecated
+		*/
+		public touchCancel: Kiwi.Signal;
+
+		/**
+		* A Kiwi Signal that dispatches an event when a touch event is cancelled for the some reason.
+		* @property onCancel
+		* @type Signal
+		* @public
+		*/
+		public get onCancel(): Kiwi.Signal {
+			return this.touchCancel;
+		}
+
+		/** 
+		* An internal Kiwi method that runs when the DOM is loaded and the touch manager can now 'boot' up.
+		* @method boot
+		* @public
+		*/
+		public boot() {
+			this._domElement = this._game.stage.container;
+
+			this.finger1 = new Kiwi.Input.Finger(this._game);
+			this.finger2 = new Kiwi.Input.Finger(this._game);
+			this.finger3 = new Kiwi.Input.Finger(this._game);
+			this.finger4 = new Kiwi.Input.Finger(this._game);
+			this.finger5 = new Kiwi.Input.Finger(this._game);
+			this.finger6 = new Kiwi.Input.Finger(this._game);
+			this.finger7 = new Kiwi.Input.Finger(this._game);
+			this.finger8 = new Kiwi.Input.Finger(this._game);
+			this.finger9 = new Kiwi.Input.Finger(this._game);
+			this.finger10 = new Kiwi.Input.Finger(this._game);
+
+			this._fingers = [this.finger1, this.finger2, this.finger3, this.finger4, this.finger5, this.finger6, this.finger7, this.finger8, this.finger9, this.finger10];
+			this.latestFinger = this.finger1;
+
+			this.touchDown = new Kiwi.Signal();
+			this.touchUp = new Kiwi.Signal();
+			this.touchCancel = new Kiwi.Signal();
+
+			this.start();
+		}
+
+		/** 
+		* Starts up the event listeners that are being used on the touch manager.
+		* @method start
+		* @public
+		*/
+		public start() {
+
+			if (Kiwi.DEVICE.touch) {
+				this.touchEnabled = true;
+
+				if (this._game.deviceTargetOption === Kiwi.TARGET_BROWSER) {
+
+					//If IE....
+					if (Kiwi.DEVICE.pointerEnabled) {
+						var pointerUp = 'pointerup',
+							pointerDown = 'pointerdown',
+							pointerEnter = 'pointerenter',
+							pointerLeave = 'pointerleave',
+							pointerCancel = 'pointercancel',
+							pointerMove = 'pointermove';
+
+						if ((window.navigator.msPointerEnabled)) {
+							var pointerUp = 'MSPointerUp',
+								pointerDown = 'MSPointerDown',
+								pointerEnter = 'MSPointerEnter',
+								pointerLeave = 'MSPointerLeave',
+								pointerCancel = 'MSPointerCancel',
+								pointerMove = 'MSPointerMove';
+						}
+
+						this._domElement.addEventListener(pointerUp, (event:MSPointerEvent) => this.onPointerStart(event), false);
+						this._domElement.addEventListener(pointerDown, (event: MSPointerEvent) => this.onPointerEnd(event), false);
+						this._domElement.addEventListener(pointerEnter, (event: MSPointerEvent) => this.onPointerEnter(event), false);
+						this._domElement.addEventListener(pointerLeave, (event: MSPointerEvent) => this.onPointerLeave(event), false);
+						this._domElement.addEventListener(pointerCancel, (event: MSPointerEvent) => this.onPointerCancel(event), false);
+						this._domElement.addEventListener(pointerMove, (event: MSPointerEvent) => this.onPointerMove(event), false);
+
+					} else {
+						this._domElement.addEventListener('touchstart', (event) => this.onTouchStart(event), false);
+						this._domElement.addEventListener('touchmove', (event) => this.onTouchMove(event), false);
+						this._domElement.addEventListener('touchend', (event) => this.onTouchEnd(event), false);
+						this._domElement.addEventListener('touchenter', (event) => this.onTouchEnter(event), false);
+						this._domElement.addEventListener('touchleave', (event) => this.onTouchLeave(event), false);
+						this._domElement.addEventListener('touchcancel', (event) => this.onTouchCancel(event), false);
+
+						document.addEventListener('touchmove', (event) => this.consumeTouchMove(event), false);
+
+					}
+
+
+				} else if (this._game.deviceTargetOption === Kiwi.TARGET_COCOON) {
+
+					this._game.stage.canvas.addEventListener('touchstart', (event) => this.onTouchStart(event), false);
+					this._game.stage.canvas.addEventListener('touchmove', (event) => this.onTouchMove(event), false);
+					this._game.stage.canvas.addEventListener('touchend', (event) => this.onTouchEnd(event), false);
+					this._game.stage.canvas.addEventListener('touchenter', (event) => this.onTouchEnter(event), false);
+					this._game.stage.canvas.addEventListener('touchleave', (event) => this.onTouchLeave(event), false);
+					this._game.stage.canvas.addEventListener('touchcancel', (event) => this.onTouchCancel(event), false);
+				}
+			} else {
+				this.touchEnabled = false;
+			}
+
+		}
+
+		/** 
+		* Prevent iOS bounce-back (doesn't work?)
+		* @method consumeTouchMove
+		* @param {Any} event
+		* @public
+		*/
+		private consumeTouchMove(event) {
+			event.preventDefault();
+		}
+
+		/** 
+		* Gets the position of the latest finger on the x axis.
+		* @property x
+		* @type number
+		* @public
+		*/
+		public get x(): number {
+			return this.latestFinger.x;
+		}
+
+		/**  
+		* Gets the position of the latest finger on the y axis.
+		* @property y
+		* @type number
+		* @public
+		*/
+		public get y(): number {
+			return this.latestFinger.y;
+		}
+
+		/**
+		* The developer defined maximum number of touch events.
+		* By default this is set to 10 but this can be set to be lower.
+		* @property _maxPointers
+		* @type number
+		* @default 10
+		* @private
+		*/
+		private _maxPointers: number = 10;
+
+		/**
+		* Sets the maximum number of point of contact that are allowed on the game stage at one point.
+		* The maximum number of points that are allowed is 10, and the minimum is 0.
+		* @property maximumPointers
+		* @type number
+		* @public
+		*/
+		public set maximumPointers(val:number) {
+			if (val < 0)
+				val = 1;
+			if (val > this._fingers.length) val = this._fingers.length;
+			
+			this._maxPointers = val; 
+		}
+
+		/**
+		* Gets the maximum number of points of contact that are allowed on the game stage at one point.
+		* @type number
+		* @public
+		*/
+		public get maximumPointers(): number {
+			return this._maxPointers;
+		}
+
+
+		/**
+		*-------------------------
+		* Generic Methods for Dealing with Pointers
+		*-------------------------
+		*/
+
+		/**
+		* This method is in charge of registering a "finger"  (either from a Touch/Pointer start method) and assigning it a Finger,
+		* You have to pass this method a id which is used to idenfied when released/cancelled.
+		* @method _registerFinger
+		* @param event {Any} 
+		* @param id {Number} 
+		* @private
+		*/
+		private _registerFinger(event, id:number) {
+			for (var f = 0; f < this._maxPointers; f++) {
+				if (this._fingers[f].active === false) {
+					this._fingers[f].id = id;
+					this._fingers[f].start(event);
+					this.latestFinger = this._fingers[f];
+
+					this.touchDown.dispatch(this._fingers[f].x, this._fingers[f].y, this._fingers[f].timeDown, this._fingers[f].timeUp, this._fingers[f].duration, this._fingers[f]);
+
+					this.isDown = true;
+					this.isUp = false;
+					break;
+				}
+			}
+		}
+
+		/**
+		* This method is in charge of deregistering (removing) a "finger" when it has been released,
+		* You have to pass this method a id which is used to identfy the finger to deregister.
+		* @method _deregisterFinger
+		* @param event {Any} 
+		* @param id {Number} 
+		* @private
+		*/
+		private _deregisterFinger(event, id) {
+
+			var finger = null;
+			for (var f = 0; f < this._fingers.length; f++) {
+				if (this._fingers[f].active && this._fingers[f].id === id) {
+					this._fingers[f].stop(event);
+					this.latestFinger = this._fingers[f];
+					finger = this._fingers[f];
+					this.isDown = false;
+					this.isUp = true;
+					break;
+				}
+			}
+
+
+			//Loop through the fingers and check to see that none of them are down.
+			for (var i = 0; i < this._fingers.length; i++) {
+				if (this._fingers[i].active === true) {
+					this.isDown = true;
+					this.isUp = false;
+				}
+			}
+
+			if (finger !== null) {
+				this.touchUp.dispatch(finger.x, finger.y, finger.timeDown, finger.timeUp, finger.duration, finger);
+			}
+
+		}
+
+		/**
+		* This method is in charge of cancelling (removing) a "finger".
+		* You have to pass this method a id which is used to idenfied the finger that was cancelled.
+		* @method _cancelFinger
+		* @param event {Any} 
+		* @param id {Number} 
+		* @private
+		*/
+		private _cancelFinger(event, id) {
+			for (var f = 0; f < this._fingers.length; f++) {
+				if (this._fingers[f].active && this._fingers[f].id === id) {
+					this._fingers[f].stop(event);
+					this.touchCancel.dispatch(this._fingers[f].x, this._fingers[f].y, this._fingers[f].timeDown, this._fingers[f].timeUp, this._fingers[f].duration, this._fingers[f]);
+					break;
+				}
+			}
+
+			//loop through the fingers and check to see that none of them are down.
+			for (var i = 0; i < this._fingers.length; i++) {
+				if (this._fingers[i].active) {
+					this.isDown = true;
+					this.isUp = false;
+				}
+			}
+		}
+
+		/**
+		* This method is in charge of creating and assigning (removing) a "finger" when it has entered the dom element.
+		* You have to pass this method a id which is used to idenfied the finger that was cancelled.
+		* @method _enterFinger
+		* @param event {Any} 
+		* @param id {Number} 
+		* @private
+		*/
+		private _enterFinger(event, id) {
+			for (var f = 0; f < this._maxPointers; f++) {
+				if (this._fingers[f].active === false) {
+					this._fingers[f].id = id;
+					this._fingers[f].start(event);
+					this.latestFinger = this._fingers[f];
+					this.isDown = true;
+					this.isUp = false;
+					break;
+				}
+			}
+		}
+
+		/**
+		* This method is in charge of removing an assigned "finger" when it has left the DOM Elemetn.
+		* You have to pass this method a id which is used to idenfied the finger that left.
+		* @method _leaveFinger
+		* @param event {Any} 
+		* @param id {Number} 
+		* @private
+		*/
+		private _leaveFinger(event, id) {
+			for (var f = 0; f < this._fingers.length; f++) {
+				if (this._fingers[f].active && this._fingers[f].id === id) {
+					this._fingers[f].leave(event);
+					break;
+				}
+			}
+		}
+
+		/**
+		* This method is in charge of updating the coordinates of a "finger" when it has moved..
+		* You have to pass this method a id which is used to idenfied the finger that moved.
+		* @method _moveFinger
+		* @param event {Any} 
+		* @param id {Number} 
+		* @private
+		*/
+		private _moveFinger(event, id) {
+			for (var f = 0; f < this._fingers.length; f++) {
+				if (this._fingers[f].active && this._fingers[f].id === id) {
+					this._fingers[f].move(event);
+					this.latestFinger = this._fingers[f];
+					break;
+				}
+			}
+		}
+
+
+		/**
+		*-------------------
+		* Touch Events
+		*-------------------
+		**/
+
+
+		/** 
+		* This method runs when the a touch start event is fired by the browser and then assigns the event to a pointer that is currently not active.
+		* https://developer.mozilla.org/en-US/docs/DOM/TouchList
+		* @method onTouchStart
+		* @param {Any} event
+		* @private
+		*/
+		private onTouchStart(event) {
+
+			//Stop corresponding mouse events from firing.
+			event.preventDefault();
+			
+			for (var i = 0; i < event.changedTouches.length; i++) {
+				this._registerFinger(event.changedTouches[i], event.changedTouches[i].identifier);
+			}
+
+		}
+
+		/** 
+		* Doesn't appear to be supported by most browsers yet but if it was it would fire events when a touch is canceled.
+		* http://www.w3.org/TR/touch-events/#dfn-touchcancel
+		* @method onTouchCancel
+		* @param {Any} event
+		* @private
+		*/
+		private onTouchCancel(event) {
+
+			event.preventDefault();
+
+			for (var i = 0; i < event.changedTouches.length; i++) {
+				this._cancelFinger(event.changedTouches[i], event.changedTouches[i].identifier);
+			}
+
+		}
+
+		/** 
+		* Doesn't appear to be supported by most browsers yet. But if it was would fire events when touch events enter an element. 
+		* @method onTouchEnter
+		* @param {Any} event
+		* @private
+		*/
+		private onTouchEnter(event) {
+
+			//Stop corresponding mouse events from firing.
+			event.preventDefault();
+
+			// For touch enter and leave its a list of the touch points that have entered or left the target
+			for (var i = 0; i < event.changedTouches.length; i++) {
+				this._enterFinger(event.changedTouches[i], event.changedTouches[i].identifier);
+			}
+
+		}
+
+		/** 
+		* Doesn't appear to be supported by most browsers yet. Would fire events when a 'finger' leaves an element.     
+		* Would be handly for when an finger 'leaves' the stage.
+		* @method onTouchLeave
+		* @param {Any} event
+		* @private
+		*/
+		private onTouchLeave(event) {
+
+			//Stops corresponding mouse events from firing
+			event.preventDefault();
+
+			// For touch enter and leave its a list of the touch points that have entered or left the target 
+			for (var i = 0; i < event.changedTouches.length; i++) {
+				this._leaveFinger(event.changedTouches[i], event.changedTouches[i].identifier);
+			}
+
+		}
+
+		/** 
+		* When a touch pointer moves. This method updates the appropriate pointer.
+		* @method onTouchMove
+		* @param {Any} event
+		* @private
+		*/
+		private onTouchMove(event) {
+
+			//Stop cooresponding mouse events from firing
+			event.preventDefault();
+
+			for (var i = 0; i < event.changedTouches.length; i++) {
+				this._moveFinger(event.changedTouches[i], event.changedTouches[i].identifier);
+			}
+
+		}
+
+		/** 
+		* When a touch event gets released.
+		* https://developer.mozilla.org/en-US/docs/DOM/TouchList
+		* @method onTouchEnd
+		* @param {Any} event
+		* @private
+		*/
+		private onTouchEnd(event) {
+
+			//Stop cooresponding mouse events from firing
+			event.preventDefault();
+
+			for (var i = 0; i < event.changedTouches.length; i++) {
+				this._deregisterFinger(event.changedTouches[i], event.changedTouches[i].identifier);
+			}
+		}
+
+
+		/**
+		*-------------------
+		* Pointer Events
+		*-------------------
+		**/
+
+
+		/** 
+		* Event that is fired when a pointer is initially pressed.
+		* @method onPointerStart
+		* @param event {PointerEvent}
+		* @private
+		*/
+		private onPointerStart(event: MSPointerEvent) {
+			if (event.type === 'touch') {
+				this._registerFinger(event, event.pointerId);
+			}
+		}
+
+		/** 
+		* Event that is fired by a pointer event listener upon a pointer canceling for some reason. 
+		* @method onPointerCancel
+		* @param event {PointerEvent}
+		* @private
+		*/
+		private onPointerCancel(event: MSPointerEvent) {
+			if (event.type === 'touch') {
+				this._cancelFinger(event, event.pointerId);
+			}
+		}
+
+		/** 
+		* Event that is fired by a pointer event listener upon a pointer entering the DOM Element the event listener is attached to.
+		* @method onPointerEnter
+		* @param event {PointerEvent}
+		* @private
+		*/
+		private onPointerEnter(event: MSPointerEvent) {
+			if (event.type === 'touch') {
+				this._enterFinger(event, event.pointerId);
+			}
+		}
+
+		/** 
+		* Event that is fired by a pointer event listener upon a pointer being leaving the DOM Element the event listener is attached to.
+		* @method onPointerLeave
+		* @param event {PointerEvent}
+		* @private
+		*/
+		private onPointerLeave(event: MSPointerEvent) {
+			if (event.type === 'touch') {
+				this._leaveFinger(event, event.pointerId);
+			}
+		}
+
+		/**
+		* Event that is fired by a pointer event listener upon a pointer moving.
+		* @method onPointerMove
+		* @param event {PointerEvent}
+		*/
+		private onPointerMove(event: MSPointerEvent) {
+			if (event.type === 'touch') {
+				this._moveFinger(event, event.pointerId);
+			}
+		}
+
+		/** 
+		* Event that is fired by a pointer event listener upon a pointer being released.
+		* @method onPointerEnd
+		* @param event {PointerEvent}
+		* @private
+		*/
+		private onPointerEnd(event: MSPointerEvent) {
+			if (event.type === 'touch') {
+				this._deregisterFinger(event, event.pointerId);
+			}
+		}
+
+
+		/**
+		*-----------------
+		* Normal Methods 
+		*-----------------
+		**/
+
+
+		/** 
+		* The update loop fro the touch manager.
+		* @method update 
+		* @public
+		*/
+		public update() {
+			if (this.touchEnabled && this.isDown) {
+
+				for (var i = 0; i < this._fingers.length; i++) {
+					if (this._fingers[i].active) {
+						this._fingers[i].update();
+					}
+				}
+
+			}
+		}
+
+
+		/** 
+		* This method removes all of the event listeners and thus 'stops' the touch manager.
+		* @method stop 
+		* @public
+		*/
+		public stop() {
+
+			if (this.touchEnabled) {
+				if (this._game.deviceTargetOption === Kiwi.TARGET_BROWSER) {
+
+					this._domElement.removeEventListener('touchstart', (event) => this.onTouchStart(event), false);
+					this._domElement.removeEventListener('touchmove', (event) => this.onTouchMove(event), false);
+					this._domElement.removeEventListener('touchend', (event) => this.onTouchEnd(event), false);
+					this._domElement.removeEventListener('touchenter', (event) => this.onTouchEnter(event), false);
+					this._domElement.removeEventListener('touchleave', (event) => this.onTouchLeave(event), false);
+					this._domElement.removeEventListener('touchcancel', (event) => this.onTouchCancel(event), false);
+
+				} else if (this._game.deviceTargetOption === Kiwi.TARGET_COCOON) {
+
+					this._game.stage.canvas.removeEventListener('touchstart', (event) => this.onTouchStart(event), false);
+					this._game.stage.canvas.removeEventListener('touchmove', (event) => this.onTouchMove(event), false);
+					this._game.stage.canvas.removeEventListener('touchend', (event) => this.onTouchEnd(event), false);
+					this._game.stage.canvas.removeEventListener('touchenter', (event) => this.onTouchEnter(event), false);
+					this._game.stage.canvas.removeEventListener('touchleave', (event) => this.onTouchLeave(event), false);
+					this._game.stage.canvas.removeEventListener('touchcancel', (event) => this.onTouchCancel(event), false);
+				}
+			}
+		}
+
+		/**  
+		* Resets all of the fingers/pointers to their default states.
+		* @method reset
+		* @public
+		*/
+		public reset() {
+			for (var i = 0; i < this._fingers.length; i++) {
+				this._fingers[i].reset();
+			}
+		}
+
+	}
 
 }
diff --git a/src/render/CanvasRenderer.ts b/src/render/CanvasRenderer.ts
index 3267ebd..9f11b2d 100644
--- a/src/render/CanvasRenderer.ts
+++ b/src/render/CanvasRenderer.ts
@@ -4,13 +4,13 @@
 * 
 */
 interface IRenderManager {
-    render(camera: Kiwi.Camera);
-    boot();
-    initState(state: Kiwi.State);
-    endState(state: Kiwi.State);
-    numDrawCalls: number;
-    requestRendererInstance(rendererID: string,params?: any);
-    requestSharedRenderer(rendererID: string, params?: any);
+	render(camera: Kiwi.Camera);
+	boot();
+	initState(state: Kiwi.State);
+	endState(state: Kiwi.State);
+	numDrawCalls: number;
+	requestRendererInstance(rendererID: string,params?: any);
+	requestSharedRenderer(rendererID: string, params?: any);
 }
 
 /**
@@ -19,146 +19,144 @@ interface IRenderManager {
 * @module Kiwi
 * @submodule Renderers
 * @main
-*/ 
+*/
 module Kiwi.Renderers {
 
-    /**
-    *
-    * @class CanvasRenderer
-    * @constructor 
-    * @namespace Kiwi.Renderers
-    * @param game {Kiwi.Game} The game that this canvas renderer belongs to.
-    * @return {Kiwi.Renderes.CanvasRenderer}
-    *
-    */
-    export class CanvasRenderer implements IRenderManager {
-         
-        constructor(game: Kiwi.Game) {
-            this._game = game;
-        }
-
-        /**
-        * The boot method is executed when all of the DOM elements that are needed to play the game are ready.
-        * @method boot
-        * @public
-        */
-        public boot() {
-
-        }
-
-        /**
-        * Returns the type of object that this is.
-        * @method objType
-        * @return {String} "CanvasRenderer"
-        * @public
-        */
-        public objType() {
-            return "CanvasRenderer";
-        }
-
-        /**
-        * The game that this object belongs to.
-        * @property _game
-        * @type Kiwi.Game
-        * @private
-        */
-        private _game: Kiwi.Game;
-
-        /**
-        * The camera that is currently being used to render upon.
-        * @property _currentCamera
-        * @type Kiwi.Camera
-        * @private
-        */
-        private _currentCamera: Kiwi.Camera;
-
-        /**
-        * This method recursively goes through a State's members and runs the render method of each member that is a Entity. 
-        * If it is a Group then this method recursively goes through that Groups members the process that happened to the State's members happens to the Group's members.
-        * 
-        * @method _recurse
-        * @param child {object} The child that is being checked.
-        * @private
-        */
-        public _recurse(child: IChild) {
+	/**
+	*
+	* @class CanvasRenderer
+	* @constructor 
+	* @namespace Kiwi.Renderers
+	* @param game {Kiwi.Game} The game that this canvas renderer belongs to.
+	* @return {Kiwi.Renderes.CanvasRenderer}
+	*
+	*/
+	export class CanvasRenderer implements IRenderManager {
+
+		constructor(game: Kiwi.Game) {
+			this._game = game;
+		}
+
+		/**
+		* The boot method is executed when all of the DOM elements that are needed to play the game are ready.
+		* @method boot
+		* @public
+		*/
+		public boot() {
+
+		}
+
+		/**
+		* Returns the type of object that this is.
+		* @method objType
+		* @return {String} "CanvasRenderer"
+		* @public
+		*/
+		public objType() {
+			return "CanvasRenderer";
+		}
+
+		/**
+		* The game that this object belongs to.
+		* @property _game
+		* @type Kiwi.Game
+		* @private
+		*/
+		private _game: Kiwi.Game;
+
+		/**
+		* The camera that is currently being used to render upon.
+		* @property _currentCamera
+		* @type Kiwi.Camera
+		* @private
+		*/
+		private _currentCamera: Kiwi.Camera;
+
+		/**
+		* This method recursively goes through a State's members and runs the render method of each member that is a Entity. 
+		* If it is a Group then this method recursively goes through that Groups members the process that happened to the State's members happens to the Group's members.
+		* 
+		* @method _recurse
+		* @param child {object} The child that is being checked.
+		* @private
+		*/
+		public _recurse(child: IChild) {
 			// Do not render non-visible objects or their children
-            if (!child.visible) return;
-
-            if (child.childType() === Kiwi.GROUP) {
-                for (var i = 0; i < (<Kiwi.Group>child).members.length; i++) {
-                    this._recurse((<Kiwi.Group>child).members[i]);
-                }
-            } else {
-                this.numDrawCalls++;
-                child.render(this._currentCamera);
-
-            }
-
-        }
-
-        //for gl compatibility - refactor me
-        public requestRendererInstance(rendererID: string, params: any = null): Kiwi.Renderers.Renderer {
-            return null;
-        }
-
-        public requestSharedRenderer(rendererID: string, params: any = null): Kiwi.Renderers.Renderer {
-            return null;
-        }
-
-        public initState(state:Kiwi.State) {
-
-        }
-
-        public endState(state: Kiwi.State) {
-
-        }
-
-        public numDrawCalls: number = 0;
-
-        /**
-        * Renders all of the Elements that are on a particular camera.
-        * @method render
-        * @param camera {Kiwi.Camera}
-        * @public
-        */
-        public render(camera: Kiwi.Camera) {
-            var root: IChild[] = this._game.states.current.members;
-            
-            //clear 
-            var fillCol = this._game.stage.rgbaColor;
-            // If there is an alpha, clear the canvas before fill
-            if(fillCol.a < 255) {
-                this._game.stage.ctx.clearRect(0,0, this._game.stage.canvas.width, this._game.stage.canvas.height);
-            }
-            this._game.stage.ctx.fillStyle = "rgba(" + fillCol.r + "," + fillCol.g + "," + fillCol.b + "," + fillCol.a / 255 + ")";
-            this._game.stage.ctx.fillRect(0, 0, this._game.stage.canvas.width, this._game.stage.canvas.height);
-            
-            // Stop drawing if there is nothing to draw
-            if ( root.length == 0 ) {
-                return;
-            }
-            
-            this.numDrawCalls = 0;    
-            this._currentCamera = camera;
-            
-            //apply camera transform, accounting for rotPoint offsets
-            var cm: Kiwi.Geom.Matrix = camera.transform.getConcatenatedMatrix();
-            var ct: Kiwi.Geom.Transform = camera.transform;
-
-            this._game.stage.ctx.save();
-            this._game.stage.ctx.setTransform(cm.a, cm.b, cm.c, cm.d, cm.tx, cm.ty);
-            this._game.stage.ctx.transform( 1,0,0,1, -ct.rotPointX, -ct.rotPointY );
-
-
-            for (var i = 0; i < root.length; i++) {
-                this._recurse(root[i]);
-            }
-            this._game.stage.ctx.restore();
-
-        }
-        
-
-    }
+			if (!child.visible) return;
+
+			if (child.childType() === Kiwi.GROUP) {
+				for (var i = 0; i < (<Kiwi.Group>child).members.length; i++) {
+					this._recurse((<Kiwi.Group>child).members[i]);
+				}
+			} else {
+				this.numDrawCalls++;
+				child.render(this._currentCamera);
+
+			}
+
+		}
+
+		//for gl compatibility - refactor me
+		public requestRendererInstance(rendererID: string, params: any = null): Kiwi.Renderers.Renderer {
+			return null;
+		}
+
+		public requestSharedRenderer(rendererID: string, params: any = null): Kiwi.Renderers.Renderer {
+			return null;
+		}
+
+		public initState(state:Kiwi.State) {
+
+		}
+
+		public endState(state: Kiwi.State) {
+
+		}
+
+		public numDrawCalls: number = 0;
+
+		/**
+		* Renders all of the Elements that are on a particular camera.
+		* @method render
+		* @param camera {Kiwi.Camera}
+		* @public
+		*/
+		public render(camera: Kiwi.Camera) {
+			var root: IChild[] = this._game.states.current.members;
+			
+			//clear 
+			var fillCol = this._game.stage.rgbaColor;
+			// If there is an alpha, clear the canvas before fill
+			if(fillCol.a < 255) {
+				this._game.stage.ctx.clearRect(0,0, this._game.stage.canvas.width, this._game.stage.canvas.height);
+			}
+			this._game.stage.ctx.fillStyle = "rgba(" + fillCol.r + "," + fillCol.g + "," + fillCol.b + "," + fillCol.a / 255 + ")";
+			this._game.stage.ctx.fillRect(0, 0, this._game.stage.canvas.width, this._game.stage.canvas.height);
+			
+			// Stop drawing if there is nothing to draw
+			if ( root.length == 0 ) {
+				return;
+			}
+			
+			this.numDrawCalls = 0;    
+			this._currentCamera = camera;
+			
+			//apply camera transform, accounting for rotPoint offsets
+			var cm: Kiwi.Geom.Matrix = camera.transform.getConcatenatedMatrix();
+			var ct: Kiwi.Geom.Transform = camera.transform;
+
+			this._game.stage.ctx.save();
+			this._game.stage.ctx.setTransform(cm.a, cm.b, cm.c, cm.d, cm.tx, cm.ty);
+			this._game.stage.ctx.transform( 1,0,0,1, -ct.rotPointX, -ct.rotPointY );
+
+
+			for (var i = 0; i < root.length; i++) {
+				this._recurse(root[i]);
+			}
+			this._game.stage.ctx.restore();
+
+		}
+
+	}
 
 }
-
diff --git a/src/render/GLArrayBuffer.ts b/src/render/GLArrayBuffer.ts
index 02580bc..b73e212 100644
--- a/src/render/GLArrayBuffer.ts
+++ b/src/render/GLArrayBuffer.ts
@@ -7,185 +7,184 @@
 
 module Kiwi.Renderers {
 
-    /**
-    * Encapsulates a WebGL Array Buffer
-    * @class GLArrayBuffer
-    * @constructor
-    * @namespace Kiwi.Renderers
-    * @param gl {WebGLRenderingContext} 
-    * @param [_itemSize] {number}
-    * @param [items] {number[]}
-    * @param [init=true] {boolean}
-    * @return {Kiwi.RenderersGLArrayBuffer}
-    */
-    export class GLArrayBuffer {
-
-        constructor(gl: WebGLRenderingContext, _itemSize?: number, items?: number[], upload: boolean = true) {
-
-            this.items = items || GLArrayBuffer.squareVertices;
-            this.itemSize = _itemSize || 2;
-            this.numItems = this.items.length / this.itemSize;
-            this.createBuffer(gl);
-            if (upload) {
-                this.uploadBuffer(gl,this.items);
-            }
-        }
-
-        /**
-        * Returns whether the buffer has been created
-        * @property created
-        * @type boolean
-        * @public
-        * @readonly
-        */
-
-        private _created: boolean = false;
-        public get created(): boolean {
-            return this._created;
-        }
-
-        /**
-        * Returns whether the buffer has been uploaded to video memory 
-        * @property created
-        * @type boolean
-        * @public
-        * @readonly
-        */
-        private _uploaded: boolean = false;
-        public get uploaded(): boolean {
-            return this._uploaded;
-        }
-
-        /**
-        * The items ito upload to the buffer
-        * @property items
-        * @type number[]
-        * @public
-        */
-        public items: number[];
-        
-        /**
-        * The WebGL buffer Object
-        * @property buffer
-        * @type WebGLBuffer
-        * @public
-        */
-        public buffer: WebGLBuffer;
-        
-        /**
-        * The size of each item in the buffer.
-        * @property itemSize
-        * @type number
-        * @public
-        */
-        public itemSize: number;
-        
-        /**
-        * The number of items in the buffer
-        * @property numItems
-        * @type number
-        * @public
-        */
-        public numItems: number;
-
-        /**
-        * Clears the item array.
-        * @method clear
-        * @public
-        */
-        public clear() {
-            this.items = new Array();
-        }
-
-        /**
-        * Creates the array buffer.
-        * @method createBuffer
-        * @param gl {WebGLRenderingContext}
-        * @return {WebGLBuffer}
-        * @public
-        */
-        public createBuffer(gl: WebGLRenderingContext): boolean {
-            this.buffer = gl.createBuffer();
-            this._created = true;
-            return true;
-        }
-
-        /**
-        * Uploads the array buffer.
-        * @method uploadBuffer
-        * @param gl {WebGLRenderingContext}
-        * @param items {Array}
-        * @return {boolean}
-        * @public
-        */
-        public uploadBuffer(gl: WebGLRenderingContext, items: number[]): boolean {
-            this.items = items;
-            this.numItems = this.items.length / this.itemSize;
-            var f32: Float32Array = new Float32Array(this.items);
-            gl.bindBuffer(gl.ARRAY_BUFFER, this.buffer);
-            gl.bufferData(gl.ARRAY_BUFFER, f32, gl.DYNAMIC_DRAW);
-            this._uploaded = true;
-            return true;
-        }
-
-        /**
-        * Deletes the array buffer.
-        * @method deleteBuffer
-        * @param gl {WebGLRenderingContext}
-        * @return {boolean}
-        * @public
-        */
-        public deleteBuffer(gl: WebGLRenderingContext): boolean {
-            gl.bindBuffer(gl.ARRAY_BUFFER,this.buffer);
-            gl.deleteBuffer(this.buffer);   
-            this.uploaded = false;
-            this.created = false;
-            return true;
-        }
-
-        /**
-        * 
-        * @property squareVertices
-        * @type number[]
-        * @static
-        * @default [0, 0, 100, 0, 100, 100, 0, 100]
-        * @public
-        */
-        public static squareVertices: number[] = [
-            0, 0,
-            100, 0,
-            100, 100,
-            0, 100
-        ];
-        
-        /**
-        * 
-        * @property squareUVs
-        * @type number[]
-        * @static
-        * @default [0, 0, .1, 0, .1, .1, 0, .1]
-        * @public
-        */
-        public static squareUVs: number[] = [
-            0, 0,
-            .1, 0,
-            .1, .1,
-            0, .1
-        ];
-        
-        /**
-        * 
-        * @property squareCols
-        * @type number[]
-        * @static
-        * @default [1, 1, 1, 1]
-        * @public
-        */
-        public static squareCols: number[] = [
-            1, 1, 1, 1
-
-        ]
-
-    }
+	/**
+	* Encapsulates a WebGL Array Buffer
+	* @class GLArrayBuffer
+	* @constructor
+	* @namespace Kiwi.Renderers
+	* @param gl {WebGLRenderingContext} 
+	* @param [_itemSize] {number}
+	* @param [items] {number[]}
+	* @param [init=true] {boolean}
+	* @return {Kiwi.RenderersGLArrayBuffer}
+	*/
+	export class GLArrayBuffer {
+
+		constructor(gl: WebGLRenderingContext, _itemSize?: number, items?: number[], upload: boolean = true) {
+
+			this.items = items || GLArrayBuffer.squareVertices;
+			this.itemSize = _itemSize || 2;
+			this.numItems = this.items.length / this.itemSize;
+			this.createBuffer(gl);
+			if (upload) {
+				this.uploadBuffer(gl,this.items);
+			}
+		}
+
+		/**
+		* Returns whether the buffer has been created
+		* @property created
+		* @type boolean
+		* @public
+		* @readonly
+		*/
+
+		private _created: boolean = false;
+		public get created(): boolean {
+			return this._created;
+		}
+
+		/**
+		* Returns whether the buffer has been uploaded to video memory 
+		* @property created
+		* @type boolean
+		* @public
+		* @readonly
+		*/
+		private _uploaded: boolean = false;
+		public get uploaded(): boolean {
+			return this._uploaded;
+		}
+
+		/**
+		* The items ito upload to the buffer
+		* @property items
+		* @type number[]
+		* @public
+		*/
+		public items: number[];
+
+		/**
+		* The WebGL buffer Object
+		* @property buffer
+		* @type WebGLBuffer
+		* @public
+		*/
+		public buffer: WebGLBuffer;
+
+		/**
+		* The size of each item in the buffer.
+		* @property itemSize
+		* @type number
+		* @public
+		*/
+		public itemSize: number;
+
+		/**
+		* The number of items in the buffer
+		* @property numItems
+		* @type number
+		* @public
+		*/
+		public numItems: number;
+
+		/**
+		* Clears the item array.
+		* @method clear
+		* @public
+		*/
+		public clear() {
+			this.items = new Array();
+		}
+
+		/**
+		* Creates the array buffer.
+		* @method createBuffer
+		* @param gl {WebGLRenderingContext}
+		* @return {WebGLBuffer}
+		* @public
+		*/
+		public createBuffer(gl: WebGLRenderingContext): boolean {
+			this.buffer = gl.createBuffer();
+			this._created = true;
+			return true;
+		}
+
+		/**
+		* Uploads the array buffer.
+		* @method uploadBuffer
+		* @param gl {WebGLRenderingContext}
+		* @param items {Array}
+		* @return {boolean}
+		* @public
+		*/
+		public uploadBuffer(gl: WebGLRenderingContext, items: number[]): boolean {
+			this.items = items;
+			this.numItems = this.items.length / this.itemSize;
+			var f32: Float32Array = new Float32Array(this.items);
+			gl.bindBuffer(gl.ARRAY_BUFFER, this.buffer);
+			gl.bufferData(gl.ARRAY_BUFFER, f32, gl.DYNAMIC_DRAW);
+			this._uploaded = true;
+			return true;
+		}
+
+		/**
+		* Deletes the array buffer.
+		* @method deleteBuffer
+		* @param gl {WebGLRenderingContext}
+		* @return {boolean}
+		* @public
+		*/
+		public deleteBuffer(gl: WebGLRenderingContext): boolean {
+			gl.bindBuffer(gl.ARRAY_BUFFER,this.buffer);
+			gl.deleteBuffer(this.buffer);   
+			this.uploaded = false;
+			this.created = false;
+			return true;
+		}
+
+		/**
+		* 
+		* @property squareVertices
+		* @type number[]
+		* @static
+		* @default [0, 0, 100, 0, 100, 100, 0, 100]
+		* @public
+		*/
+		public static squareVertices: number[] = [
+			0, 0,
+			100, 0,
+			100, 100,
+			0, 100
+		];
+
+		/**
+		* 
+		* @property squareUVs
+		* @type number[]
+		* @static
+		* @default [0, 0, .1, 0, .1, .1, 0, .1]
+		* @public
+		*/
+		public static squareUVs: number[] = [
+			0, 0,
+			.1, 0,
+			.1, .1,
+			0, .1
+		];
+
+		/**
+		* 
+		* @property squareCols
+		* @type number[]
+		* @static
+		* @default [1, 1, 1, 1]
+		* @public
+		*/
+		public static squareCols: number[] = [
+			1, 1, 1, 1
+		];
+
+	}
 
 }
diff --git a/src/render/GLBlendMode.ts b/src/render/GLBlendMode.ts
index 7f722f5..06bb708 100644
--- a/src/render/GLBlendMode.ts
+++ b/src/render/GLBlendMode.ts
@@ -12,29 +12,29 @@ module Kiwi.Renderers {
 	* @class GLBlendMode
 	* @constructor
 	* @namespace Kiwi.Renderers
-    * @param gl {WebGLRenderingContext}
-    * @param params {Object}
+	* @param gl {WebGLRenderingContext}
+	* @param params {Object}
 	* @return {Kiwi.Renderers.GLBlendMode}
 	* @ since 1.1.0
 	*/
 	export class GLBlendMode {
 
 		constructor(gl: WebGLRenderingContext, params: any) {
-            this.gl = gl;
+			this.gl = gl;
 
-            this.dirty = true;
+			this.dirty = true;
 
-            // Set default parameters
-            this._srcRGB = gl.SRC_ALPHA;
-            this._dstRGB = gl.ONE_MINUS_SRC_ALPHA;
-            this._srcAlpha = gl.ONE;
-            this._dstAlpha = gl.ONE;
-            this._modeRGB = gl.FUNC_ADD;
-            this._modeAlpha = gl.FUNC_ADD;
-            
-            // Process params
-            if(typeof params === "undefined")   { params = null; }
-            if(params)  this.readConfig(params);
+			// Set default parameters
+			this._srcRGB = gl.SRC_ALPHA;
+			this._dstRGB = gl.ONE_MINUS_SRC_ALPHA;
+			this._srcAlpha = gl.ONE;
+			this._dstAlpha = gl.ONE;
+			this._modeRGB = gl.FUNC_ADD;
+			this._modeAlpha = gl.FUNC_ADD;
+
+			// Process params
+			if(typeof params === "undefined")   { params = null; }
+			if(params)  this.readConfig(params);
 		}
 
 		/**
@@ -102,237 +102,237 @@ module Kiwi.Renderers {
 		private _modeAlpha: number;
 
 		/**
-        * Set a blend mode from a param object.
-        *
-        * This is the main method for configuring blend modes on a renderer. It resolves to a pair of calls to blendEquationSeparate and blendFuncSeparate. The params object should specify compatible terms, namely { srcRGB: a, dstRGB: b, srcAlpha: c, dstAlpha: d, modeRGB: e, modeAlpha: f }. You should set abcdef using either direct calls to a gl context (ie. gl.SRC_ALPHA) or by using predefined strings.
-        *
-        * The predefined string parameters for blendEquationSeparate are:
-        *
-        * FUNC_ADD, FUNC_SUBTRACT, and FUNC_REVERSE_SUBTRACT.
-        *
-        * The predefined string parameters for blendFuncSeparate are:
-        *
-        * ZERO, ONE, SRC_COLOR, ONE_MINUS_SRC_COLOR, DST_COLOR, ONE_MINUS_DST_COLOR, SRC_ALPHA, ONE_MINUS_SRC_ALPHA, DST_ALPHA, ONE_MINUS_DST_ALPHA, SRC_ALPHA_SATURATE, CONSTANT_COLOR, ONE_MINUS_CONSTANT_COLOR, CONSTANT_ALPHA, and ONE_MINUS_CONSTANT_ALPHA.
-        *
-        * @method readConfig
-        * @param params {Object}
-        * @public
-        */
-        public readConfig(params: any) {
-            if(params.mode !== undefined)
-                this.setMode(params.mode);
-            else {
-                // Expecting a series of constants in "number" type from a GL object, or valid string names corresponding to same.
-                // Sanitise input - do not change unspecified values
-                params.srcRGB = this.makeConstant(params.srcRGB);
-                if(typeof params.srcRGB !== "undefined")
-                    this._srcRGB = params.srcRGB;
-                params.dstRGB = this.makeConstant(params.dstRGB);
-                if(typeof params.dstRGB !== "undefined")
-                    this._dstRGB = params.dstRGB;
-                params.srcAlpha = this.makeConstant(params.srcAlpha);
-                if(typeof params.srcAlpha !== "undefined")
-                    this._srcAlpha = params.srcAlpha;
-                params.dstAlpha = this.makeConstant(params.dstAlpha);
-                if(typeof params.dstAlpha !== "undefined")
-                    this._dstAlpha = params.dstAlpha;
-                params.modeRGB = this.makeConstant(params.modeRGB);
-                if(typeof params.modeRGB !== "undefined")
-                    this._modeRGB = params.modeRGB;
-                params.modeAlpha = this.makeConstant(params.modeAlpha);
-                if(typeof params.modeAlpha !== "undefined")
-                    this._modeAlpha = params.modeAlpha;
-            }
-            this.dirty = true;
-        }
+		* Set a blend mode from a param object.
+		*
+		* This is the main method for configuring blend modes on a renderer. It resolves to a pair of calls to blendEquationSeparate and blendFuncSeparate. The params object should specify compatible terms, namely { srcRGB: a, dstRGB: b, srcAlpha: c, dstAlpha: d, modeRGB: e, modeAlpha: f }. You should set abcdef using either direct calls to a gl context (ie. gl.SRC_ALPHA) or by using predefined strings.
+		*
+		* The predefined string parameters for blendEquationSeparate are:
+		*
+		* FUNC_ADD, FUNC_SUBTRACT, and FUNC_REVERSE_SUBTRACT.
+		*
+		* The predefined string parameters for blendFuncSeparate are:
+		*
+		* ZERO, ONE, SRC_COLOR, ONE_MINUS_SRC_COLOR, DST_COLOR, ONE_MINUS_DST_COLOR, SRC_ALPHA, ONE_MINUS_SRC_ALPHA, DST_ALPHA, ONE_MINUS_DST_ALPHA, SRC_ALPHA_SATURATE, CONSTANT_COLOR, ONE_MINUS_CONSTANT_COLOR, CONSTANT_ALPHA, and ONE_MINUS_CONSTANT_ALPHA.
+		*
+		* @method readConfig
+		* @param params {Object}
+		* @public
+		*/
+		public readConfig(params: any) {
+			if(params.mode !== undefined)
+				this.setMode(params.mode);
+			else {
+				// Expecting a series of constants in "number" type from a GL object, or valid string names corresponding to same.
+				// Sanitise input - do not change unspecified values
+				params.srcRGB = this.makeConstant(params.srcRGB);
+				if(typeof params.srcRGB !== "undefined")
+					this._srcRGB = params.srcRGB;
+				params.dstRGB = this.makeConstant(params.dstRGB);
+				if(typeof params.dstRGB !== "undefined")
+					this._dstRGB = params.dstRGB;
+				params.srcAlpha = this.makeConstant(params.srcAlpha);
+				if(typeof params.srcAlpha !== "undefined")
+					this._srcAlpha = params.srcAlpha;
+				params.dstAlpha = this.makeConstant(params.dstAlpha);
+				if(typeof params.dstAlpha !== "undefined")
+					this._dstAlpha = params.dstAlpha;
+				params.modeRGB = this.makeConstant(params.modeRGB);
+				if(typeof params.modeRGB !== "undefined")
+					this._modeRGB = params.modeRGB;
+				params.modeAlpha = this.makeConstant(params.modeAlpha);
+				if(typeof params.modeAlpha !== "undefined")
+					this._modeAlpha = params.modeAlpha;
+			}
+			this.dirty = true;
+		}
 
-        /**
-        * Formats a parameter into a GL context-compatible number. This recognises valid constant names, such as "SRC_ALPHA" or "REVERSE_AND_SUBTRACT", with some tolerance for case. It does not check for valid numeric codes.
-        * @method makeConstant
-        * @param code {String}
-        * @return {number}
-        * @private
-        */
-        private makeConstant(code: any) {
-            // Numbers are assumed to be correct.
-            if(typeof code == "number")
-                return( code );
+		/**
+		* Formats a parameter into a GL context-compatible number. This recognises valid constant names, such as "SRC_ALPHA" or "REVERSE_AND_SUBTRACT", with some tolerance for case. It does not check for valid numeric codes.
+		* @method makeConstant
+		* @param code {String}
+		* @return {number}
+		* @private
+		*/
+		private makeConstant(code: any) {
+			// Numbers are assumed to be correct.
+			if(typeof code == "number")
+				return( code );
 
-            if(typeof code == "string")
-                code = code.toUpperCase();
+			if(typeof code == "string")
+				code = code.toUpperCase();
 
-            switch( code ) {
-                case "ZERO":
-                    code = this.gl.ZERO;
-                    break;
-                case "ONE":
-                    code = this.gl.ONE;
-                    break;
-                case "SRC_COLOR":
-                case "SRC_COLOUR":
-                    code = this.gl.SRC_COLOR;
-                    break;
-                case "ONE_MINUS_SRC_COLOR":
-                case "ONE_MINUS_SRC_COLOUR":
-                    code = this.gl.ONE_MINUS_SRC_COLOR;
-                    break;
-                case "DST_COLOR":
-                case "DST_COLOUR":
-                    code = this.gl.DST_COLOR;
-                    break;
-                case "ONE_MINUS_DST_COLOR":
-                case "ONE_MINUS_DST_COLOUR":
-                    code = this.gl.ONE_MINUS_DST_COLOR;
-                    break;
-                case "SRC_ALPHA":
-                    code = this.gl.SRC_ALPHA;
-                    break;
-                case "ONE_MINUS_SRC_ALPHA":
-                    code = this.gl.ONE_MINUS_SRC_ALPHA;
-                    break;
-                case "DST_ALPHA":
-                    code = this.gl.DST_ALPHA;
-                    break;
-                case "ONE_MINUS_DST_ALPHA":
-                    code = this.gl.ONE_MINUS_DST_ALPHA;
-                    break;
-                case "SRC_ALPHA_SATURATE":
-                    code = this.gl.SRC_ALPHA_SATURATE;
-                    break;
-                case "CONSTANT_COLOR":
-                case "CONSTANT_COLOUR":
-                    code = this.gl.CONSTANT_COLOR;
-                    break;
-                case "ONE_MINUS_CONSTANT_COLOR":
-                case "ONE_MINUS_CONSTANT_COLOUR":
-                    code = this.gl.ONE_MINUS_CONSTANT_COLOR;
-                    break;
-                case "CONSTANT_ALPHA":
-                    code = this.gl.CONSTANT_ALPHA;
-                    break;
-                case "ONE_MINUS_CONSTANT_ALPHA":
-                    code = this.gl.ONE_MINUS_CONSTANT_ALPHA;
-                    break;
-                case "FUNC_ADD":
-                    code = this.gl.FUNC_ADD;
-                    break;
-                case "FUNC_SUBTRACT":
-                    code = this.gl.FUNC_SUBTRACT;
-                    break;
-                case "FUNC_REVERSE_SUBTRACT":
-                    code = this.gl.FUNC_REVERSE_SUBTRACT;
-                    break;
-                default:
-                    code = undefined;
-                    break;
-                }
-            return( code );
-        }
+			switch( code ) {
+				case "ZERO":
+					code = this.gl.ZERO;
+					break;
+				case "ONE":
+					code = this.gl.ONE;
+					break;
+				case "SRC_COLOR":
+				case "SRC_COLOUR":
+					code = this.gl.SRC_COLOR;
+					break;
+				case "ONE_MINUS_SRC_COLOR":
+				case "ONE_MINUS_SRC_COLOUR":
+					code = this.gl.ONE_MINUS_SRC_COLOR;
+					break;
+				case "DST_COLOR":
+				case "DST_COLOUR":
+					code = this.gl.DST_COLOR;
+					break;
+				case "ONE_MINUS_DST_COLOR":
+				case "ONE_MINUS_DST_COLOUR":
+					code = this.gl.ONE_MINUS_DST_COLOR;
+					break;
+				case "SRC_ALPHA":
+					code = this.gl.SRC_ALPHA;
+					break;
+				case "ONE_MINUS_SRC_ALPHA":
+					code = this.gl.ONE_MINUS_SRC_ALPHA;
+					break;
+				case "DST_ALPHA":
+					code = this.gl.DST_ALPHA;
+					break;
+				case "ONE_MINUS_DST_ALPHA":
+					code = this.gl.ONE_MINUS_DST_ALPHA;
+					break;
+				case "SRC_ALPHA_SATURATE":
+					code = this.gl.SRC_ALPHA_SATURATE;
+					break;
+				case "CONSTANT_COLOR":
+				case "CONSTANT_COLOUR":
+					code = this.gl.CONSTANT_COLOR;
+					break;
+				case "ONE_MINUS_CONSTANT_COLOR":
+				case "ONE_MINUS_CONSTANT_COLOUR":
+					code = this.gl.ONE_MINUS_CONSTANT_COLOR;
+					break;
+				case "CONSTANT_ALPHA":
+					code = this.gl.CONSTANT_ALPHA;
+					break;
+				case "ONE_MINUS_CONSTANT_ALPHA":
+					code = this.gl.ONE_MINUS_CONSTANT_ALPHA;
+					break;
+				case "FUNC_ADD":
+					code = this.gl.FUNC_ADD;
+					break;
+				case "FUNC_SUBTRACT":
+					code = this.gl.FUNC_SUBTRACT;
+					break;
+				case "FUNC_REVERSE_SUBTRACT":
+					code = this.gl.FUNC_REVERSE_SUBTRACT;
+					break;
+				default:
+					code = undefined;
+					break;
+				}
+			return( code );
+		}
 
-        /**
-        * Sets a blend mode by name. Name is case-tolerant.
-        *
-        * These are shortcuts to setting the blend function parameters manually. A listing of valid modes follows. Each is listed with the parameters modeRGB, modeAlpha, srcRGB, dstRGB, srcAlpha, and dstAlpha, constants used in the gl calls "blendEquationSeparate(modeRGB, modeAlpha)" and "blendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha". This is very technical, and will probably only be useful if you are developing your own shaders for Kiwi.js.
-        *
-        * "NORMAL" or any non-recognised string will draw as normal, blending colour via alpha. FUNC_ADD, FUNC_ADD, SRC_ALPHA, ONE_MINUS_SRC_ALPHA, ONE, ONE.
-        *
-        * "ADD" or "ADDITIVE" will add pixels to the background, creating a lightening effect. FUNC_ADD, FUNC_ADD, SRC_ALPHA, ONE, ONE, ONE.
-        *
-        * "SUBTRACT" or "SUBTRACTIVE" will subtract pixels from the background, creating an eerie dark effect. FUNC_REVERSE_SUBTRACT, FUNC_ADD, SRC_ALPHA, ONE, ONE, ONE.
-        *
-        * "ERASE" or "ERASER" will erase the game canvas itself, allowing the page background to show through. You can later draw over this erased region. FUNC_REVERSE_SUBTRACT, FUNC_REVERSE_SUBTRACT, SRC_ALPHA, ONE_MINUS_SRC_ALPHA, ONE, ONE.
-        *
-        * "BLACK" or "BLACKEN" will turn all colour black, but preserve alpha. FUNC_ADD, FUNC_ADD, ZERO, ONE_MINUS_SRC_ALPHA, ONE, ONE.
-        *
-        * Blend modes as seen in Adobe Photoshop are not reliably available via WebGL blend modes. Such blend modes require shaders to create.
-        * @method setMode
-        * @param mode {String}
-        * @public
-        */
-        public setMode(mode: string) {
-            mode = mode.toUpperCase();
-            switch( mode ) {
-                case "ADDITIVE":
-                case "ADD":
-                    this._srcRGB = this.gl.SRC_ALPHA;
-                    this._dstRGB = this.gl.ONE;
-                    this._srcAlpha = this.gl.ONE;
-                    this._dstAlpha = this.gl.ONE;
-                    this._modeRGB = this.gl.FUNC_ADD;
-                    this._modeAlpha = this.gl.FUNC_ADD;
-                    break;
-                case "SUBTRACT":
-                case "SUBTRACTIVE":
-                    this._srcRGB = this.gl.SRC_ALPHA;
-                    this._dstRGB = this.gl.ONE;
-                    this._srcAlpha = this.gl.ONE;
-                    this._dstAlpha = this.gl.ONE;
-                    this._modeRGB = this.gl.FUNC_REVERSE_SUBTRACT;
-                    this._modeAlpha = this.gl.FUNC_ADD;
-                    break;
-                case "ERASE":
-                case "ERASER":
-                    this._srcRGB = this.gl.SRC_ALPHA;
-                    this._dstRGB = this.gl.ONE_MINUS_SRC_ALPHA;
-                    this._srcAlpha = this.gl.ONE;
-                    this._dstAlpha = this.gl.ONE;
-                    this._modeRGB = this.gl.FUNC_REVERSE_SUBTRACT;
-                    this._modeAlpha = this.gl.FUNC_REVERSE_SUBTRACT;
-                    break;
-                case "BLACK":
-                case "BLACKEN":
-                    this._srcRGB = this.gl.ZERO;
-                    this._dstRGB = this.gl.ONE_MINUS_SRC_ALPHA;
-                    this._srcAlpha = this.gl.ONE;
-                    this._dstAlpha = this.gl.ONE;
-                    this._modeRGB = this.gl.FUNC_ADD;
-                    this._modeAlpha = this.gl.FUNC_ADD;
-                    break;
-                case "NORMAL":
-                default:
-                    this._srcRGB = this.gl.SRC_ALPHA;
-                    this._dstRGB = this.gl.ONE_MINUS_SRC_ALPHA;
-                    this._srcAlpha = this.gl.ONE;
-                    this._dstAlpha = this.gl.ONE;
-                    this._modeRGB = this.gl.FUNC_ADD;
-                    this._modeAlpha = this.gl.FUNC_ADD;
-                    break;
-            }
-            this.dirty = true;
-        }
+		/**
+		* Sets a blend mode by name. Name is case-tolerant.
+		*
+		* These are shortcuts to setting the blend function parameters manually. A listing of valid modes follows. Each is listed with the parameters modeRGB, modeAlpha, srcRGB, dstRGB, srcAlpha, and dstAlpha, constants used in the gl calls "blendEquationSeparate(modeRGB, modeAlpha)" and "blendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha". This is very technical, and will probably only be useful if you are developing your own shaders for Kiwi.js.
+		*
+		* "NORMAL" or any non-recognised string will draw as normal, blending colour via alpha. FUNC_ADD, FUNC_ADD, SRC_ALPHA, ONE_MINUS_SRC_ALPHA, ONE, ONE.
+		*
+		* "ADD" or "ADDITIVE" will add pixels to the background, creating a lightening effect. FUNC_ADD, FUNC_ADD, SRC_ALPHA, ONE, ONE, ONE.
+		*
+		* "SUBTRACT" or "SUBTRACTIVE" will subtract pixels from the background, creating an eerie dark effect. FUNC_REVERSE_SUBTRACT, FUNC_ADD, SRC_ALPHA, ONE, ONE, ONE.
+		*
+		* "ERASE" or "ERASER" will erase the game canvas itself, allowing the page background to show through. You can later draw over this erased region. FUNC_REVERSE_SUBTRACT, FUNC_REVERSE_SUBTRACT, SRC_ALPHA, ONE_MINUS_SRC_ALPHA, ONE, ONE.
+		*
+		* "BLACK" or "BLACKEN" will turn all colour black, but preserve alpha. FUNC_ADD, FUNC_ADD, ZERO, ONE_MINUS_SRC_ALPHA, ONE, ONE.
+		*
+		* Blend modes as seen in Adobe Photoshop are not reliably available via WebGL blend modes. Such blend modes require shaders to create.
+		* @method setMode
+		* @param mode {String}
+		* @public
+		*/
+		public setMode(mode: string) {
+			mode = mode.toUpperCase();
+			switch( mode ) {
+				case "ADDITIVE":
+				case "ADD":
+					this._srcRGB = this.gl.SRC_ALPHA;
+					this._dstRGB = this.gl.ONE;
+					this._srcAlpha = this.gl.ONE;
+					this._dstAlpha = this.gl.ONE;
+					this._modeRGB = this.gl.FUNC_ADD;
+					this._modeAlpha = this.gl.FUNC_ADD;
+					break;
+				case "SUBTRACT":
+				case "SUBTRACTIVE":
+					this._srcRGB = this.gl.SRC_ALPHA;
+					this._dstRGB = this.gl.ONE;
+					this._srcAlpha = this.gl.ONE;
+					this._dstAlpha = this.gl.ONE;
+					this._modeRGB = this.gl.FUNC_REVERSE_SUBTRACT;
+					this._modeAlpha = this.gl.FUNC_ADD;
+					break;
+				case "ERASE":
+				case "ERASER":
+					this._srcRGB = this.gl.SRC_ALPHA;
+					this._dstRGB = this.gl.ONE_MINUS_SRC_ALPHA;
+					this._srcAlpha = this.gl.ONE;
+					this._dstAlpha = this.gl.ONE;
+					this._modeRGB = this.gl.FUNC_REVERSE_SUBTRACT;
+					this._modeAlpha = this.gl.FUNC_REVERSE_SUBTRACT;
+					break;
+				case "BLACK":
+				case "BLACKEN":
+					this._srcRGB = this.gl.ZERO;
+					this._dstRGB = this.gl.ONE_MINUS_SRC_ALPHA;
+					this._srcAlpha = this.gl.ONE;
+					this._dstAlpha = this.gl.ONE;
+					this._modeRGB = this.gl.FUNC_ADD;
+					this._modeAlpha = this.gl.FUNC_ADD;
+					break;
+				case "NORMAL":
+				default:
+					this._srcRGB = this.gl.SRC_ALPHA;
+					this._dstRGB = this.gl.ONE_MINUS_SRC_ALPHA;
+					this._srcAlpha = this.gl.ONE;
+					this._dstAlpha = this.gl.ONE;
+					this._modeRGB = this.gl.FUNC_ADD;
+					this._modeAlpha = this.gl.FUNC_ADD;
+					break;
+			}
+			this.dirty = true;
+		}
 
-        /**
-        * Compares against another GLBlendMode
-        * @method isIdentical
-        * @return {Boolean} Is this GLBlendMode identical to the passed GLBlendMode?
-        * @param blendMode {Kiwi.Renderers.GLBlendMode}
-        * @public
-        */
-        public isIdentical(blendMode: GLBlendMode) {
-            if(this == blendMode)
-            	return( true );
-            if(     this._srcRGB == blendMode._srcRGB
-                &&  this._dstRGB == blendMode._dstRGB
-                &&  this._srcAlpha == blendMode._srcAlpha
-                &&  this._dstAlpha == blendMode._dstAlpha
-                &&  this._modeRGB == blendMode._modeRGB
-                &&  this._modeAlpha == blendMode._modeAlpha)
-            	return( true );
-            return( false );
-        }
+		/**
+		* Compares against another GLBlendMode
+		* @method isIdentical
+		* @return {Boolean} Is this GLBlendMode identical to the passed GLBlendMode?
+		* @param blendMode {Kiwi.Renderers.GLBlendMode}
+		* @public
+		*/
+		public isIdentical(blendMode: GLBlendMode) {
+			if(this == blendMode)
+				return( true );
+			if(     this._srcRGB == blendMode._srcRGB
+				&&  this._dstRGB == blendMode._dstRGB
+				&&  this._srcAlpha == blendMode._srcAlpha
+				&&  this._dstAlpha == blendMode._dstAlpha
+				&&  this._modeRGB == blendMode._modeRGB
+				&&  this._modeAlpha == blendMode._modeAlpha)
+				return( true );
+			return( false );
+		}
 
-        /**
-        * Sets the blend mode on the video card
-        * @method apply
-        * @param gl {WebGLRenderingContext}
-        * @public
-        */
-        public apply(gl: WebGLRenderingContext)
-        {
-            gl.blendEquationSeparate(this._modeRGB, this._modeAlpha);
-            gl.blendFuncSeparate(this._srcRGB, this._dstRGB, this._srcAlpha, this._dstAlpha);
-            // Remove dirty flag
-            this.dirty = false;
-        }
+		/**
+		* Sets the blend mode on the video card
+		* @method apply
+		* @param gl {WebGLRenderingContext}
+		* @public
+		*/
+		public apply(gl: WebGLRenderingContext)
+		{
+			gl.blendEquationSeparate(this._modeRGB, this._modeAlpha);
+			gl.blendFuncSeparate(this._srcRGB, this._dstRGB, this._srcAlpha, this._dstAlpha);
+			// Remove dirty flag
+			this.dirty = false;
+		}
 	}
-}
\ No newline at end of file
+}
diff --git a/src/render/GLElementArrayBuffer.ts b/src/render/GLElementArrayBuffer.ts
index d252cf8..885e3c7 100644
--- a/src/render/GLElementArrayBuffer.ts
+++ b/src/render/GLElementArrayBuffer.ts
@@ -7,114 +7,114 @@
 
 module Kiwi.Renderers {
 
-    /**
-    * Encapsulates a WebGL Element Array Buffer
-    * @class GLElementArrayBuffer
-    * @constructor
-    * @namespace Kiwi.Renderers
-    * @param gl {WebGLRenderingContent}
-    * @param [_itemSize] {number}
-    * @param [_indices] {number[]}
-    * @param [init=true] {boolean}
-    * @return {GLElementArrayBuffer}
-    */
-    export class GLElementArrayBuffer {
-
-        constructor(gl: WebGLRenderingContext, _itemSize?: number, _indices?: number[], init: boolean = true) {
-
-            this.indices = _indices || GLElementArrayBuffer.square;
-            this.itemSize = _itemSize || 1;
-            this.numItems = this.indices.length / this.itemSize;
-            if (init) {
-                this.buffer = this.init(gl);
-            }
-        }
-        
-        /**
-        * An array of indices
-        * @property indices
-        * @type number[]
-        * @public
-        */
-        public indices: number[];
-        
-        /**
-        * The Element Array Buffer object
-        * @property buffer
-        * @type WebGLBuffer
-        * @public
-        */
-        public buffer: WebGLBuffer;
-        
-        /**
-        * The size of each buffer item
-        * @property itemSize
-        * @type number
-        * @public
-        */
-        public itemSize: number;
-        
-        /**
-        * The numbe of items in the buffer
-        * @property numItems
-        * @type number
-        * @public
-        */
-        public numItems: number;
-        
-        /**
-        * Clears the indices array.
-        * @method clear
-        * @public
-        */
-        public clear() {
-            this.indices = new Array();
-        }
-
-        /**
-        * Initialises the Element Array Buffer
-        * @method init
-        * @param gl {WebGLRenderingContext}
-        * @return {WebGLBuffer}
-        * @public
-        */
-        public init(gl: WebGLRenderingContext): WebGLBuffer {
-            var buffer: WebGLBuffer = gl.createBuffer();
-            gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, buffer);
-            gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array(this.indices), gl.STATIC_DRAW);
-
-            return buffer;
-        }
-        
-        /**
-        * Refreshes the Element Array Buffer
-        * @method refresh
-        * @param gl {WebGLRenderingContext}
-        * @param indices {number[]} 
-        * @return {WebGLBuffer}
-        * @public
-        */
-        public refresh(gl: WebGLRenderingContext,indices:number[]): WebGLBuffer {
-            this.numItems = this.indices.length / this.itemSize;
-            gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.buffer);
-            gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array(this.indices), gl.STATIC_DRAW);
-
-            return this.buffer;
-        }
-        
-        /**
-        * The required indices for a single quad.
-        * @property square 
-        * @static
-        * @type number[]
-        * @default [0,1,2,0,2,3]
-        * @public
-        */
-        public static square: number[] = [
-            0, 1, 2,
-            0, 2, 3
-        ];
-
-    }
+	/**
+	* Encapsulates a WebGL Element Array Buffer
+	* @class GLElementArrayBuffer
+	* @constructor
+	* @namespace Kiwi.Renderers
+	* @param gl {WebGLRenderingContent}
+	* @param [_itemSize] {number}
+	* @param [_indices] {number[]}
+	* @param [init=true] {boolean}
+	* @return {GLElementArrayBuffer}
+	*/
+	export class GLElementArrayBuffer {
+
+		constructor(gl: WebGLRenderingContext, _itemSize?: number, _indices?: number[], init: boolean = true) {
+
+			this.indices = _indices || GLElementArrayBuffer.square;
+			this.itemSize = _itemSize || 1;
+			this.numItems = this.indices.length / this.itemSize;
+			if (init) {
+				this.buffer = this.init(gl);
+			}
+		}
+
+		/**
+		* An array of indices
+		* @property indices
+		* @type number[]
+		* @public
+		*/
+		public indices: number[];
+
+		/**
+		* The Element Array Buffer object
+		* @property buffer
+		* @type WebGLBuffer
+		* @public
+		*/
+		public buffer: WebGLBuffer;
+
+		/**
+		* The size of each buffer item
+		* @property itemSize
+		* @type number
+		* @public
+		*/
+		public itemSize: number;
+
+		/**
+		* The numbe of items in the buffer
+		* @property numItems
+		* @type number
+		* @public
+		*/
+		public numItems: number;
+
+		/**
+		* Clears the indices array.
+		* @method clear
+		* @public
+		*/
+		public clear() {
+			this.indices = new Array();
+		}
+
+		/**
+		* Initialises the Element Array Buffer
+		* @method init
+		* @param gl {WebGLRenderingContext}
+		* @return {WebGLBuffer}
+		* @public
+		*/
+		public init(gl: WebGLRenderingContext): WebGLBuffer {
+			var buffer: WebGLBuffer = gl.createBuffer();
+			gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, buffer);
+			gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array(this.indices), gl.STATIC_DRAW);
+
+			return buffer;
+		}
+
+		/**
+		* Refreshes the Element Array Buffer
+		* @method refresh
+		* @param gl {WebGLRenderingContext}
+		* @param indices {number[]} 
+		* @return {WebGLBuffer}
+		* @public
+		*/
+		public refresh(gl: WebGLRenderingContext,indices:number[]): WebGLBuffer {
+			this.numItems = this.indices.length / this.itemSize;
+			gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.buffer);
+			gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array(this.indices), gl.STATIC_DRAW);
+
+			return this.buffer;
+		}
+
+		/**
+		* The required indices for a single quad.
+		* @property square 
+		* @static
+		* @type number[]
+		* @default [0,1,2,0,2,3]
+		* @public
+		*/
+		public static square: number[] = [
+			0, 1, 2,
+			0, 2, 3
+		];
+
+	}
 
 }
diff --git a/src/render/GLRenderManager.ts b/src/render/GLRenderManager.ts
index 730f9ce..43e8922 100644
--- a/src/render/GLRenderManager.ts
+++ b/src/render/GLRenderManager.ts
@@ -1,463 +1,461 @@
-
 //used for ts recognition of matrix-gl
 declare var mat2d, mat3, vec2, vec3, mat4;
 
-
-
 /**
-* 
-* 
 * @module Kiwi
 * @submodule Renderers 
 * @main Renderers
 * @namespace Kiwi.Renderers
-*/ 
+*/
 
 module Kiwi.Renderers {
-    
-    /**
-    * Manages all rendering using WebGL. Requires the inclusion of gl-matrix.js / g-matrix.min.js -  https://github.com/toji/gl-matrix
-    * Directly manages renderer objects, including factory methods for their creation. 
-    * Creates manager objects for shaders and textures.
-    * Manages gl state at game initialisation, at state start and end, and per frame.
-    * Runs the recursive scene graph rendering sequence every frame. 
-    * @class GLRenderManager
-    * @extends IRenderer
-    * @constructor
-    * @param game {Kiwi.Game} The game that this renderer belongs to.
-    * @return {Kiwi.Renderers.GLRenderManager}
-    */
-    export class GLRenderManager implements IRenderManager {
-
-       
-        constructor(game: Kiwi.Game) {
-            this._game = game;
-            if (typeof mat4 === "undefined") {
-                throw "ERROR: gl-matrix.js is missing";
-            }
-            this._currentBlendMode = new Kiwi.Renderers.GLBlendMode(this._game.stage.gl, {mode:"DEFAULT"} );
-        }
-
-        /**
-        * Initialises all WebGL rendering services
-        * @method boot
-        * @public
-        */
-        public boot() {
-            this._textureManager = new GLTextureManager();
-            this._shaderManager = new Kiwi.Shaders.ShaderManager();
-            //this.filters = new Kiwi.Filters.GLFilterManager(this._game, this._shaderManager);
-            this._init();
-            
-        }
-        
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} "GLRenderManager"
-        * @public
-        */
-        public objType() {
-            return "GLRenderManager";
-        }
-
-        /**
-        * The game that this renderer is used with.
-        * @property _game
-        * @type Game
-        * @private
-        */
-        private _game: Kiwi.Game;
-
-        /**
-        * The texture manager object used to allocate GL Textures.
-        * @property _textureManager
-        * @type Kiwi.Renderes.GLTextureManager
-        * @private
-        */
-        private _textureManager: GLTextureManager;
-       
-        /**
-        * The shader manager object used to allocate GL Shaders.
-        * @property _shaderManager
-        * @type Kiwi.Renderes.GLShaderManager
-        * @private
-        */
-       
-        private _shaderManager: Kiwi.Shaders.ShaderManager;
-
-        //public filters: Kiwi.Filters.GLFilterManager;
-
-        /**
-        * The stage resolution in pixels
-        * @property _stageResolution
-        * @type Float32Array
-        * @private
-        */
-        private _stageResolution: Float32Array;
-
-        /**
-        * The renderer object that is in use during a rendering batch.
-        * @property _currentRenderer
-        * @type Kiwi.Renderers.Renderer
-        * @private
-        */
-        private _currentRenderer: Renderer = null;
-
-        /**
-        * The current blend mode.
-        * @property _currentBlendMode
-        * @type Kiwi.Renderers.GLBlendMode
-        * @private
-        * @since 1.1.0
-        */
-        private _currentBlendMode: GLBlendMode;
-        
-        /**
-        * Tally of number of entities rendered per frame 
-        * @property _entityCount
-        * @type number
-        * @default 0
-        * @private
-        */
-        private _entityCount: number = 0;
-
-         /**
-        * Tally of number of draw calls per frame
-        * @property numDrawCalls
-        * @type number
-        * @default 0
-        * @public
-        */
-        public numDrawCalls: number = 0;
-        
-        /**
-        * Maximum allowable sprites to render per frame
-        * Note:Not currently used  - candidate for deletion
-        * @property _maxItems
-        * @type number
-        * @default 1000
-        * @private
-        */
-        private _maxItems: number = 1000;
-         
-        
-        public camMatrix: Float32Array;
-        
-        
-        /**
-        * The most recently bound texture atlas.
-        * @property _currentTextureAtlas
-        * @type TextureAtlas
-        * @private
-        */
-        private _currentTextureAtlas: Kiwi.Textures.TextureAtlas = null;
-        
-        /**
-        * Adds a texture to the Texture Manager. 
-        * @method addTexture
-        * @param {WebGLRenderingContext} gl
-        * @param {Kiwi.Textures.TextureAtlas} atlas
-        * @public
-        */
-        public addTexture(gl: WebGLRenderingContext, atlas: Kiwi.Textures.TextureAtlas) {
-            this._textureManager.uploadTexture(gl, atlas);
-        }
-
-        /**
-        * An array of renderers. Shared renderers are used for batch rendering. Multiple gameobjects can use the same renderer
-        * instance and add rendering info to a batch rather than rendering individually. 
-        * This means only one draw call is necessary to render a number of objects. The most common use of this is standard 2d sprite rendering,
-        * and the TextureAtlasRenderer is added by default as a shared renderer. Sprites, StaticImages and Tilemaps (core gameobjects) can all use the
-        * same renderer/shader combination and be drawn as part of the same batch.
-        * Custom gameobjects can also choose to use a shared renderer, fo example in the case that a custom gameobject's rendering requirements matched the TextureAtlasRenderer
-        * capabilities.
-        *  
-        * @property _sharedRenderers
-        * @type Array
-        * @private
-        */
-        private _sharedRenderers: any = {};
-
-        /**
-        * Adds a renderer to the sharedRenderer array. The rendererID is a string that must match a renderer property of the Kiwi.Renderers object. 
-        * If a match is found and an instance does not already exist, then a renderer is instantiated and added to the array.
-        * @method addSharedRenderer
-        * @param {String} rendererID
-        * @param {Object} params
-        * @return {Boolean} success
-        * @public
-        */
-
-        public addSharedRenderer(rendererID:string,params:any = null):boolean {
-            //does renderer exist?
-            if (Kiwi.Renderers[rendererID]) {
-              
-                //already added?
-                if (!(rendererID in this._sharedRenderers)) {
-                    this._sharedRenderers[rendererID] = new Kiwi.Renderers[rendererID](this._game.stage.gl,this._shaderManager,params);
-                    return true;
-                }
-            }
-            return false;
-        }
-
-
-        /**
-        * Adds a cloned renderer to the sharedRenderer array. The rendererID is a string that must match a renderer property of the Kiwi.Renderers object. The cloneID is the name for the cloned renderer.
-        *
-        * If a match is found and an instance does not already exist, then a renderer is instantiated and added to the array.
-        *
-        * Cloned shared renderers are useful if some items in your scene will use a special shader or blend mode, but others will not. You can subsequently access the clones with a normal requestSharedRenderer() call. You should use this instead of requestRendererInstance() whenever possible, because shared renderers are more efficient than instances.
-        *
-        * @method addSharedRendererClone
-        * @param {String} rendererID
-        * @param {String} cloneID
-        * @param {Object} params
-        * @return {Boolean} success
-        * @public
-        * @since 1.1.0
-        */
-        public addSharedRendererClone(rendererID: string, cloneID: string, params: any = null): boolean {
-            if (typeof params === "undefined") { params = null; }
-            //does renderer exist?
-            if (Kiwi.Renderers[rendererID]) {
-                //already added?
-                if (!(cloneID in this._sharedRenderers)) {
-                    this._sharedRenderers[cloneID] = new Kiwi.Renderers[rendererID](this._game.stage.gl, this._shaderManager, params);
-                    return true;
-                }
-            }
-            return false;
-        }
-
-
-        /**
-	    * Requests a shared renderer. A game object that wants to use a shared renderer uses this method to obtain a reference to the shared renderer instance.
-	    * @method requestSharedRenderer
-        * @param {String} rendererID
-        * @param {Object} params
-        * @return {Kiwi.Renderers.Renderer} A shared renderer or null if none found.
-        * @public
-	    */
-
-        public requestSharedRenderer(rendererID: string,params:any = null): Kiwi.Renderers.Renderer {
-            var renderer: Kiwi.Renderers.Renderer = this._sharedRenderers[rendererID];
-            if (renderer) {
-                return renderer;
-            } else {
-                if (this.addSharedRenderer(rendererID,params)) {
-                    return this._sharedRenderers[rendererID];
-                } else {
-                    Kiwi.Log.log("No renderer called " + rendererID, '#renderer', '#webgl');
-                }
-            }
-            //failed request
-            return null;
-
-        }
-
-
-        /**
-	    * Requests a new renderer instance. This factory method is the only way gameobjects should instantiate their own renderer. 
-        * The rendererID is a string that must match a renderer property of the Kiwi.Renderers object. 
-        * If a match is found then a renderer is instantiated and returned. Gameobjects which have rendering requirements that do not suit
-        * batch rendering use this technique.
-	    * @method requestRendererInstance
-        * @param {String} rendererID The name of the requested renderer
-        * @param {Object} params
-        * @return {Kiwi.Renderers.Renderer} A renderer or null if none found.
-        * @public
-	    */
-
-        public requestRendererInstance(rendererID: string, params: any = null): Kiwi.Renderers.Renderer {
-            if (rendererID in Kiwi.Renderers) {
-                var renderer = new Kiwi.Renderers[rendererID](this._game.stage.gl, this._shaderManager, params); 
-                return renderer
-            } else {
-                Kiwi.Log.log("No renderer with id " + rendererID + " exists", '#renderer', '#webgl');
-            }
-            return null; //fail
-        } 
-
-        /*
-        public get filtersEnabled(): boolean {
-            return this._filtersEnabled;
-        }
-
-        public set filtersEnabled(val: boolean) {
-            this._filtersEnabled = val;
-        }
-
-        private _filtersEnabled: boolean = false;
-        
-        /**
-        * Performs initialisation required for single game instance - happens once, at bootup
-        * Sets global GL state.
-        * Initialises managers for shaders and textures.
-        * Instantiates the default shared renderer (TextureAtlasRenderer)
-        * @method _init
-        * @private
-        */
-        private _init() {
-            Kiwi.Log.log("Initialising WebGL", '#renderer', '#webgl');
-
-            var gl: WebGLRenderingContext = this._game.stage.gl;
-
-            //init stage and viewport
-            this._stageResolution = new Float32Array([this._game.stage.width, this._game.stage.height]);
-            // Manually override scaling under CocoonJS
-            if( this._game.deviceTargetOption === Kiwi.TARGET_COCOON ) {
-                this.scaleViewport( gl, this._game.stage.scaleType, window.innerWidth, window.innerHeight );
-            }
-            else {
-                this.scaleViewport( gl, Kiwi.Stage.SCALE_NONE, this._game.stage.width, this._game.stage.height );
-            }
-
-            //set default gl state
-            gl.enable(gl.BLEND);
-            this._switchBlendMode(gl, this._currentBlendMode);
-
-            //shader manager
-            this._shaderManager.init(gl, "TextureAtlasShader");
-            
-            //camera matrix
-            this.camMatrix = mat3.create();
-            
-            //stage res needs update on stage resize
-            this._game.stage.onResize.add(function (width, height) {
-                this._stageResolution = new Float32Array([width, height]);
-                if (this.currentRenderer) this._currentRenderer.updateStageResolution(gl, this._stageResolution);
-                //this.filters.updateFilterResolution(gl,width, height);
-                // Manually override scaling under CocoonJS
-                if( this._game.deviceTargetOption === Kiwi.TARGET_COCOON ) {
-                    this.scaleViewport( gl, this._game.stage.scaleType, window.innerWidth, window.innerHeight );
-                }
-                else {
-                    this.scaleViewport( gl, Kiwi.Stage.SCALE_NONE, width, height );
-                }
-            },this);
-
-           /* if (this.filtersEnabled && !this.filters.isEmpty) {
-                this.filters.enableFrameBuffers(gl);
-            }*/
-
-       }
-
-        /**
-        * Scales the viewport according to a scale mode and space dimensions.
-        *
-        * This is used internally for compatibility with CocoonJS and should not be called.
-        * @method scaleViewport
-        * @param gl {WebGLRenderingContext}
-        * @param mode {number} The scale mode; should be either Kiwi.Stage.SCALE_FIT, Kiwi.Stage.SCALE_STRETCH, or Kiwi.Stage.SCALE_NONE. Defaults to Kiwi.Stage.SCALE_NONE.
-        * @param width {number} Width of the target space.
-        * @param height {number} Height of the target space.
-        * @public
-        * @since 1.1.1
-        */
-        public scaleViewport( gl:WebGLRenderingContext, mode:number, width:number, height:number ) {
-            var offset = new Kiwi.Geom.Point(0, 0);
-            switch( mode ) {
-                case Kiwi.Stage.SCALE_FIT:
-                    // Compute aspect ratios
-                    var arStage = this._game.stage.width / this._game.stage.height;
-                    var arSpace = width / height;
-                    if(arStage < arSpace) {
-                        // Width is too wide
-                        var newWidth = height * arStage;
-                        offset.x = (width - newWidth) / 2;
-                        // Compress target space
-                        width = newWidth;
-                    }
-                    else {
-                        // Height is too wide
-                        var newHeight = width / arStage;
-                        offset.y = (height - newHeight) / 2;
-                        // Compress target space
-                        height = newHeight;
-                    }
-                    break;
-                case Kiwi.Stage.SCALE_STRETCH:
-                    break;
-                case Kiwi.Stage.SCALE_NONE:
-                    width = this._game.stage.width;
-                    height = this._game.stage.height;
-                    break;
-                default:
-                    break;
-            }
-
-            gl.viewport(offset.x, offset.y, width, height);
-        }
-
-        
-        /**
-        * Performs initialisation required when switching to a different state. Called when a state has been switched to.
-        * The textureManager is told to clear its contents from video memory, then rebuild its cache of textures from the state's texture library.
-        * @method initState
-        * @public
-        */
-
-        public initState(state: Kiwi.State) {
-            this._textureManager.clearTextures(this._game.stage.gl);
-            this._textureManager.uploadTextureLibrary(this._game.stage.gl, state.textureLibrary);
-        }
-
-        /**
-        * Performs cleanup required before switching to a different state. Called whwn a state is about to be switched from. The textureManager is told to empty its cache.
-        * @method endState
-        * @param state {Kiwi.State}
-        * @public
-        */
-
-        public endState(state: Kiwi.State) {
-            this._textureManager.clearTextures(this._game.stage.gl);
-            Kiwi.Log.log("Ending WebGL on State", '#renderer', '#webgl');
-        }
-        
-        /**
-        * Manages rendering of the scene graph - called once per frame.
-        * Sets up per frame gl uniforms such as the view matrix and camera offset.
-        * Clears the current renderer ready for a new batch. 
-        * Initiates recursive render of scene graph starting at the root. 
-        * @method render
-        * @param camera {Camera}
-        * @public
-        */
-        public render(camera: Kiwi.Camera) {
-                     
-            var gl: WebGLRenderingContext = this._game.stage.gl;
-               
-            //clear stage every frame
-            var col = this._game.stage.normalizedColor;
-            // Colour must be multiplied by alpha to create consistent results.
-            // This is probably due to browsers implementing an inferior blendfunc:
-            // ONE, ONE_MINUS_SRC_ALPHA is most common, and gives bad results with alphas.
-            // When this is used on a partially transparent game canvas, it does not blend correctly.
-            // Without being able to override the browser's own object renderer, this is a necessary kludge.
-            // The "clean" solution is as follows:
-            // gl.clearColor(col.r, col.g, col.b, col.a);
-            gl.clearColor(col.r * col.a, col.g * col.a, col.b * col.a, col.a);
-            gl.clear(gl.COLOR_BUFFER_BIT);
-            
-            // Stop drawing if there is nothing to draw
-            if (this._game.states.current.members.length == 0) {
-                return;
-            }
-                                       
-            //reset stats
-            this.numDrawCalls = 0;
-            this._textureManager.numTextureWrites = 0;
-            this._entityCount = 0;
-            
-            //set cam matrix uniform
-            var cm: Kiwi.Geom.Matrix = camera.transform.getConcatenatedMatrix();
-            var ct: Kiwi.Geom.Transform = camera.transform;
-
-            var rotOffset = vec2.create();
-            var scale = vec2.create();
-            var translate = vec2.create();
+
+	/**
+	* Manages all rendering using WebGL. Requires the inclusion of gl-matrix.js / g-matrix.min.js -  https://github.com/toji/gl-matrix
+	* Directly manages renderer objects, including factory methods for their creation. 
+	* Creates manager objects for shaders and textures.
+	* Manages gl state at game initialisation, at state start and end, and per frame.
+	* Runs the recursive scene graph rendering sequence every frame. 
+	* @class GLRenderManager
+	* @extends IRenderer
+	* @constructor
+	* @param game {Kiwi.Game} The game that this renderer belongs to.
+	* @return {Kiwi.Renderers.GLRenderManager}
+	*/
+	export class GLRenderManager implements IRenderManager {
+
+		constructor(game: Kiwi.Game) {
+			this._game = game;
+			if (typeof mat4 === "undefined") {
+				throw "ERROR: gl-matrix.js is missing";
+			}
+			this._currentBlendMode = new Kiwi.Renderers.GLBlendMode(this._game.stage.gl, {mode:"DEFAULT"} );
+		}
+
+		/**
+		* Initialises all WebGL rendering services
+		* @method boot
+		* @public
+		*/
+		public boot() {
+			this._textureManager = new GLTextureManager();
+			this._shaderManager = new Kiwi.Shaders.ShaderManager();
+			//this.filters = new Kiwi.Filters.GLFilterManager(this._game, this._shaderManager);
+			this._init();
+			
+		}
+
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} "GLRenderManager"
+		* @public
+		*/
+		public objType() {
+			return "GLRenderManager";
+		}
+
+		/**
+		* The game that this renderer is used with.
+		* @property _game
+		* @type Game
+		* @private
+		*/
+		private _game: Kiwi.Game;
+
+		/**
+		* The texture manager object used to allocate GL Textures.
+		* @property _textureManager
+		* @type Kiwi.Renderes.GLTextureManager
+		* @private
+		*/
+		private _textureManager: GLTextureManager;
+
+		/**
+		* The shader manager object used to allocate GL Shaders.
+		* @property _shaderManager
+		* @type Kiwi.Renderes.GLShaderManager
+		* @private
+		*/
+
+		private _shaderManager: Kiwi.Shaders.ShaderManager;
+
+		//public filters: Kiwi.Filters.GLFilterManager;
+
+		/**
+		* The stage resolution in pixels
+		* @property _stageResolution
+		* @type Float32Array
+		* @private
+		*/
+		private _stageResolution: Float32Array;
+
+		/**
+		* The renderer object that is in use during a rendering batch.
+		* @property _currentRenderer
+		* @type Kiwi.Renderers.Renderer
+		* @private
+		*/
+		private _currentRenderer: Renderer = null;
+
+		/**
+		* The current blend mode.
+		* @property _currentBlendMode
+		* @type Kiwi.Renderers.GLBlendMode
+		* @private
+		* @since 1.1.0
+		*/
+		private _currentBlendMode: GLBlendMode;
+
+		/**
+		* Tally of number of entities rendered per frame 
+		* @property _entityCount
+		* @type number
+		* @default 0
+		* @private
+		*/
+		private _entityCount: number = 0;
+
+		 /**
+		* Tally of number of draw calls per frame
+		* @property numDrawCalls
+		* @type number
+		* @default 0
+		* @public
+		*/
+		public numDrawCalls: number = 0;
+
+		/**
+		* Maximum allowable sprites to render per frame
+		* Note:Not currently used  - candidate for deletion
+		* @property _maxItems
+		* @type number
+		* @default 1000
+		* @private
+		*/
+		private _maxItems: number = 1000;
+
+		/**
+		* Camera matrix used on graphics card
+		* @property camMatrix
+		* @type Float32Array
+		* @public
+		*/
+		public camMatrix: Float32Array;
+
+		/**
+		* The most recently bound texture atlas.
+		* @property _currentTextureAtlas
+		* @type TextureAtlas
+		* @private
+		*/
+		private _currentTextureAtlas: Kiwi.Textures.TextureAtlas = null;
+
+		/**
+		* Adds a texture to the Texture Manager. 
+		* @method addTexture
+		* @param {WebGLRenderingContext} gl
+		* @param {Kiwi.Textures.TextureAtlas} atlas
+		* @public
+		*/
+		public addTexture(gl: WebGLRenderingContext, atlas: Kiwi.Textures.TextureAtlas) {
+			this._textureManager.uploadTexture(gl, atlas);
+		}
+
+		/**
+		* An array of renderers. Shared renderers are used for batch rendering. Multiple gameobjects can use the same renderer
+		* instance and add rendering info to a batch rather than rendering individually. 
+		* This means only one draw call is necessary to render a number of objects. The most common use of this is standard 2d sprite rendering,
+		* and the TextureAtlasRenderer is added by default as a shared renderer. Sprites, StaticImages and Tilemaps (core gameobjects) can all use the
+		* same renderer/shader combination and be drawn as part of the same batch.
+		* Custom gameobjects can also choose to use a shared renderer, fo example in the case that a custom gameobject's rendering requirements matched the TextureAtlasRenderer
+		* capabilities.
+		*  
+		* @property _sharedRenderers
+		* @type Array
+		* @private
+		*/
+		private _sharedRenderers: any = {};
+
+		/**
+		* Adds a renderer to the sharedRenderer array. The rendererID is a string that must match a renderer property of the Kiwi.Renderers object. 
+		* If a match is found and an instance does not already exist, then a renderer is instantiated and added to the array.
+		* @method addSharedRenderer
+		* @param {String} rendererID
+		* @param {Object} params
+		* @return {Boolean} success
+		* @public
+		*/
+
+		public addSharedRenderer(rendererID:string,params:any = null):boolean {
+			//does renderer exist?
+			if (Kiwi.Renderers[rendererID]) {
+			  
+				//already added?
+				if (!(rendererID in this._sharedRenderers)) {
+					this._sharedRenderers[rendererID] = new Kiwi.Renderers[rendererID](this._game.stage.gl,this._shaderManager,params);
+					return true;
+				}
+			}
+			return false;
+		}
+
+
+		/**
+		* Adds a cloned renderer to the sharedRenderer array. The rendererID is a string that must match a renderer property of the Kiwi.Renderers object. The cloneID is the name for the cloned renderer.
+		*
+		* If a match is found and an instance does not already exist, then a renderer is instantiated and added to the array.
+		*
+		* Cloned shared renderers are useful if some items in your scene will use a special shader or blend mode, but others will not. You can subsequently access the clones with a normal requestSharedRenderer() call. You should use this instead of requestRendererInstance() whenever possible, because shared renderers are more efficient than instances.
+		*
+		* @method addSharedRendererClone
+		* @param {String} rendererID
+		* @param {String} cloneID
+		* @param {Object} params
+		* @return {Boolean} success
+		* @public
+		* @since 1.1.0
+		*/
+		public addSharedRendererClone(rendererID: string, cloneID: string, params: any = null): boolean {
+			if (typeof params === "undefined") { params = null; }
+			//does renderer exist?
+			if (Kiwi.Renderers[rendererID]) {
+				//already added?
+				if (!(cloneID in this._sharedRenderers)) {
+					this._sharedRenderers[cloneID] = new Kiwi.Renderers[rendererID](this._game.stage.gl, this._shaderManager, params);
+					return true;
+				}
+			}
+			return false;
+		}
+
+
+		/**
+		* Requests a shared renderer. A game object that wants to use a shared renderer uses this method to obtain a reference to the shared renderer instance.
+		* @method requestSharedRenderer
+		* @param {String} rendererID
+		* @param {Object} params
+		* @return {Kiwi.Renderers.Renderer} A shared renderer or null if none found.
+		* @public
+		*/
+
+		public requestSharedRenderer(rendererID: string,params:any = null): Kiwi.Renderers.Renderer {
+			var renderer: Kiwi.Renderers.Renderer = this._sharedRenderers[rendererID];
+			if (renderer) {
+				return renderer;
+			} else {
+				if (this.addSharedRenderer(rendererID,params)) {
+					return this._sharedRenderers[rendererID];
+				} else {
+					Kiwi.Log.log("No renderer called " + rendererID, '#renderer', '#webgl');
+				}
+			}
+			//failed request
+			return null;
+
+		}
+
+
+		/**
+		* Requests a new renderer instance. This factory method is the only way gameobjects should instantiate their own renderer. 
+		* The rendererID is a string that must match a renderer property of the Kiwi.Renderers object. 
+		* If a match is found then a renderer is instantiated and returned. Gameobjects which have rendering requirements that do not suit
+		* batch rendering use this technique.
+		* @method requestRendererInstance
+		* @param {String} rendererID The name of the requested renderer
+		* @param {Object} params
+		* @return {Kiwi.Renderers.Renderer} A renderer or null if none found.
+		* @public
+		*/
+
+		public requestRendererInstance(rendererID: string, params: any = null): Kiwi.Renderers.Renderer {
+			if (rendererID in Kiwi.Renderers) {
+				var renderer = new Kiwi.Renderers[rendererID](this._game.stage.gl, this._shaderManager, params); 
+				return renderer
+			} else {
+				Kiwi.Log.log("No renderer with id " + rendererID + " exists", '#renderer', '#webgl');
+			}
+			return null; //fail
+		}
+
+		/*
+		public get filtersEnabled(): boolean {
+			return this._filtersEnabled;
+		}
+
+		public set filtersEnabled(val: boolean) {
+			this._filtersEnabled = val;
+		}
+
+		private _filtersEnabled: boolean = false;
+		
+		/**
+		* Performs initialisation required for single game instance - happens once, at bootup
+		* Sets global GL state.
+		* Initialises managers for shaders and textures.
+		* Instantiates the default shared renderer (TextureAtlasRenderer)
+		* @method _init
+		* @private
+		*/
+		private _init() {
+			Kiwi.Log.log("Initialising WebGL", '#renderer', '#webgl');
+
+			var gl: WebGLRenderingContext = this._game.stage.gl;
+
+			//init stage and viewport
+			this._stageResolution = new Float32Array([this._game.stage.width, this._game.stage.height]);
+			// Manually override scaling under CocoonJS
+			if( this._game.deviceTargetOption === Kiwi.TARGET_COCOON ) {
+				this.scaleViewport( gl, this._game.stage.scaleType, window.innerWidth, window.innerHeight );
+			}
+			else {
+				this.scaleViewport( gl, Kiwi.Stage.SCALE_NONE, this._game.stage.width, this._game.stage.height );
+			}
+
+			//set default gl state
+			gl.enable(gl.BLEND);
+			this._switchBlendMode(gl, this._currentBlendMode);
+
+			//shader manager
+			this._shaderManager.init(gl, "TextureAtlasShader");
+			
+			//camera matrix
+			this.camMatrix = mat3.create();
+			
+			//stage res needs update on stage resize
+			this._game.stage.onResize.add(function (width, height) {
+				this._stageResolution = new Float32Array([width, height]);
+				if (this.currentRenderer) this._currentRenderer.updateStageResolution(gl, this._stageResolution);
+				//this.filters.updateFilterResolution(gl,width, height);
+				// Manually override scaling under CocoonJS
+				if( this._game.deviceTargetOption === Kiwi.TARGET_COCOON ) {
+					this.scaleViewport( gl, this._game.stage.scaleType, window.innerWidth, window.innerHeight );
+				}
+				else {
+					this.scaleViewport( gl, Kiwi.Stage.SCALE_NONE, width, height );
+				}
+			},this);
+
+			/* if (this.filtersEnabled && !this.filters.isEmpty) {
+				this.filters.enableFrameBuffers(gl);
+			}*/
+
+		}
+
+		/**
+		* Scales the viewport according to a scale mode and space dimensions.
+		*
+		* This is used internally for compatibility with CocoonJS and should not be called.
+		* @method scaleViewport
+		* @param gl {WebGLRenderingContext}
+		* @param mode {number} The scale mode; should be either Kiwi.Stage.SCALE_FIT, Kiwi.Stage.SCALE_STRETCH, or Kiwi.Stage.SCALE_NONE. Defaults to Kiwi.Stage.SCALE_NONE.
+		* @param width {number} Width of the target space.
+		* @param height {number} Height of the target space.
+		* @public
+		* @since 1.1.1
+		*/
+		public scaleViewport( gl:WebGLRenderingContext, mode:number, width:number, height:number ) {
+			var offset = new Kiwi.Geom.Point(0, 0);
+			switch( mode ) {
+				case Kiwi.Stage.SCALE_FIT:
+					// Compute aspect ratios
+					var arStage = this._game.stage.width / this._game.stage.height;
+					var arSpace = width / height;
+					if(arStage < arSpace) {
+						// Width is too wide
+						var newWidth = height * arStage;
+						offset.x = (width - newWidth) / 2;
+						// Compress target space
+						width = newWidth;
+					}
+					else {
+						// Height is too wide
+						var newHeight = width / arStage;
+						offset.y = (height - newHeight) / 2;
+						// Compress target space
+						height = newHeight;
+					}
+					break;
+				case Kiwi.Stage.SCALE_STRETCH:
+					break;
+				case Kiwi.Stage.SCALE_NONE:
+					width = this._game.stage.width;
+					height = this._game.stage.height;
+					break;
+				default:
+					break;
+			}
+
+			gl.viewport(offset.x, offset.y, width, height);
+		}
+
+
+		/**
+		* Performs initialisation required when switching to a different state. Called when a state has been switched to.
+		* The textureManager is told to clear its contents from video memory, then rebuild its cache of textures from the state's texture library.
+		* @method initState
+		* @public
+		*/
+
+		public initState(state: Kiwi.State) {
+			this._textureManager.clearTextures(this._game.stage.gl);
+			this._textureManager.uploadTextureLibrary(this._game.stage.gl, state.textureLibrary);
+		}
+
+		/**
+		* Performs cleanup required before switching to a different state. Called whwn a state is about to be switched from. The textureManager is told to empty its cache.
+		* @method endState
+		* @param state {Kiwi.State}
+		* @public
+		*/
+
+		public endState(state: Kiwi.State) {
+			this._textureManager.clearTextures(this._game.stage.gl);
+			Kiwi.Log.log("Ending WebGL on State", '#renderer', '#webgl');
+		}
+
+		/**
+		* Manages rendering of the scene graph - called once per frame.
+		* Sets up per frame gl uniforms such as the view matrix and camera offset.
+		* Clears the current renderer ready for a new batch. 
+		* Initiates recursive render of scene graph starting at the root. 
+		* @method render
+		* @param camera {Camera}
+		* @public
+		*/
+		public render(camera: Kiwi.Camera) {
+
+			var gl: WebGLRenderingContext = this._game.stage.gl;
+
+			//clear stage every frame
+			var col = this._game.stage.normalizedColor;
+			// Colour must be multiplied by alpha to create consistent results.
+			// This is probably due to browsers implementing an inferior blendfunc:
+			// ONE, ONE_MINUS_SRC_ALPHA is most common, and gives bad results with alphas.
+			// When this is used on a partially transparent game canvas, it does not blend correctly.
+			// Without being able to override the browser's own object renderer, this is a necessary kludge.
+			// The "clean" solution is as follows:
+			// gl.clearColor(col.r, col.g, col.b, col.a);
+			gl.clearColor(col.r * col.a, col.g * col.a, col.b * col.a, col.a);
+			gl.clear(gl.COLOR_BUFFER_BIT);
+
+			// Stop drawing if there is nothing to draw
+			if (this._game.states.current.members.length == 0) {
+				return;
+			}
+
+			//reset stats
+			this.numDrawCalls = 0;
+			this._textureManager.numTextureWrites = 0;
+			this._entityCount = 0;
+			
+			//set cam matrix uniform
+			var cm: Kiwi.Geom.Matrix = camera.transform.getConcatenatedMatrix();
+			var ct: Kiwi.Geom.Transform = camera.transform;
+
+			var rotOffset = vec2.create();
+			var scale = vec2.create();
+			var translate = vec2.create();
 
 			vec2.set(scale, ct.scaleX, ct.scaleY);
 			vec2.set(rotOffset, -ct.rotPointX, -ct.rotPointY);
@@ -468,204 +466,203 @@ module Kiwi.Renderers {
 			mat3.scale(this.camMatrix, this.camMatrix, scale);
 			mat3.translate(this.camMatrix, this.camMatrix, rotOffset);
 
-            // Mandate blend mode in CocoonJS
-            // This must be called per-frame, because CocoonJS seems to interfere with blend modes on a per-frame basis.
-            if( this._game.deviceTargetOption == Kiwi.TARGET_COCOON ) {
-                this._switchBlendMode( gl, this._currentBlendMode );
-            }
-            
-            this.collateRenderSequence();
-            this.collateBatches();
-            this.renderBatches(gl, camera);
-          
-            /*if (this._filtersEnabled && !this.filters.isEmpty) {
-                this.filters.applyFilters(gl);
-                gl.useProgram(this._shaderManager.currentShader.shaderProgram);
-                gl.bindTexture(gl.TEXTURE_2D, this._currentTextureAtlas.glTextureWrapper.texture);
-            }*/
-        }
-
-        private _sequence: any[];
-        private _batches: any[];
-
-
-        /**
-        * Creates a new render sequence
-        * @method collateRenderSequence
-        * @public
-        */
-        public collateRenderSequence() {
-            this._sequence = [];
-            var root: IChild = this._game.states.current;
-            this.collateChild(root);
-        }
-
-        /**
-        * Adds a child to the render sequence (may be a group with children of it's own)
-        * @method collateChild
-        * @public
-        */
-        public collateChild(child:IChild) {
-        	// Do not render non-visible objects or their children
-        	if( !child.visible) return;
-        	
-            if (child.childType() === Kiwi.GROUP) {
-                for (var i = 0; i < (<Kiwi.Group>child).members.length; i++) {
-                    this.collateChild( (<Kiwi.Group>child).members[i]);
-                }
-            } else {
-                var entity: Entity = <Entity>child;
-                this._sequence.push({
-                    entity: entity,
-                    renderer: entity.glRenderer,
-                    shader: entity.glRenderer.shaderPair,
-                    isBatchRenderer: entity.glRenderer.isBatchRenderer,
-                    texture: entity.atlas
-                });
-            }
-        }
-
-        /**
-        * Sorts the render sequence into batches. Each batch requires the same renderer/shader/texture combination. 
-        * @method collateBatches
-        * @public
-        */
-        public collateBatches() {
-            var currentRenderer: Renderer = null;
-            var currentShader: Shaders.ShaderPair = null;
-            var currentTexture: Textures.TextureAtlas = null;
-
-            this._batches = [];
-            var batchIndex:number;
-
-            for (var i = 0; i < this._sequence.length; i++) {
-                if (!this._sequence[i].isBatchRenderer ||
-                    this._sequence[i].renderer !== currentRenderer ||
-                    this._sequence[i].shader !== currentShader ||
-                    this._sequence[i].texture !== currentTexture) {
-                    //create a new batch
-                    var batchIndex = this._batches.push(new Array()) - 1;
-                    currentRenderer = this._sequence[i].renderer; 
-                    currentShader = this._sequence[i].shader;
-                    currentTexture = this._sequence[i].texture;
-
-                } 
-                this._batches[batchIndex].push(this._sequence[i]);
-            }
-        }
-
-        /**
-        * Renders all the batches 
-        * @method renderBatches
-        * @param {WebGLRenderingContext} gl
-        * @param {Kiwi.Camera} camera
-        * @public
-        */
-        public renderBatches(gl: WebGLRenderingContext, camera) {
-            for (var i = 0; i < this._batches.length; i++)
-                this.renderBatch( gl, this._batches[i], camera );
-        }
-
-        /**
-        * Renders a single batch 
-        * @method renderBatch
-        * @param {WebGLRenderingContext} gl
-        * @param {Object} batch
-        * @param {Kiwi.Camera} camera
-        * @public
-        */
-        public renderBatch(gl, batch, camera) {
-            // Acquire renderer
-            var rendererSwitched = false;
-            if (batch[0].entity.glRenderer !== this._currentRenderer) {
-                rendererSwitched = true;
-                this._switchRenderer(gl, batch[0].entity);
-            }
-
-            // Clear renderer for fresh data
-            this._currentRenderer.clear(gl, { camMatrix: this.camMatrix });
-
-            // Call render functions
-            for( var i = 0;  i < batch.length;  i++ )
-                batch[i].entity.renderGL(gl, camera);
-
-            // Upload textures
-            if( batch[0].entity.atlas !== this._currentTextureAtlas  ||  batch[0].entity.atlas.dirty ||  (rendererSwitched  &&  batch[0].entity.atlas == this._currentTextureAtlas) )
-                this._switchTexture(gl, batch[0].entity);
-
-            // Manage blend mode
-            // We must always apply BlendMode under CocoonJS, because some (but not all) operations on other canvases may silently change the blend mode and not change it back.
-            if( !this._currentBlendMode.isIdentical( batch[0].entity.glRenderer.blendMode )  ||  this._currentBlendMode.dirty  ||  this._game.deviceTargetOption === Kiwi.TARGET_COCOON )
-                this._switchBlendMode(gl, batch[0].entity.glRenderer.blendMode);
-
-            // Render
-            this._currentRenderer.draw(gl);
-        }
-
-        /**
-        * Calls the render function on a single entity
-        * @method renderEntity
-        * @param {WebGLRenderingContext} gl
-        * @param {Kiwi.Entity} entity
-        * @param {Kiwi.Camera} camera
-        * @public
-        * @deprecated Used internally; should not be called from external functions
-        */
-        public renderEntity(gl: WebGLRenderingContext, entity: any, camera) {
-            this.renderBatch( gl, [entity], camera );
-        }
-
-        /**
-        * Ensures the atlas and renderer needed for a batch is setup
-        * @method setupGLState
-        * @param {WebGLRenderingContext} gl
-        * @public
-        * @deprecated Used internally; should not be called from external functions.
-        */
-        public setupGLState(gl:WebGLRenderingContext,entity) {
-            if (entity.atlas !== this._currentTextureAtlas) this._switchTexture(gl, entity);
-            if (entity.glRenderer !== this._currentRenderer) this._switchRenderer(gl, entity);
-        }
-              
-        /**
-        * Switch renderer to the one needed by the entity that needs rendering
-        * @method _switchRenderer
-        * @param gl {WebGLRenderingContext}
-        * @param entity {Kiwi.Entity}
-        * @private
-        */
-        private _switchRenderer(gl: WebGLRenderingContext, entity: Entity) {
-            if (this._currentRenderer) this._currentRenderer.disable(gl);
-            this._currentRenderer = entity.glRenderer;
-            this._currentRenderer.enable(gl, { camMatrix: this.camMatrix, stageResolution: this._stageResolution });
-        }
-        
-        /**
-        * Switch texture to the one needed by the entity that needs rendering
-        * @method _switchTexture
-        * @param gl {WebGLRenderingContext}
-        * @param entity {Kiwi.Entity}
-        * @private
-        */
-        private _switchTexture(gl: WebGLRenderingContext, entity: Entity) {
-            this._currentTextureAtlas = entity.atlas;
-            entity.atlas.enableGL(gl, this._currentRenderer, this._textureManager);
-        }
-
-        /**
-        * Switch blend mode to a new set of constants
-        * @method _switchBlendMode
-        * @param gl {WebGLRenderingContext}
-        * @param blendMode {Kiwi.Renderers.GLBlendMode}
-        * @private
-        * @since 1.1.0
-        */
-        private _switchBlendMode(gl: WebGLRenderingContext, blendMode: GLBlendMode) {
-            this._currentBlendMode = blendMode;
-            this._currentBlendMode.apply(gl);
-        }
-        
-    }
+			// Mandate blend mode in CocoonJS
+			// This must be called per-frame, because CocoonJS seems to interfere with blend modes on a per-frame basis.
+			if( this._game.deviceTargetOption == Kiwi.TARGET_COCOON ) {
+				this._switchBlendMode( gl, this._currentBlendMode );
+			}
+
+			this.collateRenderSequence();
+			this.collateBatches();
+			this.renderBatches(gl, camera);
+
+			/*if (this._filtersEnabled && !this.filters.isEmpty) {
+				this.filters.applyFilters(gl);
+				gl.useProgram(this._shaderManager.currentShader.shaderProgram);
+				gl.bindTexture(gl.TEXTURE_2D, this._currentTextureAtlas.glTextureWrapper.texture);
+			}*/
+		}
+
+		private _sequence: any[];
+		private _batches: any[];
+
+
+		/**
+		* Creates a new render sequence
+		* @method collateRenderSequence
+		* @public
+		*/
+		public collateRenderSequence() {
+			this._sequence = [];
+			var root: IChild = this._game.states.current;
+			this.collateChild(root);
+		}
+
+		/**
+		* Adds a child to the render sequence (may be a group with children of it's own)
+		* @method collateChild
+		* @public
+		*/
+		public collateChild(child:IChild) {
+			// Do not render non-visible objects or their children
+			if( !child.visible) return;
+			
+			if (child.childType() === Kiwi.GROUP) {
+				for (var i = 0; i < (<Kiwi.Group>child).members.length; i++) {
+					this.collateChild( (<Kiwi.Group>child).members[i]);
+				}
+			} else {
+				var entity: Entity = <Entity>child;
+				this._sequence.push({
+					entity: entity,
+					renderer: entity.glRenderer,
+					shader: entity.glRenderer.shaderPair,
+					isBatchRenderer: entity.glRenderer.isBatchRenderer,
+					texture: entity.atlas
+				});
+			}
+		}
+
+		/**
+		* Sorts the render sequence into batches. Each batch requires the same renderer/shader/texture combination. 
+		* @method collateBatches
+		* @public
+		*/
+		public collateBatches() {
+			var currentRenderer: Renderer = null;
+			var currentShader: Shaders.ShaderPair = null;
+			var currentTexture: Textures.TextureAtlas = null;
+
+			this._batches = [];
+			var batchIndex:number;
+
+			for (var i = 0; i < this._sequence.length; i++) {
+				if (!this._sequence[i].isBatchRenderer ||
+					this._sequence[i].renderer !== currentRenderer ||
+					this._sequence[i].shader !== currentShader ||
+					this._sequence[i].texture !== currentTexture) {
+					//create a new batch
+					var batchIndex = this._batches.push(new Array()) - 1;
+					currentRenderer = this._sequence[i].renderer; 
+					currentShader = this._sequence[i].shader;
+					currentTexture = this._sequence[i].texture;
+
+				} 
+				this._batches[batchIndex].push(this._sequence[i]);
+			}
+		}
+
+		/**
+		* Renders all the batches 
+		* @method renderBatches
+		* @param {WebGLRenderingContext} gl
+		* @param {Kiwi.Camera} camera
+		* @public
+		*/
+		public renderBatches(gl: WebGLRenderingContext, camera) {
+			for (var i = 0; i < this._batches.length; i++)
+				this.renderBatch( gl, this._batches[i], camera );
+		}
+
+		/**
+		* Renders a single batch 
+		* @method renderBatch
+		* @param {WebGLRenderingContext} gl
+		* @param {Object} batch
+		* @param {Kiwi.Camera} camera
+		* @public
+		*/
+		public renderBatch(gl, batch, camera) {
+			// Acquire renderer
+			var rendererSwitched = false;
+			if (batch[0].entity.glRenderer !== this._currentRenderer) {
+				rendererSwitched = true;
+				this._switchRenderer(gl, batch[0].entity);
+			}
+
+			// Clear renderer for fresh data
+			this._currentRenderer.clear(gl, { camMatrix: this.camMatrix });
+
+			// Call render functions
+			for( var i = 0;  i < batch.length;  i++ )
+				batch[i].entity.renderGL(gl, camera);
+
+			// Upload textures
+			if( batch[0].entity.atlas !== this._currentTextureAtlas  ||  batch[0].entity.atlas.dirty ||  (rendererSwitched  &&  batch[0].entity.atlas == this._currentTextureAtlas) )
+				this._switchTexture(gl, batch[0].entity);
+
+			// Manage blend mode
+			// We must always apply BlendMode under CocoonJS, because some (but not all) operations on other canvases may silently change the blend mode and not change it back.
+			if( !this._currentBlendMode.isIdentical( batch[0].entity.glRenderer.blendMode )  ||  this._currentBlendMode.dirty  ||  this._game.deviceTargetOption === Kiwi.TARGET_COCOON )
+				this._switchBlendMode(gl, batch[0].entity.glRenderer.blendMode);
+
+			// Render
+			this._currentRenderer.draw(gl);
+		}
+
+		/**
+		* Calls the render function on a single entity
+		* @method renderEntity
+		* @param {WebGLRenderingContext} gl
+		* @param {Kiwi.Entity} entity
+		* @param {Kiwi.Camera} camera
+		* @public
+		* @deprecated Used internally; should not be called from external functions
+		*/
+		public renderEntity(gl: WebGLRenderingContext, entity: any, camera) {
+			this.renderBatch( gl, [entity], camera );
+		}
+
+		/**
+		* Ensures the atlas and renderer needed for a batch is setup
+		* @method setupGLState
+		* @param {WebGLRenderingContext} gl
+		* @public
+		* @deprecated Used internally; should not be called from external functions.
+		*/
+		public setupGLState(gl:WebGLRenderingContext,entity) {
+			if (entity.atlas !== this._currentTextureAtlas) this._switchTexture(gl, entity);
+			if (entity.glRenderer !== this._currentRenderer) this._switchRenderer(gl, entity);
+		}
+
+		/**
+		* Switch renderer to the one needed by the entity that needs rendering
+		* @method _switchRenderer
+		* @param gl {WebGLRenderingContext}
+		* @param entity {Kiwi.Entity}
+		* @private
+		*/
+		private _switchRenderer(gl: WebGLRenderingContext, entity: Entity) {
+			if (this._currentRenderer) this._currentRenderer.disable(gl);
+			this._currentRenderer = entity.glRenderer;
+			this._currentRenderer.enable(gl, { camMatrix: this.camMatrix, stageResolution: this._stageResolution });
+		}
+
+		/**
+		* Switch texture to the one needed by the entity that needs rendering
+		* @method _switchTexture
+		* @param gl {WebGLRenderingContext}
+		* @param entity {Kiwi.Entity}
+		* @private
+		*/
+		private _switchTexture(gl: WebGLRenderingContext, entity: Entity) {
+			this._currentTextureAtlas = entity.atlas;
+			entity.atlas.enableGL(gl, this._currentRenderer, this._textureManager);
+		}
+
+		/**
+		* Switch blend mode to a new set of constants
+		* @method _switchBlendMode
+		* @param gl {WebGLRenderingContext}
+		* @param blendMode {Kiwi.Renderers.GLBlendMode}
+		* @private
+		* @since 1.1.0
+		*/
+		private _switchBlendMode(gl: WebGLRenderingContext, blendMode: GLBlendMode) {
+			this._currentBlendMode = blendMode;
+			this._currentBlendMode.apply(gl);
+		}
+
+	}
 
 }
-
diff --git a/src/render/GLShaderManager.ts b/src/render/GLShaderManager.ts
index c8d74fe..ea087d5 100644
--- a/src/render/GLShaderManager.ts
+++ b/src/render/GLShaderManager.ts
@@ -1,4 +1,3 @@
-
 /**
 * GLSL ES Shaders are used for WebGL rendering.
 * ShaderPair objects encapsulate GLSL ES vertex and fragment shader programs. 
@@ -18,154 +17,151 @@
 * @submodule Shaders 
 * @main Shaders
 * @namespace Kiwi.Shaders
-*/ 
+*/
 
 module Kiwi.Shaders {
 
-    /**
-    * Manages all WebGL Shaders. Maintains a list of ShaderPairs 
-    *  
-    * Provides an interface for using a specific ShaderPair, adding new ShaderPairs, and requesting a reference to a ShaderPair instance.
-    * Renderes use shaderPairs to draw. Multiple renderers may use the same compiled shader program.
-    * This Manager ensures only one compiled instance of each program is created
-    * @class ShaderManager
-    * @extends IRenderer
-    * @constructor
-    * @return {Kiwi.Shaders.ShaderManager}
-    */
-    export class ShaderManager {
-
-        constructor() {
-            
-        }
-        
-
-         /**
-        * An object containing a set of properties each of which references a ShaderPair. 
-        * @property _shaderPairs
-        * @type Object
-        * @private
-        */
-        private _shaderPairs: any = {};
-
-        /**
-        * The shader program that is currently set to be used useing gl.useProgram.
-        * @property currentShader
-        * @type Array
-        * @private
-        */
-
-        public get currentShader(): ShaderPair {
-            return this._currentShader;
-        }
-        private _currentShader: ShaderPair;
-
-
-        /**
-	    * Sets up a default shaderPair.
-	    * @method init
-        * @param {WebGLRenderingContext} gl
-        * @param {String} defaultShaderID
-        * @public
-	    */
-        public init(gl: WebGLRenderingContext, defaultShaderID: string) {
-            this._currentShader = this.requestShader(gl, defaultShaderID);
-        }
-
-
-        /**
-	    * Provides a reference to a ShaderPair. If the requested ShaderPair exists as a property on the _shaderPairs object it will be returned if already loaded,
-        * otherwise it will be loaded, then returned.
-        *
-        * If the request is not on the list, the Kiwi.Shaders object will  be checked for a property name that matches shaderID and a new ShaderPair
-        * will be instantiated, loaded, and set for use.
-
-	    * @method requestShader
-        * @param {WebGLRenderingContext} gl
-        * @param {String} shaderID
-        * @param {boolean} use
-        * @return {Kiwi.Shaders.ShaderPair} a ShaderPair instance - null on fail
-        * @public
-	    */
-        public requestShader(gl: WebGLRenderingContext,shaderID: string,use:boolean = true):ShaderPair {
-
-            var shader: ShaderPair;
-            //in list already?
-            if (shaderID in this._shaderPairs) {
-                shader = this._shaderPairs[shaderID];
-                if (!shader.loaded) {
-                    this._loadShader(gl, shader);
-                }
-                if(use)
-                    this._useShader(gl, shader);
-                return shader;
-            } else {
-                //not in list, does it exist?
-                if ( this.shaderExists(gl, shaderID) ) {
-                    shader = this._addShader(gl, shaderID);
-                    this._loadShader(gl, shader);
-                    if(use)
-                        this._useShader(gl, shader);
-                    return shader;
-                } else {
-                    Kiwi.Log.log("Shader " + shaderID + " does not exist.", '#renderer', '#webgl');
-                }
-            }
-            //unsuccessful request
-            return null;
-        }
-
-        /**
-	    * Tests to see if a ShaderPair property named ShaderID exists on Kiwi.Shaders. Can be used to test for the availability of specific shaders (for fallback)
-	    * @method shaderExists
-        * @param {WebGLRenderingContext} gl
-        * @param {String} shaderID
-        * @return {Boolean} success
-        * @public
-	    */
-        public shaderExists(gl: WebGLRenderingContext, shaderID: string):boolean {
-            return shaderID in Kiwi.Shaders;
-        }
-
-        /**
-	    * Creates a new instance of a ShaderPair and adds a reference to the _shaderPairs object
-	    * @method _addShader
-        * @param {WebGLRenderingContext} gl
-        * @param {String} shaderID
-        * @return {Kiwi.Shaders.ShaderPair} 
-        * @private
-	    */
-        private _addShader(gl: WebGLRenderingContext, shaderID: string):ShaderPair {
-            this._shaderPairs[shaderID] = new Kiwi.Shaders[shaderID]();
-            return this._shaderPairs[shaderID];
-        }
-
-        /**
-	    * Tells a ShaderPair to load (compile and link)
-	    * @method _loadShader
-        * @param {WebGLRenderingContext} gl
-        * @param {Kiwi.Shaders.ShaderPair} shader
-        * @private
-	    */
-        private _loadShader(gl: WebGLRenderingContext,shader:ShaderPair) {
-            shader.init(gl);
-        }
-
-        /**
-	    * Changes gl state so that the shaderProgram contined in a ShaderPir is bound for use
-	    * @method _useShader
-        * @param {WebGLRenderingContext} gl
-        * @param {Kiwi.Shaders.ShaderPair} shader
-        * @private
-	    */
-        private _useShader(gl: WebGLRenderingContext, shader: ShaderPair) {
-            if (shader !== this._currentShader) {
-                this._currentShader = shader;
-            }
-            gl.useProgram(shader.shaderProgram);
-        }
-
-
-    }
-
-}
\ No newline at end of file
+	/**
+	* Manages all WebGL Shaders. Maintains a list of ShaderPairs 
+	*  
+	* Provides an interface for using a specific ShaderPair, adding new ShaderPairs, and requesting a reference to a ShaderPair instance.
+	* Renderes use shaderPairs to draw. Multiple renderers may use the same compiled shader program.
+	* This Manager ensures only one compiled instance of each program is created
+	* @class ShaderManager
+	* @extends IRenderer
+	* @constructor
+	* @return {Kiwi.Shaders.ShaderManager}
+	*/
+	export class ShaderManager {
+
+		constructor() {}
+
+
+		/**
+		* An object containing a set of properties each of which references a ShaderPair. 
+		* @property _shaderPairs
+		* @type Object
+		* @private
+		*/
+		private _shaderPairs: any = {};
+
+		/**
+		* The shader program that is currently set to be used useing gl.useProgram.
+		* @property currentShader
+		* @type Array
+		* @private
+		*/
+
+		public get currentShader(): ShaderPair {
+			return this._currentShader;
+		}
+		private _currentShader: ShaderPair;
+
+
+		/**
+		* Sets up a default shaderPair.
+		* @method init
+		* @param {WebGLRenderingContext} gl
+		* @param {String} defaultShaderID
+		* @public
+		*/
+		public init(gl: WebGLRenderingContext, defaultShaderID: string) {
+			this._currentShader = this.requestShader(gl, defaultShaderID);
+		}
+
+
+		/**
+		* Provides a reference to a ShaderPair. If the requested ShaderPair exists as a property on the _shaderPairs object it will be returned if already loaded,
+		* otherwise it will be loaded, then returned.
+		*
+		* If the request is not on the list, the Kiwi.Shaders object will  be checked for a property name that matches shaderID and a new ShaderPair
+		* will be instantiated, loaded, and set for use.
+
+		* @method requestShader
+		* @param {WebGLRenderingContext} gl
+		* @param {String} shaderID
+		* @param {boolean} use
+		* @return {Kiwi.Shaders.ShaderPair} a ShaderPair instance - null on fail
+		* @public
+		*/
+		public requestShader(gl: WebGLRenderingContext,shaderID: string,use:boolean = true):ShaderPair {
+
+			var shader: ShaderPair;
+			//in list already?
+			if (shaderID in this._shaderPairs) {
+				shader = this._shaderPairs[shaderID];
+				if (!shader.loaded) {
+					this._loadShader(gl, shader);
+				}
+				if(use)
+					this._useShader(gl, shader);
+				return shader;
+			} else {
+				//not in list, does it exist?
+				if ( this.shaderExists(gl, shaderID) ) {
+					shader = this._addShader(gl, shaderID);
+					this._loadShader(gl, shader);
+					if(use)
+						this._useShader(gl, shader);
+					return shader;
+				} else {
+					Kiwi.Log.log("Shader " + shaderID + " does not exist.", '#renderer', '#webgl');
+				}
+			}
+			//unsuccessful request
+			return null;
+		}
+
+		/**
+		* Tests to see if a ShaderPair property named ShaderID exists on Kiwi.Shaders. Can be used to test for the availability of specific shaders (for fallback)
+		* @method shaderExists
+		* @param {WebGLRenderingContext} gl
+		* @param {String} shaderID
+		* @return {Boolean} success
+		* @public
+		*/
+		public shaderExists(gl: WebGLRenderingContext, shaderID: string):boolean {
+			return shaderID in Kiwi.Shaders;
+		}
+
+		/**
+		* Creates a new instance of a ShaderPair and adds a reference to the _shaderPairs object
+		* @method _addShader
+		* @param {WebGLRenderingContext} gl
+		* @param {String} shaderID
+		* @return {Kiwi.Shaders.ShaderPair} 
+		* @private
+		*/
+		private _addShader(gl: WebGLRenderingContext, shaderID: string):ShaderPair {
+			this._shaderPairs[shaderID] = new Kiwi.Shaders[shaderID]();
+			return this._shaderPairs[shaderID];
+		}
+
+		/**
+		* Tells a ShaderPair to load (compile and link)
+		* @method _loadShader
+		* @param {WebGLRenderingContext} gl
+		* @param {Kiwi.Shaders.ShaderPair} shader
+		* @private
+		*/
+		private _loadShader(gl: WebGLRenderingContext,shader:ShaderPair) {
+			shader.init(gl);
+		}
+
+		/**
+		* Changes gl state so that the shaderProgram contined in a ShaderPir is bound for use
+		* @method _useShader
+		* @param {WebGLRenderingContext} gl
+		* @param {Kiwi.Shaders.ShaderPair} shader
+		* @private
+		*/
+		private _useShader(gl: WebGLRenderingContext, shader: ShaderPair) {
+			if (shader !== this._currentShader) {
+				this._currentShader = shader;
+			}
+			gl.useProgram(shader.shaderProgram);
+		}
+
+	}
+
+}
diff --git a/src/render/GLTextureManager.ts b/src/render/GLTextureManager.ts
index ee151ec..656686b 100644
--- a/src/render/GLTextureManager.ts
+++ b/src/render/GLTextureManager.ts
@@ -1,4 +1,3 @@
-
 /**
 * 
 * 
@@ -6,258 +5,256 @@
 * @submodule Renderers 
 * @main Renderers
 * @namespace Kiwi.Renderers
-*/ 
+*/
 
 module Kiwi.Renderers {
 
-     /**
-    * Manages GL Texture objects, including creation, uploading, destruction and memory management
-    * @class GLTextureManager
-    * @constructor
-    * @return {GLTextureManager}
-    */
-    export class GLTextureManager {
+	 /**
+	* Manages GL Texture objects, including creation, uploading, destruction and memory management
+	* @class GLTextureManager
+	* @constructor
+	* @return {GLTextureManager}
+	*/
+	export class GLTextureManager {
+
+		constructor() {
+			this._numTexturesUsed = 0;
+			this._usedTextureMem = 0;
+			this.maxTextureMem = GLTextureManager.DEFAULT_MAX_TEX_MEM_MB * 1024 * 1024;
+			this._textureWrapperCache = new Array();
+		}
+
+		/**
+		* The default maximum amount of texture memory to use before swapping textures
+		* @property DEFAULT_MAX_TEX_MEM_MB
+		* @type number
+		* @public
+		* @static
+		*/
+		public static DEFAULT_MAX_TEX_MEM_MB: number = 1024; 
+
+		/**
+		* The maximum amount of texture memory to use before swapping textures, initialised from DEFAULT_MAX_TEX_MEM_MB
+		* @property maxTextureMem
+		* @type number
+		* @public
+		*/
+		public maxTextureMem: number;
+
+		/**
+		* The amount of texture memory currently uplaoded
+		* @property usedTextureMem
+		* @type number
+		* @public
+		*/
+		private _usedTextureMem: number;
+		public get usedTextureMem(): number {
+			return this._usedTextureMem;
+		}
+
+		/**
+		* The number of textures currently uplaoded
+		* @property usedTextureMem
+		* @type number
+		* @public
+		*/
+		private _numTexturesUsed: number;
+		public get numTexturesUsed(): number {
+			return this._numTexturesUsed;
+		}
+
+		/**
+		* The number of textures uploads in the last frame
+		* @property numTextureWrites
+		* @type number
+		* @public
+		*/
+		public numTextureWrites: number = 0;
+
+
+		/**
+		* An array of references to all texture wrappers
+		* @property _textureWrapperCache
+		* @type GLTextureWrapper[]
+		* @private
+		*/
+		private _textureWrapperCache: GLTextureWrapper[];
 
-        constructor() {
-            this._numTexturesUsed = 0;
-            this._usedTextureMem = 0;
-            this.maxTextureMem = GLTextureManager.DEFAULT_MAX_TEX_MEM_MB * 1024 * 1024;
-            this._textureWrapperCache = new Array();
-        }
+		/**
+		* Adds a texture wrapper to the cache
+		* @method _addTextureToCache
+		* @param glTexture {GLTextureWrapper}
+		* @private
+		*/
+		private _addTextureToCache(glTexture: GLTextureWrapper) {
+			this._textureWrapperCache.push(glTexture);
+		}
 
-        /**
-        * The default maximum amount of texture memory to use before swapping textures
-        * @property DEFAULT_MAX_TEX_MEM_MB
-        * @type number
-        * @public
-        * @static
-        */
-        public static DEFAULT_MAX_TEX_MEM_MB: number = 1024; 
+		/**
+		* Deletes a texture from memory and removes the wrapper from the cache
+		* @method _deleteTexture
+		* @param gl {WebGLRenderingContext}
+		* @param idx {number}
+		* @private
+		*/
+		private _deleteTexture(gl:WebGLRenderingContext,idx:number) {
+			
+			this._textureWrapperCache[idx].deleteTexture(gl);
+			this._usedTextureMem -= this._textureWrapperCache[idx].numBytes;
+			this._numTexturesUsed--;
+		}
 
-        /**
-        * The maximum amount of texture memory to use before swapping textures, initialised from DEFAULT_MAX_TEX_MEM_MB
-        * @property maxTextureMem
-        * @type number
-        * @public
-        */
-        public maxTextureMem: number;
-     
-        /**
-        * The amount of texture memory currently uplaoded
-        * @property usedTextureMem
-        * @type number
-        * @public
-        */
-        private _usedTextureMem: number;
-        public get usedTextureMem(): number {
-            return this._usedTextureMem;
-        }
+		/**
+		* Uploads a texture to video memory 
+		* @method _uploadTexture
+		* @param gl {WebGLRenderingContext}
+		* @param glTextureWrapper {GLTextureWrapper}
+		* @return boolean
+		* @private
+		*/
+		private _uploadTexture(gl: WebGLRenderingContext, glTextureWrapper: GLTextureWrapper):boolean {
+			//only upload it if it fits
+			if (glTextureWrapper.numBytes + this._usedTextureMem <= this.maxTextureMem) {
+				glTextureWrapper.uploadTexture(gl);
+				this._usedTextureMem += glTextureWrapper.numBytes;
+				this._numTexturesUsed++;
+				
+				return true;
+			}
+			return false;
 
-        /**
-        * The number of textures currently uplaoded
-        * @property usedTextureMem
-        * @type number
-        * @public
-        */
-        private _numTexturesUsed: number;
-        public get numTexturesUsed(): number {
-            return this._numTexturesUsed;
-        }
-        
-        /**
-        * The number of textures uploads in the last frame
-        * @property numTextureWrites
-        * @type number
-        * @public
-        */
-        public numTextureWrites: number = 0;
-        
-        
-        /**
-        * An array of references to all texture wrappers
-        * @property _textureWrapperCache
-        * @type GLTextureWrapper[]
-        * @private
-        */
-        private _textureWrapperCache: GLTextureWrapper[];
+		}
 
-        /**
-        * Adds a texture wrapper to the cache
-        * @method _addTextureToCache
-        * @param glTexture {GLTextureWrapper}
-        * @private
-        */
-        private _addTextureToCache(glTexture: GLTextureWrapper) {
-            this._textureWrapperCache.push(glTexture);
-        }
-        
-        /**
-        * Deletes a texture from memory and removes the wrapper from the cache
-        * @method _deleteTexture
-        * @param gl {WebGLRenderingContext}
-        * @param idx {number}
-        * @private
-        */
-        private _deleteTexture(gl:WebGLRenderingContext,idx:number) {
-            
-            this._textureWrapperCache[idx].deleteTexture(gl);
-            this._usedTextureMem -= this._textureWrapperCache[idx].numBytes;
-            this._numTexturesUsed--;
-        }
+		/**
+		* Uploads a texture library to video memory 
+		* @method uploadTextureLibrary
+		* @param gl {WebGLRenderingContext}
+		* @param textureLibrary {Kiwi.Textures.TextureLibrary}
+		* @public
+		*/
+		public uploadTextureLibrary(gl: WebGLRenderingContext, textureLibrary: Kiwi.Textures.TextureLibrary) {
+			this._textureWrapperCache = new Array();
+			for (var tex in textureLibrary.textures) {
+				// Tell the atlas to prepare its wrappers
+				textureLibrary.textures[tex].createGLTextureWrapper( gl, this );
+			}
+		}
 
-        /**
-        * Uploads a texture to video memory 
-        * @method _uploadTexture
-        * @param gl {WebGLRenderingContext}
-        * @param glTextureWrapper {GLTextureWrapper}
-        * @return boolean
-        * @private
-        */
-        private _uploadTexture(gl: WebGLRenderingContext, glTextureWrapper: GLTextureWrapper):boolean {
-            //only upload it if it fits
-            if (glTextureWrapper.numBytes + this._usedTextureMem <= this.maxTextureMem) {
-                glTextureWrapper.uploadTexture(gl);
-                this._usedTextureMem += glTextureWrapper.numBytes;
-                this._numTexturesUsed++;
-                
-                return true;
-            }
-            return false;
-                
-        }
+		/**
+		* Uploads a single texture to video memory
+		* @method uploadTexture
+		* @param gl {WebGLRenderingContext}
+		* @param textureAtlas {Kiwi.Textures.TextureAtlas}
+		* @public
+		*/
+		public uploadTexture(gl: WebGLRenderingContext, textureAtlas: Kiwi.Textures.TextureAtlas) {
+			textureAtlas.createGLTextureWrapper( gl, this );
+		}
 
-        /**
-        * Uploads a texture library to video memory 
-        * @method uploadTextureLibrary
-        * @param gl {WebGLRenderingContext}
-        * @param textureLibrary {Kiwi.Textures.TextureLibrary}
-        * @public
-        */
-        public uploadTextureLibrary(gl: WebGLRenderingContext, textureLibrary: Kiwi.Textures.TextureLibrary) {
-            this._textureWrapperCache = new Array();
-            for (var tex in textureLibrary.textures) {
-                // Tell the atlas to prepare its wrappers
-                textureLibrary.textures[tex].createGLTextureWrapper( gl, this );
-            }
-        }
+		/**
+		* Adds a texture wrapper to the manager. This both adds the wrapper to the manager cache, and attempts to upload the attached texture to video memory.
+		* @method registerTextureWrapper
+		* @param gl {WebGLRenderingContext}
+		* @param glTextureWrapper {GLTextureWrapper}
+		* @public
+		* @since 1.1.0
+		*/
+		public registerTextureWrapper( gl: WebGLRenderingContext, glTextureWrapper: GLTextureWrapper ) {
+			this._addTextureToCache( glTextureWrapper );
+			// Only upload it if it fits
+			if (!this._uploadTexture(gl, glTextureWrapper)) {
+				Kiwi.Log.log("...skipped uploading texture due to allocated texture memory exceeded.", '#renderer', '#webgl');
+			}
+		}
 
-        /**
-        * Uploads a single texture to video memory
-        * @method uploadTexture
-        * @param gl {WebGLRenderingContext}
-        * @param textureAtlas {Kiwi.Textures.TextureAtlas}
-        * @public
-        */
-        public uploadTexture(gl: WebGLRenderingContext, textureAtlas: Kiwi.Textures.TextureAtlas) {
-            textureAtlas.createGLTextureWrapper( gl, this );
-        }
+		/**
+		* Removes all textures from video memory and clears the wrapper cache
+		* @method clearTextures
+		* @param gl {WebGLRenderingContext}
+		* @public
+		*/
+		public clearTextures(gl: WebGLRenderingContext) {
+			for (var i = 0; i < this._textureWrapperCache.length; i++) {
+				// Delete from graphics memory
+				this._deleteTexture(gl, i);
+				//kill the reference on the atlas
+				this._textureWrapperCache[i].textureAtlas.glTextureWrapper = null;
+			}    
+			this._textureWrapperCache = new Array();
+		}
 
-        /**
-        * Adds a texture wrapper to the manager. This both adds the wrapper to the manager cache, and attempts to upload the attached texture to video memory.
-        * @method registerTextureWrapper
-        * @param gl {WebGLRenderingContext}
-        * @param glTextureWrapper {GLTextureWrapper}
-        * @public
-        * @since 1.1.0
-        */
-        public registerTextureWrapper( gl: WebGLRenderingContext, glTextureWrapper: GLTextureWrapper ) {
-            this._addTextureToCache( glTextureWrapper );
-            // Only upload it if it fits
-            if (!this._uploadTexture(gl, glTextureWrapper)) {
-                Kiwi.Log.log("...skipped uploading texture due to allocated texture memory exceeded.", '#renderer', '#webgl');
-            }
-        }
 
-        /**
-        * Removes all textures from video memory and clears the wrapper cache
-        * @method clearTextures
-        * @param gl {WebGLRenderingContext}
-        * @public
-        */
-        public clearTextures(gl: WebGLRenderingContext) {
-            for (var i = 0; i < this._textureWrapperCache.length; i++) {
-                // Delete from graphics memory
-                this._deleteTexture(gl, i);
-                //kill the reference on the atlas
-                this._textureWrapperCache[i].textureAtlas.glTextureWrapper = null;
-            }    
-            this._textureWrapperCache = new Array();
-           
-        }
+		/**
+		* Binds the texture ready for use, uploads it if it isn't already
+		* @method useTexture
+		* @param gl {WebGLRenderingContext}
+		* @param glTextureWrapper {GLTextureWrappery}
+		* @param [textureUnit=0] {number} Optional parameter for multitexturing. You can have up to 32 textures available to a shader at one time, in the range 0-31. If you don't need multiple textures, this is perfectly safe to ignore.
+		* @return boolean
+		* @public
+		*/
+		public useTexture(gl:WebGLRenderingContext,glTextureWrapper: GLTextureWrapper, textureUnit: number = 0):boolean {
+			textureUnit = Kiwi.Utils.GameMath.clamp( Kiwi.Utils.GameMath.truncate(textureUnit), 31);    // Convert to integer in range 0-31.
+			
+			if (!glTextureWrapper.created || !glTextureWrapper.uploaded) {
+				if(!this._uploadTexture(gl, glTextureWrapper)) {
+					this._freeSpace(gl, glTextureWrapper.numBytes);
+					this._uploadTexture(gl, glTextureWrapper);
+				}
+				this.numTextureWrites++;
+			}
+				
+			//use texture
+			if (glTextureWrapper.created && glTextureWrapper.uploaded) {
+				// Determine target texture unit
+				// This could be determined as:
+				//   var targetTextureUnit = "TEXTURE" + textureUnit;
+				//   gl.activeTexture(gl[targetTextureUnit]);
+				// But because the Khronos WebGL spec defines 
+				// the glenums of TEXTURE0-31 to be consecutive,
+				// this should be safe and fast:
+				var targetTextureUnit = gl.TEXTURE0 + textureUnit;
+				gl.activeTexture(targetTextureUnit);
+				// Bind texture to unit
+				gl.bindTexture(gl.TEXTURE_2D, glTextureWrapper.texture);
 
+				//gl.uniform2fv(textureSizeUniform, new Float32Array([glTextureWrapper.image.width, glTextureWrapper.image.height]));
+				return true;
+			}
 
-        /**
-        * Binds the texture ready for use, uploads it if it isn't already
-        * @method useTexture
-        * @param gl {WebGLRenderingContext}
-        * @param glTextureWrapper {GLTextureWrappery}
-        * @param [textureUnit=0] {number} Optional parameter for multitexturing. You can have up to 32 textures available to a shader at one time, in the range 0-31. If you don't need multiple textures, this is perfectly safe to ignore.
-        * @return boolean
-        * @public
-        */
-        public useTexture(gl:WebGLRenderingContext,glTextureWrapper: GLTextureWrapper, textureUnit: number = 0):boolean {
-            textureUnit = Kiwi.Utils.GameMath.clamp( Kiwi.Utils.GameMath.truncate(textureUnit), 31);    // Convert to integer in range 0-31.
-            
-            if (!glTextureWrapper.created || !glTextureWrapper.uploaded) {
-                if(!this._uploadTexture(gl, glTextureWrapper)) {
-                    this._freeSpace(gl, glTextureWrapper.numBytes);
-                    this._uploadTexture(gl, glTextureWrapper);
-                }
-                this.numTextureWrites++;
-            }
-                
-            //use texture
-            if (glTextureWrapper.created && glTextureWrapper.uploaded) {
-                // Determine target texture unit
-                // This could be determined as:
-                //   var targetTextureUnit = "TEXTURE" + textureUnit;
-                //   gl.activeTexture(gl[targetTextureUnit]);
-                // But because the Khronos WebGL spec defines 
-                // the glenums of TEXTURE0-31 to be consecutive,
-                // this should be safe and fast:
-                var targetTextureUnit = gl.TEXTURE0 + textureUnit;
-                gl.activeTexture(targetTextureUnit);
-                // Bind texture to unit
-                gl.bindTexture(gl.TEXTURE_2D, glTextureWrapper.texture);
+			return false;
+		}
 
-                //gl.uniform2fv(textureSizeUniform, new Float32Array([glTextureWrapper.image.width, glTextureWrapper.image.height]));
-                return true;
-            }
-            
-            return false;
-        }
-        
-        /**
-        * Attempts to free space in video memory.
-        *
-        * This removes textures sequentially, starting from the first cached texture. This may remove textures that are in use. These should automatically re-upload into the last position. After a few frames, this will push in-use textures to the safe end of the queue.
-        *
-        * If there are too many textures in use to fit in memory, they will all be cycled every frame, even if it would be more efficient to swap out one or two very large textures and preserve several smaller ones. This is an issue with this implementation and should be fixed.
-        *
-        * This behaviour was changed in v1.1.0. Previous versions used a different memory freeing algorithm.
-        * @method _freeSpace
-        * @param gl {WebGLRenderingContext}
-        * @param numBytesToRemove {number}
-        * @return boolean
-        * @private
-        */
-        private _freeSpace(gl: WebGLRenderingContext, numBytesToRemove: number): boolean {
-            // Sequential remover
-            var bytesRemoved = 0;
-            for( var i = 0;  i < this._textureWrapperCache.length;  i++ ) {
-                // Scrub uploaded textures
-                if(this._textureWrapperCache[i].uploaded) {
-                    bytesRemoved += this._textureWrapperCache[i].numBytes;
-                    this._deleteTexture(gl, i);
-                }
-                // Break on reaching or exceeding free target
-                if( numBytesToRemove <= bytesRemoved )
-                    return true;
-            }
-                        
-            return false;
-        }
+		/**
+		* Attempts to free space in video memory.
+		*
+		* This removes textures sequentially, starting from the first cached texture. This may remove textures that are in use. These should automatically re-upload into the last position. After a few frames, this will push in-use textures to the safe end of the queue.
+		*
+		* If there are too many textures in use to fit in memory, they will all be cycled every frame, even if it would be more efficient to swap out one or two very large textures and preserve several smaller ones. This is an issue with this implementation and should be fixed.
+		*
+		* This behaviour was changed in v1.1.0. Previous versions used a different memory freeing algorithm.
+		* @method _freeSpace
+		* @param gl {WebGLRenderingContext}
+		* @param numBytesToRemove {number}
+		* @return boolean
+		* @private
+		*/
+		private _freeSpace(gl: WebGLRenderingContext, numBytesToRemove: number): boolean {
+			// Sequential remover
+			var bytesRemoved = 0;
+			for( var i = 0;  i < this._textureWrapperCache.length;  i++ ) {
+				// Scrub uploaded textures
+				if(this._textureWrapperCache[i].uploaded) {
+					bytesRemoved += this._textureWrapperCache[i].numBytes;
+					this._deleteTexture(gl, i);
+				}
+				// Break on reaching or exceeding free target
+				if( numBytesToRemove <= bytesRemoved )
+					return true;
+			}
+			return false;
+		}
 
-    }
+	}
 
 }
diff --git a/src/render/GLTextureWrapper.ts b/src/render/GLTextureWrapper.ts
index e761a5b..b8f5162 100644
--- a/src/render/GLTextureWrapper.ts
+++ b/src/render/GLTextureWrapper.ts
@@ -1,5 +1,3 @@
-
-
 /**
 *  
 * @module Kiwi
@@ -9,165 +7,168 @@
 */
 
 module Kiwi.Renderers {
-     
-    /**
-    * Wraps a webGL texture object
-    * @class GLTextureWrapper
-    * @constructor
-    * @param gl {WebGLRenderingContext}
-    * @param atlas {Kiwi.Textures.TextureAtlas} The wrapper will default to wrapping atlas.image.
-    * @return {Kiwi.Renderers.GLTextureWrapper}
-    */
-    export class GLTextureWrapper {
-
-        constructor(gl: WebGLRenderingContext, atlas: Kiwi.Textures.TextureAtlas,upload:boolean = false) {
-            this.textureAtlas = atlas;
-            this._image = atlas.image;
-            this._numBytes = this._image.width * this._image.height * 4;
-            this.createTexture(gl);
-            if (upload) this.uploadTexture(gl);
-       
-        }
-
-        /**
-        * The textureAtlas used by the GLTexture
-        * @property textureAtlas
-        * @type Kiwi.Textures.TextureAtlas
-        */
-
-        public textureAtlas: Kiwi.Textures.TextureAtlas;
-
-        /**
-        * The number of bytes in the texture
-        * @property numBytes
-        * @type Kiwi.Textures.TextureAtlas
-        */
-
-        private _numBytes: number;
-        public get numBytes(): number {
-            return this._numBytes;
-        }
-
-        /**
-        * Returns whether the texture has been created
-        * @property created
-        * @type boolean
-        */
-        private _created: boolean = false;
-        public get created(): boolean {
-            return this._created;
-        }
-        
-        /**
-        * Returns whether the texture has been uploaded to video memory
-        * @property uploaded
-        * @type boolean
-        */
-        private _uploaded: boolean = false;
-        public get uploaded(): boolean {
-            return this._uploaded;
-        }
-
-        /**
-        *
-        * @property texture
-        * @type WebGLTexture
-        * @public
-        */
-        public texture: WebGLTexture;
-        
-        /**
-        * The image wrapped by this wrapper.
-        * @property image
-        * @type HTMLImageElement
-        * @public
-        */
-        private _image: HTMLImageElement;
-        public get image(): HTMLImageElement {
-            return( this._image );
-        }
-        public set image(image: HTMLImageElement) {
-            this._image = image;
-            this._numBytes = this._image.width * this._image.height * 4;
-            this._uploaded = false;
-        }
-
-        //force : if true then other textures will be removed until there is room.
-
-
-        /**
-        * Creates a webgl texture object
-        * @method createTexture
-        * @param gl {WebGLRenderingContext}
-        * @public
-        */
-        public createTexture(gl: WebGLRenderingContext): boolean {
-            this.texture = gl.createTexture();
-            this._created = true;
-            return true;
-        }
-
-        
-        /**
-        * Uploads a webgl texture object to video memory
-        * @method uploadTexture
-        * @param gl {WebGLRenderingContext}
-        * @public
-        */
-        public uploadTexture(gl: WebGLRenderingContext):boolean {
-            var success: boolean = false;
-            if (!this.created) {
-                this.createTexture(gl);
-            }
-
-            if (this.uploaded) {
-                Kiwi.Log.log("...not uploading:the image is already uploaded.", '#renderer', '#webgl'); 
-            } else {
-                gl.bindTexture(gl.TEXTURE_2D, this.texture);
-                gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, 0);
-                gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, this._image);
-                gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
-                gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
-            
-                gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
-                gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
-                gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
-                gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
-                gl.bindTexture(gl.TEXTURE_2D, null);
-                //check gl error here
-                this._uploaded = true;
-                success = true;
-            }
-
-            return success;
-        }
-
-        /**
-        * Re-uploads a webgl texture object to video memory
-        * @method refreshTexture
-        * @param gl {WebGLRenderingContext}
-        * @public
-        */
-        public refreshTexture(gl: WebGLRenderingContext) {
-            this.numBytes = this._image.width * this._image.height * 4;
-            gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, this._image);
-        }
-
-        /**
-        * Deletes a webgl texture
-        * @method deleteTexture
-        * @param gl {WebGLRenderingContext}
-        * @public
-        */
-        public deleteTexture(gl: WebGLRenderingContext) :boolean{
-            gl.deleteTexture(this.texture);
-            this._uploaded = false;
-            this._created = false;
-            return true;
-        }
-
-
-      
-    }
+
+	/**
+	* Wraps a webGL texture object
+	* @class GLTextureWrapper
+	* @constructor
+	* @param gl {WebGLRenderingContext}
+	* @param atlas {Kiwi.Textures.TextureAtlas} The wrapper will default to wrapping atlas.image.
+	* @return {Kiwi.Renderers.GLTextureWrapper}
+	*/
+	export class GLTextureWrapper {
+
+		constructor(gl: WebGLRenderingContext, atlas: Kiwi.Textures.TextureAtlas,upload:boolean = false) {
+			this.textureAtlas = atlas;
+			this._image = atlas.image;
+			this._numBytes = this._image.width * this._image.height * 4;
+			this.createTexture(gl);
+			if (upload) this.uploadTexture(gl);
+
+		}
+
+		/**
+		* The textureAtlas used by the GLTexture
+		* @property textureAtlas
+		* @type Kiwi.Textures.TextureAtlas
+		*/
+
+		public textureAtlas: Kiwi.Textures.TextureAtlas;
+
+		/**
+		* The number of bytes in the texture
+		* @property numBytes
+		* @type Kiwi.Textures.TextureAtlas
+		*/
+
+		private _numBytes: number;
+		public get numBytes(): number {
+			return this._numBytes;
+		}
+
+		/**
+		* Returns whether the texture has been created
+		* @property created
+		* @type boolean
+		*/
+		private _created: boolean = false;
+		public get created(): boolean {
+			return this._created;
+		}
+
+		/**
+		* Returns whether the texture has been uploaded to video memory
+		* @property uploaded
+		* @type boolean
+		*/
+		private _uploaded: boolean = false;
+		public get uploaded(): boolean {
+			return this._uploaded;
+		}
+
+		/**
+		*
+		* @property texture
+		* @type WebGLTexture
+		* @public
+		*/
+		public texture: WebGLTexture;
+
+		/**
+		* The image wrapped by this wrapper.
+		* @property _image
+		* @type HTMLImageElement
+		* @private
+		*/
+		private _image: HTMLImageElement;
+
+		/**
+		* The image wrapped by this wrapper.
+		* @property image
+		* @type HTMLImageElement
+		* @public
+		*/
+		public get image(): HTMLImageElement {
+			return( this._image );
+		}
+		public set image(image: HTMLImageElement) {
+			this._image = image;
+			this._numBytes = this._image.width * this._image.height * 4;
+			this._uploaded = false;
+		}
+
+
+		/**
+		* Creates a webgl texture object
+		* @method createTexture
+		* @param gl {WebGLRenderingContext}
+		* @public
+		*/
+		public createTexture(gl: WebGLRenderingContext): boolean {
+			this.texture = gl.createTexture();
+			this._created = true;
+			return true;
+		}
+
+
+		/**
+		* Uploads a webgl texture object to video memory
+		* @method uploadTexture
+		* @param gl {WebGLRenderingContext}
+		* @public
+		*/
+		public uploadTexture(gl: WebGLRenderingContext):boolean {
+			var success: boolean = false;
+			if (!this.created) {
+				this.createTexture(gl);
+			}
+
+			if (this.uploaded) {
+				Kiwi.Log.log("...not uploading:the image is already uploaded.", '#renderer', '#webgl'); 
+			} else {
+				gl.bindTexture(gl.TEXTURE_2D, this.texture);
+				gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, 0);
+				gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, this._image);
+				gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
+				gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
+			
+				gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
+				gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
+				gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
+				gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
+				gl.bindTexture(gl.TEXTURE_2D, null);
+				//check gl error here
+				this._uploaded = true;
+				success = true;
+			}
+
+			return success;
+		}
+
+		/**
+		* Re-uploads a webgl texture object to video memory
+		* @method refreshTexture
+		* @param gl {WebGLRenderingContext}
+		* @public
+		*/
+		public refreshTexture(gl: WebGLRenderingContext) {
+			this.numBytes = this._image.width * this._image.height * 4;
+			gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, this._image);
+		}
+
+		/**
+		* Deletes a webgl texture
+		* @method deleteTexture
+		* @param gl {WebGLRenderingContext}
+		* @public
+		*/
+		public deleteTexture(gl: WebGLRenderingContext) :boolean{
+			gl.deleteTexture(this.texture);
+			this._uploaded = false;
+			this._created = false;
+			return true;
+		}
+
+	}
 
 }
diff --git a/src/render/renderers/Renderer.ts b/src/render/renderers/Renderer.ts
index acc95f5..c5c9df3 100644
--- a/src/render/renderers/Renderer.ts
+++ b/src/render/renderers/Renderer.ts
@@ -1,4 +1,3 @@
-
 /**
 *  
 * @module Kiwi
@@ -9,150 +8,150 @@
 module Kiwi.Renderers {
 
 
-    export class Renderer {
-
-       /**
-        * Base class for WebGL Renderers. Not for instantiation.
-        * @class Renderer
-        * @constructor
-        * @namespace Kiwi.Renderers
-        * @param gl {WebGLRenderingContext} 
-          * @param shaderManager {Kiwi.Shaders.ShaderManager}
-        * @param [params=null] {object}
-        * @return {Kiwi.Renderers.Renderer}
-        */
-        constructor(gl: WebGLRenderingContext,shaderManager:Kiwi.Shaders.ShaderManager,isBatchRenderer:boolean = false) {
-            this.shaderManager = shaderManager;
-            this._isBatchRenderer = isBatchRenderer;
-            this.loaded = true;
-            this.blendMode = new Kiwi.Renderers.GLBlendMode(gl, {mode:"NORMAL"} );
-        }
-
-        /**
-        * Identifier for this renderer
-        * @property RENDERER_ID
-        * @type String
-        * @public
-        * @static
-        */
-        public static RENDERER_ID: string = "Renderer";
-        
-        /**
-        * The camera matrix
-        * @property camMatrix
-        * @type Float32Array
-        * @public
-        */
-        public camMatrix: Float32Array;
-
-        /**
-        *
-        * @property loaded
-        * @type Array
-        * @public
-        */
-        public loaded: boolean = false;
-
-        /**
-        * Reference to the shaderManager - used for requesting shaders.
-        * @property shaderManager
-        * @type Array
-        * @public
-        */
-        public shaderManager: Kiwi.Shaders.ShaderManager;
-
-        /**
-        * Enables the renderer (for override)
-        * @method enable
-        * @param gl {WebGLRenderingContext}
-        * @param [params=null] {object}
-        * @public
-        */
-        public enable(gl: WebGLRenderingContext, params: any = null) {
-            
-        }
-
-        /**
-        * Enables the renderer (for override)
-        * @method disable
-        * @param gl {WebGLRenderingContext}
-        * @param [params=null] {object}
-        * @public
-        */
-        public disable(gl: WebGLRenderingContext) {
-
-        }
-
-        /**
-        * Enables the renderer (for override)
-        * @method clear
-        * @param gl {WebGLRenderingContext}
-        * @param [params=null] {object}
-        * @public
-        */
-        public clear(gl: WebGLRenderingContext, params: any) {
-        }
-
-        /**
-        * Draw to the draw or frame buffer (for override)
-        * @method draw
-        * @param gl {WebGLRenderingContext}
-        * @public
-        */
-        public draw(gl: WebGLRenderingContext) {
-        }
-
-        /**
-        * Updates the stage resolution uniforms (for override)
-        * @method updateStageResolution
-        * @param gl {WebGLRenderingContext}
-        * @param res {Float32Array}
-        * @public
-        */
-        public updateStageResolution(gl: WebGLRenderingContext, res: Float32Array) {
-        }
-
-         /**
-        * Updates the texture size uniforms (for override)
-        * @method updateTextureSize
-        * @param gl {WebGLRenderingContext}
-        * @param size {Float32Array}
-        * @public
-        */
-        public updateTextureSize(gl: WebGLRenderingContext, size: Float32Array) {
-        }
-
-
-        /**
-        * The shader pair used by the renderer
-        * @property shaderPair
-        * @type {Kiwi.Shaders.ShaderPair}
-        * @public
-        */
-        public shaderPair: Kiwi.Shaders.ShaderPair;
-
-
-        /**
-        * This renderer's blend mode data.
-        * @property blendMode
-        * @type Kiwi.Renderers.GLBlendMode
-        * @public
-        * @since 1.1.0
-        */
-        public blendMode: Kiwi.Renderers.GLBlendMode;
-
-
-        /**
-        * Returns whether this is a batch renderer.
-        * @property isBatchRenderer
-        * @type boolean
-        * @public
-        */
-        private _isBatchRenderer: boolean = false;
-        public get isBatchRenderer(): boolean {
-            return this._isBatchRenderer;
-        }
-
-    }
-
-}
\ No newline at end of file
+	export class Renderer {
+
+		/**
+		* Base class for WebGL Renderers. Not for instantiation.
+		* @class Renderer
+		* @constructor
+		* @namespace Kiwi.Renderers
+		* @param gl {WebGLRenderingContext} 
+		* @param shaderManager {Kiwi.Shaders.ShaderManager}
+		* @param [params=null] {object}
+		* @return {Kiwi.Renderers.Renderer}
+		*/
+		constructor(gl: WebGLRenderingContext,shaderManager:Kiwi.Shaders.ShaderManager,isBatchRenderer:boolean = false) {
+			this.shaderManager = shaderManager;
+			this._isBatchRenderer = isBatchRenderer;
+			this.loaded = true;
+			this.blendMode = new Kiwi.Renderers.GLBlendMode(gl, {mode:"NORMAL"} );
+		}
+
+		/**
+		* Identifier for this renderer
+		* @property RENDERER_ID
+		* @type String
+		* @public
+		* @static
+		*/
+		public static RENDERER_ID: string = "Renderer";
+
+		/**
+		* The camera matrix
+		* @property camMatrix
+		* @type Float32Array
+		* @public
+		*/
+		public camMatrix: Float32Array;
+
+		/**
+		*
+		* @property loaded
+		* @type Array
+		* @public
+		*/
+		public loaded: boolean = false;
+
+		/**
+		* Reference to the shaderManager - used for requesting shaders.
+		* @property shaderManager
+		* @type Array
+		* @public
+		*/
+		public shaderManager: Kiwi.Shaders.ShaderManager;
+
+		/**
+		* Enables the renderer (for override)
+		* @method enable
+		* @param gl {WebGLRenderingContext}
+		* @param [params=null] {object}
+		* @public
+		*/
+		public enable(gl: WebGLRenderingContext, params: any = null) {
+			
+		}
+
+		/**
+		* Enables the renderer (for override)
+		* @method disable
+		* @param gl {WebGLRenderingContext}
+		* @param [params=null] {object}
+		* @public
+		*/
+		public disable(gl: WebGLRenderingContext) {
+
+		}
+
+		/**
+		* Enables the renderer (for override)
+		* @method clear
+		* @param gl {WebGLRenderingContext}
+		* @param [params=null] {object}
+		* @public
+		*/
+		public clear(gl: WebGLRenderingContext, params: any) {
+		}
+
+		/**
+		* Draw to the draw or frame buffer (for override)
+		* @method draw
+		* @param gl {WebGLRenderingContext}
+		* @public
+		*/
+		public draw(gl: WebGLRenderingContext) {
+		}
+
+		/**
+		* Updates the stage resolution uniforms (for override)
+		* @method updateStageResolution
+		* @param gl {WebGLRenderingContext}
+		* @param res {Float32Array}
+		* @public
+		*/
+		public updateStageResolution(gl: WebGLRenderingContext, res: Float32Array) {
+		}
+
+		 /**
+		* Updates the texture size uniforms (for override)
+		* @method updateTextureSize
+		* @param gl {WebGLRenderingContext}
+		* @param size {Float32Array}
+		* @public
+		*/
+		public updateTextureSize(gl: WebGLRenderingContext, size: Float32Array) {
+		}
+
+
+		/**
+		* The shader pair used by the renderer
+		* @property shaderPair
+		* @type {Kiwi.Shaders.ShaderPair}
+		* @public
+		*/
+		public shaderPair: Kiwi.Shaders.ShaderPair;
+
+
+		/**
+		* This renderer's blend mode data.
+		* @property blendMode
+		* @type Kiwi.Renderers.GLBlendMode
+		* @public
+		* @since 1.1.0
+		*/
+		public blendMode: Kiwi.Renderers.GLBlendMode;
+
+
+		/**
+		* Returns whether this is a batch renderer.
+		* @property isBatchRenderer
+		* @type boolean
+		* @public
+		*/
+		private _isBatchRenderer: boolean = false;
+		public get isBatchRenderer(): boolean {
+			return this._isBatchRenderer;
+		}
+
+	}
+
+}
diff --git a/src/render/renderers/TextureAtlasRenderer.ts b/src/render/renderers/TextureAtlasRenderer.ts
index 0df3138..099c1a7 100644
--- a/src/render/renderers/TextureAtlasRenderer.ts
+++ b/src/render/renderers/TextureAtlasRenderer.ts
@@ -1,4 +1,3 @@
-
 /**
 *  
 * @module Kiwi
@@ -8,233 +7,232 @@
 
 module Kiwi.Renderers {
 
-    export class TextureAtlasRenderer extends Renderer {
-
-        /**
-        * The Renderer object for rendering Texture Atlases
-        * @class TextureAtlasRenderer
-        * @constructor
-        * @extends Kiwi.Renderers.Renderer
-        * @namespace Kiwi.Renderers
-        * @param gl {WebGLRenderingContext} 
-        * @param shaderManager {Kiwi.Shaders.ShaderManager}
-        * @param [params=null] {object}
-        * @return {Kiwi.Renderers.TextureAtlasRenderer}
-        */
-        constructor(gl: WebGLRenderingContext, shaderManager: Kiwi.Shaders.ShaderManager, params: any = null) {
-            super(gl, shaderManager, true);
-            var bufferItemSize = 5;
-            this._vertexBuffer = new GLArrayBuffer(gl, bufferItemSize);
-            var vertsPerQuad = 6;
-            this._indexBuffer = new GLElementArrayBuffer(gl, 1, this._generateIndices(this._maxItems * vertsPerQuad));
-
-            this.shaderPair = this.shaderManager.requestShader(gl, this._shaderPairName);
-        }
-
-        /**
-        * The identifier for this renderer.
-        * @property RENDERER_ID
-        * @type Array
-        * @public
-        * @static
-        */
-        public static RENDERER_ID: string = "TextureAtlasRenderer";
-
-        /**
-        * The shaderPair that this renderer uses.
-        * @property shaderPair
-        * @type Kiwi.Shaders.TextureAtlasShade
-        * @public
-        */
-        public shaderPair: Kiwi.Shaders.TextureAtlasShader;
-
-        /**
-        * The reference to the shaderPair.
-        * @property _shaderPairName
-        * @type String
-        * @private
-        * @since 1.1.0
-        */
-        private _shaderPairName: string = "TextureAtlasShader";
-
-        /**
-        * The maximum number of items that can be rendered by the renderer (not enforced)
-        * @property _maxItems
-        * @type number
-        * @private
-        */
-        private _maxItems: number = 1000;
-
-        /**
-        * The Vertex Buffer
-        * @property _vertexBuffer
-        * @type Kiwi.Renderers.GLArrayBuffer
-        * @private
-        */
-        private _vertexBuffer: GLArrayBuffer;
-
-        /**
-        * The Index Buffer
-        * @property _indexBuffer
-        * @type Kiwi.Renderers.GLElementArrayBuffer
-        * @private
-        */
-        private _indexBuffer: GLElementArrayBuffer;
-
-        /**
-        * Enables the renderer ready for drawing
-        * @method enable
-        * @param gl {WebGLRenderingContext}
-        * @param [params=null] {object}
-        * @public
-        */
-        public enable(gl: WebGLRenderingContext, params: any = null) {
-        
-            //this.shaderPair = <Kiwi.Shaders.TextureAtlasShader>this.shaderManager.requestShader(gl, "TextureAtlasShader", true);
-            this.shaderPair = this.shaderManager.requestShader(gl, this._shaderPairName, true);
-            
-            //Texture
-            gl.uniform1i(this.shaderPair.uniforms.uSampler.location, 0);
-
-            //Other uniforms
-            gl.uniform2fv(this.shaderPair.uniforms.uResolution.location, params.stageResolution);
-            gl.uniformMatrix3fv(this.shaderPair.uniforms.uCamMatrix.location, false, params.camMatrix);
-        }
-
-        /**
-        * Disables the renderer
-        * @method disable
-        * @param gl {WebGLRenderingContext}
-        * @public
-        */
-        public disable(gl: WebGLRenderingContext) {
-            gl.disableVertexAttribArray(this.shaderPair.attributes.aXYUV);
-            gl.disableVertexAttribArray(this.shaderPair.attributes.aAlpha);
-        }
-
-        /**
-        * Clears the vertex buffer.
-        * @method clear
-        * @param gl {WebGLRenderingContext}
-        * @public
-        */
-        public clear(gl: WebGLRenderingContext, params: any) {
-            this._vertexBuffer.clear();
-            gl.uniformMatrix3fv(this.shaderPair.uniforms.uCamMatrix.location, false, params.camMatrix);
-        }
-
-        /**
-        * Makes a draw call, this is where things actually get rendered to the draw buffer (or a framebuffer).
-        * @method draw
-        * @param gl {WebGLRenderingContext}
-        * @public
-        */
-        public draw(gl: WebGLRenderingContext) {
-            this._vertexBuffer.uploadBuffer(gl, this._vertexBuffer.items);
-
-            gl.enableVertexAttribArray(this.shaderPair.attributes.aXYUV);
-            gl.vertexAttribPointer(this.shaderPair.attributes.aXYUV, 4, gl.FLOAT, false, 20, 0);
-    
-            gl.enableVertexAttribArray(this.shaderPair.attributes.aAlpha);
-            gl.vertexAttribPointer(this.shaderPair.attributes.aAlpha, 1, gl.FLOAT, false, 20, 16);
-           
-            gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this._indexBuffer.buffer);
-            gl.drawElements(gl.TRIANGLES, (this._vertexBuffer.items.length / 20) * 6, gl.UNSIGNED_SHORT, 0);
-        
-        }
-
-        /**
-        * Generates quad indices
-        * @method _generateIndices
-        * @param numQuads {number}
-        * @private
-        */
-        private _generateIndices(numQuads: number): number[] {
-
-            var quads: number[] = new Array();
-            for (var i = 0; i < numQuads; i++) {
-                quads.push(i * 4 + 0, i * 4 + 1, i * 4 + 2, i * 4 + 0, i * 4 + 2, i * 4 + 3);
-            }
-            return quads;
-        }
-
-        /**
-        * Updates the stage resolution uniforms
-        * @method updateStageResolution
-        * @param gl {WebGLRenderingContext}
-        * @param res {Float32Array}
-        * @public
-        */
-        public updateStageResolution(gl: WebGLRenderingContext, res: Float32Array) {
-            gl.uniform2fv(this.shaderPair.uniforms.uResolution.location, res);
-        }
-
-        /**
-        * Updates the texture size uniforms
-        * @method updateTextureSize
-        * @param gl {WebGLRenderingContext}
-        * @param size {Float32Array}
-        * @public
-        */
-        public updateTextureSize(gl: WebGLRenderingContext, size: Float32Array) {
-            gl.uniform2fv(this.shaderPair.uniforms.uTextureSize.location, size);
-        }
-
-        /**
-        * Sets shader pair by name
-        * @method setShaderPair
-        * @param shaderPair {String}
-        * @public
-        * @since 1.1.0
-        */
-        public setShaderPair(shaderPair: string) {
-            if(typeof shaderPair == "string")
-                this._shaderPairName = shaderPair;
-        }
-
-        /**
-        * Collates all xy and uv coordinates into a buffer ready for upload to video memory
-        * @method addToBatch
-        * @param gl {WebGLRenderingContext}
-        * @param entity {Kiwi.Entity}
-        * @param camera {Camera}
-        * @public
-        */
-        public addToBatch(gl: WebGLRenderingContext, entity: Entity, camera: Kiwi.Camera) {
-            // Skip if it's invisible due to zero alpha
-            if( entity.alpha <= 0 )
-                return;
-            var t: Kiwi.Geom.Transform = entity.transform;
-            var m: Kiwi.Geom.Matrix = t.getConcatenatedMatrix();
-
-            var cell = entity.atlas.cells[entity.cellIndex];
-
-            var pt1: Kiwi.Geom.Point = new Kiwi.Geom.Point(0 - t.rotPointX, 0 - t.rotPointY);
-            var pt2: Kiwi.Geom.Point = new Kiwi.Geom.Point(cell.w - t.rotPointX, 0 - t.rotPointY);
-            var pt3: Kiwi.Geom.Point = new Kiwi.Geom.Point(cell.w - t.rotPointX, cell.h - t.rotPointY);
-            var pt4: Kiwi.Geom.Point = new Kiwi.Geom.Point(0 - t.rotPointX, cell.h - t.rotPointY);
-
-            pt1 = m.transformPoint(pt1);
-            pt2 = m.transformPoint(pt2);
-            pt3 = m.transformPoint(pt3);
-            pt4 = m.transformPoint(pt4);
-
-            this._vertexBuffer.items.push(
-                pt1.x, pt1.y, cell.x, cell.y, entity.alpha,
-                pt2.x, pt2.y, cell.x + cell.w, cell.y, entity.alpha,
-                pt3.x, pt3.y, cell.x + cell.w, cell.y + cell.h, entity.alpha,
-                pt4.x, pt4.y, cell.x, cell.y + cell.h, entity.alpha
-                );
-        }
-
-        /**
-        * Adds an array of precalculated xyuv values to the item array
-        * @method concatBatch
-        * @param vertexItems {array}
-        * @public
-        */
-        public concatBatch(vertexItems: Array<number>) {
-            this._vertexBuffer.items = this._vertexBuffer.items.concat(vertexItems);
-        }
-    }
+	export class TextureAtlasRenderer extends Renderer {
+
+		/**
+		* The Renderer object for rendering Texture Atlases
+		* @class TextureAtlasRenderer
+		* @constructor
+		* @extends Kiwi.Renderers.Renderer
+		* @namespace Kiwi.Renderers
+		* @param gl {WebGLRenderingContext} 
+		* @param shaderManager {Kiwi.Shaders.ShaderManager}
+		* @param [params=null] {object}
+		* @return {Kiwi.Renderers.TextureAtlasRenderer}
+		*/
+		constructor(gl: WebGLRenderingContext, shaderManager: Kiwi.Shaders.ShaderManager, params: any = null) {
+			super(gl, shaderManager, true);
+			var bufferItemSize = 5;
+			this._vertexBuffer = new GLArrayBuffer(gl, bufferItemSize);
+			var vertsPerQuad = 6;
+			this._indexBuffer = new GLElementArrayBuffer(gl, 1, this._generateIndices(this._maxItems * vertsPerQuad));
+
+			this.shaderPair = this.shaderManager.requestShader(gl, this._shaderPairName);
+		}
+
+		/**
+		* The identifier for this renderer.
+		* @property RENDERER_ID
+		* @type Array
+		* @public
+		* @static
+		*/
+		public static RENDERER_ID: string = "TextureAtlasRenderer";
+
+		/**
+		* The shaderPair that this renderer uses.
+		* @property shaderPair
+		* @type Kiwi.Shaders.TextureAtlasShade
+		* @public
+		*/
+		public shaderPair: Kiwi.Shaders.TextureAtlasShader;
+
+		/**
+		* The reference to the shaderPair.
+		* @property _shaderPairName
+		* @type String
+		* @private
+		* @since 1.1.0
+		*/
+		private _shaderPairName: string = "TextureAtlasShader";
+
+		/**
+		* The maximum number of items that can be rendered by the renderer (not enforced)
+		* @property _maxItems
+		* @type number
+		* @private
+		*/
+		private _maxItems: number = 1000;
+
+		/**
+		* The Vertex Buffer
+		* @property _vertexBuffer
+		* @type Kiwi.Renderers.GLArrayBuffer
+		* @private
+		*/
+		private _vertexBuffer: GLArrayBuffer;
+
+		/**
+		* The Index Buffer
+		* @property _indexBuffer
+		* @type Kiwi.Renderers.GLElementArrayBuffer
+		* @private
+		*/
+		private _indexBuffer: GLElementArrayBuffer;
+
+		/**
+		* Enables the renderer ready for drawing
+		* @method enable
+		* @param gl {WebGLRenderingContext}
+		* @param [params=null] {object}
+		* @public
+		*/
+		public enable(gl: WebGLRenderingContext, params: any = null) {
+
+			//this.shaderPair = <Kiwi.Shaders.TextureAtlasShader>this.shaderManager.requestShader(gl, "TextureAtlasShader", true);
+			this.shaderPair = this.shaderManager.requestShader(gl, this._shaderPairName, true);
+			
+			//Texture
+			gl.uniform1i(this.shaderPair.uniforms.uSampler.location, 0);
+
+			//Other uniforms
+			gl.uniform2fv(this.shaderPair.uniforms.uResolution.location, params.stageResolution);
+			gl.uniformMatrix3fv(this.shaderPair.uniforms.uCamMatrix.location, false, params.camMatrix);
+		}
+
+		/**
+		* Disables the renderer
+		* @method disable
+		* @param gl {WebGLRenderingContext}
+		* @public
+		*/
+		public disable(gl: WebGLRenderingContext) {
+			gl.disableVertexAttribArray(this.shaderPair.attributes.aXYUV);
+			gl.disableVertexAttribArray(this.shaderPair.attributes.aAlpha);
+		}
+
+		/**
+		* Clears the vertex buffer.
+		* @method clear
+		* @param gl {WebGLRenderingContext}
+		* @public
+		*/
+		public clear(gl: WebGLRenderingContext, params: any) {
+			this._vertexBuffer.clear();
+			gl.uniformMatrix3fv(this.shaderPair.uniforms.uCamMatrix.location, false, params.camMatrix);
+		}
+
+		/**
+		* Makes a draw call, this is where things actually get rendered to the draw buffer (or a framebuffer).
+		* @method draw
+		* @param gl {WebGLRenderingContext}
+		* @public
+		*/
+		public draw(gl: WebGLRenderingContext) {
+			this._vertexBuffer.uploadBuffer(gl, this._vertexBuffer.items);
+
+			gl.enableVertexAttribArray(this.shaderPair.attributes.aXYUV);
+			gl.vertexAttribPointer(this.shaderPair.attributes.aXYUV, 4, gl.FLOAT, false, 20, 0);
+
+			gl.enableVertexAttribArray(this.shaderPair.attributes.aAlpha);
+			gl.vertexAttribPointer(this.shaderPair.attributes.aAlpha, 1, gl.FLOAT, false, 20, 16);
+
+			gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this._indexBuffer.buffer);
+			gl.drawElements(gl.TRIANGLES, (this._vertexBuffer.items.length / 20) * 6, gl.UNSIGNED_SHORT, 0);
+		}
+
+		/**
+		* Generates quad indices
+		* @method _generateIndices
+		* @param numQuads {number}
+		* @private
+		*/
+		private _generateIndices(numQuads: number): number[] {
+
+			var quads: number[] = new Array();
+			for (var i = 0; i < numQuads; i++) {
+				quads.push(i * 4 + 0, i * 4 + 1, i * 4 + 2, i * 4 + 0, i * 4 + 2, i * 4 + 3);
+			}
+			return quads;
+		}
+
+		/**
+		* Updates the stage resolution uniforms
+		* @method updateStageResolution
+		* @param gl {WebGLRenderingContext}
+		* @param res {Float32Array}
+		* @public
+		*/
+		public updateStageResolution(gl: WebGLRenderingContext, res: Float32Array) {
+			gl.uniform2fv(this.shaderPair.uniforms.uResolution.location, res);
+		}
+
+		/**
+		* Updates the texture size uniforms
+		* @method updateTextureSize
+		* @param gl {WebGLRenderingContext}
+		* @param size {Float32Array}
+		* @public
+		*/
+		public updateTextureSize(gl: WebGLRenderingContext, size: Float32Array) {
+			gl.uniform2fv(this.shaderPair.uniforms.uTextureSize.location, size);
+		}
+
+		/**
+		* Sets shader pair by name
+		* @method setShaderPair
+		* @param shaderPair {String}
+		* @public
+		* @since 1.1.0
+		*/
+		public setShaderPair(shaderPair: string) {
+			if(typeof shaderPair == "string")
+				this._shaderPairName = shaderPair;
+		}
+
+		/**
+		* Collates all xy and uv coordinates into a buffer ready for upload to video memory
+		* @method addToBatch
+		* @param gl {WebGLRenderingContext}
+		* @param entity {Kiwi.Entity}
+		* @param camera {Camera}
+		* @public
+		*/
+		public addToBatch(gl: WebGLRenderingContext, entity: Entity, camera: Kiwi.Camera) {
+			// Skip if it's invisible due to zero alpha
+			if( entity.alpha <= 0 )
+				return;
+			var t: Kiwi.Geom.Transform = entity.transform;
+			var m: Kiwi.Geom.Matrix = t.getConcatenatedMatrix();
+
+			var cell = entity.atlas.cells[entity.cellIndex];
+
+			var pt1: Kiwi.Geom.Point = new Kiwi.Geom.Point(0 - t.rotPointX, 0 - t.rotPointY);
+			var pt2: Kiwi.Geom.Point = new Kiwi.Geom.Point(cell.w - t.rotPointX, 0 - t.rotPointY);
+			var pt3: Kiwi.Geom.Point = new Kiwi.Geom.Point(cell.w - t.rotPointX, cell.h - t.rotPointY);
+			var pt4: Kiwi.Geom.Point = new Kiwi.Geom.Point(0 - t.rotPointX, cell.h - t.rotPointY);
+
+			pt1 = m.transformPoint(pt1);
+			pt2 = m.transformPoint(pt2);
+			pt3 = m.transformPoint(pt3);
+			pt4 = m.transformPoint(pt4);
+
+			this._vertexBuffer.items.push(
+				pt1.x, pt1.y, cell.x, cell.y, entity.alpha,
+				pt2.x, pt2.y, cell.x + cell.w, cell.y, entity.alpha,
+				pt3.x, pt3.y, cell.x + cell.w, cell.y + cell.h, entity.alpha,
+				pt4.x, pt4.y, cell.x, cell.y + cell.h, entity.alpha
+				);
+		}
+
+		/**
+		* Adds an array of precalculated xyuv values to the item array
+		* @method concatBatch
+		* @param vertexItems {array}
+		* @public
+		*/
+		public concatBatch(vertexItems: Array<number>) {
+			this._vertexBuffer.items = this._vertexBuffer.items.concat(vertexItems);
+		}
+	}
 }
diff --git a/src/render/shaders/ShaderPair.ts b/src/render/shaders/ShaderPair.ts
index 8082626..303f57c 100644
--- a/src/render/shaders/ShaderPair.ts
+++ b/src/render/shaders/ShaderPair.ts
@@ -8,200 +8,196 @@
 
 module Kiwi.Shaders {
 
-    /**
-    * Base class for shader pairs which encapsulate a GLSL vertex and fragment shader
-    * @class ShaderPair
-    * @constructor
-    * @namespace Kiwi.Shaders
-    * @return {Kiwi.Shaders.ShaderPair}
-    */
-    export class ShaderPair {
-
-        constructor() {
-          
-        }
-
-        /**
-        *
-        * @property RENDERER_ID
-        * @type string
-        * @public
-        * @static
-        */
-        public static RENDERER_ID: string = "ShaderPair";
-
-        /**
-        * Initialise the shader pair.
-        * @method init
-        * @param gl {WebGLRenderingCotext}
-        * @public
-        */
-        public init(gl: WebGLRenderingContext) {
-         
-            this.vertShader = this.compile(gl, this.vertSource.join("\n"), gl.VERTEX_SHADER);
-            this.fragShader = this.compile(gl, this.fragSource.join("\n"), gl.FRAGMENT_SHADER);
-            this.shaderProgram = this.attach(gl, this.vertShader, this.fragShader);
-            this.loaded = true;
-        }
-
-        /**
-        * Returns whether the shader pair has been loaded and compiled.
-        * @property loaded
-        * @type boolean
-        * @public
-        */
-        public loaded: boolean = false;
-
-        /**
-        * Vertex shader
-        * @property vertShader
-        * @type WebGLShader
-        * @public
-        */
-        public vertShader: WebGLShader;
-
-        /**
-        * Fragment shader 
-        * @property fragShader
-        * @type WebGLShader
-        * @public
-        */
-        public fragShader: WebGLShader;
-
-        /**
-        * The WebGl shader program
-        * @property shaderProgram
-        * @type WebGLProgram
-        * @public
-        */
-        public shaderProgram: WebGLProgram;
-
-        /**
-        * Attaches the shaders to the program and links them
-        * @method attach
-        * @param gl {WebGLRenderingContext}
-        * @param vertShader {WebGLShader}
-        * @param fragShader {WebGLShader}
-        * @return {WebGLProgram}
-        * @public
-        */
-        public attach(gl: WebGLRenderingContext, vertShader: WebGLShader, fragShader: WebGLShader): WebGLProgram {
-            var shaderProgram: WebGLProgram = gl.createProgram();
-            gl.attachShader(shaderProgram, fragShader);
-            gl.attachShader(shaderProgram, vertShader);
-            gl.linkProgram(shaderProgram);
-            return shaderProgram;
-        }
-
-        /**
-        * Compiles the shaders
-        * @method compile
-        * @param gl {WebGLRenderingContext}
-        * @param src {string}
-        * @param shaderType {number}
-        * @return {WebGLShader}
-        * @public
-        */
-        public compile(gl: WebGLRenderingContext, src: string, shaderType: number): WebGLShader {
-            var shader: WebGLShader = gl.createShader(shaderType);
-            gl.shaderSource(shader, src);
-            gl.compileShader(shader);
-
-            if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
-                return null;
-            }
-            return shader;
-        }
-
-        /**
-        * Uniform descriptors
-        * @property uniforms
-        * @type Array
-        * @public
-        */
-        public uniforms: any;
-
-        /**
-        * Attribute descriptors
-        * @property attributes
-        * @type Array
-        * @public
-        */
-        public attributes: any;
-
-
-        /**
-        * Shader frag source (for override)
-        * @property texture2DFrag
-        * @type Array
-        * @public
-        */
-        public fragSource: Array<any>;
-
-        /**
-        * Shader vert source (for override)
-        * @property texture2DVert
-        * @type Array
-        * @public
-        */
-        public vertSource: Array<any>;
-
-        /**
-        * Sets a single uniform value and marks it as dirty.
-        * @method setParam
-        * @param uniformName {string}
-        * @param value {*}
-        * @public
-        */
-        public setParam(uniformName: string, value: any) {
-            this.uniforms[uniformName].value = value;
-            this.uniforms[uniformName].dirty = true;
-        }
-
-        /**
-        * Applies all uniforms to the uploaded program
-        * @method applyUniforms
-        * @param gl {WebGLRenderingCotext}
-        * @public
-        */
-        public applyUniforms(gl: WebGLRenderingContext) {
-            for (var u in this.uniforms) {
-                this.applyUniform(gl, u);
-            }
-        }
-
-         /**
-        * Applies a single uniforms to the uploaded program
-        * @method applyUniform
-        * @param gl {WebGLRenderingCotext}
-        * @param name {string}
-        * @public
-        */
-        public applyUniform(gl: WebGLRenderingContext, name: string) {
-            var u = this.uniforms[name]
-            if (this.uniforms[name].dirty) {
-                gl["uniform" + u.type](u.location, u.value);
-                this.uniforms[name].dirty = false;
-            }
-        }
-
-        /**
-        * Initialises all uniforms
-        * @method initUniforms
-        * @param gl {WebGLRenderingCotext}
-        * @public
-        */
-        public initUniforms(gl: WebGLRenderingContext) {
-            for (var uniformName in this.uniforms) {
-                var uniform = this.uniforms[uniformName];
-                uniform.location = gl.getUniformLocation(this.shaderProgram, uniformName);
-                uniform.dirty = true;
-                uniform.value = null;
-
-            }
-        }
-
-    }
-
-
-}
\ No newline at end of file
+	/**
+	* Base class for shader pairs which encapsulate a GLSL vertex and fragment shader
+	* @class ShaderPair
+	* @constructor
+	* @namespace Kiwi.Shaders
+	* @return {Kiwi.Shaders.ShaderPair}
+	*/
+	export class ShaderPair {
+
+		constructor() {}
+
+		/**
+		*
+		* @property RENDERER_ID
+		* @type string
+		* @public
+		* @static
+		*/
+		public static RENDERER_ID: string = "ShaderPair";
+
+		/**
+		* Initialise the shader pair.
+		* @method init
+		* @param gl {WebGLRenderingCotext}
+		* @public
+		*/
+		public init(gl: WebGLRenderingContext) {
+			this.vertShader = this.compile(gl, this.vertSource.join("\n"), gl.VERTEX_SHADER);
+			this.fragShader = this.compile(gl, this.fragSource.join("\n"), gl.FRAGMENT_SHADER);
+			this.shaderProgram = this.attach(gl, this.vertShader, this.fragShader);
+			this.loaded = true;
+		}
+
+		/**
+		* Returns whether the shader pair has been loaded and compiled.
+		* @property loaded
+		* @type boolean
+		* @public
+		*/
+		public loaded: boolean = false;
+
+		/**
+		* Vertex shader
+		* @property vertShader
+		* @type WebGLShader
+		* @public
+		*/
+		public vertShader: WebGLShader;
+
+		/**
+		* Fragment shader 
+		* @property fragShader
+		* @type WebGLShader
+		* @public
+		*/
+		public fragShader: WebGLShader;
+
+		/**
+		* The WebGl shader program
+		* @property shaderProgram
+		* @type WebGLProgram
+		* @public
+		*/
+		public shaderProgram: WebGLProgram;
+
+		/**
+		* Attaches the shaders to the program and links them
+		* @method attach
+		* @param gl {WebGLRenderingContext}
+		* @param vertShader {WebGLShader}
+		* @param fragShader {WebGLShader}
+		* @return {WebGLProgram}
+		* @public
+		*/
+		public attach(gl: WebGLRenderingContext, vertShader: WebGLShader, fragShader: WebGLShader): WebGLProgram {
+			var shaderProgram: WebGLProgram = gl.createProgram();
+			gl.attachShader(shaderProgram, fragShader);
+			gl.attachShader(shaderProgram, vertShader);
+			gl.linkProgram(shaderProgram);
+			return shaderProgram;
+		}
+
+		/**
+		* Compiles the shaders
+		* @method compile
+		* @param gl {WebGLRenderingContext}
+		* @param src {string}
+		* @param shaderType {number}
+		* @return {WebGLShader}
+		* @public
+		*/
+		public compile(gl: WebGLRenderingContext, src: string, shaderType: number): WebGLShader {
+			var shader: WebGLShader = gl.createShader(shaderType);
+			gl.shaderSource(shader, src);
+			gl.compileShader(shader);
+
+			if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
+				return null;
+			}
+			return shader;
+		}
+
+		/**
+		* Uniform descriptors
+		* @property uniforms
+		* @type Array
+		* @public
+		*/
+		public uniforms: any;
+
+		/**
+		* Attribute descriptors
+		* @property attributes
+		* @type Array
+		* @public
+		*/
+		public attributes: any;
+
+
+		/**
+		* Shader frag source (for override)
+		* @property texture2DFrag
+		* @type Array
+		* @public
+		*/
+		public fragSource: Array<any>;
+
+		/**
+		* Shader vert source (for override)
+		* @property texture2DVert
+		* @type Array
+		* @public
+		*/
+		public vertSource: Array<any>;
+
+		/**
+		* Sets a single uniform value and marks it as dirty.
+		* @method setParam
+		* @param uniformName {string}
+		* @param value {*}
+		* @public
+		*/
+		public setParam(uniformName: string, value: any) {
+			this.uniforms[uniformName].value = value;
+			this.uniforms[uniformName].dirty = true;
+		}
+
+		/**
+		* Applies all uniforms to the uploaded program
+		* @method applyUniforms
+		* @param gl {WebGLRenderingCotext}
+		* @public
+		*/
+		public applyUniforms(gl: WebGLRenderingContext) {
+			for (var u in this.uniforms) {
+				this.applyUniform(gl, u);
+			}
+		}
+
+		/**
+		* Applies a single uniforms to the uploaded program
+		* @method applyUniform
+		* @param gl {WebGLRenderingCotext}
+		* @param name {string}
+		* @public
+		*/
+		public applyUniform(gl: WebGLRenderingContext, name: string) {
+			var u = this.uniforms[name]
+			if (this.uniforms[name].dirty) {
+				gl["uniform" + u.type](u.location, u.value);
+				this.uniforms[name].dirty = false;
+			}
+		}
+
+		/**
+		* Initialises all uniforms
+		* @method initUniforms
+		* @param gl {WebGLRenderingCotext}
+		* @public
+		*/
+		public initUniforms(gl: WebGLRenderingContext) {
+			for (var uniformName in this.uniforms) {
+				var uniform = this.uniforms[uniformName];
+				uniform.location = gl.getUniformLocation(this.shaderProgram, uniformName);
+				uniform.dirty = true;
+				uniform.value = null;
+
+			}
+		}
+
+	}
+
+}
diff --git a/src/render/shaders/TextureAtlasShader.ts b/src/render/shaders/TextureAtlasShader.ts
index 97eaee1..0177678 100644
--- a/src/render/shaders/TextureAtlasShader.ts
+++ b/src/render/shaders/TextureAtlasShader.ts
@@ -7,110 +7,110 @@
 
 module Kiwi.Shaders {
 
-    /**
-    * Shader wrapper for rendering Texture Atlases
-    * @class TextureAtlasShader
-    * @extends Kiwi.Shaders.ShaderPair
-    * @constructor
-    * @namespace Kiwi.Shaders
-    * @return {Kiwi.Shaders.TextureAtlasShader}
-    */
-    export class TextureAtlasShader extends ShaderPair {
+	/**
+	* Shader wrapper for rendering Texture Atlases
+	* @class TextureAtlasShader
+	* @extends Kiwi.Shaders.ShaderPair
+	* @constructor
+	* @namespace Kiwi.Shaders
+	* @return {Kiwi.Shaders.TextureAtlasShader}
+	*/
+	export class TextureAtlasShader extends ShaderPair {
 
-        constructor() {
-            super();
-        }
+		constructor() {
+			super();
+		}
 
-        /**
-        * Initialise the shaderPair
-        * @method init
-        * @param gl {WebGLRenderingCotext}
-        * @return {WebGLBuffer}
-        * @public
-        */
-        public init(gl: WebGLRenderingContext) {
-            super.init(gl);
+		/**
+		* Initialise the shaderPair
+		* @method init
+		* @param gl {WebGLRenderingCotext}
+		* @return {WebGLBuffer}
+		* @public
+		*/
+		public init(gl: WebGLRenderingContext) {
+			super.init(gl);
 
-            this.attributes.aXYUV = gl.getAttribLocation(this.shaderProgram, "aXYUV");
-            this.attributes.aAlpha = gl.getAttribLocation(this.shaderProgram, "aAlpha");
-            
-            this.initUniforms(gl);
-        }
+			this.attributes.aXYUV = gl.getAttribLocation(this.shaderProgram, "aXYUV");
+			this.attributes.aAlpha = gl.getAttribLocation(this.shaderProgram, "aAlpha");
+			
+			this.initUniforms(gl);
+		}
 
-        /**
-        * Shader attribute references
-        * @property attributes
-        * @type object
-        * @public
-        */
-        public attributes: any = {
-            aXYUV: null,
-            aAlpha: null,
-        };
+		/**
+		* Shader attribute references
+		* @property attributes
+		* @type object
+		* @public
+		*/
+		public attributes: any = {
+			aXYUV: null,
+			aAlpha: null,
+		};
 
-        /**
-        * Shader uniform descriptors
-        * @property uniforms
-        * @type object
-        * @public
-        */
-        public uniforms: any = {
-            uCamMatrix: {
-                type: "mat3",
-            },
-            uResolution: {
-                type: "2fv",
-            },
-            uTextureSize: {
-                type: "2fv",
-            },
-            uSampler: {
-                type: "1i",
-            }
-        }
+		/**
+		* Shader uniform descriptors
+		* @property uniforms
+		* @type object
+		* @public
+		*/
+		public uniforms: any = {
+			uCamMatrix: {
+				type: "mat3",
+			},
+			uResolution: {
+				type: "2fv",
+			},
+			uTextureSize: {
+				type: "2fv",
+			},
+			uSampler: {
+				type: "1i",
+			}
+		}
 
 
-        /**
-        * The source for the GLSL fragment shader
-        * @property fragSource
-        * @type Array
-        * @public
-        */
-        public fragSource: Array<string> = [
-            "precision mediump float;",
-            "varying vec2 vTextureCoord;",
-            "varying float vAlpha;",
-            "uniform sampler2D uSampler;",
-            "void main(void) {",
-            "gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));",
-            "gl_FragColor.a *= vAlpha;",
-            "}"
-        ];
+		/**
+		* The source for the GLSL fragment shader
+		* @property fragSource
+		* @type Array
+		* @public
+		*/
+		public fragSource: Array<string> = [
+			"precision mediump float;",
+			"varying vec2 vTextureCoord;",
+			"varying float vAlpha;",
+			"uniform sampler2D uSampler;",
+			"void main(void) {",
+			"gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));",
+			"gl_FragColor.a *= vAlpha;",
+			"}"
+		];
 
 
-        /**
-        * The source for the GLSL vertex shader
-        * @property vertSource
-        * @type Array
-        * @public
-        */
-        public vertSource: Array<string> = [
-            "attribute vec4 aXYUV;",
-            "attribute float aAlpha;",
-            "uniform mat3 uCamMatrix;",
-            "uniform vec2 uResolution;",
-            "uniform vec2 uTextureSize;",
-            "varying vec2 vTextureCoord;",
-            "varying float vAlpha;",
-            "void main(void) {",
-            "   vec2 pos = (uCamMatrix * vec3(aXYUV.xy,1)).xy; ",
-            "   gl_Position = vec4((pos / uResolution * 2.0 - 1.0) * vec2(1, -1), 0, 1);",
-            "   vTextureCoord = aXYUV.zw / uTextureSize;",
-            "   vAlpha = aAlpha;",
-            "}"
-        ];
+		/**
+		* The source for the GLSL vertex shader
+		* @property vertSource
+		* @type Array
+		* @public
+		*/
+		public vertSource: Array<string> = [
+			"attribute vec4 aXYUV;",
+			"attribute float aAlpha;",
+			"uniform mat3 uCamMatrix;",
+			"uniform vec2 uResolution;",
+			"uniform vec2 uTextureSize;",
+			"varying vec2 vTextureCoord;",
+			"varying float vAlpha;",
+			"void main(void) {",
+			"   vec2 pos = (uCamMatrix * vec3(aXYUV.xy,1)).xy; ",
+			"   gl_Position = vec4((pos / uResolution * 2.0 - 1.0) * vec2(1, -1), 0, 1);",
+			"   vTextureCoord = aXYUV.zw / uTextureSize;",
+			"   vAlpha = aAlpha;",
+			"}"
+		];
 
 
-    }
+	}
 
 }
diff --git a/src/sound/Audio.ts b/src/sound/Audio.ts
index 505368e..6c7ab04 100644
--- a/src/sound/Audio.ts
+++ b/src/sound/Audio.ts
@@ -7,849 +7,848 @@
 
 module Kiwi.Sound {
 
-    /**
-    * The Audio Object contains the functionality for playing a singular sound in a Kiwi Game. 
-    * The Audio can contain Audio Sprites which is a nice way to play audio on mobile devices. 
-    * Audio Objects do not 'die' when game states are switched or changed. 
-    *
-    * @class Audio
-    * @constructor
-    * @namespace Kiwi.Sound
-    * @param game {Kiwi.Game} The game that this piece of audio belongs to.
-    * @param key {string} The key to which which piece of audio should be loaded from the AudioLibrary.
-    * @param volume {number} A number between 0 (silence) and 1 (loud).
-    * @param loop {boolean} If the audio should loop when it is finished or just stop.
-    * @return {Kiwi.Sound.Audio} This object
-    *
-    */
-    export class Audio {
-        
-        constructor(game: Kiwi.Game, key: string, volume: number, loop: boolean) {
-
-            this.ready = false;
-            this._game = game;
-            this._game.audio.registerSound(this);
-
-            this._usingAudioTag = this._game.audio.usingAudioTag;
-            this._usingWebAudio = this._game.audio.usingWebAudio;
-
-            this._playable = (this._game.audio.locked == true) ? false : true;
-
-            this.duration = 0;
-            this._volume = volume;
-            this._muteVolume = volume;
-            this._muted = this._game.audio.mute;
-            this._loop = loop;
-            this.key = key;
-
-            //If audio isn't supported OR the file does not exist
-            if (this._game.audio.noAudio || this._game.fileStore.exists(this.key) === false) {
-                Kiwi.Log.log('Could not play Audio. Either the browser doesn\'t support audio or the Audio file was not found on the filestore.', '#audio', '#notfound');
-                return;
-            }
-
-            //Setup the Web AUDIO API Sound
-            if (this._usingWebAudio) {
-                this._setAudio();
-
-                if (this.ready) {
-                    this.context = this._game.audio.context;
-                    this.masterGainNode = this._game.audio.masterGain;
-
-                    //create our gain node
-                    if (typeof this.context.createGain === 'undefined') {
-                        this.gainNode = this.context.createGainNode();
-                    } else {
-                        this.gainNode = this.context.createGain();
-                    }
-
-                    //make sure the audio is decoded.
-                    this._decode();
-
-                    this.gainNode.gain.value = this.volume * this._game.audio.volume;      //this may need to change.....
-                    this.gainNode.connect(this.masterGainNode);
-                }
-
-            //Set-up the Audio Tag Sound
-            } else if (this._usingAudioTag) {
-
-                if (this._playable === true) {
-                    this._setAudio();
-
-                    if (this.ready) {
-
-                        this.totalDuration = this._sound.duration;
-                        this._sound.volume = this.volume * this._game.audio.volume;
-
-                        if (isNaN(this.totalDuration) || this.totalDuration == 0) this._pending = true;
-                    }    
-                }
-
-            }
-
-            this.addMarker('default', 0, this.totalDuration, this._loop);
-            this._currentMarker = 'default';
-
-            //tonnes of signals to go here.
-            this.onPlay = new Kiwi.Signal();
-            this.onStop = new Kiwi.Signal();
-            this.onPause = new Kiwi.Signal();
-            this.onResume = new Kiwi.Signal();
-            this.onLoop = new Kiwi.Signal();
-            this.onMute = new Kiwi.Signal();
-
-        }
-        
-        /**
-        * A unique ID that this audio gets assigned by the audio manager it belongs to when it is created.
-        * @property id
-        * @type number
-        * @public
-        */
-        public id: string;
-
-        /**
-        * A flag that indicates whether the sound is ready to be played or not.
-        * If not then this indicates that we are awaiting a user event.
-        * @property _playable
-        * @type boolean
-        * @private
-        */
-        private _playable: boolean;
-
-        /**
-        * Returns whether or not the sound is 'playable' or not. 
-        * The only time the sound would be not 'playable' is on iOS devices when a mouse/touch event has not fired.
-        * Devs should treat this property as READ ONLY.
-        * @property playable
-        * @type boolean
-        * @private
-        */
-        public get playable():boolean {
-            return this._playable;
-        }
-        public set playable(val: boolean) {
-
-            if (this._playable !== true && val == true) {
-
-                this._playable = val;
-                this._setAudio();
-
-                if (this.ready && this._usingAudioTag) {
-                    this.totalDuration = this._sound.duration;
-                    this._sound.volume = this.volume * this._game.audio.volume;
-
-                }
-            }
-        }
-
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} "Audio"
-        * @public
-        */
-        public objType() {
-            return "Audio";
-        }
-
-        /**
-        * The game that this sound belongs to.
-        * @property _game
-        * @type Kiwi.Game
-        * @private
-        */
-        private _game: Kiwi.Game;
-
-        /**
-        * Web Audio API ONLY - A reference to the audio context that the game's audio manager has.
-        * @property context
-        * @type Any
-        * @public
-        */
-        public context: any;
-        
-        /**
-        * Web Audio API ONLY - A reference to the master gain node on the audio manager.
-        * @property masterGainNode
-        * @type Any
-        * @public
-        */
-        public masterGainNode: any;
-
-        /**
-        * Web Audio API ONLY - This sounds local gainNode that it uses.
-        * @property gainNode
-        * @type Any
-        * @public
-        */
-        public gainNode: any;
-
-        /**
-        * A boolean indicating whether or not that audio tags are being used to generate sounds.
-        * @property _usingAudioTag
-        * @type boolean
-        * @private
-        */
-        private _usingAudioTag: boolean;
-
-        /**
-        * A boolean indicating whether or not the webAuduio api is being used. 
-        * @property _usingWebAudio
-        * @type boolean
-        * @private
-        */
-        private _usingWebAudio: boolean;
-
-        /**
-        * A private indicator of whether this audio is currently muted or not.
-        * @property _muted
-        * @type boolean
-        * @default false
-        * @private
-        */
-        private _muted: boolean = false;  
-        
-        /**
-        * A number between 0 and 1 representing the current volume of this audio piece. 
-        * @property _volume
-        * @type number
-        * @default 1
-        * @private
-        */
-        private _volume: number;  
-        
-        /**
-        * A boolean indicating whether this piece of audio should loop or not.
-        * @property _loop
-        * @type boolean
-        * @private
-        */
-        private _loop: boolean;
-
-        /**
-        * READ ONLY: Returns a boolean indicating if the current audio marker playing is/will loop.
-        * @property loop
-        * @readOnly
-        * @type Boolean
-        * @public
-        */
-        public get loop():boolean {
-            return this._loop;
-        }
-
-        /**
-        * The key that was used to get the audio from the AudioLibrary.
-        * @property key
-        * @type string
-        * @public
-        */
-        public key: string;
-        
-        /**
-        * The property containing the file information about the audio.
-        * @property _file
-        * @type File
-        * @private
-        */
-        private _file: Kiwi.Files.File;
-        
-        /**
-        * This is the piece of audio that either method will use to play audio. E.g.
-        * In the case of the Web Audio API this is the sound buffer source, in which the audio plays from. 
-        * In the case of Audio Tags this is the Audio Tag itself.
-        * @property _sound
-        * @type Any
-        * @private
-        */
-        private _sound: any;
-
-        /**
-        * A boolean that controls/knows if the audio is ready to be played or not.
-        * This is just an indicator of if the file has been retrieved successfully from the file store or not.
-        * @property ready
-        * @type boolean
-        * @public
-        */
-        public ready: boolean;
-
-        /**
-        * The total duration of the audio in seconds.
-        * @property totalDuration
-        * @type number
-        * @public
-        */
-        public totalDuration: number = 0;
-        
-        /**
-        * The current duration of the section of audio that is being played. In milliseconds.
-        * @property duration
-        * @type number
-        * @public
-        */
-        public duration: number;
-        
-        /**
-        * Web Audio API ONLY - The audio buffer that is to be used when playing audio segments.
-        * @property _buffer
-        * @type any
-        * @private
-        */
-        private _buffer:any = null;
-
-        /**
-        * Web Audio API ONLY - A boolean to indicate if the audio has been decoded or not yet. If not you will need to run the decode() method.
-        * @property _decoded
-        * @type boolean
-        * @default false
-        * @private
-        */
-        private _decoded: boolean = false;
-
-        /**
-        * A private property that holds the volume before the sound was muted. Used so that when unmuted the sound will resume at its old spot.
-        * @property _muteVolume
-        * @type number
-        * @private
-        */
-        private _muteVolume: number;
-
-        /**
-        * Indicates whether or not the sound is currently playing.
-        * @property isPlaying
-        * @type boolean
-        * @default false
-        * @public
-        */
-        public isPlaying: boolean;
-
-        /**
-        * A indicator of if the sound is currently paused.
-        * @property paused
-        * @type boolean
-        * @default false
-        * @public
-        */
-        public paused: boolean;
-
-        /**
-        * If the sound needs to be played but we are waiting on particular condition.
-        * In the case of CocoonJS, we generally are waiting for the audio 'length' property to have a value.
-        * @property _pending
-        * @type boolean
-        * @private 
-        */
-        private _pending: boolean;
-
-        /**
-        * When the audio started playing. In milliseconds
-        * @property _startTime
-        * @type number
-        * @private 
-        */
-        private _startTime: number;
-
-        /**
-        * When the audio is playing, this is the current time we are at with it playing. In milliseconds
-        * @property _currentTime
-        * @type number
-        * @private
-        */
-        private _currentTime: number;
-
-        /**
-        * The time at which the audio should stop playing. In milliseconds. This is assuming that the audio is not on loop.
-        * @property _stopTime
-        * @type number
-        * @private
-        */
-        private _stopTime: number;
-
-        /**
-        * An array of all of the markers that are on this piece of audio. 
-        * @property _markers
-        * @type Array
-        * @private
-        */
-        private _markers: any = [];
-
-        /**
-        * The current marker that is being used.
-        * @property _currentMarker
-        * @type String
-        * @default 'default'
-        * @private
-        */
-        private _currentMarker: string = 'default';
-
-        /**
-        * A Kiwi Signal that dispatches a event when the audio starts playing.
-        * @property onPlay
-        * @type Kiwi.Signal
-        * @public
-        */
-        public onPlay: Kiwi.Signal;
-
-        /**
-        * A Kiwi Signal that dispatches a event when the audio stops playing.
-        * @property onStop
-        * @type Kiwi.Signal
-        * @public
-        */
-        public onStop: Kiwi.Signal;
-        
-        /**
-        * A Kiwi Signal that dispatches a event when the audio gets paused.
-        * @property onPause
-        * @type Kiwi.Signal
-        * @public
-        */
-        public onPause: Kiwi.Signal;
-        
-        /**
-        * A Kiwi Signal that dispatches a event when the audio resumes.
-        * @property onResume
-        * @type Kiwi.Signal
-        * @public
-        */
-        public onResume: Kiwi.Signal;
-        
-        /**
-        * A Kiwi Signal that dispatches a event when the audio finishes and starts again, due to it looping.
-        * @property onLoop
-        * @type Kiwi.Signal
-        * @public
-        */
-        public onLoop: Kiwi.Signal;
-        
-        /**
-        * A Kiwi Signal that dispatches a event when the audio gets muted.
-        * @property onMute
-        * @type Kiwi.Signal
-        * @public
-        */
-        public onMute: Kiwi.Signal;
-
-        /**
-        * Retrieves the audio data from the file store.
-        * @method _setAudio
-        * @private
-        */
-        private _setAudio() {
-            
-            this._file = this._game.fileStore.getFile(this.key);
-            
-            //Does the data actually exist?
-            if (typeof this._file.data == "undefined") return;
-
-            //force the browser to play it at least for a little bit
-            if (this._usingAudioTag) {
-                //clone the audio node
-                this._sound = this._file.data.cloneNode(true);
-
-                if (this._game.deviceTargetOption == Kiwi.TARGET_BROWSER) { //Tells the browser to play the piece of audio
-                    this._sound.play();
-                    this._sound.pause();
-                }
-            } else {
-
-                this._sound = this._file.data;
-            }
-            
-            this.ready = true;
-
-        } 
-
-        /**
-        * Decodes the audio data to make it playable. By default the audio should already have been decoded when it was loaded.
-        * 
-        * @method _decode
-        * @private
-        */
-        private _decode() {
-            //You only decode when using the web audio api, when the audio has loaded and if it hasn't been decoded already
-            if (this.ready == false || this._usingAudioTag) return;
-
-            //has the 
-            if (this._file.data.decoded === true && this._file.data.buffer !== null) {
-                this._buffer = this._file.data.buffer;
-                this._decoded = true;
-                return;
-            }
-
-            var that = this;
-            this.context.decodeAudioData(this._file.data.raw, function (buffer) {
-                that._buffer = buffer;
-                that._decoded = true;
-            });
-
-        }
-        
-        /**
-        * Used to control the current volume for this sound. 0 is silent, 1 is full volume.
-        * 
-        * @property volume
-        * @type number
-        * @public
-        */
-        public set volume(val: number) {
-
-            if (this._game.audio.noAudio || this.ready === false) return;
-
-            val = Kiwi.Utils.GameMath.clamp(val, 1, 0);
-
-            this._volume = val;
-
-            if (this._muted) {
-                this._muteVolume = this._volume;
-            }
-
-            if (this._playable) {
-                if (this._usingWebAudio) {
-                    this.gainNode.gain.value = this._volume * this._game.audio.volume;            //this may need to change....
-
-                } else if (this._usingAudioTag) {
-                    this._sound.volume = this._volume * this._game.audio.volume;
-                    
-                }
-            }
-        }
-        public get volume(): number {
-
-            return this._volume;
-
-        }
-
-        /**
-        * Mutes the sound and makes it 'silent'. 
-        * This will not stop the sound from playing, or events from being dispatched due when the sound has finished/is looping.
-        *
-        * @property mute
-        * @type boolean
-        * @public
-        */
-        public set mute(val: boolean) {
-
-            if (this._game.audio.noAudio) return;
-
-            if (val !== undefined && this._muted !== val) {
-                if (val === true) {
-                    this._muteVolume = this._volume;
-                    this.volume = 0;
-                    this._muted = true;
-                } else {
-                    this._muted = false;
-                    this.volume = this._muteVolume;
-                }
-                this.onMute.dispatch(this._muted);
-            }
-        }
-        public get mute(): boolean {
-
-            return this._muted;
-
-        }
-
-        /**
-        * Adds a new marker to the audio which will then allow for that section of audio to be played.
-        * 
-        * @method addMarker
-        * @param name {string} The name of the marker that you are adding.
-        * @param start {number} The starting point of the audio. In seconds.
-        * @param stop {number} The stopping point of the audio. In seconds.
-        * @param [loop=false] {boolean} If the marker's pieve of audio should loop or not.
-        * @public 
-        */
-        public addMarker(name: string, start: number, stop: number, loop: boolean = false) {
-            this._markers[name] = { start: start, stop: stop, duration: stop - start, loop: loop };
-        }
-
-        /**
-        * Removes a currently existing marker from this audio.
-        *
-        * @method removeMarker
-        * @param name {String} name of the audio that you want to remove.
-        * @public
-        */
-        public removeMarker(name: string) {
-            if (name === 'default') return; //cannot delete the default
-
-            if (this.isPlaying && this._currentMarker == name) {
-                this.stop();    
-                this._currentMarker = 'default';
-            }
-            delete this._markers[name];
-        }
-
-
-        /**
-        * Plays the current sound/audio from the start.
-        *
-        * @method play
-        * @param [marker] {string} The marker that is to be played. If no marker is specified then it will play the current marker (which would be the whole audio piece if no marker was ever added).
-        * @param [forceRestart=false] {boolean} Force the audio to stop and start again. Otherwise if the audio was already playing it would ignore the play.
-        * @public
-        */
-        public play(marker: string= this._currentMarker, forceRestart: boolean = false) {
-
-            if (this.isPlaying && !forceRestart || this._game.audio.noAudio) return;
-
-            if (forceRestart  && !this._pending ) this.stop();
-
-            if (typeof this._markers[marker] == "undefined") return;
-
-            //If its the current marker that is playing and shouldn't force restart then stop
-            if(this._currentMarker === marker && this.isPlaying && forceRestart == false) return;
-            
-            this.paused = false;
-            this._currentMarker = marker; 
-            this.duration = this._markers[this._currentMarker].duration * 1000;
-            this._loop = this._markers[this._currentMarker].loop;
-            
-            if (this._playable === false) {
-                this._pending = true;
-                return;
-            }
-
-            if (this._usingWebAudio) {
-                if (this._decoded === true) {
-
-                    if (this._buffer == null) this._buffer = this._file.data.buffer;
-
-                    this._sound = this.context.createBufferSource();
-                    this._sound.buffer = this._buffer;
-                    this._sound.connect(this.gainNode);
-                    this.totalDuration = this._sound.buffer.duration;
-
-                    if (this.duration == 0) this.duration = this.totalDuration * 1000;
-
-                    if (this._loop) this._sound.loop = true;
-
-                    //start
-                    if (this._sound.start === undefined) {
-                        this._sound.noteGrainOn(0, this._markers[this._currentMarker].start, this.duration / 1000);
-                    } else {
-                        this._sound.start(0, this._markers[this._currentMarker].start, this.duration / 1000);
-                    }
-                    
-                    this.isPlaying = true;
-                    this._startTime = this._game.time.now();
-                    this._currentTime = 0;
-                    this._stopTime = this._startTime + this.duration;
-                    this.onPlay.dispatch();
-
-                } else {
-                    this._pending = true;
-                    this._decode();
-                }
-
-            } else if (this._usingAudioTag) {
-
-                if (this._sound && this._sound.readyState == 4 || this._game.deviceTargetOption == Kiwi.TARGET_COCOON) {
-
-                    if (this.duration == 0 || isNaN(this.duration)) this.duration = this.totalDuration * 1000;
-
-                    if (this._muted) this._sound.volume = 0;
-                    else this._sound.volume = this._volume;
-
-                    this._sound.currentTime = this._markers[this._currentMarker].start;
-                    this._sound.play();
-                    this.isPlaying = true;
-                    this._startTime = this._game.time.now();
-                    this._currentTime = 0;
-                    this._stopTime = this._startTime + this.duration;
-
-                    if (!this.paused) this.onPlay.dispatch();
-                } else {
-                    this._pending = true;
-                }
-            }
-        }
-
-        /**
-        * Stop the sound from playing.
-        * @method stop
-        * @public
-        */
-        public stop() {
-
-            if (this.isPlaying && this._sound) {
-                if (this._usingWebAudio) {
-
-                    if (this._sound.stop === undefined) {
-                        this._sound.noteOff(0);
-                    } else {
-                        this._sound.stop(0);
-                    }
-
-                } else if (this._usingAudioTag) {
-                    this._sound.pause();
-                    this._sound.currentTime = 0;
-                }
-                
-                this.isPlaying = false;
-
-                if(this.paused == false) this.onStop.dispatch();
-            }
-
-        }
-        
-        /**
-        * Pauses the sound so that you can resume it from at point to paused it at.
-        * @method pause
-        * @public
-        */
-        public pause() {
-            if (this.isPlaying) {
-                this.paused = true;
-                this.stop();
-                this.onPause.dispatch();
-            }
-        }
-        
-        /**
-        * Plays the sound from when you paused the sound.
-        * @method resume
-        * @public
-        */
-        public resume() {
-
-            if (this.paused && this.isPlaying == false) {
-                if (this._usingWebAudio) {
-                    
-                    if (this._buffer == null) this._buffer = this._file.data.buffer;
-
-                    this._sound = this.context.createBufferSource();
-                    this._sound.buffer = this._buffer;
-                    this._sound.connect(this.gainNode);
-
-                    if (this._loop) this._sound.loop = true;
-
-                    if (this._sound.start === undefined) {
-                        this._sound.noteGrainOn(0, this._markers[this._currentMarker].start + (this._currentTime / 1000), this.duration / 1000);
-                    } else {
-                        this._sound.start(0, this._markers[this._currentMarker].start + (this._currentTime / 1000), this.duration / 1000);
-                    }
-
-                } else {
-                    this._sound.currentTime = this._markers[this._currentMarker].start + this._currentTime / 1000;
-                    this._sound.play();
-                }
-
-                this.paused = false;
-                this.isPlaying = true;
-                this.onResume.dispatch();
-
-            }
-
-        }
-        
-        /**
-        * The update loop that gets executed every frame. 
-        * @method update
-        * @public
-        */
-        public update() {
-            //Check to see that the audio is ready
-            if (!this.ready) return;
-
-            //Is the audio ready to be played and was waiting?
-            if (this._playable && this._pending) {
-
-
-                //Is it the using the Web Audio API (can tell otherwise the audio would not be decoding otherwise) and it is now ready to be played?
-                if (this._decoded === true || this._file.data && this._file.data.decoded) { //Most likely unneeded now due to the fact that audio is decoded at load.
-                    this._pending = false;
-                    this.play();
-
-                //If we are using Audio tags and the audio is pending then that must be because we are waiting for the audio to load.
-                    // Also the work around for CocoonJS
-                } else if (this._usingAudioTag && !isNaN(this._sound.duration) || this._game.deviceTargetOption == Kiwi.TARGET_COCOON && this._sound.duration !== 0) {
-                    this.totalDuration = this._sound.duration;
-                    this._markers['default'].duration = this.totalDuration;
-                    this._pending = false;      //again shouldn't need once audio tag loader works.
-
-                    if(this.isPlaying && this._currentMarker == 'default') this.duration = this.totalDuration;
-                }
-            } 
-
-            //if the audio is playing
-            if (this.isPlaying) {
-
-                this._currentTime = this._game.time.now() - this._startTime;
-                
-                if (this._currentTime >= this.duration) {
-                    if (this._usingWebAudio) {
-
-                        if (this._loop) {
-
-                            if (this._currentMarker == 'default') {
-                                this._currentTime = 0;
-                                this._startTime = this._game.time.now();
-                            } else {
-                                this.play(this._currentMarker, true);
-                            }
-
-                            this.onLoop.dispatch();
-                        } else {
-                            this.stop();
-                        }
-
-                    } else if(this._usingAudioTag) {
-
-                        if (this._loop) {
-
-                            this.play(this._currentMarker, true);
-                            this.onLoop.dispatch();
-                        } else {
-                            this.stop();
-                        }
-
-                    }
-                }
-            }
-
-        }
-        
-        /**
-        * This method handles the destruction of all of the properties when this audio is not longer needed. 
-        * You call this method when you want this method to be removed on the next garbage collection cycle.
-        *
-        * @method destroy
-        * @public
-        */
-        public destroy() {
-            if (this._game) {
-                this._game.audio.remove(this, false);
-            }
-            if (this.onLoop) this.onLoop.dispose();
-            if (this.onStop) this.onStop.dispose();
-            if (this.onPlay) this.onPlay.dispose();
-            if (this.onMute) this.onMute.dispose();
-            if (this.onPause) this.onPause.dispose();
-            if (this.onResume) this.onResume.dispose();
-            
-            delete this.onLoop;
-            delete this.onStop;
-            delete this.onPause;
-            delete this.onMute;
-            delete this.onPlay;
-            delete this.onResume;
-            delete this._game;
-            delete this._sound;
-            delete this._currentTime;
-            delete this._startTime;
-            delete this._stopTime;
-            delete this._pending;
-            delete this.masterGainNode;
-            delete this.gainNode;
-            delete this.totalDuration;
-            delete this.duration;
-            delete this._file;
-            delete this._buffer;
-            delete this._decoded;
-        }
-
-    }
-
-}
\ No newline at end of file
+	/**
+	* The Audio Object contains the functionality for playing a singular sound in a Kiwi Game. 
+	* The Audio can contain Audio Sprites which is a nice way to play audio on mobile devices. 
+	* Audio Objects do not 'die' when game states are switched or changed. 
+	*
+	* @class Audio
+	* @constructor
+	* @namespace Kiwi.Sound
+	* @param game {Kiwi.Game} The game that this piece of audio belongs to.
+	* @param key {string} The key to which which piece of audio should be loaded from the AudioLibrary.
+	* @param volume {number} A number between 0 (silence) and 1 (loud).
+	* @param loop {boolean} If the audio should loop when it is finished or just stop.
+	* @return {Kiwi.Sound.Audio} This object
+	*
+	*/
+	export class Audio {
+
+		constructor(game: Kiwi.Game, key: string, volume: number, loop: boolean) {
+
+			this.ready = false;
+			this._game = game;
+			this._game.audio.registerSound(this);
+
+			this._usingAudioTag = this._game.audio.usingAudioTag;
+			this._usingWebAudio = this._game.audio.usingWebAudio;
+
+			this._playable = (this._game.audio.locked == true) ? false : true;
+
+			this.duration = 0;
+			this._volume = volume;
+			this._muteVolume = volume;
+			this._muted = this._game.audio.mute;
+			this._loop = loop;
+			this.key = key;
+
+			//If audio isn't supported OR the file does not exist
+			if (this._game.audio.noAudio || this._game.fileStore.exists(this.key) === false) {
+				Kiwi.Log.log('Could not play Audio. Either the browser doesn\'t support audio or the Audio file was not found on the filestore.', '#audio', '#notfound');
+				return;
+			}
+
+			//Setup the Web AUDIO API Sound
+			if (this._usingWebAudio) {
+				this._setAudio();
+
+				if (this.ready) {
+					this.context = this._game.audio.context;
+					this.masterGainNode = this._game.audio.masterGain;
+
+					//create our gain node
+					if (typeof this.context.createGain === 'undefined') {
+						this.gainNode = this.context.createGainNode();
+					} else {
+						this.gainNode = this.context.createGain();
+					}
+
+					//make sure the audio is decoded.
+					this._decode();
+
+					this.gainNode.gain.value = this.volume * this._game.audio.volume;      //this may need to change.....
+					this.gainNode.connect(this.masterGainNode);
+				}
+
+			//Set-up the Audio Tag Sound
+			} else if (this._usingAudioTag) {
+
+				if (this._playable === true) {
+					this._setAudio();
+
+					if (this.ready) {
+
+						this.totalDuration = this._sound.duration;
+						this._sound.volume = this.volume * this._game.audio.volume;
+
+						if (isNaN(this.totalDuration) || this.totalDuration == 0) this._pending = true;
+					}
+				}
+
+			}
+
+			this.addMarker('default', 0, this.totalDuration, this._loop);
+			this._currentMarker = 'default';
+
+			//tonnes of signals to go here.
+			this.onPlay = new Kiwi.Signal();
+			this.onStop = new Kiwi.Signal();
+			this.onPause = new Kiwi.Signal();
+			this.onResume = new Kiwi.Signal();
+			this.onLoop = new Kiwi.Signal();
+			this.onMute = new Kiwi.Signal();
+
+		}
+
+		/**
+		* A unique ID that this audio gets assigned by the audio manager it belongs to when it is created.
+		* @property id
+		* @type number
+		* @public
+		*/
+		public id: string;
+
+		/**
+		* A flag that indicates whether the sound is ready to be played or not.
+		* If not then this indicates that we are awaiting a user event.
+		* @property _playable
+		* @type boolean
+		* @private
+		*/
+		private _playable: boolean;
+
+		/**
+		* Returns whether or not the sound is 'playable' or not. 
+		* The only time the sound would be not 'playable' is on iOS devices when a mouse/touch event has not fired.
+		* Devs should treat this property as READ ONLY.
+		* @property playable
+		* @type boolean
+		* @private
+		*/
+		public get playable():boolean {
+			return this._playable;
+		}
+		public set playable(val: boolean) {
+
+			if (this._playable !== true && val == true) {
+
+				this._playable = val;
+				this._setAudio();
+
+				if (this.ready && this._usingAudioTag) {
+					this.totalDuration = this._sound.duration;
+					this._sound.volume = this.volume * this._game.audio.volume;
+
+				}
+			}
+		}
+
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} "Audio"
+		* @public
+		*/
+		public objType() {
+			return "Audio";
+		}
+
+		/**
+		* The game that this sound belongs to.
+		* @property _game
+		* @type Kiwi.Game
+		* @private
+		*/
+		private _game: Kiwi.Game;
+
+		/**
+		* Web Audio API ONLY - A reference to the audio context that the game's audio manager has.
+		* @property context
+		* @type Any
+		* @public
+		*/
+		public context: any;
+
+		/**
+		* Web Audio API ONLY - A reference to the master gain node on the audio manager.
+		* @property masterGainNode
+		* @type Any
+		* @public
+		*/
+		public masterGainNode: any;
+
+		/**
+		* Web Audio API ONLY - This sounds local gainNode that it uses.
+		* @property gainNode
+		* @type Any
+		* @public
+		*/
+		public gainNode: any;
+
+		/**
+		* A boolean indicating whether or not that audio tags are being used to generate sounds.
+		* @property _usingAudioTag
+		* @type boolean
+		* @private
+		*/
+		private _usingAudioTag: boolean;
+
+		/**
+		* A boolean indicating whether or not the webAuduio api is being used. 
+		* @property _usingWebAudio
+		* @type boolean
+		* @private
+		*/
+		private _usingWebAudio: boolean;
+
+		/**
+		* A private indicator of whether this audio is currently muted or not.
+		* @property _muted
+		* @type boolean
+		* @default false
+		* @private
+		*/
+		private _muted: boolean = false;  
+
+		/**
+		* A number between 0 and 1 representing the current volume of this audio piece. 
+		* @property _volume
+		* @type number
+		* @default 1
+		* @private
+		*/
+		private _volume: number;  
+
+		/**
+		* A boolean indicating whether this piece of audio should loop or not.
+		* @property _loop
+		* @type boolean
+		* @private
+		*/
+		private _loop: boolean;
+
+		/**
+		* READ ONLY: Returns a boolean indicating if the current audio marker playing is/will loop.
+		* @property loop
+		* @readOnly
+		* @type Boolean
+		* @public
+		*/
+		public get loop():boolean {
+			return this._loop;
+		}
+
+		/**
+		* The key that was used to get the audio from the AudioLibrary.
+		* @property key
+		* @type string
+		* @public
+		*/
+		public key: string;
+
+		/**
+		* The property containing the file information about the audio.
+		* @property _file
+		* @type File
+		* @private
+		*/
+		private _file: Kiwi.Files.File;
+
+		/**
+		* This is the piece of audio that either method will use to play audio. E.g.
+		* In the case of the Web Audio API this is the sound buffer source, in which the audio plays from. 
+		* In the case of Audio Tags this is the Audio Tag itself.
+		* @property _sound
+		* @type Any
+		* @private
+		*/
+		private _sound: any;
+
+		/**
+		* A boolean that controls/knows if the audio is ready to be played or not.
+		* This is just an indicator of if the file has been retrieved successfully from the file store or not.
+		* @property ready
+		* @type boolean
+		* @public
+		*/
+		public ready: boolean;
+
+		/**
+		* The total duration of the audio in seconds.
+		* @property totalDuration
+		* @type number
+		* @public
+		*/
+		public totalDuration: number = 0;
+
+		/**
+		* The current duration of the section of audio that is being played. In milliseconds.
+		* @property duration
+		* @type number
+		* @public
+		*/
+		public duration: number;
+
+		/**
+		* Web Audio API ONLY - The audio buffer that is to be used when playing audio segments.
+		* @property _buffer
+		* @type any
+		* @private
+		*/
+		private _buffer:any = null;
+
+		/**
+		* Web Audio API ONLY - A boolean to indicate if the audio has been decoded or not yet. If not you will need to run the decode() method.
+		* @property _decoded
+		* @type boolean
+		* @default false
+		* @private
+		*/
+		private _decoded: boolean = false;
+
+		/**
+		* A private property that holds the volume before the sound was muted. Used so that when unmuted the sound will resume at its old spot.
+		* @property _muteVolume
+		* @type number
+		* @private
+		*/
+		private _muteVolume: number;
+
+		/**
+		* Indicates whether or not the sound is currently playing.
+		* @property isPlaying
+		* @type boolean
+		* @default false
+		* @public
+		*/
+		public isPlaying: boolean;
+
+		/**
+		* A indicator of if the sound is currently paused.
+		* @property paused
+		* @type boolean
+		* @default false
+		* @public
+		*/
+		public paused: boolean;
+
+		/**
+		* If the sound needs to be played but we are waiting on particular condition.
+		* In the case of CocoonJS, we generally are waiting for the audio 'length' property to have a value.
+		* @property _pending
+		* @type boolean
+		* @private 
+		*/
+		private _pending: boolean;
+
+		/**
+		* When the audio started playing. In milliseconds
+		* @property _startTime
+		* @type number
+		* @private 
+		*/
+		private _startTime: number;
+
+		/**
+		* When the audio is playing, this is the current time we are at with it playing. In milliseconds
+		* @property _currentTime
+		* @type number
+		* @private
+		*/
+		private _currentTime: number;
+
+		/**
+		* The time at which the audio should stop playing. In milliseconds. This is assuming that the audio is not on loop.
+		* @property _stopTime
+		* @type number
+		* @private
+		*/
+		private _stopTime: number;
+
+		/**
+		* An array of all of the markers that are on this piece of audio. 
+		* @property _markers
+		* @type Array
+		* @private
+		*/
+		private _markers: any = [];
+
+		/**
+		* The current marker that is being used.
+		* @property _currentMarker
+		* @type String
+		* @default 'default'
+		* @private
+		*/
+		private _currentMarker: string = 'default';
+
+		/**
+		* A Kiwi Signal that dispatches a event when the audio starts playing.
+		* @property onPlay
+		* @type Kiwi.Signal
+		* @public
+		*/
+		public onPlay: Kiwi.Signal;
+
+		/**
+		* A Kiwi Signal that dispatches a event when the audio stops playing.
+		* @property onStop
+		* @type Kiwi.Signal
+		* @public
+		*/
+		public onStop: Kiwi.Signal;
+
+		/**
+		* A Kiwi Signal that dispatches a event when the audio gets paused.
+		* @property onPause
+		* @type Kiwi.Signal
+		* @public
+		*/
+		public onPause: Kiwi.Signal;
+
+		/**
+		* A Kiwi Signal that dispatches a event when the audio resumes.
+		* @property onResume
+		* @type Kiwi.Signal
+		* @public
+		*/
+		public onResume: Kiwi.Signal;
+
+		/**
+		* A Kiwi Signal that dispatches a event when the audio finishes and starts again, due to it looping.
+		* @property onLoop
+		* @type Kiwi.Signal
+		* @public
+		*/
+		public onLoop: Kiwi.Signal;
+
+		/**
+		* A Kiwi Signal that dispatches a event when the audio gets muted.
+		* @property onMute
+		* @type Kiwi.Signal
+		* @public
+		*/
+		public onMute: Kiwi.Signal;
+
+		/**
+		* Retrieves the audio data from the file store.
+		* @method _setAudio
+		* @private
+		*/
+		private _setAudio() {
+
+			this._file = this._game.fileStore.getFile(this.key);
+			
+			//Does the data actually exist?
+			if (typeof this._file.data == "undefined") return;
+
+			//force the browser to play it at least for a little bit
+			if (this._usingAudioTag) {
+				//clone the audio node
+				this._sound = this._file.data.cloneNode(true);
+
+				if (this._game.deviceTargetOption == Kiwi.TARGET_BROWSER) { //Tells the browser to play the piece of audio
+					this._sound.play();
+					this._sound.pause();
+				}
+			} else {
+
+				this._sound = this._file.data;
+			}
+
+			this.ready = true;
+
+		}
+
+		/**
+		* Decodes the audio data to make it playable. By default the audio should already have been decoded when it was loaded.
+		* 
+		* @method _decode
+		* @private
+		*/
+		private _decode() {
+			//You only decode when using the web audio api, when the audio has loaded and if it hasn't been decoded already
+			if (this.ready == false || this._usingAudioTag) return;
+
+			//has the 
+			if (this._file.data.decoded === true && this._file.data.buffer !== null) {
+				this._buffer = this._file.data.buffer;
+				this._decoded = true;
+				return;
+			}
+
+			var that = this;
+			this.context.decodeAudioData(this._file.data.raw, function (buffer) {
+				that._buffer = buffer;
+				that._decoded = true;
+			});
+
+		}
+
+		/**
+		* Used to control the current volume for this sound. 0 is silent, 1 is full volume.
+		* 
+		* @property volume
+		* @type number
+		* @public
+		*/
+		public set volume(val: number) {
+
+			if (this._game.audio.noAudio || this.ready === false) return;
+
+			val = Kiwi.Utils.GameMath.clamp(val, 1, 0);
+
+			this._volume = val;
+
+			if (this._muted) {
+				this._muteVolume = this._volume;
+			}
+
+			if (this._playable) {
+				if (this._usingWebAudio) {
+					this.gainNode.gain.value = this._volume * this._game.audio.volume;            //this may need to change....
+
+				} else if (this._usingAudioTag) {
+					this._sound.volume = this._volume * this._game.audio.volume;
+				}
+			}
+		}
+		public get volume(): number {
+
+			return this._volume;
+
+		}
+
+		/**
+		* Mutes the sound and makes it 'silent'. 
+		* This will not stop the sound from playing, or events from being dispatched due when the sound has finished/is looping.
+		*
+		* @property mute
+		* @type boolean
+		* @public
+		*/
+		public set mute(val: boolean) {
+
+			if (this._game.audio.noAudio) return;
+
+			if (val !== undefined && this._muted !== val) {
+				if (val === true) {
+					this._muteVolume = this._volume;
+					this.volume = 0;
+					this._muted = true;
+				} else {
+					this._muted = false;
+					this.volume = this._muteVolume;
+				}
+				this.onMute.dispatch(this._muted);
+			}
+		}
+		public get mute(): boolean {
+
+			return this._muted;
+
+		}
+
+		/**
+		* Adds a new marker to the audio which will then allow for that section of audio to be played.
+		* 
+		* @method addMarker
+		* @param name {string} The name of the marker that you are adding.
+		* @param start {number} The starting point of the audio. In seconds.
+		* @param stop {number} The stopping point of the audio. In seconds.
+		* @param [loop=false] {boolean} If the marker's pieve of audio should loop or not.
+		* @public 
+		*/
+		public addMarker(name: string, start: number, stop: number, loop: boolean = false) {
+			this._markers[name] = { start: start, stop: stop, duration: stop - start, loop: loop };
+		}
+
+		/**
+		* Removes a currently existing marker from this audio.
+		*
+		* @method removeMarker
+		* @param name {String} name of the audio that you want to remove.
+		* @public
+		*/
+		public removeMarker(name: string) {
+			if (name === 'default') return; //cannot delete the default
+
+			if (this.isPlaying && this._currentMarker == name) {
+				this.stop();    
+				this._currentMarker = 'default';
+			}
+			delete this._markers[name];
+		}
+
+
+		/**
+		* Plays the current sound/audio from the start.
+		*
+		* @method play
+		* @param [marker] {string} The marker that is to be played. If no marker is specified then it will play the current marker (which would be the whole audio piece if no marker was ever added).
+		* @param [forceRestart=false] {boolean} Force the audio to stop and start again. Otherwise if the audio was already playing it would ignore the play.
+		* @public
+		*/
+		public play(marker: string= this._currentMarker, forceRestart: boolean = false) {
+
+			if (this.isPlaying && !forceRestart || this._game.audio.noAudio) return;
+
+			if (forceRestart  && !this._pending ) this.stop();
+
+			if (typeof this._markers[marker] == "undefined") return;
+
+			//If its the current marker that is playing and shouldn't force restart then stop
+			if(this._currentMarker === marker && this.isPlaying && forceRestart == false) return;
+			
+			this.paused = false;
+			this._currentMarker = marker; 
+			this.duration = this._markers[this._currentMarker].duration * 1000;
+			this._loop = this._markers[this._currentMarker].loop;
+
+			if (this._playable === false) {
+				this._pending = true;
+				return;
+			}
+
+			if (this._usingWebAudio) {
+				if (this._decoded === true) {
+
+					if (this._buffer == null) this._buffer = this._file.data.buffer;
+
+					this._sound = this.context.createBufferSource();
+					this._sound.buffer = this._buffer;
+					this._sound.connect(this.gainNode);
+					this.totalDuration = this._sound.buffer.duration;
+
+					if (this.duration == 0) this.duration = this.totalDuration * 1000;
+
+					if (this._loop) this._sound.loop = true;
+
+					//start
+					if (this._sound.start === undefined) {
+						this._sound.noteGrainOn(0, this._markers[this._currentMarker].start, this.duration / 1000);
+					} else {
+						this._sound.start(0, this._markers[this._currentMarker].start, this.duration / 1000);
+					}
+
+					this.isPlaying = true;
+					this._startTime = this._game.time.now();
+					this._currentTime = 0;
+					this._stopTime = this._startTime + this.duration;
+					this.onPlay.dispatch();
+
+				} else {
+					this._pending = true;
+					this._decode();
+				}
+
+			} else if (this._usingAudioTag) {
+
+				if (this._sound && this._sound.readyState == 4 || this._game.deviceTargetOption == Kiwi.TARGET_COCOON) {
+
+					if (this.duration == 0 || isNaN(this.duration)) this.duration = this.totalDuration * 1000;
+
+					if (this._muted) this._sound.volume = 0;
+					else this._sound.volume = this._volume;
+
+					this._sound.currentTime = this._markers[this._currentMarker].start;
+					this._sound.play();
+					this.isPlaying = true;
+					this._startTime = this._game.time.now();
+					this._currentTime = 0;
+					this._stopTime = this._startTime + this.duration;
+
+					if (!this.paused) this.onPlay.dispatch();
+				} else {
+					this._pending = true;
+				}
+			}
+		}
+
+		/**
+		* Stop the sound from playing.
+		* @method stop
+		* @public
+		*/
+		public stop() {
+
+			if (this.isPlaying && this._sound) {
+				if (this._usingWebAudio) {
+
+					if (this._sound.stop === undefined) {
+						this._sound.noteOff(0);
+					} else {
+						this._sound.stop(0);
+					}
+
+				} else if (this._usingAudioTag) {
+					this._sound.pause();
+					this._sound.currentTime = 0;
+				}
+
+				this.isPlaying = false;
+
+				if(this.paused == false) this.onStop.dispatch();
+			}
+
+		}
+
+		/**
+		* Pauses the sound so that you can resume it from at point to paused it at.
+		* @method pause
+		* @public
+		*/
+		public pause() {
+			if (this.isPlaying) {
+				this.paused = true;
+				this.stop();
+				this.onPause.dispatch();
+			}
+		}
+		
+		/**
+		* Plays the sound from when you paused the sound.
+		* @method resume
+		* @public
+		*/
+		public resume() {
+
+			if (this.paused && this.isPlaying == false) {
+				if (this._usingWebAudio) {
+					
+					if (this._buffer == null) this._buffer = this._file.data.buffer;
+
+					this._sound = this.context.createBufferSource();
+					this._sound.buffer = this._buffer;
+					this._sound.connect(this.gainNode);
+
+					if (this._loop) this._sound.loop = true;
+
+					if (this._sound.start === undefined) {
+						this._sound.noteGrainOn(0, this._markers[this._currentMarker].start + (this._currentTime / 1000), this.duration / 1000);
+					} else {
+						this._sound.start(0, this._markers[this._currentMarker].start + (this._currentTime / 1000), this.duration / 1000);
+					}
+
+				} else {
+					this._sound.currentTime = this._markers[this._currentMarker].start + this._currentTime / 1000;
+					this._sound.play();
+				}
+
+				this.paused = false;
+				this.isPlaying = true;
+				this.onResume.dispatch();
+
+			}
+
+		}
+
+		/**
+		* The update loop that gets executed every frame. 
+		* @method update
+		* @public
+		*/
+		public update() {
+			//Check to see that the audio is ready
+			if (!this.ready) return;
+
+			//Is the audio ready to be played and was waiting?
+			if (this._playable && this._pending) {
+
+
+				//Is it the using the Web Audio API (can tell otherwise the audio would not be decoding otherwise) and it is now ready to be played?
+				if (this._decoded === true || this._file.data && this._file.data.decoded) { //Most likely unneeded now due to the fact that audio is decoded at load.
+					this._pending = false;
+					this.play();
+
+				//If we are using Audio tags and the audio is pending then that must be because we are waiting for the audio to load.
+					// Also the work around for CocoonJS
+				} else if (this._usingAudioTag && !isNaN(this._sound.duration) || this._game.deviceTargetOption == Kiwi.TARGET_COCOON && this._sound.duration !== 0) {
+					this.totalDuration = this._sound.duration;
+					this._markers['default'].duration = this.totalDuration;
+					this._pending = false;      //again shouldn't need once audio tag loader works.
+
+					if(this.isPlaying && this._currentMarker == 'default') this.duration = this.totalDuration;
+				}
+			}
+
+			//if the audio is playing
+			if (this.isPlaying) {
+
+				this._currentTime = this._game.time.now() - this._startTime;
+				
+				if (this._currentTime >= this.duration) {
+					if (this._usingWebAudio) {
+
+						if (this._loop) {
+
+							if (this._currentMarker == 'default') {
+								this._currentTime = 0;
+								this._startTime = this._game.time.now();
+							} else {
+								this.play(this._currentMarker, true);
+							}
+
+							this.onLoop.dispatch();
+						} else {
+							this.stop();
+						}
+
+					} else if(this._usingAudioTag) {
+
+						if (this._loop) {
+
+							this.play(this._currentMarker, true);
+							this.onLoop.dispatch();
+						} else {
+							this.stop();
+						}
+
+					}
+				}
+			}
+
+		}
+
+		/**
+		* This method handles the destruction of all of the properties when this audio is not longer needed. 
+		* You call this method when you want this method to be removed on the next garbage collection cycle.
+		*
+		* @method destroy
+		* @public
+		*/
+		public destroy() {
+			if (this._game) {
+				this._game.audio.remove(this, false);
+			}
+			if (this.onLoop) this.onLoop.dispose();
+			if (this.onStop) this.onStop.dispose();
+			if (this.onPlay) this.onPlay.dispose();
+			if (this.onMute) this.onMute.dispose();
+			if (this.onPause) this.onPause.dispose();
+			if (this.onResume) this.onResume.dispose();
+			
+			delete this.onLoop;
+			delete this.onStop;
+			delete this.onPause;
+			delete this.onMute;
+			delete this.onPlay;
+			delete this.onResume;
+			delete this._game;
+			delete this._sound;
+			delete this._currentTime;
+			delete this._startTime;
+			delete this._stopTime;
+			delete this._pending;
+			delete this.masterGainNode;
+			delete this.gainNode;
+			delete this.totalDuration;
+			delete this.duration;
+			delete this._file;
+			delete this._buffer;
+			delete this._decoded;
+		}
+
+	}
+
+}
diff --git a/src/sound/AudioLibrary.ts b/src/sound/AudioLibrary.ts
index 6f3175c..9b2f825 100644
--- a/src/sound/AudioLibrary.ts
+++ b/src/sound/AudioLibrary.ts
@@ -3,108 +3,105 @@
 * @module Kiwi
 * @submodule Sound
 * 
-*/ 
+*/
 
 module Kiwi.Sound {
 
-    /**
-    * Holds a reference to all of the Audio Files (mp3, ogg, e.t.c) that are accessible on the State that this AudioLibrary is on.
-    * 
-    * @class AudioLibrary
-    * @constructor
-    * @namespace Kiwi.Sound
-    * @param game {Kiwi.Game} The game that this audio library is a member of.
-    * @return {Kiwi.Sound.AudioLibrary}
-    */
-    export class AudioLibrary {
-         
-        constructor(game: Kiwi.Game) {
-
-            this._game = game;
-            this.audio = {};
-        }
-
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} "AudioLibrary"
-        * @public
-        */
-        public objType(): string {
-            return "AudioLibrary";
-        }
-
-        /**
-        * The game that the AudioLibrary belongs to.
-        * @property _game
-        * @type Kiwi.Game
-        * @private
-        */
-        private _game: Kiwi.Game;
-
-        /**
-        * Contains all of the audio files that are available.
-        * @property audio
-        * @type Object
-        * @public
-        */
-        public audio;
-
-        /**
-        * Resets the audio library.
-        * @method clear
-        * @public
-        */
-        public clear() {
-            for (var prop in this.audio) {
-                delete this.audio[prop];
-            }
-        }
-
-
-        /**
-        * Rebuild the library from a fileStore. Clears the library and repopulates it.
-        * @method rebuild
-        * @param {Kiwi.Files.FileStore} fileStore
-        * @param {Kiwi.State} state
-        * @public
-        */
-        public rebuild(fileStore:Kiwi.Files.FileStore,state:Kiwi.State) {
-            this.clear();
-            Kiwi.Log.log("Kiwi.AudioLibrary: Rebuilding Audio Library.", '#audio', '#rebuild');
-
-            var fileStoreKeys = fileStore.keys;
-            for (var i = 0; i < fileStoreKeys.length; i++) {
-                var file: Kiwi.Files.File = this._game.fileStore.getFile(fileStoreKeys[i]);
-                if (file.isAudio) {
-                    Kiwi.Log.log("  Kiwi.AudioLibrary: Adding Audio: " + file.name, '#audio', '#added');
-                    state.audioLibrary.add(file);
-                } 
-            }        
-        }
-
-        /**
-        * Adds a new audio file to the audio library.
-        * @method add
-        * @param {Kiwi.Files.File} audioFile
-        * @public
-        */
-        public add(audioFile: Kiwi.Files.File) {
-
-            switch (audioFile.dataType) {
-                case Kiwi.Files.File.AUDIO:
-                    this.audio[audioFile.key] = audioFile;
-                    break;
-               
-                default:
-                    //Audio file is of unknown type and was not added to audio library
-                    break;
-            }
-
-        }
-
-       
-    }
+	/**
+	* Holds a reference to all of the Audio Files (mp3, ogg, e.t.c) that are accessible on the State that this AudioLibrary is on.
+	* 
+	* @class AudioLibrary
+	* @constructor
+	* @namespace Kiwi.Sound
+	* @param game {Kiwi.Game} The game that this audio library is a member of.
+	* @return {Kiwi.Sound.AudioLibrary}
+	*/
+	export class AudioLibrary {
+
+		constructor(game: Kiwi.Game) {
+
+			this._game = game;
+			this.audio = {};
+		}
+
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} "AudioLibrary"
+		* @public
+		*/
+		public objType(): string {
+			return "AudioLibrary";
+		}
+
+		/**
+		* The game that the AudioLibrary belongs to.
+		* @property _game
+		* @type Kiwi.Game
+		* @private
+		*/
+		private _game: Kiwi.Game;
+
+		/**
+		* Contains all of the audio files that are available.
+		* @property audio
+		* @type Object
+		* @public
+		*/
+		public audio;
+
+		/**
+		* Resets the audio library.
+		* @method clear
+		* @public
+		*/
+		public clear() {
+			for (var prop in this.audio) {
+				delete this.audio[prop];
+			}
+		}
+
+
+		/**
+		* Rebuild the library from a fileStore. Clears the library and repopulates it.
+		* @method rebuild
+		* @param {Kiwi.Files.FileStore} fileStore
+		* @param {Kiwi.State} state
+		* @public
+		*/
+		public rebuild(fileStore:Kiwi.Files.FileStore,state:Kiwi.State) {
+			this.clear();
+			Kiwi.Log.log("Kiwi.AudioLibrary: Rebuilding Audio Library.", '#audio', '#rebuild');
+
+			var fileStoreKeys = fileStore.keys;
+			for (var i = 0; i < fileStoreKeys.length; i++) {
+				var file: Kiwi.Files.File = this._game.fileStore.getFile(fileStoreKeys[i]);
+				if (file.isAudio) {
+					Kiwi.Log.log("  Kiwi.AudioLibrary: Adding Audio: " + file.name, '#audio', '#added');
+					state.audioLibrary.add(file);
+				}
+			}
+		}
+
+		/**
+		* Adds a new audio file to the audio library.
+		* @method add
+		* @param {Kiwi.Files.File} audioFile
+		* @public
+		*/
+		public add(audioFile: Kiwi.Files.File) {
+
+			switch (audioFile.dataType) {
+				case Kiwi.Files.File.AUDIO:
+					this.audio[audioFile.key] = audioFile;
+					break;
+				default:
+					//Audio file is of unknown type and was not added to audio library
+					break;
+			}
+
+		}
+
+	}
 
 }
-
diff --git a/src/sound/AudioManager.ts b/src/sound/AudioManager.ts
index a183062..d857652 100644
--- a/src/sound/AudioManager.ts
+++ b/src/sound/AudioManager.ts
@@ -5,498 +5,500 @@
 * @submodule Sound
 * @main Sound 
 * 
-*/ 
+*/
 
 module Kiwi.Sound {
 
-    /**
-    * Manages the initialisation of assets necessary when dealing with audio in the game, either through Audio Tags or the Web Audio API. 
-    * Also provides global sound controls that will be applyed to all Audio objects at the same time, within the Game this manager is a part of. 
-    * 
-    * @class AudioManager
-    * @constructor
-    * @namespace Kiwi.Sound
-    * @param game {Kiwi.Game} The game that this audio manager belongs to.
-    * @return {Kiwi.Sound.AudioManager}
-    */
-    export class AudioManager {
-         
-        constructor(game: Kiwi.Game) {
-            
-            this._game = game;
-
-        }
-
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} "AudioManager"
-        * @public
-        */
-        public objType() {
-            return "AudioManager";
-        }
-
-        /**
-        * The game that this manager belongs to.
-        * @property _game
-        * @type Kiwi.Game
-        * @private
-        */
-        private _game: Kiwi.Game;
-        
-        /**
-        * The global volume of all of the games audio.
-        * @property _volume
-        * @type number
-        * @default 1
-        * @private
-        */
-        private _volume: number;
-
-        /**
-        * A boolean that controls whether the whole games audio should be muted or not.
-        * @property _muted
-        * @type boolean
-        * @default false
-        * @private
-        */
-        private _muted: boolean;
-
-        /**
-        * An array containing all of the sounds on the game.
-        * @property _sounds
-        * @type Array
-        * @private
-        */
-        private _sounds: any;
-        
-        /**
-        * The number of channels that are supported.
-        * Not in much use at this point in time.
-        * @property channels
-        * @type number
-        * @public
-        */
-        public channels: number;
-
-        /**
-        * If the current game has audio support or not.
-        * Useful because audio support is spotty in mobile browsers.
-        * @property noAudio
-        * @type boolean
-        * @public
-        */
-        public noAudio: boolean = false;
-
-        /**
-        * If the game is currently using the Web Audio API for the sound.
-        * @property usingWebAudio
-        * @type boolean
-        * @public
-        */
-        public usingWebAudio: boolean = false;
-
-        /**
-        * If the game is using audio tags for the sound. This is the fallback if the web audio api is not supported. 
-        * @property usingAudioTag
-        * @type boolean
-        * @public
-        */
-        public usingAudioTag: boolean = false;
-
-        /**
-        * Web Audio API ONLY - The audio context that is used for decoding audio, e.t.c. 
-        * @property context
-        * @type any
-        * @public
-        */
-        public context: any = null;
-
-        /**
-        * Web Audio API ONLY - The master gain node through which all sounds play.
-        * @property masterGain
-        * @type any
-        * @public
-        */
-        public masterGain: any = null;
-
-        /**
-        * The volume of the audio before it was muted. This is used so that when the audio is unmuted the volume will resume at this point.
-        * @property _muteVolume
-        * @type number
-        * @private
-        */
-        private _muteVolume: number;
-        
-        /**
-        * Indicates if the sounds is currently 'locked' or not. 
-        * If it is 'locked' then no audio can play until a user touch's the device.  
-        * @property _locked
-        * @type boolean
-        * @private
-        */
-        private _locked: boolean;
-        private _unlockedSource: any = null;
-        
-        /**
-        * Returns a boolean indicating whether the device has been touched or not. READ ONLY.
-        * @property locked
-        * @type boolean
-        * @public
-        */
-        public get locked():boolean {
-            return this._locked;
-        }
-
-        /**
-        * The boot method is executed when all of the DOM elements needed for the game are loaded and the game is ready to 'start' up.
-        *
-        * @method boot
-        * @public
-        */
-        public boot() {
-            
-            this._volume = 1;
-            this._muted = false;
-            this._sounds = [];
-
-            //check to see if it is an iOS device and if it doesn't support webAudio
-            if (Kiwi.DEVICE.iOS && Kiwi.DEVICE.webaudio == false) {
-                this.channels = 1;
-            }
-
-            //Add mouse event here to 'unlock' the device.
-            if (Kiwi.DEVICE.iOS && this._game.deviceTargetOption !== Kiwi.TARGET_COCOON) {
-                this._locked = true;
-                this._game.input.onUp.addOnce(this._unlocked, this);
-                
-                Kiwi.Log.log('Kiwi.AudioManager: Audio is currently Locked until at touch event.', '#audio', '#locked');
-            } else {
-                this._locked = false;
-            }
-
-            this.usingWebAudio = true;  //we hope for the best....
-            this.usingAudioTag = false;
-
-            if (!!window['AudioContext']) {//if audio context is supported
-                this.context = new window['AudioContext']();
-            }
-            else if (!!window['webkitAudioContext']) {//if webkit audio context is supported
-                this.context = new window['webkitAudioContext']();
-            }
-            else if (!!window['Audio']) {//no awesome audio support...so maybe the audio tags?
-                this.usingWebAudio = false;
-                this.usingAudioTag = true;
-            }
-            else {//they have no audio support........no sound for you :(
-                this.usingWebAudio = false;
-                this.noAudio = true; //prepared for the worst :(
-            }
-
-            if (this.context !== null) {
-
-                if (this.context.createGain === undefined) {
-                    this.masterGain = this.context.createGainNode();
-                } else {
-                    this.masterGain = this.context.createGain();
-                }
-
-                this.masterGain.gain.value = 1;
-                this.masterGain.connect(this.context.destination);
-            }
-        
-        }
-
-        /**
-        * Is executed when a mouse event is fired on the device. This is used to enabled playback of sounds on the current device if they were awaiting for a user event.
-        * @method _unlocked
-        * @private
-        */
-        private _unlocked() {
-            Kiwi.Log.log('Kiwi.AudioManager: Audio now Unlocked.', '#audio', '#unlocked');
-
-            if (this.usingAudioTag) {
-                this._locked = false;
-                for (var i = 0; i < this._sounds.length; i++) {
-                    this._sounds[i].playable = true;
-                }
-            } else {
-                // Create empty buffer and play it
-                var buffer = this.context.createBuffer(1, 1, 22050);
-                this._unlockedSource = this.context.createBufferSource();
-                this._unlockedSource.buffer = buffer;
-                this._unlockedSource.connect(this.context.destination);
-                this._unlockedSource.noteOn(0);
-            }
-        }
-
-        /**
-        * Used to mute the audio on the device, or to check to see if the device is muted.
-        * This will not stop audio from being played, will just mean that the audio is silent.
-        * 
-        * @property mute
-        * @type boolean
-        * @default false
-        * @public
-        */
-        public set mute(value: boolean) {
-            
-            if (value === true) {
-                if (this._muted) return;
-                this._muted = true;
-
-                //mute the sounds 
-                if (this.usingWebAudio) {
-                    this._muteVolume = this.masterGain.gain.value;
-                    this.masterGain.gain.value = 0;
-
-                } else if (this.usingAudioTag) {
-                    for (var i = 0; i < this._sounds.length; i++) {
-                        this._sounds[i].mute = true;
-                    }
-                }
-
-            } else {
-                if (this._muted == false) return;
-                this._muted = false;
-
-                if (this.usingWebAudio) {
-                    this.masterGain.gain.value = this._muteVolume;
-
-                } else if (this.usingAudioTag) {
-                    for (var i = 0; i < this._sounds.length; i++) {
-                        this._sounds[i].mute = false;
-                    }
-                }
-            }
-        
-        }
-
-        public get mute(): boolean {
-            return this._muted;
-            
-        }
-
-        /**
-        * Global setting and getting of the volume.
-        * A number between 0 (silence) and 1 (full volume).
-        *
-        * @property volume
-        * @type number  
-        * @default 1
-        * @public
-        */
-        public set volume(value: number) {
-            
-            if (value !== undefined) {
-
-                value = Kiwi.Utils.GameMath.clamp(value, 1, 0);
-                this._volume = value;
-
-                if (this._muted) {
-                    this._muteVolume = this._volume;
-                }
-
-                if (this.usingWebAudio) {
-                    this.masterGain.gain.value = value;
-
-                } else if (this.usingAudioTag) {
-                    for (var i = 0; i < this._sounds.length; i++) {
-                        //for each sound tag to update.
-                        this._sounds[i].volume = this._sounds[i].volume;
-                    }
-                }
-
-            }
-        }
-        public get volume(): number {
-
-            return this._volume;
-
-        }
-
-        /**
-        * Indicates whether or not an Audio Object is registered with this Audio Manager or not. For Kiwi Internal use only.
-        * @method isRegistered
-        * @param sound {Audio} The Audio object you are checking for.
-        * @return {Boolean} If the piece of audio is registered or not.
-        * @public
-        */
-        public isRegistered(sound: Kiwi.Sound.Audio):boolean {
-            if (this.noAudio) return; 
-
-            if (this._sounds.indexOf(sound) !== -1) {
-                return true;
-            } else {
-                return false;
-            }
-        }
-
-        /**
-        * Registers an Audio Object with this audio manager. Also assign's the audio piece a unique ID to identify it by. Internal Kiwi use only.
-        * @method registerSound
-        * @param sound {Audio} The audio piece you are wanting to register. 
-        * @return { Boolean } Indication of if the sound was successfully added or not.
-        * @public
-        */
-        public registerSound(sound:Kiwi.Sound.Audio):boolean {
-            if (this.isRegistered(sound) === false) {
-                sound.id = this._game.rnd.uuid();
-                this._sounds.push(sound);
-                return true;
-            }
-            return false;
-        }
-
-        /**
-        * Used to create a new sound on the audio manager. Returns the newly created sound.
-        * 
-        * @method add
-        * @param key {string} The key for the audio file that is to be loaded from the AudioLibrary.
-        * @param [volume=1] {number} The volume for the piece of audio.
-        * @param [loop=false] {boolean} If the audio should keep repeat when it gets to the end.
-        * @return {Kiwi.Sound.Audio}
-        * @public
-        */
-        public add(key: string, volume: number = 1, loop: boolean = false): Kiwi.Sound.Audio {//rename to create
-            
-            if (this.noAudio) return;
-
-            var sound: Kiwi.Sound.Audio = new Kiwi.Sound.Audio(this._game, key, volume, loop);
-            return sound;
-        
-        }
-
-        /**
-        * Removes the passed sound from the AudioManager.
-        * If you remove a Audio Object from the AudioManager, then that Audio Object will not have a update loop.
-        *
-        * @method remove
-        * @param sound {Kiwi.Sound.Audio} The Audio object that you want to remove.
-        * @param [destory=true] If the Audio Object should be removed or not.
-        * @public
-        */
-        public remove(sound: Kiwi.Sound.Audio, destroy:boolean=true) {
-                
-            for (var i = 0; i < this._sounds.length; i++) {
-
-                if (sound.id == this._sounds[i].id) {
-
-
-                    if (this.usingWebAudio && sound.gainNode) sound.gainNode.disconnect();
-
-                    if (destroy == true) sound.destroy();
-
-                    this._sounds.splice(i, 1);
-
-                    return;
-                }
-
-            }
-
-        }
-        
-        /**
-        * Plays all of the sounds listed in the AudioManager.
-        * @method playAll
-        * @public
-        */
-        public playAll() {
-            for (var i = 0; i < this._sounds.length; i++) {
-
-                if (this._sounds[i]) {
-                    this._sounds[i].play();
-                }
-
-            }
-        }
-    
-        /**
-        * Stops all of the sounds that are listed in the AudioManager from playing.
-        * @method stopAll
-        * @public
-        */
-        public stopAll() {
-            
-            for (var i = 0; i < this._sounds.length; i++) {
-
-                if (this._sounds[i]) {
-                    this._sounds[i].stop();
-                }
-
-            }
-        
-        }
-    
-        /**
-        * Pauses all of the sounds listed in the AudioManager.
-        * @method pauseAll
-        * @public
-        */
-        public pauseAll() {
-            
-            for (var i = 0; i < this._sounds.length; i++) {
-
-                if (this._sounds[i]) {
-                    this._sounds[i].pause();
-                }
-
-            }
-            
-        
-        }
-        
-        /**
-        * Resumes all of the sounds listed in the AudioManager. 
-        * @method resumeAll
-        * @public
-        */
-        public resumeAll() {
-            
-            for (var i = 0; i < this._sounds.length; i++) {
-
-                if (this._sounds[i]) {
-                    this._sounds[i].resume();
-                }
-
-            }
-        
-
-        }
-
-        /**
-        * The update loop that is executed every frame.
-        * @method update
-        * @public
-        */
-        public update() {
-            
-            if (this._locked) {
-
-                if (this.usingWebAudio && this._unlockedSource !== null) {
-                    if ((this._unlockedSource.playbackState === this._unlockedSource.PLAYING_STATE || this._unlockedSource.playbackState === this._unlockedSource.FINISHED_STATE))
-                    {
-                        this._locked = false;
-                        this._unlockedSource = null;
-                        for (var i = 0; i < this._sounds.length; i++) {
-                            this._sounds[i].playable = true;
-                        }
-                    }
-                }
-
-            }
-            
-            if (!this.noAudio) {
-                for (var i = 0; i < this._sounds.length; i++) {
-                    this._sounds[i].update();
-                }
-            }
-
-            
-        
-        }
-
-    }
-
-}
\ No newline at end of file
+	/**
+	* Manages the initialisation of assets necessary when dealing with audio in the game, either through Audio Tags or the Web Audio API. 
+	* Also provides global sound controls that will be applyed to all Audio objects at the same time, within the Game this manager is a part of. 
+	* 
+	* @class AudioManager
+	* @constructor
+	* @namespace Kiwi.Sound
+	* @param game {Kiwi.Game} The game that this audio manager belongs to.
+	* @return {Kiwi.Sound.AudioManager}
+	*/
+	export class AudioManager {
+
+		constructor(game: Kiwi.Game) {
+
+			this._game = game;
+
+		}
+
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} "AudioManager"
+		* @public
+		*/
+		public objType() {
+			return "AudioManager";
+		}
+
+		/**
+		* The game that this manager belongs to.
+		* @property _game
+		* @type Kiwi.Game
+		* @private
+		*/
+		private _game: Kiwi.Game;
+
+		/**
+		* The global volume of all of the games audio.
+		* @property _volume
+		* @type number
+		* @default 1
+		* @private
+		*/
+		private _volume: number;
+
+		/**
+		* A boolean that controls whether the whole games audio should be muted or not.
+		* @property _muted
+		* @type boolean
+		* @default false
+		* @private
+		*/
+		private _muted: boolean;
+
+		/**
+		* An array containing all of the sounds on the game.
+		* @property _sounds
+		* @type Array
+		* @private
+		*/
+		private _sounds: any;
+
+		/**
+		* The number of channels that are supported.
+		* Not in much use at this point in time.
+		* @property channels
+		* @type number
+		* @public
+		*/
+		public channels: number;
+
+		/**
+		* If the current game has audio support or not.
+		* Useful because audio support is spotty in mobile browsers.
+		* @property noAudio
+		* @type boolean
+		* @public
+		*/
+		public noAudio: boolean = false;
+
+		/**
+		* If the game is currently using the Web Audio API for the sound.
+		* @property usingWebAudio
+		* @type boolean
+		* @public
+		*/
+		public usingWebAudio: boolean = false;
+
+		/**
+		* If the game is using audio tags for the sound. This is the fallback if the web audio api is not supported. 
+		* @property usingAudioTag
+		* @type boolean
+		* @public
+		*/
+		public usingAudioTag: boolean = false;
+
+		/**
+		* Web Audio API ONLY - The audio context that is used for decoding audio, e.t.c. 
+		* @property context
+		* @type any
+		* @public
+		*/
+		public context: any = null;
+
+		/**
+		* Web Audio API ONLY - The master gain node through which all sounds play.
+		* @property masterGain
+		* @type any
+		* @public
+		*/
+		public masterGain: any = null;
+
+		/**
+		* The volume of the audio before it was muted. This is used so that when the audio is unmuted the volume will resume at this point.
+		* @property _muteVolume
+		* @type number
+		* @private
+		*/
+		private _muteVolume: number;
+
+		/**
+		* Indicates if the sounds is currently 'locked' or not. 
+		* If it is 'locked' then no audio can play until a user touch's the device.  
+		* @property _locked
+		* @type boolean
+		* @private
+		*/
+		private _locked: boolean;
+
+		/**
+		* Sound buffer
+		* @property _unlockedSource
+		* @type {any}
+		* @private
+		*/
+		private _unlockedSource: any = null;
+
+		/**
+		* Returns a boolean indicating whether the device has been touched or not. READ ONLY.
+		* @property locked
+		* @type boolean
+		* @public
+		*/
+		public get locked():boolean {
+			return this._locked;
+		}
+
+		/**
+		* The boot method is executed when all of the DOM elements needed for the game are loaded and the game is ready to 'start' up.
+		*
+		* @method boot
+		* @public
+		*/
+		public boot() {
+
+			this._volume = 1;
+			this._muted = false;
+			this._sounds = [];
+
+			//check to see if it is an iOS device and if it doesn't support webAudio
+			if (Kiwi.DEVICE.iOS && Kiwi.DEVICE.webaudio == false) {
+				this.channels = 1;
+			}
+
+			//Add mouse event here to 'unlock' the device.
+			if (Kiwi.DEVICE.iOS && this._game.deviceTargetOption !== Kiwi.TARGET_COCOON) {
+				this._locked = true;
+				this._game.input.onUp.addOnce(this._unlocked, this);
+				
+				Kiwi.Log.log('Kiwi.AudioManager: Audio is currently Locked until at touch event.', '#audio', '#locked');
+			} else {
+				this._locked = false;
+			}
+
+			this.usingWebAudio = true;  //we hope for the best....
+			this.usingAudioTag = false;
+
+			if (!!window['AudioContext']) {//if audio context is supported
+				this.context = new window['AudioContext']();
+			}
+			else if (!!window['webkitAudioContext']) {//if webkit audio context is supported
+				this.context = new window['webkitAudioContext']();
+			}
+			else if (!!window['Audio']) {//no awesome audio support...so maybe the audio tags?
+				this.usingWebAudio = false;
+				this.usingAudioTag = true;
+			}
+			else {//they have no audio support........no sound for you :(
+				this.usingWebAudio = false;
+				this.noAudio = true; //prepared for the worst :(
+			}
+
+			if (this.context !== null) {
+
+				if (this.context.createGain === undefined) {
+					this.masterGain = this.context.createGainNode();
+				} else {
+					this.masterGain = this.context.createGain();
+				}
+
+				this.masterGain.gain.value = 1;
+				this.masterGain.connect(this.context.destination);
+			}
+
+		}
+
+		/**
+		* Is executed when a mouse event is fired on the device. This is used to enabled playback of sounds on the current device if they were awaiting for a user event.
+		* @method _unlocked
+		* @private
+		*/
+		private _unlocked() {
+			Kiwi.Log.log('Kiwi.AudioManager: Audio now Unlocked.', '#audio', '#unlocked');
+
+			if (this.usingAudioTag) {
+				this._locked = false;
+				for (var i = 0; i < this._sounds.length; i++) {
+					this._sounds[i].playable = true;
+				}
+			} else {
+				// Create empty buffer and play it
+				var buffer = this.context.createBuffer(1, 1, 22050);
+				this._unlockedSource = this.context.createBufferSource();
+				this._unlockedSource.buffer = buffer;
+				this._unlockedSource.connect(this.context.destination);
+				this._unlockedSource.noteOn(0);
+			}
+		}
+
+		/**
+		* Used to mute the audio on the device, or to check to see if the device is muted.
+		* This will not stop audio from being played, will just mean that the audio is silent.
+		* 
+		* @property mute
+		* @type boolean
+		* @default false
+		* @public
+		*/
+		public set mute(value: boolean) {
+			
+			if (value === true) {
+				if (this._muted) return;
+				this._muted = true;
+
+				//mute the sounds 
+				if (this.usingWebAudio) {
+					this._muteVolume = this.masterGain.gain.value;
+					this.masterGain.gain.value = 0;
+
+				} else if (this.usingAudioTag) {
+					for (var i = 0; i < this._sounds.length; i++) {
+						this._sounds[i].mute = true;
+					}
+				}
+
+			} else {
+				if (this._muted == false) return;
+				this._muted = false;
+
+				if (this.usingWebAudio) {
+					this.masterGain.gain.value = this._muteVolume;
+
+				} else if (this.usingAudioTag) {
+					for (var i = 0; i < this._sounds.length; i++) {
+						this._sounds[i].mute = false;
+					}
+				}
+			}
+
+		}
+
+		public get mute(): boolean {
+			return this._muted;
+		}
+
+		/**
+		* Global setting and getting of the volume.
+		* A number between 0 (silence) and 1 (full volume).
+		*
+		* @property volume
+		* @type number  
+		* @default 1
+		* @public
+		*/
+		public set volume(value: number) {
+
+			if (value !== undefined) {
+
+				value = Kiwi.Utils.GameMath.clamp(value, 1, 0);
+				this._volume = value;
+
+				if (this._muted) {
+					this._muteVolume = this._volume;
+				}
+
+				if (this.usingWebAudio) {
+					this.masterGain.gain.value = value;
+
+				} else if (this.usingAudioTag) {
+					for (var i = 0; i < this._sounds.length; i++) {
+						//for each sound tag to update.
+						this._sounds[i].volume = this._sounds[i].volume;
+					}
+				}
+
+			}
+		}
+		public get volume(): number {
+
+			return this._volume;
+
+		}
+
+		/**
+		* Indicates whether or not an Audio Object is registered with this Audio Manager or not. For Kiwi Internal use only.
+		* @method isRegistered
+		* @param sound {Audio} The Audio object you are checking for.
+		* @return {Boolean} If the piece of audio is registered or not.
+		* @public
+		*/
+		public isRegistered(sound: Kiwi.Sound.Audio):boolean {
+			if (this.noAudio) return; 
+
+			if (this._sounds.indexOf(sound) !== -1) {
+				return true;
+			} else {
+				return false;
+			}
+		}
+
+		/**
+		* Registers an Audio Object with this audio manager. Also assign's the audio piece a unique ID to identify it by. Internal Kiwi use only.
+		* @method registerSound
+		* @param sound {Audio} The audio piece you are wanting to register. 
+		* @return { Boolean } Indication of if the sound was successfully added or not.
+		* @public
+		*/
+		public registerSound(sound:Kiwi.Sound.Audio):boolean {
+			if (this.isRegistered(sound) === false) {
+				sound.id = this._game.rnd.uuid();
+				this._sounds.push(sound);
+				return true;
+			}
+			return false;
+		}
+
+		/**
+		* Used to create a new sound on the audio manager. Returns the newly created sound.
+		* 
+		* @method add
+		* @param key {string} The key for the audio file that is to be loaded from the AudioLibrary.
+		* @param [volume=1] {number} The volume for the piece of audio.
+		* @param [loop=false] {boolean} If the audio should keep repeat when it gets to the end.
+		* @return {Kiwi.Sound.Audio}
+		* @public
+		*/
+		public add(key: string, volume: number = 1, loop: boolean = false): Kiwi.Sound.Audio {//rename to create
+
+			if (this.noAudio) return;
+
+			var sound: Kiwi.Sound.Audio = new Kiwi.Sound.Audio(this._game, key, volume, loop);
+			return sound;
+
+		}
+
+		/**
+		* Removes the passed sound from the AudioManager.
+		* If you remove a Audio Object from the AudioManager, then that Audio Object will not have a update loop.
+		*
+		* @method remove
+		* @param sound {Kiwi.Sound.Audio} The Audio object that you want to remove.
+		* @param [destory=true] If the Audio Object should be removed or not.
+		* @public
+		*/
+		public remove(sound: Kiwi.Sound.Audio, destroy:boolean=true) {
+
+			for (var i = 0; i < this._sounds.length; i++) {
+
+				if (sound.id == this._sounds[i].id) {
+
+
+					if (this.usingWebAudio && sound.gainNode) sound.gainNode.disconnect();
+
+					if (destroy == true) sound.destroy();
+
+					this._sounds.splice(i, 1);
+
+					return;
+				}
+
+			}
+
+		}
+
+		/**
+		* Plays all of the sounds listed in the AudioManager.
+		* @method playAll
+		* @public
+		*/
+		public playAll() {
+			for (var i = 0; i < this._sounds.length; i++) {
+
+				if (this._sounds[i]) {
+					this._sounds[i].play();
+				}
+
+			}
+		}
+
+		/**
+		* Stops all of the sounds that are listed in the AudioManager from playing.
+		* @method stopAll
+		* @public
+		*/
+		public stopAll() {
+
+			for (var i = 0; i < this._sounds.length; i++) {
+
+				if (this._sounds[i]) {
+					this._sounds[i].stop();
+				}
+
+			}
+
+		}
+
+		/**
+		* Pauses all of the sounds listed in the AudioManager.
+		* @method pauseAll
+		* @public
+		*/
+		public pauseAll() {
+
+			for (var i = 0; i < this._sounds.length; i++) {
+
+				if (this._sounds[i]) {
+					this._sounds[i].pause();
+				}
+
+			}
+
+		}
+
+		/**
+		* Resumes all of the sounds listed in the AudioManager. 
+		* @method resumeAll
+		* @public
+		*/
+		public resumeAll() {
+
+			for (var i = 0; i < this._sounds.length; i++) {
+
+				if (this._sounds[i]) {
+					this._sounds[i].resume();
+				}
+
+			}
+
+		}
+
+		/**
+		* The update loop that is executed every frame.
+		* @method update
+		* @public
+		*/
+		public update() {
+			
+			if (this._locked) {
+
+				if (this.usingWebAudio && this._unlockedSource !== null) {
+					if ((this._unlockedSource.playbackState === this._unlockedSource.PLAYING_STATE || this._unlockedSource.playbackState === this._unlockedSource.FINISHED_STATE))
+					{
+						this._locked = false;
+						this._unlockedSource = null;
+						for (var i = 0; i < this._sounds.length; i++) {
+							this._sounds[i].playable = true;
+						}
+					}
+				}
+
+			}
+
+			if (!this.noAudio) {
+				for (var i = 0; i < this._sounds.length; i++) {
+					this._sounds[i].update();
+				}
+			}
+
+		}
+
+	}
+
+}
diff --git a/src/system/Bootstrap.ts b/src/system/Bootstrap.ts
index 5811815..e8b1939 100644
--- a/src/system/Bootstrap.ts
+++ b/src/system/Bootstrap.ts
@@ -7,191 +7,191 @@
 
 module Kiwi.System {
 
-    /**
-    * DOM Boot and Ready functions (based on those used by jQuery)
-    * 
-    * @class Bootstrap
-    * @namespace Kiwi.System
-    *
-    */
-    export class Bootstrap {
-
-        /**
-        *
-        * @property _callback
-        * @type Any
-        * @private
-        */
-        private _callback;
-
-        /**
-        *
-        * @property _domParent
-        * @type String
-        * @private
-        */
-        private _domParent: string;
-
-        /**
-        *
-        * @property _createContainer
-        * @type boolean
-        * @private
-        */
-        private _createContainer: boolean;
-
-        /**
-        *
-        * @property isReady
-        * @type boolean
-        * @public
-        */
-        public isReady: boolean = false;
-        
-        /**
-        * The parent div in which the layers and input live
-        * @property container
-        * @type HTMLDivElement
-        * @public
-        */
-        public container:HTMLDivElement = null;
-
-        /**
-        * This div sits on-top of all layers and captures user input
-        * @property input
-        * @type HTMLDivElement
-        * @public
-        */
-
-        public input: HTMLDivElement = null;
-
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} "Bootstrap"
-        * @public
-        */
-        public objType() {
-            return "Bootstrap";
-        }
-
-        /**
-        * Called at the start of the game to check to see if the DOM is ready before we do anything requiring it
-        * @method boot
-        * @param {String} domParent 
-        * @param {Any} [callback=null]
-        * @param {boolean} [createContainer=true]
-        * @public
-        */
-        public boot(domParent: string, callback: any = null, createContainer: boolean = true) {
-
-            this._callback = callback;
-            this._domParent = domParent;
-            // if this is true a div will be created in browser
-            this._createContainer = createContainer;
-
-            // wait until DOM is loaded and call ready
-            if (document.readyState === 'complete' || document.readyState === 'interactive')
-            {
-                this.ready();
-            }
-            else
-            {
-                document.addEventListener('DOMContentLoaded', () => this.ready(), false);
-                window.addEventListener('load', () => this.ready(), false);
-            }
-
-        }
-
-        /**
-        * If the DOM is ready it fires our callback, otherwise sets a short timeout to try again
-        * @method ready
-        * @public
-        */
-        public ready() {
-
-            if (this.isReady === true)
-            {
-                return;
-            }
-
-            if (!document.body)
-            {
-                window.setTimeout(() => this.ready(), 13);
-            }
-            else
-            {
-                //document.removeEventListener('DOMContentLoaded', () => this.ready(), false);
-
-                this.isReady = true;
-
-
-                if (this._createContainer === true)
-                {
-                    //  No domParent was given so we create our own container for the game with a unique ID
-                    if (this._domParent === '')
-                    {
-                        Kiwi.Log.log('  Kiwi.Game: No DOM parent specified. Appending the game to the body.', '#dom');
-                        this.container = <HTMLDivElement> document.createElement('div');
-                        this._setupContainer( 'KiwiGame' + Date.now().toString() );
-                        document.body.appendChild(this.container);
-                    }
-                    else
-                    {
-                        
-                        if ( document.querySelector(this._domParent) )
-                        {
-                            Kiwi.Log.log("  Kiwi.Game: Game being created inside '" + this._domParent + "'.", '#dom');
-                            this.container = <HTMLDivElement> document.querySelector(this._domParent);
-                            this._setupContainer(); 
-                        }
-                        else if (document.getElementById(this._domParent))
-                        {
-                            Kiwi.Log.log("  Kiwi.Game: Game being created inside '" + this._domParent + "'.", '#dom');
-                            this.container = <HTMLDivElement> document.getElementById(this._domParent);
-                            this._setupContainer();
-                        }
-                        else
-                        {
-                            Kiwi.Log.log("  Kiwi.Game: The element '" + this._domParent + "' could not be found. Appending the game to the body.", '#dom');
-                            this.container = <HTMLDivElement> document.createElement('div');
-                            this._setupContainer(this._domParent);
-                            document.body.appendChild(this.container);
-                        }
-
-                    }
-                }
-
-                if (this._callback !== null)
-                {
-                    this._callback();
-                }
-            }
-
-        }
-
-        /**
-        * 
-        * @method _setupContainer
-        * @param {String} id
-        * @private
-        */
-        private _setupContainer(id: string = '') {
-
-            if (id) {
-                this.container.id = id;
-            }
-
-            //Set the containers width/height of the default values.
-            //If the user has change the constraints then the Stage will handle the update to the container.
-            this.container.style.width = Kiwi.Stage.DEFAULT_WIDTH + 'px';
-            this.container.style.height = Kiwi.Stage.DEFAULT_HEIGHT + 'px';
-
-            this.container.style.position = 'relative';
-            this.container.style.overflow = 'hidden';
-
-        }
-
-    }
-
-}
\ No newline at end of file
+	/**
+	* DOM Boot and Ready functions (based on those used by jQuery)
+	* 
+	* @class Bootstrap
+	* @namespace Kiwi.System
+	*
+	*/
+	export class Bootstrap {
+
+		/**
+		*
+		* @property _callback
+		* @type Any
+		* @private
+		*/
+		private _callback;
+
+		/**
+		*
+		* @property _domParent
+		* @type String
+		* @private
+		*/
+		private _domParent: string;
+
+		/**
+		*
+		* @property _createContainer
+		* @type boolean
+		* @private
+		*/
+		private _createContainer: boolean;
+
+		/**
+		*
+		* @property isReady
+		* @type boolean
+		* @public
+		*/
+		public isReady: boolean = false;
+		
+		/**
+		* The parent div in which the layers and input live
+		* @property container
+		* @type HTMLDivElement
+		* @public
+		*/
+		public container:HTMLDivElement = null;
+
+		/**
+		* This div sits on-top of all layers and captures user input
+		* @property input
+		* @type HTMLDivElement
+		* @public
+		*/
+
+		public input: HTMLDivElement = null;
+
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} "Bootstrap"
+		* @public
+		*/
+		public objType() {
+			return "Bootstrap";
+		}
+
+		/**
+		* Called at the start of the game to check to see if the DOM is ready before we do anything requiring it
+		* @method boot
+		* @param {String} domParent 
+		* @param {Any} [callback=null]
+		* @param {boolean} [createContainer=true]
+		* @public
+		*/
+		public boot(domParent: string, callback: any = null, createContainer: boolean = true) {
+
+			this._callback = callback;
+			this._domParent = domParent;
+			// if this is true a div will be created in browser
+			this._createContainer = createContainer;
+
+			// wait until DOM is loaded and call ready
+			if (document.readyState === 'complete' || document.readyState === 'interactive')
+			{
+				this.ready();
+			}
+			else
+			{
+				document.addEventListener('DOMContentLoaded', () => this.ready(), false);
+				window.addEventListener('load', () => this.ready(), false);
+			}
+
+		}
+
+		/**
+		* If the DOM is ready it fires our callback, otherwise sets a short timeout to try again
+		* @method ready
+		* @public
+		*/
+		public ready() {
+
+			if (this.isReady === true)
+			{
+				return;
+			}
+
+			if (!document.body)
+			{
+				window.setTimeout(() => this.ready(), 13);
+			}
+			else
+			{
+				//document.removeEventListener('DOMContentLoaded', () => this.ready(), false);
+
+				this.isReady = true;
+
+
+				if (this._createContainer === true)
+				{
+					//  No domParent was given so we create our own container for the game with a unique ID
+					if (this._domParent === '')
+					{
+						Kiwi.Log.log('  Kiwi.Game: No DOM parent specified. Appending the game to the body.', '#dom');
+						this.container = <HTMLDivElement> document.createElement('div');
+						this._setupContainer( 'KiwiGame' + Date.now().toString() );
+						document.body.appendChild(this.container);
+					}
+					else
+					{
+						
+						if ( document.querySelector(this._domParent) )
+						{
+							Kiwi.Log.log("  Kiwi.Game: Game being created inside '" + this._domParent + "'.", '#dom');
+							this.container = <HTMLDivElement> document.querySelector(this._domParent);
+							this._setupContainer(); 
+						}
+						else if (document.getElementById(this._domParent))
+						{
+							Kiwi.Log.log("  Kiwi.Game: Game being created inside '" + this._domParent + "'.", '#dom');
+							this.container = <HTMLDivElement> document.getElementById(this._domParent);
+							this._setupContainer();
+						}
+						else
+						{
+							Kiwi.Log.log("  Kiwi.Game: The element '" + this._domParent + "' could not be found. Appending the game to the body.", '#dom');
+							this.container = <HTMLDivElement> document.createElement('div');
+							this._setupContainer(this._domParent);
+							document.body.appendChild(this.container);
+						}
+
+					}
+				}
+
+				if (this._callback !== null)
+				{
+					this._callback();
+				}
+			}
+
+		}
+
+		/**
+		* 
+		* @method _setupContainer
+		* @param {String} id
+		* @private
+		*/
+		private _setupContainer(id: string = '') {
+
+			if (id) {
+				this.container.id = id;
+			}
+
+			//Set the containers width/height of the default values.
+			//If the user has change the constraints then the Stage will handle the update to the container.
+			this.container.style.width = Kiwi.Stage.DEFAULT_WIDTH + 'px';
+			this.container.style.height = Kiwi.Stage.DEFAULT_HEIGHT + 'px';
+
+			this.container.style.position = 'relative';
+			this.container.style.overflow = 'hidden';
+
+		}
+
+	}
+
+}
diff --git a/src/system/Device.ts b/src/system/Device.ts
index 40d45c3..1c5912d 100644
--- a/src/system/Device.ts
+++ b/src/system/Device.ts
@@ -2,626 +2,626 @@
 * Kiwi - System
 * @module Kiwi
 * @submodule System
-*/ 
+*/
 
 module Kiwi.System {
 
-    /**
-    * Detects device support capabilities. Using some elements from System.js by MrDoob and Modernizr
-    * https://github.com/Modernizr/Modernizr/blob/master/feature-detects/audio.js
-    *
-    * @class Device
-    * @constructor
-    * @namespace Kiwi.System 
-    *
-    * @author mrdoob
-    * @author Modernizr team
-    * 
-    */
-    export class Device {
-         
-        constructor() {
-
-            this._checkAudio();
-            this._checkBrowser();
-            this._checkDevice();
-            this._checkFeatures();
-            this._checkOS();
-
-        }
-
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} "Device"
-        * @public
-        */
-        public objType() {
-            return "Device";
-        }
-
-        //  Operating System
-
-        /**
-        * 
-        * @property iOS 
-        * @type boolean
-        * @public
-        */
-        public iOS: boolean = false;
-
-        /**
-        * 
-        * @property android
-        * @type boolean
-        * @public
-        */
-        public android: boolean = false;
-
-        /**
-        * 
-        * @property chromeOS
-        * @type boolean
-        * @public
-        */
-        public chromeOS: boolean = false;
-
-        /**
-        * 
-        * @property linux
-        * @type boolean
-        * @public
-        */
-        public linux: boolean = false;
-
-        /**
-        * 
-        * @property maxOS
-        * @type boolean
-        * @public
-        */
-        public macOS: boolean = false;
-
-        /**
-        * 
-        * @property windows
-        * @type boolean
-        * @public
-        */
-        public windows: boolean = false;
-
-        /**
-        * 
-        * @property windowsPhone 
-        * @type boolean
-        * @public
-        */
-        public windowsPhone: boolean = false;
-
-        //  Features
-
-        /**
-        * 
-        * @property canvas
-        * @type boolean
-        * @public
-        */
-        public canvas: boolean = false;
-
-        /**
-        * 
-        * @property file
-        * @type boolean
-        * @public
-        */
-        public file: boolean = false;
-
-        /**
-        * 
-        * @property fileSystem
-        * @type boolean
-        * @public
-        */
-        public fileSystem: boolean = false;
-
-        /**
-        * 
-        * @property localStorage
-        * @type boolean
-        * @public
-        */
-        public localStorage: boolean = false;
-
-        /**
-        * 
-        * @property webGL
-        * @type boolean
-        * @public
-        */
-        public webGL: boolean = false;
-
-        /**
-        * 
-        * @property worker
-        * @type boolean
-        * @public
-        */
-        public worker: boolean = false;
-
-        /**
-        * 
-        * @property blob
-        * @type boolean
-        * @public
-        */
-        public blob: boolean = false;
-
-
-        /**
-        * 
-        * @property touch
-        * @type boolean
-        * @public
-        */
-        public touch: boolean = false;
-
-        /**
-        * If the type of touch events are pointers (event msPointers)
-        * @property pointerEnabled
-        * @type boolean
-        * @public
-        */
-        public pointerEnabled: boolean = false;
-
-       
-        //  Browser
-
-        /**
-        * 
-        * @property arora
-        * @type boolean
-        * @public
-        */
-        public arora: boolean = false;
-
-        /**
-        * 
-        * @property chrome
-        * @type boolean
-        * @public
-        */
-        public chrome: boolean = false;
-
-        /**
-        * 
-        * @property epiphany
-        * @type boolean
-        * @public
-        */
-        public epiphany: boolean = false;
-
-        /**
-        * 
-        * @property firefox
-        * @type boolean
-        * @public
-        */
-        public firefox: boolean = false;
-
-        /**
-        * 
-        * @property ie
-        * @type boolean
-        * @public
-        */
-        public ie: boolean = false;
-
-        /**
-        * 
-        * @property ieVersion
-        * @type Number
-        * @public
-        */
-        public ieVersion: number = 0;
-
-        /**
-        *
-        * @property ieMobile
-        * @type boolean
-        * @public 
-        */
-        public ieMobile: boolean = false;
-
-        /**
-        * 
-        * @property mobileSafari
-        * @type boolean
-        * @public
-        */
-        public mobileSafari: boolean = false;
-
-        /**
-        * 
-        * @property midori
-        * @type boolean
-        * @public
-        */
-        public midori: boolean = false;
-
-        /**
-        * 
-        * @property opera
-        * @type boolean
-        * @public
-        */
-        public opera: boolean = false;
-
-        /**
-        * 
-        * @property safari
-        * @type boolean 
-        * @public
-        */
-        public safari: boolean = false;
-
-        /**
-        *
-        * @property webApp
-        * @type boolean
-        * @public
-        */
-        public webApp: boolean = false;
-
-        //  Audio
-
-        /**
-        * 
-        * @property audioData
-        * @type boolean
-        * @public
-        */
-        public audioData: boolean = false;
-
-        /**
-        * 
-        * @property webaudio
-        * @type boolean
-        * @public
-        */
-        public webaudio: boolean = false;
-
-        /**
-        * 
-        * @property ogg
-        * @type boolean
-        * @public
-        */
-        public ogg: boolean = false;
-
-        /**
-        * 
-        * @property mp3
-        * @type boolean
-        * @public
-        */
-        public mp3: boolean = false;
-
-        /**
-        * 
-        * @property wav
-        * @type boolean
-        * @public
-        */
-        public wav: boolean = false;
-
-        /**
-        * 
-        * @property m4a
-        * @type boolean
-        * @public
-        */
-        public m4a: boolean = false;
-
-        //  Device
-
-        /**
-        * 
-        * @property iPhone
-        * @type boolean
-        * @public
-        */
-        public iPhone: boolean = false;
-
-        /**
-        * 
-        * @property iPhone4
-        * @type boolean
-        * @public
-        */
-        public iPhone4: boolean = false;
-
-        /**
-        * 
-        * @property iPad
-        * @type boolean
-        * @public
-        */
-        public iPad: boolean = false;
-
-        /**
-        * 
-        * @property pixelRatio
-        * @type Number
-        * @public
-        */
-        public pixelRatio: number = 0;
-
-        /**
-        * 
-        * @method _checkOS
-        * @private
-        */
-        private _checkOS() {
-
-            var ua = navigator.userAgent;
-
-            if (/Android/.test(ua))
-            {
-                this.android = true;
-            }
-            else if (/CrOS/.test(ua))
-            {
-                this.chromeOS = true;
-            }
-            else if (/iP[ao]d|iPhone/i.test(ua))
-            {
-                this.iOS = true;
-            }
-            else if (/Linux/.test(ua))
-            {
-                this.linux = true;
-            }
-            else if (/Mac OS/.test(ua))
-            {
-                this.macOS = true;
-            }
-            else if(/Windows Phone/.test(ua)) {
-                this.windowsPhone = true;
-            }
-            else if (/Windows/.test(ua))
-            {
-                this.windows = true;
-
-            }
-
-        }
-
-        /**
-        * 
-        * @method _checkFeatures
-        * @private
-        */
-        private _checkFeatures() {
-
-            if (typeof window['Blob'] !== 'undefined') this.blob = true;
-
-            // Check availability of rendering contexts
-            this.canvas = !!window['CanvasRenderingContext2D'];
-            this.webGL = !!window['WebGLRenderingContext'];
-
-            try
-            {
-                this.localStorage = !!localStorage.getItem;
-            }
-            catch (error)
-            {
-                this.localStorage = false; 
-            }
-
-            this.file = !!window['File'] && !!window['FileReader'] && !!window['FileList'] && !!window['Blob'];
-            this.fileSystem = !!window['requestFileSystem'];
-            this.worker = !!window['Worker'];
-
-            if ('ontouchstart' in document.documentElement ||
-               (window.navigator.msPointerEnabled && window.navigator.msMaxTouchPoints > 0) ||
-               ((<any>window.navigator).pointerEnabled && (<any>window.navigator).maxTouchPoints > 0))
-            {
-                this.touch = true;
-
-            }
-
-            if ((<any>window.navigator).pointerEnabled || window.navigator.msPointerEnabled ) {
-                this.pointerEnabled = true;
-            }
-
-        }
-
-        /**
-        * 
-        * @method _checkBrowser
-        * @private
-        */
-        private _checkBrowser() {
-
-            var ua = navigator.userAgent;
-            var an = navigator.appName;
-
-            if (/Arora/.test(ua))
-            {
-                this.arora = true;
-            }
-            else if (/Chrome/.test(ua))
-            {
-                this.chrome = true;
-            }
-            else if (/Epiphany/.test(ua))
-            {
-                this.epiphany = true;
-            }
-            else if (/Firefox/.test(ua))
-            {
-                this.firefox = true;
-            }
-            else if (/Mobile Safari/.test(ua))
-            {
-                this.mobileSafari = true;
-            }
-            else if (/MSIE (\d+\.\d+);/.test(ua)) //Will Detect 10- versions of IE
-            {
-                this.ie = true;
-                this.ieVersion = parseInt(RegExp.$1);
-
-                if ( /IEMobile/.test(ua) ) {
-                    this.ieMobile = true;
-                }
-
-            }
-            else if (/Trident/.test(ua))        //Will Detect 11+ versions for IE
-            {
-                this.ie = true;
-                /rv:(\d+\.\d+)\)/.test(ua);
-                this.ieVersion = parseInt(RegExp.$1);
-            }
-            else if (/Midori/.test(ua))
-            {
-                this.midori = true;
-            }
-            else if (/Opera/.test(ua))
-            {
-                this.opera = true;
-            }
-            else if (/Safari/.test(ua))
-            {
-                this.safari = true;
-            }
+	/**
+	* Detects device support capabilities. Using some elements from System.js by MrDoob and Modernizr
+	* https://github.com/Modernizr/Modernizr/blob/master/feature-detects/audio.js
+	*
+	* @class Device
+	* @constructor
+	* @namespace Kiwi.System 
+	*
+	* @author mrdoob
+	* @author Modernizr team
+	* 
+	*/
+	export class Device {
+
+		constructor() {
+
+			this._checkAudio();
+			this._checkBrowser();
+			this._checkDevice();
+			this._checkFeatures();
+			this._checkOS();
+
+		}
+
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} "Device"
+		* @public
+		*/
+		public objType() {
+			return "Device";
+		}
+
+		//  Operating System
+
+		/**
+		* 
+		* @property iOS 
+		* @type boolean
+		* @public
+		*/
+		public iOS: boolean = false;
+
+		/**
+		* 
+		* @property android
+		* @type boolean
+		* @public
+		*/
+		public android: boolean = false;
+
+		/**
+		* 
+		* @property chromeOS
+		* @type boolean
+		* @public
+		*/
+		public chromeOS: boolean = false;
+
+		/**
+		* 
+		* @property linux
+		* @type boolean
+		* @public
+		*/
+		public linux: boolean = false;
+
+		/**
+		* 
+		* @property maxOS
+		* @type boolean
+		* @public
+		*/
+		public macOS: boolean = false;
+
+		/**
+		* 
+		* @property windows
+		* @type boolean
+		* @public
+		*/
+		public windows: boolean = false;
+
+		/**
+		* 
+		* @property windowsPhone 
+		* @type boolean
+		* @public
+		*/
+		public windowsPhone: boolean = false;
+
+		//  Features
+
+		/**
+		* 
+		* @property canvas
+		* @type boolean
+		* @public
+		*/
+		public canvas: boolean = false;
+
+		/**
+		* 
+		* @property file
+		* @type boolean
+		* @public
+		*/
+		public file: boolean = false;
+
+		/**
+		* 
+		* @property fileSystem
+		* @type boolean
+		* @public
+		*/
+		public fileSystem: boolean = false;
+
+		/**
+		* 
+		* @property localStorage
+		* @type boolean
+		* @public
+		*/
+		public localStorage: boolean = false;
+
+		/**
+		* 
+		* @property webGL
+		* @type boolean
+		* @public
+		*/
+		public webGL: boolean = false;
+
+		/**
+		* 
+		* @property worker
+		* @type boolean
+		* @public
+		*/
+		public worker: boolean = false;
+
+		/**
+		* 
+		* @property blob
+		* @type boolean
+		* @public
+		*/
+		public blob: boolean = false;
+
+
+		/**
+		* 
+		* @property touch
+		* @type boolean
+		* @public
+		*/
+		public touch: boolean = false;
+
+		/**
+		* If the type of touch events are pointers (event msPointers)
+		* @property pointerEnabled
+		* @type boolean
+		* @public
+		*/
+		public pointerEnabled: boolean = false;
+
+	   
+		//  Browser
+
+		/**
+		* 
+		* @property arora
+		* @type boolean
+		* @public
+		*/
+		public arora: boolean = false;
+
+		/**
+		* 
+		* @property chrome
+		* @type boolean
+		* @public
+		*/
+		public chrome: boolean = false;
+
+		/**
+		* 
+		* @property epiphany
+		* @type boolean
+		* @public
+		*/
+		public epiphany: boolean = false;
+
+		/**
+		* 
+		* @property firefox
+		* @type boolean
+		* @public
+		*/
+		public firefox: boolean = false;
+
+		/**
+		* 
+		* @property ie
+		* @type boolean
+		* @public
+		*/
+		public ie: boolean = false;
+
+		/**
+		* 
+		* @property ieVersion
+		* @type Number
+		* @public
+		*/
+		public ieVersion: number = 0;
+
+		/**
+		*
+		* @property ieMobile
+		* @type boolean
+		* @public 
+		*/
+		public ieMobile: boolean = false;
+
+		/**
+		* 
+		* @property mobileSafari
+		* @type boolean
+		* @public
+		*/
+		public mobileSafari: boolean = false;
+
+		/**
+		* 
+		* @property midori
+		* @type boolean
+		* @public
+		*/
+		public midori: boolean = false;
+
+		/**
+		* 
+		* @property opera
+		* @type boolean
+		* @public
+		*/
+		public opera: boolean = false;
+
+		/**
+		* 
+		* @property safari
+		* @type boolean 
+		* @public
+		*/
+		public safari: boolean = false;
+
+		/**
+		*
+		* @property webApp
+		* @type boolean
+		* @public
+		*/
+		public webApp: boolean = false;
+
+		//  Audio
+
+		/**
+		* 
+		* @property audioData
+		* @type boolean
+		* @public
+		*/
+		public audioData: boolean = false;
+
+		/**
+		* 
+		* @property webaudio
+		* @type boolean
+		* @public
+		*/
+		public webaudio: boolean = false;
+
+		/**
+		* 
+		* @property ogg
+		* @type boolean
+		* @public
+		*/
+		public ogg: boolean = false;
+
+		/**
+		* 
+		* @property mp3
+		* @type boolean
+		* @public
+		*/
+		public mp3: boolean = false;
+
+		/**
+		* 
+		* @property wav
+		* @type boolean
+		* @public
+		*/
+		public wav: boolean = false;
+
+		/**
+		* 
+		* @property m4a
+		* @type boolean
+		* @public
+		*/
+		public m4a: boolean = false;
+
+		//  Device
+
+		/**
+		* 
+		* @property iPhone
+		* @type boolean
+		* @public
+		*/
+		public iPhone: boolean = false;
+
+		/**
+		* 
+		* @property iPhone4
+		* @type boolean
+		* @public
+		*/
+		public iPhone4: boolean = false;
+
+		/**
+		* 
+		* @property iPad
+		* @type boolean
+		* @public
+		*/
+		public iPad: boolean = false;
+
+		/**
+		* 
+		* @property pixelRatio
+		* @type Number
+		* @public
+		*/
+		public pixelRatio: number = 0;
+
+		/**
+		* 
+		* @method _checkOS
+		* @private
+		*/
+		private _checkOS() {
+
+			var ua = navigator.userAgent;
+
+			if (/Android/.test(ua))
+			{
+				this.android = true;
+			}
+			else if (/CrOS/.test(ua))
+			{
+				this.chromeOS = true;
+			}
+			else if (/iP[ao]d|iPhone/i.test(ua))
+			{
+				this.iOS = true;
+			}
+			else if (/Linux/.test(ua))
+			{
+				this.linux = true;
+			}
+			else if (/Mac OS/.test(ua))
+			{
+				this.macOS = true;
+			}
+			else if(/Windows Phone/.test(ua)) {
+				this.windowsPhone = true;
+			}
+			else if (/Windows/.test(ua))
+			{
+				this.windows = true;
+
+			}
+
+		}
+
+		/**
+		* 
+		* @method _checkFeatures
+		* @private
+		*/
+		private _checkFeatures() {
+
+			if (typeof window['Blob'] !== 'undefined') this.blob = true;
+
+			// Check availability of rendering contexts
+			this.canvas = !!window['CanvasRenderingContext2D'];
+			this.webGL = !!window['WebGLRenderingContext'];
+
+			try
+			{
+				this.localStorage = !!localStorage.getItem;
+			}
+			catch (error)
+			{
+				this.localStorage = false; 
+			}
+
+			this.file = !!window['File'] && !!window['FileReader'] && !!window['FileList'] && !!window['Blob'];
+			this.fileSystem = !!window['requestFileSystem'];
+			this.worker = !!window['Worker'];
+
+			if ('ontouchstart' in document.documentElement ||
+			   (window.navigator.msPointerEnabled && window.navigator.msMaxTouchPoints > 0) ||
+			   ((<any>window.navigator).pointerEnabled && (<any>window.navigator).maxTouchPoints > 0))
+			{
+				this.touch = true;
+
+			}
+
+			if ((<any>window.navigator).pointerEnabled || window.navigator.msPointerEnabled ) {
+				this.pointerEnabled = true;
+			}
+
+		}
+
+		/**
+		* 
+		* @method _checkBrowser
+		* @private
+		*/
+		private _checkBrowser() {
+
+			var ua = navigator.userAgent;
+			var an = navigator.appName;
+
+			if (/Arora/.test(ua))
+			{
+				this.arora = true;
+			}
+			else if (/Chrome/.test(ua))
+			{
+				this.chrome = true;
+			}
+			else if (/Epiphany/.test(ua))
+			{
+				this.epiphany = true;
+			}
+			else if (/Firefox/.test(ua))
+			{
+				this.firefox = true;
+			}
+			else if (/Mobile Safari/.test(ua))
+			{
+				this.mobileSafari = true;
+			}
+			else if (/MSIE (\d+\.\d+);/.test(ua)) //Will Detect 10- versions of IE
+			{
+				this.ie = true;
+				this.ieVersion = parseInt(RegExp.$1);
+
+				if ( /IEMobile/.test(ua) ) {
+					this.ieMobile = true;
+				}
+
+			}
+			else if (/Trident/.test(ua))        //Will Detect 11+ versions for IE
+			{
+				this.ie = true;
+				/rv:(\d+\.\d+)\)/.test(ua);
+				this.ieVersion = parseInt(RegExp.$1);
+			}
+			else if (/Midori/.test(ua))
+			{
+				this.midori = true;
+			}
+			else if (/Opera/.test(ua))
+			{
+				this.opera = true;
+			}
+			else if (/Safari/.test(ua))
+			{
+				this.safari = true;
+			}
 
 			// WebApp mode in iOS
-            if (navigator['standalone'])
-            {
-                this.webApp = true;
-            }
-
-        }
-
-        /**
-        * 
-        * @method _checkAudio
-        * @private
-        */
-        private _checkAudio() {
-
-            this.audioData = !!(window['Audio']);
-            this.webaudio = !!(window['webkitAudioContext'] || window['AudioContext']);
-
-            var audioElement:HTMLAudioElement = <HTMLAudioElement> document.createElement('audio');
-            var result = false;
-
-            try
-            {
-                if (result = !!audioElement.canPlayType)
-                {
-                    if (audioElement.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/, ''))
-                    {
-                        this.ogg = true;
-                    }
-
-                    if (audioElement.canPlayType('audio/mpeg;').replace(/^no$/, ''))
-                    {
-                        this.mp3 = true;
-                    }
-
-                    // Mimetypes accepted:
-                    //   developer.mozilla.org/En/Media_formats_supported_by_the_audio_and_video_elements
-                    //   bit.ly/iphoneoscodecs
-                    if (audioElement.canPlayType('audio/wav; codecs="1"').replace(/^no$/, ''))
-                    {
-                        this.wav = true;
-                    }
-
-                    if (audioElement.canPlayType('audio/x-m4a;') || audioElement.canPlayType('audio/aac;').replace(/^no$/, ''))
-                    {
-                        this.m4a = true;
-                    }
-                }
-            } catch (e) { }
-
-        }
-
-        /**
-        * 
-        * @method _checkDevice
-        * @private
-        */
-        private _checkDevice() {
-
-            this.pixelRatio = window['devicePixelRatio'] || 1;
-            this.iPhone = navigator.userAgent.toLowerCase().indexOf('iphone') != -1;
-            this.iPhone4 = (this.pixelRatio == 2 && this.iPhone);
-            this.iPad = navigator.userAgent.toLowerCase().indexOf('ipad') != -1;
-
-        }
-
-      
-        /**
-        * 
-        * @method getAll
-        * @return {String}
-        * @public
-        */
-        public getAll(): string {
-
-            var output: string = '';
-
-            output = output.concat('Device\n');
-            output = output.concat('iPhone : ' + this.iPhone + '\n');
-            output = output.concat('iPhone4 : ' + this.iPhone4 + '\n');
-            output = output.concat('iPad : ' + this.iPad + '\n');
-
-            output = output.concat('\n');
-            output = output.concat('Operating System\n');
-            output = output.concat('iOS: ' + this.iOS + '\n');
-            output = output.concat('Android: ' + this.android + '\n');
-            output = output.concat('ChromeOS: ' + this.chromeOS + '\n');
-            output = output.concat('Linux: ' + this.linux + '\n');
-            output = output.concat('MacOS: ' + this.macOS + '\n');
-            output = output.concat('Windows: ' + this.windows + '\n');
-
-            output = output.concat('\n');
-            output = output.concat('Browser\n');
-            output = output.concat('Arora: ' + this.arora + '\n');
-            output = output.concat('Chrome: ' + this.chrome + '\n');
-            output = output.concat('Epiphany: ' + this.epiphany + '\n');
-            output = output.concat('Firefox: ' + this.firefox + '\n');
-            output = output.concat('Internet Explorer: ' + this.ie + ' (' + this.ieVersion + ')\n');
-            output = output.concat('Mobile Safari: ' + this.mobileSafari + '\n');
-            output = output.concat('Midori: ' + this.midori + '\n');
-            output = output.concat('Opera: ' + this.opera + '\n');
-            output = output.concat('Safari: ' + this.safari + '\n');
-
-            output = output.concat('\n');
-            output = output.concat('Features\n');
-            output = output.concat('Blob: ' + this.blob + '\n');
-            output = output.concat('Canvas: ' + this.canvas + '\n');
-            output = output.concat('File: ' + this.file + '\n');
-            output = output.concat('FileSystem: ' + this.fileSystem + '\n');
-            output = output.concat('LocalStorage: ' + this.localStorage + '\n');
-            output = output.concat('WebGL: ' + this.webGL + '\n');
-            output = output.concat('Worker: ' + this.worker + '\n');
-            output = output.concat('Touch: ' + this.touch + '\n');
-           
-            output = output.concat('\n');
-            output = output.concat('Audio\n');
-            output = output.concat('Audio Data: ' + this.canvas + '\n');
-            output = output.concat('Web Audio: ' + this.canvas + '\n');
-            output = output.concat('Can play OGG: ' + this.canvas + '\n');
-            output = output.concat('Can play MP3: ' + this.canvas + '\n');
-            output = output.concat('Can play M4A: ' + this.canvas + '\n');
-            output = output.concat('Can play WAV: ' + this.canvas + '\n');
-
-            return output;
-
-        }
-
-    }
-
-}
\ No newline at end of file
+			if (navigator['standalone'])
+			{
+				this.webApp = true;
+			}
+
+		}
+
+		/**
+		* 
+		* @method _checkAudio
+		* @private
+		*/
+		private _checkAudio() {
+
+			this.audioData = !!(window['Audio']);
+			this.webaudio = !!(window['webkitAudioContext'] || window['AudioContext']);
+
+			var audioElement:HTMLAudioElement = <HTMLAudioElement> document.createElement('audio');
+			var result = false;
+
+			try
+			{
+				if (result = !!audioElement.canPlayType)
+				{
+					if (audioElement.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/, ''))
+					{
+						this.ogg = true;
+					}
+
+					if (audioElement.canPlayType('audio/mpeg;').replace(/^no$/, ''))
+					{
+						this.mp3 = true;
+					}
+
+					// Mimetypes accepted:
+					//   developer.mozilla.org/En/Media_formats_supported_by_the_audio_and_video_elements
+					//   bit.ly/iphoneoscodecs
+					if (audioElement.canPlayType('audio/wav; codecs="1"').replace(/^no$/, ''))
+					{
+						this.wav = true;
+					}
+
+					if (audioElement.canPlayType('audio/x-m4a;') || audioElement.canPlayType('audio/aac;').replace(/^no$/, ''))
+					{
+						this.m4a = true;
+					}
+				}
+			} catch (e) { }
+
+		}
+
+		/**
+		* 
+		* @method _checkDevice
+		* @private
+		*/
+		private _checkDevice() {
+
+			this.pixelRatio = window['devicePixelRatio'] || 1;
+			this.iPhone = navigator.userAgent.toLowerCase().indexOf('iphone') != -1;
+			this.iPhone4 = (this.pixelRatio == 2 && this.iPhone);
+			this.iPad = navigator.userAgent.toLowerCase().indexOf('ipad') != -1;
+
+		}
+
+	  
+		/**
+		* 
+		* @method getAll
+		* @return {String}
+		* @public
+		*/
+		public getAll(): string {
+
+			var output: string = '';
+
+			output = output.concat('Device\n');
+			output = output.concat('iPhone : ' + this.iPhone + '\n');
+			output = output.concat('iPhone4 : ' + this.iPhone4 + '\n');
+			output = output.concat('iPad : ' + this.iPad + '\n');
+
+			output = output.concat('\n');
+			output = output.concat('Operating System\n');
+			output = output.concat('iOS: ' + this.iOS + '\n');
+			output = output.concat('Android: ' + this.android + '\n');
+			output = output.concat('ChromeOS: ' + this.chromeOS + '\n');
+			output = output.concat('Linux: ' + this.linux + '\n');
+			output = output.concat('MacOS: ' + this.macOS + '\n');
+			output = output.concat('Windows: ' + this.windows + '\n');
+
+			output = output.concat('\n');
+			output = output.concat('Browser\n');
+			output = output.concat('Arora: ' + this.arora + '\n');
+			output = output.concat('Chrome: ' + this.chrome + '\n');
+			output = output.concat('Epiphany: ' + this.epiphany + '\n');
+			output = output.concat('Firefox: ' + this.firefox + '\n');
+			output = output.concat('Internet Explorer: ' + this.ie + ' (' + this.ieVersion + ')\n');
+			output = output.concat('Mobile Safari: ' + this.mobileSafari + '\n');
+			output = output.concat('Midori: ' + this.midori + '\n');
+			output = output.concat('Opera: ' + this.opera + '\n');
+			output = output.concat('Safari: ' + this.safari + '\n');
+
+			output = output.concat('\n');
+			output = output.concat('Features\n');
+			output = output.concat('Blob: ' + this.blob + '\n');
+			output = output.concat('Canvas: ' + this.canvas + '\n');
+			output = output.concat('File: ' + this.file + '\n');
+			output = output.concat('FileSystem: ' + this.fileSystem + '\n');
+			output = output.concat('LocalStorage: ' + this.localStorage + '\n');
+			output = output.concat('WebGL: ' + this.webGL + '\n');
+			output = output.concat('Worker: ' + this.worker + '\n');
+			output = output.concat('Touch: ' + this.touch + '\n');
+		   
+			output = output.concat('\n');
+			output = output.concat('Audio\n');
+			output = output.concat('Audio Data: ' + this.canvas + '\n');
+			output = output.concat('Web Audio: ' + this.canvas + '\n');
+			output = output.concat('Can play OGG: ' + this.canvas + '\n');
+			output = output.concat('Can play MP3: ' + this.canvas + '\n');
+			output = output.concat('Can play M4A: ' + this.canvas + '\n');
+			output = output.concat('Can play WAV: ' + this.canvas + '\n');
+
+			return output;
+
+		}
+
+	}
+
+}
diff --git a/src/textures/SingleImage.ts b/src/textures/SingleImage.ts
index 86f8b43..4119acb 100644
--- a/src/textures/SingleImage.ts
+++ b/src/textures/SingleImage.ts
@@ -3,89 +3,88 @@
 * @module Kiwi
 * @submodule Textures
 * 
-*/ 
+*/
 
 module Kiwi.Textures  {
 
-    /**
-    * A special type of TextureAtlas that is used when the user has loaded a single image. This type of TextureAtlas contains only one cell which is generally the whole width/height of the image and starts at the coordinates 0/0. A SingleImage has a space to store sequences but this will not be used.
-    * 
-    * @class SingleImage
-    * @extends TextureAtlas
-    * @namespace Kiwi.Textures
-    * @constructor
-    * @param name {string} The name of the single image
-    * @param image {HTMLImageElement/HTMLCanvasElement} the image that is being used.
-    * @param [width] {number} the width of the image
-    * @param [height] {number} the height of the image
-    * @param [offsetX] {number} the offset of the image on the x axis. Useful if the image has a border that you don't want to show.
-    * @param [offsetY] {number} the offset of the image of the y axis. Useful if the image has a border that you don't want to show.
-    * @return {Kiwi.SingleImage}
-    */
-    export class SingleImage extends TextureAtlas {
-         
-        constructor(name: string, image, width?: number, height?: number, offsetX?: number, offsetY?: number) {
-            this.width = width || image.width;
-            this.height = height || image.height;
-            this.offsetX = offsetX || 0;
-            this.offsetY = offsetY || 0;
+	/**
+	* A special type of TextureAtlas that is used when the user has loaded a single image. This type of TextureAtlas contains only one cell which is generally the whole width/height of the image and starts at the coordinates 0/0. A SingleImage has a space to store sequences but this will not be used.
+	* 
+	* @class SingleImage
+	* @extends TextureAtlas
+	* @namespace Kiwi.Textures
+	* @constructor
+	* @param name {string} The name of the single image
+	* @param image {HTMLImageElement/HTMLCanvasElement} the image that is being used.
+	* @param [width] {number} the width of the image
+	* @param [height] {number} the height of the image
+	* @param [offsetX] {number} the offset of the image on the x axis. Useful if the image has a border that you don't want to show.
+	* @param [offsetY] {number} the offset of the image of the y axis. Useful if the image has a border that you don't want to show.
+	* @return {Kiwi.SingleImage}
+	*/
+	export class SingleImage extends TextureAtlas {
 
-            super(name, Kiwi.Textures.TextureAtlas.SINGLE_IMAGE, this.generateAtlasCells(), image);
-        }
+		constructor(name: string, image, width?: number, height?: number, offsetX?: number, offsetY?: number) {
+			this.width = width || image.width;
+			this.height = height || image.height;
+			this.offsetX = offsetX || 0;
+			this.offsetY = offsetY || 0;
 
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {string} "SingleImage"
-        * @public
-        */
-        public objType(): string {
-            return "SingleImage";
-        }
+			super(name, Kiwi.Textures.TextureAtlas.SINGLE_IMAGE, this.generateAtlasCells(), image);
+		}
 
-        /**
-        * The width of the image.
-        * @property width
-        * @type number
-        * @private
-        */
-        private width: number;
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {string} "SingleImage"
+		* @public
+		*/
+		public objType(): string {
+			return "SingleImage";
+		}
 
-        /**
-        * The height of the image.
-        * @property height
-        * @type number
-        * @private
-        */
-        private height: number;
-        
-        /**
-        * The offset for the image on the X axis.
-        * @property offsetX
-        * @type number
-        * @private
-        */
-        private offsetX: number;
-        
-        /**
-        * The offset for the image on the Y axis.
-        * @property offsetY
-        * @type number
-        * @private
-        */
-        private offsetY: number;
+		/**
+		* The width of the image.
+		* @property width
+		* @type number
+		* @private
+		*/
+		private width: number;
 
-        /**
-        * This method generates the single image cell based off the information that was passed during instantion.
-        * @method generateAtlasCells
-        * @returns{ Array }
-        * @public
-        */
-        public generateAtlasCells(): Array<any> {
-            return [{ x: this.offsetX, y: this.offsetY, w: this.width, h: this.height, hitboxes: [{ x: 0, y: 0, w: this.width, h: this.height }] }];
-        }
+		/**
+		* The height of the image.
+		* @property height
+		* @type number
+		* @private
+		*/
+		private height: number;
 
-    }
+		/**
+		* The offset for the image on the X axis.
+		* @property offsetX
+		* @type number
+		* @private
+		*/
+		private offsetX: number;
 
-}
+		/**
+		* The offset for the image on the Y axis.
+		* @property offsetY
+		* @type number
+		* @private
+		*/
+		private offsetY: number;
+
+		/**
+		* This method generates the single image cell based off the information that was passed during instantion.
+		* @method generateAtlasCells
+		* @returns{ Array }
+		* @public
+		*/
+		public generateAtlasCells(): Array<any> {
+			return [{ x: this.offsetX, y: this.offsetY, w: this.width, h: this.height, hitboxes: [{ x: 0, y: 0, w: this.width, h: this.height }] }];
+		}
 
+	}
+
+}
diff --git a/src/textures/SpriteSheet.ts b/src/textures/SpriteSheet.ts
index 337e9bf..db5da86 100644
--- a/src/textures/SpriteSheet.ts
+++ b/src/textures/SpriteSheet.ts
@@ -3,202 +3,201 @@
 * @module Kiwi
 * @submodule Textures
 *
-*/ 
+*/
 
 module Kiwi.Textures  {
 
-    /**
-    * A special type of TextureAtlas that is created when loading in images that are design to be SpriteSheets. A SpriteSheet will generally contain multiple cells and can also contain sequences which are then automatically added as Animations when this texture is used on a Sprite. 
-    *
-    * @class SpriteSheet
-    * @extends TextureAtlas
-    * @namespace Kiwi.Textures
-    * @constructor
-    * @param name {string} The name of the spritesheet.
-    * @param texture {HTMLImageElement/HTMLCanvasElement} The image that is being used for the spritesheet.
-    * @param cellWidth {number} The width of a single cell.
-    * @param cellHeight {number} The height of a single cell.
-    * @param [numCells] {number} The number of cells in total. 
-    * @param [rows] {number} The number of cells that make up a row.
-    * @param [cols] {number} The number of cells that make up a column.
-    * @param [sheetOffsetX] {number} The offset of the whole sheet on the x axis. Useful if the image has a border you don't want to show.
-    * @param [sheetOffsetY] {number} The offset of the whole sheet on the y axis. Useful if the image has a border you don't want to show.
-    * @param [cellOffsetX] {number} An offset between cells on the x axis. Useful if there is a border between cells which is not to be shown.
-    * @param [cellOffsetY] {number} An offset between cells on the y axis. Useful if there is a border between cells which is not to be shown.
-    * @return {SpriteSheet} 
-    */
-    export class SpriteSheet extends TextureAtlas {
-         
-        constructor(name: string, texture, cellWidth: number, cellHeight: number, numCells?:number,rows?:number,cols?:number,sheetOffsetX?: number, sheetOffsetY?:number,cellOffsetX?:number,cellOffsetY?:number) {
-            
-            this.cellWidth = cellWidth;
-            this.cellHeight = cellHeight;
-            
-            this._cols = cols || texture.width / cellWidth;
-            this._rows = rows || texture.height / cellHeight;
-            this.numCells = numCells || this.cols * this.rows;
-            
-            this.sheetOffsetX = sheetOffsetX || 0;
-            this.sheetOffsetY = sheetOffsetY || 0;
-
-            this.cellOffsetX = cellOffsetX || 0;
-            this.cellOffsetY = cellOffsetY || 0;
-            
-            super(name, Kiwi.Textures.TextureAtlas.SPRITE_SHEET, this.generateAtlasCells(), texture, this.sequences);
-        }
-
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {string} "SpriteSheet"
-        * @public
-        */
-        public objType(): string {
-            return "SpriteSheet";
-        }
-        
-        /**
-        * The width of a single cell.
-        * @property cellWidth
-        * @type number
-        * @private
-        */
-        private cellWidth: number;
-        
-        /**
-        * The height of a single cell.
-        * @property cellHeight
-        * @type number
-        * @private
-        */
-        private cellHeight: number;
-        
-        /**
-        * The number of cells that are on this spritesheet
-        * @property numCells
-        * @type number
-        * @private
-        */
-        private numCells: number;
-        
-        /**
-        * The number of rows for the spritesheet
-        * @property rows
-        * @type number
-        * @private
-        */
-        private _rows: number;
-        
-        /**
-        * Get the number of rows.
-        * @type number
-        * @public
-        */
-        public get rows(): number {
-            return this._rows;
-        }
-
-        /**
-        * The number of columns that are on this spritesheet
-        * @property cols
-        * @type number
-        * @private
-        */
-        private _cols: number;
-        
-        /**
-        * Get the number of columns.
-        * @type number
-        * @public
-        */
-        public get cols(): number {
-            return this._cols;
-        }
-
-        /**
-        * How much the whole spritesheet should be offset by on the X axis.
-        * @property sheetOffsetX
-        * @type number
-        * @private
-        */
-        private sheetOffsetX: number;
-        
-        /**
-        * How much the whole spritesheet should be offset by on the Y axis.
-        * @property sheetOffsetY
-        * @type number
-        * @private
-        */
-        private sheetOffsetY: number;
-        
-        /**
-        * How much each cell should be offset by on the X axis.
-        * @property cellOffsetX
-        * @type number
-        * @private
-        */
-        private cellOffsetX: number;
-        
-        /**
-        * How much each cell should be offset by on the Y axis.
-        * @property cellOffsetY
-        * @type number
-        * @private
-        */
-        private cellOffsetY: number;
-        
-        /**
-        * Generates the atlas cells based on the information that was provided. 
-        * 
-        * @method generateAtlasCells
-        * @return {Array}
-        * @public
-        */
-        public generateAtlasCells(): Array<any> {
-
-            var cells = new Array();
-            var cellNumeric: number[] = new Array();
-
-            var dx = this.sheetOffsetX;
-            var dy = this.sheetOffsetY;
-            var i = 0;
-            
-            for (var y = 0; y < this.rows; y++) {
-                for (var x = 0; x < this.cols; x++) {
-
-                    if (i >= this.numCells) continue;
-
-                    cells.push({
-                        x: dx,
-                        y: dy,
-                        w: this.cellWidth,
-                        h: this.cellHeight,
-                        hitboxes: [
-                            {
-                                x: 0,
-                                y: 0,
-                                w: this.cellWidth,
-                                h: this.cellHeight
-                            }
-                        ]
-                    });
-
-                    cellNumeric.push(i++);
-
-                    dx += this.cellOffsetX + this.cellWidth;
-                }
-                dx = this.sheetOffsetX;
-                dy += this.cellOffsetY + this.cellHeight;
-            }
-
-            //generate default sequence
-            this.sequences = new Array();
-            this.sequences.push(new Kiwi.Animations.Sequence('default', cellNumeric)); 
-
-            return cells;
-        }
-
-    }
+	/**
+	* A special type of TextureAtlas that is created when loading in images that are design to be SpriteSheets. A SpriteSheet will generally contain multiple cells and can also contain sequences which are then automatically added as Animations when this texture is used on a Sprite. 
+	*
+	* @class SpriteSheet
+	* @extends TextureAtlas
+	* @namespace Kiwi.Textures
+	* @constructor
+	* @param name {string} The name of the spritesheet.
+	* @param texture {HTMLImageElement/HTMLCanvasElement} The image that is being used for the spritesheet.
+	* @param cellWidth {number} The width of a single cell.
+	* @param cellHeight {number} The height of a single cell.
+	* @param [numCells] {number} The number of cells in total. 
+	* @param [rows] {number} The number of cells that make up a row.
+	* @param [cols] {number} The number of cells that make up a column.
+	* @param [sheetOffsetX] {number} The offset of the whole sheet on the x axis. Useful if the image has a border you don't want to show.
+	* @param [sheetOffsetY] {number} The offset of the whole sheet on the y axis. Useful if the image has a border you don't want to show.
+	* @param [cellOffsetX] {number} An offset between cells on the x axis. Useful if there is a border between cells which is not to be shown.
+	* @param [cellOffsetY] {number} An offset between cells on the y axis. Useful if there is a border between cells which is not to be shown.
+	* @return {SpriteSheet} 
+	*/
+	export class SpriteSheet extends TextureAtlas {
+
+		constructor(name: string, texture, cellWidth: number, cellHeight: number, numCells?:number,rows?:number,cols?:number,sheetOffsetX?: number, sheetOffsetY?:number,cellOffsetX?:number,cellOffsetY?:number) {
+			
+			this.cellWidth = cellWidth;
+			this.cellHeight = cellHeight;
+
+			this._cols = cols || texture.width / cellWidth;
+			this._rows = rows || texture.height / cellHeight;
+			this.numCells = numCells || this.cols * this.rows;
+			
+			this.sheetOffsetX = sheetOffsetX || 0;
+			this.sheetOffsetY = sheetOffsetY || 0;
+
+			this.cellOffsetX = cellOffsetX || 0;
+			this.cellOffsetY = cellOffsetY || 0;
+			
+			super(name, Kiwi.Textures.TextureAtlas.SPRITE_SHEET, this.generateAtlasCells(), texture, this.sequences);
+		}
+
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {string} "SpriteSheet"
+		* @public
+		*/
+		public objType(): string {
+			return "SpriteSheet";
+		}
+
+		/**
+		* The width of a single cell.
+		* @property cellWidth
+		* @type number
+		* @private
+		*/
+		private cellWidth: number;
+
+		/**
+		* The height of a single cell.
+		* @property cellHeight
+		* @type number
+		* @private
+		*/
+		private cellHeight: number;
+
+		/**
+		* The number of cells that are on this spritesheet
+		* @property numCells
+		* @type number
+		* @private
+		*/
+		private numCells: number;
+
+		/**
+		* The number of rows for the spritesheet
+		* @property rows
+		* @type number
+		* @private
+		*/
+		private _rows: number;
+		
+		/**
+		* Get the number of rows.
+		* @type number
+		* @public
+		*/
+		public get rows(): number {
+			return this._rows;
+		}
+
+		/**
+		* The number of columns that are on this spritesheet
+		* @property cols
+		* @type number
+		* @private
+		*/
+		private _cols: number;
+
+		/**
+		* Get the number of columns.
+		* @type number
+		* @public
+		*/
+		public get cols(): number {
+			return this._cols;
+		}
+
+		/**
+		* How much the whole spritesheet should be offset by on the X axis.
+		* @property sheetOffsetX
+		* @type number
+		* @private
+		*/
+		private sheetOffsetX: number;
+
+		/**
+		* How much the whole spritesheet should be offset by on the Y axis.
+		* @property sheetOffsetY
+		* @type number
+		* @private
+		*/
+		private sheetOffsetY: number;
+
+		/**
+		* How much each cell should be offset by on the X axis.
+		* @property cellOffsetX
+		* @type number
+		* @private
+		*/
+		private cellOffsetX: number;
+
+		/**
+		* How much each cell should be offset by on the Y axis.
+		* @property cellOffsetY
+		* @type number
+		* @private
+		*/
+		private cellOffsetY: number;
+
+		/**
+		* Generates the atlas cells based on the information that was provided. 
+		* 
+		* @method generateAtlasCells
+		* @return {Array}
+		* @public
+		*/
+		public generateAtlasCells(): Array<any> {
+
+			var cells = new Array();
+			var cellNumeric: number[] = new Array();
+
+			var dx = this.sheetOffsetX;
+			var dy = this.sheetOffsetY;
+			var i = 0;
+
+			for (var y = 0; y < this.rows; y++) {
+				for (var x = 0; x < this.cols; x++) {
+
+					if (i >= this.numCells) continue;
+
+					cells.push({
+						x: dx,
+						y: dy,
+						w: this.cellWidth,
+						h: this.cellHeight,
+						hitboxes: [
+							{
+								x: 0,
+								y: 0,
+								w: this.cellWidth,
+								h: this.cellHeight
+							}
+						]
+					});
+
+					cellNumeric.push(i++);
+
+					dx += this.cellOffsetX + this.cellWidth;
+				}
+				dx = this.sheetOffsetX;
+				dy += this.cellOffsetY + this.cellHeight;
+			}
+
+			//generate default sequence
+			this.sequences = new Array();
+			this.sequences.push(new Kiwi.Animations.Sequence('default', cellNumeric)); 
+
+			return cells;
+		}
+
+	}
 
 }
-
diff --git a/src/textures/TextureAtlas.ts b/src/textures/TextureAtlas.ts
index 17270c2..a267947 100644
--- a/src/textures/TextureAtlas.ts
+++ b/src/textures/TextureAtlas.ts
@@ -3,245 +3,241 @@
 * @module Kiwi
 * @submodule Textures
 *
-*/ 
+*/
 
 module Kiwi.Textures {
 
-    /**
-    * A TextureAtlas is the base class that is created for each image that is loaded through Kiwi. Each TextureAtlas contains a name (the same as the key that the user chose when loading the image in),the HTMLImageElement that it is for and a number of cells.
-    * 
-    * @class TextureAtlas
-    * @namespace Kiwi.Textures
-    * @constructor
-    * @param name {string} Name of the texture atlas. This is usually defined by the developer when loading the assets.
-    * @param type {number} The type of texture atlas that this is. There are currently only three types.
-    * @param cells {any} The cells that are within this image..
-    * @param image {HTMLImageElement/HTMLCanvasElement} The image that the texture atlas is using.
-    * @param [sequences] {Sequence[]} Any sequences of cells for this texture atlas. Used for animation.
-    * @return {Kiwi.TextureAtlas}
-    *
-    */
-    export class TextureAtlas {
-         
-        constructor(name: string, type:number, cells, image, sequences?: Kiwi.Animations.Sequence[]) {
-            this.name = name;
-            this.cells = cells || new Array();
-            this.sequences = sequences || new Array();
-            this.image = image;
-            this._type = type;
-        }
-        
-        /**
-        * The type of object that this texture atlas is.
-        * @method objType
-        * @return {string} "TextureAtlas"
-        * @public
-        */
-        public objType(): string {
-            return "TextureAtlas";
-        }
-
-        /**
-        * The name of this texture atlas
-        * @property name
-        * @type string
-        * @public
-        */
-        public name: string;
-
-
-        /**
-        * Indicates that the image data has changed, and needs to be reuplaoded to the gpu in webGL mode.
-        * @property dirty
-        * @type boolean
-        * @public
-        */
-        public dirty: boolean = false;
-        
-        /**
-        * The image that this texture atlas is holding. Can be an HTMLImageElement or a HTMLCanvasElement
-        * @property image
-        * @type HTMLImageElement/HTMLCanvasElement
-        * @public
-        */
-        public image;
-        
-        /**
-        * The cells for this image.
-        * @property cells
-        * @type Array
-        * @public
-        */
-        public cells;
-        
-        /**
-        * An array of Sequences that are for this texture.
-        * @property sequences
-        * @type Array
-        * @public
-        */
-        public sequences: Kiwi.Animations.Sequence[];
-
-        /**
-        * The cell that is to be render at the start.
-        * @property cellIndex
-        * @type number
-        * @default 0 
-        * @public
-        */
-        public cellIndex: number = 0;
-        
-        /**
-        * The type of texture atlas that this is. This only ever is given a value when the object is instantated. 
-        * @property _type
-        * @type number
-        * @private
-        */
-        private _type: number;
-        
-        /**
-        * The number that defines a single image type of texture atlas
-        * @property SINGLE_IMAGE
-        * @static
-        * @default 0
-        * @type number
-        * @final
-        * @public
-        */
-        public static SINGLE_IMAGE: number = 0;
-    
-        /**
-        * The number that defines a spritesheet type of texture atlas
-        * @property SPRITE_SHEET
-        * @static
-        * @default 1
-        * @type number
-        * @final
-        * @public
-        */
-        public static SPRITE_SHEET: number = 1;
-
-        /**
-        * The number that defines a normal texture atlas
-        * @property TEXTURE_ATLAS
-        * @static
-        * @default 2
-        * @type number
-        * @final
-        * @public
-        */
-        public static TEXTURE_ATLAS: number = 2;
-
-        /**
-        * Will return to you this type of texture atlas. This is READ ONLY.
-        * @type number
-        * @public
-        */
-        public get type(): number {
-            return this._type;
-        }
-        
-
-        public glTextureWrapper: Kiwi.Renderers.GLTextureWrapper;
-
-        /**
-        * Creates a GLTextureWrapper to allow the atlas to communicate efficiently with the video card. This is mostly an internal method.
-        *
-        * If you are extending TextureAtlas to incorporate multiple textures, you will need to override this method.
-        * @method createGLTextureWrapper
-        * @param gl {WebGLRenderingContext} The rendering context.
-        * @param textureManager {Kiwi.Renderers.GLTextureManager} The texture manager.
-        * @public
-        * @since 1.1.0
-        */
-        public createGLTextureWrapper( gl: WebGLRenderingContext, textureManager: Kiwi.Renderers.GLTextureManager ) {
-            // Create a default texture wrapper
-            this.glTextureWrapper = new Kiwi.Renderers.GLTextureWrapper(gl, this);
-            // If this were a multi-texture atlas, we would reassign wrapper values here
-
-            // Register wrapper/s to texture manager
-            textureManager.registerTextureWrapper( gl, this.glTextureWrapper );
-        }
-
-
-        /**
-        * Sends the texture to the video card.
-        * @method enableGL
-        * @param gl {WebGLRenderingContext}
-        * @param renderer {Renderer}
-        * @param textureManager {GLTextureManager}
-        * @public
-        * @since 1.1.0
-        */
-        public enableGL( gl: WebGLRenderingContext, renderer: Kiwi.Renderers.Renderer, textureManager: Kiwi.Renderers.GLTextureManager ) {
-            // Set resolution uniforms
-            renderer.updateTextureSize(gl, new Float32Array([this.image.width, this.image.height]));
-            // Upload texture
-            textureManager.useTexture(gl, this.glTextureWrapper);
-            // If necessary, refresh the texture
-            if(this.dirty)
-                this.refreshTextureGL( gl );
-        }
-
-        /**
-        * Will reload the texture into video memory for WebGL rendering.
-        * 
-        * @method refreshTextureGL
-        * @param glContext {WebGLRenderingContext}
-        * @public
-        * @since 1.0.1
-        */
-        public refreshTextureGL( glContext ) {
-            if(this.glTextureWrapper)
-                this.glTextureWrapper.refreshTexture( glContext );
-            // Clean dirty flag, even if glTextureWrapper failed, so we don't keep calling it
-            this.dirty = false;
-
-        }
-
-        /**
-        * Will populate this texture atlas with information based on a JSON file that was passed.
-        * 
-        * @method readJSON
-        * @param {any} atlasJSON
-        * @public 
-        */
-        public readJSON(atlasJSON) {
-            //populate from json
-            var obj = JSON.parse(atlasJSON);
-
-            if(obj.name !== undefined) this.name = obj.name;
-            
-            for (var i = 0; i < obj.cells.length; i++) {
-                this.cells.push(obj.cells[i]);
-
-                if (obj.cells[i].hitboxes === undefined) {
-                    this.cells[i].hitboxes = new Array();
-                    this.cells[i].hitboxes.push({ x: 0, y: 0, w: this.cells[i].w, h: this.cells[i].h });
-                }
-
-            }
-
-            if (obj.sequences) { // leave as empty array if no animations
-
-                for(var i = 0; i < obj.sequences.length; i++) {
-                    
-                    var seq = new Kiwi.Animations.Sequence(obj.sequences[i].name, obj.sequences[i].cells);
-                    
-                    if (obj.sequences[i].speed !== undefined) seq.speed = obj.sequences[i].speed;
-                    if (obj.sequences[i].loop !== undefined)  seq.loop = obj.sequences[i].loop;
-                    
-                    this.sequences.push(seq);
-                }
-            
-            } 
-
-        }
-
-        
-
-
-    }
+	/**
+	* A TextureAtlas is the base class that is created for each image that is loaded through Kiwi. Each TextureAtlas contains a name (the same as the key that the user chose when loading the image in),the HTMLImageElement that it is for and a number of cells.
+	* 
+	* @class TextureAtlas
+	* @namespace Kiwi.Textures
+	* @constructor
+	* @param name {string} Name of the texture atlas. This is usually defined by the developer when loading the assets.
+	* @param type {number} The type of texture atlas that this is. There are currently only three types.
+	* @param cells {any} The cells that are within this image..
+	* @param image {HTMLImageElement/HTMLCanvasElement} The image that the texture atlas is using.
+	* @param [sequences] {Sequence[]} Any sequences of cells for this texture atlas. Used for animation.
+	* @return {Kiwi.TextureAtlas}
+	*
+	*/
+	export class TextureAtlas {
+
+		constructor(name: string, type:number, cells, image, sequences?: Kiwi.Animations.Sequence[]) {
+			this.name = name;
+			this.cells = cells || new Array();
+			this.sequences = sequences || new Array();
+			this.image = image;
+			this._type = type;
+		}
+		
+		/**
+		* The type of object that this texture atlas is.
+		* @method objType
+		* @return {string} "TextureAtlas"
+		* @public
+		*/
+		public objType(): string {
+			return "TextureAtlas";
+		}
+
+		/**
+		* The name of this texture atlas
+		* @property name
+		* @type string
+		* @public
+		*/
+		public name: string;
+
+
+		/**
+		* Indicates that the image data has changed, and needs to be reuplaoded to the gpu in webGL mode.
+		* @property dirty
+		* @type boolean
+		* @public
+		*/
+		public dirty: boolean = false;
+		
+		/**
+		* The image that this texture atlas is holding. Can be an HTMLImageElement or a HTMLCanvasElement
+		* @property image
+		* @type HTMLImageElement/HTMLCanvasElement
+		* @public
+		*/
+		public image;
+		
+		/**
+		* The cells for this image.
+		* @property cells
+		* @type Array
+		* @public
+		*/
+		public cells;
+		
+		/**
+		* An array of Sequences that are for this texture.
+		* @property sequences
+		* @type Array
+		* @public
+		*/
+		public sequences: Kiwi.Animations.Sequence[];
+
+		/**
+		* The cell that is to be render at the start.
+		* @property cellIndex
+		* @type number
+		* @default 0 
+		* @public
+		*/
+		public cellIndex: number = 0;
+		
+		/**
+		* The type of texture atlas that this is. This only ever is given a value when the object is instantated. 
+		* @property _type
+		* @type number
+		* @private
+		*/
+		private _type: number;
+		
+		/**
+		* The number that defines a single image type of texture atlas
+		* @property SINGLE_IMAGE
+		* @static
+		* @default 0
+		* @type number
+		* @final
+		* @public
+		*/
+		public static SINGLE_IMAGE: number = 0;
+	
+		/**
+		* The number that defines a spritesheet type of texture atlas
+		* @property SPRITE_SHEET
+		* @static
+		* @default 1
+		* @type number
+		* @final
+		* @public
+		*/
+		public static SPRITE_SHEET: number = 1;
+
+		/**
+		* The number that defines a normal texture atlas
+		* @property TEXTURE_ATLAS
+		* @static
+		* @default 2
+		* @type number
+		* @final
+		* @public
+		*/
+		public static TEXTURE_ATLAS: number = 2;
+
+		/**
+		* Will return to you this type of texture atlas. This is READ ONLY.
+		* @type number
+		* @public
+		*/
+		public get type(): number {
+			return this._type;
+		}
+		
+
+		public glTextureWrapper: Kiwi.Renderers.GLTextureWrapper;
+
+		/**
+		* Creates a GLTextureWrapper to allow the atlas to communicate efficiently with the video card. This is mostly an internal method.
+		*
+		* If you are extending TextureAtlas to incorporate multiple textures, you will need to override this method.
+		* @method createGLTextureWrapper
+		* @param gl {WebGLRenderingContext} The rendering context.
+		* @param textureManager {Kiwi.Renderers.GLTextureManager} The texture manager.
+		* @public
+		* @since 1.1.0
+		*/
+		public createGLTextureWrapper( gl: WebGLRenderingContext, textureManager: Kiwi.Renderers.GLTextureManager ) {
+			// Create a default texture wrapper
+			this.glTextureWrapper = new Kiwi.Renderers.GLTextureWrapper(gl, this);
+			// If this were a multi-texture atlas, we would reassign wrapper values here
+
+			// Register wrapper/s to texture manager
+			textureManager.registerTextureWrapper( gl, this.glTextureWrapper );
+		}
+
+
+		/**
+		* Sends the texture to the video card.
+		* @method enableGL
+		* @param gl {WebGLRenderingContext}
+		* @param renderer {Renderer}
+		* @param textureManager {GLTextureManager}
+		* @public
+		* @since 1.1.0
+		*/
+		public enableGL( gl: WebGLRenderingContext, renderer: Kiwi.Renderers.Renderer, textureManager: Kiwi.Renderers.GLTextureManager ) {
+			// Set resolution uniforms
+			renderer.updateTextureSize(gl, new Float32Array([this.image.width, this.image.height]));
+			// Upload texture
+			textureManager.useTexture(gl, this.glTextureWrapper);
+			// If necessary, refresh the texture
+			if(this.dirty)
+				this.refreshTextureGL( gl );
+		}
+
+		/**
+		* Will reload the texture into video memory for WebGL rendering.
+		* 
+		* @method refreshTextureGL
+		* @param glContext {WebGLRenderingContext}
+		* @public
+		* @since 1.0.1
+		*/
+		public refreshTextureGL( glContext ) {
+			if(this.glTextureWrapper)
+				this.glTextureWrapper.refreshTexture( glContext );
+			// Clean dirty flag, even if glTextureWrapper failed, so we don't keep calling it
+			this.dirty = false;
+
+		}
+
+		/**
+		* Will populate this texture atlas with information based on a JSON file that was passed.
+		* 
+		* @method readJSON
+		* @param {any} atlasJSON
+		* @public 
+		*/
+		public readJSON(atlasJSON) {
+			//populate from json
+			var obj = JSON.parse(atlasJSON);
+
+			if(obj.name !== undefined) this.name = obj.name;
+			
+			for (var i = 0; i < obj.cells.length; i++) {
+				this.cells.push(obj.cells[i]);
+
+				if (obj.cells[i].hitboxes === undefined) {
+					this.cells[i].hitboxes = new Array();
+					this.cells[i].hitboxes.push({ x: 0, y: 0, w: this.cells[i].w, h: this.cells[i].h });
+				}
+
+			}
+
+			if (obj.sequences) { // leave as empty array if no animations
+
+				for(var i = 0; i < obj.sequences.length; i++) {
+					
+					var seq = new Kiwi.Animations.Sequence(obj.sequences[i].name, obj.sequences[i].cells);
+					
+					if (obj.sequences[i].speed !== undefined) seq.speed = obj.sequences[i].speed;
+					if (obj.sequences[i].loop !== undefined)  seq.loop = obj.sequences[i].loop;
+					
+					this.sequences.push(seq);
+				}
+
+			}
+
+		}
+
+	}
 
 }
-
diff --git a/src/textures/TextureLibrary.ts b/src/textures/TextureLibrary.ts
index 4991cd0..9b24269 100644
--- a/src/textures/TextureLibrary.ts
+++ b/src/textures/TextureLibrary.ts
@@ -5,231 +5,230 @@
 * @submodule Textures
 * @main Textures
 * 
-*/ 
+*/
 
 module Kiwi.Textures {
 
-    /**
-    * Holds a reference to all of the image files (jpg, png, e.t.c) that are accessible on the State this TextureLibrary is on. 
-    * 
-    * @class TextureLibrary
-    * @namespace Kiwi.Textures
-    * @constructor
-    * @param game {Game} The game that this texture library belongs to.
-    * @return {Kiwi.TextureLibrary}
-    *
-    */
-    export class TextureLibrary {
-         
-        constructor(game: Kiwi.Game) {
-
-            this._game = game;
-            this.textures = new Object();
-        }
-
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {string}
-        * @public
-        */
-        public objType(): string {
-            return "TextureLibrary";
-        }
-
-        /**
-        * The game that this texture library is on.
-        * @property _game
-        * @type Game
-        * @private
-        */
-        private _game: Kiwi.Game;
-
-        /**
-        * Contains all of the textures that are available.
-        * @property textures
-        * @public
-        */
-        public textures;
-
-        /**
-        * Resets the texture library.
-        * @method clear
-        * @public
-        */
-        public clear() {
-            for (var prop in this.textures) {
-                delete this.textures[prop];
-            }
-        }
-
-       
-
-        /**
-        * Adds a texture atlas to the library.
-        * @method add
-        * @param atlas {Kiwi.Textures.TextureAtlas}
-        * @public
-        */
-        public add(atlas: TextureAtlas) {
-            this.textures[atlas.name] = atlas;
-
-            if (this._game.renderOption === Kiwi.RENDERER_WEBGL) {
-                if (Kiwi.Utils.Common.base2Sizes.indexOf(atlas.image.width) == -1 || Kiwi.Utils.Common.base2Sizes.indexOf(atlas.image.height) == -1) {
-                    Kiwi.Log.log("Kiwi.TextureLibrary: Warning:Image is not of base2 size and may not render correctly.", '#texture', '#base2');
-                }
-                var renderManager = <Kiwi.Renderers.GLRenderManager>this._game.renderer;
-                renderManager.addTexture(this._game.stage.gl, atlas);
-            }
-        }
-
-
-        /**
-        * Adds a new image file to the texture library.
-        * @method addFromFile
-        * @param imageFile {Kiwi.File}
-        * @public
-        */
-        public addFromFile(imageFile: Kiwi.Files.File) {
-
-            if (this._game.renderOption === Kiwi.RENDERER_WEBGL && this._game.deviceTargetOption != Kiwi.TARGET_COCOON) {
-                imageFile = this._rebuildImage(imageFile);
-            }
-
-            switch (imageFile.dataType) {
-                case Kiwi.Files.File.SPRITE_SHEET:
-                    this.textures[imageFile.key] = this._buildSpriteSheet(imageFile);
-                    break;
-                case Kiwi.Files.File.IMAGE:
-                    this.textures[imageFile.key] = this._buildImage(imageFile);
-                    break;
-                case Kiwi.Files.File.TEXTURE_ATLAS:
-                    this.textures[imageFile.key] = this._buildTextureAtlas(imageFile);
-                    break;
-                default:
-                    //Image file is of unknown type and was not added to texture library
-                    break;
-            }
-
-        }
-
-        /**
-        * Used to rebuild a Texture from the FileStore into a base2 size if it doesn't have it already.
-        * @method _rebuildImage
-        * @param imageFile {Kiwi.File} The image file that is to be rebuilt.
-        * @return {Kiwi.File} The new image file.
-        * @private
-        */
-        private _rebuildImage(imageFile: Kiwi.Files.File): Kiwi.Files.File {
-
-
-            //Check to see if it is base 2
-            var newImg = Kiwi.Utils.Common.convertToBase2(imageFile.data);
-
-
-            //Was it resized? We can check to see if the width/height has changed.
-            if (imageFile.data.width !== newImg.width || imageFile.data.height !== newImg.height) {
-
-                if (imageFile.dataType === Kiwi.Files.File.SPRITE_SHEET) {
-                    //If no rows were passed then calculate them now.
-                    if (!imageFile.metadata.rows)
-                        imageFile.metadata.rows = imageFile.data.height / imageFile.metadata.frameHeight;
-
-
-                    //If no columns were passed then calculate them again.
-                    if (!imageFile.metadata.cols)
-                        imageFile.metadata.cols = imageFile.data.width / imageFile.metadata.frameWidth;
-
-                } else if (imageFile.dataType === Kiwi.Files.File.IMAGE) {
-
-                    if (!imageFile.metadata.width)
-                        imageFile.metadata.width = imageFile.data.width;
-
-                    if (!imageFile.metadata.height)
-                        imageFile.metadata.height = imageFile.data.height;
-
-                }
-
-                Kiwi.Log.log('Kiwi.TextureLibrary: ' + imageFile.name + ' has been rebuilt to be base2.', '#texture', '#base2');
-
-                //Assign the new image to the data
-                imageFile.data = newImg;
-            }
-
-            return imageFile;
-        }
-
-        /**
-        * Used to build a new texture atlas based on the image file provided. Internal use only.
-        * @method _buildTextureAtlas
-        * @param imageFile {Kiwi.File} The image file that is to be used.
-        * @return {Kiwi.Textures.TextureAtlas} The new texture atlas that is created.
-        * @private
-        */
-        private _buildTextureAtlas(imageFile: Kiwi.Files.File): Kiwi.Textures.TextureAtlas {
-            var atlas: Kiwi.Textures.TextureAtlas = new Kiwi.Textures.TextureAtlas(imageFile.key, Kiwi.Textures.TextureAtlas.TEXTURE_ATLAS, null, imageFile.data);
-            var m = imageFile.metadata;
-            
-            var json = this._game.fileStore.getFile(m.jsonID).data;
-            json.trim();
-            
-            atlas.readJSON(json);
-            
-            return atlas;
-            
-        }
-    
-        /**
-        * Builds a spritesheet atlas from the an image file that is provided.
-        * @method _buildSpriteSheet
-        * @param imageFile {Kiwi.File} The image file that is to be used.
-        * @return {Kiwi.Textures.SpriteSheet} The SpriteSheet that was just created.
-        * @private
-        */
-        private _buildSpriteSheet(imageFile:Kiwi.Files.File): Kiwi.Textures.SpriteSheet {
-           
-            var m = imageFile.metadata;
-            
-            //BEWARE THE SWITCH TO CELLWIDTH AND FRAMEWIDTH
-            var spriteSheet: Kiwi.Textures.SpriteSheet = new Kiwi.Textures.SpriteSheet(imageFile.key,imageFile.data,m.frameWidth,m.frameHeight,m.numCells,m.rows,m.cols,m.sheetOffsetX,m.sheetOffsetY,m.cellOffsetX,m.cellOffsetY);
-            return spriteSheet;
-        }
-    
-        /**
-        * Builds a single image atlas from a image file that is provided.
-        * @method _buildImage
-        * @param imageFile {File} The image file that is to be used.
-        * @return {Kiwi.Textures.SingleImage} The SingleImage that was created.
-        * @private
-        */
-        private _buildImage(imageFile: Kiwi.Files.File): Kiwi.Textures.SingleImage {
-            var m = imageFile.metadata;
-            return new Kiwi.Textures.SingleImage(imageFile.key,imageFile.data,m.width, m.height, m.offsetX, m.offsetY);
-        }
-
-        /**
-         * Rebuild the library from a fileStore. Clears the library and repopulates it.
-         * @method rebuild
-         * @param {Kiwi.Files.FileStore} fileStore
-         * @param {Kiwi.State} state
-         * @public
-         */
-        public rebuild(fileStore: Kiwi.Files.FileStore, state: Kiwi.State) {
-            this.clear();
-            Kiwi.Log.log("Kiwi.TextureLibrary: Rebuilding Texture Library", '#texture', '#rebuild');
-            
-            
-            var fileStoreKeys = fileStore.keys;
-            for (var i = 0; i < fileStoreKeys.length; i++) {
-                var file: Kiwi.Files.File = this._game.fileStore.getFile(fileStoreKeys[i]);
-                if (file.isTexture) {
-                    Kiwi.Log.log("  Kiwi.TextureLibrary: Adding Texture: " + file.name, '#texture', '#added');
-                    state.textureLibrary.addFromFile(file);
-                }
-            }
-
-        }
-    }
+	/**
+	* Holds a reference to all of the image files (jpg, png, e.t.c) that are accessible on the State this TextureLibrary is on. 
+	* 
+	* @class TextureLibrary
+	* @namespace Kiwi.Textures
+	* @constructor
+	* @param game {Game} The game that this texture library belongs to.
+	* @return {Kiwi.TextureLibrary}
+	*
+	*/
+	export class TextureLibrary {
+
+		constructor(game: Kiwi.Game) {
+
+			this._game = game;
+			this.textures = new Object();
+		}
+
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {string}
+		* @public
+		*/
+		public objType(): string {
+			return "TextureLibrary";
+		}
+
+		/**
+		* The game that this texture library is on.
+		* @property _game
+		* @type Game
+		* @private
+		*/
+		private _game: Kiwi.Game;
+
+		/**
+		* Contains all of the textures that are available.
+		* @property textures
+		* @public
+		*/
+		public textures;
+
+		/**
+		* Resets the texture library.
+		* @method clear
+		* @public
+		*/
+		public clear() {
+			for (var prop in this.textures) {
+				delete this.textures[prop];
+			}
+		}
+
+	   
+
+		/**
+		* Adds a texture atlas to the library.
+		* @method add
+		* @param atlas {Kiwi.Textures.TextureAtlas}
+		* @public
+		*/
+		public add(atlas: TextureAtlas) {
+			this.textures[atlas.name] = atlas;
+
+			if (this._game.renderOption === Kiwi.RENDERER_WEBGL) {
+				if (Kiwi.Utils.Common.base2Sizes.indexOf(atlas.image.width) == -1 || Kiwi.Utils.Common.base2Sizes.indexOf(atlas.image.height) == -1) {
+					Kiwi.Log.log("Kiwi.TextureLibrary: Warning:Image is not of base2 size and may not render correctly.", '#texture', '#base2');
+				}
+				var renderManager = <Kiwi.Renderers.GLRenderManager>this._game.renderer;
+				renderManager.addTexture(this._game.stage.gl, atlas);
+			}
+		}
+
+
+		/**
+		* Adds a new image file to the texture library.
+		* @method addFromFile
+		* @param imageFile {Kiwi.File}
+		* @public
+		*/
+		public addFromFile(imageFile: Kiwi.Files.File) {
+
+			if (this._game.renderOption === Kiwi.RENDERER_WEBGL && this._game.deviceTargetOption != Kiwi.TARGET_COCOON) {
+				imageFile = this._rebuildImage(imageFile);
+			}
+
+			switch (imageFile.dataType) {
+				case Kiwi.Files.File.SPRITE_SHEET:
+					this.textures[imageFile.key] = this._buildSpriteSheet(imageFile);
+					break;
+				case Kiwi.Files.File.IMAGE:
+					this.textures[imageFile.key] = this._buildImage(imageFile);
+					break;
+				case Kiwi.Files.File.TEXTURE_ATLAS:
+					this.textures[imageFile.key] = this._buildTextureAtlas(imageFile);
+					break;
+				default:
+					//Image file is of unknown type and was not added to texture library
+					break;
+			}
+
+		}
+
+		/**
+		* Used to rebuild a Texture from the FileStore into a base2 size if it doesn't have it already.
+		* @method _rebuildImage
+		* @param imageFile {Kiwi.File} The image file that is to be rebuilt.
+		* @return {Kiwi.File} The new image file.
+		* @private
+		*/
+		private _rebuildImage(imageFile: Kiwi.Files.File): Kiwi.Files.File {
+
+
+			//Check to see if it is base 2
+			var newImg = Kiwi.Utils.Common.convertToBase2(imageFile.data);
+
+
+			//Was it resized? We can check to see if the width/height has changed.
+			if (imageFile.data.width !== newImg.width || imageFile.data.height !== newImg.height) {
+
+				if (imageFile.dataType === Kiwi.Files.File.SPRITE_SHEET) {
+					//If no rows were passed then calculate them now.
+					if (!imageFile.metadata.rows)
+						imageFile.metadata.rows = imageFile.data.height / imageFile.metadata.frameHeight;
+
+
+					//If no columns were passed then calculate them again.
+					if (!imageFile.metadata.cols)
+						imageFile.metadata.cols = imageFile.data.width / imageFile.metadata.frameWidth;
+
+				} else if (imageFile.dataType === Kiwi.Files.File.IMAGE) {
+
+					if (!imageFile.metadata.width)
+						imageFile.metadata.width = imageFile.data.width;
+
+					if (!imageFile.metadata.height)
+						imageFile.metadata.height = imageFile.data.height;
+
+				}
+
+				Kiwi.Log.log('Kiwi.TextureLibrary: ' + imageFile.name + ' has been rebuilt to be base2.', '#texture', '#base2');
+
+				//Assign the new image to the data
+				imageFile.data = newImg;
+			}
+
+			return imageFile;
+		}
+
+		/**
+		* Used to build a new texture atlas based on the image file provided. Internal use only.
+		* @method _buildTextureAtlas
+		* @param imageFile {Kiwi.File} The image file that is to be used.
+		* @return {Kiwi.Textures.TextureAtlas} The new texture atlas that is created.
+		* @private
+		*/
+		private _buildTextureAtlas(imageFile: Kiwi.Files.File): Kiwi.Textures.TextureAtlas {
+			var atlas: Kiwi.Textures.TextureAtlas = new Kiwi.Textures.TextureAtlas(imageFile.key, Kiwi.Textures.TextureAtlas.TEXTURE_ATLAS, null, imageFile.data);
+			var m = imageFile.metadata;
+			
+			var json = this._game.fileStore.getFile(m.jsonID).data;
+			json.trim();
+			
+			atlas.readJSON(json);
+			
+			return atlas;
+			
+		}
+	
+		/**
+		* Builds a spritesheet atlas from the an image file that is provided.
+		* @method _buildSpriteSheet
+		* @param imageFile {Kiwi.File} The image file that is to be used.
+		* @return {Kiwi.Textures.SpriteSheet} The SpriteSheet that was just created.
+		* @private
+		*/
+		private _buildSpriteSheet(imageFile:Kiwi.Files.File): Kiwi.Textures.SpriteSheet {
+		   
+			var m = imageFile.metadata;
+			
+			//BEWARE THE SWITCH TO CELLWIDTH AND FRAMEWIDTH
+			var spriteSheet: Kiwi.Textures.SpriteSheet = new Kiwi.Textures.SpriteSheet(imageFile.key,imageFile.data,m.frameWidth,m.frameHeight,m.numCells,m.rows,m.cols,m.sheetOffsetX,m.sheetOffsetY,m.cellOffsetX,m.cellOffsetY);
+			return spriteSheet;
+		}
+	
+		/**
+		* Builds a single image atlas from a image file that is provided.
+		* @method _buildImage
+		* @param imageFile {File} The image file that is to be used.
+		* @return {Kiwi.Textures.SingleImage} The SingleImage that was created.
+		* @private
+		*/
+		private _buildImage(imageFile: Kiwi.Files.File): Kiwi.Textures.SingleImage {
+			var m = imageFile.metadata;
+			return new Kiwi.Textures.SingleImage(imageFile.key,imageFile.data,m.width, m.height, m.offsetX, m.offsetY);
+		}
+
+		/**
+		 * Rebuild the library from a fileStore. Clears the library and repopulates it.
+		 * @method rebuild
+		 * @param {Kiwi.Files.FileStore} fileStore
+		 * @param {Kiwi.State} state
+		 * @public
+		 */
+		public rebuild(fileStore: Kiwi.Files.FileStore, state: Kiwi.State) {
+			this.clear();
+			Kiwi.Log.log("Kiwi.TextureLibrary: Rebuilding Texture Library", '#texture', '#rebuild');
+			
+			
+			var fileStoreKeys = fileStore.keys;
+			for (var i = 0; i < fileStoreKeys.length; i++) {
+				var file: Kiwi.Files.File = this._game.fileStore.getFile(fileStoreKeys[i]);
+				if (file.isTexture) {
+					Kiwi.Log.log("  Kiwi.TextureLibrary: Adding Texture: " + file.name, '#texture', '#added');
+					state.textureLibrary.addFromFile(file);
+				}
+			}
+
+		}
+	}
 
 }
-
diff --git a/src/time/Clock.ts b/src/time/Clock.ts
index 8f7d6f0..bb7ba5b 100644
--- a/src/time/Clock.ts
+++ b/src/time/Clock.ts
@@ -7,719 +7,719 @@
 
 module Kiwi.Time {
 
-    /**
-    * The Clock class offers a way of tracking time within a game. When creating a new Clock you should NOT directly instantiate this class but instead use the addClock method on a ClockManager.
-    * - The MasterClock is a property of the Kiwi.Time.Manager class and tracks real world time in milliseconds elapsed since the application started. This happens automatically and there is no need to do anything to set this up.
-    * - An instance of a clock is used to track time in arbitrary units (milliseconds by default)
-    * - A clock can be started, paused, unpaused and stopped. Once stopped, re-starting the clock again will reset it. It can also have its time scale freely transformed.
-    * - Any number of timers can be attached to a clock. See the Kiwi.Time.Timer class for timer details.
-    * - If the clock is paused, any timers attached to the clock will take this into account and not continue to fire events until the clock is unpaused. (Note that this is not the same as pausing timers, which can be done manually and needs to be undone manually.)
-    * - Animations and TweenManagers can use any Clock.
-    * 
-    * @class Clock
-    * @namespace Kiwi.Time
-    * @constructor
-    * @param manager {ClockManager} The ClockManager that this clock belongs to.
-    * @param master {Kiwi.Time.MasterClock} The MasterClock that it is getting the time in relation to.
-    * @param name {String} The name of the clock.
-    * @param [units=1000] {Number} The units that this clock is to operate in per second.
-    * @return {Kiwi.Time.Clock} This Clock object.
-    */
-    export class Clock {
-         
-        constructor (manager:Kiwi.Time.ClockManager, master: Kiwi.Time.MasterClock, name: string, units: number = 1000) {
-
-            this.manager = manager;
-            this.master = master;
-            this.name = name;
-            this.units = units;
-            this.timers = [];
-
-            if (this.units < 1) {
-                this.units = 1;
-            }
-
-            this._lastMasterElapsed = this.master.elapsed();
-            this._currentMasterElapsed = this.master.elapsed();
-        }
-
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} "Clock"
-        * @public
-        */
-        public objType() {
-            return "Clock";
-        }
-
-        /**
-        * A collection of Timer objects using this clock.
-        * @property timers
-        * @type Timer[]
-        * @private
-        */
-        private timers: Kiwi.Time.Timer[];
-
-        /**
-        * The time the clock was first started relative to the master clock.
-        * @property _timeFirstStarted
-        * @type Number
-        * @default null
-        * @private
-        */
-        private _timeFirstStarted: number = null;
-
-        /**
-        * The number of clock units elapsed since the clock was first started.
-        * @method elapsedSinceFirstStarted.
-        * @return {Number} number of clock units.
-        * @public
-        */
-        public elapsedSinceFirstStarted(): number {
-
-            return (this._timeLastStarted) ? (this.master.elapsed() - this._timeFirstStarted) / this.units : null;
-
-        }
-
-        /**
-        * The time the clock was most recently started relative to the master clock.
-        * @property _timeLastStarted
-        * @type Number
-        * @default null
-        * @private
-        */
-        private _timeLastStarted: number = null;
-
-        /**
-        * Get the most recent time the clock was started relative to the master clock.
-        * @method started
-        * @return {Number} milliseconds.
-        * @public
-        */
-        public started(): number {
-
-            return this._timeLastStarted;
-
-        }
-
-
-        /**
-        * Rate at which time passes on this clock.
-        * 1 is normal speed. 0 is no speed. -1 is backwards.
-        * This mostly affects timers, animations and tweens.
-        * @property timeScale
-        * @type number
-        * @default 1.0
-        * @public
-        * @since 1.2.0
-        */
-        public timeScale: number = 1.0;
-
-        /**
-        * Clock units elapsed since the clock was most recently started,
-        * not including paused time.
-        * @property _elapsed
-        * @type number
-        * @private
-        * @since 1.2.0
-        */
-        private _elapsed: number = 0;
-
-        /**
-        * Master time on last frame
-        * @property _lastMasterElapsed
-        * @type number
-        * @private
-        * @since 1.2.0
-        */
-        private _lastMasterElapsed: number;
-
-        /**
-        * Master time on current frame
-        * @property _currentMasterElapsed
-        * @type number
-        * @private
-        * @since 1.2.0
-        */
-        private _currentMasterElapsed: number;
-
-
-        /**
-        * Rate of time passage, as modified by time scale and frame rate.
-        * Under ideal conditions this should be 1.
-        * If the frame rate drops, this will rise. Multiply transformations
-        * by rate to get smooth change over time.
-        * @property rate
-        * @type number
-        * @public
-        * @since 1.2.0
-        */
-        public rate: number = 1;
-
-        /**
-        * Maximum frame duration. If a frame takes longer than this to render,
-        * the clock will only advance this far, in effect slowing down time.
-        * If this value is 0 or less, it will not be checked and frames can
-        * take any amount of time to render.
-        * @property _maxFrameDuration
-        * @type number
-        * @default -1
-        * @private
-        */
-        private _maxFrameDuration: number = -1;
-
-        /**
-        * Maximum frame duration. If a frame takes longer than this to render,
-        * the clock will only advance this far, in effect slowing down time.
-        * If this value is 0 or less, it will not be checked and frames can
-        * take any amount of time to render.
-        * @property maxFrameDuration
-        * @type number
-        * @default -1
-        * @public
-        */
-        public get maxFrameDuration(): number {
-            return this._maxFrameDuration;
-        }
-
-        public set maxFrameDuration( value: number ) {
-            this._maxFrameDuration = value;
-        }
-
-
-        /**
-        * The number of clock units elapsed since the clock was most recently started (not including time spent paused)
-        * @method elapsed
-        * @return {Number} number of clock units.
-        * @public
-        */
-        public elapsed(): number {
-            return this._elapsed;
-        }
-
-        /**
-        * The time the clock was most recently stopped relative to the master clock.
-        * @property _timeLastStopped
-        * @type Number
-        * @default null
-        * @private
-        */
-        private _timeLastStopped: number = null;
-
-        /**
-        * The number of clock units elapsed since the clock was most recently stopped.
-        * @method elapsedSinceLastStopped.
-        * @return {Number} number of clock units.
-        * @public
-        */
-        public elapsedSinceLastStopped(): number {
-
-            return (this._timeLastStarted) ? (this.master.elapsed() - this._timeLastStopped) / this.units : null;
-
-        }
-
-        /**
-        * The time the clock was most receently paused relative to the master clock.
-        * @property _timeLastPaused
-        * @private
-        * @type Number
-        * @default null
-        * @private
-        */
-        private _timeLastPaused: number = null;
-
-        /**
-        * The number of clock units elapsed since the clock was most recently paused.
-        * @method elapsedSinceLastPaused.
-        * @return {Number} number of clock units.
-        * @public
-        */
-        public elapsedSinceLastPaused(): number {
-
-            return (this._timeLastStarted) ? (this.master.elapsed() - this._timeLastPaused) / this.units : null;
-
-        }
-
-        /**
-        * The time the clock was most recently unpaused relative to the master clock.
-        * @property _timeLastUnpaused
-        * @private
-        * @type Number
-        * @default null
-        * @private
-        */
-        private _timeLastUnpaused: number = null;
-
-        /**
-        * The number of clock units elapsed since the clock was most recently unpaused.
-        * @method elapsedSinceLastUnpaused.
-        * @return {Number} number of clock units.
-        * @public
-        */
-        public elapsedSinceLastUnpaused(): number {
-
-            return (this._timeLastStarted) ? (this.master.elapsed() - this._timeLastUnpaused) / this.units : null;
-
-        }
-
-        /**
-        * The total number of milliseconds the clock has been paused since it was last started.
-        * @property _totalPaused
-        * @private
-        * @type Number
-        * @default 0
-        * @private
-        */
-        private _totalPaused: number = 0;
-
-        /**
-        * Whether the clock is in a running state.
-        * @property _isRunning
-        * @type boolean
-        * @default false
-        * @private
-        */
-        private _isRunning: boolean = false;
-
-        /**
-        * Check if the clock is currently running.
-        * @method isRunning
-        * @return {boolean} true if running.
-        * @public
-        */
-        public isRunning(): boolean {
-
-            return this._isRunning;
-
-        }
-
-        /**
-        * Whether the clock is in a stopped state.
-        * @property _isStopped
-        * @type boolean
-        * @default true
-        * @private
-        */
-        private _isStopped: boolean = true;
-
-        /**
-        * Check if the clock is in the stopped state.
-        * @method isStopped
-        * @return {boolean} true if stopped.
-        * @public
-        */
-        public isStopped(): boolean {
-
-            return this._isStopped;
-
-        }
-
-        /**
-        * Whether the clock is in a paused state.
-        * @property _isPaused
-        * @type boolean
-        * @default false
-        * @private
-        */
-        private _isPaused: boolean = false;
-
-        /**
-        * Check if the clock is in the paused state.
-        * @method isPaused
-        * @return {boolean} true if paused.
-        * @public
-        */
-        public isPaused(): boolean {
-
-            return this._isPaused;
-
-        }
-
-        /**
-        * An internal reference to the state of the elapsed timer
-        * @property _elapsedState
-        * @type Number
-        * @default 0
-        * @private
-        */
-        private _elapsedState: number = 0;
-
-        /**
-        * The time manager that this clock belongs to.
-        * @property manager
-        * @type ClockManager 
-        * @public
-        */
-        public manager: Kiwi.Time.ClockManager = null;
-
-        /**
-        * The master clock.
-        * @property master
-        * @type Kiwi.Time.MasterClock
-        * @public
-        */
-        public master: Kiwi.Time.MasterClock = null;
-
-        /**
-        * Name of the clock
-        * @property name
-        * @type string
-        * @public
-        */
-        public name: string = null;
-
-        /**
-        * The number of milliseconds counted as one unit of time by the clock.
-        * @property units
-        * @type Number
-        * @default 0
-        * @public
-        */
-        public units: number = 0;
-
-        /**
-        * Add an existing Timer to the Clock.
-        * @method addTimer
-        * @param timer {Timer} The Timer object instance to be added to ths Clock.
-        * @return {Kiwi.Time.Clock} This Clock object.
-        * @public
-        */
-        public addTimer(timer: Timer): Clock {
-
-            this.timers.push(timer);
-
-            return this;
-        }
-
-        /**
-        * Creates a new Timer and adds it to this Clock.
-        * @method createTimer
-        * @param name {string} The name of the Timer (must be unique on this Clock).
-        * @param [delay=1] {Number} The number of clock units to wait between firing events (default 1)
-        * @param [repeatCount=0] {Number} The number of times to repeat this Timer (default 0)
-        * @param [start=true] {Boolean} If the timer should start.
-        * @return {Kiwi.Time.Timer} The newly created Timer.
-        * @public
-        */
-        public createTimer(name: string, delay: number = 1, repeatCount: number = 0, start: boolean=true): Timer {
-
-            this.timers.push(new Timer(name, this, delay, repeatCount));
-
-            if (start === true) {
-                this.timers[this.timers.length - 1].start();
-            }
-
-            return this.timers[this.timers.length - 1];
-
-        }
-
-        /**
-        * Remove a Timer from this Clock based on either the Timer object or its name.
-        * @method removeTimer
-        * @param [timer=null] {Timer} The Timer object you wish to remove. If you wish to delete by Timer Name set this to null.
-        * @param [timerName=''] {string} The name of the Timer object to remove.
-        * @return {boolean} True if the Timer was successfully removed, false if not.
-        * @public
-        */
-        public removeTimer(timer: Timer = null, timerName:string = ""): boolean {
-            var index;
-
-            //  Timer object given?
-            if ( timer !== null ) {
-                index = this.timers.indexOf( timer );
-                if ( index !== -1 ) {
-                    this.timers.splice( index, 1 );
-                    return true;
-                }
-            } else if ( timerName !== "" ) {
-                for ( index = 0; index < this.timers.length; index++ ) {
-                    if ( this.timers[ index ].name === timerName ) {
-                        this.timers.splice( index, 1 );
-                        return true;
-                    }
-                }
-            }
-
-            return false;
-        }
-
-        /**
-        * Check if the Timer already exists on this Clock
-        * @method checkExists
-        * @param name {string} The name of the Timer.
-        * @return {boolean} true if the Timer exists, false if not.
-        * @public
-        */
-        public checkExists(name: string): boolean {
-
-            if (this.timers[name])
-            {
-                return true;
-            }
-            else
-            {
-                return false;
-            }
-
-        }
-
-        /**
-        * Stop all timers attached to the clock.
-        * @method stopAllTimers
-        * @return {Clock} This Clock object.
-        * @public
-        */
-        public stopAllTimers(): Clock {
-
-            for (var i = 0; i < this.timers.length; i++)
-            {
-                this.timers[i].stop();
-            }
-
-            return this;
-
-        }
-
-        /**
-        * Convert a number to milliseconds based on clock units.
-        * @method toMilliseconds.
-        * @param time {number} seconds
-        * @return {Number} milliseconds.
-        * @public
-        */
-        public convertToMilliseconds(time: number): number {
-
-            return time * this.units;
-
-        }
-
-        /**
-        * Updates all Timers linked to this Clock.
-        * @method update
-        * @public
-        */
-        public update() {
-            var frameLength = this._currentMasterElapsed - this._lastMasterElapsed;
-
-            if ( this._maxFrameDuration > 0 ) {
-                frameLength = Math.min( frameLength, this._maxFrameDuration );
-            }
-
-            for (var i = 0; i < this.timers.length; i++) {
-                this.timers[i].update();
-            }
-
-            // Compute difference between last master value and this
-            // Scale that difference by timeScale
-            // If clock is running, add that value to the current time
-            this._lastMasterElapsed = this._currentMasterElapsed;
-            this._currentMasterElapsed = this.master.elapsed();
-            if ( this._elapsedState === 0 || this._elapsedState === 2 ) {
-                this._elapsed += this.timeScale * frameLength / this.units;
-            } else if ( this._elapsedState === 1 ) {
-                this._totalPaused += frameLength;
-            }
-
-            // Compute time governance properties
-            // These should really be properties hereafter
-            this.rate = this.timeScale * frameLength / this.master.idealDelta;
-        }
-
-        /**
-        * Start the clock. This resets the clock and starts it running.
-        * @method start
-        * @return {Clock} This Clock object.
-        * @public
-        */
-        public start(): Clock {
-
-            this._timeLastStarted = this.master.elapsed();
-            this._totalPaused = 0;
-
-            if (!this._timeFirstStarted)
-            {
-                this._timeFirstStarted = this._timeLastStarted;
-            }
-
-            this._isRunning = true;
-            this._isPaused = false;
-            this._isStopped = false;
-
-            this._elapsedState = 0;
-
-            return this;
-
-        }
-
-        /**
-        * Pause the clock. The clock can only be paused if it is already running.
-        * @method pause
-        * @return {Kiwi.Time.Clock} This Clock object.
-        * @public
-        */
-        public pause(): Clock {
-
-            if (this._isRunning === true)
-            {
-                this._timeLastPaused = this.master.elapsed();
-                this._isRunning = false;
-                this._isPaused = true;
-                this._isStopped = false;
-
-                this._elapsedState = 1;
-            }
-
-            return this;
-        }
-
-        /**
-        * Resume the clock. The clock can only be resumed if it is already paused.
-        * @method resume
-        * @return {Kiwi.Time.Clock} This Clock object.
-        * @public
-        */
-        public resume(): Clock {
-
-            if (this._isPaused === true)
-            {
-                this._timeLastUnpaused = this.master.elapsed();
-                this._totalPaused += this._timeLastUnpaused - this._timeLastPaused;
-                this._isRunning = true;
-                this._isPaused = false;
-                this._isStopped = false;
-
-                this._elapsedState = 2;
-            }
-
-            return this;
-
-        }
-
-        /**
-        * Stop the clock. Clock can only be stopped if it is already running or is paused.
-        * @method stop
-        * @return {Kiwi.Time.Clock} This Clock object.
-        * @public
-        */
-        public stop(): Clock {
-
-            if (this._isStopped === false)
-            {
-                this._timeLastStopped = this.master.elapsed();
-
-                if (this._isPaused === true)
-                {
-                    this._totalPaused += this._timeLastStopped - this._timeLastPaused;
-                }
-
-                this._isRunning = false;
-                this._isPaused = false;
-                this._isStopped = true;
-
-                this._elapsedState = 3;
-            }
-
-            return this;
-
-        }
-
-	    /**
-	    * Returns a string representation of this object.
-	    * @method toString
-	    * @return {string} a string representation of the instance.
-	    * @public
-        */
-        public toString(): string {
-
-            return "[{Clock (name=" + this.name + " units=" + this.units + " running=" + this._isRunning + ")}]";
-
-        }
-
-
-        /**
-        * Set a function to execute after a certain time interval.
-        * Emulates window.setTimeout, except attached to a Kiwi.Time.Clock.
-        * This allows you to pause and manipulate time, and the timeout will respect
-        * the clock on which it is created.
-        *
-        * No clearTimeout is provided; you should use Kiwi.Time.Timer functions
-        * to achieve further control.
-        *
-        * Any parameters after "context" will be passed as parameters to the
-        * callback function. Note that you must specify "context" in order for
-        * this to work. You may specify "null", in which case it will default
-        * to the global scope "window".
-        *
-        * @method setTimeout
-        * @param callback {function} Function to execute
-        * @param timeout {number} Milliseconds before execution
-        * @param [context] {object} Object to be "this" for the callback
-        * @return {Kiwi.Time.Timer} Kiwi.Time.Timer object which can be used to further
-        *   manipulate the timer
-        * @public
-        */
-        public setTimeout( callback, timeout: number, context, ...args ): Timer {
-            var clock = this,
-                timer = this.createTimer( "timeoutTimer", timeout / 1000 );
-
-            if ( !context ) {
-                context = this;
-            }
-
-            timer.createTimerEvent( TimerEvent.TIMER_STOP,
-                function() {
-                    callback.apply( context, args );
-                    clock.removeTimer( timer );
-                },
-                context );
-
-            timer.start();
-
-            return timer;
-        }
-
-
-        /**
-        * Set a function to repeatedly execute at fixed time intervals.
-        * Emulates window.setInterval, except attached to a Kiwi.Time.Clock.
-        * This allows you to pause and manipulate time, and the timeout will respect
-        * the clock on which it is created.
-        *
-        * No clearInterval is provided; you should use Kiwi.Time.Timer functions
-        * to achieve further control.
-        *
-        * Any parameters after "context" will be passed as parameters to the
-        * callback function. Note that you must specify "context" in order for
-        * this to work. You may specify "null", in which case it will default
-        * to the global scope "window".
-        *
-        * @method setInterval
-        * @param callback {function} Function to execute
-        * @param timeout {number} Milliseconds between executions
-        * @param [context=window] {object} Object to be "this" for the callback
-        * @return {Kiwi.Time.Timer} Kiwi.Time.Timer object
-        *   which can be used to further manipulate the timer
-        * @public
-        */
-        public setInterval( callback, timeout: number, context, ...args ): Timer {
-            var timer = this.createTimer( "timeoutTimer", timeout / 1000, -1 );
-
-            if ( !context ) {
-                context = this;
-            }
-
-            timer.createTimerEvent( TimerEvent.TIMER_COUNT,
-                function() {
-                    callback.apply( context, args );
-                },
-                context );
-
-            timer.start();
-
-            return timer;
-        }
-
-    }
+	/**
+	* The Clock class offers a way of tracking time within a game. When creating a new Clock you should NOT directly instantiate this class but instead use the addClock method on a ClockManager.
+	* - The MasterClock is a property of the Kiwi.Time.Manager class and tracks real world time in milliseconds elapsed since the application started. This happens automatically and there is no need to do anything to set this up.
+	* - An instance of a clock is used to track time in arbitrary units (milliseconds by default)
+	* - A clock can be started, paused, unpaused and stopped. Once stopped, re-starting the clock again will reset it. It can also have its time scale freely transformed.
+	* - Any number of timers can be attached to a clock. See the Kiwi.Time.Timer class for timer details.
+	* - If the clock is paused, any timers attached to the clock will take this into account and not continue to fire events until the clock is unpaused. (Note that this is not the same as pausing timers, which can be done manually and needs to be undone manually.)
+	* - Animations and TweenManagers can use any Clock.
+	* 
+	* @class Clock
+	* @namespace Kiwi.Time
+	* @constructor
+	* @param manager {ClockManager} The ClockManager that this clock belongs to.
+	* @param master {Kiwi.Time.MasterClock} The MasterClock that it is getting the time in relation to.
+	* @param name {String} The name of the clock.
+	* @param [units=1000] {Number} The units that this clock is to operate in per second.
+	* @return {Kiwi.Time.Clock} This Clock object.
+	*/
+	export class Clock {
+
+		constructor (manager:Kiwi.Time.ClockManager, master: Kiwi.Time.MasterClock, name: string, units: number = 1000) {
+
+			this.manager = manager;
+			this.master = master;
+			this.name = name;
+			this.units = units;
+			this.timers = [];
+
+			if (this.units < 1) {
+				this.units = 1;
+			}
+
+			this._lastMasterElapsed = this.master.elapsed();
+			this._currentMasterElapsed = this.master.elapsed();
+		}
+
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} "Clock"
+		* @public
+		*/
+		public objType() {
+			return "Clock";
+		}
+
+		/**
+		* A collection of Timer objects using this clock.
+		* @property timers
+		* @type Timer[]
+		* @private
+		*/
+		private timers: Kiwi.Time.Timer[];
+
+		/**
+		* The time the clock was first started relative to the master clock.
+		* @property _timeFirstStarted
+		* @type Number
+		* @default null
+		* @private
+		*/
+		private _timeFirstStarted: number = null;
+
+		/**
+		* The number of clock units elapsed since the clock was first started.
+		* @method elapsedSinceFirstStarted.
+		* @return {Number} number of clock units.
+		* @public
+		*/
+		public elapsedSinceFirstStarted(): number {
+
+			return (this._timeLastStarted) ? (this.master.elapsed() - this._timeFirstStarted) / this.units : null;
+
+		}
+
+		/**
+		* The time the clock was most recently started relative to the master clock.
+		* @property _timeLastStarted
+		* @type Number
+		* @default null
+		* @private
+		*/
+		private _timeLastStarted: number = null;
+
+		/**
+		* Get the most recent time the clock was started relative to the master clock.
+		* @method started
+		* @return {Number} milliseconds.
+		* @public
+		*/
+		public started(): number {
+
+			return this._timeLastStarted;
+
+		}
+
+
+		/**
+		* Rate at which time passes on this clock.
+		* 1 is normal speed. 0 is no speed. -1 is backwards.
+		* This mostly affects timers, animations and tweens.
+		* @property timeScale
+		* @type number
+		* @default 1.0
+		* @public
+		* @since 1.2.0
+		*/
+		public timeScale: number = 1.0;
+
+		/**
+		* Clock units elapsed since the clock was most recently started,
+		* not including paused time.
+		* @property _elapsed
+		* @type number
+		* @private
+		* @since 1.2.0
+		*/
+		private _elapsed: number = 0;
+
+		/**
+		* Master time on last frame
+		* @property _lastMasterElapsed
+		* @type number
+		* @private
+		* @since 1.2.0
+		*/
+		private _lastMasterElapsed: number;
+
+		/**
+		* Master time on current frame
+		* @property _currentMasterElapsed
+		* @type number
+		* @private
+		* @since 1.2.0
+		*/
+		private _currentMasterElapsed: number;
+
+
+		/**
+		* Rate of time passage, as modified by time scale and frame rate.
+		* Under ideal conditions this should be 1.
+		* If the frame rate drops, this will rise. Multiply transformations
+		* by rate to get smooth change over time.
+		* @property rate
+		* @type number
+		* @public
+		* @since 1.2.0
+		*/
+		public rate: number = 1;
+
+		/**
+		* Maximum frame duration. If a frame takes longer than this to render,
+		* the clock will only advance this far, in effect slowing down time.
+		* If this value is 0 or less, it will not be checked and frames can
+		* take any amount of time to render.
+		* @property _maxFrameDuration
+		* @type number
+		* @default -1
+		* @private
+		*/
+		private _maxFrameDuration: number = -1;
+
+		/**
+		* Maximum frame duration. If a frame takes longer than this to render,
+		* the clock will only advance this far, in effect slowing down time.
+		* If this value is 0 or less, it will not be checked and frames can
+		* take any amount of time to render.
+		* @property maxFrameDuration
+		* @type number
+		* @default -1
+		* @public
+		*/
+		public get maxFrameDuration(): number {
+			return this._maxFrameDuration;
+		}
+
+		public set maxFrameDuration( value: number ) {
+			this._maxFrameDuration = value;
+		}
+
+
+		/**
+		* The number of clock units elapsed since the clock was most recently started (not including time spent paused)
+		* @method elapsed
+		* @return {Number} number of clock units.
+		* @public
+		*/
+		public elapsed(): number {
+			return this._elapsed;
+		}
+
+		/**
+		* The time the clock was most recently stopped relative to the master clock.
+		* @property _timeLastStopped
+		* @type Number
+		* @default null
+		* @private
+		*/
+		private _timeLastStopped: number = null;
+
+		/**
+		* The number of clock units elapsed since the clock was most recently stopped.
+		* @method elapsedSinceLastStopped.
+		* @return {Number} number of clock units.
+		* @public
+		*/
+		public elapsedSinceLastStopped(): number {
+
+			return (this._timeLastStarted) ? (this.master.elapsed() - this._timeLastStopped) / this.units : null;
+
+		}
+
+		/**
+		* The time the clock was most receently paused relative to the master clock.
+		* @property _timeLastPaused
+		* @private
+		* @type Number
+		* @default null
+		* @private
+		*/
+		private _timeLastPaused: number = null;
+
+		/**
+		* The number of clock units elapsed since the clock was most recently paused.
+		* @method elapsedSinceLastPaused.
+		* @return {Number} number of clock units.
+		* @public
+		*/
+		public elapsedSinceLastPaused(): number {
+
+			return (this._timeLastStarted) ? (this.master.elapsed() - this._timeLastPaused) / this.units : null;
+
+		}
+
+		/**
+		* The time the clock was most recently unpaused relative to the master clock.
+		* @property _timeLastUnpaused
+		* @private
+		* @type Number
+		* @default null
+		* @private
+		*/
+		private _timeLastUnpaused: number = null;
+
+		/**
+		* The number of clock units elapsed since the clock was most recently unpaused.
+		* @method elapsedSinceLastUnpaused.
+		* @return {Number} number of clock units.
+		* @public
+		*/
+		public elapsedSinceLastUnpaused(): number {
+
+			return (this._timeLastStarted) ? (this.master.elapsed() - this._timeLastUnpaused) / this.units : null;
+
+		}
+
+		/**
+		* The total number of milliseconds the clock has been paused since it was last started.
+		* @property _totalPaused
+		* @private
+		* @type Number
+		* @default 0
+		* @private
+		*/
+		private _totalPaused: number = 0;
+
+		/**
+		* Whether the clock is in a running state.
+		* @property _isRunning
+		* @type boolean
+		* @default false
+		* @private
+		*/
+		private _isRunning: boolean = false;
+
+		/**
+		* Check if the clock is currently running.
+		* @method isRunning
+		* @return {boolean} true if running.
+		* @public
+		*/
+		public isRunning(): boolean {
+
+			return this._isRunning;
+
+		}
+
+		/**
+		* Whether the clock is in a stopped state.
+		* @property _isStopped
+		* @type boolean
+		* @default true
+		* @private
+		*/
+		private _isStopped: boolean = true;
+
+		/**
+		* Check if the clock is in the stopped state.
+		* @method isStopped
+		* @return {boolean} true if stopped.
+		* @public
+		*/
+		public isStopped(): boolean {
+
+			return this._isStopped;
+
+		}
+
+		/**
+		* Whether the clock is in a paused state.
+		* @property _isPaused
+		* @type boolean
+		* @default false
+		* @private
+		*/
+		private _isPaused: boolean = false;
+
+		/**
+		* Check if the clock is in the paused state.
+		* @method isPaused
+		* @return {boolean} true if paused.
+		* @public
+		*/
+		public isPaused(): boolean {
+
+			return this._isPaused;
+
+		}
+
+		/**
+		* An internal reference to the state of the elapsed timer
+		* @property _elapsedState
+		* @type Number
+		* @default 0
+		* @private
+		*/
+		private _elapsedState: number = 0;
+
+		/**
+		* The time manager that this clock belongs to.
+		* @property manager
+		* @type ClockManager 
+		* @public
+		*/
+		public manager: Kiwi.Time.ClockManager = null;
+
+		/**
+		* The master clock.
+		* @property master
+		* @type Kiwi.Time.MasterClock
+		* @public
+		*/
+		public master: Kiwi.Time.MasterClock = null;
+
+		/**
+		* Name of the clock
+		* @property name
+		* @type string
+		* @public
+		*/
+		public name: string = null;
+
+		/**
+		* The number of milliseconds counted as one unit of time by the clock.
+		* @property units
+		* @type Number
+		* @default 0
+		* @public
+		*/
+		public units: number = 0;
+
+		/**
+		* Add an existing Timer to the Clock.
+		* @method addTimer
+		* @param timer {Timer} The Timer object instance to be added to ths Clock.
+		* @return {Kiwi.Time.Clock} This Clock object.
+		* @public
+		*/
+		public addTimer(timer: Timer): Clock {
+
+			this.timers.push(timer);
+
+			return this;
+		}
+
+		/**
+		* Creates a new Timer and adds it to this Clock.
+		* @method createTimer
+		* @param name {string} The name of the Timer (must be unique on this Clock).
+		* @param [delay=1] {Number} The number of clock units to wait between firing events (default 1)
+		* @param [repeatCount=0] {Number} The number of times to repeat this Timer (default 0)
+		* @param [start=true] {Boolean} If the timer should start.
+		* @return {Kiwi.Time.Timer} The newly created Timer.
+		* @public
+		*/
+		public createTimer(name: string, delay: number = 1, repeatCount: number = 0, start: boolean=true): Timer {
+
+			this.timers.push(new Timer(name, this, delay, repeatCount));
+
+			if (start === true) {
+				this.timers[this.timers.length - 1].start();
+			}
+
+			return this.timers[this.timers.length - 1];
+
+		}
+
+		/**
+		* Remove a Timer from this Clock based on either the Timer object or its name.
+		* @method removeTimer
+		* @param [timer=null] {Timer} The Timer object you wish to remove. If you wish to delete by Timer Name set this to null.
+		* @param [timerName=''] {string} The name of the Timer object to remove.
+		* @return {boolean} True if the Timer was successfully removed, false if not.
+		* @public
+		*/
+		public removeTimer(timer: Timer = null, timerName:string = ""): boolean {
+			var index;
+
+			//  Timer object given?
+			if ( timer !== null ) {
+				index = this.timers.indexOf( timer );
+				if ( index !== -1 ) {
+					this.timers.splice( index, 1 );
+					return true;
+				}
+			} else if ( timerName !== "" ) {
+				for ( index = 0; index < this.timers.length; index++ ) {
+					if ( this.timers[ index ].name === timerName ) {
+						this.timers.splice( index, 1 );
+						return true;
+					}
+				}
+			}
+
+			return false;
+		}
+
+		/**
+		* Check if the Timer already exists on this Clock
+		* @method checkExists
+		* @param name {string} The name of the Timer.
+		* @return {boolean} true if the Timer exists, false if not.
+		* @public
+		*/
+		public checkExists(name: string): boolean {
+
+			if (this.timers[name])
+			{
+				return true;
+			}
+			else
+			{
+				return false;
+			}
+
+		}
+
+		/**
+		* Stop all timers attached to the clock.
+		* @method stopAllTimers
+		* @return {Clock} This Clock object.
+		* @public
+		*/
+		public stopAllTimers(): Clock {
+
+			for (var i = 0; i < this.timers.length; i++)
+			{
+				this.timers[i].stop();
+			}
+
+			return this;
+
+		}
+
+		/**
+		* Convert a number to milliseconds based on clock units.
+		* @method toMilliseconds.
+		* @param time {number} seconds
+		* @return {Number} milliseconds.
+		* @public
+		*/
+		public convertToMilliseconds(time: number): number {
+
+			return time * this.units;
+
+		}
+
+		/**
+		* Updates all Timers linked to this Clock.
+		* @method update
+		* @public
+		*/
+		public update() {
+			var frameLength = this._currentMasterElapsed - this._lastMasterElapsed;
+
+			if ( this._maxFrameDuration > 0 ) {
+				frameLength = Math.min( frameLength, this._maxFrameDuration );
+			}
+
+			for (var i = 0; i < this.timers.length; i++) {
+				this.timers[i].update();
+			}
+
+			// Compute difference between last master value and this
+			// Scale that difference by timeScale
+			// If clock is running, add that value to the current time
+			this._lastMasterElapsed = this._currentMasterElapsed;
+			this._currentMasterElapsed = this.master.elapsed();
+			if ( this._elapsedState === 0 || this._elapsedState === 2 ) {
+				this._elapsed += this.timeScale * frameLength / this.units;
+			} else if ( this._elapsedState === 1 ) {
+				this._totalPaused += frameLength;
+			}
+
+			// Compute time governance properties
+			// These should really be properties hereafter
+			this.rate = this.timeScale * frameLength / this.master.idealDelta;
+		}
+
+		/**
+		* Start the clock. This resets the clock and starts it running.
+		* @method start
+		* @return {Clock} This Clock object.
+		* @public
+		*/
+		public start(): Clock {
+
+			this._timeLastStarted = this.master.elapsed();
+			this._totalPaused = 0;
+
+			if (!this._timeFirstStarted)
+			{
+				this._timeFirstStarted = this._timeLastStarted;
+			}
+
+			this._isRunning = true;
+			this._isPaused = false;
+			this._isStopped = false;
+
+			this._elapsedState = 0;
+
+			return this;
+
+		}
+
+		/**
+		* Pause the clock. The clock can only be paused if it is already running.
+		* @method pause
+		* @return {Kiwi.Time.Clock} This Clock object.
+		* @public
+		*/
+		public pause(): Clock {
+
+			if (this._isRunning === true)
+			{
+				this._timeLastPaused = this.master.elapsed();
+				this._isRunning = false;
+				this._isPaused = true;
+				this._isStopped = false;
+
+				this._elapsedState = 1;
+			}
+
+			return this;
+		}
+
+		/**
+		* Resume the clock. The clock can only be resumed if it is already paused.
+		* @method resume
+		* @return {Kiwi.Time.Clock} This Clock object.
+		* @public
+		*/
+		public resume(): Clock {
+
+			if (this._isPaused === true)
+			{
+				this._timeLastUnpaused = this.master.elapsed();
+				this._totalPaused += this._timeLastUnpaused - this._timeLastPaused;
+				this._isRunning = true;
+				this._isPaused = false;
+				this._isStopped = false;
+
+				this._elapsedState = 2;
+			}
+
+			return this;
+
+		}
+
+		/**
+		* Stop the clock. Clock can only be stopped if it is already running or is paused.
+		* @method stop
+		* @return {Kiwi.Time.Clock} This Clock object.
+		* @public
+		*/
+		public stop(): Clock {
+
+			if (this._isStopped === false)
+			{
+				this._timeLastStopped = this.master.elapsed();
+
+				if (this._isPaused === true)
+				{
+					this._totalPaused += this._timeLastStopped - this._timeLastPaused;
+				}
+
+				this._isRunning = false;
+				this._isPaused = false;
+				this._isStopped = true;
+
+				this._elapsedState = 3;
+			}
+
+			return this;
+
+		}
+
+		/**
+		* Returns a string representation of this object.
+		* @method toString
+		* @return {string} a string representation of the instance.
+		* @public
+		*/
+		public toString(): string {
+
+			return "[{Clock (name=" + this.name + " units=" + this.units + " running=" + this._isRunning + ")}]";
+
+		}
+
+
+		/**
+		* Set a function to execute after a certain time interval.
+		* Emulates window.setTimeout, except attached to a Kiwi.Time.Clock.
+		* This allows you to pause and manipulate time, and the timeout will respect
+		* the clock on which it is created.
+		*
+		* No clearTimeout is provided; you should use Kiwi.Time.Timer functions
+		* to achieve further control.
+		*
+		* Any parameters after "context" will be passed as parameters to the
+		* callback function. Note that you must specify "context" in order for
+		* this to work. You may specify "null", in which case it will default
+		* to the global scope "window".
+		*
+		* @method setTimeout
+		* @param callback {function} Function to execute
+		* @param timeout {number} Milliseconds before execution
+		* @param [context] {object} Object to be "this" for the callback
+		* @return {Kiwi.Time.Timer} Kiwi.Time.Timer object which can be used to further
+		*   manipulate the timer
+		* @public
+		*/
+		public setTimeout( callback, timeout: number, context, ...args ): Timer {
+			var clock = this,
+				timer = this.createTimer( "timeoutTimer", timeout / 1000 );
+
+			if ( !context ) {
+				context = this;
+			}
+
+			timer.createTimerEvent( TimerEvent.TIMER_STOP,
+				function() {
+					callback.apply( context, args );
+					clock.removeTimer( timer );
+				},
+				context );
+
+			timer.start();
+
+			return timer;
+		}
+
+
+		/**
+		* Set a function to repeatedly execute at fixed time intervals.
+		* Emulates window.setInterval, except attached to a Kiwi.Time.Clock.
+		* This allows you to pause and manipulate time, and the timeout will respect
+		* the clock on which it is created.
+		*
+		* No clearInterval is provided; you should use Kiwi.Time.Timer functions
+		* to achieve further control.
+		*
+		* Any parameters after "context" will be passed as parameters to the
+		* callback function. Note that you must specify "context" in order for
+		* this to work. You may specify "null", in which case it will default
+		* to the global scope "window".
+		*
+		* @method setInterval
+		* @param callback {function} Function to execute
+		* @param timeout {number} Milliseconds between executions
+		* @param [context=window] {object} Object to be "this" for the callback
+		* @return {Kiwi.Time.Timer} Kiwi.Time.Timer object
+		*   which can be used to further manipulate the timer
+		* @public
+		*/
+		public setInterval( callback, timeout: number, context, ...args ): Timer {
+			var timer = this.createTimer( "timeoutTimer", timeout / 1000, -1 );
+
+			if ( !context ) {
+				context = this;
+			}
+
+			timer.createTimerEvent( TimerEvent.TIMER_COUNT,
+				function() {
+					callback.apply( context, args );
+				},
+				context );
+
+			timer.start();
+
+			return timer;
+		}
+
+	}
 
 }
diff --git a/src/time/ClockManager.ts b/src/time/ClockManager.ts
index 00bc091..b22ed7f 100644
--- a/src/time/ClockManager.ts
+++ b/src/time/ClockManager.ts
@@ -8,189 +8,189 @@
 
 module Kiwi.Time {
 
-    /**
-    * Handles the generation and tracking of Clocks and Time related applications for a single game. 
-    * 
-    * @class ClockManager
-    * @namespace Kiwi.Time
-    * @constructor
-    * @param {Kiwi.Game} game.
-    * @return {Kiwi.Time.ClockManager} This Object.
-    *
-    */
-    export class ClockManager {
-         
-        constructor(game: Kiwi.Game) {
-
-            this._game = game;
-
-        }
-
-        /**
-        * The type of object this is.
-        * @method objType
-        * @return {String} "ClockManager"
-        * @public
-        */
-        public objType() {
-            return "ClockManager";
-        }
-
-        /**
-        * The game that this belongs to.
-        * @property _game
-        * @type Kiwi.Game
-        * @private
-        */
-        private _game: Kiwi.Game;
-
-        /**
-        * An array containing all of the clocks that exist on this manager.
-        * @property _clocks
-        * @type Array
-        * @private
-        */
-        private _clocks: Clock[] = [];
-
-        /**
-        * Frame rate factor, derived from master clock
-        * @property rate
-        * @type Number
-        * @public
-        * @since 1.1.10
-        */
-        public rate: number = 1;
-
-        /**
-        * The MasterClock for this manager.
-        * @property master
-        * @type Kiwi.Time.MasterClock
-        * @private
-        */
-        private master: Kiwi.Time.MasterClock;
-
-        /**
-        * The default Game Clock - you can use this via this.game.time.clock. Uses a 1000 millisecond time unit.
-        * @property clock
-        * @type Kiwi.Time.Clock
-        * @public
-        */
-        public clock: Kiwi.Time.Clock;
-
-        /**
-        * When all of the DOM elements that the game requires have loaded successfully then this object will 'boot'.
-        * @method boot
-        * @public
-        */
-        public boot() {
-
-            this.master = new Kiwi.Time.MasterClock();
-
-            this.clock = new Clock(this, this.master, 'default', 1000);
-            this.clock.start();
-
-        }
-
-        /**
-        * Creates a Clock class for keeping time relative to the MasterClock.
-        * @method addClock
-        * @param name {string} The name of the Clock.
-        * @param [units=1000] {Number} The number of milliseconds that make up one unit of time on this clock. Default 1000.
-        * @return {Kiwi.Time.Clock} A reference to the newly created Clock object.
-        * @public
-        */
-        public addClock(name: string, units: number = 1000): Clock {
-
-            this._clocks.push(new Clock(this, this.master, name, units));
-
-            return this._clocks[this._clocks.length - 1];
-
-        }
-
-        /**
-        * Returns the Clock with the matching name.
-        * Throws an error if no Clock with that name exists
-        * @method getClock
-        * @param name {string} The name of the Clock to be returned.
-        * @return {Kiwi.Time.Clock} The clock which matches the name given.
-        * @public
-        */
-        public getClock(name: string): Clock {
-
-            for (var i = 0; i < this._clocks.length; i++)
-            {
-                if (this._clocks[i].name === name)
-                {
-                    return this._clocks[i];
-                }
-            }
-
-        }
-
-        /**
-        * Is executed every frame and updates all of the clocks that exist on this manager.
-        * @method update
-        * @public
-        */
-        public update() {
-
-            this.master.update();
-            this.clock.update();
-
-            for (var i = 0; i < this._clocks.length; i++)
-            {
-                this._clocks[i].update();
-            }
-
-            this.rate = this.master.rate;
-        }
-
-        /**
-        * Returns the current time. Based on the master clock.
-        * @method now
-        * @return {Number}
-        * @public
-        */
-        public now(): number {
-
-            return this.master.now;
-
-        }
-
-        /**
-        * Returns the elapsed time. Based on the master clock.
-        * @method elapsed
-        * @return {Number}
-        * @public
-        * @since 1.1.0
-        */
-        public elapsed(): number {
-            return this.master.elapsed();
-        }
-
-        /**
-        * Returns the delta of the master clock.
-        * @method delta
-        * @return {Number}
-        * @public
-        */
-        public delta(): number {
-
-            return this.master.delta;
-
-        }
-
-        /**
-        * Sets the interval on the master clock.
-        * @method setMasterInterval
-        * @param interval {Number} The ideal frame interval in milliseconds.
-        * @public
-        * @since 1.1.0
-        */
-        public setMasterInterval(interval:number) {
-            this.master.idealDelta = interval;
-        }
-
-    }
-
-}
\ No newline at end of file
+	/**
+	* Handles the generation and tracking of Clocks and Time related applications for a single game. 
+	* 
+	* @class ClockManager
+	* @namespace Kiwi.Time
+	* @constructor
+	* @param {Kiwi.Game} game.
+	* @return {Kiwi.Time.ClockManager} This Object.
+	*
+	*/
+	export class ClockManager {
+
+		constructor(game: Kiwi.Game) {
+
+			this._game = game;
+
+		}
+
+		/**
+		* The type of object this is.
+		* @method objType
+		* @return {String} "ClockManager"
+		* @public
+		*/
+		public objType() {
+			return "ClockManager";
+		}
+
+		/**
+		* The game that this belongs to.
+		* @property _game
+		* @type Kiwi.Game
+		* @private
+		*/
+		private _game: Kiwi.Game;
+
+		/**
+		* An array containing all of the clocks that exist on this manager.
+		* @property _clocks
+		* @type Array
+		* @private
+		*/
+		private _clocks: Clock[] = [];
+
+		/**
+		* Frame rate factor, derived from master clock
+		* @property rate
+		* @type Number
+		* @public
+		* @since 1.1.10
+		*/
+		public rate: number = 1;
+
+		/**
+		* The MasterClock for this manager.
+		* @property master
+		* @type Kiwi.Time.MasterClock
+		* @private
+		*/
+		private master: Kiwi.Time.MasterClock;
+
+		/**
+		* The default Game Clock - you can use this via this.game.time.clock. Uses a 1000 millisecond time unit.
+		* @property clock
+		* @type Kiwi.Time.Clock
+		* @public
+		*/
+		public clock: Kiwi.Time.Clock;
+
+		/**
+		* When all of the DOM elements that the game requires have loaded successfully then this object will 'boot'.
+		* @method boot
+		* @public
+		*/
+		public boot() {
+
+			this.master = new Kiwi.Time.MasterClock();
+
+			this.clock = new Clock(this, this.master, 'default', 1000);
+			this.clock.start();
+
+		}
+
+		/**
+		* Creates a Clock class for keeping time relative to the MasterClock.
+		* @method addClock
+		* @param name {string} The name of the Clock.
+		* @param [units=1000] {Number} The number of milliseconds that make up one unit of time on this clock. Default 1000.
+		* @return {Kiwi.Time.Clock} A reference to the newly created Clock object.
+		* @public
+		*/
+		public addClock(name: string, units: number = 1000): Clock {
+
+			this._clocks.push(new Clock(this, this.master, name, units));
+
+			return this._clocks[this._clocks.length - 1];
+
+		}
+
+		/**
+		* Returns the Clock with the matching name.
+		* Throws an error if no Clock with that name exists
+		* @method getClock
+		* @param name {string} The name of the Clock to be returned.
+		* @return {Kiwi.Time.Clock} The clock which matches the name given.
+		* @public
+		*/
+		public getClock(name: string): Clock {
+
+			for (var i = 0; i < this._clocks.length; i++)
+			{
+				if (this._clocks[i].name === name)
+				{
+					return this._clocks[i];
+				}
+			}
+
+		}
+
+		/**
+		* Is executed every frame and updates all of the clocks that exist on this manager.
+		* @method update
+		* @public
+		*/
+		public update() {
+
+			this.master.update();
+			this.clock.update();
+
+			for (var i = 0; i < this._clocks.length; i++)
+			{
+				this._clocks[i].update();
+			}
+
+			this.rate = this.master.rate;
+		}
+
+		/**
+		* Returns the current time. Based on the master clock.
+		* @method now
+		* @return {Number}
+		* @public
+		*/
+		public now(): number {
+
+			return this.master.now;
+
+		}
+
+		/**
+		* Returns the elapsed time. Based on the master clock.
+		* @method elapsed
+		* @return {Number}
+		* @public
+		* @since 1.1.0
+		*/
+		public elapsed(): number {
+			return this.master.elapsed();
+		}
+
+		/**
+		* Returns the delta of the master clock.
+		* @method delta
+		* @return {Number}
+		* @public
+		*/
+		public delta(): number {
+
+			return this.master.delta;
+
+		}
+
+		/**
+		* Sets the interval on the master clock.
+		* @method setMasterInterval
+		* @param interval {Number} The ideal frame interval in milliseconds.
+		* @public
+		* @since 1.1.0
+		*/
+		public setMasterInterval(interval:number) {
+			this.master.idealDelta = interval;
+		}
+
+	}
+
+}
diff --git a/src/time/MasterClock.ts b/src/time/MasterClock.ts
index 5563903..733851b 100644
--- a/src/time/MasterClock.ts
+++ b/src/time/MasterClock.ts
@@ -7,167 +7,167 @@
 
 module Kiwi.Time {
 
-    /**
-    * The MasterClock tracks time elapsed since the application started.
-    * Each ClockManager has only one MasterClock which is automatically generated when the game initially booted.
-    * You should not access it directly, use the Clock and Timer classes instead.
-    *
-    * @class MasterClock
-    * @namespace Kiwi.Time
-    * @constructor
-    * @return {Kiwi.Time.MasterClock} This Object.
-    *
-    */
-    export class MasterClock {
-         
-        constructor () {
-
-            this._started = Date.now();
-            this.time = this._started;
-
-        }
-
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} "MasterClock"
-        * @public
-        */
-        public objType() {
-            return "MasterClock";
-        }
-
-        /**
-        * The time when the MasterClock was started.
-        * @property _started
-        * @type Number
-        * @private
-        */
-        private _started: number;
-
-        /**
-        * The current time. This is updated every frame but AFTER the delta is calculated.
-        * @property time
-        * @type Number
-        * @public
-        */
-        public time: number = 0;
-
-        /**
-        * The current time, this is straight from the Date.now() method and is updated every frame BEFORE the delta.
-        * @property now
-        * @type Number
-        * @public
-        */
-        public now: number = 0;
-
-        /**
-        * The time it takes for the time to update. Using this you can calculate the fps.
-        * @property delta
-        * @type Number
-        * @public
-        */
-        public delta: number = 0;
-
-        /**
-        * The rate at which ideal frames are passing. Multiply per-frame iterations by this factor to create smooth movement. For example, if the ideal fps is 60, but you're only getting 45, rate will equal 1.333.
-        * @property rate
-        * @type Number
-        * @public
-        * @since 1.1.0
-        */
-        public rate = 1;
-
-        /**
-        * The ideal frame delta in milliseconds. This is automatically adjusted when the game sets a new frameRate.
-        * @property idealDelta
-        * @type Number
-        * @public
-        * @since 1.1.0
-        */
-        public idealDelta = 1000/60.0;
-
-        /**
-        * The time that has elapsed since the game started. In milliseconds.
-        * @method elapsed
-        * @return {Number}
-        * @public
-        */
-        public elapsed():number {
-
-            return this.now - this._started;
-
-        }
-
-        /**
-        * The time that has elapsed since the game started but in seconds.
-        * @method totalElapsedSeconds
-        * @return {Number}
-        * @public
-        */
-        public totalElapsedSeconds(): number {
-
-            return (this.now - this._started) * 0.001;
-
-        }
-
-        /**
-        * The update loop that should be executed every frame. Used to update the time.
-        * @method update
-        * @public
-        */
-        public update() {
-
-            //  Not in < IE8 (fixed via polyfill)
-            this.now = Date.now();
-
-            this.delta = this.now - this.time;
-
-    	    this.time = this.now;
-
-            this.rate = this.delta / this.idealDelta;
-
-            //  Apply time scaling
-
-        }
-
-        /**
-        * Used to calculate the elapsed time from a point that is specified. This is returned in Milliseconds.
-        * @method elapsedSince
-        * @param since {Number} The point in time in which you would like to see how many milliseconds have passed. In milliseconds.
-        * @return {Number}
-        * @public
-        */
-        public elapsedSince(since: number): number {
-
-            return this.now - since;
-
-        }
-
-        /**
-        * Used to calculate the elapsed time from a point that is specified BUT this is in seconds.
-        * @method elapsedSecondsSince
-        * @param since {Number} The point in time in which you would like to see how many seconds have passed. In milliseconds.
-        * @return {Number }
-        * @public
-        */
-        public elapsedSecondsSince(since: number): number {
-
-            return (this.now - since) * 0.001;
-
-        }
-
-        /**
-        * Resets the MasterClocks time.
-        * @method reset
-        * @public
-        */
-        public reset() {
-
-            this._started = this.now;
+	/**
+	* The MasterClock tracks time elapsed since the application started.
+	* Each ClockManager has only one MasterClock which is automatically generated when the game initially booted.
+	* You should not access it directly, use the Clock and Timer classes instead.
+	*
+	* @class MasterClock
+	* @namespace Kiwi.Time
+	* @constructor
+	* @return {Kiwi.Time.MasterClock} This Object.
+	*
+	*/
+	export class MasterClock {
+
+		constructor () {
+
+			this._started = Date.now();
+			this.time = this._started;
+
+		}
+
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} "MasterClock"
+		* @public
+		*/
+		public objType() {
+			return "MasterClock";
+		}
+
+		/**
+		* The time when the MasterClock was started.
+		* @property _started
+		* @type Number
+		* @private
+		*/
+		private _started: number;
+
+		/**
+		* The current time. This is updated every frame but AFTER the delta is calculated.
+		* @property time
+		* @type Number
+		* @public
+		*/
+		public time: number = 0;
+
+		/**
+		* The current time, this is straight from the Date.now() method and is updated every frame BEFORE the delta.
+		* @property now
+		* @type Number
+		* @public
+		*/
+		public now: number = 0;
+
+		/**
+		* The time it takes for the time to update. Using this you can calculate the fps.
+		* @property delta
+		* @type Number
+		* @public
+		*/
+		public delta: number = 0;
+
+		/**
+		* The rate at which ideal frames are passing. Multiply per-frame iterations by this factor to create smooth movement. For example, if the ideal fps is 60, but you're only getting 45, rate will equal 1.333.
+		* @property rate
+		* @type Number
+		* @public
+		* @since 1.1.0
+		*/
+		public rate = 1;
+
+		/**
+		* The ideal frame delta in milliseconds. This is automatically adjusted when the game sets a new frameRate.
+		* @property idealDelta
+		* @type Number
+		* @public
+		* @since 1.1.0
+		*/
+		public idealDelta = 1000/60.0;
+
+		/**
+		* The time that has elapsed since the game started. In milliseconds.
+		* @method elapsed
+		* @return {Number}
+		* @public
+		*/
+		public elapsed():number {
+
+			return this.now - this._started;
+
+		}
+
+		/**
+		* The time that has elapsed since the game started but in seconds.
+		* @method totalElapsedSeconds
+		* @return {Number}
+		* @public
+		*/
+		public totalElapsedSeconds(): number {
+
+			return (this.now - this._started) * 0.001;
+
+		}
+
+		/**
+		* The update loop that should be executed every frame. Used to update the time.
+		* @method update
+		* @public
+		*/
+		public update() {
+
+			//  Not in < IE8 (fixed via polyfill)
+			this.now = Date.now();
+
+			this.delta = this.now - this.time;
+
+			this.time = this.now;
+
+			this.rate = this.delta / this.idealDelta;
+
+			//  Apply time scaling
+
+		}
+
+		/**
+		* Used to calculate the elapsed time from a point that is specified. This is returned in Milliseconds.
+		* @method elapsedSince
+		* @param since {Number} The point in time in which you would like to see how many milliseconds have passed. In milliseconds.
+		* @return {Number}
+		* @public
+		*/
+		public elapsedSince(since: number): number {
+
+			return this.now - since;
+
+		}
+
+		/**
+		* Used to calculate the elapsed time from a point that is specified BUT this is in seconds.
+		* @method elapsedSecondsSince
+		* @param since {Number} The point in time in which you would like to see how many seconds have passed. In milliseconds.
+		* @return {Number }
+		* @public
+		*/
+		public elapsedSecondsSince(since: number): number {
+
+			return (this.now - since) * 0.001;
+
+		}
+
+		/**
+		* Resets the MasterClocks time.
+		* @method reset
+		* @public
+		*/
+		public reset() {
+
+			this._started = this.now;
 
-        }
+		}
 
-    }
+	}
 
-}
\ No newline at end of file
+}
diff --git a/src/time/Timer.ts b/src/time/Timer.ts
index a55a6bc..02ee0d6 100644
--- a/src/time/Timer.ts
+++ b/src/time/Timer.ts
@@ -3,513 +3,513 @@
 * @module Kiwi
 * @submodule Time
 *
-*/ 
+*/
 
 module Kiwi.Time {
 
-    /**
-    * The Timer class hooks into a game Clock and allows you run code at a specified point in game time.
-    * Use the start() method to start a timer. Add TimerEvents to set-up code to be run on the timer interval.
-    * Timer objects can run once or repeat at specified intervals to execute code on a schedule.
-    *
-    * @class Timer
-    * @namespace Kiwi.Time
-    * @constructor
-    * @param name {string} The name of the timer.
-    * @param clock {Kiwi.Time.Clock} The game clock instance this Timer is based on.
-    * @param delay {Number} The number of clock units to wait between firing events.
-    * @param [repeatCount=0] {Number} The number of times to repeat the timer before it is expired. If you don't want it to ever expire, set a value of -1.
-    * @return {Kiwi.Time.Timer} This object.
-    *
-    */
-    export class Timer {
-         
-        constructor (name: string, clock: Clock, delay: number, repeatCount: number = 0) {
-
-            this._clock = clock;
-
-            this._startEvents = [];
-            this._countEvents = [];
-            this._stopEvents = [];
-
-            this.name = name;
-            this.delay = delay;
-            this.repeatCount = repeatCount;
-
-        }
-
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} "Timer"
-        * @public
-        */
-        public objType() {
-            return "Timer";
-        }
-
-        /**
-        * The number of times the timer has repeated so far.
-        * @property _currentCount
-        * @type Number
-        * @default 0 
-        * @private
-        */
-        private _currentCount: number = 0;
-
-        /**
-        * Get the number of times the timer has repeated.
-        * @method getCurrentCount
-        * @return {Number}
-        * @public
-        */
-        public currentCount(): number {
-
-            return this._currentCount;
-
-        }
-
-        /**
-        * A collection of the TimerEvents associated with TimerEvent.TIMER_START
-        * @property _startEvents
-        * @type Array
-        * @private
-        */
-        private _startEvents:TimerEvent[] = null;
-
-        /**
-        * A collection of the TimerEvents associated with TimerEvent.TIMER_COUNT
-        * @property _countEvents
-        * @private
-        * @type Array
-        */
-        private _countEvents:TimerEvent[] = null;
-
-        /**
-        * A collection of the TimerEvents associated with TimerEvent.TIMER_STOP
-        * @property _stopEvents
-        * @private
-        * @type Array
-        */
-        private _stopEvents:TimerEvent[] = null;
-
-        /**
-        * The clock which this timer bases its timing on.
-        * @property _clock
-        * @type Kiwi.Time.Clock
-        * @private
-        */
-        private _clock: Clock = null;
-
-        /**
-        * The time the last repeat occurred in clock units.
-        * @property _timeLastCount
-        * @type Number
-        * @private
-        * @deprecated Better time handling in 1.2.0 deprecates this data.
-        */
-        private _timeLastCount: number = null;
-
-        /**
-        * Whether the timer is in a running state.
-        * @property _isRunning
-        * @type boolean
-        * @default false
-        * @private
-        */
-        private _isRunning: boolean = false;
-
-        /**
-        * The Timers current state. True if the Timer is running, otherwise false.
-        * @method running
-        * @return {boolean} 
-        * @public
-        */
-        public isRunning(): boolean {
-
-            return this._isRunning;
-
-        }
-
-        /**
-        * Whether the timer is in a stopped state.
-        * @property _isStopped
-        * @type boolean
-        * @default true 
-        * @private
-        */
-        private _isStopped: boolean = true;
-
-        /**
-        * Whether the timer is in a stopped state.
-        * @method stopped
-        * @return {boolean} 
-        * @public
-        */
-        public isStopped(): boolean {
-
-            return this._isStopped;
-
-        }
-
-        /**
-        * Whether the timer is in a paused state.
-        * @property _isPaused
-        * @type boolean
-        * @default false
-        * @private
-        */
-        private _isPaused: boolean = false;
-
-        /**
-        * Whether the timer is in a paused state.
-        * @method paused
-        * @return {boolean} 
-        * @public
-        */
-        public isPaused(): boolean {
-
-            return this._isPaused;
-
-        }
-
-        /**
-        * The name of the timer.
-        * @property name
-        * @type String
-        * @default null
-        * @public 
-        */
-        public name: string = null;
-
-        /**
-        * The delay, in game clock units, that the timer will wait before firing the event
-        * @property delay
-        * @type Number
-        * @default 0
-        * @public
-        */
-        public delay: number = 0;
-
-        /**
-        * The number of times the timer will repeat before stopping.
-        * @property repeatCount
-        * @type Number
-        * @default 0
-        * @public
-        */
-        public repeatCount: number = 0;
-
-        /**
-        * Time elapsed on the current repetition
-        * @property _elapsed
-        * @type number
-        * @private
-        * @since 1.2.0
-        */
-        private _elapsed: number = 0;
-
-        /**
-        * Clock time on last frame, used to calculate frame length and time elapsed
-        * @property _lastElapsed
-        * @type number
-        * @private
-        * @since 1.2.0
-        */
-        private _lastElapsed: number;
-        
-        /**
-        * Checks the list of TimerEvents added and processes them based on their type.
-        * @method processEvents
-        * @param type {Number} The type of events to dispatch
-        * @private
-        */
-        private processEvents(type: number) {
-
-            if (type === TimerEvent.TIMER_START)
-            {
-                for (var i = 0; i < this._startEvents.length; i++)
-                {
-                    this._startEvents[i].run();
-                }
-            }
-            else if (type === TimerEvent.TIMER_COUNT)
-            {
-                for (var i = 0; i < this._countEvents.length; i++)
-                {
-                    this._countEvents[i].run();
-                }
-            }
-            else if (type === TimerEvent.TIMER_STOP)
-            {
-                for (var i = 0; i < this._stopEvents.length; i++)
-                {
-                    this._stopEvents[i].run();
-                }
-            }
-
-        }
-
-        /**
-        * Internal update loop called by the Clock that this Timer belongs to.
-        * @method update
-        * @public
-        */
-        public update() {
-            var frameLength = this._clock.elapsed() - this._lastElapsed;
-
-            this._lastElapsed = this._clock.elapsed();
-
-            if ( this._isRunning ) {
-                this._elapsed += frameLength;
-            }
-
-            while ( this._elapsed >= this.delay ) {
-                this._currentCount++;
-                this.processEvents( TimerEvent.TIMER_COUNT );
-                this._elapsed -= this.delay;
-
-                if ( this.repeatCount !== -1 && this._currentCount >= this.repeatCount ) {
-                    this.stop();
-                }
-            }
-
-            while ( this._elapsed < 0 ) {
-                this._currentCount--;
-                this._elapsed += this.delay;
-
-                // Do not process events; they can happen when time flows forwards
-
-                if ( this._currentCount < 0 ) {
-
-                    // Timer has regressed before its creation.
-                    // When time flows forward again, the Timer will probably
-                    // be restarted and repopulated.
-                    // There is a potential memory leak: if a Timer is created
-                    // for a single task, and has a TimerEvent that will
-                    // remove it upon completion, but the Timer is rewound to
-                    // before its creation, that removal will never fire.
-                    this.clear();
-                    this.stop();
-                }
-            }
-        }
-
-        /**
-        * Start the Timer. This will reset the timer and start it. The timer can only be started if it is in a stopped state.
-        * @method start
-        * @return {Kiwi.Time.Timer} this object.
-        * @public
-        */
-        public start(): Timer {
-
-            if (this._isStopped === true)
-            {
-                this._isRunning = true;
-                this._isPaused = false;
-                this._isStopped = false;
-
-                this._currentCount = 0;
-
-                this._elapsed = 0;
-                this._lastElapsed = this._clock.elapsed() || 0;
-
-                this.processEvents(TimerEvent.TIMER_START);
-            }
-
-            return this;
-        }
-
-        /**
-        * Stop the Timer. Only possible when the timer is running or paused.
-        * @method stop
-        * @return {Kiwi.Time.Timer} this object.
-        * @public
-        */
-        public stop():Timer {
-
-            if (this._isRunning === true || this._isPaused === true)
-            {
-                this._isRunning = false;
-                this._isPaused = false;
-                this._isStopped = true;
-
-                this.processEvents(TimerEvent.TIMER_STOP);
-            }
-
-            return this;
-
-        }
-
-        /**
-        * Pause the Timer. Only possible when the timer is running.
-        * @method pause
-        * @return {Kiwi.Time.Timer} this object.
-        * @public
-        */
-        public pause():Timer {
-
-            if (this._isRunning === true)
-            {
-                this._isRunning = false;
-                this._isPaused = true;
-            }
-
-            return this;
-        }
-
-        /**
-        * Resume the Timer. Only possible if the timer has been paused.
-        * @method resume
-        * @return {Kiwi.Time.Timer} this object.
-        * @public
-        */
-        public resume(): Timer {
-
-            if (this._isPaused === true)
-            {
-                this._isRunning = true;
-                this._isPaused = false;
-            }
-
-            return this;
-
-        }
-
-        /**
-        * Adds an existing TimerEvent object to this Timer.
-        * @method addTimerEvent
-        * @param {Kiwi.Time.TimerEvent} A TimerEvent object
-        * @return {Kiwi.Time.TimerEvent} The TimerEvent object
-        * @public
-        */
-        public addTimerEvent(event:TimerEvent):TimerEvent {
-
-            if (event.type === TimerEvent.TIMER_START)
-            {
-                this._startEvents.push(event);
-            }
-            else if (event.type === TimerEvent.TIMER_COUNT)
-            {
-                this._countEvents.push(event);
-            }
-            else if (event.type === TimerEvent.TIMER_STOP)
-            {
-                this._stopEvents.push(event);
-            }
-
-            return event;
-
-        }
-
-        /**
-        * Creates a new TimerEvent and adds it to this Timer
-        * @method createTimerEvent
-        * @param type {Number} The type of TimerEvent to create (TIMER_START, TIMER_COUNT or TIMER_STOP).
-        * @param callback {Function} The function to call when the TimerEvent fires.
-        * @param context {Function} The context in which the given function will run (usually 'this')
-        * @return {Kiwi.Time.TimerEvent} The newly created TimerEvent.
-        * @public
-        */
-        public createTimerEvent(type:number, callback, context):TimerEvent {
-
-            if (type === TimerEvent.TIMER_START)
-            {
-                this._startEvents.push(new TimerEvent(type, callback, context));
-                return this._startEvents[this._startEvents.length - 1];
-            }
-            else if (type === TimerEvent.TIMER_COUNT)
-            {
-                this._countEvents.push(new TimerEvent(type, callback, context));
-                return this._countEvents[this._countEvents.length - 1];
-            }
-            else if (type === TimerEvent.TIMER_STOP)
-            {
-                this._stopEvents.push(new TimerEvent(type, callback, context));
-                return this._stopEvents[this._stopEvents.length - 1];
-            }
-
-            return null;
-
-        }
-
-        /**
-        * Removes a TimerEvent object from this Timer
-        * @method removeTimerEvent
-        * @param {Kiwi.Time.TimerEvent} The TimerEvent to remove
-        * @return {boolean} True if the event was removed, otherwise false.
-        * @public
-        */
-        public removeTimerEvent(event:TimerEvent):boolean {
-
-            var removed = [];
-
-            if (event.type === TimerEvent.TIMER_START)
-            {
-                removed = this._startEvents.splice(this._startEvents.indexOf(event), 1);
-            }
-            else if (event.type === TimerEvent.TIMER_COUNT)
-            {
-                removed = this._countEvents.splice(this._countEvents.indexOf(event), 1);
-            }
-            else if (event.type === TimerEvent.TIMER_STOP)
-            {
-                removed = this._stopEvents.splice(this._stopEvents.indexOf(event), 1);
-            }
-
-            if (removed.length === 1)
-            {
-                return true;
-            }
-            else
-            {
-                return false;
-            }
-
-        }
-
-        /**
-        * Removes all TimerEvent objects from this Timer
-        * @method clear
-        * @param type {Number} The type of TimerEvents to remove. Set to zero to remove them all.
-        * @return {boolean} True if the event was removed, otherwise false.
-        * @public
-        */
-        public clear(type:number = 0) {
-
-            if (type === 0)
-            {
-                this._startEvents.length = 0;
-                this._countEvents.length = 0;
-                this._stopEvents.length = 0;
-            }
-            else if (type === TimerEvent.TIMER_START)
-            {
-                this._startEvents.length = 0;
-            }
-            else if (type === TimerEvent.TIMER_COUNT)
-            {
-                this._countEvents.length = 0;
-            }
-            else if (type === TimerEvent.TIMER_STOP)
-            {
-                this._stopEvents.length = 0;
-            }
-
-        }
-
-	    /**
-	    * Returns a string representation of this object.
-	    * @method toString
-	    * @return {string} a string representation of the instance.
-	    * @public
-        */
-        public toString(): string {
-
-            return "[{Timer (name=" + this.name + " delay=" + this.delay + " repeatCount=" + this.repeatCount + " running=" + this._isRunning + ")}]";
-
-        }
-
-    }
-
-}
\ No newline at end of file
+	/**
+	* The Timer class hooks into a game Clock and allows you run code at a specified point in game time.
+	* Use the start() method to start a timer. Add TimerEvents to set-up code to be run on the timer interval.
+	* Timer objects can run once or repeat at specified intervals to execute code on a schedule.
+	*
+	* @class Timer
+	* @namespace Kiwi.Time
+	* @constructor
+	* @param name {string} The name of the timer.
+	* @param clock {Kiwi.Time.Clock} The game clock instance this Timer is based on.
+	* @param delay {Number} The number of clock units to wait between firing events.
+	* @param [repeatCount=0] {Number} The number of times to repeat the timer before it is expired. If you don't want it to ever expire, set a value of -1.
+	* @return {Kiwi.Time.Timer} This object.
+	*
+	*/
+	export class Timer {
+
+		constructor (name: string, clock: Clock, delay: number, repeatCount: number = 0) {
+
+			this._clock = clock;
+
+			this._startEvents = [];
+			this._countEvents = [];
+			this._stopEvents = [];
+
+			this.name = name;
+			this.delay = delay;
+			this.repeatCount = repeatCount;
+
+		}
+
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} "Timer"
+		* @public
+		*/
+		public objType() {
+			return "Timer";
+		}
+
+		/**
+		* The number of times the timer has repeated so far.
+		* @property _currentCount
+		* @type Number
+		* @default 0 
+		* @private
+		*/
+		private _currentCount: number = 0;
+
+		/**
+		* Get the number of times the timer has repeated.
+		* @method getCurrentCount
+		* @return {Number}
+		* @public
+		*/
+		public currentCount(): number {
+
+			return this._currentCount;
+
+		}
+
+		/**
+		* A collection of the TimerEvents associated with TimerEvent.TIMER_START
+		* @property _startEvents
+		* @type Array
+		* @private
+		*/
+		private _startEvents:TimerEvent[] = null;
+
+		/**
+		* A collection of the TimerEvents associated with TimerEvent.TIMER_COUNT
+		* @property _countEvents
+		* @private
+		* @type Array
+		*/
+		private _countEvents:TimerEvent[] = null;
+
+		/**
+		* A collection of the TimerEvents associated with TimerEvent.TIMER_STOP
+		* @property _stopEvents
+		* @private
+		* @type Array
+		*/
+		private _stopEvents:TimerEvent[] = null;
+
+		/**
+		* The clock which this timer bases its timing on.
+		* @property _clock
+		* @type Kiwi.Time.Clock
+		* @private
+		*/
+		private _clock: Clock = null;
+
+		/**
+		* The time the last repeat occurred in clock units.
+		* @property _timeLastCount
+		* @type Number
+		* @private
+		* @deprecated Better time handling in 1.2.0 deprecates this data.
+		*/
+		private _timeLastCount: number = null;
+
+		/**
+		* Whether the timer is in a running state.
+		* @property _isRunning
+		* @type boolean
+		* @default false
+		* @private
+		*/
+		private _isRunning: boolean = false;
+
+		/**
+		* The Timers current state. True if the Timer is running, otherwise false.
+		* @method running
+		* @return {boolean} 
+		* @public
+		*/
+		public isRunning(): boolean {
+
+			return this._isRunning;
+
+		}
+
+		/**
+		* Whether the timer is in a stopped state.
+		* @property _isStopped
+		* @type boolean
+		* @default true 
+		* @private
+		*/
+		private _isStopped: boolean = true;
+
+		/**
+		* Whether the timer is in a stopped state.
+		* @method stopped
+		* @return {boolean} 
+		* @public
+		*/
+		public isStopped(): boolean {
+
+			return this._isStopped;
+
+		}
+
+		/**
+		* Whether the timer is in a paused state.
+		* @property _isPaused
+		* @type boolean
+		* @default false
+		* @private
+		*/
+		private _isPaused: boolean = false;
+
+		/**
+		* Whether the timer is in a paused state.
+		* @method paused
+		* @return {boolean} 
+		* @public
+		*/
+		public isPaused(): boolean {
+
+			return this._isPaused;
+
+		}
+
+		/**
+		* The name of the timer.
+		* @property name
+		* @type String
+		* @default null
+		* @public 
+		*/
+		public name: string = null;
+
+		/**
+		* The delay, in game clock units, that the timer will wait before firing the event
+		* @property delay
+		* @type Number
+		* @default 0
+		* @public
+		*/
+		public delay: number = 0;
+
+		/**
+		* The number of times the timer will repeat before stopping.
+		* @property repeatCount
+		* @type Number
+		* @default 0
+		* @public
+		*/
+		public repeatCount: number = 0;
+
+		/**
+		* Time elapsed on the current repetition
+		* @property _elapsed
+		* @type number
+		* @private
+		* @since 1.2.0
+		*/
+		private _elapsed: number = 0;
+
+		/**
+		* Clock time on last frame, used to calculate frame length and time elapsed
+		* @property _lastElapsed
+		* @type number
+		* @private
+		* @since 1.2.0
+		*/
+		private _lastElapsed: number;
+		
+		/**
+		* Checks the list of TimerEvents added and processes them based on their type.
+		* @method processEvents
+		* @param type {Number} The type of events to dispatch
+		* @private
+		*/
+		private processEvents(type: number) {
+
+			if (type === TimerEvent.TIMER_START)
+			{
+				for (var i = 0; i < this._startEvents.length; i++)
+				{
+					this._startEvents[i].run();
+				}
+			}
+			else if (type === TimerEvent.TIMER_COUNT)
+			{
+				for (var i = 0; i < this._countEvents.length; i++)
+				{
+					this._countEvents[i].run();
+				}
+			}
+			else if (type === TimerEvent.TIMER_STOP)
+			{
+				for (var i = 0; i < this._stopEvents.length; i++)
+				{
+					this._stopEvents[i].run();
+				}
+			}
+
+		}
+
+		/**
+		* Internal update loop called by the Clock that this Timer belongs to.
+		* @method update
+		* @public
+		*/
+		public update() {
+			var frameLength = this._clock.elapsed() - this._lastElapsed;
+
+			this._lastElapsed = this._clock.elapsed();
+
+			if ( this._isRunning ) {
+				this._elapsed += frameLength;
+			}
+
+			while ( this._elapsed >= this.delay ) {
+				this._currentCount++;
+				this.processEvents( TimerEvent.TIMER_COUNT );
+				this._elapsed -= this.delay;
+
+				if ( this.repeatCount !== -1 && this._currentCount >= this.repeatCount ) {
+					this.stop();
+				}
+			}
+
+			while ( this._elapsed < 0 ) {
+				this._currentCount--;
+				this._elapsed += this.delay;
+
+				// Do not process events; they can happen when time flows forwards
+
+				if ( this._currentCount < 0 ) {
+
+					// Timer has regressed before its creation.
+					// When time flows forward again, the Timer will probably
+					// be restarted and repopulated.
+					// There is a potential memory leak: if a Timer is created
+					// for a single task, and has a TimerEvent that will
+					// remove it upon completion, but the Timer is rewound to
+					// before its creation, that removal will never fire.
+					this.clear();
+					this.stop();
+				}
+			}
+		}
+
+		/**
+		* Start the Timer. This will reset the timer and start it. The timer can only be started if it is in a stopped state.
+		* @method start
+		* @return {Kiwi.Time.Timer} this object.
+		* @public
+		*/
+		public start(): Timer {
+
+			if (this._isStopped === true)
+			{
+				this._isRunning = true;
+				this._isPaused = false;
+				this._isStopped = false;
+
+				this._currentCount = 0;
+
+				this._elapsed = 0;
+				this._lastElapsed = this._clock.elapsed() || 0;
+
+				this.processEvents(TimerEvent.TIMER_START);
+			}
+
+			return this;
+		}
+
+		/**
+		* Stop the Timer. Only possible when the timer is running or paused.
+		* @method stop
+		* @return {Kiwi.Time.Timer} this object.
+		* @public
+		*/
+		public stop():Timer {
+
+			if (this._isRunning === true || this._isPaused === true)
+			{
+				this._isRunning = false;
+				this._isPaused = false;
+				this._isStopped = true;
+
+				this.processEvents(TimerEvent.TIMER_STOP);
+			}
+
+			return this;
+
+		}
+
+		/**
+		* Pause the Timer. Only possible when the timer is running.
+		* @method pause
+		* @return {Kiwi.Time.Timer} this object.
+		* @public
+		*/
+		public pause():Timer {
+
+			if (this._isRunning === true)
+			{
+				this._isRunning = false;
+				this._isPaused = true;
+			}
+
+			return this;
+		}
+
+		/**
+		* Resume the Timer. Only possible if the timer has been paused.
+		* @method resume
+		* @return {Kiwi.Time.Timer} this object.
+		* @public
+		*/
+		public resume(): Timer {
+
+			if (this._isPaused === true)
+			{
+				this._isRunning = true;
+				this._isPaused = false;
+			}
+
+			return this;
+
+		}
+
+		/**
+		* Adds an existing TimerEvent object to this Timer.
+		* @method addTimerEvent
+		* @param {Kiwi.Time.TimerEvent} A TimerEvent object
+		* @return {Kiwi.Time.TimerEvent} The TimerEvent object
+		* @public
+		*/
+		public addTimerEvent(event:TimerEvent):TimerEvent {
+
+			if (event.type === TimerEvent.TIMER_START)
+			{
+				this._startEvents.push(event);
+			}
+			else if (event.type === TimerEvent.TIMER_COUNT)
+			{
+				this._countEvents.push(event);
+			}
+			else if (event.type === TimerEvent.TIMER_STOP)
+			{
+				this._stopEvents.push(event);
+			}
+
+			return event;
+
+		}
+
+		/**
+		* Creates a new TimerEvent and adds it to this Timer
+		* @method createTimerEvent
+		* @param type {Number} The type of TimerEvent to create (TIMER_START, TIMER_COUNT or TIMER_STOP).
+		* @param callback {Function} The function to call when the TimerEvent fires.
+		* @param context {Function} The context in which the given function will run (usually 'this')
+		* @return {Kiwi.Time.TimerEvent} The newly created TimerEvent.
+		* @public
+		*/
+		public createTimerEvent(type:number, callback, context):TimerEvent {
+
+			if (type === TimerEvent.TIMER_START)
+			{
+				this._startEvents.push(new TimerEvent(type, callback, context));
+				return this._startEvents[this._startEvents.length - 1];
+			}
+			else if (type === TimerEvent.TIMER_COUNT)
+			{
+				this._countEvents.push(new TimerEvent(type, callback, context));
+				return this._countEvents[this._countEvents.length - 1];
+			}
+			else if (type === TimerEvent.TIMER_STOP)
+			{
+				this._stopEvents.push(new TimerEvent(type, callback, context));
+				return this._stopEvents[this._stopEvents.length - 1];
+			}
+
+			return null;
+
+		}
+
+		/**
+		* Removes a TimerEvent object from this Timer
+		* @method removeTimerEvent
+		* @param {Kiwi.Time.TimerEvent} The TimerEvent to remove
+		* @return {boolean} True if the event was removed, otherwise false.
+		* @public
+		*/
+		public removeTimerEvent(event:TimerEvent):boolean {
+
+			var removed = [];
+
+			if (event.type === TimerEvent.TIMER_START)
+			{
+				removed = this._startEvents.splice(this._startEvents.indexOf(event), 1);
+			}
+			else if (event.type === TimerEvent.TIMER_COUNT)
+			{
+				removed = this._countEvents.splice(this._countEvents.indexOf(event), 1);
+			}
+			else if (event.type === TimerEvent.TIMER_STOP)
+			{
+				removed = this._stopEvents.splice(this._stopEvents.indexOf(event), 1);
+			}
+
+			if (removed.length === 1)
+			{
+				return true;
+			}
+			else
+			{
+				return false;
+			}
+
+		}
+
+		/**
+		* Removes all TimerEvent objects from this Timer
+		* @method clear
+		* @param type {Number} The type of TimerEvents to remove. Set to zero to remove them all.
+		* @return {boolean} True if the event was removed, otherwise false.
+		* @public
+		*/
+		public clear(type:number = 0) {
+
+			if (type === 0)
+			{
+				this._startEvents.length = 0;
+				this._countEvents.length = 0;
+				this._stopEvents.length = 0;
+			}
+			else if (type === TimerEvent.TIMER_START)
+			{
+				this._startEvents.length = 0;
+			}
+			else if (type === TimerEvent.TIMER_COUNT)
+			{
+				this._countEvents.length = 0;
+			}
+			else if (type === TimerEvent.TIMER_STOP)
+			{
+				this._stopEvents.length = 0;
+			}
+
+		}
+
+		/**
+		* Returns a string representation of this object.
+		* @method toString
+		* @return {string} a string representation of the instance.
+		* @public
+		*/
+		public toString(): string {
+
+			return "[{Timer (name=" + this.name + " delay=" + this.delay + " repeatCount=" + this.repeatCount + " running=" + this._isRunning + ")}]";
+
+		}
+
+	}
+
+}
diff --git a/src/time/TimerEvent.ts b/src/time/TimerEvent.ts
index d52ab86..e67c380 100644
--- a/src/time/TimerEvent.ts
+++ b/src/time/TimerEvent.ts
@@ -3,112 +3,112 @@
 * @module Kiwi
 * @submodule Time
 *
-*/ 
+*/
 
 module Kiwi.Time {
 
-    /**
-    * A TimerEvent hooks into a Timer and is an object that is generated when you are wanting to executed a callback at a specific point in time. 
-    *
-    * @class TimerEvent
-    * @namespace Kiwi.Time
-    * @constructor
-    * @param type {Number} The type of TimerEvent that this is. 
-    * @param callback {Any} The method that is to be executed when the event occurs.
-    * @param context {Any} The context that the callback is to be called in.
-    * @return {Kiwi.Time.TimerEvent} This Object.
-    */
-    export class TimerEvent {
-         
-        constructor (type:number, callback, context) {
+	/**
+	* A TimerEvent hooks into a Timer and is an object that is generated when you are wanting to executed a callback at a specific point in time. 
+	*
+	* @class TimerEvent
+	* @namespace Kiwi.Time
+	* @constructor
+	* @param type {Number} The type of TimerEvent that this is. 
+	* @param callback {Any} The method that is to be executed when the event occurs.
+	* @param context {Any} The context that the callback is to be called in.
+	* @return {Kiwi.Time.TimerEvent} This Object.
+	*/
+	export class TimerEvent {
+		 
+		constructor (type:number, callback, context) {
 
-            this.type = type;
-            this._callback = callback;
-            this._callbackContext = context;
+			this.type = type;
+			this._callback = callback;
+			this._callbackContext = context;
 
-        }
+		}
 
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} "TimerEvent"
-        * @public
-        */
-        public objType() {
-            return "TimerEvent";
-        }
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} "TimerEvent"
+		* @public
+		*/
+		public objType() {
+			return "TimerEvent";
+		}
 
-        /**
-        * Name for the event fired when a timer starts.
-        * @property TIMER_START
-        * @type number
-        * @final
-        * @static
-        * @public
-        * @default 1
-        */
-        public static TIMER_START: number = 1;
+		/**
+		* Name for the event fired when a timer starts.
+		* @property TIMER_START
+		* @type number
+		* @final
+		* @static
+		* @public
+		* @default 1
+		*/
+		public static TIMER_START: number = 1;
 
-        /**
-        * Name for the event fired when a timer repeats.
-        * @property TIMER_COUNT
-        * @public
-        * @type string
-        * @final
-        * @static
-        * @default 2
-        */
-        public static TIMER_COUNT: number = 2;
+		/**
+		* Name for the event fired when a timer repeats.
+		* @property TIMER_COUNT
+		* @public
+		* @type string
+		* @final
+		* @static
+		* @default 2
+		*/
+		public static TIMER_COUNT: number = 2;
 
-        /**
-        * Name for the event fired when a timer stops.
-        * @property TIMER_STOP
-        * @type string
-        * @final
-        * @static
-        * @public
-        * @default 3
-        */
-        public static TIMER_STOP: number = 3;
+		/**
+		* Name for the event fired when a timer stops.
+		* @property TIMER_STOP
+		* @type string
+		* @final
+		* @static
+		* @public
+		* @default 3
+		*/
+		public static TIMER_STOP: number = 3;
 
-        /**
-        * The callback to be called when this TimerEvent triggers
-        * @property _callback
-        * @type Function
-        * @private
-        */
-        private _callback = null;
+		/**
+		* The callback to be called when this TimerEvent triggers
+		* @property _callback
+		* @type Function
+		* @private
+		*/
+		private _callback = null;
 
-        /**
-        * The context in which the callback will be fired
-        * @property _callbackContext
-        * @type Function
-        * @private
-        */
-        private _callbackContext;
+		/**
+		* The context in which the callback will be fired
+		* @property _callbackContext
+		* @type Function
+		* @private
+		*/
+		private _callbackContext;
 
-        /**
-        * The type of TimerEvent
-        * @property type
-        * @type Function 
-        * @public
-        */
-        public type: number = 0;
-        
-        /**
-        * Fires the callback associated with this TimerEvent
-        * @method run
-        * @public
-        */
-        public run() {
+		/**
+		* The type of TimerEvent
+		* @property type
+		* @type Function 
+		* @public
+		*/
+		public type: number = 0;
+		
+		/**
+		* Fires the callback associated with this TimerEvent
+		* @method run
+		* @public
+		*/
+		public run() {
 
-            if (this._callback)
-            {
-                this._callback.apply(this._callbackContext);
-            }
+			if (this._callback)
+			{
+				this._callback.apply(this._callbackContext);
+			}
 
-        }
+		}
 
-    }
+	}
 
-}
\ No newline at end of file
+}
diff --git a/src/utils/Canvas.ts b/src/utils/Canvas.ts
index 1826a5b..7bb0a96 100644
--- a/src/utils/Canvas.ts
+++ b/src/utils/Canvas.ts
@@ -5,341 +5,341 @@
 */
 module Kiwi.Utils {
 
-    /**
-    * Creates and the manages a Canvas DOMElement.
-    * 
-    * @class Canvas
-    * @namespace Kiwi.Utils
-    * @constructor
-    * @param width {Number} The width of the canvas.
-    * @param height {Number} The height of the canvas.
-    * @param [visible=true] {boolean} If the canvas is visible or not.
-    * @param [offScreen=false] {boolean} If the canvas is designed to be offscreen or not.
-    * @return {Kiwi.Utils.Canvas} 
-    *
-    */
-    export class Canvas {
-         
-        constructor (width: number, height: number, visible: boolean = true, offScreen: boolean = false) {
-
-            this.domElement = <HTMLCanvasElement> document.createElement("canvas");
-            this.domElement.width = width;
-            this.domElement.height = height;
-
-            this._width = width;
-            this._height = height;
-
-            this.context = this.domElement.getContext("2d");
-
-            this._offScreen = offScreen;
-            this._visible = visible;
-
-            if (visible === false)
-            {
-                this.domElement.style.display = "none";
-            }
-
-            this._bgColor = new Kiwi.Utils.Color( 0, 0, 0 );
-
-        }
-
-        /**
-        * The width of this canvas.
-        * @property _width
-        * @type number
-        * @private
-        */
-        private _width: number;
-
-        /**
-        * The width of this canvas.
-        * @property width
-        * @type number
-        * @public
-        */
-        public set width(value: number) {
-            this._width = value;
-            this._updatedSize();
-        }
-        public get width(): number {
-            return this._width;
-        }
-
-        /**
-        * The height of this canvas.
-        * @property _height
-        * @type number
-        * @private
-        */
-        private _height: number;
-
-        /**
-        * The height of this canvas.
-        * @property height
-        * @type number
-        * @private
-        */
-        public set height(value: number) {
-            this._height = value;
-            this._updatedSize();
-        }
-        public get height(): number {
-            return this._height;
-        }
-
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} "Canvas"
-        * @public
-        */
-        public objType() {
-            return "Canvas";
-        }
-
-        /**
-        * The canvas DOM element.
-        * @property domElement
-        * @type HTMLCanvasElement
-        * @public
-	    */
-        public domElement = <HTMLCanvasElement> null;
-
-        /**
-        * The 2D rendering context that is used to render anything to this canvas.
-        * @property _context
-        * @type CanvasRenderingContext2D
-	    * @public
-        */
-        public context = <CanvasRenderingContext2D> null;
-
-        /**
-        * If the canvas element is visible or not.
-        * @property _visible
-        * @type boolean
-        * @private
-	    */
-        private _visible = true;
-
-        /**
-        * If the canvas is offscreen or not.
-        * @property _offScreen
-        * @type boolean
-        * @private
-	    */
-        private _offScreen = false;
-
-        /**
-        * The method to use when clearing the canvas.
-        * @property _clearMode
-        * @type Number
-        * @private
-	    */
-        private _clearMode: number = 1;
-
-        /**
-        * A STATIC property that holds the number associated with no clear mode.
-        * @property CLEARMODE_NONE
-        * @type Number
-        * @static
-        * @final
-        * @default 0
-        * @public
+	/**
+	* Creates and the manages a Canvas DOMElement.
+	* 
+	* @class Canvas
+	* @namespace Kiwi.Utils
+	* @constructor
+	* @param width {Number} The width of the canvas.
+	* @param height {Number} The height of the canvas.
+	* @param [visible=true] {boolean} If the canvas is visible or not.
+	* @param [offScreen=false] {boolean} If the canvas is designed to be offscreen or not.
+	* @return {Kiwi.Utils.Canvas} 
+	*
+	*/
+	export class Canvas {
+
+		constructor (width: number, height: number, visible: boolean = true, offScreen: boolean = false) {
+
+			this.domElement = <HTMLCanvasElement> document.createElement("canvas");
+			this.domElement.width = width;
+			this.domElement.height = height;
+
+			this._width = width;
+			this._height = height;
+
+			this.context = this.domElement.getContext("2d");
+
+			this._offScreen = offScreen;
+			this._visible = visible;
+
+			if (visible === false)
+			{
+				this.domElement.style.display = "none";
+			}
+
+			this._bgColor = new Kiwi.Utils.Color( 0, 0, 0 );
+
+		}
+
+		/**
+		* The width of this canvas.
+		* @property _width
+		* @type number
+		* @private
 		*/
-        public static CLEARMODE_NONE: number = 0;
-
-        /**
-        * A STATIC property that holds the number associated with the clear mode that uses the clearRect method to clear the canvas.
-        * @property CLEARMODE_CLEARRECT
-        * @type Number
-        * @static
-        * @final
-        * @public
-        * @default 1
+		private _width: number;
+
+		/**
+		* The width of this canvas.
+		* @property width
+		* @type number
+		* @public
+		*/
+		public set width(value: number) {
+			this._width = value;
+			this._updatedSize();
+		}
+		public get width(): number {
+			return this._width;
+		}
+
+		/**
+		* The height of this canvas.
+		* @property _height
+		* @type number
+		* @private
+		*/
+		private _height: number;
+
+		/**
+		* The height of this canvas.
+		* @property height
+		* @type number
+		* @private
+		*/
+		public set height(value: number) {
+			this._height = value;
+			this._updatedSize();
+		}
+		public get height(): number {
+			return this._height;
+		}
+
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} "Canvas"
+		* @public
+		*/
+		public objType() {
+			return "Canvas";
+		}
+
+		/**
+		* The canvas DOM element.
+		* @property domElement
+		* @type HTMLCanvasElement
+		* @public
+		*/
+		public domElement = <HTMLCanvasElement> null;
+
+		/**
+		* The 2D rendering context that is used to render anything to this canvas.
+		* @property _context
+		* @type CanvasRenderingContext2D
+		* @public
+		*/
+		public context = <CanvasRenderingContext2D> null;
+
+		/**
+		* If the canvas element is visible or not.
+		* @property _visible
+		* @type boolean
+		* @private
+		*/
+		private _visible = true;
+
+		/**
+		* If the canvas is offscreen or not.
+		* @property _offScreen
+		* @type boolean
+		* @private
+		*/
+		private _offScreen = false;
+
+		/**
+		* The method to use when clearing the canvas.
+		* @property _clearMode
+		* @type Number
+		* @private
+		*/
+		private _clearMode: number = 1;
+
+		/**
+		* A STATIC property that holds the number associated with no clear mode.
+		* @property CLEARMODE_NONE
+		* @type Number
+		* @static
+		* @final
+		* @default 0
+		* @public
+		*/
+		public static CLEARMODE_NONE: number = 0;
+
+		/**
+		* A STATIC property that holds the number associated with the clear mode that uses the clearRect method to clear the canvas.
+		* @property CLEARMODE_CLEARRECT
+		* @type Number
+		* @static
+		* @final
+		* @public
+		* @default 1
+		*/
+		public static CLEARMODE_CLEARRECT: number = 1;
+
+		/**
+		* A STATIC property that holds the number associated with the clear mode that uses a filled rectangle to clear the canvas.
+		* @property CLEARMODE_FILLRECT 
+		* @type Number
+		* @static
+		* @final
+		* @public
+		* @default 2
+		*/
+		public static CLEARMODE_FILLRECT: number = 2;
+
+		/**
+		* A STATIC property that holds the number associated with the clear mode that uses the filled alpha rectangle method.
+		* @property CLEARMODE_FILLRECT_ALPHA
+		* @type Number
+		* @static
+		* @final
+		* @public
+		* @default 3
+		*/
+		public static CLEARMODE_FILLRECT_ALPHA: number = 3;
+
+		/**
+		* The background color to use clearing the canvas using a filled rectangle approach.
+		* You may set this with any valid Kiwi.Utils.Color parameter.
+		* If you set with multiple parameters, place them inside an array.
+		* @property bgColor
+		* @type String
+		* @default "#000000"
+		* @public
 		*/
-        public static CLEARMODE_CLEARRECT: number = 1;
-
-        /**
-        * A STATIC property that holds the number associated with the clear mode that uses a filled rectangle to clear the canvas.
-        * @property CLEARMODE_FILLRECT 
-        * @type Number
-        * @static
-        * @final
-        * @public
-        * @default 2
+		public get bgColor(): any {
+			return "#" + this._bgColor.getHex();
+		}
+
+		public set bgColor( value: any ) {
+			if ( !Kiwi.Utils.Common.isArray( value ) ) {
+				value = [ value ];
+			}
+			this._bgColor.set.apply( this._bgColor, value );
+		}
+
+		/**
+		* Background color object.
+		* @property _bgColor
+		* @type Kiwi.Utils.Color
+		* @private
+		* @since 1.2.0
 		*/
-        public static CLEARMODE_FILLRECT: number = 2;
-
-        /**
-        * A STATIC property that holds the number associated with the clear mode that uses the filled alpha rectangle method.
-        * @property CLEARMODE_FILLRECT_ALPHA
-        * @type Number
-        * @static
-        * @final
-        * @public
-        * @default 3
+		private _bgColor: Kiwi.Utils.Color;
+
+		/**
+		* Updates the width/height on the canvas DOM element when either one of its sizes are updated.
+		* @method _updatedSize
+		* @private
 		*/
-        public static CLEARMODE_FILLRECT_ALPHA: number = 3;
-
-        /**
-        * The background color to use clearing the canvas using a filled rectangle approach.
-        * You may set this with any valid Kiwi.Utils.Color parameter.
-        * If you set with multiple parameters, place them inside an array.
-        * @property bgColor
-        * @type String
-        * @default "#000000"
-        * @public
-        */
-        public get bgColor(): any {
-            return "#" + this._bgColor.getHex();
-        }
-
-        public set bgColor( value: any ) {
-            if ( !Kiwi.Utils.Common.isArray( value ) ) {
-                value = [ value ];
-            }
-            this._bgColor.set.apply( this._bgColor, value );
-        }
-
-        /**
-        * Background color object.
-        * @property _bgColor
-        * @type Kiwi.Utils.Color
-        * @private
-        * @since 1.2.0
-        */
-        private _bgColor: Kiwi.Utils.Color;
-
-        /**
-        * Updates the width/height on the canvas DOM element when either one of its sizes are updated.
-        * @method _updatedSize
-        * @private
-        */
-        private _updatedSize() {
-
-            this.domElement.width = this._width;
-            this.domElement.height = this._height;
-
-        }
-
-        /**
-        * Used to remove the canvas element completely along with this class. [NEEDS IMPLEMENTATION]
-        * @method destroy
-        * @public
+		private _updatedSize() {
+
+			this.domElement.width = this._width;
+			this.domElement.height = this._height;
+
+		}
+
+		/**
+		* Used to remove the canvas element completely along with this class. [NEEDS IMPLEMENTATION]
+		* @method destroy
+		* @public
 		*/
-        public destroy() {
-
-            if (this._offScreen === false)
-            {
-                this.domElement.style.display = "none";
-              
-            }
-
-        }
-
-        /**
-        * If the canvas element is visible or not.
-        * @property visible
-        * @type boolean
-        * @default true
-        * @public
-        */
-        public set visible(value: boolean) {
-
-            if (value !== null && value !== this._visible)
-            {
-                this._visible = value;
-
-                if (value === true)
-                {
-                    this.domElement.style.display = "block";
-
-                }
-                else
-                {
-                    this.domElement.style.display = "none";
-                }
-            }
-
-        }
-        public get visible(): boolean {
-
-            return this._visible;
-
-        }
-
-        /** 
-        * The clearmode the is to be used when clearing the canvas.
-        * @property clearMode
-        * @type Number
-        * @default 1
-        * @public 
-        */
-        public set clearMode(value: number) {
-
-            if (value !== null && value !== this._clearMode && value >= Kiwi.Utils.Canvas.CLEARMODE_NONE && value <= Kiwi.Utils.Canvas.CLEARMODE_FILLRECT_ALPHA)
-            {
-                this._clearMode = value;
-            }
-
-        }
-        public get clearMode(): number {
-
-            return this._clearMode;
-
-        }
-
-        /**
-        * Clears the canvas using the method specified by the clearMode property.
-        * @method clear
-        * @public
+		public destroy() {
+
+			if (this._offScreen === false)
+			{
+				this.domElement.style.display = "none";
+			  
+			}
+
+		}
+
+		/**
+		* If the canvas element is visible or not.
+		* @property visible
+		* @type boolean
+		* @default true
+		* @public
 		*/
-        public clear() {
-            
-		    if (this._clearMode === Canvas.CLEARMODE_NONE) {
-                //  Do nothing
-		    } else if (this._clearMode === Canvas.CLEARMODE_CLEARRECT) {
-                //  Clear Rect
-			    this.context.clearRect(0, 0, this.domElement.width, this.domElement.height);
-			    
-		    } else if (this._clearMode === Canvas.CLEARMODE_FILLRECT) {
-                //  Fill Rect Solid
-			    this.context.fillStyle = this.bgColor;
-			    this.context.fillRect(0, 0, this.domElement.width, this.domElement.height);
-                
-		    } else if (this._clearMode === Canvas.CLEARMODE_FILLRECT_ALPHA) {
-                //  Clear Rect + Fill Rect (only use if bgColor contains alpha < 255)
-			    this.context.clearRect(0, 0, this.domElement.width, this.domElement.height);
-			    this.context.fillStyle = this.bgColor;
-			    this.context.fillRect(0, 0, this.domElement.width, this.domElement.height);
-		    }
-
-        }
-
-        /**
-        * Returns the canvas current image data as PNG.
-        * @method saveAsPNG
-        * @return String
-        * @public
+		public set visible(value: boolean) {
+
+			if (value !== null && value !== this._visible)
+			{
+				this._visible = value;
+
+				if (value === true)
+				{
+					this.domElement.style.display = "block";
+
+				}
+				else
+				{
+					this.domElement.style.display = "none";
+				}
+			}
+
+		}
+		public get visible(): boolean {
+
+			return this._visible;
+
+		}
+
+		/** 
+		* The clearmode the is to be used when clearing the canvas.
+		* @property clearMode
+		* @type Number
+		* @default 1
+		* @public 
 		*/
-        public saveAsPNG() {
+		public set clearMode(value: number) {
+
+			if (value !== null && value !== this._clearMode && value >= Kiwi.Utils.Canvas.CLEARMODE_NONE && value <= Kiwi.Utils.Canvas.CLEARMODE_FILLRECT_ALPHA)
+			{
+				this._clearMode = value;
+			}
+
+		}
+		public get clearMode(): number {
 
-            return this.domElement.toDataURL();
+			return this._clearMode;
 
-        }
+		}
 
-	    /**
-	    * Returns a string representation of this object.
-	    * @method toString
-	    * @return {string} a string representation of the instance.
-        * @public
-	    */
-	    public toString():string {
+		/**
+		* Clears the canvas using the method specified by the clearMode property.
+		* @method clear
+		* @public
+		*/
+		public clear() {
+			
+			if (this._clearMode === Canvas.CLEARMODE_NONE) {
+				//  Do nothing
+			} else if (this._clearMode === Canvas.CLEARMODE_CLEARRECT) {
+				//  Clear Rect
+				this.context.clearRect(0, 0, this.domElement.width, this.domElement.height);
+				
+			} else if (this._clearMode === Canvas.CLEARMODE_FILLRECT) {
+				//  Fill Rect Solid
+				this.context.fillStyle = this.bgColor;
+				this.context.fillRect(0, 0, this.domElement.width, this.domElement.height);
+				
+			} else if (this._clearMode === Canvas.CLEARMODE_FILLRECT_ALPHA) {
+				//  Clear Rect + Fill Rect (only use if bgColor contains alpha < 255)
+				this.context.clearRect(0, 0, this.domElement.width, this.domElement.height);
+				this.context.fillStyle = this.bgColor;
+				this.context.fillRect(0, 0, this.domElement.width, this.domElement.height);
+			}
+
+		}
+
+		/**
+		* Returns the canvas current image data as PNG.
+		* @method saveAsPNG
+		* @return String
+		* @public
+		*/
+		public saveAsPNG() {
+
+			return this.domElement.toDataURL();
+
+		}
+
+		/**
+		* Returns a string representation of this object.
+		* @method toString
+		* @return {string} a string representation of the instance.
+		* @public
+		*/
+		public toString():string {
 		
-		    return "[{Canvas (width=" + this.width + " height=" + this.height + " visible=" + this.visible + " offScreen=" + this._offScreen + " clearMode=" + this.clearMode + ")}]";
+			return "[{Canvas (width=" + this.width + " height=" + this.height + " visible=" + this.visible + " offScreen=" + this._offScreen + " clearMode=" + this.clearMode + ")}]";
 
-	    }
+		}
 
-    }
+	}
 
-}
\ No newline at end of file
+}
diff --git a/src/utils/Common.ts b/src/utils/Common.ts
index 426629a..003db4a 100644
--- a/src/utils/Common.ts
+++ b/src/utils/Common.ts
@@ -8,327 +8,327 @@
 
 module Kiwi.Utils {
 
-    /**
-    * Methods to assist in working with Structs.
-    * A lot of the functions in this class are Copyright 2012 Mauricio Santos and used with permission.
-    * His work is licensed under the Apache License, Version 2.0 (the "License")
-    *
-    * @class Common
-    * @namespace Kiwi.Utils
-    * @static
-    *
-    * @author Mauricio Santos
-    */
-    export class Common {
-
-        /**
-        * Default function to compare element order.
-        * @method defaultCompare
-        * @param {Any} a.
-        * @param {Any} b.
-        * @return {Number}
-        * @static
-        */
-        public static defaultCompare(a, b) {
-
-            if (a < b)
-            {
-                return -1;
-            }
-            else if (a === b)
-            {
-                return 0;
-            }
-            else
-            {
-                return 1;
-            }
-
-        }
-
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} "Common"
-        * @public
-        */
-        public objType() {
-            return "Common";
-        }
-
-        /**
-        * Default function to test equality.
-        * @method defaultEquals
-        * @param {Any} a
-        * @param {Any} b
-        * @return {boolean}
-        * @static
-        * @public
-        */
-        public static defaultEquals(a, b) {
-
-            return a === b;
-
-        }
-
-        /**
-        * Default function to convert an object to a string.
-        * @method defaultToString
-        * @param item {Any}
-        * @return {Any}
-        * @static
-        * @public
-        */
-        public static defaultToString(item) {
-
-            if (item === null)
-            {
-                return 'KIWI_NULL';
-            }
-            else if (Kiwi.Utils.Common.isUndefined(item))
-            {
-                return 'KIWI_UNDEFINED';
-            }
-            else if (Kiwi.Utils.Common.isString(item))
-            {
-                return item;
-            }
-            else
-            {
-                return item.toString();
-            }
-
-        }
-
-        /**
-        * Returns a boolean indicating whether x is between two parameters passed.
-        *
-        * @method isBetween
-        * @param x {Number} The values to be checked
-        * @param min {Number} The minimum value 
-        * @param max {Number} The maximum value
-        * @return {Boolean} 
-        * @static
-        * @public
-        */
-        public static isBetween(x, min, max):boolean {
-
-            return (x > min && x < max);
-
-        }
-
-        /**
-        * Checks if the given argument is a function.
-        * @method isFunction
-        * @param {Any} func.
-        * @return {boolean}
-        * @static
-        * @public
-        */
-        public static isFunction(func) {
-
-            return (typeof func) === 'function';
-
-        }
-
-        /**
-        * Checks if the given value is numeric.
-        * @method isNumeric
-        * @param value {Any}
-        * @return {Boolean}
-        * @static
-        * @public
-        */
-        public static isNumeric(value) {
-
-            return !isNaN(value);
-
-        }
-
-        /**
-        * Checks if the given argument is undefined.
-        * @method isUndefined
-        * @param {Any} obj
-        * @return {boolean}
-        * @static
-        * @public
-        */
-        public static isUndefined(obj) {
-
-            return (typeof obj) === 'undefined';
-
-        }
-
-        /**
-        * Checks if the given argument is a string.
-        * @method isString
-        * @param {Any} obj
-        * @return {boolean}
-        * @static
-        * @public
-        */
-        public static isString(obj) {
-
-            return Object.prototype.toString.call(obj) === '[object String]';
-
-        }
-
-        /**
-        * Checks if the given argument is a array.
-        * @method isArray
-        * @param {Any} obj
-        * @return {boolean}
-        * @static
-        * @public
-        */
-        public static isArray(obj) {
-
-            return Object.prototype.toString.call(obj) === "[object Array]";
-
-        }
-
-        /**
-        * Checks if the given argument is an object.
-        * @method isObject 
-        * @param {Any} obj
-        * @return {boolean}
-        * @static
-        * @public
-        */
-        public static isObject(obj) {
-            return Object.prototype.toString.call(obj) === "[object Object]";
-        }
-
-        /**
-        * Reverses a compare function.
-        * @method reverseCompareFunction
-        * @param {Any} compareFunction
-        * @return {Number}
-        * @static
-        * @public
-        */
-        public static reverseCompareFunction(compareFunction) {
-
-            if (!Kiwi.Utils.Common.isFunction(compareFunction))
-            {
-                return function (a, b) {
-                    if (a < b)
-                    {
-                        return 1;
-                    }
-                    else if (a === b)
-                    {
-                        return 0;
-                    }
-                    else
-                    {
-                        return -1;
-                    }
-                };
-            }
-            else
-            {
-                return function (d, v) {
-                    return compareFunction(d, v) * -1;
-                };
-            }
-
-        }
-
-        /**
-        * Returns an equal function given a compare function.
-        * @method compareToEquals
-        * @param {Any} compareFunction
-        * @return {boolean}
-        * @static
-        * @public
-        */
-        public static compareToEquals(compareFunction) {
-
-            return function (a, b) {
-                return compareFunction(a, b) === 0;
-            };
-
-        }
-
-        /**
-        * Shuffles the contents of an array given into a random order.
-        * @method shuffleArray
-        * @param array {Any}
-        * @return {Any} What you passed but the with the contents in a new order.
-        * @static
-        * @public
-        */
-        public static shuffleArray(array) {
-
-            for (var i = array.length - 1; i > 0; i--)
-            {
-                var j = Math.floor(Math.random() * (i + 1));
-                var temp = array[i];
-                array[i] = array[j];
-                array[j] = temp;
-            }
-
-            return array;
-
-        }
-
-        /**
-        * An array containing all of the base2sizes that are allowed.
-        * This is used when creating a new TextureAtlas/or resizing a Image to be rendered in WebGL.
-        * @property base2Sizes
-        * @type number[]
-        * @public
-        * @static
-        */
-        public static base2Sizes: number[] = [2, 4, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096];
-
-        /**
-        * A method that checks to see if an Image or Canvas that is passed has base2 proportions. 
-        * If it doesn't the image is created on a Canvas and that Canvas is returned.
-        * Used mainly when creating TextureAtlases for WebGL. 
-        * @method convertToBase2
-        * @param imageFile {HTMLImageElement/HTMLCanvasElement} The image or canvas element that is to be converted into a base2size. 
-        * @return {HTMLImageElement/HTMLCanvasElement} The image that was passed (if it was already at base2 dimensions) or a new canvas element if it wasn't.
-        * @static
-        * @public
-        */
-        public static convertToBase2(image: any): any {
-            
-            //Get the width/height
-            var width = image.width;
-            var height = image.height
-
-            //Check to see if the width is base2
-            if (this.base2Sizes.indexOf(width) == -1) {
-                var i = 0;
-                while (width > this.base2Sizes[i]) i++;
-                width = this.base2Sizes[i];
-            }
-
-            //Check to see if the height is base2
-            if (this.base2Sizes.indexOf(height) == -1) {
-                var i = 0;
-                while (height > this.base2Sizes[i]) i++;
-                height = this.base2Sizes[i];
-            }
-
-
-            //If either of them did not have a base2 size then create a canvas and create a new canvas.
-            if (image.width !== width || image.height !== height) {
-
-                //Is it already a canvas?
-                var canvas = document.createElement('canvas');
-                canvas.width = width;
-                canvas.height = height;
-                canvas.getContext("2d").drawImage(image, 0, 0);
-
-                return canvas;
-            }
-
-            return image;
-        }
-
-    }
+	/**
+	* Methods to assist in working with Structs.
+	* A lot of the functions in this class are Copyright 2012 Mauricio Santos and used with permission.
+	* His work is licensed under the Apache License, Version 2.0 (the "License")
+	*
+	* @class Common
+	* @namespace Kiwi.Utils
+	* @static
+	*
+	* @author Mauricio Santos
+	*/
+	export class Common {
+
+		/**
+		* Default function to compare element order.
+		* @method defaultCompare
+		* @param {Any} a.
+		* @param {Any} b.
+		* @return {Number}
+		* @static
+		*/
+		public static defaultCompare(a, b) {
+
+			if (a < b)
+			{
+				return -1;
+			}
+			else if (a === b)
+			{
+				return 0;
+			}
+			else
+			{
+				return 1;
+			}
+
+		}
+
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} "Common"
+		* @public
+		*/
+		public objType() {
+			return "Common";
+		}
+
+		/**
+		* Default function to test equality.
+		* @method defaultEquals
+		* @param {Any} a
+		* @param {Any} b
+		* @return {boolean}
+		* @static
+		* @public
+		*/
+		public static defaultEquals(a, b) {
+
+			return a === b;
+
+		}
+
+		/**
+		* Default function to convert an object to a string.
+		* @method defaultToString
+		* @param item {Any}
+		* @return {Any}
+		* @static
+		* @public
+		*/
+		public static defaultToString(item) {
+
+			if (item === null)
+			{
+				return 'KIWI_NULL';
+			}
+			else if (Kiwi.Utils.Common.isUndefined(item))
+			{
+				return 'KIWI_UNDEFINED';
+			}
+			else if (Kiwi.Utils.Common.isString(item))
+			{
+				return item;
+			}
+			else
+			{
+				return item.toString();
+			}
+
+		}
+
+		/**
+		* Returns a boolean indicating whether x is between two parameters passed.
+		*
+		* @method isBetween
+		* @param x {Number} The values to be checked
+		* @param min {Number} The minimum value 
+		* @param max {Number} The maximum value
+		* @return {Boolean} 
+		* @static
+		* @public
+		*/
+		public static isBetween(x, min, max):boolean {
+
+			return (x > min && x < max);
+
+		}
+
+		/**
+		* Checks if the given argument is a function.
+		* @method isFunction
+		* @param {Any} func.
+		* @return {boolean}
+		* @static
+		* @public
+		*/
+		public static isFunction(func) {
+
+			return (typeof func) === 'function';
+
+		}
+
+		/**
+		* Checks if the given value is numeric.
+		* @method isNumeric
+		* @param value {Any}
+		* @return {Boolean}
+		* @static
+		* @public
+		*/
+		public static isNumeric(value) {
+
+			return !isNaN(value);
+
+		}
+
+		/**
+		* Checks if the given argument is undefined.
+		* @method isUndefined
+		* @param {Any} obj
+		* @return {boolean}
+		* @static
+		* @public
+		*/
+		public static isUndefined(obj) {
+
+			return (typeof obj) === 'undefined';
+
+		}
+
+		/**
+		* Checks if the given argument is a string.
+		* @method isString
+		* @param {Any} obj
+		* @return {boolean}
+		* @static
+		* @public
+		*/
+		public static isString(obj) {
+
+			return Object.prototype.toString.call(obj) === '[object String]';
+
+		}
+
+		/**
+		* Checks if the given argument is a array.
+		* @method isArray
+		* @param {Any} obj
+		* @return {boolean}
+		* @static
+		* @public
+		*/
+		public static isArray(obj) {
+
+			return Object.prototype.toString.call(obj) === "[object Array]";
+
+		}
+
+		/**
+		* Checks if the given argument is an object.
+		* @method isObject 
+		* @param {Any} obj
+		* @return {boolean}
+		* @static
+		* @public
+		*/
+		public static isObject(obj) {
+			return Object.prototype.toString.call(obj) === "[object Object]";
+		}
+
+		/**
+		* Reverses a compare function.
+		* @method reverseCompareFunction
+		* @param {Any} compareFunction
+		* @return {Number}
+		* @static
+		* @public
+		*/
+		public static reverseCompareFunction(compareFunction) {
+
+			if (!Kiwi.Utils.Common.isFunction(compareFunction))
+			{
+				return function (a, b) {
+					if (a < b)
+					{
+						return 1;
+					}
+					else if (a === b)
+					{
+						return 0;
+					}
+					else
+					{
+						return -1;
+					}
+				};
+			}
+			else
+			{
+				return function (d, v) {
+					return compareFunction(d, v) * -1;
+				};
+			}
+
+		}
+
+		/**
+		* Returns an equal function given a compare function.
+		* @method compareToEquals
+		* @param {Any} compareFunction
+		* @return {boolean}
+		* @static
+		* @public
+		*/
+		public static compareToEquals(compareFunction) {
+
+			return function (a, b) {
+				return compareFunction(a, b) === 0;
+			};
+
+		}
+
+		/**
+		* Shuffles the contents of an array given into a random order.
+		* @method shuffleArray
+		* @param array {Any}
+		* @return {Any} What you passed but the with the contents in a new order.
+		* @static
+		* @public
+		*/
+		public static shuffleArray(array) {
+
+			for (var i = array.length - 1; i > 0; i--)
+			{
+				var j = Math.floor(Math.random() * (i + 1));
+				var temp = array[i];
+				array[i] = array[j];
+				array[j] = temp;
+			}
+
+			return array;
+
+		}
+
+		/**
+		* An array containing all of the base2sizes that are allowed.
+		* This is used when creating a new TextureAtlas/or resizing a Image to be rendered in WebGL.
+		* @property base2Sizes
+		* @type number[]
+		* @public
+		* @static
+		*/
+		public static base2Sizes: number[] = [2, 4, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096];
+
+		/**
+		* A method that checks to see if an Image or Canvas that is passed has base2 proportions. 
+		* If it doesn't the image is created on a Canvas and that Canvas is returned.
+		* Used mainly when creating TextureAtlases for WebGL. 
+		* @method convertToBase2
+		* @param imageFile {HTMLImageElement/HTMLCanvasElement} The image or canvas element that is to be converted into a base2size. 
+		* @return {HTMLImageElement/HTMLCanvasElement} The image that was passed (if it was already at base2 dimensions) or a new canvas element if it wasn't.
+		* @static
+		* @public
+		*/
+		public static convertToBase2(image: any): any {
+			
+			//Get the width/height
+			var width = image.width;
+			var height = image.height
+
+			//Check to see if the width is base2
+			if (this.base2Sizes.indexOf(width) == -1) {
+				var i = 0;
+				while (width > this.base2Sizes[i]) i++;
+				width = this.base2Sizes[i];
+			}
+
+			//Check to see if the height is base2
+			if (this.base2Sizes.indexOf(height) == -1) {
+				var i = 0;
+				while (height > this.base2Sizes[i]) i++;
+				height = this.base2Sizes[i];
+			}
+
+
+			//If either of them did not have a base2 size then create a canvas and create a new canvas.
+			if (image.width !== width || image.height !== height) {
+
+				//Is it already a canvas?
+				var canvas = document.createElement('canvas');
+				canvas.width = width;
+				canvas.height = height;
+				canvas.getContext("2d").drawImage(image, 0, 0);
+
+				return canvas;
+			}
+
+			return image;
+		}
+
+	}
 
 }
diff --git a/src/utils/GameMath.ts b/src/utils/GameMath.ts
index ce45d24..2de397c 100644
--- a/src/utils/GameMath.ts
+++ b/src/utils/GameMath.ts
@@ -5,741 +5,741 @@
 */
 module Kiwi.Utils {
 
-    /**
-    * Adds a set of extra Math functions and extends a few commonly used ones.
-    * Includes some methods written by Dylan Engelman.
-    *
-    * @class GameMath
-    * @namespace Kiwi.Utils
-    * @static
-    *
-    * @author Richard Davey
-    * @author Dylan Engelman
-    */
-    export class GameMath {
-
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} "GameMath"
-        * @public
-        */
-        public objType() {
-            return "GameMath";
-        }
-
-        /**
-        * Holds the value for PI. Only up to 16 significant figures.
-        * @property PI
-        * @type number
-        * @default 3.141592653589793
-        * @static
-        * @final
-        * @public
-        */
-        public static PI: number = 3.141592653589793; //number pi
-
-        /**
-        * Holds the value for PI / 2 OR 90 degrees. Only up to 17 significant figures. 
-        * @property PI_2
-        * @type number
-        * @default 1.5707963267948965
-        * @static
-        * @final
-        * @public
-        */
-        public static PI_2: number = 1.5707963267948965; //PI / 2 OR 90 deg
-
-        /**
-        * Holds the value for PI / 4 OR 45 degrees. Only up to 16 significant figures.
-        * @property PI_4
-        * @type number
-        * @default 0.7853981633974483
-        * @static
-        * @final
-        * @public
-        */
-        public static PI_4: number = 0.7853981633974483; //PI / 4 OR 45 deg
-
-        /**
-        * Holds the value for PI / 8 OR 22.5 degrees. Only up to 17 significant figures.
-        * @property PI_8
-        * @type number
-        * @default 0.39269908169872413
-        * @static
-        * @final
-        * @public
-        */
-        public static PI_8: number = 0.39269908169872413; //PI / 8 OR 22.5 deg
-
-        /**
-        * Holds the value for PI / 16 OR 11.25 degrees. Only up to 17 significant figures.
-        * @property PI_16
-        * @type number
-        * @default 0.19634954084936206
-        * @static
-        * @final
-        * @public
-        */
-        public static PI_16: number = 0.19634954084936206; //PI / 16 OR 11.25 deg
-
-        /**
-        * Holds the value for 2 * PI OR 180 degrees. Only up to 15 significant figures.
-        * @property TWO_PI
-        * @type number
-        * @default 6.283185307179586
-        * @static
-        * @final
-        * @public
-        */
-        public static TWO_PI: number = 6.283185307179586; //2 * PI OR 180 deg
-
-        /**
-        * Holds the value for 3 * PI_2 OR 270 degrees. Only up to 17 significant figures.
-        * @property THREE_PI_2
-        * @type number
-        * @default 4.7123889803846895
-        * @static
-        * @final
-        * @public
-        */
-        public static THREE_PI_2: number = 4.7123889803846895; //3 * PI_2 OR 270 deg
-
-        /**
-        * Holds the value for "e": Euler's number or Napier's constant, to 15 significant figures. This is a mathematically useful number.
-        * @property E
-        * @type number
-        * @default 2.71828182845905
-        * @static
-        * @final
-        * @public
-        */
-        public static E: number = 2.71828182845905; //number e
-
-        /**
-        * Holds the value for the natural logarithm of 10: ln(10). Accurate to 16 significant figures.
-        * @property LN10
-        * @type number
-        * @default 2.302585092994046
-        * @static
-        * @final
-        * @public
-        */
-        public static LN10: number = 2.302585092994046; //ln(10)
-
-        /**
-        * Holds the value for the natural logarithm of 2: ln(10). Accurate to 16 significant figures.
-        * @property LN2
-        * @type number
-        * @default 0.6931471805599453
-        * @static
-        * @final
-        * @public
-        */
-        public static LN2: number = 0.6931471805599453; //ln(2)
-
-        /**
-        * Holds the value for the base 10 logarithm of e (Euler's number). Accurate to 16 significant figures.
-        * @property LOG10E
-        * @type number
-        * @default 0.4342944819032518
-        * @static
-        * @final
-        * @public
-        */
-        public static LOG10E: number = 0.4342944819032518; //logB10(e)
-
-        /**
-        * Holds the value for the base 2 logarithm of e (Euler's number). Accurate to 19 significant figures.
-        * @property LOG2E
-        * @type number
-        * @default 1.442695040888963387
-        * @static
-        * @final
-        * @public
-        */
-        public static LOG2E: number = 1.442695040888963387; //logB2(e)
-
-        /**
-        * Holds the value for the square root of 0.5 (1/2). Accurate to 16 significant figures.
-        * @property SQRT1_2
-        * @type number
-        * @default 0.7071067811865476
-        * @static
-        * @final
-        * @public
-        */
-        public static SQRT1_2: number = 0.7071067811865476; //sqrt( 1 / 2 )
-
-        /**
-        * Holds the value for the square root of 2. Accurate to 17 significant figures. This is the diagonal distance across a square with side length of 1.
-        * @property SQRT2
-        * @type number
-        * @default 1.4142135623730951
-        * @static
-        * @final
-        * @public
-        */
-        public static SQRT2: number = 1.4142135623730951; //sqrt( 2 )
-
-        /**
-        * Holds the value for PI / 180 which is used to convert degrees to radians.
-        * @property DEG_TO_RAD
-        * @type  number
-        * @default 0.017453292519943294444444444444444
-        * @static
-        * @final
-        * @public
-        */
-        public static DEG_TO_RAD: number = 0.017453292519943294444444444444444; //PI / 180;
-
-        /**
-        * Holds the value for 180 / PI which is used to convert radians to degrees.
-        * @property RAD_TO_DEG
-        * @type number
-        * @default 57.295779513082325225835265587527
-        * @static
-        * @final
-        * @public
-        */
-        public static RAD_TO_DEG: number = 57.295779513082325225835265587527; // 180.0 / PI;
-        
-
-        /**
-        * Holds the value for 2 to the power of 16 (2^16 = 65536). This is the number of values available in 2 bytes.
-        * @property B_16
-        * @type number
-        * @default 65536
-        * @static
-        * @final
-        * @public
-        */
-        public static B_16: number = 65536;//2^16
-
-        /**
-        * Holds the value for 2 to the power of 31 (2^31 = 2147483648). This is the number of values available to 31-bit memory addressing.
-        * @property B_31
-        * @type number
-        * @default 2147483648
-        * @static
-        * @final
-        * @public
-        */
-        public static B_31: number = 2147483648;//2^31
-
-        /**
-        * Holds the value for 2 to the power of 32 (2^32 = 4294967296). This is the number of values available in 4 bytes, such as certain forms of RGBA colour.
-        * @property B_32
-        * @type number
-        * @default 4294967296
-        * @static
-        * @final
-        * @public
-        */
-        public static B_32: number = 4294967296;//2^32
-
-        /**
-        * Holds the value for 2 to the power of 48 (2^48 = 281474976710656). 48-bit colour has 16 bits per channel.
-        * @property B_48
-        * @type number
-        * @default 281474976710656
-        * @static
-        * @final
-        * @public
-        */
-        public static B_48: number = 281474976710656;//2^48
-
-        /**
-        * Holds the value for 2 to the power of 53 (2^53 = 9007199254740992). This is the largest accurate double-precision floating point whole number.
-        * @property B_53
-        * @type number
-        * @default 9007199254740992
-        * @static
-        * @final
-        * @public
-        */
-        public static B_53: number = 9007199254740992;//2^53 !!NOTE!! largest accurate double floating point whole value
-
-        /**
-        * Holds the value for 2 to the power of 64 (2^64 = 18446744073709551616). This number cannot be accurately represented as a double-precision floating point whole number as it is greater than Kiwi.Utils.GameMath.B_53. It is represented as 18446744073709552000 in memory.
-        * @property B_64
-        * @type number
-        * @default 18446744073709551616
-        * @static
-        * @final
-        * @public
-        */
-        public static B_64: number = 18446744073709551616;//2^64 !!NOTE!! Not accurate see B_53
-        
-
-        /**
-        * Holds the value for the fraction 1 / 3 as a number.
-        * @property ONE_THIRD
-        * @type number
-        * @default 0.333333333333333333333333333333333
-        * @static
-        * @final
-        * @public
-        */
-        public static ONE_THIRD: number = 0.333333333333333333333333333333333; // 1.0/3.0;
-
-        /**
-        * Holds the value for the fraction 2 / 3 as a number.
-        * @property TWO_THIRDS
-        * @type number
-        * @default 0.666666666666666666666666666666666
-        * @static
-        * @final
-        * @public
-        */
-        public static TWO_THIRDS: number = 0.666666666666666666666666666666666; // 2.0/3.0;
-
-        /**
-        * Holds the value for the fraction 1 / 6 as a number
-        * @property ONE_SIXTH
-        * @type number
-        * @default 0.166666666666666666666666666666666
-        * @static
-        * @final
-        * @public
-        */
-        public static ONE_SIXTH: number = 0.166666666666666666666666666666666; // 1.0/6.0;
-        
-        /**
-        * Holds the value of cos(pi / 3). This is the length of the shortest side of a triangle with angles in degrees 30, 60, and 90.
-        * @property COS_PI_3
-        * @type number
-        * @default 0.86602540378443864676372317075294
-        * @static
-        * @final
-        * @public
-        */
-        public static COS_PI_3: number = 0.86602540378443864676372317075294;//COS( PI / 3 )
-
-        /**
-        * Holds the value of sin(2 * pi / 3). This is the length of the second-shortest side of a triangle with andles in degrees 30, 60, and 90.
-        * @property SIN_2PI_3
-        * @type number
-        * @default 0.03654595
-        * @static
-        * @final
-        * @public
-        */
-        public static SIN_2PI_3: number = 0.03654595;// SIN( 2*PI/3 )
-        
-        /**
-        * Holds the value for 4 * (Math.sqrt(2) - 1) / 3.0 (approximately 0.5522847).
-        *
-        * This is useful for making circular arcs with Bezier curves. For an arc segment of 90 degrees (PI / 2 radians) or less, you can construct a nice approximation using CIRCLE_ALPHA. If the magic number k = CIRCLE_ALPHA, construct an arc using the following points: [1,0], [1,k], [k,1], [0,1].
-        *
-        * For angles that are smaller by scale n, scale k by n, and displace k along tangents of the arc. For more information, see this article by Hans Muller: http://hansmuller-flex.blogspot.com/2011/04/approximating-circular-arc-with-cubic.html
-        * @property CIRCLE_ALPHA
-        * @type number
-        * @default 0.5522847498307933984022516322796
-        * @static
-        * @final
-        * @public
-        */
-        public static CIRCLE_ALPHA: number = 0.5522847498307933984022516322796; //4*(Math.sqrt(2)-1)/3.0;
-        
-        /**
-        * A boolean that is true.
-        * @property ON
-        * @type boolean
-        * @default true
-        * @static
-        * @final
-        * @public
-        */
-        public static ON: boolean = true;
-
-        /**
-        * A boolean that is false.
-        * @property OFF
-        * @type boolean
-        * @default false
-        * @static
-        * @final
-        * @public
-        */
-        public static OFF: boolean = false;
-        
-
-        /**
-        * Maximum relative error for integers.
-        * @property SHORT_EPSILON
-        * @type number
-        * @default 0.1
-        * @static
-        * @final
-        * @public
-        */
-        public static SHORT_EPSILON: number = 0.1;//round integer epsilon
-
-        /**
-        * Maximum relative error for percentages (where 1% == 0.01).
-        * @property PERC_EPSILON
-        * @type number
-        * @default 0.001
-        * @static
-        * @final
-        * @public
-        */
-        public static PERC_EPSILON: number = 0.001;//percentage epsilon
-
-        /**
-        * Average relative error for single float values.
-        * @property EPSILON
-        * @type number
-        * @default 0.0001
-        * @static
-        * @final
-        * @public
-        */
-        public static EPSILON: number = 0.0001;//single float average epsilon
-
-        /**
-        * Maximum relative error for 8-digit decimal values.
-        * @property LONG_EPSILON
-        * @type number
-        * @default 0.00000001
-        * @static
-        * @final
-        * @public
-        */
-        public static LONG_EPSILON: number = 0.00000001;//arbitrary 8 digit epsilon
-
-        /**
-        * Computes the maximum relative error for this machine.
-        * @method computeMachineEpsilon
-        * @return {Number}
-        * @static
-        * @public
-        */
-        public static computeMachineEpsilon(): number {
-            // Machine epsilon ala Eispack
-            var fourThirds: number = 4.0 / 3.0;
-            var third: number = fourThirds - 1.0;
-            var one: number = third + third + third;
-            return Math.abs(1.0 - one);
-        }
-
-        /**
-        * Computes whether two numbers are identical to the limits of the computer's precision, as specified by the epsilon value.
-        * @method fuzzyEqual
-        * @param a {number}
-        * @param b {number}
-        * @param [epsilon=0.0001] {number}
-        * @return {boolean}
-        * @static
-        * @public
-        */
-        public static fuzzyEqual(a: number, b: number, epsilon: number = 0.0001): boolean {
-            return Math.abs(a - b) < epsilon;
-        }
-
-        /**
-        * Computes whether the first parameter is less than the second parameter, to the limits of the computer's precision, as specified by the epsilon value.
-        * @method fuzzyLessThan
-        * @param a {number}
-        * @param b {number}
-        * @param [epsilon=0.0001] {number}
-        * @return {boolean}
-        * @static
-        * @public
-        */
-        public static fuzzyLessThan(a: number, b: number, epsilon: number = 0.0001): boolean {
-            return a < b + epsilon;
-        }
-
-        /**
-        * Computes whether the first parameter is greater than the second parameter, to the limits of the computer's precision, as specified by the epsilon value.
-        * @method fuzzyGreaterThan
-        * @param a {number}
-        * @param b {number}
-        * @param [epsilon=0.0001] {number}
-        * @return {boolean}
-        * @static
-        * @public
-        */
-        public static fuzzyGreaterThan(a: number, b: number, epsilon: number = 0.0001): boolean {
-            return a > b - epsilon;
-        }
-
-        /**
-        * Computes the integer ceiling of the first parameter, minus a rounding margin defined by epsilon.
-        * @method fuzzyCeil
-        * @param val {number}
-        * @param [epsilon=0.0001] {number}
-        * @return {Number}
-        * @static
-        * @public
-        */
-        public static fuzzyCeil(val: number, epsilon: number = 0.0001): number {
-            return Math.ceil(val - epsilon);
-        }
-
-        /**
-        * Computes the integer floor of the first parameter, plus a rounding margin defined by epsilon.
-        * @method fuzzyFloor
-        * @param val {number}
-        * @param [epsilion=0.0001] {number}
-        * @return {Number}
-        * @static
-        * @public
-        */
-        public static fuzzyFloor(val: number, epsilon: number = 0.0001): number {
-            return Math.floor(val + epsilon);
-        }
-
-        /**
-        * Computes the mean of any number of parameters. For example, average(1,2,3) returns 2.
-        * @method average
-        * @param [args]* {Any[]}
-        * @return {Number}
-        * @static
-        * @public
-        */
-        public static average(...args: any[]): number {
-            var avg: number = 0;
-
-            for (var i = 0; i < args.length; i++)
-            {
-                avg += args[i];
-            }
-
-            return avg / args.length;
-        }
-
-        /**
-        * Computes whether value and target are sufficiently close as to be within the computer's margin of error, as defined by epsilon. Returns the target if they are sufficiently close; returns the value if they are not.
-        *
-        * In other words, slam prevents the target from exceeding epsilon.
-        * @method slam
-        * @param value {number}
-        * @param target {number}
-        * @param [epsilon=0.0001] {number}
-        * @return {Number}
-        * @static
-        * @public
-        */
-        public static slam(value: number, target: number, epsilon: number = 0.0001): number {
-            return (Math.abs(value - target) < epsilon) ? target : value;
-        }
-
-        /**
+	/**
+	* Adds a set of extra Math functions and extends a few commonly used ones.
+	* Includes some methods written by Dylan Engelman.
+	*
+	* @class GameMath
+	* @namespace Kiwi.Utils
+	* @static
+	*
+	* @author Richard Davey
+	* @author Dylan Engelman
+	*/
+	export class GameMath {
+
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} "GameMath"
+		* @public
+		*/
+		public objType() {
+			return "GameMath";
+		}
+
+		/**
+		* Holds the value for PI. Only up to 16 significant figures.
+		* @property PI
+		* @type number
+		* @default 3.141592653589793
+		* @static
+		* @final
+		* @public
+		*/
+		public static PI: number = 3.141592653589793; //number pi
+
+		/**
+		* Holds the value for PI / 2 OR 90 degrees. Only up to 17 significant figures. 
+		* @property PI_2
+		* @type number
+		* @default 1.5707963267948965
+		* @static
+		* @final
+		* @public
+		*/
+		public static PI_2: number = 1.5707963267948965; //PI / 2 OR 90 deg
+
+		/**
+		* Holds the value for PI / 4 OR 45 degrees. Only up to 16 significant figures.
+		* @property PI_4
+		* @type number
+		* @default 0.7853981633974483
+		* @static
+		* @final
+		* @public
+		*/
+		public static PI_4: number = 0.7853981633974483; //PI / 4 OR 45 deg
+
+		/**
+		* Holds the value for PI / 8 OR 22.5 degrees. Only up to 17 significant figures.
+		* @property PI_8
+		* @type number
+		* @default 0.39269908169872413
+		* @static
+		* @final
+		* @public
+		*/
+		public static PI_8: number = 0.39269908169872413; //PI / 8 OR 22.5 deg
+
+		/**
+		* Holds the value for PI / 16 OR 11.25 degrees. Only up to 17 significant figures.
+		* @property PI_16
+		* @type number
+		* @default 0.19634954084936206
+		* @static
+		* @final
+		* @public
+		*/
+		public static PI_16: number = 0.19634954084936206; //PI / 16 OR 11.25 deg
+
+		/**
+		* Holds the value for 2 * PI OR 180 degrees. Only up to 15 significant figures.
+		* @property TWO_PI
+		* @type number
+		* @default 6.283185307179586
+		* @static
+		* @final
+		* @public
+		*/
+		public static TWO_PI: number = 6.283185307179586; //2 * PI OR 180 deg
+
+		/**
+		* Holds the value for 3 * PI_2 OR 270 degrees. Only up to 17 significant figures.
+		* @property THREE_PI_2
+		* @type number
+		* @default 4.7123889803846895
+		* @static
+		* @final
+		* @public
+		*/
+		public static THREE_PI_2: number = 4.7123889803846895; //3 * PI_2 OR 270 deg
+
+		/**
+		* Holds the value for "e": Euler's number or Napier's constant, to 15 significant figures. This is a mathematically useful number.
+		* @property E
+		* @type number
+		* @default 2.71828182845905
+		* @static
+		* @final
+		* @public
+		*/
+		public static E: number = 2.71828182845905; //number e
+
+		/**
+		* Holds the value for the natural logarithm of 10: ln(10). Accurate to 16 significant figures.
+		* @property LN10
+		* @type number
+		* @default 2.302585092994046
+		* @static
+		* @final
+		* @public
+		*/
+		public static LN10: number = 2.302585092994046; //ln(10)
+
+		/**
+		* Holds the value for the natural logarithm of 2: ln(10). Accurate to 16 significant figures.
+		* @property LN2
+		* @type number
+		* @default 0.6931471805599453
+		* @static
+		* @final
+		* @public
+		*/
+		public static LN2: number = 0.6931471805599453; //ln(2)
+
+		/**
+		* Holds the value for the base 10 logarithm of e (Euler's number). Accurate to 16 significant figures.
+		* @property LOG10E
+		* @type number
+		* @default 0.4342944819032518
+		* @static
+		* @final
+		* @public
+		*/
+		public static LOG10E: number = 0.4342944819032518; //logB10(e)
+
+		/**
+		* Holds the value for the base 2 logarithm of e (Euler's number). Accurate to 19 significant figures.
+		* @property LOG2E
+		* @type number
+		* @default 1.442695040888963387
+		* @static
+		* @final
+		* @public
+		*/
+		public static LOG2E: number = 1.442695040888963387; //logB2(e)
+
+		/**
+		* Holds the value for the square root of 0.5 (1/2). Accurate to 16 significant figures.
+		* @property SQRT1_2
+		* @type number
+		* @default 0.7071067811865476
+		* @static
+		* @final
+		* @public
+		*/
+		public static SQRT1_2: number = 0.7071067811865476; //sqrt( 1 / 2 )
+
+		/**
+		* Holds the value for the square root of 2. Accurate to 17 significant figures. This is the diagonal distance across a square with side length of 1.
+		* @property SQRT2
+		* @type number
+		* @default 1.4142135623730951
+		* @static
+		* @final
+		* @public
+		*/
+		public static SQRT2: number = 1.4142135623730951; //sqrt( 2 )
+
+		/**
+		* Holds the value for PI / 180 which is used to convert degrees to radians.
+		* @property DEG_TO_RAD
+		* @type  number
+		* @default 0.017453292519943294444444444444444
+		* @static
+		* @final
+		* @public
+		*/
+		public static DEG_TO_RAD: number = 0.017453292519943294444444444444444; //PI / 180;
+
+		/**
+		* Holds the value for 180 / PI which is used to convert radians to degrees.
+		* @property RAD_TO_DEG
+		* @type number
+		* @default 57.295779513082325225835265587527
+		* @static
+		* @final
+		* @public
+		*/
+		public static RAD_TO_DEG: number = 57.295779513082325225835265587527; // 180.0 / PI;
+		
+
+		/**
+		* Holds the value for 2 to the power of 16 (2^16 = 65536). This is the number of values available in 2 bytes.
+		* @property B_16
+		* @type number
+		* @default 65536
+		* @static
+		* @final
+		* @public
+		*/
+		public static B_16: number = 65536;//2^16
+
+		/**
+		* Holds the value for 2 to the power of 31 (2^31 = 2147483648). This is the number of values available to 31-bit memory addressing.
+		* @property B_31
+		* @type number
+		* @default 2147483648
+		* @static
+		* @final
+		* @public
+		*/
+		public static B_31: number = 2147483648;//2^31
+
+		/**
+		* Holds the value for 2 to the power of 32 (2^32 = 4294967296). This is the number of values available in 4 bytes, such as certain forms of RGBA colour.
+		* @property B_32
+		* @type number
+		* @default 4294967296
+		* @static
+		* @final
+		* @public
+		*/
+		public static B_32: number = 4294967296;//2^32
+
+		/**
+		* Holds the value for 2 to the power of 48 (2^48 = 281474976710656). 48-bit colour has 16 bits per channel.
+		* @property B_48
+		* @type number
+		* @default 281474976710656
+		* @static
+		* @final
+		* @public
+		*/
+		public static B_48: number = 281474976710656;//2^48
+
+		/**
+		* Holds the value for 2 to the power of 53 (2^53 = 9007199254740992). This is the largest accurate double-precision floating point whole number.
+		* @property B_53
+		* @type number
+		* @default 9007199254740992
+		* @static
+		* @final
+		* @public
+		*/
+		public static B_53: number = 9007199254740992;//2^53 !!NOTE!! largest accurate double floating point whole value
+
+		/**
+		* Holds the value for 2 to the power of 64 (2^64 = 18446744073709551616). This number cannot be accurately represented as a double-precision floating point whole number as it is greater than Kiwi.Utils.GameMath.B_53. It is represented as 18446744073709552000 in memory.
+		* @property B_64
+		* @type number
+		* @default 18446744073709551616
+		* @static
+		* @final
+		* @public
+		*/
+		public static B_64: number = 18446744073709551616;//2^64 !!NOTE!! Not accurate see B_53
+		
+
+		/**
+		* Holds the value for the fraction 1 / 3 as a number.
+		* @property ONE_THIRD
+		* @type number
+		* @default 0.333333333333333333333333333333333
+		* @static
+		* @final
+		* @public
+		*/
+		public static ONE_THIRD: number = 0.333333333333333333333333333333333; // 1.0/3.0;
+
+		/**
+		* Holds the value for the fraction 2 / 3 as a number.
+		* @property TWO_THIRDS
+		* @type number
+		* @default 0.666666666666666666666666666666666
+		* @static
+		* @final
+		* @public
+		*/
+		public static TWO_THIRDS: number = 0.666666666666666666666666666666666; // 2.0/3.0;
+
+		/**
+		* Holds the value for the fraction 1 / 6 as a number
+		* @property ONE_SIXTH
+		* @type number
+		* @default 0.166666666666666666666666666666666
+		* @static
+		* @final
+		* @public
+		*/
+		public static ONE_SIXTH: number = 0.166666666666666666666666666666666; // 1.0/6.0;
+		
+		/**
+		* Holds the value of cos(pi / 3). This is the length of the shortest side of a triangle with angles in degrees 30, 60, and 90.
+		* @property COS_PI_3
+		* @type number
+		* @default 0.86602540378443864676372317075294
+		* @static
+		* @final
+		* @public
+		*/
+		public static COS_PI_3: number = 0.86602540378443864676372317075294;//COS( PI / 3 )
+
+		/**
+		* Holds the value of sin(2 * pi / 3). This is the length of the second-shortest side of a triangle with andles in degrees 30, 60, and 90.
+		* @property SIN_2PI_3
+		* @type number
+		* @default 0.03654595
+		* @static
+		* @final
+		* @public
+		*/
+		public static SIN_2PI_3: number = 0.03654595;// SIN( 2*PI/3 )
+		
+		/**
+		* Holds the value for 4 * (Math.sqrt(2) - 1) / 3.0 (approximately 0.5522847).
+		*
+		* This is useful for making circular arcs with Bezier curves. For an arc segment of 90 degrees (PI / 2 radians) or less, you can construct a nice approximation using CIRCLE_ALPHA. If the magic number k = CIRCLE_ALPHA, construct an arc using the following points: [1,0], [1,k], [k,1], [0,1].
+		*
+		* For angles that are smaller by scale n, scale k by n, and displace k along tangents of the arc. For more information, see this article by Hans Muller: http://hansmuller-flex.blogspot.com/2011/04/approximating-circular-arc-with-cubic.html
+		* @property CIRCLE_ALPHA
+		* @type number
+		* @default 0.5522847498307933984022516322796
+		* @static
+		* @final
+		* @public
+		*/
+		public static CIRCLE_ALPHA: number = 0.5522847498307933984022516322796; //4*(Math.sqrt(2)-1)/3.0;
+		
+		/**
+		* A boolean that is true.
+		* @property ON
+		* @type boolean
+		* @default true
+		* @static
+		* @final
+		* @public
+		*/
+		public static ON: boolean = true;
+
+		/**
+		* A boolean that is false.
+		* @property OFF
+		* @type boolean
+		* @default false
+		* @static
+		* @final
+		* @public
+		*/
+		public static OFF: boolean = false;
+		
+
+		/**
+		* Maximum relative error for integers.
+		* @property SHORT_EPSILON
+		* @type number
+		* @default 0.1
+		* @static
+		* @final
+		* @public
+		*/
+		public static SHORT_EPSILON: number = 0.1;//round integer epsilon
+
+		/**
+		* Maximum relative error for percentages (where 1% == 0.01).
+		* @property PERC_EPSILON
+		* @type number
+		* @default 0.001
+		* @static
+		* @final
+		* @public
+		*/
+		public static PERC_EPSILON: number = 0.001;//percentage epsilon
+
+		/**
+		* Average relative error for single float values.
+		* @property EPSILON
+		* @type number
+		* @default 0.0001
+		* @static
+		* @final
+		* @public
+		*/
+		public static EPSILON: number = 0.0001;//single float average epsilon
+
+		/**
+		* Maximum relative error for 8-digit decimal values.
+		* @property LONG_EPSILON
+		* @type number
+		* @default 0.00000001
+		* @static
+		* @final
+		* @public
+		*/
+		public static LONG_EPSILON: number = 0.00000001;//arbitrary 8 digit epsilon
+
+		/**
+		* Computes the maximum relative error for this machine.
+		* @method computeMachineEpsilon
+		* @return {Number}
+		* @static
+		* @public
+		*/
+		public static computeMachineEpsilon(): number {
+			// Machine epsilon ala Eispack
+			var fourThirds: number = 4.0 / 3.0;
+			var third: number = fourThirds - 1.0;
+			var one: number = third + third + third;
+			return Math.abs(1.0 - one);
+		}
+
+		/**
+		* Computes whether two numbers are identical to the limits of the computer's precision, as specified by the epsilon value.
+		* @method fuzzyEqual
+		* @param a {number}
+		* @param b {number}
+		* @param [epsilon=0.0001] {number}
+		* @return {boolean}
+		* @static
+		* @public
+		*/
+		public static fuzzyEqual(a: number, b: number, epsilon: number = 0.0001): boolean {
+			return Math.abs(a - b) < epsilon;
+		}
+
+		/**
+		* Computes whether the first parameter is less than the second parameter, to the limits of the computer's precision, as specified by the epsilon value.
+		* @method fuzzyLessThan
+		* @param a {number}
+		* @param b {number}
+		* @param [epsilon=0.0001] {number}
+		* @return {boolean}
+		* @static
+		* @public
+		*/
+		public static fuzzyLessThan(a: number, b: number, epsilon: number = 0.0001): boolean {
+			return a < b + epsilon;
+		}
+
+		/**
+		* Computes whether the first parameter is greater than the second parameter, to the limits of the computer's precision, as specified by the epsilon value.
+		* @method fuzzyGreaterThan
+		* @param a {number}
+		* @param b {number}
+		* @param [epsilon=0.0001] {number}
+		* @return {boolean}
+		* @static
+		* @public
+		*/
+		public static fuzzyGreaterThan(a: number, b: number, epsilon: number = 0.0001): boolean {
+			return a > b - epsilon;
+		}
+
+		/**
+		* Computes the integer ceiling of the first parameter, minus a rounding margin defined by epsilon.
+		* @method fuzzyCeil
+		* @param val {number}
+		* @param [epsilon=0.0001] {number}
+		* @return {Number}
+		* @static
+		* @public
+		*/
+		public static fuzzyCeil(val: number, epsilon: number = 0.0001): number {
+			return Math.ceil(val - epsilon);
+		}
+
+		/**
+		* Computes the integer floor of the first parameter, plus a rounding margin defined by epsilon.
+		* @method fuzzyFloor
+		* @param val {number}
+		* @param [epsilion=0.0001] {number}
+		* @return {Number}
+		* @static
+		* @public
+		*/
+		public static fuzzyFloor(val: number, epsilon: number = 0.0001): number {
+			return Math.floor(val + epsilon);
+		}
+
+		/**
+		* Computes the mean of any number of parameters. For example, average(1,2,3) returns 2.
+		* @method average
+		* @param [args]* {Any[]}
+		* @return {Number}
+		* @static
+		* @public
+		*/
+		public static average(...args: any[]): number {
+			var avg: number = 0;
+
+			for (var i = 0; i < args.length; i++)
+			{
+				avg += args[i];
+			}
+
+			return avg / args.length;
+		}
+
+		/**
+		* Computes whether value and target are sufficiently close as to be within the computer's margin of error, as defined by epsilon. Returns the target if they are sufficiently close; returns the value if they are not.
+		*
+		* In other words, slam prevents the target from exceeding epsilon.
+		* @method slam
+		* @param value {number}
+		* @param target {number}
+		* @param [epsilon=0.0001] {number}
+		* @return {Number}
+		* @static
+		* @public
+		*/
+		public static slam(value: number, target: number, epsilon: number = 0.0001): number {
+			return (Math.abs(value - target) < epsilon) ? target : value;
+		}
+
+		/**
 		* Ratio of value to a range.
-        * @method percentageMinMax
-        * @param val {number}
-        * @param max {number}
-        * @param [min=0] {number}
-        * @return {number}
-        * @static
-        * @public
-		*/
-        public static percentageMinMax(val: number, max: number, min: number = 0): number {
-            val -= min;
-            max -= min;
-
-            if (!max) return 0;
-            else return val / max;
-        }
-
-        /**
+		* @method percentageMinMax
+		* @param val {number}
+		* @param max {number}
+		* @param [min=0] {number}
+		* @return {number}
+		* @static
+		* @public
+		*/
+		public static percentageMinMax(val: number, max: number, min: number = 0): number {
+			val -= min;
+			max -= min;
+
+			if (!max) return 0;
+			else return val / max;
+		}
+
+		/**
 		* A value representing the sign of the value.
 		* -1 for negative, +1 for positive, 0 if value is 0
 		* @method sign
-        * @param n {number}
-        * @return {number}
-        * @static
-        * @public
-        */
-        public static sign(n: number): number {
-            if (n) return n / Math.abs(n);
-            else return 0;
-        }
-
-        /**
-        * Truncates a value by removing all decimal data.
-        * @method truncate
-        * @param n {number}
-        * @return {number}
-        * @static
-        * @public
-        */
-        public static truncate(n: number): number {
-            return (n > 0) ? Math.floor(n) : Math.ceil(n);
-        }
-
-        /**
-        * Removes all non-decimal data from the value.
-        * @method shear
-        * @param n {number}
-        * @return {number}
-        * @static
-        * @public
-        */
-        public static shear(n: number): number {
-            return n % 1;
-        }
-
-        /**
+		* @param n {number}
+		* @return {number}
+		* @static
+		* @public
+		*/
+		public static sign(n: number): number {
+			if (n) return n / Math.abs(n);
+			else return 0;
+		}
+
+		/**
+		* Truncates a value by removing all decimal data.
+		* @method truncate
+		* @param n {number}
+		* @return {number}
+		* @static
+		* @public
+		*/
+		public static truncate(n: number): number {
+			return (n > 0) ? Math.floor(n) : Math.ceil(n);
+		}
+
+		/**
+		* Removes all non-decimal data from the value.
+		* @method shear
+		* @param n {number}
+		* @return {number}
+		* @static
+		* @public
+		*/
+		public static shear(n: number): number {
+			return n % 1;
+		}
+
+		/**
 		* Wrap a value around a range, similar to modulus with a floating minimum
 		* @method wrap
-        * @param val {number}
-        * @param max {number}
-        * @param [min=0] {number}
-        * @return {number}
-        * @static
-        * @public
-        */
-        public static wrap(val: number, max: number, min: number = 0): number {
-            val -= min;
-            max -= min;
-            if (max == 0) return min;
-            val %= max;
-            val += min;
-            while (val < min)
-                val += max;
-
-            return val;
-        }
-
-        /**
+		* @param val {number}
+		* @param max {number}
+		* @param [min=0] {number}
+		* @return {number}
+		* @static
+		* @public
+		*/
+		public static wrap(val: number, max: number, min: number = 0): number {
+			val -= min;
+			max -= min;
+			if (max == 0) return min;
+			val %= max;
+			val += min;
+			while (val < min)
+				val += max;
+
+			return val;
+		}
+
+		/**
 		* Arithmetic version of wrap.
 		* @method arithWrap
-        * @param val {number}
-        * @param max {number}
-        * @param [min=0] {number}
-        * @return {number}
-        * @static
-        * @public
-        */
-        public static arithWrap(value: number, max: number, min: number = 0): number {
-            max -= min;
-            if (max == 0) return min;
-            return value - max * Math.floor((value - min) / max);
-        }
-
-        /**
+		* @param val {number}
+		* @param max {number}
+		* @param [min=0] {number}
+		* @return {number}
+		* @static
+		* @public
+		*/
+		public static arithWrap(value: number, max: number, min: number = 0): number {
+			max -= min;
+			if (max == 0) return min;
+			return value - max * Math.floor((value - min) / max);
+		}
+
+		/**
 		* Force a value within the boundaries of two values
 		* If max < min, min is returned.
 		* @method clamp
-        * @param input {number}
-        * @param max {number}
-        * @param [min=0] {number}
-        * @return {number}
-        * @static
-        * @public
-        */
-        public static clamp(input: number, max: number, min: number = 0): number {
-            return Math.max(min, Math.min(max, input));
-        }
-
-        /**
+		* @param input {number}
+		* @param max {number}
+		* @param [min=0] {number}
+		* @return {number}
+		* @static
+		* @public
+		*/
+		public static clamp(input: number, max: number, min: number = 0): number {
+			return Math.max(min, Math.min(max, input));
+		}
+
+		/**
 		* Snap a value to nearest grid slice, using rounding.
 		* Example if you have an interval gap of 5 and a position of 12... you will snap to 10. Where as 14 will snap to 15
 		* 
-        * @method snapTo
+		* @method snapTo
 		* @param input {number} The value to snap
 		* @param gap {number} The interval gap of the grid
 		* @param [start=0] {number} Optional starting offset for gap
 		* @return {number}
-        * @static
-        * @public
-        */
-        public static snapTo(input: number, gap: number, start: number = 0): number {
-            if (gap == 0) return input;
-
-            input -= start;
-            input = gap * Math.round(input / gap);
-            return start + input;
-        }
-
-        /**
+		* @static
+		* @public
+		*/
+		public static snapTo(input: number, gap: number, start: number = 0): number {
+			if (gap == 0) return input;
+
+			input -= start;
+			input = gap * Math.round(input / gap);
+			return start + input;
+		}
+
+		/**
 		* Snap a value to nearest grid slice, using floor.
 		* Example if you have an interval gap of 5 and a position of 12... you will snap to 10. As will 14 snap to 10... but 16 will snap to 15
 		* 
-        * @method snapToFloor
+		* @method snapToFloor
 		* @param input {number} The value to snap
 		* @param gap {number} The interval gap of the grid
 		* @param [start=0] {number} Optional starting offset for gap
 		* @return {number}
-        * @static
-        * @public
-        */
-        public static snapToFloor(input: number, gap: number, start: number = 0): number {
-            if (gap == 0) return input;
-
-            input -= start;
-            input = gap * Math.floor(input / gap);
-            return start + input;
-        }
-
-        /**
+		* @static
+		* @public
+		*/
+		public static snapToFloor(input: number, gap: number, start: number = 0): number {
+			if (gap == 0) return input;
+
+			input -= start;
+			input = gap * Math.floor(input / gap);
+			return start + input;
+		}
+
+		/**
 		* Snap a value to nearest grid slice, using ceil.
 		* Example if you have an interval gap of 5 and a position of 12... you will snap to 15. As will 14 will snap to 15... but 16 will snap to 20
 		* 
-        * @method snapToCeil
+		* @method snapToCeil
 		* @param input {number} The value to snap
 		* @param gap {number} The interval gap of the grid
 		* @param [start=0] {number} optional starting offset for gap
 		* @return {number}
-        * @static
-        * @public
+		* @static
+		* @public
 		*/
-        public static snapToCeil(input: number, gap: number, start: number = 0): number {
-            if (gap == 0) return input;
+		public static snapToCeil(input: number, gap: number, start: number = 0): number {
+			if (gap == 0) return input;
 
-            input -= start;
-            input = gap * Math.ceil(input / gap);
-            return start + input;
-        }
+			input -= start;
+			input = gap * Math.ceil(input / gap);
+			return start + input;
+		}
 
-        /**
+		/**
 		* Snaps a value to the nearest value in an array.
-        * @method snapToInArray
-        * @param input {number}
-        * @param arr {number[]}
-        * @param [sort=true] {boolean}
+		* @method snapToInArray
+		* @param input {number}
+		* @param arr {number[]}
+		* @param [sort=true] {boolean}
 		* @return {number}
-        * @static
-        * @public
+		* @static
+		* @public
 		*/
-        public static snapToInArray(input: number, arr: number[], sort: boolean = true): number {
+		public static snapToInArray(input: number, arr: number[], sort: boolean = true): number {
 
-            if (sort) arr.sort();
-            if (input < arr[0]) return arr[0];
+			if (sort) arr.sort();
+			if (input < arr[0]) return arr[0];
 
-            var i: number = 1;
+			var i: number = 1;
 
-            while (arr[i] < input)
-                i++;
+			while (arr[i] < input)
+				i++;
 
-            var low: number = arr[i - 1];
-            var high: number = (i < arr.length) ? arr[i] : Number.POSITIVE_INFINITY;
+			var low: number = arr[i - 1];
+			var high: number = (i < arr.length) ? arr[i] : Number.POSITIVE_INFINITY;
 
-            return ((high - input) <= (input - low)) ? high : low;
-        }
+			return ((high - input) <= (input - low)) ? high : low;
+		}
 
-        /**
+		/**
 		* Round to some place comparative to a 'base', default is 10 for decimal place.
 		* 'place' is represented by the power applied to 'base' to get that place
 		* 
-        * @method roundTo
+		* @method roundTo
 		* @param value {number} The value to round
 		* @param [place=0] {number} The place to round to
 		* @param [base=10] {number} The base to round in... default is 10 for decimal
 		* @return {number}
-        * @static
-        * @public
-        */
-        public static roundTo(value: number, place: number = 0, base: number = 10): number {
-            var p: number = Math.pow(base, -place);
-            return Math.round(value * p) / p;
-        }
-
-        /*
+		* @static
+		* @public
+		*/
+		public static roundTo(value: number, place: number = 0, base: number = 10): number {
+			var p: number = Math.pow(base, -place);
+			return Math.round(value * p) / p;
+		}
+
+		/*
 		* E.g.
 		* 
 		* 2000/7 ~= 285.714285714285714285714 ~= (bin)100011101.1011011011011011
@@ -768,214 +768,214 @@ module Kiwi.Utils {
 		* because we are rounding 100011.1011011011011011 which rounds up.
 		*/
 
-        /**
-        * Round down to some place comparative to a 'base', default is 10 for decimal place.
-        * 'place' is represented by the power applied to 'base' to get that place
-        * @method floorTo
-        * @param value {number}
-        * @param [place=0] {number}
-        * @param [base=10] {number}
+		/**
+		* Round down to some place comparative to a 'base', default is 10 for decimal place.
+		* 'place' is represented by the power applied to 'base' to get that place
+		* @method floorTo
+		* @param value {number}
+		* @param [place=0] {number}
+		* @param [base=10] {number}
 		* @return {number}
-        * @static
-        * @public
-        */
-        public static floorTo(value: number, place: number = 0, base: number = 10): number {
-            var p: number = Math.pow(base, -place);
-            return Math.floor(value * p) / p;
-        }
-
-        /**
-        * Round down to some place comparative to a 'base', default is 10 for decimal place.
-        * 'place' is represented by the power applied to 'base' to get that place
-        * @method ceilTo
-        * @param value {number}
-        * @param [place=0] {number}
-        * @param [base=10] {number}
+		* @static
+		* @public
+		*/
+		public static floorTo(value: number, place: number = 0, base: number = 10): number {
+			var p: number = Math.pow(base, -place);
+			return Math.floor(value * p) / p;
+		}
+
+		/**
+		* Round down to some place comparative to a 'base', default is 10 for decimal place.
+		* 'place' is represented by the power applied to 'base' to get that place
+		* @method ceilTo
+		* @param value {number}
+		* @param [place=0] {number}
+		* @param [base=10] {number}
 		* @return {number}
-        * @static
-        * @public
-        */
-        public static ceilTo(value: number, place: number = 0, base: number = 10): number {
-            var p: number = Math.pow(base, -place);
-            return Math.ceil(value * p) / p;
-        }
-
-        /**
+		* @static
+		* @public
+		*/
+		public static ceilTo(value: number, place: number = 0, base: number = 10): number {
+			var p: number = Math.pow(base, -place);
+			return Math.ceil(value * p) / p;
+		}
+
+		/**
 		* A one dimensional linear interpolation of a value.
 		* @method interpolateFloat
-        * @param a {number}
-        * @param b {number}
-        * @param weight {number}
+		* @param a {number}
+		* @param b {number}
+		* @param weight {number}
 		* @return {number}
-        * @static
-        * @public
-        */
-        public static interpolateFloat(a: number, b: number, weight: number): number {
-            return (b - a) * weight + a;
-        }
-
-        /**
+		* @static
+		* @public
+		*/
+		public static interpolateFloat(a: number, b: number, weight: number): number {
+			return (b - a) * weight + a;
+		}
+
+		/**
 		* Convert radians to degrees
 		* @method radiansToDegrees
-        * @param angle {number}
+		* @param angle {number}
 		* @return {number}
-        * @static
-        * @public
-        */
-        public static radiansToDegrees(angle: number): number {
-            return angle * GameMath.RAD_TO_DEG;
-        }
-
-        /**
+		* @static
+		* @public
+		*/
+		public static radiansToDegrees(angle: number): number {
+			return angle * GameMath.RAD_TO_DEG;
+		}
+
+		/**
 		* Convert degrees to radians
 		* @method degreesToRadians
-        * @param angle {number}
+		* @param angle {number}
 		* @return {number}
-        * @static
-        * @public
-        */
-        public static degreesToRadians(angle: number): number {
-            return angle * GameMath.DEG_TO_RAD;
-        }
-
-        /**
+		* @static
+		* @public
+		*/
+		public static degreesToRadians(angle: number): number {
+			return angle * GameMath.DEG_TO_RAD;
+		}
+
+		/**
 		* Find the angle of a segment from (x1, y1) -> (x2, y2 )
-        * @method angleBetween
-        * @param x1 {number}
-        * @param y1 {number}
-        * @param x2 {number}
-        * @param y2 {number}
+		* @method angleBetween
+		* @param x1 {number}
+		* @param y1 {number}
+		* @param x2 {number}
+		* @param y2 {number}
 		* @return {number}
-        * @static
-        * @public
+		* @static
+		* @public
 		*/
-        public static angleBetween(x1: number, y1: number, x2: number, y2: number): number {
-            return Math.atan2(y2 - y1, x2 - x1);
-        }
+		public static angleBetween(x1: number, y1: number, x2: number, y2: number): number {
+			return Math.atan2(y2 - y1, x2 - x1);
+		}
 
 
-        /**
-        * Set an angle with in the bounds of -PI to PI
-        * @method normalizeAngle
-        * @param angle {number}
-        * @param [radians=true] {boolean}
+		/**
+		* Set an angle with in the bounds of -PI to PI
+		* @method normalizeAngle
+		* @param angle {number}
+		* @param [radians=true] {boolean}
 		* @return {number}
-        * @static
-        * @public
-        */
-        public static normalizeAngle(angle: number, radians: boolean = true): number {
-            var rd: number = (radians) ? GameMath.PI : 180;
-            return GameMath.wrap(angle, rd, -rd);
-        }
-
-        /**
-        * Closest angle between two angles from a1 to a2
-        * absolute value the return for exact angle.
-        * @method nearestAngleBetween 
-        * @param a1 {number}
-        * @param a2 {number}
-        * @param [radians=true] {boolean}
+		* @static
+		* @public
+		*/
+		public static normalizeAngle(angle: number, radians: boolean = true): number {
+			var rd: number = (radians) ? GameMath.PI : 180;
+			return GameMath.wrap(angle, rd, -rd);
+		}
+
+		/**
+		* Closest angle between two angles from a1 to a2
+		* absolute value the return for exact angle.
+		* @method nearestAngleBetween 
+		* @param a1 {number}
+		* @param a2 {number}
+		* @param [radians=true] {boolean}
 		* @return {number}
-        * @static
-        * @public
-        */
-        public static nearestAngleBetween(a1: number, a2: number, radians: boolean = true): number {
+		* @static
+		* @public
+		*/
+		public static nearestAngleBetween(a1: number, a2: number, radians: boolean = true): number {
 
-            var rd: number = (radians) ? GameMath.PI : 180;
+			var rd: number = (radians) ? GameMath.PI : 180;
 
-            a1 = GameMath.normalizeAngle(a1, radians);
-            a2 = GameMath.normalizeAngle(a2, radians);
+			a1 = GameMath.normalizeAngle(a1, radians);
+			a2 = GameMath.normalizeAngle(a2, radians);
 
-            if (a1 < -rd / 2 && a2 > rd / 2) a1 += rd * 2;
-            if (a2 < -rd / 2 && a1 > rd / 2) a2 += rd * 2;
+			if (a1 < -rd / 2 && a2 > rd / 2) a1 += rd * 2;
+			if (a2 < -rd / 2 && a1 > rd / 2) a2 += rd * 2;
 
-            return a2 - a1;
-        }
+			return a2 - a1;
+		}
 
-        /**
-        * Normalizes independent and then sets dep to the nearest value respective to independent.
-        * For instance if dep=-170 and ind=170 then 190 will be returned as an alternative to -170
-        * @method normalizeAngleToAnother
-        * @param dep {number}
-        * @param ind {number}
-        * @param [radians=true] {boolean}
+		/**
+		* Normalizes independent and then sets dep to the nearest value respective to independent.
+		* For instance if dep=-170 and ind=170 then 190 will be returned as an alternative to -170
+		* @method normalizeAngleToAnother
+		* @param dep {number}
+		* @param ind {number}
+		* @param [radians=true] {boolean}
 		* @return {number}
-        * @static
-        * @public
-        */
-        public static normalizeAngleToAnother(dep: number, ind: number, radians: boolean = true): number {
-            return ind + Kiwi.Utils.GameMath.nearestAngleBetween(ind, dep, radians);
-        }
-
-        /**
-        * Normalize independent and dependent and then set dependent to an angle relative to 'after/clockwise' independent.
-        * For instance dep=-170 and ind=170, then 190 will be reutrned as alternative to -170
-        * @method normalizeAngleAfterAnother
-        * @param dep {number}
-        * @param ind {number}
-        * @param [radians=true] {boolean}
+		* @static
+		* @public
+		*/
+		public static normalizeAngleToAnother(dep: number, ind: number, radians: boolean = true): number {
+			return ind + Kiwi.Utils.GameMath.nearestAngleBetween(ind, dep, radians);
+		}
+
+		/**
+		* Normalize independent and dependent and then set dependent to an angle relative to 'after/clockwise' independent.
+		* For instance dep=-170 and ind=170, then 190 will be reutrned as alternative to -170
+		* @method normalizeAngleAfterAnother
+		* @param dep {number}
+		* @param ind {number}
+		* @param [radians=true] {boolean}
 		* @return {number}
-        * @static
-        * @public
-        */
-        public static normalizeAngleAfterAnother(dep: number, ind: number, radians: boolean = true): number {
-
-            dep = Kiwi.Utils.GameMath.normalizeAngle(dep - ind, radians);
-            return ind + dep;
-        }
-
-        /**
-        * Normalizes indendent and dependent and then sets dependent to an angle relative to 'before/counterclockwise' independent.
-        * For instance dep = 190 and ind = 170, then -170 will be returned as an alternative to 190
-        * @method normalizeAngleBeforeAnother
-        * @param dep {number}
-        * @param ind {number}
-        * @param [radians=true] {boolean}
+		* @static
+		* @public
+		*/
+		public static normalizeAngleAfterAnother(dep: number, ind: number, radians: boolean = true): number {
+
+			dep = Kiwi.Utils.GameMath.normalizeAngle(dep - ind, radians);
+			return ind + dep;
+		}
+
+		/**
+		* Normalizes indendent and dependent and then sets dependent to an angle relative to 'before/counterclockwise' independent.
+		* For instance dep = 190 and ind = 170, then -170 will be returned as an alternative to 190
+		* @method normalizeAngleBeforeAnother
+		* @param dep {number}
+		* @param ind {number}
+		* @param [radians=true] {boolean}
 		* @return {number}
-        * @static
-        * @public
-        */
-        public static normalizeAngleBeforeAnother(dep: number, ind: number, radians: boolean = true): number {
-
-            dep = Kiwi.Utils.GameMath.normalizeAngle(ind - dep, radians);
-            return ind - dep;
-        }
-
-        /**
-        * Interpolate across the shortest arc between two angles.
-        * @method interpolateAngles
-        * @param a1 {number}
-        * @param a2 {number}
-        * @param weight {number}
-        * @param [radians=true] {boolean}
-        * @param [ease=null] {any}
+		* @static
+		* @public
+		*/
+		public static normalizeAngleBeforeAnother(dep: number, ind: number, radians: boolean = true): number {
+
+			dep = Kiwi.Utils.GameMath.normalizeAngle(ind - dep, radians);
+			return ind - dep;
+		}
+
+		/**
+		* Interpolate across the shortest arc between two angles.
+		* @method interpolateAngles
+		* @param a1 {number}
+		* @param a2 {number}
+		* @param weight {number}
+		* @param [radians=true] {boolean}
+		* @param [ease=null] {any}
 		* @return {number}
-        * @static
-        * @public
-        */
-        public static interpolateAngles(a1: number, a2: number, weight: number, radians: boolean = true, ease = null): number {
+		* @static
+		* @public
+		*/
+		public static interpolateAngles(a1: number, a2: number, weight: number, radians: boolean = true, ease = null): number {
 
-            a1 = Kiwi.Utils.GameMath.normalizeAngle(a1, radians);
-            a2 = Kiwi.Utils.GameMath.normalizeAngleToAnother(a2, a1, radians);
+			a1 = Kiwi.Utils.GameMath.normalizeAngle(a1, radians);
+			a2 = Kiwi.Utils.GameMath.normalizeAngleToAnother(a2, a1, radians);
 
-            return (typeof ease === 'function') ? ease(weight, a1, a2 - a1, 1) : Kiwi.Utils.GameMath.interpolateFloat(a1, a2, weight);
-        }
+			return (typeof ease === 'function') ? ease(weight, a1, a2 - a1, 1) : Kiwi.Utils.GameMath.interpolateFloat(a1, a2, weight);
+		}
 
-        /**
+		/**
 		* Compute the logarithm of any value of any base.
 		* A logarithm is the exponent that some constant (base) would have to be raised to 
 		* to be equal to value.
 		* @method logBaseOf
-        * @param value {number}
-        * @param base {number}
+		* @param value {number}
+		* @param base {number}
 		* @return {number}
-        * @static
-        * @public
-        */
-        public static logBaseOf(value: number, base: number): number {
-            return Math.log(value) / Math.log(base);
-        }
-        /* 
+		* @static
+		* @public
+		*/
+		public static logBaseOf(value: number, base: number): number {
+			return Math.log(value) / Math.log(base);
+		}
+		/* 
 		* i.e.
 		* 4 ^ x = 16
 		* can be rewritten as to solve for x
@@ -986,345 +986,345 @@ module Kiwi.Utils {
 		* which would return 2, because 4^2 = 16
 		*/
 
-        /**
+		/**
 		* Greatest Common Denominator using Euclid's algorithm.
-        * @method GCD
-        * @param m {number}
-        * @param n {number}
+		* @method GCD
+		* @param m {number}
+		* @param n {number}
 		* @return {number}
-        * @static
-        * @public
-		*/
-        public static GCD(m: number, n: number): number {
-            var r: number;
-
-            //make sure positive, GCD is always positive
-            m = Math.abs(m);
-            n = Math.abs(n);
-
-            //m must be >= n
-            if (m < n)
-            {
-                r = m;
-                m = n;
-                n = r;
-            }
-
-            //now start loop
-            while (true)
-            {
-                r = m % n;
-                if (!r) return n;
-                m = n;
-                n = r;
-            }
-
-            return 1;
-        }
-
-        /**
+		* @static
+		* @public
+		*/
+		public static GCD(m: number, n: number): number {
+			var r: number;
+
+			//make sure positive, GCD is always positive
+			m = Math.abs(m);
+			n = Math.abs(n);
+
+			//m must be >= n
+			if (m < n)
+			{
+				r = m;
+				m = n;
+				n = r;
+			}
+
+			//now start loop
+			while (true)
+			{
+				r = m % n;
+				if (!r) return n;
+				m = n;
+				n = r;
+			}
+
+			return 1;
+		}
+
+		/**
 		* Lowest Common Multiple
-        * @method LCM
-        * @param m {number}
-        * @param n {number}
+		* @method LCM
+		* @param m {number}
+		* @param n {number}
 		* @return {number}
-        * @static
-        * @public
+		* @static
+		* @public
 		*/
-        public static LCM(m: number, n: number): number {
-            return (m * n) / Kiwi.Utils.GameMath.GCD(m, n);
-        }
+		public static LCM(m: number, n: number): number {
+			return (m * n) / Kiwi.Utils.GameMath.GCD(m, n);
+		}
 
-        /**
+		/**
 		* Factorial - N! Simple product series. By definition:
 		* 0! == 1
-        * @method factorial
-        * @param value {number}
+		* @method factorial
+		* @param value {number}
 		* @return {number}
-        * @static
-        * @public
+		* @static
+		* @public
 		*/
-        public static factorial(value: number): number {
-            if (value == 0) return 1;
+		public static factorial(value: number): number {
+			if (value == 0) return 1;
 
-            var res: number = value;
+			var res: number = value;
 
-            while (--value)
-            {
-                res *= value;
-            }
+			while (--value)
+			{
+				res *= value;
+			}
 
-            return res;
-        }
+			return res;
+		}
 
-        /**
+		/**
 		* Gamma function. Defined: gamma(N) == (N - 1)!
 		* @method gammaFunction
 		* @param value {number}
 		* @return {number}
-        * @static
-        * @public
+		* @static
+		* @public
 		*/
-        public static gammaFunction(value: number): number {
-            return Kiwi.Utils.GameMath.factorial(value - 1);
-        }
+		public static gammaFunction(value: number): number {
+			return Kiwi.Utils.GameMath.factorial(value - 1);
+		}
 
-        /**
+		/**
 		* Falling factorial. Defined: (N)! / (N - x)!
 		* Written subscript: (N)x OR (base)exp
 		* @method fallingFactorial
 		* @param base {number}
 		* @param exp {number}
 		* @return {number}
-        * @static
-        * @public
+		* @static
+		* @public
 		*/
-        public static fallingFactorial(base: number, exp: number): number {
-            return Kiwi.Utils.GameMath.factorial(base) / Kiwi.Utils.GameMath.factorial(base - exp);
-        }
+		public static fallingFactorial(base: number, exp: number): number {
+			return Kiwi.Utils.GameMath.factorial(base) / Kiwi.Utils.GameMath.factorial(base - exp);
+		}
 
-        /**
+		/**
 		* Rising factorial. Defined: (N + x - 1)! / (N - 1)!
 		* Written superscript N^(x) OR base^(exp) 
 		* @method risingFactorial
 		* @param base {number}
 		* @param exp {number}
 		* @return {number}
-        * @static
-        * @public
+		* @static
+		* @public
 		*/
-        public static risingFactorial(base: number, exp: number): number {
-            //expanded from gammaFunction for speed
-            return Kiwi.Utils.GameMath.factorial(base + exp - 1) / Kiwi.Utils.GameMath.factorial(base - 1);
-        }
+		public static risingFactorial(base: number, exp: number): number {
+			//expanded from gammaFunction for speed
+			return Kiwi.Utils.GameMath.factorial(base + exp - 1) / Kiwi.Utils.GameMath.factorial(base - 1);
+		}
 
-        /**
+		/**
 		* Binomial coefficient.
 		* @method binCoef
-        * @param n {number}
-        * @param k {number}
+		* @param n {number}
+		* @param k {number}
 		* @return {number}
-        * @static
-        * @public
-        */
-        public static binCoef(n: number, k: number): number {
-            return Kiwi.Utils.GameMath.fallingFactorial(n, k) / Kiwi.Utils.GameMath.factorial(k);
-        }
-        /*
+		* @static
+		* @public
+		*/
+		public static binCoef(n: number, k: number): number {
+			return Kiwi.Utils.GameMath.fallingFactorial(n, k) / Kiwi.Utils.GameMath.factorial(k);
+		}
+		/*
 		* defined: N! / (k!(N-k)!)
 		* reduced: N! / (N-k)! == (N)k (fallingfactorial)
 		* reduced: (N)k / k!
 		*/
 
-        /**
+		/**
 		* Rising binomial coefficient.
 		* As one can notice in the analysis of binCoef(...) that 
 		* binCoef is the (N)k divided by k!. Similarly rising binCoef 
 		* is merely N^(k) / k! 
-        * @method risingBinCoef
-        * @param n {number}
-        * @param k {number}
+		* @method risingBinCoef
+		* @param n {number}
+		* @param k {number}
 		* @return {number}
-        * @static
-        * @public
-		*/
-        public static risingBinCoef(n: number, k: number): number {
-            return Kiwi.Utils.GameMath.risingFactorial(n, k) / Kiwi.Utils.GameMath.factorial(k);
-        }
-
-        /**
-        * Generate a random boolean result based on the chance value.
-        * Returns true or false based on the chance value (default 50%). For example if you wanted a player to have a 30% chance
-        * of getting a bonus, call chanceRoll(30) - true means the chance passed, false means it failed.
-        * 
-        * @method changeRoll
-        * @param [chance=50] {number} The chance of receiving the value. A number between 0 and 100 (effectively 0% to 100%)
-        * @return {boolean} true if the roll passed, or false
-        * @static
-        * @public
-        */
-        public static chanceRoll(chance: number = 50): boolean {
-
-            if (chance <= 0)
-            {
-                return false;
-            }
-            else if (chance >= 100)
-            {
-                return true;
-            }
-            else
-            {
-                if (Math.random() * 100 >= chance)
-                {
-                    return false;
-                }
-                else
-                {
-                    return true;
-                }
-            }
-
-        }
-
-        /**
+		* @static
+		* @public
+		*/
+		public static risingBinCoef(n: number, k: number): number {
+			return Kiwi.Utils.GameMath.risingFactorial(n, k) / Kiwi.Utils.GameMath.factorial(k);
+		}
+
+		/**
+		* Generate a random boolean result based on the chance value.
+		* Returns true or false based on the chance value (default 50%). For example if you wanted a player to have a 30% chance
+		* of getting a bonus, call chanceRoll(30) - true means the chance passed, false means it failed.
+		* 
+		* @method changeRoll
+		* @param [chance=50] {number} The chance of receiving the value. A number between 0 and 100 (effectively 0% to 100%)
+		* @return {boolean} true if the roll passed, or false
+		* @static
+		* @public
+		*/
+		public static chanceRoll(chance: number = 50): boolean {
+
+			if (chance <= 0)
+			{
+				return false;
+			}
+			else if (chance >= 100)
+			{
+				return true;
+			}
+			else
+			{
+				if (Math.random() * 100 >= chance)
+				{
+					return false;
+				}
+				else
+				{
+					return true;
+				}
+			}
+
+		}
+
+		/**
 		* Adds the given amount to the value, but never lets the value go over the specified maximum.
 		* 
-        * @method maxAdd
+		* @method maxAdd
 		* @param value {number} The value to add the amount to
 		* @param amount {number} The amount to add to the value
 		* @param max {number} The maximum the value is allowed to be
 		* @return {number}
-        * @static
-        * @public
+		* @static
+		* @public
 		*/
-        public static maxAdd(value: number, amount: number, max: number): number {
+		public static maxAdd(value: number, amount: number, max: number): number {
 
-            value += amount;
+			value += amount;
 
-            if (value > max)
-            {
-                value = max;
-            }
+			if (value > max)
+			{
+				value = max;
+			}
 
-            return value;
+			return value;
 
-        }
+		}
 
-        /**
+		/**
 		* Subtracts the given amount from the value, but never lets the value go below the specified minimum.
 		* 
-        * @method minSub
+		* @method minSub
 		* @param value {number} The base value
 		* @param amount {number} The amount to subtract from the base value
 		* @param min {number} The minimum the value is allowed to be
 		* @return {number}
-        * @static
-        * @public
+		* @static
+		* @public
 		*/
-        public static minSub(value: number, amount: number, min: number): number {
+		public static minSub(value: number, amount: number, min: number): number {
 
-            value -= amount;
+			value -= amount;
 
-            if (value < min)
-            {
-                value = min;
-            }
+			if (value < min)
+			{
+				value = min;
+			}
 
-            return value;
-        }
+			return value;
+		}
 
-        /**
+		/**
 		* Adds value to amount and ensures that the result always stays between 0 and max, by wrapping the value around.
 		* Values must be positive integers, and are passed through Math.abs
 		*
-        * @method wrapValue 
+		* @method wrapValue 
 		* @param value {number} The value to add the amount to
 		* @param amount {number} The amount to add to the value
 		* @param max {number} The maximum the value is allowed to be
 		* @return {number} The wrapped value
-        * @static
-        * @public
+		* @static
+		* @public
 		*/
-        public static wrapValue(value: number, amount: number, max: number): number {
+		public static wrapValue(value: number, amount: number, max: number): number {
 
-            var diff: number;
+			var diff: number;
 
-            value = Math.abs(value);
-            amount = Math.abs(amount);
-            max = Math.abs(max);
+			value = Math.abs(value);
+			amount = Math.abs(amount);
+			max = Math.abs(max);
 
-            diff = (value + amount) % max;
+			diff = (value + amount) % max;
 
-            return diff;
+			return diff;
 
-        }
+		}
 
-        /**
+		/**
 		* Randomly returns either a 1 or -1
 		* @method randomSign
 		* @return {number} Either 1 or -1.
-        * @static
-        * @public
-		*/
-        public static randomSign(): number {
-            return (Math.random() > 0.5) ? 1 : -1;
-        }
-
-        /**
-        * Returns true if the number given is odd.
-        * @method isOdd
-        * @param n {number} The number to check
-        * @return {boolean} True if the given number is odd. False if the given number is even.
-        * @static
-        * @public
-        */
-        public static isOdd(n: number): boolean {
-
-            if (n & 1)
-            {
-                return true;
-            }
-            else
-            {
-                return false;
-            }
-
-        }
-
-        /**
-        * Returns true if the number given is even.
-        * @method isEven
-        * @param n {number} The number to check
-        * @return {boolean} True if the given number is even. False if the given number is odd.
-        * @static
-        * @public
-        */
-        public static isEven(n: number): boolean {
-
-            if (n & 1)
-            {
-                return false;
-            }
-            else
-            {
-                return true;
-            }
-
-        }
-
-        /**
+		* @static
+		* @public
+		*/
+		public static randomSign(): number {
+			return (Math.random() > 0.5) ? 1 : -1;
+		}
+
+		/**
+		* Returns true if the number given is odd.
+		* @method isOdd
+		* @param n {number} The number to check
+		* @return {boolean} True if the given number is odd. False if the given number is even.
+		* @static
+		* @public
+		*/
+		public static isOdd(n: number): boolean {
+
+			if (n & 1)
+			{
+				return true;
+			}
+			else
+			{
+				return false;
+			}
+
+		}
+
+		/**
+		* Returns true if the number given is even.
+		* @method isEven
+		* @param n {number} The number to check
+		* @return {boolean} True if the given number is even. False if the given number is odd.
+		* @static
+		* @public
+		*/
+		public static isEven(n: number): boolean {
+
+			if (n & 1)
+			{
+				return false;
+			}
+			else
+			{
+				return true;
+			}
+
+		}
+
+		/**
 		* Keeps an angle value between -180 and +180.
 		* Should be called whenever the angle is updated on the Sprite to stop it from going insane.
 		* @method wrapAngle
 		* @param angle {number} The angle value to check
 		* @return {number} The new angle value, returns the same as the input angle if it was within bounds
 		* @static
-        * @public
-        */
-        public static wrapAngle(angle: number): number {
+		* @public
+		*/
+		public static wrapAngle(angle: number): number {
 
-            var result: number = angle;
+			var result: number = angle;
 
-            //  Nothing needs to change
-            if (angle >= -180 && angle <= 180)
-            {
-                return angle;
-            }
+			//  Nothing needs to change
+			if (angle >= -180 && angle <= 180)
+			{
+				return angle;
+			}
 
-            //  Else normalise it to -180, 180
-            result = (angle + 180) % 360;
+			//  Else normalise it to -180, 180
+			result = (angle + 180) % 360;
 
-            if (result < 0)
-            {
-                result += 360;
-            }
+			if (result < 0)
+			{
+				result += 360;
+			}
 
-            return result - 180;
+			return result - 180;
 
-        }
+		}
 
-        /**
+		/**
 		* Keeps an angle value between the given min and max values.
 		* @method angleLimit
 		* @param angle {number} The angle value to check. Must be between -180 and +180
@@ -1332,167 +1332,167 @@ module Kiwi.Utils {
 		* @param max {number} The maximum angle that is allowed (must be 180 or less)
 		* @return {number} The new angle value, returns the same as the input angle if it was within bounds
 		* @static
-        * @public
-        */
-        public static angleLimit(angle: number, min: number, max: number): number {
-
-            var result: number = angle;
-
-            if (angle > max)
-            {
-                result = max;
-            }
-            else if (angle < min)
-            {
-                result = min;
-            }
-
-            return result;
-        }
-
-        /**
-        * Interpolates between neighbouring values in an array using linear interpolation only. For example, linearInterpolation( [ 1,5,4 ], 0.5 ) = 5, and linearInterpolation( [ 1, 2 ], 0.3 ) = 1.3.
-        * @method linearInterpolation
-        * @param v {Array} An array of values through which to interpolate
-        * @param k {number} The position to interpolate, in the range 0-1
+		* @public
+		*/
+		public static angleLimit(angle: number, min: number, max: number): number {
+
+			var result: number = angle;
+
+			if (angle > max)
+			{
+				result = max;
+			}
+			else if (angle < min)
+			{
+				result = min;
+			}
+
+			return result;
+		}
+
+		/**
+		* Interpolates between neighbouring values in an array using linear interpolation only. For example, linearInterpolation( [ 1,5,4 ], 0.5 ) = 5, and linearInterpolation( [ 1, 2 ], 0.3 ) = 1.3.
+		* @method linearInterpolation
+		* @param v {Array} An array of values through which to interpolate
+		* @param k {number} The position to interpolate, in the range 0-1
 		* @return {number}
-        * @static
-        * @public
-        */
-        public static linearInterpolation(v, k):number {
+		* @static
+		* @public
+		*/
+		public static linearInterpolation(v, k):number {
 
-            var m = v.length - 1;
-            var f = m * k;
-            var i = Math.floor(f);
+			var m = v.length - 1;
+			var f = m * k;
+			var i = Math.floor(f);
 
-            if (k < 0) return Kiwi.Utils.GameMath.linear(v[0], v[1], f);
-            if (k > 1) return Kiwi.Utils.GameMath.linear(v[m], v[m - 1], m - f);
+			if (k < 0) return Kiwi.Utils.GameMath.linear(v[0], v[1], f);
+			if (k > 1) return Kiwi.Utils.GameMath.linear(v[m], v[m - 1], m - f);
 
-            return Kiwi.Utils.GameMath.linear(v[i], v[i + 1 > m ? m : i + 1], f - i);
+			return Kiwi.Utils.GameMath.linear(v[i], v[i + 1 > m ? m : i + 1], f - i);
 
-        }
+		}
 
-        /**
-        * Interpolates between values in an array using Bezier curves. This treats the values in the array as control points on a spline. Unlike Catmull-Rom splines, the value is not guaranteed to intersect precisely with these points.
-        * @method bezierInterpolation
-        * @param v {Array} An array of values through which to interpolate
-        * @param k {number} The position to interpolate, in the range 0-1
+		/**
+		* Interpolates between values in an array using Bezier curves. This treats the values in the array as control points on a spline. Unlike Catmull-Rom splines, the value is not guaranteed to intersect precisely with these points.
+		* @method bezierInterpolation
+		* @param v {Array} An array of values through which to interpolate
+		* @param k {number} The position to interpolate, in the range 0-1
 		* @return {number}
-        * @static
-        * @public
-        */
-        public static bezierInterpolation(v, k):number {
+		* @static
+		* @public
+		*/
+		public static bezierInterpolation(v, k):number {
 
-            var b = 0;
-            var n = v.length - 1;
+			var b = 0;
+			var n = v.length - 1;
 
-            for (var i = 0; i <= n; i++)
-            {
-                b += Math.pow(1 - k, n - i) * Math.pow(k, i) * v[i] * Kiwi.Utils.GameMath.bernstein(n, i);
-            }
+			for (var i = 0; i <= n; i++)
+			{
+				b += Math.pow(1 - k, n - i) * Math.pow(k, i) * v[i] * Kiwi.Utils.GameMath.bernstein(n, i);
+			}
 
-            return b;
+			return b;
 
-        }
+		}
 
-        /**
-        * Interpolates between values in an array using Catmull-Rom splines. This treats the values in the array as control points on a spline. Unlike Bezier curves, the value will intersect with every point in the array.
-        * @method catmullRomInterpolation
-        * @param v {Array} An array of values through which to interpolate
-        * @param k {Number} The position to interpolate, in the range 0-1
+		/**
+		* Interpolates between values in an array using Catmull-Rom splines. This treats the values in the array as control points on a spline. Unlike Bezier curves, the value will intersect with every point in the array.
+		* @method catmullRomInterpolation
+		* @param v {Array} An array of values through which to interpolate
+		* @param k {Number} The position to interpolate, in the range 0-1
 		* @return {number}
-        * @static
-        * @public
-        */
-        public static catmullRomInterpolation(v, k):number {
+		* @static
+		* @public
+		*/
+		public static catmullRomInterpolation(v, k):number {
 
-            var m = v.length - 1;
-            var f = m * k;
-            var i = Math.floor(f);
+			var m = v.length - 1;
+			var f = m * k;
+			var i = Math.floor(f);
 
-            if (v[0] === v[m])
-            {
-                if (k < 0) i = Math.floor(f = m * (1 + k));
+			if (v[0] === v[m])
+			{
+				if (k < 0) i = Math.floor(f = m * (1 + k));
 
-                return Kiwi.Utils.GameMath.catmullRom(v[(i - 1 + m) % m], v[i], v[(i + 1) % m], v[(i + 2) % m], f - i);
+				return Kiwi.Utils.GameMath.catmullRom(v[(i - 1 + m) % m], v[i], v[(i + 1) % m], v[(i + 2) % m], f - i);
 
-            }
-            else
-            {
-                if (k < 0) return v[0] - (Kiwi.Utils.GameMath.catmullRom(v[0], v[0], v[1], v[1], -f) - v[0]);
+			}
+			else
+			{
+				if (k < 0) return v[0] - (Kiwi.Utils.GameMath.catmullRom(v[0], v[0], v[1], v[1], -f) - v[0]);
 
-                if (k > 1) return v[m] - (Kiwi.Utils.GameMath.catmullRom(v[m], v[m], v[m - 1], v[m - 1], f - m) - v[m]);
+				if (k > 1) return v[m] - (Kiwi.Utils.GameMath.catmullRom(v[m], v[m], v[m - 1], v[m - 1], f - m) - v[m]);
 
-                return Kiwi.Utils.GameMath.catmullRom(v[i ? i - 1 : 0], v[i], v[m < i + 1 ? m : i + 1], v[m < i + 2 ? m : i + 2], f - i);
-            }
+				return Kiwi.Utils.GameMath.catmullRom(v[i ? i - 1 : 0], v[i], v[m < i + 1 ? m : i + 1], v[m < i + 2 ? m : i + 2], f - i);
+			}
 
-        }
+		}
 
-        /**
-        * Simple linear interpolation, identical to interpolateFloat.
-        * @method linear
-        * @param {Any} p0
-        * @param {Any} p1
-        * @param {Any} t
+		/**
+		* Simple linear interpolation, identical to interpolateFloat.
+		* @method linear
+		* @param {Any} p0
+		* @param {Any} p1
+		* @param {Any} t
 		* @return {number}
-        * @static
-        * @public
-        */
-        public static linear(p0, p1, t):number {
+		* @static
+		* @public
+		*/
+		public static linear(p0, p1, t):number {
 
-            return (p1 - p0) * t + p0;
+			return (p1 - p0) * t + p0;
 
-        }
+		}
 
-        /**
-        * Bernstein polynomial for constructing Bezier curves. Returns n! / i! / (n-i)!
-        * @method bernstein
-        * @param {Any} n
-        * @param {Any} i
+		/**
+		* Bernstein polynomial for constructing Bezier curves. Returns n! / i! / (n-i)!
+		* @method bernstein
+		* @param {Any} n
+		* @param {Any} i
 		* @return {number}
-        * @static
-        * @public
-        */
-        public static bernstein(n, i) :number {
-
-            return Kiwi.Utils.GameMath.factorial(n) / Kiwi.Utils.GameMath.factorial(i) / Kiwi.Utils.GameMath.factorial(n - i);
-
-        }
-
-        /**
-        * Function used to construct a Catmull-Rom interpolation: see catmullRomInterpolation()
-        * @method catmullRom
-        * @param {Any} p0
-        * @param {Any} p1
-        * @param {Any} p2
-        * @param {Any} p3
-        * @param {Any} t
+		* @static
+		* @public
+		*/
+		public static bernstein(n, i) :number {
+
+			return Kiwi.Utils.GameMath.factorial(n) / Kiwi.Utils.GameMath.factorial(i) / Kiwi.Utils.GameMath.factorial(n - i);
+
+		}
+
+		/**
+		* Function used to construct a Catmull-Rom interpolation: see catmullRomInterpolation()
+		* @method catmullRom
+		* @param {Any} p0
+		* @param {Any} p1
+		* @param {Any} p2
+		* @param {Any} p3
+		* @param {Any} t
 		* @return {number}
-        * @static
-        * @public
-        */
-        public static catmullRom(p0, p1, p2, p3, t) {
+		* @static
+		* @public
+		*/
+		public static catmullRom(p0, p1, p2, p3, t) {
 
-            var v0 = (p2 - p0) * 0.5, v1 = (p3 - p1) * 0.5, t2 = t * t, t3 = t * t2;
-            return (2 * p1 - 2 * p2 + v0 + v1) * t3 + (-3 * p1 + 3 * p2 - 2 * v0 - v1) * t2 + v0 * t + p1;
+			var v0 = (p2 - p0) * 0.5, v1 = (p3 - p1) * 0.5, t2 = t * t, t3 = t * t2;
+			return (2 * p1 - 2 * p2 + v0 + v1) * t3 + (-3 * p1 + 3 * p2 - 2 * v0 - v1) * t2 + v0 * t + p1;
 
-        }
+		}
 
-        /**
-        * Returns the difference between a and b.
-        * @method difference
-        * @param a {number}
-        * @param b {number}
+		/**
+		* Returns the difference between a and b.
+		* @method difference
+		* @param a {number}
+		* @param b {number}
 		* @return {number}
-        * @static
-        * @public
-        */ 
-        public static difference(a: number, b: number): number {
+		* @static
+		* @public
+		*/ 
+		public static difference(a: number, b: number): number {
 
-            return Math.abs(a - b);
+			return Math.abs(a - b);
 
-        }
+		}
 
-    }
+	}
 
-}
\ No newline at end of file
+}
diff --git a/src/utils/Log.ts b/src/utils/Log.ts
index 4100f95..cc7addb 100644
--- a/src/utils/Log.ts
+++ b/src/utils/Log.ts
@@ -7,431 +7,430 @@
 */
 module Kiwi.Utils {
 
-    /**
-    * A utilty class used to add management functionality to common console methods. 
-    * You can use this class by either creating a new instance, or using the instance at the namespace 'Kiwi.Log'.
-    * 
-    * log/error/warn methods contained on this class function just like their 'console' equivalents except that:
-    * - You can assign a tag to message by adding a '#' symbol to the front of a parameter. Example: this.log('Hi', '#welcome'); 
-    * - Messages can have multiple tags. Example: this.log('Hi', '#welcome', '#greeting');
-    * - Messages are recorded (by default) and you can then search through any messages saved.
-    *
-    * You can use the 'show' commands to search through recordings and find specific messages. 
-    *
-    * 
-    * @class Log
-    * @namespace Kiwi.Utils
-    * @constructor
-    * @param [params] {Object}
-    *   @param [options.recording=true] {Boolean} If the logs should be recorded.
-    *   @param [options.display=true] {Boolean} If the logs should be displayed or not.
-    *   @param [options.enabled=true] {Boolean} If the Logger is enabled at all.
-    *   @param [options.maxRecordings=Infinity] {Number} The maximum number of recordings to have at a single time.
-    */
-    export class Log {
-
-        constructor(params: any= {}) {
-            this.setDefaultsFromParams(params);
-        }
-
-        /**
-        * Sets the log properties based on a object passed. 
-        * This method is used to set the properties on the Log based on 
-        * gameoptions passed at game creation.
-        * 
-        * @method setDefaultsFromParams
-        * @param [params] {Object}
-        *   @param [options.recording=true] {Boolean} If the logs should be recorded.
-        *   @param [options.display=true] {Boolean} If the logs should be displayed or not.
-        *   @param [options.enabled=true] {Boolean} If the Logger is enabled at all.
-        *   @param [options.maxRecordings=Infinity] {Number} The maximum number of recordings to have at a single time.
-        * @public
-        */
-        public setDefaultsFromParams(params: any= {}) {
-
-            if (!Kiwi.Utils.Common.isUndefined(params.enabled)) {
-                this.enabled = params.enabled;
-            }
-
-            if (!Kiwi.Utils.Common.isUndefined(params.recording)) {
-                this.recording = params.recording;
-            }
-
-            if (!Kiwi.Utils.Common.isUndefined(params.display)) {
-                this.display = params.display;
-            }
-
-            if (!Kiwi.Utils.Common.isUndefined(params.maxRecordings)) {
-                this.maxRecordings = params.maxRecordings;
-            }
-
-        }
-
-        /**
-        * If the log, warn, or error messages should function at all.
-        * When set to false messages won't display or be recorded.
-        *
-        * @property enabled
-        * @type Boolean
-        * @default true 
-        * @public
-        */
-        public enabled: boolean = true;
-        
-        /**
-        * If messages should be recorded or not.
-        *
-        * @property record
-        * @type Boolean
-        * @default true 
-        * @public
-        */
-        public recording: boolean = true;
-        
-        /**
-        * If the log, warn, and error methods should display when executed or not.
-        * You may want to set this to 'false' when releasing a game.
-        *
-        * @property display
-        * @type Boolean
-        * @default true 
-        * @public
-        */
-        public display: boolean = true;
-        
-        /**
-        * The maximum number of recordings to be kept at once.
-        *
-        * @property maxRecordings
-        * @type Number
-        * @default Infinity 
-        * @public
-        */
-        public maxRecordings: number = Infinity;
-        
-        /**
-        * A list containing all messages recorded.
-        *
-        * @property recordings
-        * @type Array
-        * @private 
-        */
-        private recordings: any[] = [];
-        
-        /**
-        * The time (in milliseconds) of the last recording.
-        *
-        * @property lastMessageTime
-        * @type Number
-        * @readOnly
-        * @public
-        */
-        public get lastMessageTime():number {
-            if (this.recordings.length > 0) {
-                return this.recordings[this.recordings.length - 1].time;
-            }
-            return 0;
-        }
-        
-        /**
-        * The number of recordings that have been saved.
-        * Same as the recordings length, and won't go above the 'maxRecordings'.
-        *
-        * @property numRecordings
-        * @type Number
-        * @readOnly
-        * @public
-        */
-        public get numRecordings():number {
-            return this.recordings.length;
-        }
-
-
-        /**
-        * Saves a message to the 'recordings' array.
-        * That message can then be retrieved later using the 'show' methods.
-        *
-        * @method recordMessage
-        * @param message {String}
-        * @param [tags=[]] {String}
-        * @param [logMethod=console.log] {String} 
-        * @public
-        */
-        public record(messages: string[], tags:string[]=[], logMethod:any=console.log) {
-
-            if (this.recording) {
-
-                var recording = {
-                    messages: messages,
-                    time: Date.now(),
-                    tags: tags,
-                    logMethod: logMethod
-                };
-
-                if (this.recordings.push(recording) > this.maxRecordings) {
-                    this.recordings.shift();
-                } 
-
-            }
-
-        }
-        
-        /**
-        * Removes recordings from the list. Goes from the oldest to newest. 
-        * By not passing any parameters, the entire log will be cleared.
-        *
-        * @method clearRecordings
-        * @param [start=0] {Number} 
-        * @param [end] {Number} 
-        * @public
-        */
-        public clearRecordings(start: number=0, end: number=this.recordings.length) {
-
-            this.recordings.splice(start, end);
-
-        }
-        
-        /**
-        * Executes a particular array of messages using a method passed.
-        * Takes into account the 'display' property before executing. 
-        * 
-        * @method _execute
-        * @param method {Any} The method that should be used to log the messages. Generally a console method.
-        * @param context {Any} The context that the method should be executed in. Generally set to the console. 
-        * @param messages {Array} 
-        * @param [force=false] {Array}  
-        * @private
-        */
-        private _execute(method:any, context: any, messages:string[], force:boolean=false) {
-
-            if (this.display || force) {
-                method.apply(context, messages);
-            }
-
-        }
-
-        /**
-        * Accepts an array of strings and returns a new array consisting of all elements considered as a tag.
-        * 
-        * @method getTagsFromArray
-        * @param strings {Array} 
-        * @return {Array} Elements of the array considered as tags
-        * @public
-        */
-        public getTagsFromArray(array: string[]) {
-
-            var i = 0,
-                tags = [];
-
-            while ( i < array.length ) {
-                if ( typeof array[ i ] === "string" ) {
-                    if ( array[ i ].charAt( 0 ) === "#" ) {
-                        tags.push( array[ i ] );
-                    }
-                }
-                i++;
-            }
-
-            return tags;
-
-        }
-        
-        /**
-        * Logs a message using the 'console.log' method.
-        * Arguments starting with a '#' symbol are given that value as a tag.
-        * 
-        * @method log
-        * @param [..args] {Any} The data you would like to log.
-        * @public
-        */
-        public log(...args:any[]) {
-
-            if (!this.enabled) {
-                return;
-            }
-
-            this.record(args, this.getTagsFromArray(args), console.log);
-            this._execute(console.log, console, args);
-
-        }
-        
-
-        /**
-        * Logs a message using the 'console.warn' method.
-        * Arguments starting with a '#' symbol are given that value as a tag.
-        * 
-        * @method warn
-        * @param [..args] {Any} The data you would like to log.
-        * @public
-        */
-        public warn(...args: any[]) {
-
-            if (!this.enabled) {
-                return;
-            }
-
-            this.record(args, this.getTagsFromArray(args), console.warn);
-            this._execute(console.warn, console, args);
-
-        }
-        
-        /**
-        * Logs a message using the 'console.error' method.
-        * Arguments starting with a '#' symbol are given that value as a tag.
-        *
-        * @method error
-        * @param [..args] {Any} The data you would like to log.
-        * @public
-        */
-        public error(...args: any[]) {
-
-            if (!this.enabled) {
-                return;
-            }
-
-            this.record(args, this.getTagsFromArray(args), console.error);
-            this._execute(console.error, console, args);
-
-        }
-
-
-        /**
-        * Method that displays a particular recording passed.
-        *
-        * @method _show
-        * @param recording {Object}
-        * @param tags {Array}
-        * @return {Boolean} If the recording was displayed or not.
-        * @private
-        */
-        private _show( recording, tags:string[] ) {
-
-            if (!recording.logMethod) {
-                return false;
-            }
-
-            //Check that the tags match
-            var n = tags.length;
-            while( n-- ) {
-
-                if ( recording.tags.indexOf( tags[ n ] ) == -1 ) {
-                    return false;
-                }
-
-            }
-
-            this._execute(recording.logMethod, console, recording.messages, true );
-            return true;
-
-        }
-
-
-        /**
-        * Displays the last recording matching the tags passed.
-        * 
-        * @method showLast
-        * @param [...args] {Any} Any tags that the recordings must have.
-        * @public
-        */
-        public showLast(...args:any[]) {
-            var i = this.recordings.length;
-            
-            while(i--) {
-                if (this._show(this.recordings[i], args)) {
-                    return;
-                }
-            }
-        }
-
-
-        /**
-        * Displays all recordings.
-        * 
-        * @method showAll
-        * @param [...args] {Any} Any tags that the recordings must have.
-        * @public
-        */
-        public showAll(...args: any[]) {
-            for (var i = 0; i < this.recordings.length; i++) {
-                this._show(this.recordings[i], args );
-            }
-        }
-
-
-        /**
-        * Displays all logs recorded.
-        * 
-        * @method showLogs
-        * @param [...args] {Any} Any tags that the recordings must have.
-        * @public
-        */
-        public showLogs(...args: any[]) {
-            for (var i = 0; i < this.recordings.length; i++) {
-                if (this.recordings[i].logMethod === console.log) {
-                    this._show(this.recordings[i], args);
-                }
-            }
-        }
-
-
-        /**
-        * Displays all errors recorded.
-        * 
-        * @method showErrors
-        * @param [...args] {Any} Any tags that the recordings must have.
-        * @public
-        */
-        public showErrors(...args: any[]) {
-            for (var i = 0; i < this.recordings.length; i++) {
-                if (this.recordings[i].logMethod === console.error) {
-                    this._show(this.recordings[i], args);
-                }
-            }
-        }
-
-
-        /**
-        * Displays all warnings recorded.
-        *
-        * @method showWarnings
-        * @param [...args] {Any} Any tags that the recordings must have.
-        * @public
-        */
-        public showWarnings(...args: any[]) {
-            for (var i = 0; i < this.recordings.length; i++) {
-                if (this.recordings[i].logMethod === console.warn) {
-                    this._show(this.recordings[i], args);
-                }
-            }
-        }
-
-        /**
-        * Displays a series of recordings within a time period passed. 
-        * Time recorded is in milliseconds
-        * 
-        * @method showTimePeriod
-        * @param [start=0] {Number}
-        * @param [end=Infinity] {Number}
-        * @param [tags] {Array} An tags that the recordings must have.
-        * @public
-        */
-        public showTimePeriod(start: number=0, end: number=Infinity, tags:string[]=[]) {
-
-            var recording;
-
-            for (var i = 0; i < this.recordings.length; i++) {
-
-                recording = this.recordings[i];
-                if (start < recording.time && end > recording.time) {
-
-                    this._show(recording, tags);
-
-                }
-            }
-
-        }
-
-
-    }
-     
-}
\ No newline at end of file
+	/**
+	* A utilty class used to add management functionality to common console methods. 
+	* You can use this class by either creating a new instance, or using the instance at the namespace 'Kiwi.Log'.
+	* 
+	* log/error/warn methods contained on this class function just like their 'console' equivalents except that:
+	* - You can assign a tag to message by adding a '#' symbol to the front of a parameter. Example: this.log('Hi', '#welcome'); 
+	* - Messages can have multiple tags. Example: this.log('Hi', '#welcome', '#greeting');
+	* - Messages are recorded (by default) and you can then search through any messages saved.
+	*
+	* You can use the 'show' commands to search through recordings and find specific messages. 
+	*
+	* 
+	* @class Log
+	* @namespace Kiwi.Utils
+	* @constructor
+	* @param [params] {Object}
+	*   @param [options.recording=true] {Boolean} If the logs should be recorded.
+	*   @param [options.display=true] {Boolean} If the logs should be displayed or not.
+	*   @param [options.enabled=true] {Boolean} If the Logger is enabled at all.
+	*   @param [options.maxRecordings=Infinity] {Number} The maximum number of recordings to have at a single time.
+	*/
+	export class Log {
+
+		constructor(params: any= {}) {
+			this.setDefaultsFromParams(params);
+		}
+
+		/**
+		* Sets the log properties based on a object passed. 
+		* This method is used to set the properties on the Log based on 
+		* gameoptions passed at game creation.
+		* 
+		* @method setDefaultsFromParams
+		* @param [params] {Object}
+		*   @param [options.recording=true] {Boolean} If the logs should be recorded.
+		*   @param [options.display=true] {Boolean} If the logs should be displayed or not.
+		*   @param [options.enabled=true] {Boolean} If the Logger is enabled at all.
+		*   @param [options.maxRecordings=Infinity] {Number} The maximum number of recordings to have at a single time.
+		* @public
+		*/
+		public setDefaultsFromParams(params: any= {}) {
+
+			if (!Kiwi.Utils.Common.isUndefined(params.enabled)) {
+				this.enabled = params.enabled;
+			}
+
+			if (!Kiwi.Utils.Common.isUndefined(params.recording)) {
+				this.recording = params.recording;
+			}
+
+			if (!Kiwi.Utils.Common.isUndefined(params.display)) {
+				this.display = params.display;
+			}
+
+			if (!Kiwi.Utils.Common.isUndefined(params.maxRecordings)) {
+				this.maxRecordings = params.maxRecordings;
+			}
+
+		}
+
+		/**
+		* If the log, warn, or error messages should function at all.
+		* When set to false messages won't display or be recorded.
+		*
+		* @property enabled
+		* @type Boolean
+		* @default true 
+		* @public
+		*/
+		public enabled: boolean = true;
+		
+		/**
+		* If messages should be recorded or not.
+		*
+		* @property record
+		* @type Boolean
+		* @default true 
+		* @public
+		*/
+		public recording: boolean = true;
+		
+		/**
+		* If the log, warn, and error methods should display when executed or not.
+		* You may want to set this to 'false' when releasing a game.
+		*
+		* @property display
+		* @type Boolean
+		* @default true 
+		* @public
+		*/
+		public display: boolean = true;
+		
+		/**
+		* The maximum number of recordings to be kept at once.
+		*
+		* @property maxRecordings
+		* @type Number
+		* @default Infinity 
+		* @public
+		*/
+		public maxRecordings: number = Infinity;
+		
+		/**
+		* A list containing all messages recorded.
+		*
+		* @property recordings
+		* @type Array
+		* @private 
+		*/
+		private recordings: any[] = [];
+		
+		/**
+		* The time (in milliseconds) of the last recording.
+		*
+		* @property lastMessageTime
+		* @type Number
+		* @readOnly
+		* @public
+		*/
+		public get lastMessageTime():number {
+			if (this.recordings.length > 0) {
+				return this.recordings[this.recordings.length - 1].time;
+			}
+			return 0;
+		}
+		
+		/**
+		* The number of recordings that have been saved.
+		* Same as the recordings length, and won't go above the 'maxRecordings'.
+		*
+		* @property numRecordings
+		* @type Number
+		* @readOnly
+		* @public
+		*/
+		public get numRecordings():number {
+			return this.recordings.length;
+		}
+
+
+		/**
+		* Saves a message to the 'recordings' array.
+		* That message can then be retrieved later using the 'show' methods.
+		*
+		* @method recordMessage
+		* @param message {String}
+		* @param [tags=[]] {String}
+		* @param [logMethod=console.log] {String} 
+		* @public
+		*/
+		public record(messages: string[], tags:string[]=[], logMethod:any=console.log) {
+
+			if (this.recording) {
+
+				var recording = {
+					messages: messages,
+					time: Date.now(),
+					tags: tags,
+					logMethod: logMethod
+				};
+
+				if (this.recordings.push(recording) > this.maxRecordings) {
+					this.recordings.shift();
+				} 
+
+			}
+
+		}
+		
+		/**
+		* Removes recordings from the list. Goes from the oldest to newest. 
+		* By not passing any parameters, the entire log will be cleared.
+		*
+		* @method clearRecordings
+		* @param [start=0] {Number} 
+		* @param [end] {Number} 
+		* @public
+		*/
+		public clearRecordings(start: number=0, end: number=this.recordings.length) {
+
+			this.recordings.splice(start, end);
+
+		}
+		
+		/**
+		* Executes a particular array of messages using a method passed.
+		* Takes into account the 'display' property before executing. 
+		* 
+		* @method _execute
+		* @param method {Any} The method that should be used to log the messages. Generally a console method.
+		* @param context {Any} The context that the method should be executed in. Generally set to the console. 
+		* @param messages {Array} 
+		* @param [force=false] {Array}  
+		* @private
+		*/
+		private _execute(method:any, context: any, messages:string[], force:boolean=false) {
+
+			if (this.display || force) {
+				method.apply(context, messages);
+			}
+
+		}
+
+		/**
+		* Accepts an array of strings and returns a new array consisting of all elements considered as a tag.
+		* 
+		* @method getTagsFromArray
+		* @param strings {Array} 
+		* @return {Array} Elements of the array considered as tags
+		* @public
+		*/
+		public getTagsFromArray(array: string[]) {
+
+			var i = 0,
+				tags = [];
+
+			while ( i < array.length ) {
+				if ( typeof array[ i ] === "string" ) {
+					if ( array[ i ].charAt( 0 ) === "#" ) {
+						tags.push( array[ i ] );
+					}
+				}
+				i++;
+			}
+
+			return tags;
+
+		}
+		
+		/**
+		* Logs a message using the 'console.log' method.
+		* Arguments starting with a '#' symbol are given that value as a tag.
+		* 
+		* @method log
+		* @param [..args] {Any} The data you would like to log.
+		* @public
+		*/
+		public log(...args:any[]) {
+
+			if (!this.enabled) {
+				return;
+			}
+
+			this.record(args, this.getTagsFromArray(args), console.log);
+			this._execute(console.log, console, args);
+
+		}
+		
+
+		/**
+		* Logs a message using the 'console.warn' method.
+		* Arguments starting with a '#' symbol are given that value as a tag.
+		* 
+		* @method warn
+		* @param [..args] {Any} The data you would like to log.
+		* @public
+		*/
+		public warn(...args: any[]) {
+
+			if (!this.enabled) {
+				return;
+			}
+
+			this.record(args, this.getTagsFromArray(args), console.warn);
+			this._execute(console.warn, console, args);
+
+		}
+		
+		/**
+		* Logs a message using the 'console.error' method.
+		* Arguments starting with a '#' symbol are given that value as a tag.
+		*
+		* @method error
+		* @param [..args] {Any} The data you would like to log.
+		* @public
+		*/
+		public error(...args: any[]) {
+
+			if (!this.enabled) {
+				return;
+			}
+
+			this.record(args, this.getTagsFromArray(args), console.error);
+			this._execute(console.error, console, args);
+
+		}
+
+
+		/**
+		* Method that displays a particular recording passed.
+		*
+		* @method _show
+		* @param recording {Object}
+		* @param tags {Array}
+		* @return {Boolean} If the recording was displayed or not.
+		* @private
+		*/
+		private _show( recording, tags:string[] ) {
+
+			if (!recording.logMethod) {
+				return false;
+			}
+
+			//Check that the tags match
+			var n = tags.length;
+			while( n-- ) {
+
+				if ( recording.tags.indexOf( tags[ n ] ) == -1 ) {
+					return false;
+				}
+
+			}
+
+			this._execute(recording.logMethod, console, recording.messages, true );
+			return true;
+
+		}
+
+
+		/**
+		* Displays the last recording matching the tags passed.
+		* 
+		* @method showLast
+		* @param [...args] {Any} Any tags that the recordings must have.
+		* @public
+		*/
+		public showLast(...args:any[]) {
+			var i = this.recordings.length;
+			
+			while(i--) {
+				if (this._show(this.recordings[i], args)) {
+					return;
+				}
+			}
+		}
+
+
+		/**
+		* Displays all recordings.
+		* 
+		* @method showAll
+		* @param [...args] {Any} Any tags that the recordings must have.
+		* @public
+		*/
+		public showAll(...args: any[]) {
+			for (var i = 0; i < this.recordings.length; i++) {
+				this._show(this.recordings[i], args );
+			}
+		}
+
+
+		/**
+		* Displays all logs recorded.
+		* 
+		* @method showLogs
+		* @param [...args] {Any} Any tags that the recordings must have.
+		* @public
+		*/
+		public showLogs(...args: any[]) {
+			for (var i = 0; i < this.recordings.length; i++) {
+				if (this.recordings[i].logMethod === console.log) {
+					this._show(this.recordings[i], args);
+				}
+			}
+		}
+
+
+		/**
+		* Displays all errors recorded.
+		* 
+		* @method showErrors
+		* @param [...args] {Any} Any tags that the recordings must have.
+		* @public
+		*/
+		public showErrors(...args: any[]) {
+			for (var i = 0; i < this.recordings.length; i++) {
+				if (this.recordings[i].logMethod === console.error) {
+					this._show(this.recordings[i], args);
+				}
+			}
+		}
+
+
+		/**
+		* Displays all warnings recorded.
+		*
+		* @method showWarnings
+		* @param [...args] {Any} Any tags that the recordings must have.
+		* @public
+		*/
+		public showWarnings(...args: any[]) {
+			for (var i = 0; i < this.recordings.length; i++) {
+				if (this.recordings[i].logMethod === console.warn) {
+					this._show(this.recordings[i], args);
+				}
+			}
+		}
+
+		/**
+		* Displays a series of recordings within a time period passed. 
+		* Time recorded is in milliseconds
+		* 
+		* @method showTimePeriod
+		* @param [start=0] {Number}
+		* @param [end=Infinity] {Number}
+		* @param [tags] {Array} An tags that the recordings must have.
+		* @public
+		*/
+		public showTimePeriod(start: number=0, end: number=Infinity, tags:string[]=[]) {
+
+			var recording;
+
+			for (var i = 0; i < this.recordings.length; i++) {
+
+				recording = this.recordings[i];
+				if (start < recording.time && end > recording.time) {
+
+					this._show(recording, tags);
+
+				}
+			}
+
+		}
+
+	}
+
+}
diff --git a/src/utils/RandomDataGenerator.ts b/src/utils/RandomDataGenerator.ts
index df86906..3bec60c 100644
--- a/src/utils/RandomDataGenerator.ts
+++ b/src/utils/RandomDataGenerator.ts
@@ -6,418 +6,418 @@
 
 module Kiwi.Utils {
 
-    /**
-    * Manages the creation of unique internal game IDs.
-    * Based on Nonsense by Josh Faul https://github.com/jocafa/Nonsense
-    * Random number generator from http://baagoe.org/en/wiki/Better_random_numbers_for_javascript
-    *
-    * @class RandomDataGenerator
-    * @constructor
-    * @namespace Kiwi.Utils
-    * @param [seeds=[]] {String[]}
-    * @return {RandomDataGenerator}
-    *
-    * @author Josh Faul
-    */
-    export class RandomDataGenerator {
-         
-        constructor(seeds: string[] = []) {
-
-            this.sow(seeds);
-
-        }
-
-        /**
-        * The type of object that this is.
-        * @method objType
-        * @return {String} "RandomDataGenerator"
-        * @public
-        */
-        public objType() {
-            return "RandomDataGenerator";
-        }
-
-        /**
-        * [DESCRIPTION REQUIRED]
-        * @property s0
-        * @type Any
-        * @private
-        */
-        private s0;
-
-        /**
-        * [DESCRIPTION REQUIRED]
-        * @property s1
-        * @type Any
-        * @private
-        */
-        private s1;
-
-        /**
-        * [DESCRIPTION REQUIRED]
-        * @property s2
-        * @type Any
-        * @private
-        */
-        private s2;
-
-        /**
-        * [DESCRIPTION REQUIRED]
-        * @property c
-        * @type Number
-        * @default 1
-        * @private
-        */
-        private c: number = 1;
-
-        /**
-        * Used to contain various arrays of data that can be used when randomly generating blocks of text.
-        * @property _data
-        * @type Object
-        * @private
-        */
-        private _data = {
-
-            lipsum: [
-			    "lorem", "ipsum", "dolor", "sit", "amet", "consectetur",
-			    "adipiscing", "elit", "nunc", "sagittis", "tortor", "ac", "mi",
-			    "pretium", "sed", "convallis", "massa", "pulvinar", "curabitur",
-			    "non", "turpis", "velit", "vitae", "rutrum", "odio", "aliquam",
-			    "sapien", "orci", "tempor", "sed", "elementum", "sit", "amet",
-			    "tincidunt", "sed", "risus", "etiam", "nec", "lacus", "id", "ante",
-			    "hendrerit", "malesuada", "donec", "porttitor", "magna", "eget",
-			    "libero", "pharetra", "sollicitudin", "aliquam", "mattis", "mattis",
-			    "massa", "et", "porta", "morbi", "vitae", "magna", "augue",
-			    "vestibulum", "at", "lectus", "sed", "tellus", "facilisis",
-			    "tincidunt", "suspendisse", "eros", "magna", "consequat", "at",
-			    "sollicitudin", "ac", "vestibulum", "vel", "dolor", "in", "egestas",
-			    "lacus", "quis", "lacus", "placerat", "et", "molestie", "ipsum",
-			    "scelerisque", "nullam", "sit", "amet", "tortor", "dui", "aenean",
-			    "pulvinar", "odio", "nec", "placerat", "fringilla", "neque", "dolor"
-            ]
-        };
-
-        /**
-        * [DESCRIPTION REQUIRED]
-        * @method uint32
-        * @return {Any}
-        * @private
-        */
-        private uint32():any {
-
-            return this.rnd.apply(this) * 0x100000000; // 2^32
-
-        }
-
-        /**
-        * [DESCRIPTION REQUIRED]
-        * @method fract32
-        * @return {Any}
-        * @private
-        */
-        private fract32():any {
-
-            return this.rnd.apply(this) + (this.rnd.apply(this) * 0x200000 | 0) * 1.1102230246251565e-16; // 2^-53
-
-        }
-
-        // private random helper
-        /**
-        * [DESCRIPTION REQUIRED]
-        * @method rnd
-        * @return {Any}
-        * @private
-        */
-        private rnd():any {
-
-            var t = 2091639 * this.s0 + this.c * 2.3283064365386963e-10; // 2^-32
-
-            this.c = t | 0;
-            this.s0 = this.s1;
-            this.s1 = this.s2;
-            this.s2 = t - this.c;
-
-            return this.s2;
-        }
-
-        /**
-        * [DESCRIPTION REQUIRED]
-        * @method hash
-        * @param data {Any}
-        * @private
-        */
-        private hash(data):any {
-
-            var h, i, n;
-
-            n = 0xefc8249d;
-
-            data = data.toString();
-
-            for (i = 0; i < data.length; i++)
-            {
-                n += data.charCodeAt(i);
-                h = 0.02519603282416938 * n;
-                n = h >>> 0;
-                h -= n;
-                h *= n;
-                n = h >>> 0;
-                h -= n;
-                n += h * 0x100000000; // 2^32
-            }
-
-            return (n >>> 0) * 2.3283064365386963e-10; // 2^-32
-
-        }
-
-        /**
-        * Reset the seed of the random data generator
-        * @method sow
-        * @param [seeds=[]] {String[]}
-        * @public
-        */
-        public sow(seeds: string[] = []) {
-
-            this.s0 = this.hash(' ');
-            this.s1 = this.hash(this.s0);
-            this.s2 = this.hash(this.s1);
-
-            var seed;
-
-            for (var i = 0; seed = seeds[i++];)
-            {
-                this.s0 -= this.hash(seed);
-                this.s0 += ~~(this.s0 < 0);
-
-                this.s1 -= this.hash(seed);
-                this.s1 += ~~(this.s1 < 0);
-
-                this.s2 -= this.hash(seed);
-                this.s2 += ~~(this.s2 < 0);
-            }
-
-        }
-
-        /**
-        * Returns a random integer between 0 and 2^32
-        * @method integer
-        * @return {Number}
-        * @public
-        */
-        public integer(): number {
-
-            return this.uint32();
-
-        }
-
-        /**
-        * Returns a random real number between 0 and 1
-        * @method frac
-        * @return {Number}
-        * @public
-        */
-        public frac(): number {
-
-            return this.fract32();
-
-        }
-
-        /**
-        * Returns a random real number between 0 and 2^32
-        * @method real
-        * @return {Number}
-        * @public
-        */
-        public real(): number {
+	/**
+	* Manages the creation of unique internal game IDs.
+	* Based on Nonsense by Josh Faul https://github.com/jocafa/Nonsense
+	* Random number generator from http://baagoe.org/en/wiki/Better_random_numbers_for_javascript
+	*
+	* @class RandomDataGenerator
+	* @constructor
+	* @namespace Kiwi.Utils
+	* @param [seeds=[]] {String[]}
+	* @return {RandomDataGenerator}
+	*
+	* @author Josh Faul
+	*/
+	export class RandomDataGenerator {
+
+		constructor(seeds: string[] = []) {
+
+			this.sow(seeds);
+
+		}
+
+		/**
+		* The type of object that this is.
+		* @method objType
+		* @return {String} "RandomDataGenerator"
+		* @public
+		*/
+		public objType() {
+			return "RandomDataGenerator";
+		}
+
+		/**
+		* [DESCRIPTION REQUIRED]
+		* @property s0
+		* @type Any
+		* @private
+		*/
+		private s0;
+
+		/**
+		* [DESCRIPTION REQUIRED]
+		* @property s1
+		* @type Any
+		* @private
+		*/
+		private s1;
+
+		/**
+		* [DESCRIPTION REQUIRED]
+		* @property s2
+		* @type Any
+		* @private
+		*/
+		private s2;
+
+		/**
+		* [DESCRIPTION REQUIRED]
+		* @property c
+		* @type Number
+		* @default 1
+		* @private
+		*/
+		private c: number = 1;
+
+		/**
+		* Used to contain various arrays of data that can be used when randomly generating blocks of text.
+		* @property _data
+		* @type Object
+		* @private
+		*/
+		private _data = {
+
+			lipsum: [
+				"lorem", "ipsum", "dolor", "sit", "amet", "consectetur",
+				"adipiscing", "elit", "nunc", "sagittis", "tortor", "ac", "mi",
+				"pretium", "sed", "convallis", "massa", "pulvinar", "curabitur",
+				"non", "turpis", "velit", "vitae", "rutrum", "odio", "aliquam",
+				"sapien", "orci", "tempor", "sed", "elementum", "sit", "amet",
+				"tincidunt", "sed", "risus", "etiam", "nec", "lacus", "id", "ante",
+				"hendrerit", "malesuada", "donec", "porttitor", "magna", "eget",
+				"libero", "pharetra", "sollicitudin", "aliquam", "mattis", "mattis",
+				"massa", "et", "porta", "morbi", "vitae", "magna", "augue",
+				"vestibulum", "at", "lectus", "sed", "tellus", "facilisis",
+				"tincidunt", "suspendisse", "eros", "magna", "consequat", "at",
+				"sollicitudin", "ac", "vestibulum", "vel", "dolor", "in", "egestas",
+				"lacus", "quis", "lacus", "placerat", "et", "molestie", "ipsum",
+				"scelerisque", "nullam", "sit", "amet", "tortor", "dui", "aenean",
+				"pulvinar", "odio", "nec", "placerat", "fringilla", "neque", "dolor"
+			]
+		};
+
+		/**
+		* [DESCRIPTION REQUIRED]
+		* @method uint32
+		* @return {Any}
+		* @private
+		*/
+		private uint32():any {
+
+			return this.rnd.apply(this) * 0x100000000; // 2^32
+
+		}
+
+		/**
+		* [DESCRIPTION REQUIRED]
+		* @method fract32
+		* @return {Any}
+		* @private
+		*/
+		private fract32():any {
+
+			return this.rnd.apply(this) + (this.rnd.apply(this) * 0x200000 | 0) * 1.1102230246251565e-16; // 2^-53
+
+		}
+
+		// private random helper
+		/**
+		* [DESCRIPTION REQUIRED]
+		* @method rnd
+		* @return {Any}
+		* @private
+		*/
+		private rnd():any {
+
+			var t = 2091639 * this.s0 + this.c * 2.3283064365386963e-10; // 2^-32
+
+			this.c = t | 0;
+			this.s0 = this.s1;
+			this.s1 = this.s2;
+			this.s2 = t - this.c;
+
+			return this.s2;
+		}
+
+		/**
+		* [DESCRIPTION REQUIRED]
+		* @method hash
+		* @param data {Any}
+		* @private
+		*/
+		private hash(data):any {
+
+			var h, i, n;
+
+			n = 0xefc8249d;
+
+			data = data.toString();
+
+			for (i = 0; i < data.length; i++)
+			{
+				n += data.charCodeAt(i);
+				h = 0.02519603282416938 * n;
+				n = h >>> 0;
+				h -= n;
+				h *= n;
+				n = h >>> 0;
+				h -= n;
+				n += h * 0x100000000; // 2^32
+			}
+
+			return (n >>> 0) * 2.3283064365386963e-10; // 2^-32
+
+		}
+
+		/**
+		* Reset the seed of the random data generator
+		* @method sow
+		* @param [seeds=[]] {String[]}
+		* @public
+		*/
+		public sow(seeds: string[] = []) {
+
+			this.s0 = this.hash(' ');
+			this.s1 = this.hash(this.s0);
+			this.s2 = this.hash(this.s1);
+
+			var seed;
+
+			for (var i = 0; seed = seeds[i++];)
+			{
+				this.s0 -= this.hash(seed);
+				this.s0 += ~~(this.s0 < 0);
+
+				this.s1 -= this.hash(seed);
+				this.s1 += ~~(this.s1 < 0);
+
+				this.s2 -= this.hash(seed);
+				this.s2 += ~~(this.s2 < 0);
+			}
+
+		}
+
+		/**
+		* Returns a random integer between 0 and 2^32
+		* @method integer
+		* @return {Number}
+		* @public
+		*/
+		public integer(): number {
+
+			return this.uint32();
+
+		}
+
+		/**
+		* Returns a random real number between 0 and 1
+		* @method frac
+		* @return {Number}
+		* @public
+		*/
+		public frac(): number {
+
+			return this.fract32();
+
+		}
+
+		/**
+		* Returns a random real number between 0 and 2^32
+		* @method real
+		* @return {Number}
+		* @public
+		*/
+		public real(): number {
 
-            return this.uint32() + this.fract32();
-
-        }
-
-        /**
-        * Returns a random integer between min and max
-        * @method integerInRange
-        * @param min {Number}
-        * @param max {Number}
-        * @return {Number}
-        * @public
-        */
-        public integerInRange(min: number, max: number): number {
-
-            return Math.floor(this.realInRange(min, max));
+			return this.uint32() + this.fract32();
+
+		}
+
+		/**
+		* Returns a random integer between min and max
+		* @method integerInRange
+		* @param min {Number}
+		* @param max {Number}
+		* @return {Number}
+		* @public
+		*/
+		public integerInRange(min: number, max: number): number {
+
+			return Math.floor(this.realInRange(min, max));
 
-        }
+		}
  
-        /**
-        * Returns a random real number between min and max
-        * @method realInRange
-        * @param min {Number}
-        * @param max {Number}
-        * @return {Number}
-        * @public
-        */
-        public realInRange(min: number, max: number): number {
-
-            min = min || 0;
-            max = max || 0;
-
-            return this.frac() * (max - min) + min;
-
-        }
-
-        /**
-        * Returns a random real number between -1 and 1
-        * @method normal
-        * @return {Number}
-        * @public
-        */
-        public normal(): number {
-
-            return 1 - 2 * this.frac();
-
-        }
-
-        /**
-        * Returns a valid v4 UUID hex string (from https://gist.github.com/1308368)
-        * @method uuid
-        * @return {String}
-        * @public
-        */
-        public uuid(): string {
-
-            var a, b;
-
-            for (
-                b = a = '';
-                a++ < 36;
-                b += ~a % 5 | a * 3 & 4 ? (a ^ 15 ? 8 ^ this.frac() * (a ^ 20 ? 16 : 4) : 4).toString(16) : '-'
-            );
-
-            return b;
-        }
+		/**
+		* Returns a random real number between min and max
+		* @method realInRange
+		* @param min {Number}
+		* @param max {Number}
+		* @return {Number}
+		* @public
+		*/
+		public realInRange(min: number, max: number): number {
+
+			min = min || 0;
+			max = max || 0;
+
+			return this.frac() * (max - min) + min;
+
+		}
+
+		/**
+		* Returns a random real number between -1 and 1
+		* @method normal
+		* @return {Number}
+		* @public
+		*/
+		public normal(): number {
+
+			return 1 - 2 * this.frac();
+
+		}
+
+		/**
+		* Returns a valid v4 UUID hex string (from https://gist.github.com/1308368)
+		* @method uuid
+		* @return {String}
+		* @public
+		*/
+		public uuid(): string {
+
+			var a, b;
+
+			for (
+				b = a = '';
+				a++ < 36;
+				b += ~a % 5 | a * 3 & 4 ? (a ^ 15 ? 8 ^ this.frac() * (a ^ 20 ? 16 : 4) : 4).toString(16) : '-'
+			);
+
+			return b;
+		}
  
-        /**
-        * Returns a random member of `array`
-        * @method pick
-        * @param {Any} array
-        * @return {Any}
-        * @public
-        */
-        public pick(array):any {
-
-            return array[this.integerInRange(0, array.length)];
+		/**
+		* Returns a random member of `array`
+		* @method pick
+		* @param {Any} array
+		* @return {Any}
+		* @public
+		*/
+		public pick(array):any {
+
+			return array[this.integerInRange(0, array.length)];
 
-        }
-
-        /**
-        * Returns a random member of `array`, favoring the earlier entries
-        * @method weightedPick
-        * @param {Any} array
-        * @return {Any}
-        * @public
-        */
-        public weightedPick(array):any {
+		}
+
+		/**
+		* Returns a random member of `array`, favoring the earlier entries
+		* @method weightedPick
+		* @param {Any} array
+		* @return {Any}
+		* @public
+		*/
+		public weightedPick(array):any {
 
-            return array[~~(Math.pow(this.frac(), 2) * array.length)];
+			return array[~~(Math.pow(this.frac(), 2) * array.length)];
 
-        }
+		}
 
-        /**
-        * Returns a random word of lipsum
-        * @method word
-        * @return {String}
-        * @public
-        */
-        public word():string {
+		/**
+		* Returns a random word of lipsum
+		* @method word
+		* @return {String}
+		* @public
+		*/
+		public word():string {
 
-            return this.pick(this._data.lipsum);
+			return this.pick(this._data.lipsum);
 
-        }
+		}
 
-        /**
-        * Returns `n` random words of lipsum, 3 if not specified
-        * @method words
-        * @param {Number} [quantity=3] Amount of random words to get.
-        * @return {String} 
-        * @public
-        */
-        public words(quantity: number = 3):string {
+		/**
+		* Returns `n` random words of lipsum, 3 if not specified
+		* @method words
+		* @param {Number} [quantity=3] Amount of random words to get.
+		* @return {String} 
+		* @public
+		*/
+		public words(quantity: number = 3):string {
 
-            var ret = [];
+			var ret = [];
 
-            for (var i = 0; i < quantity; i++)
-            {
-                ret.push(this.pick(this._data.lipsum));
-            }
+			for (var i = 0; i < quantity; i++)
+			{
+				ret.push(this.pick(this._data.lipsum));
+			}
 
-            return ret.join(' ');
+			return ret.join(' ');
 
-        }
+		}
 
-        /**
-        * Returns a random lipsum sentence
-        * @method sentence
-        * @return {String}
-        * @public
-        */
-        public sentence():String {
+		/**
+		* Returns a random lipsum sentence
+		* @method sentence
+		* @return {String}
+		* @public
+		*/
+		public sentence():String {
 
-            var ret;
+			var ret;
 
-            ret = this.words(this.integerInRange(2, 16)).replace(/[a-z]/, function (m) {
-                return m.toUpperCase();
-            });
+			ret = this.words(this.integerInRange(2, 16)).replace(/[a-z]/, function (m) {
+				return m.toUpperCase();
+			});
 
-            return ret + '.';
+			return ret + '.';
 
-        }
+		}
 
-        /**
-        * Returns `n` random lipsum sentences, 3 if not specified
-        * @method sentences
-        * @param {Number} [quantity=3] The number of sentences to grab.
-        * @return {String}
-        * @public
-        */
-        public sentences(quantity: number = 3) {
+		/**
+		* Returns `n` random lipsum sentences, 3 if not specified
+		* @method sentences
+		* @param {Number} [quantity=3] The number of sentences to grab.
+		* @return {String}
+		* @public
+		*/
+		public sentences(quantity: number = 3) {
 
-            var ret = [];
+			var ret = [];
 
-            for (var i = 0; i < quantity; i++)
-            {
-                ret.push(this.sentence());
-            }
+			for (var i = 0; i < quantity; i++)
+			{
+				ret.push(this.sentence());
+			}
 
-            return ret.join(' ');
+			return ret.join(' ');
 
-        }
+		}
 
-        /**
-        * Returns a random timestamp between min and max, or between the beginning of 2000 and the end of 2020 if min and max aren't specified
-        * @method timestamp
-        * @param [min=946684800000] {Number} The lowest timestamp.
-        * @param [max=1577862000000] {Number} The highest timestamp.
-        * @return {Number}
-        * @public
-        */
-        public timestamp(min: number = 946684800000, max: number = 1577862000000):number {
+		/**
+		* Returns a random timestamp between min and max, or between the beginning of 2000 and the end of 2020 if min and max aren't specified
+		* @method timestamp
+		* @param [min=946684800000] {Number} The lowest timestamp.
+		* @param [max=1577862000000] {Number} The highest timestamp.
+		* @return {Number}
+		* @public
+		*/
+		public timestamp(min: number = 946684800000, max: number = 1577862000000):number {
 
-            return this.realInRange(min, max);
+			return this.realInRange(min, max);
 
-        }
+		}
 
-        /**
-        * Returns a random angle between -180 and 180
-        * @method angle
-        * @return {Number}
-        * @public
-        */
-        public angle():number {
+		/**
+		* Returns a random angle between -180 and 180
+		* @method angle
+		* @return {Number}
+		* @public
+		*/
+		public angle():number {
 
-            return this.integerInRange(-180, 180);
+			return this.integerInRange(-180, 180);
 
-        }
+		}
 
-    }
+	}
 
 }
diff --git a/src/utils/RequestAnimationFrame.ts b/src/utils/RequestAnimationFrame.ts
index 1674c72..c872261 100644
--- a/src/utils/RequestAnimationFrame.ts
+++ b/src/utils/RequestAnimationFrame.ts
@@ -6,227 +6,227 @@
 
 module Kiwi.Utils {
 
-    /**
-    * Abstracts away the use of RAF or setTimeout for the core game update loop. The callback can be re-mapped on the fly.
-    *
-    * @class RequestAnimationFrame
-    * @constructor
-    * @namespace Kiwi.Utils
-    * @param callback {Any}
-    * @return {RequestAnimationFrame} This object.
-    *
-    */
-    export class RequestAnimationFrame {
- 
-        constructor (callback) {
-
-            this._callback = callback;
-
-            var vendors = ['ms', 'moz', 'webkit', 'o'];
-
-            for (var x = 0; x < vendors.length && !window.requestAnimationFrame; x++)
-            {
-                window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];
-                window.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'];
-            }
-
-        }
-
-        /**
-        * The type of obect that this is.
-        * @method objType
-        * @return {String} "RequestAnimationFrame"
-        * @public
-        */
-        public objType() {
-            return "RequestAnimationFrame";
-        }
-
-        /**
-        * The callback method that gets executed every time the RAF is executed.
-        * @property _callback
-        * @type Any
-        * @private
-        */
-        private _callback;
-
-        /**
-        * Sets the callback method that is to be executed each time the RAF is.
-        * @method setCallback
-        * @param {Any} callback
-        * @public
-        */
-        public setCallback(callback) {
-
-            this._callback = callback;
-
-        }
-
-        /**
-        * If the RAF is not supported, then this is the ID of the timeout that will be set.
-        * @property _timeOutID
-        * @type Any
-        * @private
-        */
-        private _timeOutID;
-
-        /**
-        * A boolean indicating whether or not we are using setTimeout for the RequestAnimationFrame or not.
-        * @property _isSetTimeOut
-        * @type boolean
-        * @default false
-        * @private
-        */
-        private _isSetTimeOut: boolean = false;
-
-        /**
-        * Returns a boolean indicating whether or not setTimeout is being used instead of RAF.
-        * @method usingSetTimeOut
-        * @return {boolean}
-        * @public
-        */
-        public isUsingSetTimeOut(): boolean {
-
-            return this._isSetTimeOut;
-
-        }
-
-        /**
-        * Returns a boolean indicating wheather or not we are using the RAF. If false it means we are using setTimeout for our update loop.
-        * @method usingRAF
-        * @return {boolean}
-        * @public
-        */
-        public isUsingRAF(): boolean {
-
-            if (this._isSetTimeOut === true)
-            {
-                return false;
-            } else {
-                return true;
-            }
-
-        }
-
-        /**
-        * The last time at which the RAF was called. This is given a value at the end of the RAF loop.
-        * @property lastTime
-        * @type Number
-        * @public
-        */
-        public lastTime: number = 0;
-
-        /**
-        * A timestamp that has the current time. This is updated each time the RAF loop is executed. Is updated before the last time in the loop.
-        * @property currentTime
-        * @type Number
-        * @public
-        */
-        public currentTime: number = 0;
-
-        /**
-        * A boolean indicating whether or not the RAF is running.
-        * @property isRunning
-        * @type boolean
-        * @default false
-        * @public
-        */
-        public isRunning: boolean = false;
-
-        /**
-        * Starts the RequestAnimationFrame (or setTimeout if RAF not supported).
-        * @method start
-        * @param [callback] {Any} A callback to be executed everyframe. Overrides the callback set at instantiation if passed.
-        * @public
-        */
-        public start(callback = null) {
-
-            if (callback)
-            {
-                this._callback = callback;
-            }
-
-            if (!window.requestAnimationFrame)
-            {
-                this._isSetTimeOut = true;
-                this._timeOutID = window.setTimeout(() => this.SetTimeoutUpdate(), 0);
-            }
-            else
-            {
-                this._isSetTimeOut = false;
-                window.requestAnimationFrame(() => this.RAFUpdate());
-            }
-
-            this.isRunning = true;
-
-        }
-
-        /**
-        * Stops the RAF from running.
-        * @method stop 
-        * @public
-        */
-        public stop() {
-
-            if (this._isSetTimeOut)
-            {
-                clearTimeout(this._timeOutID);
-            }
-            else
-            {
-                window.cancelAnimationFrame;
-            }
-
-            this.isRunning = false;
-
-        }
-
-        /**
-        * The update loop that the RAF will continuously call.
-        * @method RAFUpdate 
-        * @public
-        */
-        public RAFUpdate() {
-
-            //  Not in IE8 (but neither is RAF) also doesn't use a high performance timer (window.performance.now)
-            this.currentTime = Date.now();
-
-            if (this._callback)
-            {
-                this._callback();
-            }
-
-            var timeToCall: number = Math.max(0, 16 - (this.currentTime - this.lastTime));
-
-            window.requestAnimationFrame(() => this.RAFUpdate());
-
-            this.lastTime = this.currentTime + timeToCall;
-
-        }
-
-        /**
-        * The update loop that the setTimeout method will continuously call.
-        * @method SetTimeoutUpdate 
-        * @public
-        */
-        public SetTimeoutUpdate() {
-
-            //  Not in IE8
-            this.currentTime = Date.now();
-
-            if (this._callback)
-            {
-                this._callback();
-            }
-
-            var timeToCall: number = Math.max(0, 16 - (this.currentTime - this.lastTime));
-
-            this._timeOutID = window.setTimeout(() => this.SetTimeoutUpdate(), timeToCall);
-
-            this.lastTime = this.currentTime + timeToCall;
-
-        }
-        
-    }
+	/**
+	* Abstracts away the use of RAF or setTimeout for the core game update loop. The callback can be re-mapped on the fly.
+	*
+	* @class RequestAnimationFrame
+	* @constructor
+	* @namespace Kiwi.Utils
+	* @param callback {Any}
+	* @return {RequestAnimationFrame} This object.
+	*
+	*/
+	export class RequestAnimationFrame {
+
+		constructor (callback) {
+
+			this._callback = callback;
+
+			var vendors = ['ms', 'moz', 'webkit', 'o'];
+
+			for (var x = 0; x < vendors.length && !window.requestAnimationFrame; x++)
+			{
+				window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];
+				window.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'];
+			}
+
+		}
+
+		/**
+		* The type of obect that this is.
+		* @method objType
+		* @return {String} "RequestAnimationFrame"
+		* @public
+		*/
+		public objType() {
+			return "RequestAnimationFrame";
+		}
+
+		/**
+		* The callback method that gets executed every time the RAF is executed.
+		* @property _callback
+		* @type Any
+		* @private
+		*/
+		private _callback;
+
+		/**
+		* Sets the callback method that is to be executed each time the RAF is.
+		* @method setCallback
+		* @param {Any} callback
+		* @public
+		*/
+		public setCallback(callback) {
+
+			this._callback = callback;
+
+		}
+
+		/**
+		* If the RAF is not supported, then this is the ID of the timeout that will be set.
+		* @property _timeOutID
+		* @type Any
+		* @private
+		*/
+		private _timeOutID;
+
+		/**
+		* A boolean indicating whether or not we are using setTimeout for the RequestAnimationFrame or not.
+		* @property _isSetTimeOut
+		* @type boolean
+		* @default false
+		* @private
+		*/
+		private _isSetTimeOut: boolean = false;
+
+		/**
+		* Returns a boolean indicating whether or not setTimeout is being used instead of RAF.
+		* @method usingSetTimeOut
+		* @return {boolean}
+		* @public
+		*/
+		public isUsingSetTimeOut(): boolean {
+
+			return this._isSetTimeOut;
+
+		}
+
+		/**
+		* Returns a boolean indicating wheather or not we are using the RAF. If false it means we are using setTimeout for our update loop.
+		* @method usingRAF
+		* @return {boolean}
+		* @public
+		*/
+		public isUsingRAF(): boolean {
+
+			if (this._isSetTimeOut === true)
+			{
+				return false;
+			} else {
+				return true;
+			}
+
+		}
+
+		/**
+		* The last time at which the RAF was called. This is given a value at the end of the RAF loop.
+		* @property lastTime
+		* @type Number
+		* @public
+		*/
+		public lastTime: number = 0;
+
+		/**
+		* A timestamp that has the current time. This is updated each time the RAF loop is executed. Is updated before the last time in the loop.
+		* @property currentTime
+		* @type Number
+		* @public
+		*/
+		public currentTime: number = 0;
+
+		/**
+		* A boolean indicating whether or not the RAF is running.
+		* @property isRunning
+		* @type boolean
+		* @default false
+		* @public
+		*/
+		public isRunning: boolean = false;
+
+		/**
+		* Starts the RequestAnimationFrame (or setTimeout if RAF not supported).
+		* @method start
+		* @param [callback] {Any} A callback to be executed everyframe. Overrides the callback set at instantiation if passed.
+		* @public
+		*/
+		public start(callback = null) {
+
+			if (callback)
+			{
+				this._callback = callback;
+			}
+
+			if (!window.requestAnimationFrame)
+			{
+				this._isSetTimeOut = true;
+				this._timeOutID = window.setTimeout(() => this.SetTimeoutUpdate(), 0);
+			}
+			else
+			{
+				this._isSetTimeOut = false;
+				window.requestAnimationFrame(() => this.RAFUpdate());
+			}
+
+			this.isRunning = true;
+
+		}
+
+		/**
+		* Stops the RAF from running.
+		* @method stop 
+		* @public
+		*/
+		public stop() {
+
+			if (this._isSetTimeOut)
+			{
+				clearTimeout(this._timeOutID);
+			}
+			else
+			{
+				window.cancelAnimationFrame;
+			}
+
+			this.isRunning = false;
+
+		}
+
+		/**
+		* The update loop that the RAF will continuously call.
+		* @method RAFUpdate 
+		* @public
+		*/
+		public RAFUpdate() {
+
+			//  Not in IE8 (but neither is RAF) also doesn't use a high performance timer (window.performance.now)
+			this.currentTime = Date.now();
+
+			if (this._callback)
+			{
+				this._callback();
+			}
+
+			var timeToCall: number = Math.max(0, 16 - (this.currentTime - this.lastTime));
+
+			window.requestAnimationFrame(() => this.RAFUpdate());
+
+			this.lastTime = this.currentTime + timeToCall;
+
+		}
+
+		/**
+		* The update loop that the setTimeout method will continuously call.
+		* @method SetTimeoutUpdate 
+		* @public
+		*/
+		public SetTimeoutUpdate() {
+
+			//  Not in IE8
+			this.currentTime = Date.now();
+
+			if (this._callback)
+			{
+				this._callback();
+			}
+
+			var timeToCall: number = Math.max(0, 16 - (this.currentTime - this.lastTime));
+
+			this._timeOutID = window.setTimeout(() => this.SetTimeoutUpdate(), timeToCall);
+
+			this.lastTime = this.currentTime + timeToCall;
+
+		}
+
+	}
 
 }
diff --git a/src/utils/Version.ts b/src/utils/Version.ts
index d87003e..c629529 100644
--- a/src/utils/Version.ts
+++ b/src/utils/Version.ts
@@ -6,83 +6,83 @@
 
 module Kiwi.Utils {
 
-    /**
-    * Deals with parsing and comparing semver style version numbers
-    * @class Version
-    * @constructor
-    * @namespace Kiwi.Utils
-    */
-    export class Version {
+	/**
+	* Deals with parsing and comparing semver style version numbers
+	* @class Version
+	* @constructor
+	* @namespace Kiwi.Utils
+	*/
+	export class Version {
 
-        /**
-        * Parses a string such as "1.2.3" and returns an oject containing numeric properties for majorVersion, minorVersion and patchVersion
-        * @method parseVersion
-        * @param version {String}
-        * @return {Object} Object with properties majorVersion, minorVersion, patchVersion.
-        * @public
-        * @static
-        */
-        public static parseVersion(version: string) {
-            var split: Array<string> = version.split(".");
-            return {
-                majorVersion: parseInt(split[0]),
-                minorVersion: parseInt(split[1]),
-                patchVersion: parseInt(split[2])
-            }  
-        }
+		/**
+		* Parses a string such as "1.2.3" and returns an oject containing numeric properties for majorVersion, minorVersion and patchVersion
+		* @method parseVersion
+		* @param version {String}
+		* @return {Object} Object with properties majorVersion, minorVersion, patchVersion.
+		* @public
+		* @static
+		*/
+		public static parseVersion(version: string) {
+			var split: Array<string> = version.split(".");
+			return {
+				majorVersion: parseInt(split[0]),
+				minorVersion: parseInt(split[1]),
+				patchVersion: parseInt(split[2])
+			}
+		}
 
-        /**
-        * Compares two semver version strings such as "0.1.0" and "0.2.1".
-        * Returns "greater", "less" or "equal".
-        * @method compareVersions
-        * @param version1 {String}
-        * @param version2 {String}
-        * @return {String} "greater", "less" or "equal"
-        * @public
-        * @static
-        */
-        public static compareVersions(version1: string, version2: string): string {
-            var v1:any = Version.parseVersion(version1);
-            var v2:any = Version.parseVersion(version2);
-            if (v1.majorVersion > v2.majorVersion) {
-                return "greater";    
-            }
-            if (v1.majorVersion < v2.majorVersion) {
-                return "less";
-            }
-            // major versions must be equal
-            if (v1.minorVersion > v2.minorVersion) {
-                return "greater";
-            }
-            if (v1.minorVersion < v2.minorVersion) {
-                return "less";
-            }
-            //minor versions must be equal
-            if (v1.patchVersion > v2.patchVersion) {
-                return "greater";
-            }
-            if (v1.patchVersion < v2.patchVersion) {
-                return "less";
-            }
-            //patch versions must be equal
-            return "equal";
+		/**
+		* Compares two semver version strings such as "0.1.0" and "0.2.1".
+		* Returns "greater", "less" or "equal".
+		* @method compareVersions
+		* @param version1 {String}
+		* @param version2 {String}
+		* @return {String} "greater", "less" or "equal"
+		* @public
+		* @static
+		*/
+		public static compareVersions(version1: string, version2: string): string {
+			var v1:any = Version.parseVersion(version1);
+			var v2:any = Version.parseVersion(version2);
+			if (v1.majorVersion > v2.majorVersion) {
+				return "greater";
+			}
+			if (v1.majorVersion < v2.majorVersion) {
+				return "less";
+			}
+			// major versions must be equal
+			if (v1.minorVersion > v2.minorVersion) {
+				return "greater";
+			}
+			if (v1.minorVersion < v2.minorVersion) {
+				return "less";
+			}
+			//minor versions must be equal
+			if (v1.patchVersion > v2.patchVersion) {
+				return "greater";
+			}
+			if (v1.patchVersion < v2.patchVersion) {
+				return "less";
+			}
+			//patch versions must be equal
+			return "equal";
 
-        }
+		}
 
-        /**
-        * Compares two semver version strings such as "0.1.0" and "0.2.1". Returns true if version1 is greater than version2. 
-        * @method greaterOrEqual
-        * @param version1 {String}
-        * @param version2 {String}
-        * @return {boolean}
-        * @public
-        * @static
-        */
-        public static greaterOrEqual(version1: string, version2: string): boolean {
-            var comp = Version.compareVersions(version1, version2);
-            return (comp == "greater" || comp == "equal");
-        }
+		/**
+		* Compares two semver version strings such as "0.1.0" and "0.2.1". Returns true if version1 is greater than version2. 
+		* @method greaterOrEqual
+		* @param version1 {String}
+		* @param version2 {String}
+		* @return {boolean}
+		* @public
+		* @static
+		*/
+		public static greaterOrEqual(version1: string, version2: string): boolean {
+			var comp = Version.compareVersions(version1, version2);
+			return (comp == "greater" || comp == "equal");
+		}
 
-    }
+	}
 
 }
diff --git a/templateGame/lib/kiwi.js b/templateGame/lib/kiwi.js
index a85b529..09dea29 100644
--- a/templateGame/lib/kiwi.js
+++ b/templateGame/lib/kiwi.js
@@ -14663,8 +14663,6 @@ var Kiwi;
     })(Renderers = Kiwi.Renderers || (Kiwi.Renderers = {}));
 })(Kiwi || (Kiwi = {}));
 /**
-*
-*
 * @module Kiwi
 * @submodule Renderers
 * @main Renderers
@@ -14928,8 +14926,8 @@ var Kiwi;
                     }
                 }, this);
                 /* if (this.filtersEnabled && !this.filters.isEmpty) {
-                     this.filters.enableFrameBuffers(gl);
-                 }*/
+                    this.filters.enableFrameBuffers(gl);
+                }*/
             };
             /**
             * Scales the viewport according to a scale mode and space dimensions.
@@ -15255,11 +15253,11 @@ var Kiwi;
         var ShaderManager = (function () {
             function ShaderManager() {
                 /**
-               * An object containing a set of properties each of which references a ShaderPair.
-               * @property _shaderPairs
-               * @type Object
-               * @private
-               */
+                * An object containing a set of properties each of which references a ShaderPair.
+                * @property _shaderPairs
+                * @type Object
+                * @private
+                */
                 this._shaderPairs = {};
             }
             Object.defineProperty(ShaderManager.prototype, "currentShader", {
@@ -15442,6 +15440,12 @@ var Kiwi;
                 configurable: true
             });
             Object.defineProperty(GLTextureWrapper.prototype, "image", {
+                /**
+                * The image wrapped by this wrapper.
+                * @property image
+                * @type HTMLImageElement
+                * @public
+                */
                 get: function () {
                     return (this._image);
                 },
@@ -15453,7 +15457,6 @@ var Kiwi;
                 enumerable: true,
                 configurable: true
             });
-            //force : if true then other textures will be removed until there is room.
             /**
             * Creates a webgl texture object
             * @method createTexture
@@ -16273,15 +16276,15 @@ var Kiwi;
     (function (Renderers) {
         var Renderer = (function () {
             /**
-             * Base class for WebGL Renderers. Not for instantiation.
-             * @class Renderer
-             * @constructor
-             * @namespace Kiwi.Renderers
-             * @param gl {WebGLRenderingContext}
-               * @param shaderManager {Kiwi.Shaders.ShaderManager}
-             * @param [params=null] {object}
-             * @return {Kiwi.Renderers.Renderer}
-             */
+            * Base class for WebGL Renderers. Not for instantiation.
+            * @class Renderer
+            * @constructor
+            * @namespace Kiwi.Renderers
+            * @param gl {WebGLRenderingContext}
+            * @param shaderManager {Kiwi.Shaders.ShaderManager}
+            * @param [params=null] {object}
+            * @return {Kiwi.Renderers.Renderer}
+            */
             function Renderer(gl, shaderManager, isBatchRenderer) {
                 if (isBatchRenderer === void 0) { isBatchRenderer = false; }
                 /**
@@ -16664,12 +16667,12 @@ var Kiwi;
                 }
             };
             /**
-           * Applies a single uniforms to the uploaded program
-           * @method applyUniform
-           * @param gl {WebGLRenderingCotext}
-           * @param name {string}
-           * @public
-           */
+            * Applies a single uniforms to the uploaded program
+            * @method applyUniform
+            * @param gl {WebGLRenderingCotext}
+            * @param name {string}
+            * @public
+            */
             ShaderPair.prototype.applyUniform = function (gl, name) {
                 var u = this.uniforms[name];
                 if (this.uniforms[name].dirty) {
@@ -26686,6 +26689,12 @@ var Kiwi;
                 * @public
                 */
                 this.masterGain = null;
+                /**
+                * Sound buffer
+                * @property _unlockedSource
+                * @type {any}
+                * @private
+                */
                 this._unlockedSource = null;
                 this._game = game;
             }
diff --git a/templateGame/src/states/intro.js b/templateGame/src/states/intro.js
index be6a216..dc861bd 100644
--- a/templateGame/src/states/intro.js
+++ b/templateGame/src/states/intro.js
@@ -12,5 +12,5 @@ TemplateGame.Intro = new Kiwi.State('Intro');
 
 
 TemplateGame.Intro.create = function () {
-    game.states.switchState("Play");
+	game.states.switchState("Play");
 }
\ No newline at end of file
diff --git a/templateGame/src/states/loading.js b/templateGame/src/states/loading.js
index 3c8c04b..db65888 100644
--- a/templateGame/src/states/loading.js
+++ b/templateGame/src/states/loading.js
@@ -25,15 +25,15 @@ var TemplateGame = TemplateGame || {};
 TemplateGame.Loading = new KiwiLoadingScreen('Loading', 'Intro', 'assets/img/loading/');
 
 TemplateGame.Loading.preload = function () {
-    
-    //Make sure to call the super at the top.
-    //Otherwise the loading graphics will load last, and that defies the whole point in loading them. 
-    KiwiLoadingScreen.prototype.preload.call(this);
 
-    /**
-    * Replace with your own in-assets to load.
-    **/
-    this.addImage('kiwiName', 'assets/img/kiwijs-name.png');
-    this.addSpriteSheet('icons', 'assets/img/kiwijs-icons.png', 100, 90);
+	//Make sure to call the super at the top.
+	//Otherwise the loading graphics will load last, and that defies the whole point in loading them. 
+	KiwiLoadingScreen.prototype.preload.call(this);
+
+	/**
+	* Replace with your own in-assets to load.
+	**/
+	this.addImage('kiwiName', 'assets/img/kiwijs-name.png');
+	this.addSpriteSheet('icons', 'assets/img/kiwijs-icons.png', 100, 90);
 
 };
diff --git a/templateGame/src/states/play.js b/templateGame/src/states/play.js
index 8ad0954..0c1f721 100644
--- a/templateGame/src/states/play.js
+++ b/templateGame/src/states/play.js
@@ -18,39 +18,33 @@ TemplateGame.Play.create = function () {
 	/*
 	* Replace with your own game creation code here...
 	*/
-  	this.name = new Kiwi.GameObjects.StaticImage(this, this.textures.kiwiName, 10, 10);
-  		
+		this.name = new Kiwi.GameObjects.StaticImage(this, this.textures.kiwiName, 10, 10);
 
-  	this.heart = new Kiwi.GameObjects.Sprite(this, this.textures.icons, 10, 10);
-  	this.heart.cellIndex = 8;
-  	this.heart.y = this.game.stage.height - this.heart.height - 10;
+		this.heart = new Kiwi.GameObjects.Sprite(this, this.textures.icons, 10, 10);
+		this.heart.cellIndex = 8;
+		this.heart.y = this.game.stage.height - this.heart.height - 10;
 
 
-  	this.sheild = new Kiwi.GameObjects.Sprite(this, this.textures.icons, 200, 200);
-  	this.sheild.cellIndex = 9;
-  	this.sheild.y = this.game.stage.height * 0.5 - this.sheild.height * 0.5;
-  	this.sheild.x = this.game.stage.width * 0.5 - this.sheild.width * 0.5;
+		this.sheild = new Kiwi.GameObjects.Sprite(this, this.textures.icons, 200, 200);
+		this.sheild.cellIndex = 9;
+		this.sheild.y = this.game.stage.height * 0.5 - this.sheild.height * 0.5;
+		this.sheild.x = this.game.stage.width * 0.5 - this.sheild.width * 0.5;
 
 
-  	this.crown = new Kiwi.GameObjects.Sprite(this, this.textures.icons, 10, 10);
-  	this.crown.cellIndex = 10; 
-  	this.crown.x = this.game.stage.width - this.crown.width - 10;
-  	this.crown.y = this.game.stage.height - this.crown.height - 10;
-
-
-  	this.bomb = new Kiwi.GameObjects.Sprite(this, this.textures.icons, 0, 10);
-  	this.bomb.x = this.game.stage.width - this.bomb.width  -10;
-
-
-  	//Add the GameObjects to the stage
-  	this.addChild(this.heart);
-  	this.addChild(this.crown);
-  	this.addChild(this.sheild);
-  	this.addChild(this.bomb);
-	  this.addChild(this.name);
-  
-}
+		this.crown = new Kiwi.GameObjects.Sprite(this, this.textures.icons, 10, 10);
+		this.crown.cellIndex = 10; 
+		this.crown.x = this.game.stage.width - this.crown.width - 10;
+		this.crown.y = this.game.stage.height - this.crown.height - 10;
 
 
+		this.bomb = new Kiwi.GameObjects.Sprite(this, this.textures.icons, 0, 10);
+		this.bomb.x = this.game.stage.width - this.bomb.width  -10;
 
 
+		//Add the GameObjects to the stage
+		this.addChild(this.heart);
+		this.addChild(this.crown);
+		this.addChild(this.sheild);
+		this.addChild(this.bomb);
+		this.addChild(this.name);
+};
diff --git a/tslint.json b/tslint.json
index 96ff302..6da1fe4 100644
--- a/tslint.json
+++ b/tslint.json
@@ -1,51 +1,51 @@
 {
   "rules": {
-    "class-name": false,
-    "curly": false,
-    "eofline": false,
-    "forin": false,
-    "indent": [false, 4],
-    "label-position": false,
-    "label-undefined": false,
-    "max-line-length": [false, 140],
-    "no-arg": true,
-    "no-bitwise": false,
-    "no-console": [true,
-        "debug",
-        "info",
-        "time",
-        "timeEnd",
-        "trace"
-    ],
-    "no-construct": false,
-    "no-debugger": true,
-    "no-duplicate-key": false,
-    "no-duplicate-variable": false,
-    "no-empty": false,
-    "no-eval": true,
-    "no-string-literal": false,
-    "no-trailing-comma": false,
-    "no-trailing-whitespace": false,
-    "no-unused-variable": false,
-    "no-unreachable": true,
-    "no-use-before-declare": false,
-    "one-line": [false,
-        "check-open-brace",
-        "check-catch",
-        "check-else",
-        "check-whitespace"
-    ],
-    "quotemark": [false, "double"],
-    "radix": false,
-    "semicolon": false,
-    "triple-equals": [false, "allow-null-check"],
-    "variable-name": false,
-    "whitespace": [false,
-        "check-branch",
-        "check-decl",
-        "check-operator",
-        "check-separator",
-        "check-type"
-    ]
+	"class-name": false,
+	"curly": false,
+	"eofline": false,
+	"forin": false,
+	"indent": [false, 4],
+	"label-position": false,
+	"label-undefined": false,
+	"max-line-length": [false, 140],
+	"no-arg": true,
+	"no-bitwise": false,
+	"no-console": [true,
+		"debug",
+		"info",
+		"time",
+		"timeEnd",
+		"trace"
+	],
+	"no-construct": false,
+	"no-debugger": true,
+	"no-duplicate-key": false,
+	"no-duplicate-variable": false,
+	"no-empty": false,
+	"no-eval": true,
+	"no-string-literal": false,
+	"no-trailing-comma": false,
+	"no-trailing-whitespace": false,
+	"no-unused-variable": false,
+	"no-unreachable": true,
+	"no-use-before-declare": false,
+	"one-line": [false,
+		"check-open-brace",
+		"check-catch",
+		"check-else",
+		"check-whitespace"
+	],
+	"quotemark": [false, "double"],
+	"radix": false,
+	"semicolon": false,
+	"triple-equals": [false, "allow-null-check"],
+	"variable-name": false,
+	"whitespace": [false,
+		"check-branch",
+		"check-decl",
+		"check-operator",
+		"check-separator",
+		"check-type"
+	]
   }
 }
