             # no more stacked animations
             else
                 this._callback() if this._callback?
-                this.reset()
+                this._step = -1
+
+                # loopings that are numbers are finite
+                if typeof this._loop == "number"
+                    this._loop -= 1
+                    if this._loop > 0
+                        this._play()
+                    else
+                        this.reset()
+
+                # strings are infinite
+                else if typeof this._loop == "string"
+                    if this._loop == "alternate"
+                        this._direction = !this._direction
+                        this._play()
+                    else if this._loop == "infinite"
+                        this._play()
+
+            return this
+
+        # set loop
+        loop: (looping) ->
+            this._loop = looping
             return this
 
         # reset Moon animation

            this._callback = undefined
            this._step = -1
            this._stack = []

    window.Moon = Moon

        # play function for intern use
        _play: ->
            this._step += 1
            if this._direction
                step = this._step
            else
                step = this._stack.length - 1 - this._step

            
            anm = this._stack[step]
            if anm?
                # before animation function
                anm.beforeAnimation() if typeof anm.beforeAnimation == "function"
