 
     return I.data
 
-  I.data.tileset.each (spriteData, i) ->
-    I.spriteLookup[i] = Sprite.fromURL(spriteData.src) 
+  window["#{I.animationName}SpriteLookup"] ||= []
+
+  unless window["#{I.animationName}SpriteLookup"].length
+    I.data.tileset.each (spriteData, i) ->
+      window["#{I.animationName}SpriteLookup"][i] = Sprite.fromURL(spriteData.src)
+
+  I.spriteLookup = window["#{I.animationName}SpriteLookup"]
 
   if I.data.animations.first().name != "" 
     I.activeAnimation = I.data.animations.first()
-    I.currentFrameIndex = I.activeAnimation.frames.first()
 
     I.data.tileset.each (spriteData, i) ->
       I.spriteLookup[i] = Sprite.fromURL(spriteData.src) 
   else if I.animationName
     loadByName I.animationName, ->
       I.activeAnimation = I.data.animations.first()
-      I.currentFrameIndex = I.activeAnimation.frames.first()
 
       I.data.tileset.each (spriteData, i) ->
         I.spriteLookup[i] = Sprite.fromURL(spriteData.src)  

      firstFrame = I.activeAnimation.frames.first()
      firstSprite = I.spriteLookup[firstFrame]

      I.currentFrameIndex = firstFrame
      I.width = firstSprite.width
      I.height = firstSprite.height 
    else

  advanceFrame = ->
    frames = I.activeAnimation.frames

    if I.currentFrameIndex == frames.indexOf(frames.last())
      self.trigger("Complete") 

      nextState = I.activeAnimation.complete

      if nextState
        I.activeAnimation = find(nextState) || I.activeAnimation
        I.currentFrameIndex = 0        
    else
      I.currentFrameIndex = (I.currentFrameIndex + 1) % frames.length

    sprite = I.spriteLookup[frames[I.currentFrameIndex]]

    I.sprite = sprite
    I.width = sprite.width
    I.height = sprite.height

  find = (name) ->
    result = null
