   goto: (actionName, @paused=true) ->
     @removeAllChildren()
     @currentAnimation = actionName
-    @baseMovieClip = @framerate = @animLength = null
+    @baseMovieClip.inUse = false if @baseMovieClip
+    if @childMovieClips
+      mc.inUse = false for mc in @childMovieClips
+    @childMovieClips = @baseMovieClip = @framerate = @animLength = null
     @actionNotSupported = false
 
     action = @thangType.getActions()[actionName]

    map = {}
    for localAnimation in localAnimations
      animation = @buildMovieClip(localAnimation.gn, localAnimation.a...)
      animation.setTransform(localAnimation.t...)
      map[localAnimation.bn] = animation
      @childMovieClips.push(animation)

    @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
