 
   #passthrough {
     private static var idCounter :uint = 0;
+    private static const MAX_POOL :int = 10;
+    private static var timerPool :Array = [];
+
+    /**
+     * Use this method instead of the constructor to create an instance
+     */
+    public static function create () :LzKernelTimer {
+        var timer:LzKernelTimer = timerPool.pop() || new LzKernelTimer();
+        timer._timerID = idCounter++;
+        return timer;
+    }
+
+    /**
+     * Allow timers to be pooled and reused later
+     */
+    public static function remove (timer:LzKernelTimer) :void {
+        if (timerPool.length < MAX_POOL) {
+            timerPool.push(timer);
+        }
+    }
 
     public function LzKernelTimer () {
         super(0);
-        this._timerID = LzKernelTimer.idCounter++;
     }
 
     private var _timerID :uint;

    import flash.events.TimerEvent;
    }#

    private const MAX_POOL :int = 10;
    private var timerPool :Array = [];
    private var timers :Object = {};

    /**
      * Creates a new timer and returns an unique identifier which can be used to remove the timer.
      */
    private function createTimer (delay:Number, repeatCount:int, closure:Function, args:Array) :uint {
        var timer:LzKernelTimer = this.timerPool.pop() || new LzKernelTimer();
        this.timers[timer.timerID] = timer;
        timer.delay = delay;
        timer.repeatCount = repeatCount;

            timer.removeEventListener(TimerEvent.TIMER_COMPLETE, this.timerCompleteHandler);
            timer.reset();
            delete this.timers[id];
            LzKernelTimer.remove(timer);
        }
    }

