function Interval(func, delay, lifetime) {
    this.func = func;
    this.delay = delay;
    this.lifetime = lifetime;
    this.interval = null;
}

var interval = Interval.prototype;

interval.pause = function() {
    clearInterval(this.interval);
    this.interval = null;
}

interval.resume = function() {
    if(this.interval === null) {
        this.start();
    }
}

interval.start = function(delay, lifetime) {
    this.stop();
    delay = delay || this.delay;
    lifetime = lifetime || this.lifetime;
    this.interval = setInterval(this.func, this.delay);
    if(lifetime) {
        var that = this;
        setTimeout(function() {
            that.stop();
        }, lifetime);
    }
}

interval.stop = function() {
    if(this.interval) {
        clearInterval(this.interval);
    }
    this.interval = null;
}

interval.once = function() {
    this.func();
}

interval.restart = interval.start;

module.exports = Interval;

@@ -1,16 +1,295 @@
+/**%0A * Interval.js%0A *%0A * @constructor%0A * @param %7Bfunction%7D func - The function you want to be called repeatly%0A * @param %7Bint%7D delay - milliseconds that should wait before each call%0A * @param %7Bint%7D lifetime - if set, clearInterval will be called after %60lifetime%60 milliseconds%0A */%0A
 function Interva
@@ -417,16 +417,43 @@
 = null;%0A
+    this.gcTimeout = null;%0A
 %7D%0A%0Avar i
@@ -483,16 +483,84 @@
 otype;%0A%0A
+/**%0A * Pause Interval - clearInterval without touching lifetime%0A */%0A
 interval
@@ -636,32 +636,84 @@
 rval = null;%0A%7D%0A%0A
+/**%0A * Resume Interval - setInterval if not set%0A */%0A
 interval.resume 
@@ -783,32 +783,277 @@
 art();%0A    %7D%0A%7D%0A%0A
+/**%0A * Start Interval%0A *%0A * @param %7Bint%7D delay - milliseconds that should wait before each call, defaults to this.delay%0A * @param %7Bint%7D lifetime - if set, clearInterval will be called after %60lifetime%60 milliseconds, defaults to this.lifetime%0A */%0A
 interval.start =
@@ -1280,16 +1280,33 @@
 %0A       
+ this.gcTimeout =
  setTime
@@ -1318,24 +1318,59 @@
 unction() %7B%0A
+            that.gcTimeout = null;%0A
             
@@ -1409,24 +1409,95 @@
 );%0A    %7D%0A%7D%0A%0A
+/**%0A * Stop Interval - clearInterval and clearTimeout for lifetime%0A */%0A
 interval.sto
@@ -1579,18 +1579,16 @@
 l);%0A    
-%7D%0A
     this
@@ -1605,18 +1605,149 @@
 = null;%0A
-%7D%0A
+    %7D%0A    if(this.gcTimeout) %7B%0A        clearTimeout(this.gcTimeout);%0A        this.gcTimeout = null;%0A    %7D%0A%7D%0A%0A/**%0A * Run func once%0A */
 %0Ainterva

add doc