     @sprite?.trigger('action-needs-render', @sprite, action)
 
   buildMovieClip: (animationName, mode, startPosition, loops) ->
+    key = JSON.stringify([@spriteSheetPrefix].concat(arguments))
+    @spriteSheet.mcPool[key] ?= []
+    for mc in @spriteSheet.mcPool[key]
+      if not mc.inUse
+        mc.gotoAndStop(mc.currentFrame+0.01) # just to make sure it has its children back
+        return mc
+    
     raw = @thangType.get('raw')
     animData = raw.animations[animationName]
     @lastAnimData = animData

      @framerate = (action.framerate ? 20) * (action.speed ? 1)
      @childMovieClips = []
      @baseMovieClip = @buildMovieClip(action.animation)
      @frames = action.frames
      @frames = (parseInt(f) for f in @frames.split(',')) if @frames
      @animLength = if @frames then @frames.length else @baseMovieClip.timeline.duration

  childMovieClips: null

  constructor: (@spriteSheet, @thangType, @spriteSheetPrefix, @resolutionFactor=SPRITE_RESOLUTION_FACTOR) ->
    @spriteSheet.mcPool ?= {}
    @initialize(@spriteSheet)
    @addEventListener 'tick', @handleTick

  destroy: ->
    @handleTick = undefined
    @baseMovieClip.inUse = false if @baseMovieClip
    @removeAllEventListeners()
  
  # CreateJS.Sprite-like interface
